What you get

The screens, before you write any.

Every one of these is in the template on the first run, rendered against a seeded demo tenant. They are captured by a script, not curated by hand, so they cannot flatter the product.

Run it yourself No hosted demo — five commands and it's on localhost:3000.

01 — The app

Signed-in surface

Dashboard, the reference CRUD feature, tenant administration, billing and account — the parts you would otherwise build before writing anything of your own.

Dashboard — GStack, dark theme

Dashboard

Recent notes, counts, and the shell every signed-in page sits in.

Notes — the reference CRUD — GStack, dark theme

Notes — the reference CRUD

Search, create, edit, delete. No tenant filter in the query; RLS did it.

Tenant admin — GStack, dark theme

Tenant admin

Member table with role changes, invites, ban and impersonate.

Billing — GStack, dark theme

Billing

Plan state, checkout and the customer portal, behind one flag.

Account — GStack, dark theme

Account

Avatar upload to Supabase Storage, email change, self-serve deletion.

Feedback — GStack, dark theme

Feedback

Self-hosted widget writing to your own RLS-scoped table.

02 — Public and mobile

The rest of it

Marketing and pricing pages, the feedback widget, and the same screens on a phone. Both themes are tested for contrast, not just drawn.

Pricing — GStack, dark theme

Pricing

Data-driven from app/utils/plans.ts — the plan id is the billing seam.

Changelog — GStack, dark theme

Changelog

The user-facing feed, separate from the release-please one.

Dashboard on a phone — GStack
Dashboard · Pixel 7
Notes on a phone — GStack
Notes · Pixel 7

These are captured, not curated.

pnpm screenshots drives every route in both themes plus a mobile pass. Regenerating is one command.

What powers them