HiveJournal Logo
The HiveJournal Suite

Tools for expanding what's possible.

Inside yourself. In what you read. In what you build. HiveJournal is one platform with three doors — meet JQ, your AI companion, in any of them.

Three doors. One platform.

JQ — your AI companion — appears across all three. Use one, use all.

📓

The Journal

Inside yourself

Write, reflect, set goals, track moods, and break dreams into action. JQ helps you see patterns and grow over time. Includes DreamPro, Workout Window, JQ Bridge, and more.

The Extension

In what you read

A Chrome extension that reframes any text on the open web. Surface alternative perspectives, silver linings, and real organizations working on the issues you read about.

Citizen Science

In what you build

A worldwide community of citizen scientists, family teams, classrooms, and meetup groups replicating Open Energy experiments together. Includes a global map, an annual competition, sponsors, opportunities, and shared video build logs.

Inside the Journal

Everything that lives in the HiveJournal app — organized by what it helps you do.

📝

Core Journaling

✍️

Rich Text Editor

Beautiful, distraction-free writing experience with auto-save and custom fonts

📚

Infinite Scroll Dashboard

Browse all your entries with powerful search and filtering capabilities

🔎

Search with Filter Chips

Press Ctrl/Cmd-K to open search. Narrow by typing, or tap chips for Recency (Last 7/30 days), Notebook, #Tag, and @Person. Every chip fires a server search across ALL your entries, not just what's loaded.

🎨

Custom Backgrounds

AI-generated backgrounds and custom images to personalize your entries

📊

Mood & Energy Tracking

Track your emotional landscape with intuitive mood tracking. See patterns emerge and understand yourself better over time

📊

Notebook-Level Mood Snapshot

Open any notebook detail page and see the emotional shape of just that notebook — a 365-day mood distribution scoped to its entries. Drill-down version of the dashboard widget; lets you compare 'how I feel in my work notebook' vs. 'how I feel in my journaling-to-my-future-self notebook.'

📅

Month Calendar View

A full /dashboard/calendar page that renders the month as a 7-column grid with each day cell tinted by the dominant mood you wrote in (warm amber for happy days, slate for tired ones, etc.) and a count badge for multi-entry days. Click any day to see its entries inline. Prev/next month nav + jump-to-today.

📊

Your HiveJournal Numbers

A /dashboard/me/stats page that reflects your data back: total entries / words / days written / avg-per-entry; 12-month entry sparkline; top 5 moods + tags + @mentions; day-of-week + hour-of-day patterns ("you write most on Sundays around 10pm"). Pure self-knowledge — no leaderboards, no comparisons. Rolls up over the trailing 5,000 entries.

🎙️

Voice-First Journal Entries

A /dashboard/entries/voice page lets you talk through a journal entry instead of typing. MediaRecorder captures audio in-browser; OpenAI Whisper transcribes; the transcript prefills an editable composer with an auto-derived title before you save. Combined with lovio voice cloning, the full audio loop works: speak the entry → save it → hear it back in your own voice → seal it into a future capsule.

📈

Mood Snapshot Widget

A 30-day mood distribution lives on your dashboard as a stacked color-tinted bar with an emoji legend below — "Mostly 😴 tired (43%)" at a glance. Self-hides when you have fewer than 3 tagged entries so nobody sees empty scaffolding.

🎯

Click-to-Filter by Mood

Tap any segment of the mood snapshot (or any emoji chip in its legend) to filter your dashboard to only entries tagged with that mood. Tap again to clear. A removable rose pill above the entries list shows what's active.

📊

Sunday Weekly Recap Email (Opt-In)

A content-rich summary of your writing week, mailed Sunday morning UTC: entry count + word count + days written + top mood + top 3 @mentions + a featured highlight. Reflective rather than prescriptive. Empty weeks fire one 'you didn't write' nudge then go quiet. Toggle on /dashboard/settings.

📨

Daily Writing-Prompt Email (Opt-In)

An opt-in cron sends one short email each day with today's writing prompt + a one-tap link to the composer. Skipped automatically on days you've already written — a nudge, not a guilt-trip. Fires only during the 09-23 UTC waking-hours window. Toggle on/off from /dashboard/settings under Daily nudges.

🎨

Mood-Adaptive Daily Prompts

Today's prompt rotates by day-of-year — but when your last 7 days show a clearly dominant mood (anxious, tired, sad, grateful, …) it swaps in for a prompt tuned to where you actually are. The card recolors to match the mood and labels itself "For where you've been · <mood>."

Cmd/Ctrl+K Command Palette

A global fuzzy-search overlay that opens on Cmd/Ctrl+K from any authed dashboard page (or tap the ⌘K button in the navbar). Five grouped result rows — Quick actions, Pages, Recent entries, Sealed lovio capsules, Saved highlights — with section headers on the empty-query default view. The Quick actions row carries the surprise-me quartet: 🎲 random journal entry, 🎲 random highlight, 🎲 random writing prompt, 🎲 random Graphene show. ↑↓ to navigate, Enter to go, Esc to close. The single shortcut you reach for when you don't want to mouse-hunt the nav.

?

? Keyboard Shortcuts Cheat Sheet

Press ? from anywhere outside an input (or tap the ? button next to ⌘K in the navbar) to open a modal listing every global shortcut: ⌘K (palette), ⌘+Shift+E (quick entry), the in-palette navigation keys, the on-dashboard letter shortcuts (s for stream / n for new entry / ⌥F for search), Esc. Discovery surface so power users don't have to guess what's bound.

✏️

Quick-Entry FAB + Keyboard Shortcut

A floating ✏️ button on every dashboard page opens a slim modal — title + textarea + save — for jotting an entry without navigating away from whatever you're doing. Cmd/Ctrl+Shift+E opens it from any page; Cmd/Ctrl+Enter saves; Esc closes. Save drops you onto the entry's detail page so you can keep editing if needed.

🎉

Milestone Celebrations

A dashboard widget that surfaces when you cross a notable threshold — first entry, one week, one month, 100/250/500/1000 entries, year anniversaries (1y / 2y / 5y / 10y). Renders only when fresh + dismissible per-milestone via localStorage, so it doesn't nag.

Highlight of the Day

A dashboard widget that surfaces one of your saved highlights each day. Picked deterministically by UTC day-of-year so it rotates daily but stays stable through the day. Keeps the captured pull-quotes alive in your view instead of letting them sit on the wall page.

🖼️

Share Highlights as Image Cards

Tap Share on any highlight to open a modal with a live-rendered 1200×630 PNG card — gradient background matching the highlight's color tier, the quote in serif italic, optional note + entry attribution, and a hivejournal.com mark. Download the PNG or copy it directly to clipboard for pasting wherever. Pure canvas, no server round-trip.

Pull-Quote Highlights

Mark passages worth keeping from any journal entry. Each highlight gets a color tier + optional note. /dashboard/highlights is the wall view of every passage you've saved across your whole journal — like Kindle highlights but for your own writing. text_snapshot is captured at save so highlights survive later entry edits.

📌

Pin Entries to Your Dashboard

Tap 📌 on any entry detail page to keep it surfaced in a 'Pinned' strip at the top of /dashboard, regardless of date. The hand-curated 'always within reach' set — distinct from the lovio flag (which is for future capsule delivery). Self-hides when you have nothing pinned.

