Getting Started

Installation

From clone to a running app with a seeded demo tenant.

Prerequisites

  • Node 26 and pnpm 11 (a mise.toml pins both)
  • Docker — the Supabase CLI runs Postgres and Auth locally
  • The Supabase CLI is a project dependency, so use pnpm supabase <cmd>; there is nothing to install globally.
This project uses pnpm. npm install or yarn will produce a lockfile the CI doesn't expect.

Get the code

GStack is a GitHub template repository, so the cleanest route is to make your own repo from it rather than forking. Pick whichever fits:

# Creates your own repo from the template and clones it.
gh repo create my-app --template TerrorSquad/gstack --private --clone
cd my-app
Prefer clicking? Hit Use this template on the repository page, then clone the repo it creates for you.

Setup

pnpm install
cp .env.example .env
pnpm setup          # pick which integrations to enable; writes .env
pnpm supabase start # local Postgres + Auth
pnpm db:reset       # apply migrations + seed a demo tenant
pnpm db:types       # regenerate typed client from the live schema
pnpm dev            # http://localhost:3000

pnpm setup reads a single subsystem manifest and flips the flag for each integration you pick, stubbing any missing keys. Unpicked subsystems are set to false, never deleted, and existing values are never overwritten.

Run pnpm doctor afterwards to verify — it reads the same manifest, so adding a subsystem wires up both scripts at once.

Demo logins

After pnpm db:reset:

AccountEmailPassword
Adminadmin@example.comDemo123!Demo123
Membermember@example.comDemo123!Demo123

Seeding is idempotent — it wipes the @example.com domain first, so re-running is safe. SEED_FAST=1 pnpm seed builds the minimal set.

Make it yours

Do this early, so the placeholder name never reaches your own first commit:

node scripts/rename.mjs "My App" --package my-app --site https://myapp.com

That replaces the GStack display name across the app, the email templates and the Supabase config, and sets the package name. Left for you by hand:

  • brand palette — layers/ui/app/assets/css/main.css (--color-brand-*)
  • favicon — public/favicon.svg
  • LICENSE copyright holder
  • README.md product description