llms.txt
Compare with other sites' llms.txt files →# Fast Forward Dev
> A SaaS boilerplate built on TanStack Start, Express 5, Clerk, Stripe, and Postgres, sold as the same repo that sells it.
## Setup
- [Setup](/docs/setup): Configure the services the boilerplate uses, then get it running locally and deployed.
- [Install and run](/docs/setup/install): Clone the repo, install with pnpm, and hand the in-repo setup to an agent through SETUP.md.
- [Clerk](/docs/setup/clerk): Create a Clerk application, turn on email codes and the Google and GitHub providers, turn passwords off, copy the two keys the apps read, and point the user webhook at the api.
- [Stripe](/docs/setup/stripe): Create the products and prices the catalog expects, register the webhook endpoint, and copy its signing secret.
- [Neon](/docs/setup/neon): Create a Neon project, copy the pooled connection string, and run the first migration.
- [Resend](/docs/setup/resend): Verify a sending domain in Resend and copy the API key the api uses to send mail.
- [PostHog](/docs/setup/posthog): Create an optional PostHog project and configure browser product analytics through the built-in proxy.
- [Deploy](/docs/setup/deploy): Put the web app on Vercel or Railway and the api on Railway, with the environment variables and webhook URLs each one needs.
## How it works
- [How it works](/docs/how-it-works): The parts of the boilerplate to understand before changing them: architecture, identity, billing, entitlement, webhooks, and fulfillment.
- [Architecture](/docs/how-it-works/architecture): How the packages separate the web interface from billing, database access and external integrations.
- [Identity](/docs/how-it-works/identity): Clerk answers who the caller is, and the api resolves that answer to a database row on first use.
- [The billing model](/docs/how-it-works/billing): How a one-time purchase and any number of concurrent subscriptions coexist as independent Stripe objects.
- [Entitlements](/docs/how-it-works/entitlements): Entitlement is derived from the price the customer actually paid, read through a SQL view, and returned only by the api.
- [Webhooks](/docs/how-it-works/webhooks): Stripe webhooks are triggers that make the api re-fetch the object, never payloads it writes to the database.
- [Fulfillment](/docs/how-it-works/fulfillment): What happens after a payment succeeds, with the GitHub collaborator invite as the reference implementation.
## Reference
- [Reference](/docs/reference): Exact names and values: environment variables, api routes, database tables, the pricing catalog, and the component gallery.
- [Environment variables](/docs/reference/environment): Every key the two apps read, which app reads it, and where to get its value.
- [API routes](/docs/reference/api-routes): Every route the api mounts, with its method, its request schema, and what it returns.
- [Database schema](/docs/reference/database): Every table and view in the Drizzle schema, with its columns and the relations between them.
- [Pricing catalog](/docs/reference/catalog): The slugs, prices, and modes in the shared catalog, and how a slug resolves to a Stripe price ID.
- [Components](/docs/reference/components): A gallery of the components the boilerplate ships, each rendered live with its source.
- [Kit](/docs/reference/components/kit): The twelve components under src/components/ui/, what each one decides for you, and the props it takes.
- [Buttons](/docs/reference/components/buttons): The button components, rendered live with the props each one takes.
- [Marketing sections](/docs/reference/components/marketing): The landing page sections, rendered live with the content each one expects.
- [Admin](/docs/reference/components/admin): The admin dashboard components, rendered live with the data each one displays.
- [Layout](/docs/reference/components/layout): The site header, the footer, and the card shell every dashboard panel renders in.
## Extending
- [Extending](/docs/extending): Recipes for adding your own routes, tables, plans, emails, and languages, and for replacing what is specific to FFD.
- [Add an api route](/docs/extending/add-a-route): Add a route to the api with its Zod schema, its middleware, and its response type.
- [Add a database table](/docs/extending/add-a-table): Add a table to the Drizzle schema, generate its migration, and query it from a route.
- [Add a plan](/docs/extending/add-a-plan): Add a price in Stripe, then a catalog entry that grants an entitlement, then card copy so it appears in pricing.
- [Add an email](/docs/extending/add-an-email): Add a React Email template and send it from the api through Resend.
- [Swap fulfillment](/docs/extending/swap-fulfillment): Replace the GitHub collaborator invite with whatever your product hands a customer after payment.
- [Theming](/docs/extending/theming): Change the daisyUI tokens, the fonts, and the dark theme without touching component markup.
- [Maintain translations](/docs/extending/localization): Add interface copy and published Markdown without leaving the Danish site behind.
- [Use and extend the Kit](/docs/extending/the-kit): Use a Kit component, override one with className, and add a new one with its gallery demo and its accessibility obligations.
- [Rebrand the storefront](/docs/extending/rebrand): Change the five identity fields, rewrite the storefront prose that names FFD, and keep the Kit.