Skip to content
Skip to content
Goodspeed

Build apps with PostgreSQL

Every Goodspeed app runs on PostgreSQL via Supabase: generated migration files, row-level security policies, and typed query results. Goodspeed generates PostgreSQL as a standard part of every app, so the output is a working codebase from day one, not a scaffold you have to finish yourself.

WHAT GETS GENERATED

Built into every PostgreSQL build

Every app Goodspeed generates with PostgreSQL includes these production-ready patterns, wired together from the first build.

ItemDescriptionStrength
supabase/migrations/ generated schemaSQL migration files create the app's tables with proper foreign keys, indexes, and constraints. The DevAgent generates one migration per app, covering every data entity in the spec.Schema
Row-level security policies per tableRLS policies enforce tenant isolation at the database level: users can only read and write their own rows without any application-layer guard needed.Security
supabase gen types TypeScript outputsupabase gen types --project-id generates a Database type from the live schema. All Supabase query calls reference this type so missing columns are type errors.Types
Indexes for query performanceGenerated migrations include indexes on foreign keys and common filter columns (user_id, created_at, status) so queries stay fast as row counts grow.Performance
Full-text search via pg_trgmWhen the app has a search feature, the generated migration enables pg_trgm and creates a GIN index on the searchable column for fast ILIKE queries.Search

Source: gas-template repository · Database

REAL GENERATED CODE

A snippet from a PostgreSQL app the studio shipped

This pattern comes directly from the gas-template codebase, the foundation every Goodspeed app is generated on. The studio generates PostgreSQL code like this for every app in the pipeline, not just a hello-world scaffold.

  1. RLS migration

    -- supabase/migrations/0001_initial.sql
    create table public.items (
      id uuid primary key default gen_random_uuid(),
      user_id uuid references auth.users not null,
      title text not null,
      created_at timestamptz default now()
    );
    alter table public.items enable row level security;
    create policy "Users see own items"
      on public.items for all
      using (auth.uid() = user_id);
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH POSTGRESQL

Your PostgreSQL app, generated