JQ โ your AI companion โ appears across all three. Use one, use all.
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.
Everything that lives in the HiveJournal app โ organized by what it helps you do.
Beautiful, distraction-free writing experience with auto-save and custom fonts
Browse all your entries with powerful search and filtering capabilities
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.
AI-generated backgrounds and custom images to personalize your entries
Track your emotional landscape with intuitive mood tracking. See patterns emerge and understand yourself better over time
Log your sleep hours and patterns. JQ analyzes your sleep data alongside your journal entries for deeper insights
Organize entries into notebooks for projects, topics, or time periods
Set accountability goals and track progress with regular check-ins
Alternative viewing mode for browsing entries in a stream format
Collaborate with teams and share content within organizations
Automatically identify next steps and track completion progress
Visual progress bars and completion percentages for all your goals
Organize dreams by category: education, career, creative, health, and more
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.
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.
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.
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.
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.
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.
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 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 #.
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.
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.
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.
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.
A daily JQ Routine re-scans the last 60 days of your notes and keeps the map current. Rebuild on demand any time.
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.
Don't want to wait for Sunday? Hit "Generate now" and JQ builds a review for the last 7 days immediately.
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.
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.
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 scientists submit YouTube videos of their experiment builds. Embedded via youtube-nocookie, admin-approved, classroom accounts cannot submit.
Predict before you build. 6 built-in calculators (resonance, coil, impedance, electrolysis, pulsed DC, plasma) compute expected outcomes from first principles. No account needed.
Automated parameter sweep finds the optimal build configuration for each experiment. The system's best prediction becomes a shareable "confirm this" invitation.
Record your physical results alongside software predictions. Real-time delta badges show how your build compares. Community results aggregate toward 50 confirmations per experiment.
When real-world measurements diverge from software predictions (>2 standard deviations), the system flags them. These anomalies are the scientifically interesting signal.
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.
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.
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.
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.
At key narrative moments, choose what your character does next. Choices metaphorically map to real tensions in your journal. Branch history shapes future episodes.
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.
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.
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.
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.
Chat with other users in real-time with iMessage-style bubbles, read receipts, and typing indicators. Message anyone in the community.
Share your Daily Buzz comics publicly and follow other creators. Discover tab shows new public comic feeds. Each creator has a shareable profile page.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
30-day pushes. Any month, any goal. Set a target word count or session count and watch the cohort working alongside you.
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 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.
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.
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.
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.
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.
/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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
/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.
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.
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).
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
Get matched with others in your area to create supportive accountability chains
Beautiful AI-generated mosaics showing daily participation and progress
Compete in weekly team battles and earn battle chips for your squad
Earn badges for consistency, helping others, and achieving milestones
Get AI-powered analysis of your journal entries, sleep patterns, and mood/energy trends. Available in daily, weekly, or monthly reports
Receive personalized encouragement drops from JQ based on your journaling patterns and analysis insights
Generate custom background images for your entries using AI
Get insights into the emotional tone and themes of your entries
AI-generated collections of backgrounds based on your writing tone
Receive random positive notes and gratitude reminders
Send personalized encouragement messages, media links, or science tidbits to support others in the community. Earn bonus drops when your encouragement leads to engagement
Share your entries publicly with beautiful, shareable links
Automatically track what you were listening to when you wrote each entry
Quick access to add actions, check satisfaction, and view positive notes
Track your daily satisfaction levels and see trends over time
Full-featured mobile app for iOS and Android with offline support
Seamlessly sync your entries across web and mobile devices
Add photos to entries and workout window check-ins from your device
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.