
A sign-out must not lose a session
Signing out used to wipe this device's data, including writes that hadn't reached the server yet. Now they're parked under your account and put back when you sign in again.
Implementation notes: the code, the stack, and how it's built.
7 posts.

Signing out used to wipe this device's data, including writes that hadn't reached the server yet. Now they're parked under your account and put back when you sign in again.

Moving everything one account owns into another, without a hand-kept list of tables that is out of date the day a table is added.

PaceStreak had German and Spanish catalogues. They're gone now. Removing a language isn't deleting two files: it's the picker, the stored preference, the tests and every place that assumed more than one.

The API's test suite empties the database it points at, including the dev admin account. How we keep it pointed at the right one.

How PaceStreak's background worker notices streaks that ended in silence, times reminders to each person's evening, sends a weekly recap, and stays safe to run twice.

How the PaceStreak app saves every session to the device first, queues writes in an IndexedDB outbox, and syncs across devices with an idempotent batch endpoint and a sequence cursor.

A peer-dependency conflict that passed locally on npm 11 and failed in CI on npm 10, and why every check now starts with npm ci.
PaceStreak is a habit and streak tracker for training and everything else worth doing regularly.