Skip to main content

Guided tour

Walk through it in order — about 10 minutes, one module per step. No third-party keys required at any point.

This is a local demo environment

Payments go through the local demo checkout: nothing is actually charged, but it emits a webhook with a real HMAC signature that runs through exactly the same verification → normalisation → fulfilment core as Stripe. The only difference is who initiates the payment.

Demo accounts

The passwords are public — these accounts are for demo environments only

admin@example.com/admin1234Admin, can access the dashboard
demo@example.com/demo1234Regular user

Don't have these accounts? Run pnpm demo:seed once — it is idempotent, so re-running creates no duplicates.

  1. 1
    Look at pricing and plans

    Prices come from config/plans.ts — the pricing page and server-side validation read the same config, so you can never show one price and charge another.

  2. 2
    Sign up and verify your email

    No mail channel configured: the verification email is printed to the terminal running the server, and the link is clickable.

  3. 3
    Open a subscribers-only article

    Without a subscription you only see the title and the subscribe prompt — the body (and its meta description) is never sent.

  4. 4
    Subscribe to a paid plan

    Opens the local demo checkout: clicking “simulate payment” emits a webhook with a real HMAC signature, through the exact same fulfilment path as Stripe.

  5. 5
    Watch the credits move

    Subscription credits go into the “subscription bucket” (resets each period); the signup bonus goes into the “permanent bucket”. The ledger is append-only — every entry traces back to its source.

  6. 6
    Go back and leave a comment

    The body is visible now. A first comment lands in the moderation queue — that is one of four anti-spam layers, not an error.

  7. 7
    Moderate it from the dashboard

    Signed in as an admin you can approve / mark as spam / delete; once approved the comment is immediately visible to everyone on the article.

  8. 8
    Try the admin actions

    Change roles, ban users, grant credits by hand. All three write to an append-only audit log — including who changed whom, and when.

Can't see the dashboard?

With no admin account yet, promote yourself with one command

pnpm user:promote your@email.com

This is the only way to create the first admin (the “make admin” button itself requires an admin). Command-line actions are audit-logged too.

Want to check it hasn't been broken?

pnpm verifyTypes + lint + tests + build
pnpm smoke --fullRuns the whole chain over real HTTP (signup → subscribe → paywall → comment → admin)

The detailed walkthrough lives in docs/DEMO.md in the repo.