WordPress plugin
5K+ installs4.8/5 from 34v2.2.6
HTML and PDF invoices for WooCommerce.
The site behaves like the tool I work in all day.
Editor tabs as navigation, a minimap, a status bar, and syntax colours used as meaning rather than decoration. This page is rendered from the same two stylesheets as every other page, so what you see here is what ships.
// tokens/colour
A VS Code palette. Surfaces step up by lightness, text has three levels, and the syntax colours each carry one meaning everywhere on the site.
#090B0ESunken sections, code wells#0D1014Page, tracks, active tab#14181DCards, panes, top and status bars#1B2027Hover, secondary button, cards in .inversergba(255,255,255,.10)Every divider and card edgergba(255,255,255,.18)Buttons, chips, hovered cards#E6E9EEHeadings, values. 15.7:1#B3B9C4Body copy, leads. 9.7:1#8A93A2Labels, meta, captions. 6.2:1#3B9EFFLinks, active tab, focus ring, h1 second clause. 6.8:1#0A74CCPrimary button fill, white text 4.8:1#0969BDPrimary hover, white text 5.4:1#3FB950Numbers, Active, live and "now". 7.5:1#D9A066Tags, strings, warnings, hindsight. 8.3:1#C586C0Kickers, keys, step numbers. 6.9:1#4EC9B0Types, JSON keys, inline code. 9.4:1#DCDCAAVersions, Maintenance. 13.5:1#7FA86BComments in panes (contact.txt). 7.0:1--gh0 #161B22
--gh1 #0E4429
--gh2 #006D32
--gh3 #26A641
--gh4 #39D353
Rule: green never decorates. If something is green it is a number, a live state or Active. Orange marks what needs attention, including what I would do differently.
// tokens/type
Inter Tight 700 for headings at −0.03em, Inter for reading, JetBrains Mono for every label, number, tag and the status bar. Vazirmatn covers Persian through a unicode range.
Aa
--tight · 700 · headings, card titles, quotes
Aa
--sans · 400/500 · body, leads, buttons
Aa
--mono · 400/500 · labels, data, tabs, code
اب
--font-persian · names and Persian strings
h1 · 44 to 76pxKeep them working
h2 · 30 to 44pxWhat eleven years adds up to
entry title · 40 to 68pxToolkit
claim · 22 to 30pxEvery fix written once.
h3 · 17pxA migration that cannot afford downtime.
.lead · 17 to 18pxSoftware on thousands of sites, still shipping this week.
body · 16px / 1.65Plain sentences, first person, one idea each.
.kicker · mono 13px// verified-figures
.label · mono 12px capsCounted on 27 August 2026
.fig__v · mono 26 to 34px169,000+
// tokens/space
Ten steps on a 4px base. Sections breathe at 64 to 96px; cards pad at 18 to 24px; grids gap at 12px. The shell is 1248px, less 104px on each side on desktop for the minimap.
--s14--s28--s312--s416--s524--s632--s748--s864--s996--s10128Layout tokens: --top 44px tab bar, --status 28px status bar, --mm-w 90px minimap, --gutter 16 to 24px. Nothing may scroll sideways at 360px.
// tokens/radius
Three radii, and borders instead of shadows. The only shadow is on floating things: the palette, a mock window, the toast.
--r-card 6pxcards, panes, buttons--r-chip 4pxchips, tags, pills, icon tiles--r-pill 100pxthe hero eyebrow only--shadow-overlayfloating layers only// tokens/motion
Motion confirms state; it never decorates. No count-ups, no parallax. Under prefers-reduced-motion: reduce every animation and transition drops to 0.01ms and reveals show at once.
--fast 160mshover, colour, borders--base 240mscarets, toasts--slow 420msscroll reveals1.2s sequenceheatmap paint, rails, tz bars--ease cubic-bezier(.2,.7,.2,1) for state, --ease-out cubic-bezier(.16,1,.3,1) for entrances. Pages cross-fade with view transitions (140ms out, 220ms in).
// chrome
Three fixed pieces make the site feel like an editor. They are the same on every page, and each page only sets two things: which tab is active (nav) and the file name in the status bar (file).
Mono 12.5px, one square per file kind: md blue, directory orange, log green, txt grey. Active tab has the page background and a 2px accent underline, aria-current="page". The strip scrolls sideways on phones and keeps the active tab in view.
90px on the right from 1100px up. A canvas abstraction of the page drawn from real element boxes, in the same syntax colours; the lighter band is the viewport. Click or drag to scroll. Hidden from assistive technology.
28px, mono 12px. Branch, active projects, releases, the current file (updated per section on long pages through data-file), live Sari time and the email. Low-priority items drop below 820px and 480px.
// components
Every component below is the real class. Hover and tab through them to see the states. Interactive targets are at least 44px tall.
.btnOne primary per view. Focus: 2px accent outline, 2px offset.
Chips filter (aria-pressed); tags label stack; pills carry status.
.sec-h// what-i-do
What I do
Kicker in purple mono, h2, right-aligned mono meta, lead.
.card · .card--linkWordPress plugin
5K+ installs4.8/5 from 34v2.2.6
HTML and PDF invoices for WooCommerce.
.figs · .figEvery figure links to its source or says where it was counted. Numbers are never animated.
.facts{{lifespan}}.code1{
2 "followers": 91,
3 "label": "BlackSwan Development"
4}
.paneA file with a title bar and actions. Used for bio.txt, contact.txt and hours.json.
.quote · .quotesHe is responsive, detail-oriented, whip smart, and a pleasure to work with.
Name links to the public source. Caption segments stack one per line. Never a "testimonials" section.
OPcache was not loaded at all.
.fit · .baA good fit when
The scope can be written down.
Not a fit when
You need it next week.
.stepsA short call
Thirty minutes.
A written scope
Before any code.
.faqYes.
The plus turns 45 degrees into a close mark.
.tbl| Name | Role | Years | Status |
|---|---|---|---|
| Pigment Dev | Co-founder and lead developer | 2025 to now | Active |
| Pepro Dev | Co-founder | 2020 to now | Active |
Below 720px each row becomes a stacked block.
.others.palette// template
Every product, service and project page runs in the same order, so a reader who has seen one knows where to look on the next.
Entry head .entry-head
Crumbs, mark and kicker, title, accent claim, lede, one primary and one secondary action, and a facts panel. A proof row or lifespan rail spans the bottom.
Stage
The one illustration: a mock, a flow, a request path. Built in HTML and CSS, never a stock image.
What it does, and why it is built that way
Features or problems as cards, then the decisions, each with its reason.
Evidence
A case, a release log, figures with sources. Admitting what went wrong goes in a hindsight block, unsoftened.
How it goes, fit, questions
Steps, the two-sided fit, and a short FAQ.
Close
The shared partial ({{> service-close}} or {{> product-close}}): the next step and every sibling page.
// writing
Accessibility floor: one h1 per page, no skipped heading levels, WCAG AA contrast (checked above), 44px targets, a visible focus ring, no horizontal scroll at 360px, and reduced motion respected. Full reference: web/DESIGN-SYSTEM.md.