Most writing platforms treat publishing as an afterthought. Write your story, export a file, figure out distribution yourself. I wanted TaleForge to close that loop — write, publish, and sell in one place.
The Marketplace Model
The marketplace needed to support several publishing models:
- Free publications (exposure-focused)
- Paid publications (fixed price via Stripe)
- Freemium (first N chapters free, rest behind paywall)
- Tips (readers can tip authors they appreciate)
The freemium model turned out to be the most popular. It mirrors how web novel platforms like Royal Road and Tapas work: hook readers with free chapters, convert them on quality.
Stripe Integration
Payments run through Stripe Connect (Custom accounts). Each author is a connected account. When a reader buys a book:
- Payment goes to the platform's Stripe account
- Platform takes a cut (15%)
- Rest is transferred to the author's connected account
The webhook handling was surprisingly tricky. Stripe sends events to your webhook URL, but if your domain redirects (e.g., example.com → www.example.com), the webhook gets a 307 redirect and fails silently. Lesson learned: always use the canonical URL.
// Webhook route - must return 200 quickly
export async function POST(req: Request) {
const body = await req.text();
const sig = req.headers.get('stripe-signature')!;
const event = stripe.webhooks.constructEvent(
body, sig, process.env.STRIPE_WEBHOOK_SECRET!
);
switch (event.type) {
case 'checkout.session.completed':
await handlePurchase(event.data.object);
break;
case 'customer.subscription.created':
await handleSubscription(event.data.object);
break;
}
return new Response('OK', { status: 200 });
}
The Discovery Problem
A marketplace is useless if readers can't find stories. I built several discovery mechanisms:
Search: Full-text search across titles, descriptions, and author names. Autocomplete suggestions as you type. Advanced filters by genre, length, rating, language, and price.
Discovery pages: Curated sections — trending (based on recent reads/purchases), new releases, top-rated, completed works, and staff picks.
Personalized recommendations: Based on reading history and genre preferences. Nothing fancy — collaborative filtering would be overkill at this scale. Simple "readers who liked X also liked Y" logic.
Genre browsing: 15+ genre categories with chip-style filters.
Publication Workflow
The publish flow needed to be simple but flexible:
- Author marks a project as "ready to publish"
- Sets metadata: description, genre, tags, cover image, pricing
- Cover editor with cropping (2:3 ratio for book covers) and templates
- Preview how it looks in the marketplace
- Publish — immediately live
Updates sync automatically. Edit a chapter → the published version updates. No re-publishing needed.
What Worked
- Freemium model: Higher conversion than fixed pricing. Readers who sample 3+ chapters buy at ~20% rate.
- Cover editor: Authors without design skills can create decent covers. The 2:3 crop ratio and templates help a lot.
- Reading progress: Saving where readers left off increases return visits.
What Didn't
- Social features before content: I built reviews, reading lists, and follow systems before there was enough content to make them useful. Social features need critical mass.
- Too many export formats: Supporting EPUB, DOCX, PDF, Fountain, manga PDF, webtoon PDF, and ZIP was technically fun but most users only need 1-2 formats.
Open Source?
The codebase isn't open source (yet), but I've shared the technical architecture freely. If you're building something similar, the key insight is: treat the marketplace as a first-class feature, not a bolt-on. Your data model, your editor, your export pipeline — they should all be designed with publishing in mind from the start.
Check it out at tale-forge.com — the book editor is free.
TaleForge by Dreams-Makers Studio
Top comments (0)