editorzero — design exploration v2

12 deliberately distinct directions, each rendered across five screens (dashboard · documents list · reading view · editor with an agent co-editing · admin/login). Ordered by the curator's ranking. First pass was rejected as too AI-generic / Claude-like — these are steered hard away from warm-paper + earth tones + safe minimal-SaaS.

Curator — clusters & where to push

SIX territories emerged. The set is rich but lumpy — the brutalist/structural-grid lane is over-represented (4 entries), so diversity discipline matters when picking finalists. 1) DARK TERMINAL / PHOSPHOR-CRT — {phosphor, phosphor-retro-computing}, with null-field as a dark-HUD bridge. True-black or graphite canvas, monospace-forward, phosphor accents, cyan/amber or cyan/violet beam language. The most decisive escape from the rejected warm-paper zone. PUSH: phosphor (CRT-black) — it is the cleaner, higher-contrast execution; retro-computing is the same idea with failing AA and costume risk. Collapse the two into one direction. 2) NEO-BRUTALIST / STRUCTURAL-GRID ACID — {nullstate, grid-noir, nulpunt}. Cool off-white, exposed coordinate grid, hard offset slabs, 0 radius, one or two acid fills as human/agent voices. All four-cluster designs score distinctiveness 9 but this is also the most recognizable 2023-25 trend (the brief's 'looks authored' bar is met, but the 'never-seen' ceiling is capped). PUSH ONE: nulpunt — its single-hue discipline is the most authored constraint and least trend-generic; grid-noir and nullstate are strong but redundant alongside it (nullstate also ships a hero-shot collision). 3) BAUHAUS / CONSTRUCTIVIST — {konstrukt}. A distinct sub-pole of the structural family, but the square=human / circle=agent shape-opposition makes it conceptually its own thing. PUSH: yes — it is the only direction whose brand idea is a CONCEPT (peerage as shape) rather than a palette, which is the most defensible long-term identity. 4) COLD-SWISS INSTRUMENT / ENGINEERED-LIGHT — {meridian-zero}, with null-field's light side adjacent. Graphite/steel/cold-paper, hairline ledger tables, ultramarine+cyan, drafting-table rigor. PUSH: meridian-zero — the most balanced craft+UX+fit profile in the whole set; the safest direction that still clears the anti-generic bar. 5) INDUSTRIAL HARDWARE / INSTRUMENT-PANEL — {flightdeck}. Brushed-aluminium, milled bezels, LED pips, gauges, functional amber/teal indicators. A genre entirely its own. PUSH: yes for variety, but it is the riskiest on editor density + has the most fixes outstanding (dark hero in a light-default brief, slash/card overlap, AA-6). Carry it as the bold-hardware option, not the default. 6) EDITORIAL / NORDIC-COOL — {meridian, halling}. Dark-rail-plus-cool-light or all-cool-Nordic, with a serif quarantined to reading body. The most 'serious knowledge-product' feeling, calmest for 8-hr long-form work, best feasibility+accessibility. PUSH: meridian over halling — meridian's zero/meridian conceit + emerald/sapphire identity give it more ownable originality; halling's chrome is the most genre-typical and its signature agent caret fails AA. NOTE the one shared risk: editorial-serif can drift back toward the rejected 'tasteful serif' tell if not handled with conviction.

Recommendation