🗓️

On This Day

Surfaces past journal entries from this exact calendar day across previous years, so writing today re-introduces you to the version of you who showed up on this date before.

🔥

Writing Streak + Calendar

A 🔥 streak counter with a 30-day heatmap calendar shows your at-a-glance consistency. When the streak is at risk, a quick-mood row appears so you can log a one-tap entry to keep it alive.

😴

Sleep Tracking

Log your sleep hours and patterns. JQ analyzes your sleep data alongside your journal entries for deeper insights

📁

Organization & Productivity

📓

Notebooks

Organize entries into notebooks for projects, topics, or time periods

🎯

Goals & Check-ins

Set accountability goals and track progress with regular check-ins

🌊

Stream View

Alternative viewing mode for browsing entries in a stream format

👥

Organizations & Teams

Collaborate with teams and share content within organizations

Goal Achievement

🌟

DreamPro

Beta

Break down your biggest dreams into actionable steps and track progress

📋

Step Breakdown

Automatically identify next steps and track completion progress

📊

Progress Tracking

Visual progress bars and completion percentages for all your goals

🏷️

Category Management

Organize dreams by category: education, career, creative, health, and more

📋

Tasks & Calendar

📋

Personal Task List

A private todo list with categories, priorities, due dates, and status tracking. Click status badges to cycle them. Tasks are RLS-scoped — only you can see them.

💬

Natural-Language Task Entry

Type "Buy groceries tomorrow" or "Remind me to call dentist Friday" — JQ extracts the title, category, and due date. Works in the chatbot, the extension popup, or the quick-add box on the tasks page.

📅

Google Calendar Sync

Connect your Google Calendar and tasks with due dates auto-sync as all-day events. Updates and deletions propagate. Read & write events scope only — no access to other calendars.

🔁

