How the pieces connect
FlutterFlow generates a Flutter app that talks to Supabase over the supabase_flutter package. The visual builder wires your Project URL and anon key into a Supabase.initialize() call at startup, so every query and auth action runs client-side from the device. There is no FlutterFlow backend in the middle — the app hits Supabase's PostgREST API (auto-generated from your Postgres schema), GoTrue for auth, and Realtime over WebSockets directly.
That means Postgres is your single source of truth. FlutterFlow's query collections, list views, and form actions map onto tables and columns you define in the Supabase dashboard. Auth state lives in the supabase_flutter session, which the SDK persists locally and refreshes automatically. When you outgrow the visual query builder — joins, aggregates, RPC functions — you call a Postgres function or an Edge Function rather than restructuring the app.