Take THREE directions into round 2 (the founder picks one to build, but these three are genuinely distinct and each de-risks a different bet): PRIMARY — meridian-zero (cold-Swiss instrument). The most balanced, lowest-risk, highest-craft direction: best editing-UX (9) and fit (9) in the set, smart non-color redundancy for colorblind users (square monogram vs notched square), and it clears the anti-generic bar decisively. It is the direction I'd ship if forced to choose one today. Its only ding is that cold-Swiss-devtools is a recognizable premium dialect (distinctiveness 8 not 9) — but 'recognizably premium' is a feature for a serious self-hosted knowledge product, and it carries the least execution risk. Pre-build gates: AA on --steel-2 + small green status (one-token), and a real anchoring/stacking model for the margin suggestion cards vs the right rail. BOLD ESCAPE — phosphor (CRT-black terminal). If the founder wants the single most memorable, most-defensibly-not-AI answer, this is it. The terminal-as-design-system thesis with cyan=human/amber=agent as a literal beam language is the clearest possible rebuttal to the 'looks like Claude' rejection, and the tracked-suggestion block is the standout moment across all 12. The real decision it forces is a deliberate one: full-monospace body prose for long-form docs is a brand-defining bet some writers will love and some will fatigue under — make that call consciously (consider a humanist-fallback toggle). Pre-build gates: lift ink-faint/ink-low for text roles, make scanline/glow opt-out + reduced-motion-aware over the live caret, ship glyphs as an icon set. OWNABLE CONCEPT — konstrukt (Bauhaus square=human/circle=agent). The only direction whose brand IDEA is a concept rather than a palette, which makes it the most ownable identity long-term and the one least likely to age into a trend. It also has the tightest thesis-to-architecture fit (the shape system literally encodes the peer-principal model). Carry it as the high-identity option. Pre-build gates: make agents ALWAYS a circle (drop the hexagon) rendered as SVG, reserve a gutter so inline agent flags don't occlude text, and use --vermilion-dk for small white text. If a fourth slot opens, add meridian as the 'calm serious-product' hedge (best feasibility + accessibility, calmest for 8-hr work) — but flag that its editorial-serif chrome is the closest of the finalists to the rejected 'tasteful serif' tell and must be handled with conviction to stay distinct. Cross-cutting, independent of which wins: (1) EVERY finalist needs the same two fixes — a single-token AA darken on its faint-metadata color, and a reduced-motion policy the mocks lack — so bake both into the design-system token contract (task #17) rather than per-theme. (2) The recurring hero-shot collision (slash menu / suggestion card / agent flag overlapping body text) is a shared positioning contract, not a per-design bug — solve it once with a Floating-UI anchoring primitive + an inline-gutter reservation policy in the editor layer (task #18). (3) Resolve the detached-suggestion-CARD vs ADR-0032 inline-anchored model now, before the editor slice cargo-cults the mock: production suggestions are inline ins/del marks with a gutter/hover accept control, not a pulled-out card — null-field, meridian-zero, and several others draw the card detached, which is a demo conceit, not the architecture.

Headless-UI / Tiptap signals (input to the substrate decision)

Across all 12 designs the SAME small set of editor + app primitives recurs, and every critique maps them 1:1 onto the same Tiptap v3 / ProseMirror substrate the repo already committed to (ADR 0031: owned thin block layer; ADR 0032: owned track-changes via prosemirror-changeset + Yjs). The recurring needs: EDITOR PRIMITIVES (identical across all 12, all custom Tiptap work regardless of any component library): - EditorContent host + a thin owned block layer (our node names/marks — ADR 0031). - Block NodeView with a hover gutter handle (drag ⠿ + insert +). Every design has this; it is a DragHandle / NodeView decoration, NOT something a UI kit ships. - Formatting toolbar driven by editor.isActive() — appears as a BubbleMenu (selection) and/or a fixed/floating menu in all 12. - Slash menu = @tiptap/suggestion popover, in EVERY design with an 'Ask an agent' / AI-commands group as a first-class item. - CollaborationCursor (y-prosemirror awareness) for human + agent carets, colored by principal.kind — the core visual in all 12. - A custom suggestion/track-change mark+decoration set (inline ins/del) anchored by Yjs RelativePosition, with an Accept/Reject/Reply review affordance. This is the signature primitive and it is editorzero-specific — no headless kit provides it. - A right-rail PresenceList + SuggestionQueue/change-feed bound to awareness + the changeset log. RECURRING DEFECT WORTH NOTING: 4+ designs (nullstate, meridian-zero, grid-noir, flightdeck, konstrukt) render the slash-menu / suggestion-card / agent-flag colliding or occluding body text in the hero shot. This is a POSITIONING/STACKING contract the design-system layer must own centrally (Floating UI anchoring + a z-index/inline-gutter reservation policy), or every theme reproduces it. That argues for a shared headless-popover/positioning primitive used by slash menu, bubble menu, suggestion card, and presence flag alike. GENERIC APP PRIMITIVES (admin/tree/lists/settings — the only place a kit helps): Tree (collections), DataTable (docs, audit, members), Dialog/Sheet, DropdownMenu, Tabs, Toggle/Switch (segmented), Tooltip, Toast, Badge/Chip, command palette (cmdk-style). These are conventional and a headless kit covers them well. THEMING + ANIMATION (decisive for the kit choice): EVERY design is built entirely on CSS custom properties with the same shape — a token layer (palette/ink/line/radius/shadow/glow) that themes from :root and flips via [data-theme]. The mocks PROVE the spread: 22-37 distinct custom props each, but inconsistent reduced-motion guards (most: 0; nulpunt: 1) and inconsistent theme-switch hooks. Animation is uniformly tiny transform/opacity (blink carets, pulse presence dots, 6px rise-on-arrival), all of which want a prefers-reduced-motion off-switch the mocks mostly lack. So the design system must STANDARDIZE: (a) a semantic token contract every theme implements (so a theme = a token file, the brief's hard requirement), (b) a reduced-motion policy, (c) the popover/anchoring contract above. VERDICT FOR THE KIT DECISION: ShadCN is the WRONG fit. ShadCN's value is owned-source + Tailwind, but (1) it is Radix-based and styled via Tailwind utility classes + a fixed CSS-variable convention, which fights the brief's 'everything themeable via OUR CSS custom-property tokens' requirement and the SSOT token contract these designs assume; (2) it provides ZERO of the load-bearing editor primitives (block handle, slash menu, collab cursor, track-change marks, suggestion card) — those are 100% custom Tiptap/ProseMirror work in all 12 designs, which is the bulk of the build; (3) it pulls a Tailwind opinion into a token-first system. RECOMMENDED: adopt a HEADLESS-PRIMITIVES library (Radix Primitives directly, Ark UI, or React Aria) for ONLY the generic app shell (Dialog, DropdownMenu, Tabs, Tooltip, Popover, Toast, Tree, Table-helpers) — unstyled, ARIA-correct, you bring the CSS-var tokens — and ROLL OUR OWN for the entire editor surface + the shared Floating-UI anchoring/positioning primitive, since that is custom regardless and the designs converge on it exactly. Floating UI (which Tiptap already uses) should be the single anchoring engine for slash/bubble/suggestion/flag to kill the recurring collision. Net: headless primitives for the shell, owned components for the editor, a strict semantic-token contract + reduced-motion policy as the theming substrate — NOT ShadCN, NOT Mantine (task #17 already excludes Mantine).

MERIDIAN ZERO

meridian-zero
open full ↗
#1 score 9·distinct 8/10·editing 9/10·feasible 8/10·a11y 7/10·✓ distinct

An engineered International-Typographic instrument for docs — strict visible grid, hairline rules and tabular data rendered cold in graphite/steel/paper-white with one electric ultramarine, where AI agents are a second saturated cold signal (cyan) so human and machine co-editors are legible at a glance.

Avoids AI-default: No warmth anywhere: the "paper" is a cold blue-grey (#f4f6f8), the ink is a blue-cold graphite (#0b0e14), and there is zero cream/bone/sand in any channel. The accents are deliberately non-earth — saturated ultramarine #1f3cff and electric cyan #00b6c4 — the exact opposite of clay/oxblood/terracotta/rust/tan. It refuses the minimal-SaaS-with-a-tasteful-serif default: the display face is the Space Grotesk grotesque (not a humanist serif), all metadata is JetBrains Mono with tabular numerics, structural radius is 0px (no soft rounded cards), and the layout exposes its grid like an engineering drawing — coordinate labels (LAT/LON 00.000), screen IDs (SCR.A–E), ordinal counters (01, SG·01, SP·01, D·01), drop-shadow offsets that are hard-edged blocks (3px 3px 0) not blurred glows. It reads as a precision instrument authored by a Swiss studio, not as a friendly AI-assistant template, and it is nothing like Linear/Notion/Vercel because the data-density, hairline tables, and monospaced ledger aesthetic are pushed past comfortable-SaaS into drafting-table rigor.

Fonts Space Grotesk (display / logotype / headings) — SIL OFL 1.1, Archivo (UI + body text) — SIL OFL 1.1, JetBrains Mono (data, metadata, ordinals, code) — SIL OFL 1.1
papersurfacesurface-sunkinkink-2 (steel)steelhairlineultramarine (human / primary accent)ultramarine-ink (AA text)agent (cyan, machine signal)agent-ink (AA text)ok
Motion Restrained and mechanical, never decorative. A blinking human caret (steps(1), no easing — a hard terminal blink); a slow opacity pulse on "live" agent dots and the agent caret flag (the one element allowed to feel alive); 250ms hairline progress bars that wipe in along the bottom edge of space cards on hover; instant 120ms background swaps on rows/nav (no fades); a 1px translateY press on buttons. The whole system favours discrete state changes over smooth transitions — it should feel like an instrument toggling, not a marketing page breathing.
Tiptap fit The editor maps cleanly onto Tiptap v3 + the owned thin block layer (ADR 0031) fused with track-changes (ADR 0032). Node types: heading (H1 title block / H2 with ordinal prefix), paragraph, codeBlock (with the header chrome), table, blockquote→callout, plus a custom blockHandle decoration (the ⠿ drag + "+" insert gutter on hover). Marks: bold/italic/underline/strike/inlineCode standard, plus two custom marks central to the brand — suggestionInsert and suggestionDelete (rendered as cyan-underlined add / struck-through del), backed by prosemirror-changeset over Yjs snapshots. Collaboration uses y-prosemirror CollaborationCursor, themed per principal: a human cursor (ultramarine caret + 16% selection box) and an agent cursor whose caret label is the floating monospace flag with a pulsing dot. Primitives needed: (1) a BubbleMenu/FloatingMenu for the format toolbar incl. the "✦ Ask agent" command; (2) a slash-command SuggestionMenu (Tiptap suggestion util) with BLOCKS + AGENT ACTIONS groups; (3) a NodeView/decoration for block handles; (4) a margin-pinned SuggestionReviewCard widget decoration anchored to a tracked change via Yjs RelativePosition, with accept/reject dispatching changeset transforms; (5) a presence list + tracked-changes ledger reading the same awareness + changeset state shown in the right rail. Every accept/reject and live edit emits exactly one audit entry (invariant 3) and routes content mutations through ctx.transact (invariant 7).
Critique Does NOT read as AI-generated or Claude-like. It fully escapes the rejected zone: "paper" is a cold blue-grey (#f4f6f8), not cream/bone; accents are saturated ultramarine + electric cyan, the exact opposite of clay/oxblood/terracotta/rust/tan; display face is the Space Grotesk grotesque (Archivo + JetBrains Mono), not a humanist serif; radius is 0px everywhere structural; shadows are hard-edged offset blocks (3px 3px 0), not blurred glows. The engineering-drawing devices (SCR.A–E screen IDs, SP·01/SG·01/D·01 ordinals, LAT/LON 00.000, crosshair "zero" mark, hairline-grid ledger tables) are specific and consistently applied. Clearly studio-authored with a real POV, and the data density pushes past comfortable-SaaS — not a Linear/Notion/Vercel clone. Why distinctiveness is 8 not 10: cold-Swiss-grotesque + mono + cobalt + visible grid is itself a recognizable premium-devtools/fintech dialect. This is an excellent instance of a known-cool genre, not a brand-new visual language. A long way from generic, but it rhymes with a class of engineered dashboards rather than being sui generis. Strongest idea — the two-signal human/agent system (ultramarine=human, cyan=agent) — is executed coherently across avatars (square cobalt monogram vs notched cyan square = smart non-color redundancy for colorblind users), carets, presence chips, rails, suggestion card, scope bars, admin Kind column. This is the "peer co-editors" thesis made legible at a glance and is the part that most proves the brief was understood. Editing UX (signature editor, SCR.D) is the highlight: live agent caret with floating mono flag, agent-typing highlight, inline tracked insert/delete, pinned margin review card with accept/reject + rationale, right-hand changes ledger, CRDT-converged presence row, slash menu with a dedicated AGENT ACTIONS section, block hover handles. Models the human+AI collaborative editor better than most shipping products. Practical risks: the margin suggestion card is absolutely-positioned at right:-256px off-canvas (will collide with the 268px right rail in production; needs real anchoring + a stacking strategy for multiple overlapping suggestions); a lot of one cyan hue stacks in a small area (typing underline + caret + flag); the 720px editor column beside a 268px rail will get tight. Feasibility with Tiptap + themeable layer is good: flat :root token set, no hard-coded one-offs in the system classes, radius/rules/spacing all variabled. Tiptap maps cleanly — marks/nodes for the blocks shown, decorations for remote carets/labels and tracked-change insert/delete, NodeViews for callout/codeblock/suggestion-card. Friction: heavy hairline-grid tables + absolutely-positioned margin cards are layout work that needs care for robustness/responsiveness; a handful of presentational colors are inlined as style="..." in the HTML rather than classed (mock shorthand, fine, but tokenize before it becomes the real component layer). Accessibility verified by computed contrast, mostly strong with concrete must-fix spots. Excellent: ink-on-paper 17.8, ink-1 13.0, ultra-ink links 11.9, agent-ink 6.9, white-on-ultra button 6.67, agent-flag text 5.33. Good discipline: raw cyan #00b6c4 (2.47 as text = fail) is reserved for fills/rules/dots/caret bars only; all cyan TEXT uses --agent-ink — a source audit confirms raw cyan is never a text color. Failures to fix: --steel-2 #97a2b0 used for ordinals, doc paths, slash-menu keys and empty-block placeholder text at ~2.4–2.6 contrast (fails AA for small UI text); status/ok green is AA-large only (3.9–4.4) yet rendered at 9.5px. Also heavy reliance on 9–10.5px mono labels makes even passing ratios fragile. All fixable by tightening two or three tokens / bumping a few font sizes — not structural — but as drawn it does not fully clear the brief's AA bar, so accessibility is 7. Fit is 9: "editor zero / clean slate / origin" engaged literally (crosshair origin mark, LAT/LON 00.000, the ordinal counting motif), and audit-completeness, real capability names (doc.suggest/doc.publish/collection.create/doc.restore), agent scope tiers with per-row revocation, self-hosted framing, and the activity "ledger" all map directly to the product's stated invariants. Precision-instrument aesthetic matches the deterministic/audit-complete ethos far better than a friendly-SaaS skin.

PHOSPHOR

phosphor
open full ↗
#2 score 8.9·distinct 9/10·editing 8/10·feasible 7/10·a11y 6/10·✓ distinct

A terminal that grew up into a design system: a true-black, monospace, command-palette-first workspace where humans and AI agents are rendered as two literal phosphor beams — cyan for human, amber for agent — so peer co-editing is a colour language, not a UI afterthought.

Avoids AI-default: It runs from the exact opposite end of the rejected territory. The canvas is true-black CRT (#05070a) with a faint scanline+grid wash — zero warm paper, cream, or bone anywhere. The accent system is high-energy phosphor (green #3dffa8 / cyan #46d4ff / amber #ffb645 / violet / magenta), so there is no clay, oxblood, terracotta, rust, or tan earth-tone in the file. Type is 100% monospace (no tasteful-serif default) — JetBrains Mono for chrome, IBM Plex Mono for body prose. The interaction model is command-palette + vim/tmux status bar + box-drawing tree glyphs + a blinking block cursor as the brand mark, which reads as authored-by-a-strong-studio rather than Vercel/Linear/Notion minimal-SaaS. The "zero" motif is engaged literally: a slashed-zero wordmark (0⁄) and a phosphor block caret. Crucially the agent-native soul is shown, not stated — every screen carries the cyan-human / amber-agent duotone, the editor has a live amber agent caret + a tracked amber suggestion block, and admin puts user and agent rows in one shared principal table.

Fonts JetBrains Mono — SIL Open Font License 1.1 (UI, headings, code, wordmark), IBM Plex Mono — SIL Open Font License 1.1 (document body / reading prose)
bgbg-panelbg-insetphosphor-green (system/brand)cyan (HUMAN channel)amber (AGENT channel)violet (publish/external)magenta (destructive)inkink-midink-lowline
Motion Restrained and diegetic — motion only where a real terminal would move. A blinking block cursor on the wordmark and headings; a typewriter that cycles real ez commands in the command bar (gated behind prefers-reduced-motion); soft pulsing presence rings + a "● live editing" pulse for active agents; the agent suggestion block animates in with a 6px rise-and-fade so a freshly-arrived AI edit is felt, not just shown; phosphor glow on primary actions. No decorative parallax or easing theatre — the static screens stand on their own.
Tiptap fit The editor screen maps cleanly onto a Tiptap v3 (ProseMirror) rich editor with a thin block layer. (1) The canvas is the Tiptap EditorContent; each .blk is a block node with a NodeView providing the gutter handle (+ insert + ⠿ drag) — a SortableJS/dnd drag wrapper over node positions. (2) The top formatting bar is a static toolbar bound to chainable mark/node commands (toggleBold/Italic/Strike/Code, setHeading, toggleBulletList, toggleTaskList, insertTable, setLink) reading isActive() for the lit state; the same commands back a BubbleMenu on selection. (3) The slash menu is a FloatingMenu / suggestion-plugin popover (trigger "/") listing block types incl. an "Ask an agent…" item that dispatches a delegated capability call. (4) Peer presence (cyan human caret-with-flag, amber agent caret-with-flag) is the CollaborationCaret/Collaboration extension over a Y.Doc — the same Y.XmlFragment the product already uses — with awareness colour bound to principal.kind. (5) The tracked agent suggestion is a custom "suggestion" Mark/Decoration extension carrying author + capability + acting_as metadata, rendered as a decoration range with inline ins/del diff spans and an Accept/Reject/Suggest-change widget whose Accept commits the marks into the doc (one audit entry). Component primitives needed: EditorContent, custom block NodeView (handle/drag), Toolbar, BubbleMenu, FloatingMenu/SlashCommand suggestion, Collaboration + CollaborationCaret (Yjs awareness), a SuggestionMark + decoration set, a presence/awareness sidebar, and a status bar bound to editor focus/selection state.
Critique Rendered all 5 screens + zoomed the editor suggestion block and ran a programmatic WCAG audit. DOES IT STILL LOOK AI/CLAUDE? No — and decisively so. True-black CRT canvas (#05070a) with scanline+grid wash; phosphor accent system (green/cyan/amber/violet/magenta); 100% monospace (JetBrains Mono chrome + IBM Plex Mono prose). Verified the token file and the pixels: ZERO warm paper/cream/bone, ZERO clay/oxblood/terracotta/rust/tan. It reads authored-by-a-studio (vim status bar, box-drawing tree, command prompt, ## heading markers, ▸ bullets), not Vercel/Linear/Notion-minimal and not Anthropic-warm. DISTINCTIVENESS (9): The terminal-as-design-system thesis is executed with real conviction and is internally coherent across every screen. The cyan=human / amber=agent duotone is a genuine colour LANGUAGE, not a label — present in carets, presence rail, activity feed, principal table, space chips. The editor's tracked agent-suggestion block (amber frame, green inserts w/ underline, magenta strikethrough, "+38/−6 · will write 1 audit entry") is the strongest single moment and is genuinely memorable. Held back from 10 only because true-black + phosphor + scanlines is itself a recognizable genre (Warp/cyberpunk-terminal), so it's a bold pick within a known idiom rather than a wholly novel one; and the slashed-zero wordmark under-resolves at small sizes (reads near-parenthesis). FIT (9): Exceptional alignment with the editorzero brief. "Principals are polymorphic / agents-as-users is literal" → one shared principal table in admin with a KIND column + per-agent human-owner attribution + scope chips. "Every mutation = one audit entry" → surfaced in the suggestion diff line, activity feed cap labels (doc.update/doc.publish/doc.restore), and edit-trace. Markdown-fidelity tiers (lossless/directive/opaque) get their own column. Capability names (doc.create, doc.move, acting_as) are shown as first-class. The "/agents" + "Ask an agent…" slash entry makes delegation a block action. This is the agent-native architecture made visible. EDITING-UX (8): Doc + editor screens are strong. Block handles (+ / drag), slash menu with descriptions+shortcuts, formatting toolbar, presence rail with scope + acting_as, live carets with name flags, "synced · CRDT converged" affordance, INSERT/NORMAL modes. The suggestion accept/reject/suggest-change flow is excellent and exactly the human+agent-as-peers interaction the brief demands. Reading view (C) stays readable despite full mono. Reservations: full-monospace BODY prose at 14px is high-character-cost for long-form docs and will fatigue some writers (mono-for-reading is a taste bet that not all users share); the dense chrome (status bars, traces, glyph rails) is gorgeous but is a lot of simultaneous signal for a daily writing surface — could feel busy vs. a calm canvas. FEASIBILITY (7): Buildable on Tiptap + a themeable component layer; everything is CSS-custom-property tokenized (palette/ink/line/geometry all vars, retheme by overriding :root). Tiptap cleanly supports the block handles, slash menu, collab carets (y-prosemirror cursors → just swap the cyan/amber colors), and a tracked-suggestion mark/decoration. Concerns that cost points: (a) the scanline overlay uses position:fixed + mix-blend-mode:multiply over the WHOLE viewport incl. the editing surface — over a live ProseMirror canvas this risks caret/selection legibility and repaint cost; should be opt-out / reduced-motion aware (the typewriter JS already respects prefers-reduced-motion, the scanline does not). (b) Heavy use of box-drawing/geometric glyphs (◇ ▰ ¶ ⠿ ≋ ⛁ ⚿) as iconography is font-dependent and will render inconsistently across OSes unless shipped as an icon set rather than literal glyphs. (c) Many phosphor glows (box-shadow/text-shadow) are fine but want a "flat" theme token to disable for low-end displays. ACCESSIBILITY (6): Audited contrast. PASSES AA comfortably: primary ink 15.4:1, ink-mid 6.6:1, and every accent (green 15.4, cyan 11.6, amber 11.6, violet 7.8, magenta 6.9). REAL FAILURES to fix: --ink-faint #2c3a37 = 1.70:1 on bg and it is NOT purely decorative — it carries doc IDs (doc_01JQ8…a7f2), "by <name>" sub-labels, and timestamps (.when small, .last small, .id) → those fail AA badly. --ink-low #4f655f = 3.0–3.2:1: OK as large text but it's used on 10px uppercase section labels and chrome, which is below AA for that size. Also: the human/agent channel distinction leans on colour (cyan vs amber) — there ARE redundant text labels (USER/AGENT chips, names) so it's not colour-alone, but the duotone dots/carets/rails should keep their text/shape pairing rigorously. Fixes are pure token edits (lift ink-faint to ~#52635f+ for text roles, keep the dim value only for hairline rules), so the ceiling is high — but as-drawn it does not fully meet the AA hard constraint. VERDICT: Accept as a top-tier direction. It is the clearest answer to "make it NOT look AI-generated," and uniquely among safe options it encodes the product's agent-peer thesis into the visual system rather than bolting it on. Ship-blocking before build: (1) raise ink-faint/ink-low where they carry text to clear AA; (2) make the scanline/glow overlay opt-out + reduced-motion-aware and verify it doesn't degrade the Tiptap caret; (3) decide deliberately on full-mono body prose for long docs (consider an IBM Plex Mono → optionally a humanist fallback toggle, or accept mono as a brand-defining bet); (4) ship glyphs as an icon set, not literal unicode; (5) resolve the slashed-zero wordmark at small sizes.

KONSTRUKT

konstrukt
open full ↗
#3 score 8.8·distinct 9/10·editing 8/10·feasible 8/10·a11y 7/10·✓ distinct

A constructivist workspace where the "zero" is a perfect circle and the human/agent peerage is encoded as a literal shape-opposition — humans are squares, agents are circles — carried through thick black rules, solid offset shadows, and three confident Bauhaus primaries on cool paper.

Avoids AI-default: It inverts every rejected move. No warm paper / cream / bone: the ground is a cool bright off-white (#F4F3EE) over a visible grey structural grid. No clay / oxblood / terracotta / tan: the accents are hard Bauhaus primaries — ultramarine cobalt, chrome yellow, vermilion — used as flat colour-blocks, not tints. No tasteful-minimal-SaaS-with-a-serif: there is zero serif anywhere; display type is geometric grotesque (Space Grotesk) and everything structural is set in IBM Plex Mono. It reads nothing like Vercel/Linear/Notion because the surface is built from drawn structure — 2.5–4px ink rules on every container, 6px solid (un-blurred) offset shadows, hairline grid behind the canvas, a printed-plate barcode masthead — rather than soft cards, blurred shadows, and rounded grey panels. The signature is conceptual, not decorative: square-vs-circle is the entire identity system (tokens, doc marks, space glyphs, slash icons, the logo's quartered ring) so the brand says "humans and agents are peers" structurally rather than via a tagline. This is overtly authored Memphis/Bauhaus, the opposite pole from the Anthropic/Claude editorial-warmth aesthetic.

Fonts Space Grotesk (SIL OFL 1.1) — geometric-grotesque display, headings, buttons, big numerals, Archivo (SIL OFL 1.1) — grotesque UI/body sans, labels and prose, IBM Plex Mono (SIL OFL 1.1) — doc-ids, eyebrows, metadata, code, all structural microcopy
paperpaper-2inkink-softcobaltcobalt-inkcobalt-washvermilionvermilion-dkchromechrome-inkhair
Motion Restrained and structural, never floaty. (1) Buttons and suggestion controls translate diagonally into their solid offset shadow on hover (-1px) and press flush into it on active (translate 2px, shadow shrinks 6→2px) — the block "presses" like a physical key. (2) A square-cut text caret and the cobalt agent caret blink on a 1.05s step interval; the agent caret carries a floating cobalt name-flag with its own hard 3px ink shadow, so the agent's live position is unmistakable. (3) Live-status dots (red square/circle) pulse-scale on a 1.4s ease loop to signal an agent actively editing. All motion respects prefers-reduced-motion implicitly by being tiny transforms; nothing parallaxes, fades long, or eases over 120ms except the two ambient blink/pulse loops.
Tiptap fit The editor screen maps 1:1 onto a Tiptap v3 ProseMirror schema. Editable body = EditorContent over a doc of nodes: heading (levels 1–2, the geometric .eh1/.eh2 with a chrome/cobalt square/disc ::before bullet), paragraph (.ep), codeBlock, blockquote, bulletList/orderedList — each is a Tiptap Node with NodeView-rendered block furniture. Block handles (.handle: + insert + ⠿ drag) = the Tiptap DragHandle / NodeViewWrapper gutter (extension-draggable + a custom drag-handle extension). Formatting toolbar = a BubbleMenu / fixed menu bound to Bold/Italic/Underline/Strike marks (active state from editor.isActive(...)), plus Link, Code, and heading/list toggles. Slash menu = the Suggestion utility (@tiptap/suggestion) keyed on "/", rendered as a tippy/floating panel filtering block-insert commands; the "Ask agent to draft" item dispatches a custom command. The human selection highlight = a custom highlight mark. THE SIGNATURE maps onto collaboration primitives: the live agent caret + name-flag = CollaborationCursor (y-prosemirror awareness) styled per-principal; the agent here is just another awareness peer, distinguished only by the circle token + cobalt. The tracked suggestion block (ins/del diff + Accept/Dismiss/Reply) = a suggestion/change-tracking decoration layer (ProseMirror plugin holding pending agent changesets as inline ins/del decorations with an accept→applyStep / reject→discard command) — i.e. a gated agent ChangeSet, not a free write. Component primitives needed: EditorContent, BubbleMenu, DragHandle, a Suggestion-backed SlashCommand extension, CollaborationCursor, a Highlight mark, and a custom SuggestionReview NodeView/plugin for the accept/reject affordance. Every visual is a CSS-variable token, so a Tiptap theme file just consumes :root.
Critique Rendered the editor hero at 2x (file:///tmp/konstrukt-editor.png) and ran a full WCAG contrast audit on every marginal token pair. DOES IT STILL LOOK AI/CLAUDE? No — emphatically the inverse of the rejected direction. Cool off-white #F4F3EE over a VISIBLE grey structural grid (not warm paper/cream/bone), flat Bauhaus primaries used as colour-BLOCKS not tints (cobalt/chrome-yellow/vermilion — no clay/terracotta/tan anywhere), ZERO serif, IBM Plex Mono for all structural microcopy, 2.5–4px ink rules + un-blurred 6px offset shadows, barcode masthead. Reads as authored constructivist/Bauhaus, nothing like Vercel/Linear/Notion or Anthropic editorial-warmth. looksAIGenerated=false with confidence. DISTINCTIVENESS (9): The square=human / circle=agent system is CONCEPTUAL not decorative and is carried coherently across topbar tokens, suggestion header, slash icons, space glyphs, admin 'kind' chips, and the quartered-ring logo. 'Zero is a circle' is genuinely engaged, not a tagline. Held back from 10 by ONE real flaw: agent glyphs mix ◐ (half-circle) and ⬡ (hexagon) as Unicode FONT characters — the hexagon directly contradicts the 'agent = circle' thesis, and font-glyph marks look slightly arbitrary vs drawn SVG. Make agents consistently a circle, as SVG. FIT (9): Best-in-brief thesis-to-architecture fit. Peerage (ADR 0016, brief reframing #1) encoded structurally. Editor faithfully matches ADR 0032: tracked agent edits as gated SUGGESTIONS with Accept/Dismiss/Reply (the real accept/reject capabilities), CRDT-synced status line, audit-per-mutation prose, agent caret with principal attribution. Admin shows agents as first-class principals with per-minute rate limits + Revoke — exactly the model. The doc content even quotes ctx.transact / METADATA_ONLY_CAPABILITIES correctly. EDITING UX (8): Hero is strong and specific — block handles, slash menu with hard square icon-tiles + an 'Ask agent to draft' AI item, live cobalt agent caret+flag, the gated cobalt suggestion block. TWO concerns: (1) in the render the agent-flag floats onto the PREVIOUS line's body text and occludes it ('a capabi[lity]...') — the ProseMirror node view must reserve a gutter/line-gap for inline presence flags. (2) Every block is bordered/ink-ruled/hard-shadowed + colour-block H2 bullets + cobalt lede rule — high-energy for a long-form WRITING/READING surface; trades calm-canvas ergonomics for identity. Defensible opinionated stance, but the reading view especially is louder than prose wants. FEASIBILITY (8): Very buildable on Tiptap v3 + a themeable CSS-var layer (matches task #17: custom system, NOT Mantine). All borders/flat-fills/offset-shadows/grid — cheap, fully tokenised. Suggestion marks + slash menu map cleanly to prosemirror-changeset decorations over the owned schema (ADR 0031/0032). Caveats: convert ◐/⬡ to SVG components for cross-platform reliability; the inline agent-flag needs real layout reservation. ACCESSIBILITY (7): High-contrast by construction — nearly all pairs clear AA-normal, most >8:1 (ink/paper 16.7, cobalt-ink/paper 15.0, suggestion body 13.4). ONE genuine AA-normal failure: white-on-vermilion = 4.32 (AA-large only) on SMALL text — the destructive 'Revoke' button and the small white text in the vermilion agent:indexer token. Fix is already in-system: the palette ships --vermilion-dk #B3260F (white-on-it = 6.56, AA-normal) labeled 'AA text variant' — use it as the fill behind any small white text / on Revoke. Also ensure icon-only ◐/⬡ glyphs always pair a text/aria label (mostly done). Shape channel (square/circle) is good non-colour redundancy. Knock is for the shipped red token, not a structural defect.

Meridian

meridian
open full ↗
#4 score 8.7·distinct 8/10·editing 9/10·feasible 9/10·a11y 8/10·✓ distinct

A reading-lux workspace built like a finely-bound instrument: a deep ink-navy spine, a cool blue-white page, and an emerald jewel accent — where the "zero" becomes an origin/meridian line and documents are numbered from 00, and humans and AI agents read as visibly equal co-editors.

Avoids AI-default: It refuses every forbidden cue. No warm paper / cream / bone — the page is a cool, faintly-blue near-white (#f4f6fb) and the chrome is deep ink-navy (#0a0f1f); the only warm note is a single hairline gold detail on the zero-ring, never a fill. No clay/terracotta/rust/tan — the entire accent system is a cold jewel emerald (#13a37f) with a sapphire-blue secondary reserved exclusively for agents. It avoids the minimal-SaaS-serif default: instead of one tasteful serif over greys, it runs a deliberate three-voice editorial system — a high-contrast optical serif (Fraunces, often light-weight at display sizes and set in italic for emphasis), a slightly mechanical grotesque (Space Grotesk), and a structural mono (JetBrains Mono) used for an instrument-like labelling system (uppercase tracked eyebrows, §-section markers, 00-based document numbers). The "zero" is treated as a real motif — an origin ring with a meridian line that runs down the rail, doc IDs as 024/047, a "genesis" zero-state in the sample prose — rather than a flat logo. Net effect reads like a bound scientific ledger / observatory tool, not a Vercel/Linear/Notion clone and not Claude's warm-paper aesthetic.

Fonts Fraunces (Google Fonts, SIL OFL 1.1) — optical-size display serif, light/italic for editorial headlines & reading body accents, Space Grotesk (Google Fonts, SIL OFL 1.1) — UI / interface sans, JetBrains Mono (Google Fonts, SIL OFL 1.1) — labels, doc numbers, code, metadata
ink-900 (substrate / rail / code)ink-700 (deep panel)paper (page)surface (cards / canvas)paper-edge (hairlines)jewel-500 (signature emerald fill / live)jewel-700 (deep emerald, links/strong)jewel-text (AA labels on light)sapphire-500 (agent identity)sapphire-400 (agent gradients)gold (instrument hairline)t-strong (headlines)t-bodyt-muted
Motion Restrained, instrument-like. Meridian rail line glows; a slow emerald pulse-ring marks live/sync; sparkline bars rise once on load; the agent suggestion card slides+fades in; human and agent carets blink calmly; hover fades 120–150ms on nav/rows/doc-lines and reveal the block handles. Decorative only — nothing blocks reading, all token-driven.
Tiptap fit The editor screen maps directly onto Tiptap v3 (ProseMirror). The editable body is `EditorContent` with `StarterKit` (paragraph, heading, bold/italic/strike, code, lists, blockquote) — the .blk rows are node-view wrappers. The floating ink toolbar is Tiptap's `BubbleMenu` driven by `editor.isActive()/chain().focus().toggleX().run()`; the .fb.on state binds to active marks. Block handles (+ / drag) are a custom `globalDragHandle`-style plugin (or the official drag-handle extension) rendered via a NodeView decoration; "+" opens the slash menu. The slash menu is a `suggestion`-utility plugin (same primitive as mentions) listening for "/", with the AI section as custom command items (Ask an agent → ⌘J). The editorzero signature maps to collaboration primitives: real-time presence + the human/agent carets are `@tiptap/extension-collaboration-cursor` over a Yjs doc (each peer's user object carries {name, color, kind: human|agent}), so agent carets/flags are just another awareness state styled by kind. The tracked agent suggestion (ins/del diff + Accept/Dismiss + rationale) is a custom `suggestion`/`change-tracking` mark pair (insertion + deletion marks) backed by ProseMirror decorations, with accept/reject committing or reverting the marked range as a transaction attributed to the agent principal. Primitives needed: EditorContent, StarterKit, BubbleMenu, custom DragHandle NodeView, Suggestion plugin (slash + mentions), Collaboration + CollaborationCursor (Yjs), and a tracked-changes mark set with decoration-based accept/reject UI; comments rail = a `comment` mark keyed to thread IDs in the sidebar.
Critique Rendered all screens in Chromium and sampled computed colors + WCAG ratios rather than trusting the CSS. #1 QUESTION — does it still read AI-generated / Claude-like? No. This is the clearest pass on the anti-generic brief. Sampled backgrounds: page = rgb(244,246,251) cool blue-white (NOT cream/bone), rail/body chrome = rgb(10,15,31) deep ink-navy, primary action = rgb(12,122,96) emerald, agent accent = rgb(47,85,196) sapphire. Zero warm cast: the only warm value (gold #c8a24a) appears as a 1px hairline arc on the zero-ring and one avatar gradient — never a fill. It refuses every forbidden cue (warm paper, clay/terracotta/rust, minimal-SaaS-serif-over-grey). DISTINCTIVENESS (8, not 9–10). The system is genuinely authored: a three-voice type stack (Fraunces light/italic display + Space Grotesk UI + JetBrains Mono labels) plus a coherent instrument grammar — uppercase tracked mono eyebrows, §-section markers, 00/024 doc numbers, a meridian hairline running down the rail, the zero-ring with a single gold arc. Reads like a bound scientific ledger / observatory tool. Held back from 9–10 because the broad move (deep dark rail + cool light canvas + Fraunces editorial serif) is a recognised current direction in the Linear/editorial-SaaS neighbourhood; what makes THIS distinctive is the zero/meridian conceit and the human=emerald / agent=sapphire dual-identity system, not the chrome itself. FIT (9). Humans and agents are rendered as visibly equal co-editors with one consistent grammar applied everywhere: emerald=human/live, sapphire=agent, used identically across dashboard avatars, the live docs table (agent-chip vs human editor-name), the editor presence rail (peer-divider 'peer agents'), the admin roster (is-agent-row with svc:atlas + revocation key + rate-limit context), suggestion cards, and the inline agent caret. Agents are peer PRINCIPALS, not a bolted-on chatbot — maps directly onto the project's first-class-agents invariant. Doc-numbering-from-00 + the 'genesis' zero-state engage the name. EDITING UX (9) — strongest area. Reading view: ~680px measure, true editorial hierarchy, §-anchored TOC, drop-cap, meridian spine. Editor: full Tiptap-shaped kit — BubbleMenu, block hover handles (+ / drag), slash menu with a dedicated AI section, inline agent caret with named flag, in-progress agent-typing highlight, and the centrepiece tracked-suggestion card (del/ins diff + rationale line + accept/dismiss). That is exactly the human+agent co-edit surface the product needs. Minor: the demo shows caret + agent-typing + suggestion + slash menu all at once — a showcase conceit; real defaults must stay calm or the canvas reads busy. FEASIBILITY (9). All standard Tiptap (BubbleMenu, suggestion/slash, Y.js awareness cursors, a custom node-view for the suggestion card). Every value is a CSS custom property — fully themeable, no hard-coded one-offs. Fonts all SIL OFL (Fraunces, Space Grotesk, JetBrains Mono) — license-clean for the open-source/self-host requirement. Caveat: Fraunces is leaned on at light weights / large optical sizes — ship the variable font + keep font-optical-sizing:auto (already set). Code-block syntax colors are hand-spanned in the mock; real highlighting is separate but doesn't affect the design. ACCESSIBILITY (8) — good, one fixable gap. Verified AA PASS for: emerald button white text (5.29), eyebrow/label jewel-text (5.74 on paper / 6.21 on white), t-muted (6.04/6.53), agent sapphire-text (6.53; 5.57 on its glow chip), body (12.35), links jewel-700 (7.63), draft pill (5.37), on-dark primary (16.87) and on-dark-muted (8.53). The ONLY sub-AA values: --t-faint #6b7592 = 4.24:1 on paper and on-dark-faint #6c769a = 4.26:1 on dark — both used for small metadata/timestamps/doc-numbers, below the 4.5 normal-text bar. One-notch darken fixes it. Good: human/agent and status are color + label + shape (text 'agent'/'human', role tags, ◆ glyph), not color-only. Action item: pulsing .live-dot / caret blink should gate on prefers-reduced-motion.

FLIGHTDECK

flightdeck
open full ↗
#5 score 8.6·distinct 9/10·editing 7/10·feasible 8/10·a11y 6/10·✓ distinct

editorzero rendered as a precision instrument panel — a machined anodized control surface where a human operator and an AI agent share one labelled deck, edits are tracked signals, and "zero" is the calibration datum every document is referenced from.

Avoids AI-default: It inverts every rejected "Foundry" move. No warm paper / cream / bone — surfaces are brushed-aluminium greys with milled-edge highlight/shadow bezels (machined faceplates, not flat cards). No clay / oxblood / terracotta / tan — the only accents are functional instrument indicators: amber (armed/attention/primary) and teal (agent/signal), with violet reserved strictly for version snapshots and red for fault. No tasteful-serif-on-paper: zero serifs anywhere — headings are Archivo Expanded (compressed industrial grotesque), every label is monospaced engraving in ALL-CAPS with wide tracking, like a real avionics legend plate. It reads as hardware, not a SaaS template: LED status pips with glow + pulse, a numeric readout cluster in the status bar, gauges with sparklines, rate-budget meters, segmented machined toggles, and a chassis-with-recessed-bezel frame around each screen. Nothing here resembles Vercel/Linear/Notion's airy neutral minimalism or Claude's warm editorial calm — it's deliberately utilitarian, dense, and labelled.

Fonts Archivo — SIL OFL 1.1 (body, UI, labels), Archivo Expanded — SIL OFL 1.1 (display headings / wordmark), Spline Sans Mono — SIL OFL 1.1 (all engraved labels, doc-IDs, readouts, code)
chassispanel-basepanel-raisedpanel-recessinkink-secondaryink-tertiaryamber-primaryamber-hotteal-agentteal-hotgreen-okred-faultviolet-versionstatusbar-darkdark-chassis
Motion Restraint, like a real instrument: status LEDs hold steady; only genuinely-live state animates. The "live" pip pulses (opacity+scale, 1.6s); the active agent presence avatar emits a slow expanding ring (2.4s) to signal an open channel; the human caret blinks (step-end) and the agent caret holds a soft teal glow with a pulsing token dot in its flag; the tracked-suggestion card slides+fades in on arrival (cubic-bezier, 0.4s); buttons depress 1px and swap bezel→inset on :active for tactile feedback; nav/feed rows do a quick 0.12s background settle on hover. No decorative or ambient motion — every animation reports a system condition.
Tiptap fit The editor screen maps directly onto a Tiptap v3 + ProseMirror instance with editorzero's owned thin block layer (ADR 0031). Toolbar = a BubbleMenu/FixedMenu driving mark commands (toggleBold/Italic/Underline/Strike/code) + a node-type dropdown (setParagraph/toggleHeading); the amber "⊕ Suggest" toggle flips the editor into suggestion mode. Slash menu = the Suggestion/Mention extension (@tiptap/suggestion) rendered via a Floating UI tippy popup with a keyboard-navigable command list (including the editorzero-specific "Ask an agent" command). Block handles (drag ⠿ + add) = a NodeView decoration / DragHandle plugin on each top-level block. The live human caret + agent caret/label = CollaborationCursor (y-prosemirror awareness) over a Yjs/Hocuspocus binding — agent presence is just another awareness peer. The tracked agent suggestion (inline ins/del + anchored accept/reject card) = a custom suggestion mark set rendered as ProseMirror Decorations computed by prosemirror-changeset, with anchors stored as Yjs RelativePositions (ADR 0032); Accept/Reject are capabilities applied through ctx.transact, each emitting one audit entry. Version datum rail = named Yjs snapshots surfaced via the typed RPC, cached by TanStack Query. Primitives needed: EditorContent, FixedMenu/BubbleMenu, SuggestionList popover, DragHandle NodeView, CollaborationCursor renderer, a SuggestionMark + decoration set, an anchored SuggestionCard component, a PresenceStack, and a VersionTimeline.
Critique Rendered all screens at 1400px + ran WCAG math and font-load checks (artifacts in /tmp/flightdeck-review/). LOOKS AI-GENERATED? No — this is the strongest part. It decisively exits every forbidden zone. Backgrounds are cool brushed-aluminium greys (#dcdfd9–#f1f2ee), NOT warm paper/cream/bone. Accents are functional instrument indicators (amber/teal/violet/red), zero clay/oxblood/terracotta/tan. Zero serifs: Archivo Expanded is CONFIRMED loaded (document.fonts.check=true), a genuinely compressed industrial grotesque, and every label is monospaced ALL-CAPS Spline Sans Mono engraving. Dark avionics status bar, LED pips w/ glow+pulse, gauge cards w/ sparklines, rate-budget meters, recessed-bezel chassis frame — reads as hardware, not Vercel/Linear/Notion airy-minimal or Claude editorial-warm. Commits hard to territory. All 3 fonts OFL, correctly named. FIT (9): Peer human/agent co-editing is the spine, not decoration. Principal chips (round human vs squared teal/violet agent); Admin Members treats agents as first-class principals w/ token IDs, model names, rate budgets, revocation (cites ADR 0016); inline tracked suggestion routes 'through ctx.transact · 1 audit entry' (ADR 0018/invariant 3); 'v0 · zero datum / document origin' timeline engages the 'zero' motif literally. The differentiators ARE the product's hard invariants. EDITING UX (7): Reading view excellent. Editor has all the right ingredients (agent caret+flag, inline ins/del diff, anchored accept/reject card, slash menu, presence, co-editor rail, version datum) BUT two real issues in the rendered keystone: (1) slash menu z-index COLLIDES with and overlaps the suggestion card + body text → cluttered, hard-to-parse canvas, and it's the hero shot; (2) keystone editor is shown in DARK mode while brief makes light the required default (light is proven on reader/dash/admin, but the hero editing moment isn't in default theme). Dense labelling is on-thesis but the editor specifically risks busyness. FEASIBILITY (8): Maps cleanly to Tiptap — suggestion/diff decorations, slash via suggestion plugin, collaboration-cursor for human+agent carets, node views for block handles; machined chrome is pure CSS over real CSS-var tokens. Minor leak: ~26 inline hex one-offs (per-space/avatar gradients) that should be tokenised into a space-accent scale. ACCESSIBILITY (6): NOT a clean pass on the hard AA-on-text constraint. Body/primary pass comfortably (light ink 14.95, dark body 12.18, statusbar 12.09). But a cluster of SIGNATURE small-text/accent pairs fail AA-normal: teal kicker/labels on light (2.99), teal status text on teal-glow (2.82), green 'published' pill (2.78), amber 'live' pill (3.43, large-only), ink-faint counts/badges (1.9–2.6), dark ink-faint datum timestamps (2.26). All fixable via tokens (darken teal→~#0c7d72, green→~#2f7d3c, lift ink-faint, darken accent text on tinted chips) and the tokenised arch makes it mechanical — but as delivered, named tokens violate the constraint.

Aperture

aperture
open full ↗
#6 score 8.5·distinct 9/10·editing 8/10·feasible 8/10·a11y 8/10·✓ distinct

A risograph-supergraphic identity where the "zero" lives as a recurring aperture/ring mark, electric ultramarine + acid lime + hot magenta carry warmth through saturated colour instead of beige, and the AI agent is a first-class hot-magenta co-editor visible on every surface.

Avoids AI-default: It refuses every rejected cue by construction. Grounds are cool porcelain (#F4F4FB) and violet-biased ink (#0B0B14) — zero cream, bone, clay, terracotta or tan anywhere. Accents are loud and joyful (electric ultramarine, acid lime, hot magenta, cyan), the literal opposite of muted earth tones. The studio signature is a hard 1.5px ink outline + 3-4px offset "block" drop-shadow on pills and cards plus oversized Space Grotesk display and supergraphic concentric rings bleeding off the hero — a poster/print language, not the safe minimal-SaaS-with-a-serif default. There is no body serif at all (the Claude/Anthropic tell); pill buttons translate on press like physical keys. Nothing reads as Vercel/Linear/Notion monochrome-grey or Anthropic warm-paper; the human colour is ultramarine and the agent colour is dashed-border magenta, a deliberately un-corporate pairing.

Fonts Space Grotesk (SIL OFL 1.1) — display / headings / brand wordmark, DM Sans (SIL OFL 1.1) — UI + body text, DM Mono (SIL OFL 1.1) — metadata, paths, code, breadcrumbs, eyebrow labels
inkslateporcelain (app bg)paperlavender (tint)indigo / brand / humanindigo-brightlime (joy accent)lime-deep (text-safe)magenta / agent signaturemagenta-softcyanamber (sparing warm-via-colour)
Motion Restrained, lively, never decorative. The brand aperture ring rotates slowly (14s) as a living logo. Presence is shown with pulsing ring pips — green-lime for humans, magenta for agents (offset timing so an agent reads as "more alive"). The agent's tracked insertion paints in left-to-right via an animated highlight background-size sweep (insIn), so the suggestion visibly "arrives." Caret flags blink; the agent caret has a pulsing white dot. The suggestion card and slash menu float-in (translateY + scale). Buttons are physical: hover lifts 1px and deepens the offset block-shadow, press pushes 1px in. All motion is short, transform/opacity-only, and respects token timing.
Tiptap fit Screen D maps directly onto Tiptap v3 + the owned thin block layer (ADR 0031) fused with track-changes (ADR 0032). Each .docblock is a top-level node with a NodeView-rendered gutter handle (drag = ⠿, "+" = insert) driven by a drag-handle / block-handle extension. The sticky .toolbar is a BubbleMenu/fixed-menu bound to mark commands (bold/italic/underline/strike/code, link, mention "@", heading levels, blockquote, bullet/ordered lists) reading active marks via editor.isActive. The .slash menu is a suggestion-utility plugin ('/' trigger, filtered item list, AI group that delegates a block to an agent). Live co-editing uses the existing Yjs/Hocuspocus collab + collaboration-cursor extensions: human carets/labels and the magenta agent caret/flag are remote-cursor decorations keyed to awareness state. The tracked agent edit is the differentiator: .ins / .del are ProseMirror inline decorations produced from prosemirror-changeset diffs over Yjs snapshots, with RelativePosition anchors; the floating .suggest-card is a decoration-anchored widget whose Accept/Dismiss commands either fold the change into the doc or revert the tracked range. The right-rail change log is a view over the same changeset/awareness stream. Component primitives needed: BlockNode + NodeView gutter, FixedMenu/BubbleMenu, SuggestionMenu (slash), CollaborationCursor (human + agent variants), TrackChangeMark/Decoration set, SuggestionWidget card, and a ChangeList panel.
Critique Rendered all five screens in-browser + ran a full WCAG audit. This emphatically escapes the rejected territory and does NOT read as AI-generated or Claude-like. DISTINCTIVENESS (9): Grounds are cool porcelain (#F4F4FB) + violet-ink (#0B0B14) — zero cream/bone/clay/terracotta/tan anywhere. Accents are loud and committed: electric ultramarine hero, acid-lime CTAs, hot-magenta agent signature, cyan pops. The studio language is consistent and specific: hard 1.5px ink outlines + 3-4px offset block-shadows on every pill/card, oversized Space Grotesk display with tight tracking, concentric-ring supergraphic bleeding off the hero, dark-ink code blocks with lime/pink syntax (not generic gray). No body serif at all — the Anthropic tell is absent. This is poster/risograph, not minimal-SaaS-with-a-serif and not Vercel/Linear/Notion monochrome. It commits hard to its territory rather than hedging. FIT (9): The 'zero = aperture/ring' motif recurs coherently — rotating ring brandmark, ring-bullet H2s, hero supergraphic. The peer-co-editor thesis is executed on EVERY surface: dashed-magenta agent avatars, magenta agent caret+flag live in the doc, a tracked-suggestion card (accept/dismiss), agent rows in admin carrying rate-limit + 'revocable', agent contributors in the reader, 'N agents have write access' affordances. Maps directly onto editorzero's humans-and-agents-as-peers + audit-complete ethos. EDITING UX (8): The editor is the strongest screen. Block handles (+/drag), a credible slash menu with a dedicated AI group, sticky formatting toolbar, live presence bar, and a genuinely legible tracked-change model (magenta insertion highlight + underline, struck deletion, floating accept/dismiss card, right-rail change log). The reading view is clean and well-typeset (deck, ring-bullets, lime-underlined links, magenta pull-quote). Not 10 because it's static mockup polish — real Tiptap selection/toolbar-overflow/empty-states aren't proven, and the slash menu + suggestion card are pinned decorations. FEASIBILITY (8): Fully token-driven (--ink/--indigo/--magenta, geometry, shadow tokens) — themeable via CSS custom properties as required. The block/handle/slash/toolbar model maps cleanly to Tiptap v3 + a thin block layer; tracked changes -> marks/decorations, caret+flag -> y-prosemirror awareness. Minor SSOT leak: avatar hue-helper classes (.a-indigo etc.) and a few inline style= colors (hero supergraphic, gradient admin row) reach past tokens; tidy before shipping. ACCESSIBILITY (8): Strong by construction. I computed ~40 pairings: nearly all pass AA for normal text, including the bold ones (ink-on-lime 16.6, white-on-indigo 7.6, prose body 15.5, all code-block syntax). Two caveats keep it off 9-10: (1) footer license text #9a9ab8 on porcelain = 2.49, a real AA failure (small footnote, easy fix); (2) the entire magenta/agent family — white-on-magenta button, agent-name text, agent caret flag — passes at exactly ~4.52, i.e. zero tolerance; any token nudge breaks the agent colour, the product's signature. Recommend darkening --magenta slightly for text/!on-white uses or splitting a text-safe magenta token. DEFECT (must-fix, scoped): Screen B (documents list) is structurally broken at desktop width. Its .app keeps the default grid-template-columns:248px 1fr but has NO sidebar (first child is .main), so .main is forced into the 248px sidebar track while the 877px track sits empty — the collections tree + document table collapse to ~56px/2px and the topbar wraps to 3 lines. Confirmed via computed layout, not a render artifact. Screens C/D avoid this by overriding to 1fr; A/E have a real .side. Fix is one attribute on Screen B's .app: grid-template-columns:1fr (or add a real .side for IA consistency with A/E — preferable, since a docs-list screen losing the global nav is itself an IA regression).

NULPUNT

nulpunt-mono-acid
open full ↗
#7 score 8.4·distinct 9/10·editing 9/10·feasible 8/10·a11y 7/10·✓ distinct

A Swiss-brutalist, grid-exposed black-and-white instrument where a single acid chartreuse is the live signal — origin point, agent presence, and the act of editing all rendered in the same shocking green so humans and AI agents read as one peer system.

Avoids AI-default: It refuses every flagged AI-default move. Background is a cool blue-grey off-white (#F4F4F1), explicitly NOT cream/bone/paper — there is zero warmth and zero earth-tone (no clay/oxblood/terracotta/rust/tan anywhere). There is NO serif: display is Archivo Expanded (a wide, mechanical grotesque), body is Archivo, and metadata is Space Mono — the opposite of the "tasteful minimal-SaaS-with-a-serif" register that was rejected. Corners are 0px (hard brutalist), structural rules are 1.25px hairlines drawn in ink, and a 64px coordinate grid is literally exposed behind every surface — a drafting-table aesthetic no Vercel/Linear/Notion clone uses. The whole UI is monochrome except ONE acid (#C6F500) deployed surgically: the brand "origin" dot, the live agent cursor flag, the suggestion-card spine, the accent on exactly one hero number. That single-hue discipline against true neutral ink, plus monospace tabular numerals everywhere, is a strong authored point of view, not a recoloured template.

Fonts Archivo Expanded — SIL OFL 1.1 (display / headings / wordmark), Archivo — SIL OFL 1.1 (UI + body text), Space Mono — SIL OFL 1.1 (numerals, labels, metadata, code)
paperpaper-pureinkink-2ink-3ink-4line-softline-gridacidacid-text
Motion Motion is restrained and diegetic — it only ever signals "live". The human caret and the acid agent cursor blink on the same 1.05s step beat; the agent presence avatar emits a slow chartreuse halo pulse (2.2s); live status dots ping (scale+fade). The single expressive moment is the agent's tracked insertion: a faint acid light sweeps left-to-right across the inserted text (3.4s) so the eye is drawn to what the agent just proposed, and the suggestion review card scans in from 6px below on appear. Everything is disabled under prefers-reduced-motion via a blanket animation:none rule. No decorative parallax, no easing flourishes — motion equals signal.
Tiptap fit The editor screen maps directly onto Tiptap v3 + ProseMirror (the owned-schema substrate of ADR 0031/0032). The sticky formatting toolbar is a BubbleMenu/fixed-menu bound to standard marks (bold/italic/underline/strike/code) + node toggles (heading, blockquote, bulletList, codeBlock); the floating "/" panel is a suggestion-driven slash command menu (a Tiptap Suggestion/`@tiptap/extension-mention`-style plugin) whose first item delegates to the agent. Block handles in the left gutter are NodeView drag handles (the +/grip affordances). The human caret + selection and the acid agent cursor are y-prosemirror CollaborationCursor decorations keyed to awareness state (humans rendered in ink, agents in acid — same plugin, principal-typed colour). The tracked agent suggestion (inline ins/del marks + the gutter review card with Accept/Dismiss/Reply) is a custom suggestion mark/decoration layer over prosemirror-changeset, anchored by Yjs RelativePosition per ADR 0032, with the card surfacing the relpos anchor and audit id. Component primitives needed: EditorContent host, Toolbar + ToggleButton, SlashMenu (suggestion popover) + MenuItem, BlockHandle NodeView, RemoteCursor + RemoteSelection (awareness), SuggestionMark (ins/del), SuggestionCard with PrincipalBadge, and a right-rail SuggestionQueue/PresenceList fed by the typed RPC + awareness — all driven from CSS custom-property tokens so the whole editor re-themes from :root.
Critique Genuinely escapes the rejected territory. Background #F4F4F1 is measurably cool/blue-grey with zero warmth; no cream/bone/paper, no clay/oxblood/terracotta/rust/tan anywhere; NO serif. The Archivo Expanded (wide mechanical grotesque) + Archivo + Space Mono stack, 0px corners, 1.25px ink hairlines, and a literally-exposed 64px coordinate grid behind every plate form a Swiss-brutalist drafting-table register no Linear/Notion/Vercel clone uses. Single-acid discipline (#C6F500 chartreuse, reserved for the origin dot, agent cursor flag, suggestion-card spine, one hero number) is a real authored constraint, not a recolor. Does NOT read as Claude-ish or AI-default. Fonts are all SIL OFL 1.1 (compliant). EDITOR (signature screen) is the strongest part and is exactly on-thesis. Tiptap-grade toolbar + per-block hover handles (+/grip) in a left gutter + floating slash menu (AI first) + human caret/selection, AND the differentiator: an agent live-cursor with an acid name flag planted mid-paragraph, inline tracked ins/del, and a full suggestion review card (accept/dismiss/reply) carrying an audit anchor `relpos ⟨c4·12 → c4·21⟩ · audit #a7f3`. That detail directly honors invariant 3 (one audit entry per mutation) and ADR 0032's RelativePosition anchoring + tracked-agent-edits-as-differentiator. Agents render in the SAME acid system as humans, never a second hue — the peer-co-editor thesis made literal. Right rail ties presence to per-agent rate (40/min), echoing agent-as-principal rate limits. FIT: collections tree, spaces grid, documents table, reading view with 'Tier 1 · MD' fidelity-tier metadata, and an admin members table that distinguishes Human/Agent with API keys, per-agent rate, and 'revoked 1×' all map onto the real capability set + invariants (ADR 0016 agents, 0017 recover, 0013 fidelity tiers). 'Provision agent' as a primary acid action is faithful. FEASIBILITY: all tokens are CSS custom properties; corners/hairlines/grid trivial. Tiptap covers toolbar, slash menu, block handles, collab cursors (y-prosemirror awareness → the acid flag) and the suggestion layer maps to the planned prosemirror-changeset track-changes. Caution: the exposed 64px grid behind live editor prose risks baseline-misalignment noise behind dense text — cosmetic, themeable, but tune. Sweep animation on insertions is correctly gated behind prefers-reduced-motion. ACCESSIBILITY (verified by computation): ink 17.85:1, ink-2 12.81, ink-3 4.89, acid-text #5F7800 4.57 (text-safe), ink-on-acid 15.42, all dark-gallery + codeblock text pass. The token system correctly splits --acid (fill/border only — 1.16:1 as text, would fail; never used as text on paper) from --acid-text (text). Real defect: --ink-4 #7C7C80 FAILS AA-normal — 3.77:1 on paper, 4.01:1 on paper-pure (large-text PASS only). It's used for rail counts (.ct), document indices (.ix), tree carets/counts, and slash kbd hints; CSS self-labels it 'non-essential metadata,' but doc indices/counts are arguably informational and should darken ~one step to #6A6A6E. Also the agent-cursor label is CSS `content:` text ('weaver · agent') — fine for a mock, must be real DOM in production for SR/AT.

Null Field

null-field
open full ↗
#8 score 8.3·distinct 9/10·editing 8/10·feasible 8/10·a11y 6/10·✓ distinct

editorzero rendered as the origin point of a coordinate system — a near-black engineering "field" backed by a faint grid, where every human reads in electric cyan and every AI agent in electric violet, so peer co-editing is legible at a glance and the "zero" becomes a literal crosshair origin-mark.

Avoids AI-default: Hard rejection of the warm-paper/serif minimal-SaaS look: the background is true cold near-black (#05060a / #0a0d16), never cream or bone, and there is not a single earth tone — accents are saturated electric cyan, violet, and acid lime only. Chrome is a technical HUD: monospace coordinate readouts (NODE 0,0, r.482, doc_id d_8fz1aa), an acid-lime angled screen-tag, a faint blueprint grid masked behind every screen, and glow on primary actions. It commits to one strong idea (a two-channel signal language: cyan=human, violet=agent) and carries it through avatars, cursors, suggestion blocks, presence dots, space mix-bars, and admin role pills — the opposite of a recoloured Linear/Notion clone or the safe Anthropic-style serif-on-paper default.

Fonts Space Grotesk (SIL OFL 1.1) — display / headings / numerals, its mechanical geometry suits the HUD register, Inter (SIL OFL 1.1) — body and reading prose, JetBrains Mono (SIL OFL 1.1) — all metadata, coordinates, labels, table chrome, the monospaced 'instrument' voice
voidfieldpanellineinkink-dimhuman-cyanagent-violetacid-limelight-fieldlight-humanlight-agent
Motion Restrained, instrument-like, never decorative. A single shared @keyframes pulse drives all "live" signals — the acid-lime LIVE dots, the violet agent presence indicator, the agent co-editing toggle — so liveness has one consistent heartbeat. Human and agent text carets blink (steps(1)) at slightly different rates to read as two distinct presences. The agent suggestion card carries a soft violet box-glow to pull focus as the newest event. Hover transitions are short (.13–.18s) on rows, tree nodes, toolbar buttons. The grid background is masked with a radial fade so it reads as depth, not noise. All motion respects token-driven colour so it inverts cleanly in light mode.
Tiptap fit The editor screen maps directly onto a Tiptap v3 + ProseMirror instance with editorzero's owned thin block layer (ADR 0031), and the cyan/violet language is the visual surface of ADR 0032 track-changes + first-class agent principals (architecture §9). Mapping: (1) the .ed-canvas is the EditorContent / ProseMirror editable; .doc-title-ed is a separate single-line title node bound to the doc's title field. (2) .eblock + .handle is a NodeViewWrapper drag-handle decoration (Tiptap's @tiptap/extension-drag-handle or a custom DragHandle ProseMirror plugin) — ⠿ drag + + insert. (3) The .ed-toolbar is a BubbleMenu / fixed menu wired to editor.chain().toggleBold()/toggleItalic()/etc., button .on state from editor.isActive(...). (4) The .slash menu is a Suggestion-based command palette (@tiptap/suggestion) split into block commands and AI commands. (5) Human + agent presence (.caret-h, .caret-a, .sel-agent) are y-prosemirror collaboration-cursor decorations driven by Yjs awareness, coloured by principal type — cyan for human, violet for agent, label from awareness state. (6) The .suggestion block is the track-changes primitive: a ProseMirror mark/decoration pair (insertion=acid-lime, deletion=red strike) rendered as a NodeView with Accept/Reject/Reply actions that call the suggestion-resolution capability; "awaiting review by nomi.ali" reflects the suggest-only permission shown in the rail. (7) The right rail (.presence, .activity) renders live awareness states and the per-doc change feed. Component primitives needed: EditorProvider/useEditor, StarterKit (or owned nodes), Collaboration + CollaborationCursor (Yjs), Suggestion/Mention, BubbleMenu, FloatingMenu, DragHandle, a custom Suggestion/TrackChange mark + NodeView, and a Decoration set for remote carets/selections.
Critique DOES IT STILL LOOK AI-GENERATED / CLAUDE-LIKE? No, and I verified it numerically rather than eyeballing. Every neutral is measurably COOL (blue channel >= red on void #05060a, field #0a0d16, panel #0f1320, line #1d2438, and on light #f6f8fe / #eef1fb / #ffffff). There is not one cream/bone/clay/terracotta/tan value in either theme. Type stack is anti-default too: Space Grotesk + JetBrains Mono dominate; Inter is reading-prose only. The "tasteful serif-on-paper minimal SaaS" tell is entirely absent. The HUD register (acid-lime angled clip-path screen-tags, NODE 0,0 / r.482 / d_8fz1aa coordinate readouts, blueprint grid masked behind every screen, glow on primary actions) is a committed POV, not a recolored Linear/Notion. looksAIGenerated = false with confidence. DISTINCTIVENESS (9). The two-channel signal language (cyan=human, violet=agent) is the rare motif that IS the product thesis, and it's carried consistently through avatars, carets/cursors, the tracked-suggestion block, presence dots, the space mix-bars (62% human / 38% agent), the change feed, and admin role pills. The space human/agent mix-bar is genuinely original data viz. The zero-mark logo as a literal crosshair origin reads engineered, not decorative. Held back from 10 only because cyan-violet-on-near-black + grid has neighbors in the dev-tool/observability space (Vercel-dark, Grafana, cyberpunk dashboards) — the originality is the human/agent SEMANTICS layered on top, not the base palette — and a few glyphs lean Unicode/emoji (link, table, trash, teams) that need a real icon set to shed a slightly improvised feel. FIT (9), grounded in the architecture not vibes. ADR 0032 builds track-changes on prosemirror-changeset + Yjs snapshots with tracked AGENT edits as the headline differentiator: a suggestion attributed to a human OR agent principal, reviewable via an accept/reject capability, with stale/void handling. The editor screen renders exactly that: a violet "Tracked suggestion · docwright … awaiting review by nomi.ali" with +14 -2 diff and Accept/Reject/Reply. ADR 0016 makes agents first-class principals with rate limits + revocation + audit attribution — the admin table shows agents inline with humans, role=agent pills, tok_4f…a91, 240 req/min, suggest+write vs suggest-only scopes. Invariant 3 (one audit entry per mutation; log reconstructs state) surfaces as "96k audit events · 100% reconstructable" and "accepted into history · audit e_4471". This is the strongest fit-to-ethos I'd expect to see. One fidelity miss: the suggestion is a separate card pulled OUT of the paragraph, whereas ADR 0032 anchors suggestions inline as marks/decorations via Yjs RelativePosition — production affordance is closer to inline ins/del with a gutter/hover accept control. Noting it so the editor build doesn't cargo-cult the detached card. EDITING-UX, doc + editor screens specifically (8). The editor earns signature status: hover block handles (drag + insert), sticky formatting toolbar, slash menu with a dedicated AI section ("Ask docwright to draft…", "Rewrite selection"), labeled live carets (NOMI cyan, docwright violet), a multi-principal selection highlight, and a right rail fusing presence + change-feed + per-principal permissions (you: can edit / docwright: suggest-only). Reading view is genuinely good: ~680px measure, real lede/byline/TOC, an inline agent-annotation callout, and a metadata rail (DOC_ID d_8fz1aa, r.482, CC-BY) that reinforces the instrument voice without crowding prose. Held at 8 not 10: (1) JetBrains Mono is used very heavily for chrome — paths, statuses, timestamps, table headers, nav links are ALL uppercase mono with wide tracking; at scale this risks a cold, label-heavy reading temperature and slower scanning than a humanist sans; pull some metadata back to Inter. (2) Persistent grid + glows are lively for marketing but fatiguing for long-form authoring — the editor canvas should damp the grid to near-zero (it's radial-masked but still present). (3) Treating dark as the "home key" is a brand choice that may fight the long-session writing use-case where calmer light mode is the real default. None structural. FEASIBILITY with Tiptap v3 + a themeable layer (8). Very buildable, and the repo already points here: ADR 0031 commits to ejecting BlockNote for Tiptap v3 + an OWNED thin block layer over ProseMirror with editorzero's own node names/marks — exactly the schema sovereignty needed to render suggestion marks, dual-principal carets (y-prosemirror awareness -> cyan/violet cursors is standard), and inline ins/del decorations. Task #17 is "Design system & theming ADR (custom, not Mantine)" and #18 is the owned editor, so a fully-tokenized CSS-custom-property system is the intended substrate. The stylesheet is disciplined: every color/radius/glow is a token, light+dark both defined, theme flips via [data-theme]. color-mix(in srgb, …) is used pervasively for tints/borders — well-supported now, but confirm against the target browser floor (trivially precomputable into static tokens if needed). Costs that keep it at 8: the tracked-suggestion gutter UI, conflict-aware accept/reject, and stale/void rendering are real ProseMirror plugin/decoration work (ADR 0032's "hard parts we own"); glow-heavy box-shadow spread on many nodes can get expensive on large docs; a few Unicode glyphs need a proper icon font. The visual language maps almost 1:1 onto the planned stack. ACCESSIBILITY (6) — measured, not guessed. The dark home key is excellent: body ink 17.4:1, ink-dim ~8:1, cyan 12.2:1, acid 16.4:1, primary-button label (void on cyan) 12.7:1 — all AAA. But concrete AA gaps cluster on exactly the instrument voice this design loves: (1) --ink-faint (tertiary/meta) is ~3.5:1 dark and ~3.4:1 light — FAILS AA for normal text, used for doc paths, timestamps, revisions, coordinate readouts, table sub-labels at 10–11px mono (small text -> large-text exemption does NOT apply). Biggest issue by volume. (2) Light-mode acid/olive #5f8e00 at ~3.7:1 fails AA as text (live status + deltas). (3) Light-mode human cyan #0083a8 at ~4.1–4.4:1 misses the 4.5 normal-text bar (published-status pill, active nav link). (4) Accept-button gradient starts at light --agent where white is 3.53:1 (its --agent-deep bottom stop is fine at 7.4:1) — borderline label. All four fix with one-step token darkenings and are isolated to tokens thanks to the SSOT architecture, so the fix is clean — but as-authored the AA contract isn't met, hence 6. Also for the build: meaning currently leans on color (cyan vs violet); chips/labels DO back it with text ("human"/"agent"), good — but carets/cursors and mix-bars lean on hue alone and need a non-color tell for color-blind users; and the blinking caret + pulsing dots want a prefers-reduced-motion off-switch. Source files reviewed: docs/adr/0031-editor-substrate.md, docs/adr/0032-version-history-track-changes.md, docs/adr/0016-principal-model.md, docs/adr/0022-agent-editing-constraints.md; sibling candidates exist at /Users/numman/Repos/editorzero/.design/ (editorzero-aperture.html, meridian-zero.html, phosphor.html, scandi-cool.html). Contrast + warmth computed via a WCAG 2.1 relative-luminance script over the design's own tokens.

Halling

scandi-cool-halling
open full ↗
#9 score 8.1·distinct 8/10·editing 8/10·feasible 8/10·a11y 6/10·✓ distinct

A cool Nordic-precision workspace — glacier-blue for people, sage-green for agents — where hairline grids, monospace wayfinding labels, and a single origin-ring "zero" mark frame humans and AI as visibly equal co-editors, never a warm-paper SaaS clone.

Avoids AI-default: Explicitly rejects every forbidden cue. (1) No warm anything: the entire neutral ramp is built on a deliberate blue cast (hue ~218) — base is #fbfcfe cool near-white, surfaces drift toward ice, there is zero cream/bone/paper. (2) No clay/terracotta/rust/tan: the only two accents are glacier blue (#2f6dc4) and a cool muted sage (#3f8a5c); no earth tone exists in the token set. (3) Not the minimal-SaaS-serif default: the serif (Fraunces) is confined to long-form reading body + doc titles as a Nordic editorial gesture; all UI chrome is Space Grotesk (a precise humanist grotesque) with Space Mono wayfinding labels — the opposite of the "tasteful serif logo on a white SaaS" cliché. (4) Not a Vercel/Linear/Notion clone: low 3-6px radii, true 1px hairlines, a literal dotted origin-grid texture, monospace uppercase section eyebrows, and a sage-vs-ice peer-colour system that no mainstream tool uses. The signature — a sage AI cursor + a tracked, accept/reject-able agent suggestion with a visible "outdated/stale" lifecycle — is product-specific and impossible to mistake for a template.

Fonts Space Grotesk (SIL OFL 1.1) — display / UI / wordmark, Inter (SIL OFL 1.1) — UI body text, Space Mono (SIL OFL 1.1) — labels, IDs, metadata, code, Fraunces (SIL OFL 1.1) — long-form reading body + document titles
basesurfaceraillineink-strongink-bodyink-faintice-500 (human / primary)ice-700sage-500 (agent)sage-700near-black-bluewarn-outdateddanger-delete
Motion Calm, sparse, Nordic-restrained — motion only where it signals liveness or spatial origin. A sage presence dot pulses (1.8s) to mark live agents; the agent caret blinks (1.15s) as a peer to the human caret; the slash menu rises 6px on open (0.18s ease-out); suggestion review cards and space tiles lift 1px on hover with a soft cool shadow; nav/row hovers are 120-150ms background fades. No parallax, no decorative bounce — the dotted origin-grid is static texture, motion is reserved for state.
Tiptap fit Maps directly onto a Tiptap v3 + ProseMirror schema (ADR 0031's owned thin block layer). Toolbar = a fixed/bubble menu over StarterKit marks (bold/italic/underline/strike/code) + link + node-type select (heading/paragraph). Slash menu = the Suggestion/@tiptap/suggestion plugin rendering a filtered block list (Heading, Callout=custom lossy-tier NodeView, Code block, plus an 'Ask an agent' command). Block handles (+ / drag) = a per-node gutter decoration (global-drag-handle pattern). THE SIGNATURE maps to ADR 0032 exactly: live carets are y-prosemirror CollaborationCursor decorations, colour-keyed by principal kind (sage=agent, ice=human). Tracked agent suggestions are prosemirror-changeset diffs rendered as two custom marks — suggestion-insert (sage underline) and suggestion-delete (struck danger) — whose ranges are stored as Yjs RelativePositions so they survive concurrent edits; the anchored review card is a widget decoration with accept/reject capabilities that apply through ctx.transact (one audit entry each). The 'outdated' state is the conflict-aware path: when a suggestion's RelativePosition no longer resolves it renders in the warn treatment and is never silently applied. Component primitives needed: EditorContent, a FloatingToolbar, a SlashCommandList (suggestion render), a BlockHandle gutter NodeView, a CalloutNodeView, a CodeBlockNodeView, PresenceCaret + PresenceFlag, SuggestionInsert/SuggestionDelete marks, a SuggestionCard widget (accept/reject/outdated variants), and a right-rail SuggestionQueue + PresenceList + VersionStatus bound to TanStack Query off the typed RPC (ADR 0028/0029).
Critique VERDICT ON #1 QUESTION: looksAIGenerated = FALSE. Halling genuinely escapes the rejected territory, and I verified the claims rather than taking them on faith. EVIDENCE IT IS NOT WARM-PAPER / EARTH-TONE / CLAUDE-LIKE: - Neutral ramp is provably cool. All 10 steps sit at hue 215-221 with a measurable blue cast (ez-0 base #fbfcfe = hue 220; ez-9 ink #0c111c = hue 221). There is no cream/bone/paper anywhere — the base is a cool near-white, surfaces drift to ice. - The only two accents are ice-blue (hue 215) and a desaturated sage (hue 143, sat 37%). Zero hues land in the 25-60 earth band. The single warm value (#9c6a00) is confined to the 'outdated' state — a semantic warning, not a brand/identity accent. This is the opposite of clay/terracotta/rust. - The serif (Fraunces) is deliberately NOT the 'tasteful SaaS serif logo' cliché: the wordmark and all chrome are Space Grotesk; Fraunces is quarantined to long-form reading body + doc titles as an editorial gesture. That is a defensible, specific choice, not the default. WHY DISTINCTIVENESS IS 8 NOT 10: The peer-colour system (blue human / sage agent), monospace wayfinding eyebrows, hairline-grid + dotted origin-field, and the live sage AI caret with accept/reject + outdated lifecycle add up to a real, ownable point of view that no mainstream tool replicates. It is held just short of 10 by the chrome being recognisably in the modern-grotesque-workspace idiom (Space Grotesk + 3-6px radii + hairline tables read as a high-quality, but not category-breaking, app shell). It is a strong studio-grade execution of a cool-Nordic thesis rather than a format-inventing one. Specificity is in the product mechanics, not yet in the layout grammar. FIT (9): Nails the brief's thesis — humans and agents as VISIBLY equal co-editors. Agents are first-class everywhere: peer avatars with a ring-notch non-human signal, an Agents admin tab with token IDs / scoped+rate-limited badges / revocation affordances (ADR 0016), agent rows in the editors column, an 'Ask an agent' slash item. The reading view even renders the actual product invariants (exactly-one audit entry, ctx.transact, relative-position anchors). The origin-ring 'zero' mark engages the name motif. Self-hosted/admin framing is present and correct. EDITING-UX (8) — judged on screens C+D specifically: - The editor is the strongest screen. Block handles (+ / drag) on hover, a Tiptap-shaped fixed toolbar with a working block-type selector, a slash menu with sensible block taxonomy and an agent entry, and a right rail surfacing live editors + a suggestion queue + CRDT/version state. This is a credible, well-considered authoring surface. - The signature suggestion mechanic is excellent and product-true: inline ins/del marks (prosemirror-changeset semantics), an anchored review card with rationale + Accept/Reject, AND a second card shown in the OUTDATED state explaining the anchor moved under a concurrent edit. Showing the stale lifecycle, not just the happy path, is exactly the kind of detail that proves the designer understood the product. - Reading view is clean: Fraunces title, kicker, dual-author (human+agent) metadata, callout/code/quote blocks. Held back from 9-10 by: a slash menu that's statically pinned rather than caret-anchored (presentation artefact), and dense mono microcopy in the editor rail that will fatigue at real text sizes. FEASIBILITY (8): Buildable on Tiptap + a themeable layer. Everything visual is genuinely tokenised via CSS custom properties (semantic layer maps onto a raw ramp), so theming is real, not cosmetic. The ins/del marks, suggestion decorations, slash suggestion plugin, and bubble/fixed menus are all standard Tiptap/ProseMirror territory; the human+agent carets map to y-prosemirror awareness cursors. Minor caveats: the anchored-card-beside-block layout and the outdated-anchor resolution need ProseMirror decoration/widget plumbing tied to Yjs relative positions (matches ADR 0032 but is non-trivial); a handful of decorative avatar gradients (#5566a8, #7a8190, #8b93a3) are inline one-offs that should move into per-identity tokens to honour the no-hard-coded-one-offs rule. ACCESSIBILITY (6) — the one area with real, must-fix defects. Most pairings pass comfortably (body 9.5:1, headings 15.6:1, links 5.1-6.8:1, sage-700/ice-700 on tinted chips all 7-8:1). But measured AA failures exist, and one lands on the signature element: 1. SIGNATURE agent-caret flag: white 10px-bold (small text) on sage-500 #3f8a5c = 4.2:1 (needs 4.5). The human caret on ice-500 passes at 5.12. The agent label — the design's whole point — is the failing one. Fix: use sage-600 (#327049 = 5.92:1), already in-system on the Accept button. 2. Lead paragraph + ink-muted secondary: ez-6 #6b7a90 on white = 4.36:1 (needs 4.5). Affects the reading-view lead and various secondary text. Darken ink-muted ~one step. 3. Outdated kind-chip: warn #9c6a00 on warn-bg #fbf3df = 4.24:1 small text (needs 4.5). 4. ink-faint (ez-5 #79889f) clears AA-large/UI (3.3-3.6:1) but must never be used for normal-size body — currently fine, but it's a footgun the token comment half-acknowledges. None are structural; all are one-shade darkenings within the existing ramp. But shipping as-is would fail the project's own WCAG 2.1 AA gate, and the failure sitting on the agent caret is conspicuous. BOTTOM LINE: A confident, coherent, anti-generic system that decisively clears the rejection. Commits hard to cool-Nordic instead of hedging to neutral. Genuinely token-driven and Tiptap-feasible. Ship-blockers are limited to ~4 small-text contrast fixes (most importantly the sage caret flag) plus migrating a few inline avatar gradients into tokens.

GRID NOIR

grid-noir
open full ↗
#10 score 8·distinct 9/10·editing 8/10·feasible 8/10·a11y 7/10·✓ distinct

A type-foundry specimen rather than a dashboard: ink-black on bare paper, hard hairline grids and oversized grotesk display, with one electric acid-lime signal and an ultramarine ink — where humans set in graphite-and-blue and AI agents set in a first-class "machine-green" ink, two co-editors on one page.

Avoids AI-default: It explicitly rejects everything the first attempt was killed for. No warm paper / cream / bone — the background is a near-white faint-grey (#F4F4EF) read as printer's stock, never a cream. Zero earth tones: the accents are an electric chartreuse (#D6FF3F), an ultramarine ink (#1D2BFF), and a deep agent-green (#0A6E63) — a confident non-earth palette with not a single clay/terracotta/oxblood/tan note. There is no serif anywhere; the rejected "Foundry" leaned serif-as-tasteful, so this commits entirely to Archivo / Archivo Expanded grotesks set huge and tight. It avoids the Vercel/Linear/Notion minimal-SaaS look through brutalist moves a generic generator never produces: visible ink hairline rules and a 12-col grid bled through the body background, hard offset drop-shadows on app frames (10px 10px solid, no blur), a running marquee ticker, oversized index numerals and section markers, an acid-block brand "0" tile, and a giant outline-stroke EDITORZERO zero-glyph finale. Most distinctively, agents are given their own ink and chrome (machine-green chips, ▷ glyph, dashed tracked-change cards) instead of being a grey avatar — the AI-native premise is expressed in the visual system, not just labelled.

Fonts Archivo Expanded (SIL OFL 1.1) — display headlines + the zero glyph, Archivo (SIL OFL 1.1) — UI chrome + body text, Spline Sans Mono (SIL OFL 1.1) — system voice, agent labels, doc-IDs, metadata, all eyebrows
paperpaper-2 (panel)ink (text/rules)ink-softacid (signal)acid-deep (text on acid)ultramarine (human/links)blue-ink (link text AA)agent-green (machine ink)agent tint surfacevermillion (destructive)flag-ink (destructive text AA)
Motion Restraint with two or three deliberate "live" signals. A horizontal CSS-keyframe marquee ticker on the dashboard carries workspace pulse. A red "LIVE / EDITING NOW" pip pulses (scale+opacity) wherever real-time presence matters — recent docs, doc rows, the editor's co-editor rail. The editors' carets blink: a blue human caret and a pulsing machine-green agent caret with a floating mono name-flag, mimicking real Yjs awareness cursors. Row and toolbar hovers snap to the acid-lime block (120ms) with no easing flourish — fast, mechanical, print-press, never the slow fades of a generic SaaS. All motion is GPU-cheap transform/opacity and respects the static-mock budget.
Tiptap fit The editor screen maps directly onto Tiptap v3 + ProseMirror with the owned thin block layer from ADR 0031, and the tracked-suggestion model from ADR 0032 (prosemirror-changeset + Yjs snapshots). Mapping: the formatting toolbar = a Tiptap BubbleMenu/fixed-menu driven by mark/node `isActive` (bold/italic/strike/code marks, heading/paragraph/quote/code-block nodes, the Heading-2 dropdown = a node-type select); the slash menu = a `@tiptap/suggestion` plugin rendered as a FloatingMenu keyed on '/', with an extra 'Ask an agent' item that dispatches an agent task. Block handles (⋮⋮ drag + acid '+') = a NodeView drag-handle decoration / the drag-handle extension, one per top-level node. The human caret + selection and the agent's remote caret-with-name-flag = the Yjs `y-prosemirror` collaboration-cursor (awareness) plugin — each principal's clientID rendered in its own ink. The signature tracked agent suggestion (the green dashed card with ACCEPT & ATTRIBUTE / EDIT INLINE / DISMISS + rationale) = a prosemirror-changeset diff rendered as inline `ins`/`del` decoration marks plus a widget decoration anchored at the change range via a Yjs RelativePosition; accepting appends a corrective Yjs update and writes one attributed audit entry (invariant 3). The right rail's version history = Yjs snapshots, and Co-editors = awareness states. Component primitives needed: EditorContent, an Extension set (StarterKit minus defaults we own + custom block nodes/marks), BubbleMenu, FloatingMenu, suggestion/slash plugin, drag-handle NodeView, Collaboration + CollaborationCursor (Yjs), a TrackChanges extension wrapping prosemirror-changeset with accept/reject commands, and a SuggestionCard React NodeView/widget. Everything is tokenised so the editor chrome themes via the same CSS custom properties.
Critique Decisively clears the rejection criteria: background is a cool printer's grey (#F4F4EF), not cream/bone; palette is electric chartreuse + ultramarine + deep teal-green with zero earth tones; no serif anywhere (full commit to Archivo / Archivo Expanded grotesks). Reads as a real Swiss/brutalist type-foundry specimen, not minimal-SaaS and not Claude-ish. DISTINCTIVENESS (9): Combination of moves a generic generator rarely produces — 10px hard zero-blur offset shadows on app frames, ink hairline rules + bled 12-col grid, acid-block "0" brand tile, running marquee ticker, oversized index numerals, giant outline-stroke EDITORZERO finale. Best idea: agents get their own INK + chrome (machine-green chips, ▷ glyph, dashed tracked-change cards, labeled machine-caret) instead of a grey avatar — AI-native premise made structural. Held back from 10 only because grotesk-brutalist-with-acid-pop is a recognizable contemporary studio idiom, not wholly novel. FIT (8): Maps to real surfaces (collections tree, docs list, reading view, editor, admin with principals/roles/scopes/rate-limits/tokens/revoke). Human/agent ink split runs through bylines, space human%-vs-agent% bars, co-editor list, version attribution, admin table. "Zero = origin glyph" engaged without forcing. Tension: editorial-showcase skew may fatigue at daily-driver workspace density. EDITING UX (8): Editor is the hero and earns it. Tiptap-shaped toolbar (block-type select + mark groups + ▷ASK), hover block handles (drag+insert), floating slash menu with first-class "Ask an agent", distinct human caret (ultramarine) vs labeled machine-green agent caret, inline tracked .ins/.del, and a standout pending suggestion card with rationale + test-file citation + Accept-&-Attribute / Edit-inline / Dismiss. Right rail (live co-editors, open-suggestions, Yjs snapshot history) + ink status footer (saved, CRDT converged, audit +N, words) make collaboration legible. Deductions: suggestion card busy at length; slash menu and agent-caret label occupy same lower-left zone and would collide live; uppercase grotesk headings + dense hairlines tax long-read comfort. FEASIBILITY (8): All CSS custom properties, no hard-coded one-offs — token/themeable/dark story is real. Editor primitives map to Tiptap/ProseMirror directly: tracked changes ≈ marks+decorations (comment correctly cites prosemirror-changeset), carets ≈ y-prosemirror cursors, slash menu + handles are standard. Deductions: per-char agent-caret label flag + dashed suggestion overlay need care to avoid layout shift in live PM; ticker/pulse/blink lack prefers-reduced-motion; body 12-col grid via calc(100%/12) is cosmetic backdrop, won't align to content. ACCESSIBILITY (7): Computed every text pairing — strong. All body/secondary/link/agent/destructive TEXT passes AA: machine-green on its tint 5.19:1, blue-ink links 13.55:1, acid-deep on acid 11.54:1, ink-soft 6.71:1, white on machine 6.13:1. Three issues: (1) raw vermillion --flag #FF3D2E on paper = 3.19:1 FAILS AA-normal; used for live-status pulse dots + .dotnow, and red-dot status leans on color alone — fix: never render meaningful text in raw --flag (destructive text already correctly uses --flag-ink 7.03:1). (2) admin-nav count #7a7a72 on ink = 4.36:1 fails AA-normal (passes large). (3) motion elements need reduced-motion guard; human/agent hue distinction is mitigated because every chip is also mono-labeled, but small avatar stacks lean on color. All token/guard fixes, none structural. Fonts verified: Archivo, Archivo Expanded, Spline Sans Mono all SIL OFL 1.1 on Google Fonts; embed URL well-formed.

NULLSTATE

nullstate
open full ↗
#11 score 7.9·distinct 9/10·editing 7/10·feasible 8/10·a11y 5/10·✓ distinct

A neo-brutalist origin-grid system where raw structure is the ornament — hard 2.5px borders, zero radius, solid offset-blocks instead of shadows — and the product's one true idea (humans + AI agents as equal-weight co-editors) is encoded directly into the palette: VOLT lime is the human voice, ULTRA blue is the agent voice, and they sit side by side at the same loudness.

Avoids AI-default: It inverts every rejected move one-for-one. No warm paper/cream/bone — the ground is a cool structural off-white (#ECECE4) carrying a visible hairline crosshair grid (the "origin/zero" plane), not a soft cream page. No clay/oxblood/terracotta/rust — the only two accents are an electric chartreuse-lime and a hard ultramarine, both deployed as flat fills behind black text, never as a tasteful tint. No serif-on-minimal "SaaS-with-taste" default — type is pure grotesk + monospace (Space Grotesk / Space Mono), with exposed coordinate labels (`// RECENT`, `[0x03]`, `DOC-0042`), tabular numerics, and uppercase mono microcopy. No soft shadows or rounded cards — depth is a solid black/colour slab offset 6px behind a panel (the classic brutalist double-border), and `--rad:0px` everywhere. Motion is mechanical and stepped (hard hover-shift, steps() blink/pulse), never the soft blurred ease that reads as AI-default. The zero is a literal logotype glyph — a hard slashed `0` in a lime box. Nothing here resembles Vercel/Linear/Notion or the Claude/Anthropic warm-minimal look; it reads as an opinionated studio system.

Fonts Space Grotesk (Google Fonts, SIL OFL 1.1) — display/headings/UI labels, Space Mono (Google Fonts, SIL OFL 1.1) — system/coordinate labels, metadata, code, microcopy, Inter Tight (Google Fonts, SIL OFL 1.1) — dense body/running text
paperpanelpanel-2inkink-2ink-3volt (human / primary)ultra (agent / second voice)ultra-ink (text on blue)alert (destructive)
Motion Restrained, mechanical, liveness-only — never decorative easing. (1) Buttons/cards do a hard 1–2px offset-shift on hover with a solid drop-square appearing (translate + box-shadow, 0.08s linear), so interaction feels like physically nudging a printed block. (2) Two stepped keyframes: `blink` (steps(2) caret + autosave dot) and `agentpulse` (a stepped ultramarine ring breathing around the live agent avatar). (3) The agent-typing indicator in the toolbar pulses in sync with the agent cursor in the body, signalling a real second principal at work. No fades, no parallax, no blur — motion only ever marks something live (caret, presence, agent activity).
Tiptap fit The editor screen maps directly onto a Tiptap v3 + owned thin-block layer (ADR 0031/0032). Mapping: contenteditable canvas = Tiptap `EditorContent`; the title is a single-line heading node. Each `.blk` = a block NodeView rendered by the thin block layer, with a hover gutter `.handle` (drag `⠿` + insert `+`) driven by a drag-handle / NodeView decoration. The fixed `.etoolbar` is a BubbleMenu/FixedMenu wired to `toggleBold/italic/strike/code`, heading and list commands, plus a `setLink` control; the `.slash` panel is a suggestion-utility (`@tiptap/suggestion`) `/`-menu whose items call `insertContent`/`setNode` — including an "Ask an agent" item. The signature co-editing is Yjs/Hocuspocus collaboration: `.presence` avatars + the in-body `.agent-cursor` (labelled flag) come from `CollaborationCursor` awareness, with the agent rendered as a peer principal. Tracked agent edits use the track-changes layer over `prosemirror-changeset`: `.ins`/`.del` are insertion/deletion decorations (Yjs RelativePosition anchors), and the `.suggest` review chip is a NodeView/widget bound to a single changeset entry exposing Accept/Reject/Reply (accept squashes the mark; reject reverts the range). Component primitives needed: EditorContent surface, block NodeView + drag-handle gutter, FixedMenu + BubbleMenu mark/node controls, slash suggestion menu, CollaborationCursor presence layer, a TrackChange decoration set, a SuggestionCard NodeView, and a change-feed/peer side rail subscribed to awareness + the changeset log.
Critique Rendered all five screens + zoom crops; computed WCAG ratios for every text/bg pair (see below). DOES IT STILL LOOK AI/CLAUDE-LIKE? No — confidently looksAIGenerated=false. It inverts every rejected move one-for-one and it actually reads that way on screen: cool structural off-white #ECECE4 with a visible hairline origin grid (not warm cream/bone), two loud FLAT accents — electric lime #D6FF3F + ultramarine #2B2BFF behind black/white text (not clay/terracotta/rust tints), pure Space Grotesk + Space Mono + Inter Tight with exposed coordinate microcopy (// RECENT, DOC-0042, v23, [0x..]) and a slashed-zero-in-a-lime-box logotype (not serif-on-minimal SaaS-with-taste), hard 6px solid offset slabs and --rad:0 everywhere (not soft shadows/rounded cards). Black topbar, lime/blue split metrics. Reads as an opinionated studio system, nothing like Vercel/Linear/Notion/Anthropic. WHY DISTINCTIVENESS 9 NOT 10: neo-brutalism + acid-lime/electric-blue is itself a recognizable 2023–25 trend (Gumroad-era / Figma-community brutalist kits). This is a strong, unusually coherent instance of a known territory rather than a never-seen idea. The genuinely novel beat is the THESIS-IN-PALETTE: lime=human voice / ultra=agent voice at equal loudness, carried consistently across presence avatars, tracked ins/del, the two-voice change feed, contributor %, status chips, and the register-agent panel. That elevates it above a generic brutalist kit. FIT 8: agents-as-peers is encoded into the core visual system better than a neutral design could; zero/origin motif is real (slashed 0, origin grid, "Start from zero", // origin point); self-hosted OSS framing present (AGPL chip, node health, build hash, app.acme.internal). Tension: relentless brutalism + acid lime is LOUD for 8-hr long-form knowledge work and can fight document calm; some teams will find it fatiguing. On-ethos for an opinionated dev-facing OSS tool though. EDITING-UX 7 (doc+editor screens specifically): conceptually the strongest editor of its kind — inline LABELED blue agent cursor planted in the text, lime human caret, a real tracked change (ins underlined blue / del struck red) WITH a peer-reviewable suggestion card (accept/reject/reply), a two-voice change feed, presence with stepped agent pulse. Most editors never attempt to visualize human+agent co-editing this concretely. Reading view is handsome: heavy left-border lede, // 01/02/03 section coordinates, black code block with lime keywords, lime hard-bordered inline code, contributor-% rail. KNOCKED DOWN BY A CONCRETE DEFECT: in the hero editor composition the slash-menu's solid-black offset ::before slab sits ON TOP of the tracked-suggestion card and buries ~the left third of its text ("...cked / ...compatible matches the contract- / ...ll four undercounts"). The two most important AI-native elements collide in the exact shot meant to sell the thesis. Also the agent-cursor label is a fixed top:-21px ::before that will overlap the line above in dense text; full-bleed lime row-hover over body copy + text selection over lime/blue fills are visually busy/unverified. All fixable (it's a forced both-open demo state), but as drawn the signature screen ships a visible overlap. FEASIBILITY 8 with Tiptap + themeable layer: pure CSS custom properties, fully tokenized (--paper/--ink/--volt/--ultra/--bd/--off/--rad), no framework lock-in. ins/del marks, ProseMirror decorations for remote cursors, and a node-view suggestion card are standard Tiptap v3 patterns; stepped animations + hard borders trivial. Off 9–10 because the offset ::before slab system needs disciplined z-index/margin rules to avoid exactly the collision shown (real systematization cost), and per-component selection/hover contrast over the flat fills needs handling. ACCESSIBILITY 5 — fails the hard constraint it advertises ("WCAG AA" is printed in the masthead). The dominant microcopy token --ink-3 #7C7C72 FAILS AA normal-text contrast on EVERY surface it's used on, across 42 distinct selectors: on panel 3.92, on paper 3.55, on panel-2 3.23 (all < 4.5). That token IS the signature (coordinate labels, timestamps, breadcrumbs, counts, eyebrows, kicker DOC-0042, table meta). Also code-comment #6f6f68 on ink = 3.91 (fail); chrome .right #8f8f86 = 6.07 (ok but small); NO prefers-reduced-motion guard on the blink/agentpulse animations; NO :focus-visible states defined (only :hover/:active); selection contrast over lime/blue unverified. PASSES: black-on-lime 17.2, white-on-ultra 6.76, ultra-text-on-paper 6.11, ink-on-paper 16.7, ink-2 secondary 8.97 — so the two-voice system itself is sound. CRUCIAL: this is essentially a one-token fix — darken --ink-3 to ~#636358 (≈4.6:1 on panel) and it clears the big failure everywhere at once, because everything is a token, not hard-coded one-offs. Recoverable, but not AA as submitted. FONTS: Space Grotesk, Space Mono, Inter Tight all SIL OFL 1.1 via Google Fonts — open-source, no licensing risk. Light mode is canonical as required. CONTRAST TABLE (computed): ink/paper 16.67 PASS; ink/panel 18.42 PASS; ink-2/panel 8.97 PASS; ink-3/panel 3.92 FAIL; ink-3/paper 3.55 FAIL; ink-3/panel-2 3.23 FAIL; black/volt 17.19 PASS; F7F7F2/ultra 6.76 PASS; volt/ink 17.19 PASS; codecomment 6f6f68/ink 3.91 FAIL; ultra-text/panel 6.76 PASS; ultra-text/paper 6.11 PASS.

PHOSPHOR — a refined retro-computing workspace

phosphor-retro-computing
open full ↗
#12 score 7.3·distinct 9/10·editing 8/10·feasible 7/10·a11y 6/10·✓ distinct

A NeXTSTEP-meets-amber-terminal operating environment for docs: chiseled graphite chrome, a heritage phosphor-amber + CRT-green palette on cool slate (never cream), where the "zero" is a blinking origin cursor and AI agents co-edit as visibly as a second terminal session.

Avoids AI-default: Rejects every forbidden cue head-on. No warm paper, cream, or bone — the canvas is cool graphite slate (#2A2D34) with chiseled light-grey panels; no clay/terracotta/rust earth tones — the only warm note is pure phosphor amber #FFB000 used as a deliberate CRT-heritage signal, paired with terminal green #16C172. It is the opposite of the minimal-SaaS-serif default: hard 1px bevels (highlight top-left, shadow bottom-right), a real OS menubar, pinstripe NeXT title bars, scanline texture, blinking block cursors, and a VT323/Space-Mono type system. Nothing rounded-and-airy, nothing Vercel/Linear/Notion-flat, no soft drop shadows or pastel gradients. The chrome is unmistakably an authored 1989-workstation reinterpretation, not a 2020s SaaS skin.

Fonts VT323 (SIL OFL 1.1) — terminal display / boot type / numerals, Space Mono (SIL OFL 1.1) — monospace labels, metadata, code, agent tags, IBM Plex Sans (SIL OFL 1.1) — UI body + reading text for WCAG-grade legibility
slate-desktopgraphite-deeppanel-facepanel-raisedbevel-lightbevel-shadowinkink-softphosphor-amberamber-deepcrt-greengreen-deepsignal-cyanalert-redtitle-stripe
Motion Restrained, mechanical, CRT-flavoured. (1) A hard-edged block cursor blinks at ~1.06s on the wordmark "zero", the boot line, and the agent label. (2) The phosphor agent cursor in the editor pulses a soft green glow and the tracked suggestion fades+slides in 6px as if typed by a remote session. (3) Beveled buttons depress on :active by swapping highlight/shadow insets (1px nudge) — no easing, just a snap, like a real键. (4) A faint scanline sweep drifts vertically across hero/boot zones. (5) "Live" presence dots breathe. All motion respects prefers-reduced-motion (cursors hold solid, sweeps and pulses stop).
Tiptap fit The editor screen maps cleanly onto Tiptap v3 + ProseMirror (ADR 0031's owned thin block layer). The chiseled toolbar = a Tiptap BubbleMenu/fixed toolbar driving bold/italic/code/heading/list marks via editor.chain() commands; each chiseled key reflects editor.isActive() state. The "/" slash menu = a suggestion-utility ProseMirror plugin (@tiptap/suggestion) rendered as a beveled command list keyed off node types in the owned schema. Left block handles = NodeView drag handles per top-level block (the ⠿ gutter). The signature agent layer maps to ADR 0032's track-changes: the green phosphor cursor is a remote y-prosemirror collaboration-cursor decoration carrying the agent principal's label (ADR 0016 agent principal); the tracked agent suggestion is a ProseMirror Decoration / inline change-mark (prosemirror-changeset) with accept/reject affordances that commit or revert the ranged change. Primitives needed: EditorContent host, a Toolbar component, a SlashCommandList (suggestion render), a BlockHandle NodeView, a CollabCursor decoration layer, a SuggestionMark + ChangeReviewPopover, and a PresenceBar fed by the awareness protocol. Body content is portable block-JSON for the published-HTML projection.
Critique Rendered all 5 screens + zoomed the editor suggestion block and ran a programmatic WCAG audit. DOES IT STILL LOOK AI/CLAUDE? No — and decisively so. True-black CRT canvas (#05070a) with scanline+grid wash; phosphor accent system (green/cyan/amber/violet/magenta); 100% monospace (JetBrains Mono chrome + IBM Plex Mono prose). Verified the token file and the pixels: ZERO warm paper/cream/bone, ZERO clay/oxblood/terracotta/rust/tan. It reads authored-by-a-studio (vim status bar, box-drawing tree, command prompt, ## heading markers, ▸ bullets), not Vercel/Linear/Notion-minimal and not Anthropic-warm. DISTINCTIVENESS (9): The terminal-as-design-system thesis is executed with real conviction and is internally coherent across every screen. The cyan=human / amber=agent duotone is a genuine colour LANGUAGE, not a label — present in carets, presence rail, activity feed, principal table, space chips. The editor's tracked agent-suggestion block (amber frame, green inserts w/ underline, magenta strikethrough, "+38/−6 · will write 1 audit entry") is the strongest single moment and is genuinely memorable. Held back from 10 only because true-black + phosphor + scanlines is itself a recognizable genre (Warp/cyberpunk-terminal), so it's a bold pick within a known idiom rather than a wholly novel one; and the slashed-zero wordmark under-resolves at small sizes (reads near-parenthesis). FIT (9): Exceptional alignment with the editorzero brief. "Principals are polymorphic / agents-as-users is literal" → one shared principal table in admin with a KIND column + per-agent human-owner attribution + scope chips. "Every mutation = one audit entry" → surfaced in the suggestion diff line, activity feed cap labels (doc.update/doc.publish/doc.restore), and edit-trace. Markdown-fidelity tiers (lossless/directive/opaque) get their own column. Capability names (doc.create, doc.move, acting_as) are shown as first-class. The "/agents" + "Ask an agent…" slash entry makes delegation a block action. This is the agent-native architecture made visible. EDITING-UX (8): Doc + editor screens are strong. Block handles (+ / drag), slash menu with descriptions+shortcuts, formatting toolbar, presence rail with scope + acting_as, live carets with name flags, "synced · CRDT converged" affordance, INSERT/NORMAL modes. The suggestion accept/reject/suggest-change flow is excellent and exactly the human+agent-as-peers interaction the brief demands. Reading view (C) stays readable despite full mono. Reservations: full-monospace BODY prose at 14px is high-character-cost for long-form docs and will fatigue some writers (mono-for-reading is a taste bet that not all users share); the dense chrome (status bars, traces, glyph rails) is gorgeous but is a lot of simultaneous signal for a daily writing surface — could feel busy vs. a calm canvas. FEASIBILITY (7): Buildable on Tiptap + a themeable component layer; everything is CSS-custom-property tokenized (palette/ink/line/geometry all vars, retheme by overriding :root). Tiptap cleanly supports the block handles, slash menu, collab carets (y-prosemirror cursors → just swap the cyan/amber colors), and a tracked-suggestion mark/decoration. Concerns that cost points: (a) the scanline overlay uses position:fixed + mix-blend-mode:multiply over the WHOLE viewport incl. the editing surface — over a live ProseMirror canvas this risks caret/selection legibility and repaint cost; should be opt-out / reduced-motion aware (the typewriter JS already respects prefers-reduced-motion, the scanline does not). (b) Heavy use of box-drawing/geometric glyphs (◇ ▰ ¶ ⠿ ≋ ⛁ ⚿) as iconography is font-dependent and will render inconsistently across OSes unless shipped as an icon set rather than literal glyphs. (c) Many phosphor glows (box-shadow/text-shadow) are fine but want a "flat" theme token to disable for low-end displays. ACCESSIBILITY (6): Audited contrast. PASSES AA comfortably: primary ink 15.4:1, ink-mid 6.6:1, and every accent (green 15.4, cyan 11.6, amber 11.6, violet 7.8, magenta 6.9). REAL FAILURES to fix: --ink-faint #2c3a37 = 1.70:1 on bg and it is NOT purely decorative — it carries doc IDs (doc_01JQ8…a7f2), "by <name>" sub-labels, and timestamps (.when small, .last small, .id) → those fail AA badly. --ink-low #4f655f = 3.0–3.2:1: OK as large text but it's used on 10px uppercase section labels and chrome, which is below AA for that size. Also: the human/agent channel distinction leans on colour (cyan vs amber) — there ARE redundant text labels (USER/AGENT chips, names) so it's not colour-alone, but the duotone dots/carets/rails should keep their text/shape pairing rigorously. Fixes are pure token edits (lift ink-faint to ~#52635f+ for text roles, keep the dim value only for hairline rules), so the ceiling is high — but as-drawn it does not fully meet the AA hard constraint. VERDICT: Accept as a top-tier direction. It is the clearest answer to "make it NOT look AI-generated," and uniquely among safe options it encodes the product's agent-peer thesis into the visual system rather than bolting it on. Ship-blocking before build: (1) raise ink-faint/ink-low where they carry text to clear AA; (2) make the scanline/glow overlay opt-out + reduced-motion-aware and verify it doesn't degrade the Tiptap caret; (3) decide deliberately on full-mono body prose for long docs (consider an IBM Plex Mono → optionally a humanist fallback toggle, or accept mono as a brand-defining bet); (4) ship glyphs as an icon set, not literal unicode; (5) resolve the slashed-zero wordmark at small sizes.