Zum Inhalt
Fundament

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_docs pricing status

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.

  1. 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.

    • 1.8s for 212 GB
    • Scales to zero
    zsh1/4
    ~/api $ tide branch create pr-482 --from main
    resolving main@a91f3e2 ............ 212.4 GB
    copy-on-write snapshot ............. done 1.8s
    compute: 2 vCPU, scales to zero after 5 min idle
     
    ● branch pr-482 is ready
    url postgres://pr-482.eu-central.tidepool.dev/api
    cost €0.004 / hour while awake
     
    ~/api $
  2. 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.

    • 17 lock rules
    • Runs in CI
    0042_invoice_currency.sql2/4
    migrations/0042_invoice_currency.sql+4 −1
    41 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 );
    48
    49+create index concurrently invoices_customer_idx
    50+ on invoices (customer_id, issued_at desc);
    ▲ tide check: index built concurrently, no table lock. Safe for 1.2M rows.
  3. 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.

    • GDPR masking
    • Per-column policies
    psql3/4
    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;
    idemailplantotal
    c_81f2m•••@k•••.deTeam€1,240.00
    c_1a07j•••@o•••.ioScale€8,910.50
    c_77c3a•••@f•••.seTeam€412.00
    c_3e90l•••@h•••.nlStarter€39.00
    c_c214s•••@v•••.chScale€12,077.25
    (5 rows, 14 ms) · PII masked by policy mask_emails
  4. Merge

    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.

    • 0 ms write pause
    • 24h undo
    deploy · main4/4
    Merge pr-482 into mainLive
    ✓Schema check0 blocking locks0.4s
    ✓Backfill amount_minor1,204,388 rows38.2s
    ✓Swap reads0 ms write pause0.1s
    Drop amountscheduled after 24hqueued
    p95 latency, mainflat through the swap, 11.8 ms
$ brew install tidepool/tap/tide