Skip to content

Design System ​

The interface is a blank studio wall. Images do all the visual work. The UI should be almost invisible.

Influences: 032c magazine, Cactus studio, AnOther Magazine. Not a tech product — a creative instrument.

Colour Tokens ​

Dark Mode (default) ​

TokenValueUsage
--bg-page#0E0E0DPage background
--bg-panel#141413Panels, sidebars
--bg-card#1C1C1ACards, code blocks
--bg-code#1A1A18Code block background
--text-primary#E8E6E1Body text
--text-secondary#7A7870Secondary text
--text-muted#8A8880Muted text
--text-disabled#3A3935Disabled, placeholder
--accent#C8B89AHeadings, links, active borders, badges, highlights
--line-hairlinergba(232,230,225,0.07)Hairline borders
--line-strongrgba(232,230,225,0.14)Stronger borders

Light Mode ​

TokenValueUsage
--bg-page#F7F5F2Page background
--bg-panel#F2F0EDPanels
--bg-card#EEECEACards
--text-primary#1A1A18Body text
--text-secondary#6B6960Secondary text
--accent#C8B89ASame accent in both modes

Typography ​

Font Stacks ​

RoleFontWeight
Body, UI, code'DM Mono', monospace300 (normal), 400 (active states)
Headings, logo'Cormorant Garamond', serif300 italic (logo), 400 (section headings)

Scale ​

ElementSizeWeightNotes
Page title32px400Cormorant Garamond
Section heading22px400Cormorant Garamond
Sub-heading16px400Cormorant Garamond
Body text13px300DM Mono
Table text12px300DM Mono
Code11px300DM Mono
Section labels9px400DM Mono, uppercase, letter-spacing 0.08em-0.14em
Badges9px400DM Mono, uppercase, letter-spacing 0.08em

Rules ​

  • Line-height: 1.7 for body, 1.2 for headings
  • Never use bold (weight above 400)
  • text-transform: uppercase for section labels
  • letter-spacing: 0.08em to 0.14em on uppercase labels

Spacing ​

Base unit: 4px. Only these values are used:

TokenValue
--sp-14px
--sp-28px
--sp-312px
--sp-416px
--sp-624px
--sp-832px
--sp-1248px

Geometry ​

No border-radius anywhere. Square corners on everything — buttons, badges, cards, code blocks, scrollbar thumbs, inputs, panels.

Code Blocks ​

  • Background: #1A1A18
  • Border: 1px solid rgba(255,255,255,0.06)
  • Font size: 11px
  • Padding: 16px
  • Font: DM Mono, weight 300

Badges ​

  • Display: inline
  • Padding: 2px 8px
  • Font size: 9px
  • Letter-spacing: 0.08em
  • Border: 1px solid rgba(200,184,154,0.3)
  • Colour: #C8B89A
  • Text-transform: uppercase
  • Colour: #C8B89A
  • Underline with text-underline-offset: 2px
  • Hover: opacity 0.8

Scrollbars ​

  • Width: 4px
  • Track: transparent
  • Thumb: var(--line-strong)
  • No border-radius

Transitions ​

  • All opacity changes: 0.3s ease
  • All motion slow and deliberate
  • No bouncing, no springs
  • prefers-reduced-motion: reduce disables all animation

Layout ​

  • Content max-width: 720px, centred
  • No spinners — use pulsing text indicators for loading states
  • No emoji in UI

Component Inventory ​

Full-width input at top of viewport. DM Mono 16px. Background --bg-card with --line-hairline border. Focus state: --accent border. Search icon left, clear button right. Mode switcher (exact/explore) inline.

Result Grid ​

CSS Grid masonry layout. Dynamic column count by viewport width. Image tiles with hover overlay showing title. Lazy-loaded images with placeholder shimmer. Infinite scroll loading.

Detail View ​

Full-viewport overlay on --bg-page at 0.95 opacity. Centred image with metadata below. Fields: title, artist, date, medium, source link. Arrow keyboard navigation. Deep zoom button for IIIF sources. Colour palette strip. Interpret (cross-reference) button.

Board View ​

Freeform canvas. Drag-and-drop images from results. Pan and zoom the canvas. Persisted to localStorage.

Source Filter Sidebar ​

Slide-in panel from left. Sources grouped by category (8 categories). Toggle switches per source. Category colour indicators. Select all / deselect all per category.

Keys Panel ​

Slide-in panel from right. List of 13 key-required sources. Text input per source. Auto-save to localStorage on input. Visual indicator when key is set.

Toolbar ​

Fixed bottom bar. Icons: Search, Sources, Keys, Board, Theme toggle. Keyboard shortcut hints on hover.

Responsive Breakpoints ​

BreakpointColumns
1400px and above6
1024px and above4
768px and above3
480px and above2
Below 480px1

· AGPL-3.0 · app · github