Four layers, four jobs
Each layer owns exactly one job. Confusing the jobs is how teams end up with a warehouse full of numbers nobody will defend in a meeting.
| Layer | Owns | Does not own |
|---|---|---|
| Supabase Postgres | The record of what happened in the product | Analysis. It is a transactional database and you should not run funnels on it |
| Supabase Pipelines | Moving those rows, faithfully, with no silent loss | Deciding whether the rows are correct |
| BigQuery | Modeling. Turning app tables into questions with answers | Knowing what your product meant by an active status |
| Your go-to-market tools | Acting on the answer | Any of the above |
Every guarantee is conditional
Read the layers left to right and something uncomfortable falls out. Pipelines guarantees delivery, not truth. BigQuery models whatever arrives. Your CRM routes on whatever the model says.
A wrong number at the far left arrives at the far right on time, intact, and green at every hop. Nothing in the chain is designed to stop it, because stopping it is not any of these layers' job.
Which puts the real start of the stack one step before Postgres: the pull request that changes the schema.
Where it really starts
The pull request that changes the schema
Outside every guarantee below. Nothing downstream is built to question it.
Layer 1
Supabase Postgres
The record of what happened
Layer 2
Supabase Pipelines
Moves it faithfully, no silent loss
Layer 3
BigQuery
Models it into answerable questions
Layer 4
Your GTM tools
Acts on the answer
Episode 8 is where that stops being a diagram and becomes a specific migration that breaks a specific query.

