PhotoX design system
Matchday: forest green and gold, condensed headlines, cards with real depth. Photographs stay the loudest thing on the page.
1 · Brand
Wordmark in Big Shoulders 900, uppercase. The mark is the camera glyph from our own icon set on a gold tile.
Positioning. Find and buy your photos from every school match, race and festival in South Africa.
A claim a parent understands on the touchline, not a tagline.
Direction. Chosen from three rendered options after industry research: Darkroom (Lightroom-style dark chrome), Gallery (Pic-Time premium white) and Matchday. Matchday won: it reads as South African sport at a glance, and cards with a coloured rail make the product panels feel like a product, not a spreadsheet.
Scene. Saturday 09:40 in July at Paarl Gimnasium: hard low winter sun, a parent on the touchline with a flask and a phone, wanting the try photo before the bus leaves.
2 · Colour
Committed, two colours: forest green (hue 158) on the rail, headings’ numbers and primary buttons; gold (hue 88) on the single primary action per screen. Contrast figures are measured with scripts/contrast.py.
3 · Status vocabulary
One pill per state, used identically by every role. Colour is never the only indicator: the label always says the word.
4 · Typography
Big Shoulders Display for every headline, uppercase, like a matchday programme. Public Sans for everything you read. JetBrains Mono for bibs, IDs, timestamps and money.
Upload a selfie or type a bib number. Facial and number recognition find every photo of one athlete across an entire event in seconds.
h1 product · 281st XV: Paarl Gim v Paarl Boys’ High
h3 product · 18Pipeline: 1 540 of 1 840 faces indexed
body · 15Photographers keep 80% of every sale. Payouts run every Thursday by PayFast split payment to the verified bank account on file. VAT at 15% is shown on every statement.
small · 13Photos remain the property of the photographer. Purchased downloads are licensed for personal use.
mono · numbersBib 2431 · No. 7 · PX-0101-0100 · R 1 234,50 · 08 Aug 2026 15:34
5 · Space, radius, elevation
Spacing · 4 px base
--s-1 … --s-7. Sections use --section (clamp 4–7.5 rem).
Radius · three, locked
Chunky and rounded. Pills for tabs, roles and status.
Elevation · one soft step
Card → floating layer → modal. Every card rests on a soft shadow; no card borders.
Density: control 42, row 46, card padding 24. Rules between rows inside cards; cards divide by shadow. Headings uppercase, weight 800.
6 · Controls
Buttons
Inputs
Drop up to 5 000 files or click to choose
JPEG, HEIC, CR3, ARW · originals stay private · watermarked previews generated automatically
7 · Surfaces & data
Table
Tabs
Notices
Key–value
- Gateway
- PayFast · split
- Commission
- 20% · R 15,80
- Photographer net
- R 63,20
List rows & popover
8 · Domain components
The three things only PhotoX has: the watermarked tile, the face and number boxes on a preview, and the processing pipeline.
Confidence
Sponsor slot
Processing pipeline
9 · Feedback & states
You don’t have access to this gallery yet
This photographer account is pending review. We reply within one working day.
The photographer sees the sale
The order you just placed is already in Johan’s sales, with commission split.
10 · Iconography
Lucide, 1.75 stroke, inlined from icons.js. One family, never emoji.
11 · Bans we enforce
- No coloured side-stripe borders on cards, alerts or list items.
- No gradient text, no glassmorphism, no purple-blue gradients.
- No hero-metric template, no three equal cards as a section’s answer, no eyebrow above every section, no numbered section scaffolding.
- No dark mode. Green stays on the rail and key numbers; gold only on the one primary action per screen.
- No emoji as icons, no second icon family, no icon fonts.
- No fake screenshots built from divs. No stock handshakes or lightbulbs.
- No text on a photograph without a scrim. No scale transforms on hover.
- No placeholder text, no dead links, no inert controls: every button navigates, mutates, opens a layer or explains itself in a toast.