shipanysaas
Documentation
Back
  • Getting started
    • Install and run
    • Project structure
    • Configuration
    • Commands
  • Coding agents
    • Agent skills
  • Authentication
    • Email sign-in
    • OAuth providers
    • Two-step sign-in and passkeys
  • Database
    • Migrations
    • Row-level security
    • Database tests
    • Reading and writing data
  • Features
    • Teams and invitations
    • Email
    • File uploads
    • Blog, docs and changelog
  • Billing
    • Stripe and Lemon Squeezy
    • Pricing plans
    • Webhooks
  • Live demo
  • Commands

    The scripts in the root and app package.json files, grouped by what you use them for.

    Run these from the repository root. --filter <name> runs a script in one workspace.

    Every day

    CommandWhat it does
    pnpm devStarts the web app (port 3000) and the developer tool (port 3010)
    pnpm typecheckTypeScript check of the workspaces affected by your changes
    pnpm lint / pnpm lint:fixLint with oxlint, or lint and fix
    pnpm format / pnpm format:fixCheck formatting with oxfmt, or format
    pnpm healthcheckLint fix, format, typecheck and workspace dependency fix in one go
    pnpm buildProduction build of every workspace

    The root AGENTS.md tells coding agents to run pnpm typecheck, pnpm lint:fix and pnpm format:fix after every change.

    Database

    CommandWhat it does
    pnpm supabase:web:startStarts the local Supabase stack (Docker)
    pnpm supabase:web:stopStops it
    pnpm supabase:web:resetRebuilds the local database from migrations and seed.sql. Wipes local data.
    pnpm supabase:web:typegenRegenerates the TypeScript types in packages/supabase/src/database.types.ts and apps/web/lib/database.types.ts
    pnpm supabase:web:testRuns the pgTAP database tests
    pnpm --filter web supabase:db:diff -f <name>Writes a migration from the difference between schemas/ and the local database
    pnpm --filter web supabase:db:lintLints the database with the Supabase CLI
    pnpm --filter web supabase:demo:testRuns the live demo tests inside a transaction that is rolled back
    pnpm --filter web supabase:deployLinks the project in SUPABASE_PROJECT_REF and pushes the migrations

    Tests

    CommandWhat it does
    pnpm --filter web-e2e testPlaywright end-to-end tests against http://localhost:3000
    pnpm --filter web-e2e test:uiThe same in Playwright's UI, with billing tests on
    pnpm --filter web-e2e responsiveRenders a page at widths from 320 to 1920 pixels and fails on horizontal overflow

    The end-to-end tests skip billing specs unless ENABLE_BILLING_TESTS=true, and skip the live demo spec unless E2E_DEMO_MODE=true (see apps/e2e/playwright.config.ts).

    Billing

    CommandWhat it does
    pnpm stripe:listenForwards Stripe test events to your local webhook route (runs the Stripe CLI in Docker)

    Coding agents

    CommandWhat it does
    pnpm skills:checkFails if the three skill folders differ, a skill is malformed or unlicensed, or the skill count drifts
    pnpm skills:sync <name>Copies a skill from its upstream repository into all three skill folders
    pnpm ui-skills startStarts the UI Skills router (through npx). AGENTS.md requires it before UI work

    Phone app

    CommandWhat it does
    pnpm start:nativeStarts the Expo dev server
    pnpm ios:native / pnpm android:nativeBuilds and runs the app on iOS or Android
    pnpm doctor:nativeRuns the Expo doctor checks
    pnpm i18n:nativeMerges the web app's messages with the phone app's own and writes apps/native/lib/i18n/messages.generated.ts

    CI (.github/workflows/workflow.yml) runs typecheck, lint and pnpm skills:check on pushes and pull requests to main. The end-to-end and database test job runs only when the repository variable ENABLE_E2E_JOB is true.