Cafe Stories → Kindle pipeline
End-to-end flow that turns weekly write.cafe contest winners into "write.cafe Best Short Stories Vol. N" Kindle compilations.
This is one of the registered monetization pipelines tracked at
/dashboard/admin/monetization
under the key cafe_stories_to_kindle.
What the writer experiences
-
Submit to the weekly contest at
/write-cafe/contest. Each week a fresh "bento" prompt drops (a song line, a setting, an ingredient list, an object, a snippet of dialogue). The writer produces a short piece in either the typed-only or AI-assisted category. -
Peer review picks winners. Two rounds of pair-wise review from other submitting writers. Top placements per category get stamped permanently in
cafe_contest_winners. -
Winners become public author content. Each winning submission surfaces on the writer's
/writers/[handle]profile with a placement badge (🥇/🥈/🥉) and a full read view at/writers/[handle]/stories/[id]. -
Audio narration auto-renders. The
cafe_story_audio_tickcron (every 6h) picks up new winners withoutaudio_urland runs ElevenLabs narration (~$0.72 per 700-word story). Audio shows up inline on the writer's page within hours. -
Non-winners can opt-in. Writers manage their visibility at
/write-cafe/my-entries— every entry they've submitted, with per-row "Show on my profile" toggles for non-winners they're proud of. Wins are always public.
What the admin experiences
-
Curate a volume at
/dashboard/admin/cafe/best-of:- Create a new draft with a slug + name + edition label
- Pick 10–15 stories from the candidate pane (every winner shows up with metadata — title, writer, word count, audio status)
- Drag-to-order and add per-story editor's notes
- Mark published when ready (this freezes the story-set so a shipped Kindle book can't silently change)
-
Export the Kindle manuscript. The published volume page has an "📕 Export .epub" button that downloads a KDP-ready EPUB 3.0 file (writer bios + ToC + cover image + each story as its own chapter). Upload directly to KDP — Amazon accepts EPUB since 2024, no .mobi conversion needed.
-
Export the Audible bundle. The same page has a "🎧 Export ACX zip" button that downloads a per-chapter MP3 zip with header/trailer silence padded, mono 192 kbps CBR via ffmpeg, plus a
manifest.txtlisting the chapter order + run-times + the ACX submission checklist. Upload chapter-by-chapter to ACX. -
The volume goes live. Once
amazon_asinis stamped on the volume row, the public reader at/write-cafe/best-of/[slug]surfaces a "📕 Buy on Kindle" button (with thehivejournal-20affiliate tag) + the canonical FTC Amazon Associate disclosure.
What's automated vs manual
Automated (no admin click):
- Contest submission → review → winner selection
- Winning submissions surfacing on writer profiles
- ElevenLabs audio render on win (6h cadence)
- Public reader pages updating as content lands
- Per-volume OG card for social shares
One-click admin:
- Curate a volume (drag-to-order, save story-set)
- Mark published / reopen as draft
- Export .epub
- Export ACX audio zip
Manual (real-world, can't be automated):
- Royalty split decision with writers (per-volume contract)
- KDP account setup + tax forms
- ACX (or Findaway Voices) account setup
- Audacity QA pass on audio (RMS norm to -23 to -18 dB, peak ≤ -3 dB)
- Cover art (KDP requires 1.6:1 ratio min 1000×625; ACX requires square 2400×2400 min)
- Upload to KDP → wait for review → live
- Upload to ACX → wait for QA → live
- Stamp
amazon_asinon the volume row once the book is live
Pipeline status (11 of 12 technical steps shipped)
✓ public-winner endpoint ✓ writer-page section ✓ story-detail page ✓ ElevenLabs narration service ✓ inline audio player on detail page ✓ auto-render cron ✓ best-of curation admin tool ✓ writer opt-in for non-winners ✓ KDP-spec EPUB export ✓ ACX-spec audio bundle export ○ first volume actually published on Amazon (manual / business-side)
The full registry is at
apps/backend/src/services/monetization-pipelines.ts
under the cafe_stories_to_kindle pipeline.
Royalty model
Default terms for Vol. N — sent verbatim to every writer included in a published volume. We're optimizing for legibility + simple math over fancy contract gymnastics; the goal is "writers get a fair share without anyone needing a lawyer."
The split (per-volume, per-format):
- 50% to the platform — covers KDP/ACX fees, cover art, ACX Audacity QA labor, the per-story ElevenLabs narration that was already rendered as part of the cafe pipeline, and the editorial curation pass that picked the volume.
- 50% pooled to contributing writers — distributed pro-rata by share-of-pages. Each writer's payout = (their published page count in this volume ÷ total page count of the volume) × the 50% writer pool.
"Net royalties" means: gross from Amazon (Kindle royalties on print + ebook) and Audible/Findaway (audiobook royalties), AFTER Amazon's marketplace cut, AFTER any KDP per-page costs (paperback only), but BEFORE U.S. tax withholding on individual writers (each writer handles their own taxes via the W-9/W-8BEN they sign with the platform).
Cadence: quarterly. The platform tallies net royalties for each
volume per quarter, computes each contributing writer's share, and
disburses via Stripe Connect (same rails as live earnings on
/dashboard/creator/earnings). Writers see the per-quarter payout
itemized by volume on that page.
Floor + ceiling: no floor — if a quarter nets zero, no payout that quarter. No ceiling — if a volume goes viral, writers split the full 50% pool regardless of dollar amount.
Audio-vs-print attribution: "page count" is print/ebook pages specifically. For audiobook royalties, share is computed on runtime-minutes instead — same proportional logic, different denominator. A writer with 20% of the print pages might be 22% of the audio runtime depending on their pace + narration choices; they get 20% of print royalties + 22% of audio royalties.
Why this shape: every writer who submits to write.cafe is already getting the value of audio narration + a public profile + real listener engagement without paying for it. The 50/50 split reflects that the platform is doing the heavy lifting on distribution + production, but doesn't punish the writers whose words are the actual product.
Contract template
What we send each writer included in a volume. Plain language;
keep one signed PDF per writer per volume in
docs/product/cafe-best-of/contracts/<volume-slug>/<writer-handle>.pdf.
WRITE.CAFE — VOLUME ROYALTY AGREEMENT
=====================================
This agreement is between Silver Lamp LLC ("the Platform") and
{{writer_legal_name}} ("the Writer"), regarding inclusion of the
Writer's work in:
Title: {{volume_title}}
Volume: Vol. {{volume_number}}, {{edition_label}}
Published: {{publication_date}}
Story titles: {{comma_separated_titles}}
Total pages: {{writer_page_count}} of {{volume_total_pages}}
1. RIGHTS GRANTED. The Writer grants the Platform a non-exclusive
license to include their listed stories in the above volume in
print, ebook, and audiobook formats, for the life of the
volume's distribution. The Writer retains full copyright +
rights to publish the stories elsewhere.
2. ROYALTIES. The Writer's share of net royalties on this volume
is calculated as follows:
- Print/ebook royalties: ({{writer_page_count}} ÷
{{volume_total_pages}}) × 50% × net royalties received from
KDP for the reporting period.
- Audiobook royalties: ({{writer_audio_minutes}} ÷
{{volume_audio_minutes}}) × 50% × net royalties received from
ACX/Findaway for the reporting period.
3. PAYMENT. Payouts are disbursed quarterly via Stripe Connect on
or before the 15th day of the month following each calendar
quarter. Payments appear on the Writer's
/dashboard/creator/earnings ledger.
4. NO MINIMUM. There is no per-quarter minimum royalty. If net
royalties for a quarter are zero, no payment is issued that
quarter. Unpaid amounts do NOT accrue interest.
5. TAXES. Each party is responsible for their own taxes. The
Writer warrants they have a current W-9 (US) or W-8BEN (non-US)
on file with the Platform.
6. UNWIND. Either party may terminate this agreement with 90 days'
written notice. The Platform will continue to pay royalties for
sales of inventory printed/distributed prior to termination, but
will not include the Writer's stories in any future printing.
The Writer may freely re-publish their stories elsewhere
immediately upon termination notice.
Signed:
Writer: ____________________ Date: ________
Platform: Sandon Jurowski, Silver Lamp LLC
The Platform also keeps an internal "contract status" column on
cafe_best_of_volume_writers — agreement_signed_at + w9_on_file_at +
payout_method. These columns are TBD as of this writing; see
Payout tracking below for the proposal.
Payout tracking
Lifetime per-writer royalty totals live in two places:
-
Per-quarter ledger entries on
creator_payouts— each quarterly payout writes one row per (writer × volume × format) withsource = 'cafe_volume_royalty',volume_id,format = 'print'|'ebook'|'audio',period_start,period_end,gross_cents,share_cents,transferred_at. The/dashboard/creator/earningspage already groupscreator_payoutsby source, so cafe volume royalties surface in the same ledger as chapter tips + subscription pool + contests. -
Lifetime rollup on the volume admin page — a small "Cumulative royalties paid" panel on
/dashboard/admin/cafe/best-of/[volume-id]that sumscreator_payoutsfor that volume across all quarters, broken down by writer + format. Lets the admin see "Vol. 1 has paid out $X total across Y writers."
Neither is built yet (Vol. 1 hasn't shipped). The schema for both is straightforward once the first quarterly close happens — defer the migration until that's imminent so we don't speculate on column shapes ahead of need.
What's left for you to do
To ship Vol. 1, the remaining work is real-world ops:
- Decide royalty split — 50/50 platform/writers split, writers pooled pro-rata by share-of-pages. See Royalty model above + contract template.
- Set up KDP account (https://kdp.amazon.com) — author profile, tax forms (W-9 for US), bank info for royalty deposits.
- Set up ACX account (https://www.acx.com) OR pivot to Findaway Voices if ACX rejects AI-narrated audiobooks (their 2024 policy is mixed).
- Curate Vol. 1 at
/dashboard/admin/cafe/best-of— pick ~10 winners, name it ("write.cafe Best Short Stories Vol. 1 — Spring 2026"), set order, add an editor's introduction. - Mark Vol. 1 published — locks the story-set.
- Generate cover art (1.6:1 for KDP, 2400×2400 for ACX). Could use the OG cover renderer as a draft, but a real designer pass is recommended.
- Click Export .epub → upload to KDP → fill out metadata (title, description, keywords, BISAC codes) → wait 24-72h for review.
- Click Export ACX zip → run each chapter through Audacity for RMS/peak normalization → upload to ACX → wait for QA.
- Stamp
amazon_asinon the volume row via the adminPATCH /api/cafe/admin/best-of/volumes/:idendpoint or direct SQL. The "📕 Buy on Kindle" button surfaces automatically. - Pay first royalties to contributing writers per the contract. Track lifetime payouts.
After Vol. 1, the cycle repeats every 1-2 quarters depending on contest cadence + winning quality.