01 / CURRENT STATE

Your database
says 26.

How did it get here?

PurchaseTemporaryCorrection

CURRENT SEAT LIMIT26DAY 25
SCROLL TO REVEAL THE HISTORY
01 / 06

YOUR TURN

Move time.
Watch access change.

The same customer. Four coverage windows. Choose a day to see which facts count.

Day 25

3 active facts

26seats available
Purchase +20 seatsDays 1–45 Counts today
Temporary +10 seatsDays 15–30 Counts today
Correction −4 seatsDays 20–45 Counts today
Next purchase +24 seatsDays 46–60 Not included
25
Include these facts in Aster Studio's ledger

20 + 10 − 4 = 26 seats

Purchase +20, temporary +10, correction −4 count on day 25.

Windows include both end days. Presets restore the example ledger. These are illustrative counts and dates.

Two more parts of the revamp

History and current state

This is a story about rebuilding subscription tracking in a SaaS product. A seat is one staff member the customer can manage.

Before. The old table kept one record per subscription and updated it in place, so a seat count had no record of the changes behind it.

After. Aster Studio has 26 seats on day 25. Its ledger explains why: a purchase of 20 seats for days 1 to 45, a temporary grant of 10 for days 15 to 30, and an applied correction of minus 4 for days 20 to 45.

On day 31, the temporary grant no longer contributes. The total is 16. All three facts remain. The materialized projection stores the current answer for the app to read. Writers refresh it in their transaction; date transitions use a reactive daily refresh.

Keep the facts. Store the answer. This customer and the counts are fictional.

Real architectural decisions. Fictional customer and counts.