Documentation
Content's Not Dead is an open-source, cloneable content platform. Sell your own writing and art with Stripe subscriptions and per-item agent payments (MPP).
1. Clone & install
git clone <your-fork> my-content-sitecd my-content-sitenpm installcp .env.example .env.local2. Configure environment
Fill in .env.local:
- Stripe —
STRIPE_SECRET_KEY(with Products, Prices, Checkout, Customers, Billing Portal, and PaymentIntents write access), then runnode --env-file=.env.local scripts/setup-stripe.mjsto create the $5/mo and $50/yr prices and copy the printedSTRIPE_PRICE_MONTHLY/STRIPE_PRICE_ANNUALinto your env. - Clerk —
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYandCLERK_SECRET_KEY(free tier is fine). - MPP —
MPP_SECRET_KEY(stable, ≥32 bytes) andCONTENT_ASSET_SECRET. Generate withnode -e "console.log(require('crypto').randomBytes(32).toString('base64'))". - Webhook — run
stripe listen --forward-to localhost:3000/api/stripe/webhookand setSTRIPE_WEBHOOK_SECRET.
Using Stripe Projects? Most of this is provisioned for you — run stripe projects env --pull.
3. Add your content
Drop Markdown files in content/ with frontmatter:
---title: My Postsummary: A one-line teaser shown on the home grid.authors: [Your Name]date: '2026-07-18'tags: [essays]type: article # or: image# image posts only:# image: my-art.png # full asset in content/assets/# preview: /previews/my-art.png # low-detail preview in public/--- Your Markdown body here.Full-resolution images live in content/assets/ (outside public/) and are served only after payment or a subscription via a short-lived signed URL. Put a low-detail preview in public/previews/.
4. Theming
Three themes ship in app/globals.css as CSS variables: minimalist, bookworm, and maximalist. Light/dark follows the browser automatically. Set the default with NEXT_PUBLIC_DEFAULT_THEME. To add a theme, add a [data-theme="yours"] block of variables. The in-app theme switcher appears only in demo mode.
5. Agent parity
Every piece of content is equally available to agents:
- /.well-known/mpp.json — payment config
- /llms.txt — LLM overview/index
- /agents — markdown directory
/api/content/{id}— paid endpoint (HTTP 402 → pay → full markdown)
6. Deploy
Deploy to Vercel. Set all env vars in the project settings and point NEXT_PUBLIC_APP_URL at your domain. Configure a Stripe webhook endpoint at /api/stripe/webhook. Vercel Web Analytics and Speed Insights are already wired up.