How I built Juzi Book House — a full-stack online novel platform supporting authors and readers, with Stripe subscription membership, chapter comments, a gift system for supporting authors, and a dedicated CMS for authors to manage their novel chapters.
Project: Juzi Book House
I love reading online fiction. If you have ever fallen down a rabbit hole on Webnovel or Royal Road at midnight, you know exactly what I mean — you tell yourself one more chapter and suddenly it is 2 AM. Those platforms proved something important: readers will happily pay for good serialized stories, and writers can build real careers publishing one chapter at a time.
But I kept noticing a problem. Most of these platforms take a huge cut from authors, offer almost no control over how their work is presented, and treat writers more like content suppliers than creative partners. I thought: what if someone built a platform that actually put authors first? That question turned into Juzi Book House.
Before I get into how I built it, here is what Juzi Book House looks like from a user's perspective:
A novel platform has two very different performance requirements. For readers, pages need to load instantly and scroll smoothly through thousands of words. For authors, the CMS needs to feel responsive and save drafts without losing work. I needed a stack that handled both well.
I chose SvelteKit and I am really glad I did. Reading a chapter is an inherently quiet, focused activity — the last thing you want is a JavaScript-heavy page fighting for CPU time while someone is trying to lose themselves in a story. SvelteKit compiles to lean output and the server-side rendering means the first paint happens before any JS even runs. On a mid-range Android phone on a 4G connection, chapters load under a second.
The reactivity system also made the comment section and gift animations feel alive without a lot of extra code. When someone sends a gift, a little animation fires and the author's balance ticks up in real time — that kind of polish matters more than it sounds.
Supabase did a lot of heavy lifting here. I was able to replace what would have been three separate services — authentication, database, and real-time messaging — with a single integration.
I was not going to build my own payment processing. Full stop. Stripe Connect handles subscriptions, one-time gift purchases, and author payouts. The compliance stuff — tax forms, identity checks, international transfers — Stripe deals with all of that so I do not have to.
The gift flow in particular would have been painful to build from scratch. A reader buys credits, spends them on a gift, the platform takes a small cut, and the author gets the rest deposited to their bank account on a weekly schedule. Stripe makes that whole chain straightforward.
The CMS was the feature I spent the most time on, and honestly the one I am most proud of. Authors told me that on other platforms, managing their work felt like fighting the software. I wanted the opposite experience.
The dashboard lives at /dashboard/* and only authors can access it. Here is what it includes:
This was the trickiest technical piece to get right. Each novel has a free chapter threshold — maybe the first 20 chapters are free, everything after that requires a subscription. The question is: how do you enforce that without relying purely on the frontend?
The answer is Supabase Row-Level Security. The RLS policy on the chapters table checks whether the requesting user has an active subscription before returning the chapter body. A free reader gets the metadata — title, word count, chapter number — but the actual text comes back empty. Even if someone digs through the network requests, there is nothing to intercept because the server never sent it.
When a reader subscribes via Stripe, a webhook fires and updates their subscription status in Supabase within seconds. The access change is instant — no refresh required, the chapter just unlocks in place.
Here is the full flow of a gift from tap to payout:
The atomic transaction part matters more than it sounds. If the debit from the reader's wallet and the credit to the author's balance were two separate operations, a crash between them could either lose credits or create credits out of thin air. Doing both in one transaction means it is all-or-nothing.
Some of our authors write long chapters — 8,000 to 10,000 words is not unusual in the fantasy genre. Dumping all of that into the DOM at once caused noticeable jank on phones, especially mid-range Android devices.
The fix was virtual scrolling: only the paragraphs actually visible in the viewport get rendered. As you scroll down, new paragraphs are added to the bottom and old ones are removed from the top. Memory usage stays flat no matter how long the chapter is. It took about a week to implement properly but the smoothness improvement was immediately obvious.
Stripe sends webhooks when subscriptions change, but webhooks get dropped. Network blips, server restarts, deployment windows — any of these can cause a webhook to miss. If a subscription cancels and the webhook is lost, the reader keeps access they should not have.
I handle this two ways. First, every incoming webhook is logged with an idempotency key, so if Stripe retries a failed delivery I do not double-process it. Second, a nightly job fetches the current subscription state for all users directly from Stripe's API and reconciles anything that got out of sync. Belt and suspenders.
Tax compliance for creator payouts is a surprisingly deep rabbit hole. US-based authors need 1099 forms. Canadian authors have different rules. European authors have their own. I was not going to build a tax compliance engine.
Stripe Connect handles all of it. Authors onboard through Stripe's own identity verification flow and provide their tax information directly to Stripe. The platform never sees or stores any of that — we just trigger the payouts and Stripe deals with the rest.
Juzi Book House launched in early 2026 and the early numbers are genuinely encouraging:
I expected readers to drive most of the feedback. Instead, authors were the most vocal early users. When they told me the chapter editor felt good to use, engagement went up. When something broke in the dashboard, they noticed immediately. The lesson: without good authors, you have no content, and without good content, you have no readers. Make the author experience your top priority.
This one genuinely surprised me. Authors told me that seeing comments appear while they were still online after posting a chapter felt completely different from checking comments the next day. It created this live, communal moment around a new release. Several authors said it is the main reason they have stuck with the platform — that immediate feedback loop is addictive in the best way.
In the early version I put the subscription wall too early — chapters 10 and beyond were locked. Readers bounced before they were invested. I pushed the free threshold out to chapter 20, which gives readers enough time to genuinely care about the characters. Subscription conversions roughly doubled. The principle: let them fall in love with the story first, then ask them to pay.
A few things I would tell anyone starting a creator platform:
Building Juzi Book House was one of the most enjoyable projects I have worked on because the domain is genuinely interesting to me. Good stories deserve good platforms. I think we are building one.