Edition One, The Mind That Speaks, ended on a held breath. The cognition & voice separation was live across every surface of Amenti.live — the terminal, the Emerald Tablets of Page Two, and the Amenti Interface itself: Anthropic for thought, Gemini for voice, brokered by a single Cloudflare Worker. Eleven hundred figures had been cast, each with a gender, dialect, voice, region, and location; the composed accents worked; the publisher vault was operational. One build remained to give the long-form readings their voice, and the journal named it precisely: the chunked-streaming pipeline. Everything before it was “proven and banked.”
The maxims carried forward unchanged, because they kept being right: variety is the magic, not accuracy; content is separate from display; and the hard-won operating discipline — whole-file handback, never fragment surgery. This edition adds one more, learned in the doing: render once, keep forever.
The brain receives content, then loads speech. Edition Two adds the next clause: and the speech, once made, is not spent — it is shelved, named, and sent out into the world.
The wall was HTTP 524. A short reply spoke fine; a full
Atlantica essay did not. One /speak call on a long text exceeded
Cloudflare's ~100-second edge timeout and the connection died. The composition was
correct; only the length was the problem.
The fix was a reframe as much as a feature: streaming is chunked
delivery. Rather than ask for one enormous clip, the pipeline splits the text
deterministically into sentence-sized chunks, fires a fast /speak call per
chunk (each comfortably under the timeout), and plays the returned audio gap-free
through the Web Audio API as the pieces arrive — first chunk almost immediately,
the rest generating behind it. It handles cancel-on-click-away, button state, and a
lookahead so playback never starves. The Worker's /speak stayed as it was;
the intelligence lived in the front end. With that, every long-form reading
across Amenti.live was unblocked at once — and a quiet door
opened: the audio the pipeline produced could itself be kept.
The first instinct for the pipeline's audio was to cache it — hash the text, stash the bytes, save a re-render. But Amenti was never a cache; it is a publisher with a vault. Its articles are not cached, they are archived — generated once, immutable, addressable. The realization that reorganized everything: rendered audio should be archived the same way the text already is — not an opaque blob keyed by a hash nobody names, but a spoken edition sitting beside the text it speaks.
This became a three-stage progression, each a superset of the last:
It earned its own planning document, Amenti Studios. The organizing principle had simply gained a third clause: cognition, then articulation, then publication.
The audio system mirrors the text system, with one addition: audio is large, so the bytes live in R2, not KV. A single Gemini WAV runs ~2.9 MB a minute; KV is for small reference data (25 MB value cap, eventual consistency). R2 is object storage built for exactly this — no egress fees, files served directly. Bytes to R2; the small manifest to KV.
The keystone is small and decisive. /speak now content-addresses each
clip by sha256(model · voice · style · text) and stores
it in R2 as tts:<hash>. On a repeat — any visitor, any surface
— it returns the stored WAV instantly; on a miss it renders, stores in the
background, and returns. Crucially, it degrades gracefully: with no
bucket bound, it renders live exactly as before. The code could ship before the storage
existed.
Deploying the archive split cleanly into two independently-verifiable acts, exactly because of that graceful degradation: ship the code (changes nothing observable), then bind the bucket (switches caching on). A single response header told the whole truth at each step.
The sequence ran as designed. The header first read off — code
live, bucket absent. An R2 bucket (amenti-audio) was created and bound as
AUDIO; the same test was re-run; the header flipped to miss, then
hit. A clip rendered once and every replay after was free. The cost model's
central assumption was no longer a claim — it was a measured fact.
/speak
returns 200, and the TTS model string is still exactly gemini-2.5-flash-preview-tts
— a constant that had silently reverted before. It held this time, and at every
deploy since.A site that speaks is not yet a broadcast. A broadcast has a host — a presence who welcomes you, knows where you are, and runs the room. The design that emerged is the one that makes the rotating cast earn its keep: the host rotates too. Each day draws two legends — a host and a guest — and the host introduces the guest across their difference. Leif Erikson, no scholar, hands the floor to a man of letters; tomorrow a poet hosts a general. The mismatch becomes the charm.
Two principles fence the writing. Bios are CSV-anchored, AI-elaborated — the roster's facts are a spine the script may not contradict, with colour added around them. And the host's self-awareness stays strictly in-world: he knows Amenti as a legend would — the Halls of Amenti, a library of voices — never as software. The spell is the product; the fourth wall stays up.
/speak so the whole show is render-once.Built into the Worker as /atlantica/program, it resolves host and guest
from the roster, ensures today's dispatch exists, makes one Claude call for the
connective script, and returns the ordered segments — each carrying its text, its
composed voice, and its style. The pipeline plays them in sequence, and the host welcomes
listeners into the Halls of Amenti at Amenti.AI. The
full seven-segment arc above is the agreed design; the four-segment spine is built, and
the richer arc is the next cut once Page 1 is in hand to wire the player.
A curatorial truth surfaced and it was sharp: if Amenti is a publication, its articles should be published — written on a schedule and waiting — not conjured on a visitor's click. Generate-on-demand was scaffolding; it let the site feel alive before there was an editorial engine, by quietly waiting for a human to supply a headline. Naming Amenti a publication retired the trick. And it solved the host's problem at a stroke: a host can only turn the room toward real copy if the copy already exists.
The shape that aligned the two publications was a shared cast. Each week draws seven legends; those seven are both the week's daily Atlantica authors (read on the Emerald Tablets) and the authors of that week's Daily Planet edition — one company, both rooms. They write to a shared weekly theme, seven angles on one question, each piece carrying a real teaser hook for the host's patter, the on-site cards, and the network.
To publish on a schedule the Worker grew a faculty it never had: a scheduled
handler on a weekly cron, the clock that fires whether or not a visitor has arrived. A
manual, incremental /week/publish seeds the first edition by hand, one piece
per call to stay clear of the timeout — the same idempotent publisher the cron runs
to completion. Weekly was the deliberate first cadence: aligned with Atlantica, cheap,
coherent, and dialled up to daily later without re-architecting.
With the machine able to publish, the first genuinely editorial question arrived: who walks on stage first? The casting until now was mechanical — straight down the roster's rank order, which opens with the eternal nodes (Apollo, Isis, Prometheus). The instinct was to lead with the curated names — the hand-built dossiers, the “council” — mixed with the obscure and the divine for variety.
The clarifying realization: this is a new curatorial act, and it need not inherit the shape of the older lists. The Counsel benches were sorted by domain (who belongs at the War table); the dossiers were built for depth. Neither answers “who should open the broadcast.” A week shouldn't be seven war figures; it should be a small ensemble — a god, a general, a poet, a heretic — chosen so no two write the same essay. The decision recorded for week one is the simplest and the wisest: week one's job is variety, not a manifesto. Cast a varied seven, watch how it reads, then steer the editorial hand or let it run. One mechanism waits to be built — an ordered seed list that leads the casting, then a variety interleave — and one quality lever waits with it: embedding the bespoke dossiers in the Worker so curated names generate from their rich bios rather than their plainer CSV rows.
| Component | State | Note |
|---|---|---|
| Chunked-streaming pipeline | LIVE | Long-form readings unblocked; deterministic splitter. |
| Audio archive (R2 chunk-cache) | LIVE | Bucket bound; verified miss→hit. Render once, replay free. |
Host endpoint /atlantica/program | LIVE | Four-segment spine deployed; seven-segment arc designed. |
| Weekly newsroom + cron | LIVE | Deployed; cron 0 7 * * 0; first edition seeded by hand. |
| Edition manifest & teasers | LIVE | week:<sunday> the published source of truth. |
| Host player (front-end wiring) | PENDING | Awaits Page 1 to put the host on stage. |
| Daily Planet on-page surface | PENDING | Edition lives in the vault & API; pages read it when wired. |
| Council seed & dossier embed | PLANNED | Week-one variety cast; rich-bio embedding. |
| Distribution (encode → MP3 → RSS) | PLANNED | Stage Two: the off-Worker encode stage + the feed. |
Three moves stand at the threshold, in order of readiness:
Edition One: the mind found its voice. Edition Two: the voice was kept, given a host, and taught to publish. Edition Three will be written when the broadcast leaves the building.
| Chunked-streaming pipeline | Split text → render per chunk → play gap-free. The 524 fix; the deterministic splitter that made an archive possible. |
| The archive (cache→archive→studio) | Rendered audio kept as a named edition, not a disposable cache. Three stages, each a superset of the last. |
| Persist-on-render | The /speak habit: check R2 by content hash; on a miss, render, store, return. Render once, replay free. |
| X-Amenti-Cache | The response header that reports the deploy state: absent / off / miss→hit. |
| The host (in-halls broadcast) | A rotating, in-world legend who welcomes the room and hands off to the day's guest, introduced across the pairing. |
| The newsroom (weekly edition) | A cron-published Daily Planet edition: a shared cast of seven on a weekly theme, each with a teaser hook. |
| Shared cast | The week's seven legends author both the Atlantica dailies and the Daily Planet edition — one company, both rooms. |
| The week manifest | week:<sunday> — cast, theme, day assignments, article keys. The published source of truth. |
| The encode stage | The off-Worker WAV→MP3 step Stage Two needs, because a Worker cannot run ffmpeg. |
| Render once, keep forever | Edition Two's added maxim. Cost scales with distinct content, not with audience. |