Graphene Lore → Novel Studio — session handoff
Date: 2026-07-10 · Status: shipped to main (14 PRs), not yet live in prod (migrations pending — see §1).
This is the operational state of one continuous push: Graphene lore on the homepage → admin management → stream/VR → the SJ Anderson novel pre-order → an in-house lore-podcast generator → The Studio (novel-writing cockpit) + Demo Studio (hands-free narrated demos) → the llm.ts Anthropic tool-calling unlock → canon-health in the cockpit. The vision doc is NOVEL_STUDIO_PLAN.md; this is the "what's live, what's yours, what's next".
1. ⚠️ Deploy checklist (YOUR actions — everything below degrades silently until done)
Apply these migrations to PROD (Supabase MCP ≠ prod, so I can't):
| Migration | Table | Powers |
|---|---|---|
464_graphene_lore_podcasts.sql | graphene_lore_podcasts | the Graphene — Lore shelf + hero + stream cards |
465_novel_preorder_signups.sql | novel_preorder_signups | the JaJa Island pre-order capture + admin view |
466_graphene_lore_generated_audio.sql | (alters 464) | in-house generated lore episodes (Lore Studio) |
467_studio_demos.sql | studio_demos | the Demo Studio library |
Until applied: the lore shelf is empty, pre-order signup 500s, Lore Studio generate 500s, Demo Studio is empty. All fail silently (no user-facing errors) — so you won't notice breakage, you'll just see nothing.
Env vars (optional / when ready):
STUDIO_HOUSE_VOICE_ID— the Demo Studio narration voice. Defaults to a stock ElevenLabs narrator (Matilda). Set the real house voice; re-playing any demo regenerates its clips automatically.ELEVENLABS_API_KEY— already set (the audio pipeline uses it); Lore Studio + Demo narration need it.
Content to drop in when you have it (apps/frontend/src/lib/novel-preorder.ts, the JAJA_ISLAND entry):
coverUrl→ replaces the typographic placeholder cover everywhere.kindleUrl/audibleUrl→ the pre-order panels auto-flip from the notify-me form to real "Pre-order on Kindle/Audible" buttons (Amazon gets thehivejournal-20affiliate tag automatically).
2. What shipped (by area, with where to find it)
Graphene Lore
- Homepage shelf (
/graphene) — inline Spotify episode embeds, first sibling shelf; a super-admin + card adds episodes; a ☆/★ toggle elevates one into the top-of-page hero. Components:GrapheneLoreRow.tsx; libgraphene-lore.ts; backendroutes/graphene.ts(/lore-podcastsCRUD +/featured). - In the stream — 2D
/dashboard/streamGraphene slot rotates season poster / lore / novel-preorder; immersive WebXR river floats lore + preorder cards (streamExtras.ts,StreamXRScene.tsx). - In-house generator (Lore Studio) —
/dashboard/admin/lore-studio: paste sources → Claude writes a two-host dialogue → ElevenLabs dual-voice → one MP3 → shelf. Decided AGAINST NotebookLM integration (no clean consumer API; Enterprise API can't fetch the audio; Gemini native-audio is preview). Servicegraphene-lore-generate.tsreusespodcast-discussion.ts.
Novel pre-order — "Graphene: Escape from JaJa Island" (SJ Anderson)
- "Notify me at launch" email capture, forward-compatible to real buy buttons. Surfaces: dedicated page
/graphene/jaja-island(clean URLgraphene.fm/jaja-island), homepage panel,/sj-andersonpanel, stream card. Admin waitlist view + Copy-CSV at/dashboard/admin/novel-preorder. Tablenovel_preorder_signups;routes/novel-preorder.ts.
The Studio — novel-writing cockpit (Novel Studio Phases 0–1)
/dashboard/admin/studio→/dashboard/admin/studio/[seasonId]: five-mode cockpit (Draft / Listen / Adapt / Produce / Publish). Draft renders the real editor inline (ProseEditorModalgained anembeddedprop); other modes launch into existing per-season admin surfaces. Canon dock "Check continuity" runs a deterministic bible-vs-prose audit (GET /api/story-seasons/:id/canon-health, no LLM). JQ viajq:open-canon.
Demo Studio — hands-free, house-voice, re-generatable demos
/dashboard/admin/demo-studio: a library of self-driving demos.GuidedDemorunner auto-advances a surface + plays house-voice narration (screen-record it). Narration is content-hash cached → editing a script or swapping the voice regenerates only changed lines. Seededstudio-cockpit-tour. Tablestudio_demos;routes/studio-demos.ts;services/studio-narrate.ts.
Infra
llm.tsAnthropic tool-calling — the shim now translates OpenAI-shaped tools/messages ↔ Anthropic (golden-testedllm-tools.test.ts), so a JQ-style agent loop runs on Sonnet/Haiku and tool calls fall back across providers. Additive (nothing used Anthropic+tools before).- Footer — "Point Seven Studio" credit opens in a new tab across all properties.
3. Decisions made this session
- Featured lore → top-of-page hero (not a lore-shelf slot) — you chose it.
- Pre-order = notify-me capture (not live external links / native Stripe) — you chose it; lives on all four surfaces.
- NotebookLM: build our own generator, don't integrate — the Enterprise API can't return the audio file programmatically; Gemini native-audio is preview. We reuse our ElevenLabs pipeline instead.
- The Studio = unify, don't rebuild — the editor/bible/JQ/production/distribution stack already exists; the cockpit assembles it.
4. Open decisions (need YOU)
- Naming / surface reconciliation — "The Studio" cockpit (
/dashboard/admin/studio) overlaps the existing/studio/writecreator editor. Plan recommends evolving/studio/writein place and folding the admin cockpit into it. Your call before this goes beyond super-admins. - External-creator GTM — most cockpit/production routes are
requireSuperAdmin. Opening to creators needs an RLS/ownership pass (season-access.tsis the seam). Deliberately not attempted blind — it's an auth-surface change that must be verified end-to-end.
5. Recommended next steps (ranked, with risk)
- Apply migrations 464–467 + smoke-test each surface (you; ~15 min) — unblocks everything. Verify: lore shelf renders, pre-order signup works, Lore Studio generates an episode, a demo plays.
- Move JQ's canon agent to Sonnet + a proactive nudge (me; medium risk) — the tool-calling unlock now allows it. Flip
chat/canon-modeoff gpt-4o; add a proactive canon-health surface. Needs runtime verification of the tool loop (best done once migrations are live so I can be pointed at a real story). - Phase-1 polish (me; low risk) — theme the embedded editor into the violet cockpit + dock a native JQ rail. Invasive on a shared component (
ProseEditorModal), so behind a flag/prop. - External-creator RLS pass (me + you; higher risk) — needs the naming decision (§4.1) first, then a careful auth pass with verification.
- Set the house voice + author more demos (you set env; me author) — a Demo Studio walkthrough, a "hear it in your own voice" Listen spotlight.
Tracked in product_tasks under "Novel Studio" (visible at /dashboard/admin/tasks).
Related docs
- NOVEL_STUDIO_PLAN.md — the vision + five-mode interface + phased plan
- COMPETITIVE_LANDSCAPE_STORY_SOFTWARE.md — the competitive bet
- WRITING_EXPERIENCE_A1.md — the manuscript editor (the Draft core)
- Interactive cockpit mockup: published as a claude.ai artifact this session.