feature-sections · standard · freedesignmd
feature-sections/sticky-feature-tour
Scroll-driven feature tour with a pinned window that crossfades terminal, diff and query UIs, steps on a progress rail.
Sticky Feature Tour · ueberschrift (72 Zeichen)
Sticky Feature Tour · vorspann (240 Zeichen)
tidepool / how it works
Every pull request
gets its own database.
Postgres that branches like git. Four steps from a laptop to production, none of them a staging server.
Branch
Open a pull request and Tidepool forks your database with it. Copy-on-write, so a 200 GB branch costs you the rows you change, not the rows you have.
~/api $ tide branch create pr-482 --from mainresolving main@a91f3e2 ............ 212.4 GBcopy-on-write snapshot ............. done 1.8scompute: 2 vCPU, scales to zero after 5 min idle● branch pr-482 is readyurl postgres://pr-482.eu-central.tidepool.dev/apicost €0.004 / hour while awake~/api $Migrate
Schema changes show up next to your code review. tide check flags table locks, missing concurrent indexes and long backfills before anyone hits merge.
migrations/0042_invoice_currency.sql+4 −141 create table invoices (42 id uuid primary key,43 customer_id uuid not null references customers,44- amount integer not null,44+ amount_minor bigint not null,45+ currency char(3) not null default 'EUR',46 issued_at timestamptz not null default now()47 );4849+create index concurrently invoices_customer_idx50+ on invoices (customer_id, issued_at desc);▲ tide check: index built concurrently, no table lock. Safe for 1.2M rows.Preview
Branches carry production-shaped data. Masking policies rewrite emails, names and IBANs on the way out, so your preview app and your contractor see the same shape and none of the secrets.
pr-482=> select id, email, plan, sum(amount_minor)/100.0-> from customers join invoices using (customer_id)-> group by 1,2,3 order by 4 desc limit 5;idemailplantotalc_81f2m•••@k•••.deTeam€1,240.00c_1a07j•••@o•••.ioScale€8,910.50c_77c3a•••@f•••.seTeam€412.00c_3e90l•••@h•••.nlStarter€39.00c_c214s•••@v•••.chScale€12,077.25(5 rows, 14 ms) · PII masked by policy mask_emailsMerge
Merging replays the migration on main in expand and contract phases. Reads swap over atomically; the old column waits 24 hours in case you change your mind.
Merge pr-482 into mainLive✓Schema check0 blocking locks0.4s✓Backfill amount_minor1,204,388 rows38.2s✓Swap reads0 ms write pause0.1sDrop amountscheduled after 24hqueuedp95 latency, mainflat through the swap, 11.8 ms