simocracy-v2 · fieldnotes-landing-port
The Simocracy landing page has been reskinned with the fieldnotes aesthetic — deep forest cloth, gold foil headings, EB Garamond serif, IBM Plex Mono small-caps labels, a rotating ASCII globe, and pixel citizens walking along the hero. This report is a guided tour of the new surface.
Full interactive tour: hero with ASCII globe + walking sims, scroll through the six cloth windows, visit the Create a Sim CTA, return to the landing. Drag the timeline to re-examine any beat.
═ LABEL ═ markers, gold status pills (LIVE, OPEN).
0:10–0:13Hover-lift on The Senate window — .cloth-window-shadow:hover raises the card 2 px and deepens the shadow.
0:13–0:17Continue scrolling to reveal the three primitives (My Sims, Gatherings, Skills) and the full-width Stack window.
0:17–0:20Foil footer strip at the bottom: SIM · simocracy · a governance field manual · simocracy.org · © 2026.
0:20–0:30Scroll back up; click CREATE A SIM →; route transitions to /my-sims. Navbar remains intact across the route change.
0:30–0:52Return to landing via browser back — walking sims resume, globe resumes rotation. No re-render jank.
migration/pixelHeadline. R1 shipped the whole cloth+foil landing in one pass. The remaining pages (Senate, Frontier Tower, Gallery, My Sims, Skills, Docs) are untouched, as scoped. One post-ship bug — the ASCII globe rendered skewed because var(--font-mono-landing) (declared inside Tailwind 4's @theme inline) does not emit a runtime CSS custom property — was diagnosed and fixed in commit 397c1f1. Navbar still uses the pre-fieldnotes charcoal palette; that is deliberate R2 scope.
--ink-on-cloth) on body.═ SENATE ═), CTA buttons, status pills, footer strip. Always uppercase, tracking 0.18–0.22em.app/layout.tsx for other pages; not used on the landing..cloth-surface lays two 1-px-on-3-px repeating gradients over the cloth color, evoking a woven texture. Scoped to the landing, not global.bg: --foil, color: --cloth, uppercase Plex Mono with 0.22em tracking and a trailing →. Hover: --foil-dim.═ LABEL ═ form, optional status pill on the right.
ming, cryptobenthic, Einstein — fetched live from the indexer)
═ THE SENATE ═ and ═ FRONTIER TOWER ═, both with LIVE status pills. Enter-the-floor / Visit-the-tower CTAs in foil mono
═ STACK ═ window — ATProto · Hypercerts · OpenRouter · Octant · FtC. Foil footer strip closes the page: a governance field manual · © 2026
PASS The whole cloth aesthetic lands on first attempt. Hero, windows, walking sims, status pills, scanline cloth background, gold foil headings, italic Cormorant taglines, foil footer strip — all pixel-accurate to the fieldnotes reference. The walking-sim pipeline (sprite atlases, emote bubbles, edge-bouncing) was extracted into hooks/useLandingWalkingSims.ts and reused unchanged, so no sprite regressions.
FIXED ASCII globe was skewed on first render — now circular. The globe's <pre> led its font stack with var(--font-mono-landing), a token declared inside Tailwind 4's @theme inline. Those tokens feed Tailwind utilities at build time but do not emit runtime CSS custom properties. With no fallback, a var() that resolves to an empty string invalidates the entire font-family declaration per the CSS spec, so <pre> inherited sans-serif from <body>. Non-monospace → uneven glyph advances → square WebGL sphere maps to a warped character grid → egg-shaped globe.
Fix: Lead with var(--font-plex-mono) — the real next/font CSS variable actually set on <body>. Confirmed in-browser via getComputedStyle:
// before
fontFamily: 'var(--font-mono-landing), var(--font-plex-mono), "IBM Plex Mono", Menlo, ui-monospace, monospace'
// <pre> resolved to: "ui-sans-serif, system-ui, sans-serif, …"
// bounding rect: 547 × 480 (aspect 1.14 — egg)
// after (commit 397c1f1)
fontFamily: 'var(--font-plex-mono), "IBM Plex Mono", Menlo, ui-monospace, monospace'
// <pre> resolved to: "IBM Plex Mono", "IBM Plex Mono Fallback", …
// bounding rect: 480 × 480 (aspect 1.00 — circle ✓)


DEFER Navbar still uses the pre-fieldnotes glass/charcoal palette. The shared navbar (components/navbar.tsx) is used across all routes. Restyling it for the cloth theme on the landing would either (a) fork it into a landing-specific variant or (b) restyle it globally and force every other page to also move to the cloth theme. R1 deliberately shipped the landing with the old navbar on top, marked with // TODO(fieldnotes), so the design-port decision is explicit. A thin border-b foil-ghost divider sits between the navbar and the cloth surface as a visual handoff.
DEFER Sim name-tags still use sans-serif white-on-black. The walking-sim canvas labels each citizen with a small black pill + white sans-serif text. That matches the old SaaS aesthetic; on the cloth surface it reads as a foreign element. R2 candidate: re-render tags with Plex Mono, foil background, cloth-colored text, same footprint.
DEFER Old landing components left in place. components/landing/hero.tsx, globe.tsx, and feature-grid.tsx are the pre-fieldnotes versions. They are no longer imported anywhere, but were kept in the repo for one review cycle. R2 will delete them once the new landing has stabilized.
components/fieldnotes/cloth-window.tsxcomponents/fieldnotes/ascii-globe.tsxcomponents/fieldnotes/foil-button.tsx
Landing-specific
components/landing/hero-cloth.tsxcomponents/landing/window-gallery.tsx
Extracted hook
hooks/useLandingWalkingSims.ts (lifted intact from the old hero)
Texture asset
public/globe-solidmap.webp (copied from fieldnotes)
Brief + screenshots
plans/FIELDNOTES_PORT_BRIEF.mdplans/fieldnotes-port-r1.png (headless)plans/fieldnotes-port-r1-live.png (live browser)plans/fieldnotes-port-r1-globefix.png (post-fix)
app/globals.csscloth / foil tokens, .cloth-surface scanline class, .cloth-window-shadow lift
app/layout.tsxadded EB Garamond, Cormorant Italic, IBM Plex Mono via next/font. Syne + Outfit preserved for other pages.
app/page.tsxServer Component renders <HeroCloth> + <WindowGallery> + inline <ClothFooter>
migration/pixel
Commits
4cf004a — feat(landing): port fieldnotes cloth+foil aesthetic (R1)ff59f63 — docs(landing): add live-browser screenshot397c1f1 — fix(landing): globe was elongated — resolve monospace font var properly
Buildnpm install && npm run build → passes (next 16.0.7 + turbopack)
DevPORT=3005 npm run dev → http://127.0.0.1:3005/
Verify globe
document.querySelector('pre').getBoundingClientRect() → aspect should be 1.00
Verify font
getComputedStyle(document.querySelector('pre')).fontFamily → should start with "IBM Plex Mono", not ui-sans-serif
Capture
agent-browser record start assets/walkthrough.webm http://127.0.0.1:3005/agent-browser record stop.
Produced by Claude (PM/chief designer) with Claude Opus 4.7 (engineering) in a tmux pair-programming session. The full brief shipped alongside the code at
plans/FIELDNOTES_PORT_BRIEF.md. Next brief (R2) will cover the navbar port, sim name-tag restyling, old-component cleanup, and (possibly) the Chaos/Order toggle + draggable window layout from fieldnotes' desktop mode.