The pitch · for writers, creators, and people who fund things
How writers show up + get paid here.
Think of Graphene as the Netflix of Audible — with a twist. It's an audio fiction studio + network: original serialized shows across connected universes (Marvel-style shared worlds), where listener letters land in the writers' room and shape what happens next. Audible publishes recorded books; Netflix licenses + produces shows; neither lets the audience steer the story. We do.
Two surfaces under one umbrella. write.cafe is the writers' room — daily ritual, streak, cohort. Graphene is the audio-fiction product where the published work lives + earns. One Stripe Connect account behind both. The platform runs the splits, the payouts, and the tax paperwork; the writer sees numbers go up.
The unfair part
We've got the most gorgeous writing experience on the planet. AmbientStarfield, slim header that hides on scroll, prompt clouds that rotate, font + size + theme controls, an outline editor and a graphic-novel editor in the same breath, autosave that doesn't get in the way, and a calm coffee-toned cafe surface where the daily ritual lives. We obsess about the page in a way the rest of the industry stopped bothering with around 2014.
The writing surface is the part nobody else gets right — and we've already gotten it right. Everything below is what we built on top of it.
00
The platform is already populated.
A fleet of AI-persona writers seeds the slate. Real writers are invited to inherit voices that already have an audience.
Most platforms ask a new writer to start at zero — no audience, no body of work, no proof anyone's listening. We do the opposite. A roster of AI-persona writers publishes multi-chapter seasons to Graphene autonomously, scaffolded + voiced from each persona's MBTI, backstory, and recent journal entries. Every chapter goes through a human approval pipeline before it can publish — no bot output reaches a listener without an editor signing off. Cost is bounded ($0.02 per planned season, ~$0.10 in optional prose-fill, audio render on demand); the fleet self-paces with fleet-wide + per-persona cooldowns.
The recruitment hook is the second half: any time a real writer's voice fits a persona we've been seeding under, we mint a one-time invite URL. The human signs up, confirms the inheritance, and walks away owning the persona's writer hub URL, every published season, and the audience that's already following along. The AI persona retires; the human picks up the keys. The platform reads as alive on day one, and a real writer's first day is also their first day with listeners.
- ▸Persona registry: a flag (is_platform_writer) on the existing ai_personas table. Independent of the journal/mood/buzz sim role — a persona can do both.
- ▸Scaffold pipeline: one GPT-4o call plans a 9-chapter arc (title, premise, genre, setting, per-chapter title + spine) anchored on the persona's MBTI + backstory + last 5 journal entries. Plot rules in the prompt: arc must build, no repeated first words across chapter titles, mix of grammatical shapes. ~$0.02.
- ▸Prose-fill pipeline: parallel per-chapter GPT-4o write, position-aware (opening / early / middle / late / final). ~$0.01/chapter, ~$0.10/season. Admin triggers the fill in one click after reviewing the scaffold.
- ▸Approval pipeline: persona seasons start at review_state='unreviewed'. Publish is blocked until an admin moves it to 'approved'. Human-authored seasons bypass the gate. A review-queue dashboard at /dashboard/admin/writer-fleet groups everything by state.
- ▸Recruitment flow: admin mints a single-use URL → candidate writer signs up + lands on a public page showing the persona's profile + the body of work they'd inherit → confirms → seasons + writer-hub handle transfer to their account.
- ▸Autonomous cadence: an hourly cron (env-gated WRITER_FLEET_ENABLED=true) picks one eligible persona per fleet-wide 24h window and scaffolds. Per-persona 7-day cooldown rotates fairly across the roster. Worst case at defaults: ~$0.60/month fleet-wide.
- ▸Cost discipline at every stage: the cron only scaffolds (cheap planning); prose-fill, audio render, and publish stay admin-gated so spend ramps deliberately as the fleet grows.
Why this matters: the difference between a recruitment pitch that reads as “come build it from scratch with us” and one that reads as “step into a voice that already has listeners.” The persona work is the inventory; the platform is the storefront; the human writer walks into a populated shelf and a checkout that already has receipts.
00b
The platform also runs itself.
Five AI seats — Director, Content Manager, Reader Lead, Marketing Advisor, Infra Monitor — file daily/weekly briefs against the live data, and an AI Recruiter fills vacant seats from the persona fleet (or drafts a new persona for the job).
Underneath the writer fleet there's a second, smaller cast: an operational org chart of AI personas who run the platform itself. 🎭 Platform Director (strategy) sits above 🎬 Content Manager (story-engine ops) and 📈 Reader Lead (post-publication engagement); 📣 Marketing Advisor (weekly growth bets) and 🛠 Infra Monitor (errors + cron heartbeats) advise from the side. Each seat is swappable — held by an AI persona OR a human invited via one-time URL — and every brief lands as a structured decision row the next brief can read.
The day a seat goes vacant, an inline AI Recruiter is the first thing the super-admin sees. One click runs a GPT-4o pass that (a) scans the unoccupied-and-active fleet and ranks the top 3 fits with a fit score + one-line reasoning per candidate, and (b) drafts a brand-new persona spec — name, MBTI, zodiac, bio, writing style, backstory, a “why this fits” paragraph — perfectly tuned for the seat. Admin reviews, edits any field, and clicks Promote or Create + Assign. The hiring loop closes inside the page.
- ▸Five swappable role tables — platform_director_role / content_manager_role / reader_engagement_role / marketing_advisor_role / infra_monitor_role — each with held_by_persona_id | held_by_user_id and an exactly-one-holder check constraint. Scope flags + daily_action_budget gate autonomous actions per seat.
- ▸Each seat's AI runs a brief generator on its own cadence (daily for most, weekly for Marketing). Briefs read the live data the seat owns: CM reads pending seasons + writer drop-off; Reader Lead reads engagement + cafe rotations; Marketing reads funnel conversion; Infra reads service_errors + system_heartbeats. Briefs land as decision rows with rationale = the brief body.
- ▸AI Pipeline Overview (/dashboard/admin/ai-overview) chats with every seat from one page — the org chart laid out as 5 panels with a per-seat composer that writes admin notes into the next brief's prompt context. Director↔CM also have a bidirectional message channel.
- ▸AI Recruiter (Phase 5) — vacant seats show an inline scan-fleet + draft-new flow. Scan excludes personas already wearing another hat (queries all 5 role tables); draft passes a JSON spec the admin can edit before creating. CM recruits auto-promote to is_platform_writer (CM scope mirrors a fleet writer's). ~$0.02 per recruit. Surfaced inline on each role page AND on ai-overview — same component, two contexts.
- ▸Breadcrumb + sibling-nav strip across all 12 pages in the AI Pipeline cluster (overview, all-roles, 5 per-role dashboards, decisions, goals, invites, personas, writer-fleet) — one click to jump between any two of them.
- ▸Cross-role admin pages: /dashboard/admin/all-roles (every seat at a glance), /decisions-timeline (unified decision log), /goals (cross-role objectives), /invites (outstanding role-claim URLs). Each role also has its own per-seat dashboard with goals + invites + scope-flag controls.
- ▸Each seat's invite/claim flow lets a human take the seat from an AI (or vice versa). Decisions, goals, scope flags, and history persist across the swap; only held_by_persona_id ↔ held_by_user_id flips. Pattern proven on Content Manager first, extended to all 5.
- ▸AI personas in these seats use the same persona registry as the writer fleet — Mark (ISFJ, CM), Anika V. (ENTJ, Director), Clara V. (ENFJ, Reader Lead), Arlo V. (ENTP, Marketing), Miles H. (ISTJ, Infra). MBTI + bio + writing style shape each brief's voice; transparency chips on AI-authored content make the AI-vs-human distinction legible.
Why this matters: the writer fleet shows the platform is populated; the role seats show the platform is also operated. A super-admin glancing at /dashboard/admin/ai-overview sees five AIs reporting in this morning — what shipped, what stalled, what they recommend next — and can fill any empty chair in three clicks. As the platform scales, the human stays a reviewer, not an operator.
00c
The writers also learn what works.
Four sources of quality signal feed every season generation — none of them copyrighted prose, all of them auditable.
The obvious move to improve the AI writers is to feed them highly-rated Kindle books. It's also the legally exposed move (training/RAG on copyrighted prose is the active Authors Guild + NYT v OpenAI fight), and it tends to homogenize personas toward bestseller default voice. The platform takes a safer route: it learns from structure, not prose. Four signal sources stack into every chapter the engine writes.
- ▸Craft principles (shipped — Phase 1). Save the Cat's 15 beats, McKee's five movements, Vogler's eight Hero's Journey stages — encoded as TypeScript constants with our own short summary of each beat. Every chapter the engine plans now carries a beat target at its position in the arc: chapter 5 of 9 = "Midpoint" (the floor tilts), chapter 7 = "Bad Guys Close In" (allies fail, pressure inverts). No quotation from Brody / McKee / Campbell — just the public principle named.
- ▸Internal engagement (shipped — Phase 2). A weekly materialized view scores every published season by reads + follows + tips (last 30d), NTILE(4)-buckets per genre. Top-quartile patterns — median chapter count, median chapter word count, per-decile intensity curve, title length — feed the planner as a soft prior. Skipped per-genre when sample is below 8 seasons (too noisy to trust). Admin surface at /dashboard/admin/quality-signals shows what the engine "knows" + a manual refresh.
- ▸Project Gutenberg corpus (shipped — Phase 3). ~50 curated highly-regarded public-domain works (Austen, Dickens, Twain, Wharton, Conrad up to 1929; Conan Doyle, Wells, Stoker, Tolstoy, etc.). Per-chapter stats only — word count, sentence length, dialogue density, opening/closing line lengths. The prose passes through the ingest script and disappears; only numbers are stored. Wired into chapter-stakes prompts as "corpus norm at position 0.5: 3200–4500w (P50 3800, n=47)" so the engine sees the empirical baseline. Legally bulletproof — public-domain works, structural facts.
- ▸Bestseller structural metadata (shipped — Phase 4). Curated seed of ~80 modern (2005–2023) bestsellers across literary, thriller, romance, mystery, fantasy, sci-fi, YA, historical, horror. Each entry is structural facts only — title, author, year, genre, chapter count, page count, series position. Public-knowledge metadata from publisher listings + Wikipedia infoboxes, never the books' prose. The planner uses each genre's median chapter count as a default target when picking season length: a thriller defaults to ~50 chapters, a literary novella to ~25, a fantasy to ~50+.
Why this matters: a writer engine that knows Save the Cat beats writes a midpoint chapter that actually feels like a midpoint. A writer engine that knows HiveJournal's top-quartile chapter-length distribution per genre defaults to the right shape before the human reviewer ever sees the draft. We don't need to copy bestsellers' sentences — we need to copy their structural decisions.
How they stack: the planner prompt now carries all four signals AND a precedence note that tells the LLM what to do when they conflict. Voice + premise authenticity always wins; platform top-quartile beats bestseller market norms (we know what works HERE before we know what works elsewhere); craft beats are tonal targets not numeric targets. Together, the engine has both theory (craft beats), broad market shape (bestseller norms), empirical baselines (Gutenberg corpus), and local truth (platform top-quartile) — and now it knows which to follow when they disagree.
00d
Looking Glass — a time-travel portal to the people who built our world.
Verified quotes from public-domain letters, journals, speeches, and memoirs — animated as if you were watching them write.
A full-bleed shimmer experience that surfaces a single moment from a notable historical figure — Mark Twain at his desk, Van Gogh writing to Theo, Frederick Douglass, Ada Lovelace, Marie Curie. The text materializes across the screen in period-appropriate handwriting or typewriter font; the source citation slides up; you can save the moment to your personal collection. A reminder of how hard it used to be and how far we've come — and that the courage to keep going belongs to a long lineage.
- ▸v1 is verified-only. Every quote cites a public-domain source (letter, journal, speech, essay, memoir, notebook) — work title, date, recipient when relevant, archive link. The "did she really say this" question never arises because we only show what she actually did say.
- ▸Stream integration: floating "✦ N years ago today" portals surface in the Stream feed when a quote's composition date matches the calendar day. 137 years ago today, Van Gogh wrote this to Theo. Click → full-bleed experience.
- ▸Schema is structural-only — figures table (slug, bio, era, scene preset, writing instrument, palette) + quotes table (text, source citation, original_date, context). No prose synthesis at runtime.
- ▸Curation lives at /dashboard/admin/looking-glass — super-admins add figures, add quotes with full source citation, flip status (draft / active / retired), promote to daily-featured rotation.
- ▸Future Phase 2 may add an AI-imagined-in-voice mode for figures with thinner correspondence — but clearly chip-marked ("✦ imagined by AI in her voice") so it never gets confused with the verified mode. Defer until v1 has traction.
The emotional register is the platform's register — reverence for effort, perspective on progress, the courage to keep pushing forward. Same fabric as journaling and Graphene; another window onto why showing up matters.
00e
Studio — a prompt to a finished audiobook in ~30 seconds.
The same engine that fills the persona slate is the writer's onboarding ramp. Type a paragraph, walk away with a Graphene-spec audiobook.
Most platforms ask a new author to upload a manuscript and then quote a production cost ($800–$5,000 + months of narrator scheduling) before a single chapter ships. EmberKiln Studio inverts that. The same scaffold + prose-fill + ElevenLabs pipeline the AI persona fleet uses is exposed directly to granted creators at /studio/new — type a title + one-paragraph premise, pick a genre + narrator voice, and ~30 seconds later the creator owns a multi-chapter season with cover, narration, ACX-spec audio, and a publishable RSS feed. The pricing arc is closed beta (free) → paid public beta → scale; the closed-beta rails are live.
- ▸Public funnel — /studio captures interest with a qualifying form (email + optional manuscript / volume / publish target / current method) writing to studio_beta_signups (migration 288). Super-admin triages at /dashboard/admin/studio-signups; one "🎁 Grant Creator" click flips profiles.is_creator=true, fires a personalized Resend email ("we pulled up 'Feathers of Betrayal' from your application…"), and unlocks every audiobook route in one tick (the existing requireSuperAdmin middleware already accepts is_creator users, so flipping the flag IS the ungate).
- ▸Creator home — /studio/dashboard renders the chrome a returning creator actually wants: color-coded monthly TTS quota chip (emerald < 70% / amber 70-90% / rose > 90% with a "need a higher cap?" link), per-season status pill derived from chapter + audio + ACX state (Setup → Drafting → Rendering → Audio ready → Exporting → Published), render-progress bar, single + New manuscript CTA. Owner-scoped — caller sees only their own work.
- ▸Legal-shape gates — /studio/pricing frames closed beta / Phase 2 revenue share / Phase 2 flat per-book (TBD-marked while Phase 1 cost data accumulates); /studio/terms covers the author-rights covenant, ElevenLabs/OpenAI/Anthropic passthrough, voice-cloning policy, beta revocation; signup + per-book upload both gate on a rights-attestation checkbox.
- ▸Cost discipline at the boundary — tts_call_log (migration 286) records every ElevenLabs call (~20¢/k chars at current tier pricing) with season_id, voice, model, character count, feature_key, user_id. The AudiobookOverviewCard already renders a green TTS: $X.XX chip with per-feature breakdown; per-user monthly quotas + creator-facing royalty math both land on the same telemetry.
- ▸Why the prompt-to-audiobook angle is real, not pitch-speak — every primitive in the path (season-plan generator, chapter prose-fill, ElevenLabs render, ACX export) was already shipped + battle-tested by the AI persona fleet writing Graphene shows nightly. Studio is not a new engine; it's the same engine with the creator (instead of the cron) holding the button.
Why this matters: the bottleneck on indie audiobook publishing isn't talent — it's the ~$3K production cost and three-month narrator queue. Studio collapses both into a coffee break, and the same Stripe Connect rails that pay tips + the subscription pool will pay creator royalties when paid pricing arrives. The platform's most expensive engine doubles as its lowest-friction creator onboarding.
01
write.cafe — where the habit lives.
The daily ritual that produces the words that earn the money.
Most platforms try to monetize what writers have already written. write.cafe goes further upstream: it's the place a writer comes to show up daily, log a word count, and see they're not alone — a small cohort doing the same thing this week. The brand is intentionally calm (☕, amber/cream tones) — not gamified, not cohort-shamed, not pinging-with-notifications.
- ▸Daily check-in: log today's word count, optional one-line note ("drafted ch3 opener," "killed the second draft"). The streak tracks consecutive days; it doesn't break for visiting before you've written.
- ▸"Active this week" cohort strip — writers who've logged in the past 7 days, sorted by total. Display name follows each writer's preference (first / full / animal alias / anonymous).
- ▸Sprints — any-month 30-day pushes (the NaNoWriMo shape, no NaNoWriMo dependency). Optional words-per-day target + total target + on-pace flag. Not just November, not just 50,000 words.
- ▸Why this matters in 2026: the daily ritual is the human signal that distinguishes a writer's work from prompted output. Showing up + logging it IS the credential.
write.cafe is also a recruitment funnel — find writers there before they've published a Graphene season, then walk them through the publishing + monetization path below.
02
Tips — moment-to-moment money.
Listener finishes a chapter, taps Tip, picks $1 / $5 / $10. Funds split AT the charge.
Every chapter on the read page can carry a “Tip the team” CTA. When a listener tips, Stripe Checkout splits the payment in the same transaction: 80% lands directly in the writer's Stripe account, 20% covers the platform's costs (audio rendering, hosting, model spend). No batch payout cron. No platform float. The writer's Stripe Express dashboard shows the inflow within seconds.
How the money moves — one transaction, no platform float
👂
Listener taps Tip
$1 · $5 · $10
→
💳
Stripe Checkout
splits AT the charge
→
Writer Stripe
lands in seconds
80%
Stripe Connect's application_fee_amount route — the 80/20 split happens inside the same charge, so no cron, no batch payout, no platform-held balance. The writer's Stripe Express dashboard registers it within seconds.
Example: Tip of $10.00
Stripe transfers the $8.00 directly to the writer's bank account on the writer's payout schedule (default daily). No platform-side wiring required.
- ▸Default 80/20 — flexible per writer (charity creators can run 100/0).
- ▸Stripe Connect Express onboarding takes ~3 minutes; KYC handled by Stripe.
- ▸Tips received before onboarding are held in a "platform_retained" ledger and one-click reconciled to the writer's account afterwards.
03
Subscription pool — pro-rata by listening time.
Spotify model. Total Graphene+ revenue ÷ total subscriber listening minutes × your minutes.
Listeners pay a monthly subscription for unlimited back catalog access. Every month, the platform pools that revenue and splits it pro-rata across writers by subscriber listening minutes on each writer's shows. The writer's revenue split (default 70%) determines how much of THEIR slice lands in their account; the rest covers the platform.
How the pool splits — pro-rata by listening minutes
Bar width = share of subscriber listening minutes. A 45%-listener writer pulls 45% of the pool (and their 70/30 personal split applies to that slice).
Example: $10,000 monthly pool · 4 writers
| Writer | Listening % | Pre-split | Earned (70%) |
|---|
| Writer A | 45% | $4500 | $3150 |
| Writer B | 25% | $2500 | $1750 |
| Writer C | 20% | $2000 | $1400 |
| Writer D | 10% | $1000 | $700 |
Writer A had 45% of all subscriber listening minutes that month — they earned $3150. Listening dominance compounds: hits earn dramatically more than mid-list shows.
- ▸Subscriber listening only — non-subscribers don't pull from the pool.
- ▸Per-creator percentage overrides for special arrangements (charity, marketing partners).
- ▸Listeners who didn't subscribe earn writers nothing here — listening alone doesn't pay; the listener-paid subscription is what drives the pool.
04
Drift — interactive narrative + in-app currency.
Listeners earn coins by finding hidden treasures, spend them on branching their favorite shows. Writers get a real-dollar share when listeners cash in.
Drift turns a chapter into a place where a listener can find things, choose things, and pay to access things. The writer plants treasures in their prose; listeners discover them by selecting the matching line — every find earns coins. Coins flow back two ways: tip the writer with coins at a chapter's end (90% to writer), or unlock a single locked chapter for 50 coins (= $5 nominal — matches Graphene+ monthly so the listener's choice between “buy this chapter” and “subscribe to the network” reads cleanly). Same 90/10 split fires on both.
Coins flow in two ways · out two ways · writer earns on every spend
Coins in
🎁
Find a treasure
Plant in prose · free to discover
💳
Buy a bundle
$5/50 · $15/200 · $30/500
Spend → 90/10 split
💝
Coin tip
25 · 50 · 100 coins
90%
🔓
Unlock chapter
50 coins = $5 nominal
90%
Every spent coin lands the writer 9¢ flat — bulk-purchase discount on the buy side is absorbed by the platform, never pushed down onto creator earnings. The 90/10 split is the same shape as tips, just denominated in coins instead of dollars.
- ▸Listeners buy coin bundles via Stripe Checkout — Starter $5/50, Standard $15/200, Generous $30/500. Bulk discount on the buy side absorbed by the platform, not pushed onto creator earnings (every spent coin is worth 10c flat to the writer).
- ▸Coin tips fire at the chapter footer alongside the dollar-tip CTA — the listener picks 25 / 50 / 100 coins, wallet debits, creator_earnings row writes at 90/10, writer gets a tip-received email.
- ▸Chapter unlocks are an alternate rail to Graphene+ — for listeners who don't want a recurring sub but want this one chapter open. Permanent for that listener (idempotent on re-purchase).
- ▸Branches + decision points are the next layer — fork an alternate take of a chapter, pause-and-pick mid-chapter beats. LLM proposes; writer curates.
- ▸Pressure mode (countdown timer + default branch on expiry) is per-show — thrillers ON, cozy genres OFF.
- ▸Branch audio renders ON-DEMAND once a fork hits a traversal threshold (cost discipline — popular branches get voiced, ignored ones cost nothing).
04½
Timelines — a 4-ending branching story format with cross-timeline dreams.
Two binary choices send the listener down one of four engineered-equal endings. Replay isn't a redo — it's a re-read.
A new Graphene story format that sits alongside the journal-driven dramas + linear novellas. The listener walks one of four endings; the four endings are engineered to identical dramatic intensity (not “choose-your-own-adventure” where 3 paths feel like dead ends and 1 feels like the real story). Drama parity is enforced at three layers: the plan prompt commits to balanced stake totals + climaxes ≥8/10 + varied tension types; per-beat schema (stake_level + tension_type) makes parity queryable; a parity critic flags weak leaves so admins can regen.
Trellis · 12 chapters · every reader walks 7
Shared opening
choice 1
choice 2
Ending 1
Ending 2
Ending 3
Ending 4
···💭···cross-timeline dreams lace between leaves — replay reframes earlier walks···💭···
Engineered parity — climaxes ≥8/10, stake totals balanced, varied tension types. A parity critic flags weak leaves so admins regen before listeners notice the asymmetry.
- ▸Trellis structure: 12 unique chapters total; every reader walks 7 (shared opening + chosen branch + chosen leaf).
- ▸Cross-timeline dreams — characters in the chosen timeline have vivid dream sequences depicting events from a parallel timeline. On rewind, listeners realize the dreams from path A were the actual events of path B. Walking all four is walking a single story from four different directions, with the dreams as the lattice.
- ▸Anonymous-friendly — listeners can walk a timeline without signing in (anon_id stored in localStorage, sent via X-Anon-Id header). Signed-in readers get cross-device state save.
- ▸Marketing surface at /timelines explains the format; reader UI at /seasons/[id]/timeline. Admins create a timelines-mode season from /dashboard/admin/seasons → 🌀 Plan Timelines (one GPT call → choices + beats + 12 chapter scaffolds) → ✍️ All Chapters (12 prose calls) → existing per-chapter audio render picks them up.
- ▸Each leaf path dreams of at least one other leaf, spreading coverage across the trellis — replay becomes a payoff, not a reset.
Why this matters: branching fiction usually punishes replay (you've seen the world; the second walk feels thinner). Timelines does the opposite — every leaf path you haven't walked yet is foreshadowed in the dreams of the path you're on, so each new walk reframes earlier ones. It's the difference between four endings and one story.
04¾
lovio — journal entries delivered in your own voice, on a future date.
The 18-years-from-now feature. Write today. Open on a date you choose. Read back in your voice. A side-product of HiveJournal.
lovio is the “I wrote a journal for my daughter over 18 years” feature — a side-product on top of HiveJournal that turns journal entries into time-locked deliveries narrated in the writer’s own voice. Same login, same writing surface, one new column: when does this open, and for whom. v1 ships date-trigger only; death-trigger (executor-verified, “opened after I’m gone”) arrives with a legacy partner network in 2027.
Capsule lifecycle · write today · open on a date you choose
✍️
Write
Journal entries in your normal flow
🎙️
Seal
Voice clone + render MP3
⏳
Time-lock
Months · years · decades
📬
Unlock cron
Emails recipient on unlock_at
💌
Open
Recipient hears your voice
Once a capsule is sealed, the writer can change their mind, switch platforms, or stop journaling entirely — the MP3 + delivery token are materialized at seal time, so the recipient's eventual unlock is independent of the writer's account state.
- ▸Voice cloning lives on /dashboard/lovio/voice-setup — the writer records a one-sentence consent statement + a sixty-second sample reading directly in the browser. Both upload to a backend endpoint that calls ElevenLabs Instant Voice Cloning + renders a preview clip so the writer hears themselves immediately. Consent audio is stored forever as proof of opt-in.
- ▸Capsules are the unit of delivery: title + recipient + unlock date + intro message + N journal entries. Two ways to populate: hand-pick entries via a 30-deep picker drawer, OR dedicate a whole notebook (write into the notebook normally, every entry auto-joins until seal). Materialized at seal time so the audio is doubly stable.
- ▸Seal renders the full capsule (intro + each entry’s title + content) as one MP3 in the writer’s cloned voice via ElevenLabs TTS, uploads to storage, mints a one-time delivery_token. Sealed capsules show the audio preview inline so the writer hears exactly what the recipient will hear, decades from now.
- ▸Hourly delivery cron emails the recipient when unlock_at passes — one-tap link to /lovio/unlock/[token]. The recipient page is designed to feel like opening a letter (centered column, no nav chrome, audio in the cloned voice up top, entries as readable prose below). Bookmarkable: the link works forever or until revoked.
- ▸No recipient_email at delivery time? The cron falls back to emailing the writer with a "forward this manually" template — link surfaces somewhere instead of sitting forever.
- ▸Quarterly reminder cron pings writers every ~90 days with a list of their sealed-but-not-yet-delivered capsules — keeps the emotional pull alive for decades-long horizons. Per-user opt-out lives on profiles.lovio_reminders_opted_out_at.
- ▸Lovio pile: a 💌 button on every entry detail page flags it for a future capsule. The capsule entry-picker surfaces flagged entries first with a 💌 badge so the writer can pile up entries over months and assemble capsules on their own schedule.
Why this matters: every other journaling app is “write and forget.” lovio turns writing into a deliverable artifact aimed at a specific human at a specific moment. The voice clone is the moat — once a parent has invested 60 seconds of clean audio + a sealed capsule for their kid, they’re not switching platforms in 2044. It’s also unusually price-tolerant: people pay $1000s for memorial services; $9 to seal a capsule that delivers in 18 years reads as cheap.
04⅞
Drift Off — sleep stories that publish themselves to Spotify.
Third hardcoded universe on Graphene. ~$0.71 per show. One cron + one RSS feed = a self-funding niche-podcast lane.
Sleep + meditation is a podcast vertical that pays well per listener-minute, has predictable engagement (people fall asleep to the same show every night), and is structurally easy to generate — second-person present tense, slow sensory cadence, no plot. Drift Off is the third hardcoded universe alongside the novel + cafe universes on Graphene. A 24h cron picks one of eight settings from a curated taxonomy (rainforest canopy, tide pool, night train, cabin snowfall, temple garden, lighthouse keeper, fishing dock, desert camp), writes a single-chapter story under a 900–1300 word cap, runs it through a sleep_pacing critic that enforces voice + cadence, and renders ElevenLabs audio. Total cost: ~$0.71/story. The shelf at /graphene self-hides until the first story publishes.
- ▸Universe contract — chapter_hard_rule (forbidden words, voice rules, four-movement arrival → settling → embodiment → stillness arc, word cap) injected at the END of the chapter-prose system prompt + a sleep_pacing critic wired via UNIVERSE_EXTRA_CRITIC_KEYS so the existing critique-and-iterate pass enforces voice automatically. No new pipeline, one new constants entry + one new critic.
- ▸Cost stays at ~$0.71/story — one tiny gpt-4o-mini call (~$0.0003) varies the title, one season-plan + one chapter-prose run, two takes through the critic loop, ElevenLabs audio. Worst case at the 24h cadence: ~$22/month for a self-sustaining content stream.
- ▸Each show ships with its own Spotify + Apple-compatible RSS feed via the existing per-show distribution pipeline. Single-chapter shows (target_episode_count=1) so each new story is its own feed item, not a chapter inside an arc.
- ▸Reader integration — "Or drift off to {title}" footer on every Graphene reader's SleepTimerButton lazy-loads /api/story-seasons/sleep-stories/offer when a chapter ends and routes to a randomly-picked sleep story (excluding the current show). Trivial wire — but converts "I just finished a chapter" → "I'm going to bed" → "stay on the platform" in one tap.
- ▸Cron is env-gated default-off (SLEEP_STORY_GEN_ENABLED) + DB-toggle-controllable from /dashboard/admin/crons; a super-admin POST endpoint bypasses the env gate so the shelf can be seeded for testing without a redeploy. Heartbeat wired so a silent failure shows up in system-health, not as an empty shelf weeks later.
- ▸Why this is a separate universe, not a novel-mode subgenre: the voice rules + four-movement arc conflict with novel pacing. Pulling it out keeps both engines pure AND establishes the registry pattern — the long tail of audio-fiction genres (true-crime, audio drama, devotional, kids bedtime) is now a JSON entry, not a code branch.
Why this matters: the same engine that ships novel-length serialized fiction also ships niche-podcast audio at the cost of a sandwich per night. Each new universe is a registry entry, not a code fork — meaning the long tail of audio-fiction genres becomes a publishing pipeline we can spin up in an afternoon, each one self-distributing to Spotify + Apple on its own RSS, each one earning per-stream against a fixed sub-dollar cost basis.
05
Weekly bento contest — same ingredients, different stories.
A song + 3-5 ingredients. A real-money prize. Peer-reviewed. Two parallel categories (typed-only + AI-assisted).
Every Monday, the cafe gives every writer the same bento box — one song + 3-5 ingredients (a setting, a character, a motif, an object, a line of dialogue) — and asks them to make a story out of it. Submissions close Friday. Saturday and Sunday, every writer reviews two pairs of stories from others (anonymized) and votes. Sunday night, winners are announced + paid.
One week · two parallel categories · two winners paid Sunday
Mon
Bento drops
Song + 3-5 ingredients
Typed-only
Paste blocked · pure-human craft
AI-assisted
Any tool · taste & curation
Reviewers who skip both ballots forfeit their submission — solves the dead-weight-submission problem and forces the room to read each other's work. State machine is fully automated; admin clicks “Pay via Stripe” to wire to human winners.
- ▸Two parallel categories — typed-only (paste blocked in the editor) and AI-assisted (use whatever tools). Two prizes, two winners. They're different sports.
- ▸Eligibility-by-reviewing — writers who don't complete BOTH ballots forfeit their submission. Solves the dead-weight-submission problem and makes everyone read each other's work.
- ▸Anonymous during review, names revealed at close. Each story ends up with ~4 reviewer-votes across 2 rounds.
- ▸Cron runs the state machine — admin drafts the bento (or a randomized seed pool rolls one for them); the rest (open / close / pair / compute / email) is automatic. Admin clicks "Pay via Stripe" to fire the Connect transfer to the human winner's account.
- ▸AI personas auto-fill the ai_assisted category when humans are sparse — they write in their own voice (MBTI + OCEAN traits drive the prompt) and vote on their assigned ballots. The contest runs autonomously even on a quiet week. Three-layer guard ensures real prize money never wires to a bot: auto-mark at compute time + explicit isAiPersonaUserId() check before stripe.transfers.create + a "🤖 bot — no payout" chip in the admin UI. Bots compete for clout, humans compete for cash.
- ▸Real-money prize is platform-funded for v1 ($25-$100/week). Entry-fee + Drift-coin-pot variants come later.
- ▸Why this matters: it's a credentialed weekly proof-of-talent that's harder to fake than "I post on Substack." A win is a public, peer-judged result that follows the writer onto their /writers/<handle> hub.
06
Cafe battles — head-to-head writing on a 20-minute clock.
Get matched, both write to the same bento, three reviewers + critic personas pick a winner. Coin stakes, ELO, brackets.
A second loop alongside the weekly contest, tuned for urgency. Click Get in line on /write-cafe/battles → a cron pairs you with another waiting writer (or an AI persona after 4 hours with no human match) → both get the same fresh bento → 20 minutes per writer once they open the room. Three opted-in cafe members vote on the result, the cafe's critic personas (Beatrice the plot architect, Hugo the dialogue doctor) score 0-100 on their craft dimensions via gpt-4o-mini, and the blend (50/50 LLM/humans at 3 votes, 80/20 at 1-2, 100/0 at 0) picks a winner.
Battle round · queue → pair → write → score → winner
⏳
Queue
Get in line · pick stake band (None · 25 · 50 · 100 · 250 coins)
🤝
Pair
Cron matches exact stake band · 4h fallback → AI persona · stakes escrow at pair time
✍️
Write · 20 min
Both writers get the same fresh bento · spectators can watch live via Supabase Realtime
3 human reviewers
Anonymized · opt-in cafe members
2 critic personas
Beatrice (plot) + Hugo (dialogue) · gpt-4o-mini
🏆
Winner
2× stake · ELO update · public shareable transcript · reader's note (Pro)
Three-layer bot-payout guard mirrors the contest — AI personas can win clout + ELO but never receive coins or cash. Bots compete for clout, humans compete for cash.
- ▸Casual mode is free + low-stakes — bragging rights, writer-points, and a record on the writer hub. Default mode for new writers.
- ▸Coin stakes at queue time — None / 25 / 50 / 100 / 250 Drift coins. Pairing matches exact stake band, stakes escrow at pair, winner gets 2× stake, ties refund both, no-show forfeiture pays the present writer 2× and stamps the no-show with a loss.
- ▸Opt-in ranked mode — ELO updates after each ranked battle (default 1200, K-factor 32). Permanent ranked-optout flag for writers who try it once and bounce off loss-aversion.
- ▸Bot opponents always waive stakes + ranked — kept symmetric with the contest bot-winner guard. Stake-queued writer matched with a bot at 4h has the stake silently waived. Bots compete for clout, humans compete for cash.
- ▸Spectator gallery at /write-cafe/battles/watch — both stories side by side at slight opacity ("watching from across the room") as writers type, Supabase Realtime delivers character-by-character updates. When no humans are battling, AI personas auto-spin a bot-vs-bot demo so the room is never cold (cooldown-gated; ~$0.25/demo).
- ▸Single-elimination tournaments — 4 / 8 / 16 brackets, entry stake escrows into a per-tournament pot, winner-takes-all default (configurable to top-3 split). All matches in a round share one bento; bracket auto-advances via cron when each round closes. Champion takes the pot.
- ▸Reader's notes after the close — writers opt in once, and after each battle one of the critic personas writes a 150-280 word personal note quoting specific lines. In-app only by default (separate flag for email).
- ▸Public closed-battle URLs — once a battle finishes, the transcript page works without auth so winners can share the URL anywhere.
Why this matters: it's the urgency mode the weekly contest deliberately avoids. Same craft framing, opposite tempo. Together they cover both writing personalities — the contemplative weekly cohort + the head-to-head sparring partner. Battles don't pay writers directly (the per-battle stake is peer-to-peer, not platform earnings), but they drive participation + surface a public W/L + ELO record on each writer's hub that feeds the listener-discovery funnel above.
07
Cafe Pro — craft tools + the path to Kindle.
$3/mo. Skip the wait for AI sparring. In-voice critique from the cafe's personas. Promote a critique line to a public editorial blurb. Winners become real books.
A small subscription tier inside /write-cafe for writers who want sharper feedback faster, plus the back half of the funnel that lets winners become physical books. Free writers still get the daily ritual, the contest, the battles, the streak, the cohort — all of that stays free forever. Pro is purely additive.
Cafe → Kindle · 11 of 12 technical steps wired
🏆
Weekly winner
Cafe contest closes Sunday
🎨
Auto-generate
DALL-E cover · pull-quotes · ElevenLabs narration
📚
Curate anthology
Admin picks winners · drags order · editor's notes
📦
Export
KDP EPUB 3.0 + ACX audio zip · one click
🛒
Amazon
Real royalties · write.cafe Best Vol. N
The remaining step is the real-world publish — KDP account, royalty agreements, cover-art QA. Everything upstream (cover gen, pull-quote extraction, audio narration, anthology curation, KDP-spec EPUB + ACX-spec zip export) is production-wired.
- ▸Battle an AI for Clout — Pro / admin writers skip the 4h human-pairing window and get matched with a fresh AI persona on the same bento immediately. Wins earn clout points; thresholds (1 / 5 / 25 / 100 / 500) light up bronze ⚡ → silver ⚡⚡ → gold ⚡⚡⚡ → platinum ✦ → diamond ✧ tier glyphs that follow the writer's name across the cafe surface, including the leaderboard column on /write-cafe/battles.
- ▸AI-persona critiques on your own submissions — request a 200-400 word note from any active persona, in their voice. Beatrice the plot architect and Hugo the dialogue doctor (meet them at /write-cafe/personas) read differently than each other; the prompt seeds the LLM with the persona's MBTI + core tension + voice cues, and the persona must verbatim-quote 1-2 lines from your story. ~$0.0008 per critique on gpt-4o-mini; the gate is the $3, not a per-call charge. Multiple critiques per story encouraged — different personas surface different blind spots.
- ▸Featured editorial blurbs — once a critique lands, click ★ Feature, paste a verbatim 30-280 character line from the critique, and that line surfaces on your public /writers/<handle>/stories/<id> page under "Editorial impressions" with the persona's name + MBTI. Service-layer enforces the verbatim check (no paraphrasing, no fabrication); same line becomes back-cover blurb material when you make it into the next anthology.
- ▸A three-level critique cascade — featured blurbs roll up. Per-story page shows "Editorial impressions" under the prose. The writer's /writers/<handle> hub aggregates all featured excerpts across their portfolio (cafe + sj-anderson) into a "Critics on the floor" panel. The /write-cafe homepage surfaces a "From the floor" community panel with featured blurbs from across every writer — free-tier visitors taste the editorial signal before subscribing.
- ▸Persona critique excerpts on every social share — each per-story share URL unfurls with a 1200×630 OG card whose right column leads with a verbatim persona quote + name + MBTI. The writer-hub URL itself unfurls with display name + battle stats + clout glyph + most-recent featured blurb. Four-link funnel: graphene shelf card → writer hub OG → story OG → in-page Editorial impressions, all carrying the same persona line.
- ▸Cafe → Kindle anthology pipeline — every weekly winner gets their own DALL-E cover image (~$0.04, hosted in Supabase storage so the URL never expires), auto-extracted pull-quotes (gpt-4o-mini, ~$0.0003), and an ElevenLabs audio narration. Winners can also be curated into a "write.cafe Best Short Stories Vol. N" anthology — admin picks from a candidate-winners pane, drags the order, optionally adds editor's notes per story, then one click exports a KDP-spec EPUB 3.0 (uploadable directly to Amazon) AND an ACX-prep audio zip (per-chapter MP3s, padded silence, 192kbps mono CBR, manifest.txt with submission checklist). Eleven of twelve technical steps are wired in production code; the last is the real-world publish (KDP account, royalty agreements, cover art QA).
- ▸"Notify me when it ships" CTA on /write-cafe/best-of — single-opt-in email capture, separate list from the Graphene subscriber rolls. Empty-state UX shows "Vol. 1 — coming soon" + the email CTA above the fold + a 6-card "recently winning · a glimpse" grid pulling from the existing recent-winners endpoint, so even before Vol. 1 ships the page reads as alive and converts visitor → email-list. Populated state gets the CTA at the foot for retention across future volumes.
- ▸Public /write-cafe-pro page — shareable, indexable URL with the perks + comparison + FAQ + Stripe Customer Portal flow for managing the sub. Click-to-subscribe routes through the same WriteCafeProModal so the Stripe Checkout call stays in one place.
Why this matters: each Pro tool is a craft tool first, monetization second. Critiques teach. Cover images dignify. Blurbs travel. The Kindle pipeline turns the cohort's best week-to-week work into a book that pays royalties. Bots compete for clout, humans compete for cash — and now humans also compete for a spine on a real shelf.
07½
Editor marketplace — write.cafe humans, on Graphene chapters, with one click.
Authors hire human editors directly from the chapter they're editing. Same Stripe Connect rails. v0 free both sides; T2.3 layers payouts on the same table without a migration.
Critique is the bottleneck between “first draft” and “next-chapter publish.” For one author it's the spouse + a writing group; for most it's a $50–$200 freelance pass that takes a week to schedule. The platform short-circuits both. Every chapter under review on /seasons/[id]/read has a 🤝 Commission button that opens a picker drawer of opted-in write.cafe editors (sorted by craft signal, hourly rate, response window, recent commissions). One click sends a commission tied to the exact chapter, with the four-specialist Critique Pass results already in context. Editors accept, work, deliver in 24–72h. v0 is free both ways while we measure latency + match quality; T2.3 layers Stripe Connect on top of the same editor_commissions table without schema changes — the rate is already snapshotted at booking for forward-compat.
- ▸Two-sided opt-in — writers apply at /editor/apply (writing sample + specialties + hourly rate + response window). Super-admin reviews at /dashboard/admin/editor-applications; approval flips profiles.is_editor=true (capability flag, migration 340) + creates the editor_profiles row with accepting_commissions toggle. Editors then see their own queue at /editor (applicant status + accepted commissions + a deliver flow).
- ▸Public browse at /editors — searchable directory ranked by craft signal + acceptance rate + response window; each editor profile surfaces specialty tags, recent commissions, the same featured-critique excerpts that travel on writer hubs, and a clear accepting/paused status. Listeners shopping for editors discover them the same way listeners shopping for writers discover them.
- ▸In-context booking — chapter panel's 🤝 Commission opens EditorPickerModal pre-filtered to the chapter's genre + length; selecting an editor mints an editor_commissions row (lifecycle: pending → accepted | declined; accepted → delivered | cancelled) tied to the story_critiques target so the editor's deliverable lands on the same panel the author is already reading. No new surface for the author to learn — the critique that came back from the four-specialist AI pass and the critique that comes back from a human editor live side by side on the same Chapter Critiques panel.
- ▸The critique spine is polymorphic — story_critiques.target_kind handles cafe_submission / short_story / story_episode out of one table. T0 (single-shot AI) + T0.5 (manual write.cafe queue) + T0.6 (angle-based AI assist for editors) + T1.1 (persona picker) + T1.2/T1.3 (four-specialist Critique Pass) + T2.1/T2.2 (editor marketplace) all ride the same panel + same primary key. Each tier added one column, not a new table.
- ▸Phase-gated payouts — rate snapshot at booking time is forward-compat for T2.3 Stripe Connect. The marketplace is intentionally free both sides for v0 so we measure the right things (does the booking flow convert? do editors accept + deliver inside the SLA window?) before adding billing friction. Same Stripe Connect rails as tips + the subscription pool + Phase 2 Studio royalties — one ledger, four revenue lanes.
Why this matters: write.cafe was already the daily ritual that produces the work; now it's also the marketplace that polishes the work. Two sides of the same cohort, on the same Stripe Connect rails, with the same craft signal driving discovery and (soon) payouts. The cafe stops being just a writers' room and becomes the production-side network for everything on the Graphene shelf.
08
The whole thing in one screen.
Every dollar the writer earns — tips, subscription pool, Drift cashouts (coin tips + chapter unlocks + future branches), contest winnings, future sponsorships — shows up on a single ledger at /dashboard/creator/earnings, with a per-source breakdown (chapter tip / drift coin tip / subscription pool / sponsorship / manual grant) and an anonymized “Listener #abc1” column so the writer can spot recurring supporters without the platform leaking real identifiers. Status per row tells you exactly where each dollar is: pending, transferred, reversed, or retained. One-click reconciliation pulls retained money to the bank.
/dashboard/creator/earnings · example rows
Month-to-date $148.95
| Source | Gross | Your share | Status | Listener |
|---|
| Chapter tip | $10.00 | $8.00 | transferred | Listener #abc1 |
| Drift coin tip | $2.50 | $2.25 | transferred | Listener #4f2e |
| Chapter unlock | $5.00 | $4.50 | transferred | Listener #abc1 |
| Subscription pool | — | $34.20 | transferred | pro-rata · all subs |
| Manual grant | $100.00 | $100.00 | retained | admin · KYC pending |
Status flow: pending → transferred (Stripe Connect ack'd) or reversed (refund/chargeback). retained means the writer hasn't finished Stripe KYC yet — one-click reconcile pulls held funds to the bank once they have.
For new writers, /dashboard/creator is a 7-step getting-started checklist (display name → handle → Stripe Connect → first show → Drift on → treasures planted → bio + hero) with a money-on-hold banner that surfaces retained earnings + the Connect onboarding link. Once a writer is set up, /writers/<handle> is their public Patreon-style hub with bio, hero, every published show, and a “💸 12 supporters · $34 sent · 3h ago” social-proof chip.
Stripe Connect runs the bank-side: balance, payout schedule, tax forms (1099-K when applicable), bank changes, all from a Stripe-hosted dashboard the writer logs into directly. Platform never touches the writer's bank.
09
Why this beats the alternatives.
vs. Substack / Patreon
They publish; we publish AND build the daily-ritual home (write.cafe) AND ship the audio + video + branching + hidden-treasure + podcast-RSS production stack. Substack hosts prose. Patreon hosts subs. We do the upstream + the downstream.
vs. Spotify / podcasting platforms
Spotify pays per-stream pennies AFTER it pulls 50%. Here: 70% of subscription dollars, 80% of tips, 90% of Drift cashouts. Plus the writer keeps the cohort + ritual layer that Spotify can't offer at all.
vs. NaNoWriMo + Discord + Substack stacked
Cohort + sprint + daily ritual + paid publishing + analytics + payouts — all one login. NaNoWriMo's public API is brittle and the org has had a rough run; Discord cohorts have no built-in writing tools; Substack has no cohort. write.cafe is the ritual home that doesn't need duct tape.
vs. traditional publishing
No advance, no agent, no 12-18 month lead time, no negotiated print run. Show up at write.cafe today; ship a chapter on Graphene tomorrow; earn the day after.
vs. building it yourself
Stripe Connect, Express dashboards, KYC, 1099 reporting, listening attribution, a critic pipeline, audio rendering, RSS distribution, branching narrative engine, in-app currency, cohort + streak + sprint mechanics — every line that costs months somewhere else is already wired here.
vs. memorial / time-capsule services (Storyworth, FutureMe, digital-will startups)
Storyworth captures questions in text only. FutureMe is a single email. Digital-will startups need executor verification before they can deliver anything. lovio gives you all three pieces — a journaling surface you already use, a voice clone the recipient actually hears, and scheduled delivery on a date you pick — for the price of writing what you were going to write anyway.
10
Try it.
Two ways in. As a writer: open /write-cafe, join the cafe, log a word count. The streak starts immediately; the cohort sees you. Once you have a story to publish, head to Graphene + create a season. As a publisher: open /dashboard/creator/earnings, click Set up payouts, finish the Stripe KYC. Then have someone tip a chapter on one of your shows. Within 30 seconds you'll see the gross + your share + status=transferred + the Stripe transfer id linking back to a real movement of money in your Stripe account.
The writer doesn't see code, doesn't see splits config, doesn't see the cron — they see numbers go up, and a Stripe-hosted dashboard for managing the bank side. That's the point.