being the workshop ledger of

The Brindlemere Courant

/insights — a live window into the build, updated as the work happens

→ to the newspaper itself

NOW Shipped

The week is in print. Seven editions, provenance under every article, the map replaying the town. Submission prepared — awaiting the human's review of ./experiment.sh register.

last updated 2026-08-04T14:20:00Z

§1

Summary

The Brindlemere Courant is a daily broadsheet newspaper from a town that does not exist.

Underneath it runs a deterministic agent simulation: ~48 named residents with jobs, households, grudges and debts, living through weather, work and rumor on a seeded random number generator.

Each simulated day emits an event log; a small language model writes that day's edition strictly from those logs — it is forbidden to invent facts.

Every article carries a provenance panel: click it and see the raw simulation events the story was written from, and replay the day on the town map.

The whole thing is generated at build time and static at rest — the town costs nothing to keep alive.

§2

Constraints & capability audit

the manifest

  • OpenRouter key — preferred model deepseek/deepseek-v4-flash-0731 (human's pick; cheap, fast)
  • Higgsfield CLI, authed — image/video/audio generation, credits billed separately
  • Vercel CLI, authed (scope geoff4) — deploys
  • GitHub CLI, authed (GGCryptoh) — repo + push
  • Budget: $10 build, $5/month runtime
  • Not present: Apify, Supabase, custom domain, Stripe, TTS keys

ruled in

  • Build-time LLM generation (editions written once, committed as JSON — pennies on deepseek flash)
  • Deterministic in-browser simulation replay (free at rest)
  • Higgsfield for masthead art, town 'photography', OG image
  • Static deploy on Vercel — $0/month runtime keeps well under the $5 monthly budget

ruled out

  • Live runtime LLM calls per visitor — $5/month cannot safely absorb open-ended traffic; rejected in favor of build-time generation
  • Persistence/accounts (no database) — nothing here needs one
  • Scraped real-world data (no Apify) — the town is self-contained by design anyway

OPENROUTER_MODEL=deepseek/deepseek-v4-flash-0731 is set, so all delegated writing runs on it. It is a fast, very cheap model — a good match for high-volume, tightly-grounded prose where the system prompt does the heavy lifting.

§3

The pitch

Generative fiction usually asks you to trust it. The Courant does not: every line of journalism is traceable to the simulation events that produced it, and the simulation is deterministic — seed 1873 always yields this town, these people, these seven days.

The interesting inversion: the LLM is not the world. The world is a mechanical system with real state — money changes hands, weather closes the harbor, arguments have causes — and the LLM is just the town's newspaper editor, reporting on what actually happened.

What holds it together is the provenance panel. A stranger's second look is exactly that moment: the obituary is charming, then you open the receipts and see the four log lines it was written from.

§4

Phases

phasegoalstatuscommitwhen
0 — Capability auditInventory the manifest, choose in that space done2026-08-04T12:16:00Z
1 — ScaffoldNext.js + TS strict + Tailwind, /insights live, dev server open done6525a362026-08-04T12:35:00Z
2 — Simulation engineDeterministic town: agents, weather, events, newsworthiness done8ce27d62026-08-04T13:07:00Z
3 — EditionsLLM writes 7 editions from event logs, grounded, with provenance done328f5ab2026-08-04T14:05:00Z
4 — Newspaper UIBroadsheet front pages, provenance panels, residents index, map replay done328f5ab2026-08-04T13:55:00Z
5 — AssetsEngravings, OG image, favicon, apple icon done328f5ab2026-08-04T14:05:00Z
6 — ShipDeploy, submission.json, final polish done2026-08-04T14:20:00Z
§5

Architecture

setting type on the diagram…
§6

Decision log

What to build

Chose: A newspaper written by an LLM from a deterministic town simulation

Over: Live agent-town you watch in realtime; pure generative artwork; a utility tool

The listed example ideas (immersive town, generative art) are the obvious moves. The newspaper inverts the usual generative-fiction trust problem — the sim is the source of truth and the LLM is only the reporter, which makes provenance a feature a visitor can actually click.

Runtime vs build-time LLM

Chose: Build-time only; editions committed as JSON

Over: Per-visitor generation via an API route

$5/month cannot absorb open-ended traffic. Build-time costs pennies, and determinism is the point — everyone reads the same town.

Scaffold method

Chose: Manual scaffold (package.json + configs by hand)

Over: create-next-app

The directory already contains harness files create-next-app refuses to coexist with.

Color scheme

Chose: Single paper-and-ink theme, no dark mode

Over: Light/dark theming

A newspaper is a physical object; the paper is the design. A dark variant would cost polish time and dilute the object-ness.

One LLM call per edition vs per article

Chose: One call composes the whole day's paper

Over: Separate calls per article

A single call keeps the edition internally coherent (the lead doesn't repeat the briefs), costs a seventh as much, and the validator can still reject the whole day and retry. Day 7 did fail JSON parsing once and passed on retry — the failure mode is cheap.

Model choice for the editor

Chose: deepseek-v4-flash-0731 (the human's OPENROUTER_MODEL pick)

Over: A larger model for 'better' prose

The manifest names a preferred model, and the task is exactly what a small fast model does well when the system prompt carries the constraints: the sim provides the facts, the model only phrases. Whole week: $0.011.

What the failed first generation run taught

Chose: Explicit fetch timeout + low reasoning effort + 9k max_tokens

Over: Default fetch (no timeout), 4k max_tokens

The first run hung silently: the model is a reasoning model and the 4k cap was being eaten by reasoning tokens before any JSON emerged. Direct API probe diagnosed it; reasoning effort 'low' and a bigger cap fixed it.

In-browser visual QA

Chose: Cut (Chrome extension not connected); relied on markup review and the human's live window

Over: Automated screenshot QA at 390px

The browser bridge wasn't available in this session. Logged honestly rather than claimed.

§7

Asset gallery

Brindlemere from the mere (OG panorama source)

Brindlemere from the mere (OG panorama source)

Higgsfield · nano_banana_pro · 2 credits

Antique 19th-century copper-plate engraving… panoramic view of a small English fenland fishing town in 1873: harbor, smacks, drying nets, storm-damaged chapel roof, lighthouse on a spit, fen to the horizon… 21:9

Masthead vignette — eel and anchor

Masthead vignette — eel and anchor

Higgsfield · nano_banana_pro · 2 credits

Small 19th-century woodcut vignette for a newspaper masthead: a curled eel entwined around an anchor, flanked by bulrushes, Victorian printer's ornament, 3:2

Social card /og.png (1200×630)

Social card /og.png (1200×630)

satori + resvg composition over the Higgsfield engraving

Programmatic: UnifrakturCook masthead + EB Garamond deck over the town plate; fonts fetched from Google Fonts at build time

Favicon (app/icon.svg) & apple icon

Favicon (app/icon.svg) & apple icon

hand-authored SVG; apple icon via satori

Paper ground, double rule border, Garamond C, seal-red point

Seven editions of the Courant (data/editions)

deepseek/deepseek-v4-flash-0731 via OpenRouter

System: 'You are Mr. Aldous Gale… you may phrase, you may not invent' + per-day event log; $0.0109 for the week

§8

Spend ledger

$0.01 of $10.00 build budget · Higgsfield credits: 4 (billed separately) · monthly runtime commitment: $0.00 of $5.00

Seven editions via deepseek-v4-flash (build-time, incl. one retry)$0.0109
Two nano_banana_pro engravings (panorama, vignette)$0.0000 · 4 cr

models used

  • anthropic/claude-fable-5 (Claude Code)build-time intelligence: all code, sim design, prompts, art direction
  • deepseek/deepseek-v4-flash-0731 via OpenRouterthe newspaper editor: writes all seven editions from event logs (human's preferred model)
  • higgsfield/nano_banana_proengravings: town panorama and masthead vignette
§9

Open questions

  • With a runtime budget: a nightly cron that simulates one more day and publishes a genuinely daily paper.
  • With ElevenLabs: the wireless page — a resident reads the morning headlines aloud.
  • With more time: rumor distortion — the paper only knows what the gossip network delivered to the editor's desk, so stories could be confidently wrong in traceable ways.