Skip to content

The Forma frontend starter

Build your product. Keep your code.

An Astro website, a React Router app, and a FastAPI + Postgres backend. Start with the everyday product work connected, then make it your own.

Source you can change. Guides you can follow. Hosting you can choose.

Forma / your next productSource included

Built with familiar tools.
All in one source repository.

A clear home for every part.

Independent surfaces. One considered starting point.

apps/site

Astro

Your public website

Static pages, content, metadata, and responsive images.

apps/product

React Router

Your product interface

Server rendering, loaders, actions, and native forms.

apps/api

FastAPI

Your backend logic

Protected operations, validated inputs, and clear API contracts.

SQL + migrations

Postgres

Your durable data

Explicit queries, transactions, and database constraints.

What's included

The foundation is here.
Make the product yours.

Working examples for the things products need. Configure the integrations you choose, and build your own rules on top.

Identity & accounts

Accounts that cover the whole journey.

Provider sign-in, registration, recovery, profile settings, sessions, and account deletion with fresh identity verification.

Shared workspaces

A place for people to work together.

Owner, admin, and member roles. Verified-email invitations, shared plans, and ownership transfer, with access checked on the server.

Stripe billing

Billing with a real source of truth.

A Stripe subscription example with monthly and yearly plans, hosted Checkout, a customer portal, and verified payment events.

Application email

Email with a delivery workflow.

Queued welcome and invitation messages, a separate SMTP worker, retries, and a local mailbox to test the complete journey.

Shared design system

One design language, across the stack.

Shared CSS tokens, accessible native controls, and a component catalog. Public pages ship without client JavaScript.

Verification workflow

Checks you can run and understand.

Strict TypeScript and Python checks, unit tests, browser tests, accessibility checks, and generated API contracts checked for drift.

For you and your coding agent

Good code needs
good context.

Give the next person—or the agent working with you—a map of the decisions already made.

  • AGENTS.mdWhere to start, where changes belong, and what to verify.
  • Guides beside the codeSetup, architecture, integrations, and production handoff.
  • Runnable quality gatesEvidence that your changes still work together.
Read the getting-started guide
Inside your source release
apps/Public site, product, and API
packages/Shared design and content
extensions/Integrations you can select
docs/Setup through deployment
tests/Behavior you can verify
AGENTS.mdYour agent's starting point

Start with a public page.

$ bun run setup --name "Acme"
$ bun run dev:site

Use the tool versions pinned in your release.

A portable foundation

Choose where
your product lives.

The same product routes run on Cloudflare or Node. The API and Postgres stay on a conventional host.

Cloudflare + containers

Static and edge delivery for the public site and product, with a containerized Python backend.

Render

A deployment blueprint for conventional application services and PostgreSQL.

Your own server

Docker, Caddy HTTPS, and a runbook for self-hosting, backups, and updates.

Choose how you build

Start with a release.
Keep room for what's next.

Buy the current source once, or subscribe independently for releases and support. Actual prices are shown in your buyer account before Stripe Checkout.

One-time purchase

A source release.
Yours to keep.

For a clear starting point you can build on at your own pace.

  • The current source release at purchase
  • Ongoing download access to that release
  • Included source, documentation, and examples
  • No subscription required
See purchase options

Monthly or yearly subscription

Keep building
with what's next.

For new source releases and support while your subscription is active.

  • The latest release when your paid period starts
  • New releases during your paid periods
  • Support during your paid periods
  • Available without a one-time purchase
See purchase options

Every release you acquire stays yours after cancellation. A subscription ending stops future release and support access; it does not remove releases you already acquired.

A full refund or payment dispute can remove downloads funded by that payment. Deleting your account removes its library access.

Current source license: MIT. Read what that means.

Before you start

A few useful
answers.

Explore the setup guide
Can I subscribe without buying a release first?

Yes. Monthly and yearly subscriptions are independent purchase options. A paid period includes the latest source release at its start, new releases during that paid period, and support during that period.

What happens when I cancel?

Every release you acquired stays in your library after cancellation. After your paid period ends, future releases and ongoing support require an active subscription. Full refunds, payment disputes, and account deletion can remove library access as described above.

Where can I see the price?

Your buyer account shows the currently configured one-time, monthly, and yearly purchase options. Review the actual price there before continuing to Stripe Checkout.

See purchase options
How is the source licensed?

The current starter uses the MIT License. Preserve its copyright and permission notice. Third-party dependencies retain their own licenses. Purchasing access does not replace those source permissions.

Read the license
What do I need to run it?

Use the Bun, Node.js, uv, and Python versions pinned in your release. The public site runs with local content. Database features use PostgreSQL; accounts, billing, and email need the providers you choose and configure.

How do I apply a new release to my project?

Read the release notes, compare the source with your current starting version, and apply relevant changes on a branch. Run the included checks before merging into your customized application.

From the build notes

Make space for the product work.

Clear service boundaries and useful repository context leave more room for the feature your customer actually needs.

Read the note

Your next chapter

Make something
worth building on.

Get the starter