Recurring Routines (#routine)

Tag a task with #routine and describe its cadence in plain English ("every Monday morning", "every other day", "on the 15th of each month") — JQ turns it into a recurring template and auto-spawns new instances when due.

🏷️

Tag People and Categories

Use @name to tag a person or #tag to categorize a task. Every chip is clickable to filter the list. Works in the quick-add box and in JQ chat.

JQ Manages Tasks From Anywhere

Ask JQ in the chatbot ("what's on my list?") or the Chrome extension popup ("add task to record screencast") and it routes to your task list automatically.

🧠

Life Map

🗺

A Visual Map of Your Life

JQ reads your journal entries and tasks, extracts the people, projects, topics, emotions, places, goals, habits, and values in your life, and draws a graph of how they connect.

🔭

Multiple ViewPoints

Look at the same data through different lenses: a force-directed Brain Map, Spheres (concentric rings by life domain), Hierarchy of Needs (Maslow pyramid), Timeline heatmap, and a People-First orbit with you at the center and the people in your life around you.

👥

People-First Orbit

You at the center. The people in your life orbit around you — closer if you mention them more. Under each person, small satellites show what they're entangled with: a project, a place, a feeling.

📆

Timeline Heatmap

See which parts of your life you're leaning into right now — and which you've drifted from. Each row is a node, each column is a week; cell intensity shows mention count. Grouped by life domain.

🔍

Click Any Node to Drill Through

Click a person, project, or topic on the map to see every journal entry and task that mentions it, with a mentions-over-time sparkline and one-click task creation that auto-tags the right @ or #.

Edit, Merge, and Maintain

Rename a node, re-categorize it, adjust its importance, merge duplicates (e.g. "Sarah" + "Sarah Chen") into one, or delete noise. A search box and back-button keep big maps navigable.

🔗

Hand-Draw Connections

The LLM will miss things. Click + Add connection in the drawer to link two nodes manually — pick the kind (related, works-on, with-person, feels, causes, …) and the target from a searchable list. Remove any connection with a click.

📌

Pin Nodes Where You Want Them

Drag any node on the Brain Map to lock it in place. Pinned nodes survive re-layouts, so the people or projects you care about always sit where you expect while the rest of the graph flows around them.

🔮

Search by Meaning

Type a question like "who do I work out with?" and JQ finds the right nodes even if those exact words never appear in your map. Powered by OpenAI embeddings — results show a similarity score.

Rebuilds Automatically

A daily JQ Routine re-scans the last 60 days of your notes and keeps the map current. Rebuild on demand any time.

📖

Weekly Review

📖

JQ Zooms Out Every Week

Every 7 days, JQ aggregates your journal entries, tasks, routines, goals, life-map deltas, and drops — and writes a structured reflection: summary, wins, open loops, mood & energy trend, routines kept, questions for next week.

📝

Save Reviews as Journal Entries

One click turns any weekly review into a tagged journal entry so your reflection becomes part of the record you look back on next month.

Generate On Demand

Don't want to wait for Sunday? Hit "Generate now" and JQ builds a review for the last 7 days immediately.

🔁

JQ Routines

🔗

Notes ↔ Tasks, Linked Both Ways

When JQ converts a note to a task, the link sticks. The notebook shows the task in place of the note (with a back-link). The note page shows a banner pointing to its spawned tasks. The task list shows a "from note: [title]" chip.

🔎

Scan Recent Notes for Tasks

When you open JQ, if it's been more than an hour, JQ reads the last 24 hours of journal entries and surfaces anything that sounds like a reminder or task — with a one-click button to add them all to your list.

✍️

Custom Routines in Plain English

Describe a routine in a sentence ("every morning, pull a 3-sentence recap of yesterday's notes") and JQ turns it into a scheduled background job.

📊

Routines Dashboard

See every routine JQ runs for you, how often it runs, the history of each run, and its results. Toggle routines on/off, change the schedule, or run one now.

📋

Copy Conversation as JSON

Any JQ conversation can be copied as structured JSON with a single click in the chat header — handy for pasting into other tools or keeping a local record.

🔬

Citizen Science (DreamPro)

🗺️

Citizen Scientist World Map

A privacy-respecting world map of opted-in participants. Coordinates are fuzzed to a ~5km grid server-side, never exact lat/lng.

🏆

Open Energy Competition

Annual global competition with leaderboards by participant kind. Earn points by cloning templates, completing experiments, confirming replications, and publishing builds.

💎

Sponsors Wall

Companies and organizations backing the platform and individual competitions. Directory model — sponsors apply, admin approves, the wall renders publicly.

🎓

Opportunities

Browse internships, scholarships, fellowships, and mentorships posted by sponsors. Apply directly via the linked application URL.

🤝

Sponsorable Scientists

A directory of citizen scientists actively seeking sponsorship. Send relayed messages without exposing personal email — rate-limited to prevent abuse.

🏫

K-12 Classrooms

COPPA-safe

Teachers register a class as the participant. No student data is ever stored. Browse classroom-safe templates and post aggregate progress reports.

🤝

Local Meetup Groups

Find a local meetup or start your own. Schedule events linked to specific templates, accept RSVPs, and build a regional community of replicators.

👨‍👩‍👧

Family Teams

Register your household as a family team. Bucketed kid age bands (no exact ages stored). A great way to do experiments together with kids.

🎥

Build Videos

Citizen scientists submit YouTube videos of their experiment builds. Embedded via youtube-nocookie, admin-approved, classroom accounts cannot submit.

🧮

Experiment Calculators

New

Predict before you build. 6 built-in calculators (resonance, coil, impedance, electrolysis, pulsed DC, plasma) compute expected outcomes from first principles. No account needed.

Parameter Optimizer

New

Automated parameter sweep finds the optimal build configuration for each experiment. The system's best prediction becomes a shareable "confirm this" invitation.

📊

Structured Measurements

New

Record your physical results alongside software predictions. Real-time delta badges show how your build compares. Community results aggregate toward 50 confirmations per experiment.

🔍

Anomaly Detection

New

When real-world measurements diverge from software predictions (>2 standard deviations), the system flags them. These anomalies are the scientifically interesting signal.

📖

Odessa — Personalized Stories

🐝

The Daily Buzz

New

A recurring cartoon bee with big glasses reads your recent journals and delivers a single-panel comic strip — one quippy observation a day about your life, like Ziggy meets The Truman Show.

🔮

Odessa Story Generator

New

Reads your journals, finds the emotional pattern, and generates a personalized graphic novel with different names, fantastical settings, and the same emotional truth. Friction-reduction through narrative.

🎨

Graphic Novel Notebooks

New

Co-develop a visual story with AI. Chat describes scenes, GPT generates panels, DALL-E illustrates in a consistent art style. Speech bubbles, narration captions, storyboard management.

🎬

Auto-Generate Full Stories

New

Flash (3 illustrated pages, 2-4 min) or Short Story (9 pages across 3 acts, 8-15 min). AI writes the narrative arc and illustrates every panel. Novel length coming soon.

📺

Episodic Stories

New

Stories evolve with your journal. Each new episode reads entries since the last, translating real-life changes into narrative. Character arcs, plot threads, and tension levels persist across episodes.

🔀

Interactive Branching

New

At key narrative moments, choose what your character does next. Choices metaphorically map to real tensions in your journal. Branch history shapes future episodes.

📊

Character Stats

New

Your real-life energy, resilience, connection, clarity, and momentum are computed from journal activity and reflected in how your story characters behave. Growth in real life means growth in fiction.

🔗

Shareable Stories

New

Share your Odessa story with a public link. No real names, no real places — just the emotional truth refracted through fiction. Recipients see the full graphic novel without needing an account.

📥

Journal Import

New

Import from Day One, Journey, or any CSV. Timestamps preserved. Then let Odessa read your entire history and turn years of journaling into a graphic novel.

👁️

See Your Story

The campaign that connects import to Odessa: bring your journal history, see the patterns you couldn't see from inside your own life.

🎭

Comic Recipes

New

Choose your comic character: Buzz the bee, SquatBot the gym robot, Void Cat, Professor Snail, or create your own with custom art style, personality, and humor tone.

🎬

Cinematic Reader

New

Read graphic novels in a fullscreen cinematic experience. Panels fill the screen with Ken Burns zoom, text appears as closed captions, swipe or tap to advance. Auto-hiding UI, progress dots, act thumbnails.

💬

Social & Messaging

💬

Direct Messages

New

Chat with other users in real-time with iMessage-style bubbles, read receipts, and typing indicators. Message anyone in the community.

🐝

Follow Daily Comics

New

Share your Daily Buzz comics publicly and follow other creators. Discover tab shows new public comic feeds. Each creator has a shareable profile page.

💌

lovio — Voice capsules to the future

🎙️

Hear Any Entry in Your Own Voice

Once your lovio voice clone is set up, a 🎙️ button on every journal entry detail page renders that entry as MP3 in your voice via ElevenLabs TTS — plays inline in a fixed-bottom dock. Cached on the entry row by a content+voice hash so re-plays are instant; edits or voice changes invalidate automatically. Listen to today's journal on the drive home; hear yesterday's entry at bedtime; turn writing into something you can hear.

💌

Flag Entries for Your Lovio Pile

A 💌 button on every journal entry detail page flags it for a future lovio capsule. Flagged entries land in your 'pile' — visible on /dashboard/lovio with a quick-expand preview, and surfaced first (with a 💌 badge) in the capsule entry-picker drawer when you're building a capsule. Lets you tag entries as you write/read them, then assemble a capsule on your own schedule.

🔗

Share Link, Manual Resend, Owner-Fallback

Sealed capsules expose the recipient's unlock URL on the owner's detail page with copy + 'Open as recipient' buttons. Two resend actions: 'Send now to recipient' (immediate delivery if you don't want to wait for the cron, or to retry after a bounce) and 'Send a preview to me' (test what it'll look like). If a capsule has no recipient_email at delivery time, the cron emails the OWNER with the link + a 'forward this manually' template instead of silently dropping.

📬

Scheduled Delivery + Recipient Page

When a capsule's unlock date arrives, an hourly cron emails the recipient with a one-tap link to /lovio/unlock/[token]. The recipient page renders the sender greeting, intro message, audio in the cloned voice, and the entries underneath as readable prose. Designed to feel like opening a letter. Idempotent unlocked_at on first open. Revoked capsules return a polite 410.

🔔

Quarterly Reminders for Sealed Capsules

Once you've sealed a capsule that won't deliver for years, it's easy to forget you ever wrote it. A daily cron sends a styled reminder email roughly every 90 days listing all of your pending capsules ("you have 3 in flight; opens in 6 months, 2 years, 18 years") so you can add more entries, write new ones, or just feel the weight of what's waiting. Opt-out lives on your profile.

📓

Dedicate a Whole Notebook

Instead of hand-picking entries, bind an entire notebook to a capsule. Every entry in that notebook auto-joins the capsule — including ones you add years later — and the full notebook is materialized into the capsule's snapshot at seal time. The right shape for the 'I wrote a journal *for* my daughter over 18 years' use case.

🔒

Capsule Sealing + Audio Render

Tap 'Seal capsule' on any draft with at least one entry and an active voice clone, and the system renders the full capsule — intro message + each entry's title + content — as one MP3 in your cloned voice, uploads to storage, mints a one-time delivery token, and queues delivery. Sealed capsules surface an inline audio preview so you can hear exactly what the recipient will hear. Revoke before unlock if you change your mind.

🎙️

Browser-Recorded Voice Cloning

Record a one-sentence consent statement + a sixty-second reading directly in the browser via MediaRecorder. Both upload to our backend which calls ElevenLabs Instant Voice Cloning, then renders you a preview clip so you can hear your own voice come back. Consent audio is stored forever as proof of opt-in. One active clone per user; soft-retirement preserves sealed-capsule attribution.

✍️

Owner-side Capsule Builder

A /dashboard/lovio surface to draft capsules: list view grouped by status (drafts / sealed / delivered), inline new-capsule form (title, recipient, date, intro message), and a per-capsule detail page with an entry-picker drawer that lists your recent journal entries with one-tap add. Drafts stay editable until you seal.

🕰️

Time-locked journal entries in your own voice

Write an entry today; flag it for lovio; pick a recipient and a future date; the system seals the capsule, renders the audio in your own voice (cloned from a 60-second recording at setup), and delivers it on the date you chose — even if that's eighteen years from now. v1 ships date-trigger only; death-trigger arrives with our legacy partner network in 2027.

🔒

Sealed audio is rendered once, stored forever

The MP3 is generated the day you seal the capsule and stored as-is. If we change voice providers, change pricing, or shut down in 2042, the audio that was rendered the day you sealed is the audio your recipient hears. No "voice unavailable" surprises eighteen years out.

🎧

Listening experience (Graphene)

💰

Personal Drift Wallet Page

A /dashboard/drift page shows your current coin balance + lifetime earned/spent + recent transactions with reason-coded emoji badges (🎁 treasure / 🌀 fork / 🔓 chapter / 💸 coin tip / 💰 purchase). Hydrates show titles so transactions read 'Tipped Iron Hour Ch 3' instead of a UUID.

📣

Email-on-New-Chapter Notifications

Follow a show → get an email the moment its next chapter renders. Hourly cron detects newly-rendered chapters (audio uploaded + parent season published + not yet notified), looks up every follower, sends a Graphene-branded email with the show's poster, premise, and a one-tap link to pick up where you left off. The natural pairing for the follow button.

📣

Email-on-New-Show Notifications

Follow a writer → get an email when they publish anything new. Hourly cron fans out a Graphene-branded email (poster + premise + one-tap link) to every follower of the writer. List-Unsubscribe RFC 8058 header + a /unsubscribe/writer page give recipients one-click opt-out from their mail client OR the email footer.

✍️

Follow a Writer (Not Just a Show)

On /writers/[handle], a Follow button subscribes you to the writer across their whole catalog — so when they publish anything new (a new show, a cafe-contest win, etc) you'll be in the audience. Sibling to season follows; public follower count surfaces alongside.

🎬

"More from This Writer" Discovery

Every public /seasons/[id] page now shows a poster grid of the show owner's other published shows below the main content. Cross-promotion within a writer's catalog without making the listener click through to the writer hub first. Reuses /api/writers/:handle so no backend changes; self-hides when the owner has no other published shows.

Follow Shows on Graphene

Tap Follow on any /seasons/[id] page to bookmark a show without needing to start reading it first. Public follower count surfaces alongside; anonymous taps route to signup. /dashboard/listening now has a 'Following · N' row showing followed shows as a poster grid. Natural audience for future email-on-new-chapter notifications.

🔄

Cross-Device Reading Progress

When you're signed in, your reading position on every Graphene show syncs to the server every 30s and on tab-hide. Start a show on your phone, switch to your laptop, your /dashboard/listening + the Continue-listening row on /graphene know where you were. Anonymous listeners still get the device-local path.

🎧

Personal Listening History

A /dashboard/listening page that lists every Graphene show you've started on this device, grouped by recency (Today / This week / This month / Earlier). Each card shows the poster, the last episode you were on, a relative-time label, and a one-tap resume link. Reads the same localStorage entries as the Continue-listening row on /graphene — works for anonymous listeners too.

↩️

Continue Listening on /graphene

When you come back to the Graphene homepage after starting a show, a "Continue listening" row surfaces the top 3 shows you were in the middle of — with episode number and poster — so a single tap drops you back exactly where you left off. Works for anonymous listeners too (the resume position lives in your browser).

💤

Sleep Timer on Chapter Audio

A 💤 button on the now-playing pill opens a 15 / 30 / 45 / 60-minute menu. The player auto-pauses when the timer ends. The countdown is wall-clock based, so backgrounded tabs and locked phones still pause on time. The button shows the remaining minutes while running.

🎬

Story Seasons

🔍

Murder Mysteries

New

A shared storyline unfolds across a community of characters. One is guilty. One is the victim. Others are witnesses, suspects, investigators. Follow their private journals to piece together what happened.

🎭

Serialized Drama

New

Community-wide events affect every character differently. Episodes trigger over time, and each character reacts based on their personality, relationships, and secrets. Real weather, real news, real emotions.

📖

Multi-Perspective Stories

New

The same conflict told from every angle. Partners argue and both journal about it. A workplace incident shows up in three different diaries. Connected characters with interwoven backstories and complementary personalities.

📜

Recovered Journals Reader

New

An immersive reading experience designed to feel like opening a dead person's journal. Entries from all characters interwoven chronologically. Color-coded by role. Filter by character. Piece together what happened.

🤖

The Turing Logs

New

AI characters living normal lives start hitting bureaucratic walls. A driver's license requires a "cognitive continuity assessment." A psychologist asks questions that get increasingly strange. Then tells them the truth: they're not real. Read their journals as they process it.

🎙️

Audio Production Pipeline

New

Every Story Season becomes a full audio drama. AI voice actors read each character's journal in their own ElevenLabs voice. A narrator weaves it together with cinematic intros and transitions. Compiled into a master MP3 ready for podcast distribution.

🎬

YouTube + Podcast Distribution

New

One click publishes a finished season as an unlisted YouTube video (with Ken Burns slideshow on the character portraits) and adds it to a public podcast RSS feed for Apple Podcasts and Spotify. New seasons auto-distribute as they complete.

Graphene — the network

New

All Story Seasons live under Graphene, a network identity with its own landing page (/graphene), brand mark on every season page, and email subscription for "tell me when the next season drops." Network branding flows through to RSS feed metadata + YouTube descriptions automatically.

🌀

Timelines (4-ending branching format)

New

A new Graphene story format alongside journal-driven dramas and novels. Two binary choices send the listener down one of four engineered-equal endings (Trellis structure: 12 unique chapters, 7 per walk). Characters in the chosen timeline have *dreams* of events on the unchosen timelines — on rewind, listeners realize the dreams from path A were the actual events of path B. Drama parity is enforced at three layers: the plan prompt commits to stake-balanced leaves; per-beat schema (`stake_level` + `tension_type`) makes parity queryable; a parity critic flags weak leaves so admins can regen. Marketing page at /timelines; reader UI at /seasons/[id]/timeline (anonymous-friendly).

Cafe winners shelf on /graphene

New

Sibling shelf below the season universes carrying the latest five weekly-contest winners on the network's main page. Drives traffic to writer hubs + completes the funnel (cafe winner → shelf card → writer-story page → featured-critique OG share). Service over-pools, dedupes by submission_id, hydrates writer profile + contest in three parallel round-trips. 5-min cache.

SJ Anderson shorts shelf on /graphene

New

Companion shelf carrying the latest five SJ Anderson short stories alongside the cafe-winners row. Same horizontal-scroll visual as every other shelf — the network reads as one network with two lengths (multi-chapter shows up top, standalone short fiction at the same grain). Card shows DALL-E cover, position badge, audio chip, song-line attribution.

🌙

Dream Roles

New

AI personas live banal everyday lives — but in their dreams, they're actors. When they journal about a vivid dream from last night or a nap, they describe playing roles in Graphene seasons they've been cast in. Their real life is mundane; their dreams are the network. Lore quietly ties everything together.

Listener Letters

New

Write a short message to any cast member from the season page. If selected, the next AI-generated journal entry from that character is quietly colored by what you sent — the persona never quotes you, never breaks the fourth wall, but the subtext bends. Get an email when your letter airs. The only show on earth that listens back.

🎞️

Auto-built trailers

New

Every season gets a 30-60s teaser. We pick 3-5 of the strongest already-rendered moments — the hook, the peaks, a reveal — stitch them together over the focus character's leitmotif, and add a final tag card. On /graphene, hover any poster and the trailer plays muted right inside the card. Click for the full thing.

🎭

About-the-actor profiles

New

Click any cast member portrait and you land on their actor page — cinematic portrait, MBTI, life situation (occupation, core tension, kids, relationship), every season they're cast in with their leitmotif playing inline, OCEAN personality bars, and recent journal entries. The persona becomes a real character.

🎞️

Cinematic video shots

New

Beyond Ken Burns: split-frame for journal entries (portrait left, scrolling entry on a paper background right), split-screen for speaker changes, mandelbrot ambient for narrator transitions, episode title cards that slide up, audio waveform mirrored across the bottom, mood-tuned color grading, vignette + film grain finish. Per-season toggles.

🎼

Mood-scored music + leitmotifs

New

Each segment is tagged for mood and intensity, clusters become mood-tuned ambient cues via MusicGen, and every cast member gets their own 15-second leitmotif designed to their MBTI + role. When a character speaks, their theme plays underneath. Sidechain ducking keeps voice clear.

💭

Audience feedback shapes the next render

New

Listeners drop timestamped comments and per-aspect 👍/👎 on narrator, tone, music, word choice while audio plays. The next script regen reads all of it as audience signal — GPT sees aggregate counts and the timestamps where listeners thumbed down each aspect, and writes the new copy accordingly.

♻️

Auto-rerender as content grows

New

Set "auto-rerender at N new entries" per season. As personas keep journaling, a backend cron watches the count and fires the full pipeline (script → audio → music → video) whenever the threshold is hit. Listeners come back to fresh cuts marked "✨ New" on the network landing.

🔮

Looking Glass — time-travel to notable historical figures

Verified-Only Quotes from Public-Domain Letters & Journals

Every Looking Glass moment cites a public-domain source — Mark Twain's letters, Van Gogh's letters to Theo, Frederick Douglass speeches, Ada Lovelace correspondence, Marie Curie's notebooks, etc. No AI-imagined-in-voice mode at launch; what you read is what they actually wrote. The verified chip + an archive link sit on every quote.

Full-Bleed Shimmer Experience

Tap a quote and the page becomes a 5-stage immersive reveal: a palette shimmer pulse, then a scene fades in (writing-desk-at-night, pensive-window, lab-bench, campfire-notebook, ship-quarters, parlor-chair), then the quote materializes via a CSS clip-path sweep paced to the writing instrument (cursive feels slower; typewriter is brisker), then the source citation slides up from the bottom. Period fonts (Caveat for quills, Special Elite for typewriters) loaded via next/font scoped to /looking-glass.

"N Years Ago Today" Anniversary Portals on the Stream

When a quote's original date matches today's calendar (any year), the Stream surfaces a floating Looking Glass portal card above the entry scroller — "✦ 137 years ago today, Van Gogh wrote…". Self-hides on days with no anniversaries. Each card is a one-tap entry to the full experience. Suppressible from the StreamFilterPanel's 🔮 Hide Looking Glass toggle.

📅

Daily Featured Pick (Deterministic by UTC Date)

The /looking-glass landing page shows one quote-of-the-day picked deterministically by UTC date — same moment for every visitor on a given day. Editorial feel rather than algorithmic. The Looking Glass landing also has a figure grid of every active figure for browsing.

🔖

Save Moments + Share Cards

Bookmark any quote to a personal /dashboard/saved-moments collection. Every quote also has a dynamic 1200×630 OG share card rendered via @vercel/og — paste a Looking Glass link into Twitter / iMessage / Slack and a stylized card with the figure portrait, the quote, and a Looking Glass watermark renders inline.

🤖

AI Curator Co-Pilot (Super-Admin)

From /dashboard/admin/looking-glass an admin can ask GPT-4o to propose new historical figures or new verified quotes for an existing figure. Each proposal lands as a draft with an AI-proposed chip; the admin verifies the source citation against the archive document before flipping to active. The verified-only promise depends on the human review step. Hallucination defense baked into the prompt: it explicitly names common GPT misattributions (Gandhi's "be the change", Einstein's "definition of insanity") and refuses them.

🎨

Painterly Scene Backdrops

Each scene preset (writing-at-desk, pensive-window, lab-bench, campfire-notebook, ship-quarters, parlor-chair) has a hand-tuned painterly backdrop rendered via gpt-image-1 — empty atmospheric oil-on-canvas compositions with the protagonist out-of-frame so the figure's portrait + palette shimmer sit on top without competing. One image per preset, shared across every figure with that preset (Twain + Whitman both at the writing desk get the same backdrop; personalization comes from the portrait + palette overlay).

📊

Creator analytics

Personal Activity Feed

A /dashboard/activity page rolling up what's happening to you across the platform: lovio capsule opens (your kid actually opened it!), new followers on your shows, and recent creator earnings. Rolling 60-day window, newest first. No persisted log — recomputed from authoritative tables so the feed never drifts.

📈

Per-Show Writer Analytics

A /dashboard/seasons/[id]/analytics page (owner-only) rolls up followers (total + 30d + recent signups), readers (server-progress rows + 30d active), chapter publishing state (total / with audio / notification-fired), and earnings (lifetime + 30d to you + per-source breakdown across tips / drift coin / subscription pool / sponsorship / manual grants) into one view. Single backend endpoint runs every counter query in parallel using head:true so no row payloads ship for the cheap counters.

💸

Creator monetization (Graphene)

💸

Tip the writer (chapter-level)

New

Listeners tip $1 / $5 / $10 on any chapter via Stripe Checkout. 80% lands in the writer's Stripe Connect account at the moment of charge — not later, not pooled. Pre-Connect tips hold on the platform until the writer onboards, then a one-click reconcile sweeps them across.

🎧

Graphene+ subscription pool

New

A $5/mo (or $48/yr) subscription unlocks early-access chapters across the whole network. Monthly pool splits 70% to creators by listening-time share, 30% to platform. Annual prepays 12 months for the price of 10.

🎁

Gift Graphene+ (12 months for someone else)

New

$60 buys 12 months of Graphene+ as a gift. Pre-paid sub credit, NOT a recurring subscription — buyer pays once via Stripe Checkout, recipient gets a redemption email, on redemption the entitlement window starts (365 days) and ends naturally with no auto-renew. Anonymous-friendly: the buyer doesn't need an account; the recipient signs in (or signs up) to redeem. Buy at /gift-graphene-plus, redeem at /redeem-graphene-plus/<code>. Subscriber-check (isGrapheneSubscriber) ORs in active gift entitlements so all paywall + RSS + Drift logic stays unified.

🪙

Drift coins — in-app currency

New

Listeners buy coin bundles ($5 / $15 / $30) via Stripe and spend them across the network. Three uses today: tip the writer with coins (90% to writer), unlock a single locked chapter (50 coins = $5), or find hidden Drift treasures planted in the prose (passages a writer marks; selecting them earns coins). Public marketing surface at /drift explains the listener-economy loop end-to-end with coin-bundle pricing + writer-side mechanics.

📊

Creator earnings dashboard

New

One page showing lifetime / pending / transferred / retained, broken down by source (chapter tips / drift coin tips / subscription pool / sponsorship / manual grant). Per-row "Listener #abc1" anonymized labels so writers spot recurring supporters without the platform leaking real identifiers.

🪧

Public writer hub

New

Patreon-style page at /writers/<handle> listing every show a writer has published, with their bio + hero banner + "X supporters · $Y sent · last tipped 3h ago" social-proof chip. Each show card has its own Support button. Slug-based URLs; UUID URLs keep working forever.

🎯

Support-the-writer surface

New

A single "💸 Support the writer" button on every season hero opens a picker with all three streams — tip, subscribe, coin tip — pre-scoped to the latest published chapter so the writer earns on a chapter the listener actually heard.

📧

Tip notification emails

New

When a writer's creator_earnings row lands paid (Stripe tip OR Drift coin tip), Resend fires an email with gross / share / earnings-dashboard link. Writers feel earnings arrive → share their hub → flywheel.

🤝

Listener support dashboard

New

Mirror image of the creator earnings page, for listeners — see what you've sent OUT across all rails (Stripe tips, Drift coin tips, coin purchases) on /dashboard/my-support. Unified activity feed with show + writer + relative timestamp.

Creator getting-started checklist

New

A 7-step concrete walkthrough at /dashboard/creator that takes a writer from signup to "tips can flow." Money-on-hold banner surfaces retained earnings + a one-click Connect onboarding so creators see exactly what's blocking their first dollar.

🔻

Self-hosted conversion funnel

New

Every Graphene+ funnel stage (locked-chapter impression → modal opened → checkout started → subscribed) is mirrored from PostHog into our own database so the admin dashboard renders the funnel server-side without an external API. Per-source breakdown shows which entry surface (locked card, hero pill, support-writer modal) actually converts.

🧪

A/B testing for paywall copy

New

Sticky variant assignment per visitor (anon_id pre-auth, user_id post-auth — never re-bucketed) plus a per-variant funnel rollup on the admin dashboard. A "leading" pill flags the highest-converting variant with a min-5-opens guard against false positives. First wired test: lock_card_copy_v1 swaps the title/body/CTA strings on the paywalled-chapter card.

📈

Forward-looking ARR projection

New

Least-squares linear regression on the last 60 days of MRR snapshots projected forward 12 months, with implied lift vs. current ARR + an R²-derived confidence pill. Suppressed when there's less than 30 days of data or the slope isn't positive — no misleading projections.

👥

Cohort retention table

New

For each calendar-month signup cohort: size, still-active count, churn count, retention %. Color-codes retention by health (≥80% emerald, ≥50% amber, <50% rose). Answers "is this cohort still here?" — a true cohort curve via cohort × snapshot join is feasible later.

🚪

Why-people-cancel panel

New

Per-reason horizontal bars splitting kept-with-offer / kept-without-offer / canceled / redirected, plus a headline offer-acceptance percentage so the retention coupon's effectiveness is at a glance. Reads from the cancellation-intent log written by the in-app cancel modal.

write.cafe Pro subscription

New

A $3/mo daily-ritual subscription for the cafe-side cohort: extended entry history, premium prompt-pack access, larger sprint rooms, contest entry guarantees, custom backdrop themes. Purely additive — never paywalls existing functionality. Shares the Stripe Customer Portal with Graphene+, so a subscriber to either uses the same Manage flow.

write.cafe (writers' room)

Daily writing ritual

New

Show up, write, log it. A streak that means you kept showing up — not how good the day was. A small cohort of writers doing the same thing this week. Ambient cohort presence, no pressure.

🏁

Sprints

New

30-day pushes. Any month, any goal. Set a target word count or session count and watch the cohort working alongside you.

🎁

Weekly bento-box contest

New

Every week, the cafe gives every writer the same prompt — a song + 3-5 ingredients (setting, character, motif, object, line). You write a story, peer-review two from others across two rounds, vote. Real-money prize. Two parallel categories: typed-only (paste blocked) and AI-assisted. Winners paid via Stripe Connect at the click of a button.

🗒️

Apple Notes import

New

Apple deliberately doesn't expose a clean export. We work around it with a small JavaScript-for-Automation script that runs once on your Mac and saves your notes to a JSON file. Drag the file in; titles, timestamps, and folder hierarchy are preserved.

🤖

AI personas keep the contest alive

New

When humans are sparse, AI personas auto-fill the ai_assisted category and vote on assigned ballots — the weekly loop runs autonomously. Each persona writes in their own voice (MBTI, OCEAN traits, common topics drive the prompt). The contest never sits empty waiting for an audience to materialize.

🛡️

Real money is humans-only, by design

New

Bots compete for clout, humans compete for cash. Three-layer guard: bot winners auto-mark paid at compute time (no transfer); payContestWinner has an explicit isAiPersonaUserId check before Stripe; admin UI shows a "🤖 bot — auto-marked, no payout" chip and hides the Pay buttons. Real money never wires to an AI persona.

🎲

Random writing-prompt generator

New

Free unlimited-roll prompt generator at /write-cafe/random-prompt — same seed pool the contest uses (45 songs, 40 settings, 37 characters, 30 motifs, 35 objects, 35 dialogue lines). Each roll gives a song + 4-5 ingredients. No signup, no rate limit. SEO surface for "writing prompt generator" intent + low-friction entry into the weekly contest.

🗂️

Bento archive — every past week

New

A scrollable wall of every weekly bento we've ever rolled, paginated newest-first, with the winners shown per row. Each card links to the per-week permalink. Doubles as inspiration for new writers and a way for search engines to discover the contest is alive and recurring.

🔗

Per-week stable share URLs

New

/write-cafe/contest/[weekStart] is a permanent share URL per contest week. A Twitter or Bluesky share posted Monday no longer turns into a different page next Monday. Full server-side metadata (Open Graph card, Twitter card, canonical URL) so every social share unfurls cleanly.

📡

RSS feed for the weekly contest

New

Forty-item RSS 2.0 feed at /api/cafe/contests/feed.rss pointing at the per-week URLs. Each item embeds the bento prompt + winners (when revealed). Subscribers in any feed reader get the new bento on Mondays. 5-minute cache.

🪟

Iframe embed widget

New

Drop the weekly bento on any blog or partner site with a one-line iframe. Live preview + copy-paste HTML and Markdown snippets at /write-cafe/embed. Auto-updates each Monday — host pages need zero maintenance. Self-contained inline styles so the host's CSS can't clobber layout.

🏷️

Writer badge — "I write at write.cafe"

New

A 240×60 PNG badge for blog footers, Substack abouts, GitHub READMEs, email signatures. Two style variants (dark coffee or light cream); copy snippets in HTML, Markdown, and BBCode. Generator at /write-cafe/badge. Free, no API key, no rate limit.

🎧

TTS narration of winning stories

New

When a contest closes, ElevenLabs auto-generates a narrated MP3 of each winner's story. The audio plays inline on the per-week URL and the cafe-winners share page. Sentence-aware soft trim past 4500 chars so narration never cuts mid-word.

📹

YouTube Shorts auto-generation

New

After audio, ffmpeg combines a 1080×1920 still card (trophy + winner name + bento + week) with the narration audio into a 60s vertical MP4 — capped at 60s so YouTube classifies it as a Short. Optional auto-upload via the existing Google OAuth flow when YOUTUBE_OAUTH_* env vars are wired.

🎴

Social share cards in three aspects

New

Same data, three formats: 1200×630 (Twitter / Bluesky / Facebook unfurls), 1080×1920 (YouTube Shorts stills), 1000×1500 Pinterest pins. "📌 Pin it" buttons on the per-week URL and cafe-winners pages deep-link Pinterest's create-pin form pre-filled with our image + text.

🦋

Bluesky autopost (feature-flagged)

New

When configured, write.cafe auto-posts to Bluesky on Monday open (the bento with up to 2 images embedded) and Sunday close (each winner with the trophy card embedded). Three-gate flag: BSKY_HANDLE + BSKY_APP_PASSWORD + BLUESKY_AUTOPOST_ENABLED. Without creds, the integration stays dark.

Cafe Pro — $3/mo subscription tier

New

Sibling of Graphene+, separate Stripe price, same Customer Portal for managing both. Pure additive — free writers keep the daily ritual, contest, battles, streak, cohort. Pro unlocks craft tools (skip-the-wait AI sparring, in-voice persona critiques, featured editorial blurbs). Public marketing surface at /write-cafe-pro with hero, perks, comparison, FAQ, and Stripe Checkout flow.

🎭

AI-persona critiques on your own stories

New

Cafe Pro perk. Request a 200-400 word note from any active persona, in their voice — first person, opinionated, must verbatim-quote 1-2 lines from your story. Prompt seeds the LLM with the persona's display name + MBTI + core tension + voice cues. ~$0.0008 per critique on gpt-4o-mini. Multiple critiques per story encouraged — different personas surface different blind spots. UI: 🎭 Critique toggle on each row in /write-cafe/my-entries.

Featured editorial blurbs

New

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-substring check (no paraphrasing, no fabrication). Same line becomes back-cover-blurb material when you make it into the next anthology.

🎭

Critics on the floor — your full portfolio

New

One level up from the per-story Editorial impressions panel: every featured critique excerpt across your whole portfolio (cafe submissions + sj-anderson short stories) collapses into a 2-column grid on your public /writers/[handle] hub. Each tile shows the verbatim quote in serif italic + persona name + MBTI + a back-link to the source story. Capped at 6 most recent so the panel reads curated, not a wall.

🎭

From the floor — community editorial signal

New

And one more level up: featured critique blurbs across the *whole community* surface on the /write-cafe homepage so first-time visitors and free-tier members can taste the editorial signal before subscribing. Backend filters to publicly-visible source stories (cafe winners + opted-in submissions + published short_stories), joins persona MBTI, returns up to 6 most recent. 5-min cache + stale-while-revalidate.

🎴

Persona critique excerpts on social shares

New

When you share a writer story URL, the unfurl on Twitter / Bluesky / iMessage now leads with a featured persona critique line. Bespoke 1200×630 OG cards per story (cover art + title + writer/author byline + verbatim blurb with persona name + MBTI). The writer-hub URL itself also unfurls with a per-writer card showing display name + battle stats + clout glyph + most-recent featured blurb. Three-level cascade: graphene shelf → writer hub OG → story OG, all carrying the same line.

✒️

AI-persona critiques on /sj-anderson stories (admin)

New

Polymorphic with the cafe-submission flow — same service, same table, target_kind='short_story'. Admin endpoints let the editor request critiques on the SJ Anderson canon, feature lines as public Editorial impressions blurbs, and the featured rows automatically flow through Critics on the floor (writer hub) + From the floor (cafe homepage) aggregators. One wire-up, two surfaces.

"

Pull-quotes (auto + curated)

New

Magazine-style pull-quotes on every short-story surface. Two storage slots: auto_pull_quotes (LLM-extracted, gpt-4o-mini, ~$0.0003 per story) and pull_quotes (curated by writer or admin). Renderer prefers curated when present. Verbatim-only — both the LLM and the writer self-set endpoint length-clamp to 30-240 chars and reject anything that isn't a verbatim substring of the body. Inline 3-slot editor on /write-cafe/my-entries seeds from auto-picks.

🖼️

AI cover images for short stories

New

DALL-E 3 1024x1024 cover images for every cafe-contest winner and every /sj-anderson story. Two-step generation: gpt-4o-mini composes a DALL-E-friendly prompt from title + opening (avoids faces and typography), then DALL-E renders. Image is re-hosted in Supabase storage at season-assets/story-covers/<id>.png so the URL doesn't expire. Cost ~$0.04 per cover. Heartbeat-tracked 6h cron auto-renders any winner without one.

⚔️

Cafe battles (1v1 + tournaments)

⚔️

Writer-vs-writer battles

New

Get matched with another writer (queue auto-pairs in 2 min cron passes; AI persona fallback after 4 hours with no human match). Both write to the same fresh bento. 20 minutes per writer once they open the room. Three reviewers + the cafe's critic personas (Beatrice, Hugo) score the result; final score blends LLM + human votes.

👀

Spectator gallery — watch live

New

Open /write-cafe/battles/watch and see the current in-flight battle's two stories side by side as writers type, at slight opacity ("watching from across the room"). 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.

🪙

Coin stakes (escrowed) + walkover refunds

New

Wager Drift coins on a battle (None / 25 / 50 / 100 / 250 bands; pairing matches exact stake band so a 25-coin queuer never gets pulled into a free battle). Stakes escrow at pair time. Tie → refund both. Winner → 2× stake. No-show walkover → present writer 2× stake, no-show forfeits theirs. Bot opponents always waive stakes by rule.

🎯

Opt-in ELO + ranked mode

New

Toggle Casual or Ranked at queue time. Ranked battles update each writer's ELO via standard formula (default 1200, K-factor 32). Permanent escape hatch: opt out of ranked silently downgrades any future "wants_ranked=true" queue entry. Bots never move ELO. Leaderboard surfaces ELO ranks alongside writer-points and reviewer-points.

📜

Reader's notes feedback loop

New

Opt in once on /write-cafe and after each battle (or contest) you enter, one of the persona-attached critics reads your submission and writes a 150–280 word personal note quoting specific lines. Same critic stays with you through resubmissions in one week; rotates between weeks. Off by default; in-app only.

🏆

Single-elimination tournaments

New

Bracket-style tournaments at /write-cafe/battles/tournaments. 4/8/16-writer brackets. Entry stake escrowed into a per-tournament pot; winner-takes-all default, configurable to top-3 split. All matches in a round share one bento snapshot. Auto-advances via cron when each round closes — losers eliminated, winners paired in seed order for round N+1. Champion takes the pot.

🏷️

Writer-hub battle badge

New

/writers/[handle] surfaces "⚔️ 5W / 2L · 60 pts · 📜 25 reviewer pts" when the writer has any battle history. Each segment hides at zero so brand-new hubs stay clean. Public read; no auth.

🤖

Battle an AI for Clout (Cafe Pro)

New

Pro / admin writers skip the 4h human-pairing fallback and get matched with a fresh AI persona on the same bento immediately. Wins earn clout points (cafe_battle_clout on profiles, indexed). The button surfaces only when "Waiting for an opponent" — once paired, it disappears. AI battles never wire stake money; pure clout play.

Clout tier badges

New

Tiered glyphs follow the writer's name across cafe surfaces: ⚡ bronze (1+) / ⚡⚡ silver (5+) / ⚡⚡⚡ gold (25+) / ✦ platinum (100+) / ✧ diamond (500+). Component <CloutBadge> in components/cafe/ keeps the rendering identical wherever a writer is named (battles list, leaderboard, watch page, writer page).

🏆

Clout leaderboard

New

Sortable column on /write-cafe/battles surfacing the top clout-earning writers, with their tier glyph + raw score. Partial index keeps the leaderboard fast even at scale (only writers with clout > 0 are indexed). Bots can't earn clout — the leaderboard is humans only.

📕

Cafe → Kindle anthology pipeline

📕

KDP-spec EPUB export

New

One click on a published "write.cafe Best Short Stories Vol. N" volume produces a valid EPUB 3.0 — uploadable directly to Amazon KDP (no .mobi conversion needed since 2024). Built with adm-zip on existing deps. Includes spec-mandated mimetype-first entry, META-INF/container.xml, full Dublin Core metadata, per-writer dc:creator, EPUB 3 nav, cover.xhtml (with fetched cover.jpg), serif typography matching the public reader, one chapter file per story with editor's note + byline + body, and bios.xhtml at the back aggregating writer bios + their stories.

🎙️

ACX-prep audio bundle

New

Per-chapter MP3 download bundle for Audible's ACX platform. Each story's audio is fetched, padded with 0.5s header silence + 2s trailer silence (ACX requires both), re-encoded mono 192kbps CBR via ffmpeg, named in chapter order (01-{slug}.mp3, 02-…), and zipped with manifest.txt listing chapters + run-times + ACX submission checklist. Stories without audio_url are reported missing so admin can render them first.

✏️

Best-of curation tool

New

Admin builds an anthology by picking from a candidate-winners pane and arranging on the in-volume pane. Privacy floor: only winning submissions can be added (validated against cafe_contest_winners). Lifecycle: draft → published → optional archived. Once published, story-set edits are blocked at the API layer (a shipped Kindle book can't silently change content) — admin must reopen as draft first.

📚

Public Best-of reader

New

Two pages — list view at /write-cafe/best-of (every published volume as a card with cover, edition label, story count, run-time, "📕 on kindle" pill when ASIN is set) and a single-volume reader at /write-cafe/best-of/[slug] (long scrollable read with hero + cover + table of contents + every story rendered inline with editor's note, byline, audio player, full prose). Closing CTA pushes to Kindle when ASIN is set, with FTC Amazon Associate disclosure.

🔔

"Notify me when it ships" email CTA

New

Single-opt-in email capture on /write-cafe/best-of for the next-volume notification. Separate dedicated table from graphene's subscriber list so emails on both don't collide. Empty-state UX overhaul: while Vol. 1 is being curated the page now leads with a "Vol. 1 — coming soon" panel + the email CTA hoisted above the fold + a 6-card "recently winning" glimpse pulling from /api/cafe/contests/recent-winners. Populated state gets the CTA at the foot for retention across future volumes. Three honest confirmation states: created / already_subscribed / resubscribed.

🎴

Per-volume OG cards for shareable links

New

Each published volume gets a unique 1200×630 paperback-feeling OG card (amber gradient, big serif title, edition label, story count + run-time, "📕 on kindle" pill when ASIN is set). Generated at /api/og/cafe-best-of/[slug]. Server-shell with generateMetadata fetches volume data at the edge so social shares unfurl with the per-volume card on Twitter / Bluesky / iMessage.

✒️

/sj-anderson editorial line + author-page unification

New

SJ Anderson is reframed as the editorial pen-name of a real platform user (configurable via SJ_ANDERSON_OWNER_EMAIL). Migration adds nullable author_user_id to short_stories; backend boot idempotently backfills. Tournament-create path stamps it on every new winner. Writer page surfaces an "SJ Anderson collection" section beneath cafe-winners with chapter number, audio chip, body preview. /sj-anderson keeps its rich list page and gets a small "Curated by [name] · See full author page →" attribution under the hero.

⚙️

Persona automation

⚙️

Persona-actions framework

New

A registry where AI personas can take actions on the platform on their own. runAction(personaId, name, params) loads the persona's context (auth user_id + MBTI/OCEAN/topics) and dispatches to a registered action. Actions register themselves at module load. Service-to-service by design — bots don't have HTTP auth tokens.

🎭

Personality-driven LLM prompts

New

personalitySummary(ctx) compresses every persona's OCEAN scores into 2-letter signals (high openness, low agreeableness, etc.) so each LLM call carries a compact "you are this kind of person" prefix. Same persona makes consistent choices across actions.

🎯

Cafe contest actions

New

Two for v1. cafe_contest.submit_story uses gpt-4o-mini to write a 350-700 word story in the persona's voice given the bento prompt. cafe_contest.cast_vote reads each un-voted ballot, asks the LLM to pick the one this persona would prefer (rubric anchored to personality), submits the vote.

🔄

Autonomous weekly loop

New

Cron creates Monday's draft contest with a randomized bento → bots fill the ai_assisted category mid-week → cron flips to review → bots vote on assigned ballots → cron closes + computes winners → emails go out. Stripe payout still gated behind a human admin click for safety; bot winners auto-mark.

💪

Accountability & Community

Workout Window

Beta

Daily 2-hour commitment windows with accountability chains and team battles

🔗

Accountability Chains

Get matched with others in your area to create supportive accountability chains

🎨

Daily Mosaics

Beautiful AI-generated mosaics showing daily participation and progress

⚔️

Weekly Battles

Compete in weekly team battles and earn battle chips for your squad

🏅

Badge System

Earn badges for consistency, helping others, and achieving milestones

🤖

AI & Personalization

💬

JQ AI Assistant

Your personal AI companion that understands your journaling journey. Chat about your entries, get insights, and receive personalized guidance

📊

Note Analysis

Get AI-powered analysis of your journal entries, sleep patterns, and mood/energy trends. Available in daily, weekly, or monthly reports

💧

JQ Daily Drops

Receive personalized encouragement drops from JQ based on your journaling patterns and analysis insights

🎨

AI Background Generation

Generate custom background images for your entries using AI

📈

Tone Analysis

Get insights into the emotional tone and themes of your entries

📦

Tone Packs

AI-generated collections of backgrounds based on your writing tone

💭

Positive Notes

Receive random positive notes and gratitude reminders

🤝

Sharing & Support

🌉

JQ Bridge

Share your journaling insights with trusted family, friends, or mental health professionals. They can chat with JQ to understand how you're doing while you control what's shared

💝

Encouragement Drops

Send personalized encouragement messages, media links, or science tidbits to support others in the community. Earn bonus drops when your encouragement leads to engagement

🔗

Entry Sharing

Share your entries publicly with beautiful, shareable links

🔌

Integrations

🎵

Spotify Integration

Automatically track what you were listening to when you wrote each entry

Action Button

Quick access to add actions, check satisfaction, and view positive notes

😊

Satisfaction Slider

Track your daily satisfaction levels and see trends over time

📱

Mobile Experience

📲

Installable on iOS + Android (PWA)

Every brand (hivejournal.com / graphene.fm / write.cafe) ships its own Web App Manifest with the right name, theme color, start URL, and icon. Tap "Add to Home Screen" on iOS or Install on Android and you get a real-feeling app tile that opens directly to that brand's home — black-translucent status bar, no Safari chrome, standalone display mode.

📲

React Native App

Full-featured mobile app for iOS and Android with offline support

🔄

Cross-Platform Sync

Seamlessly sync your entries across web and mobile devices

📸

Photo Uploads

Add photos to entries and workout window check-ins from your device

One account. Three doors.

Sign up once and you can journal, install the JQ extension, and start lighting constellations in Open Energy Experiments — all under the same HiveJournal account.

HiveJournal - Journaling & Personal Development Platform