Case file ·Xallindrome (lab) · Days on Purpose · Sep 2026 – present

Four apps, one source of truth

A suite of small apps that turn phone time into time spent on goals you chose, built as one platform: a shared goal ledger, strict data ownership between apps, and sync that works with no signal. It also taught me what happens when scope outruns testing.

My role: Founder, product owner, architect and only engineer

daysonpurpose.com ↗

Outcomes

The problem

Most days just happen. You pick up your phone to check one thing and look up forty minutes later. The usual fix is another app with its own streak and its own scoreboard, and after a few of those you’re managing apps instead of your life.

I wanted the opposite: a few small tools that each do one job well, all writing to one honest record of how your time actually went. Train on Purpose logs workouts. Scroll on Purpose blocks the feed until you’ve earned it. Doorway teaches modern Greek by putting you inside the Odyssey. Telos holds your goals and keeps the books.

Constraints

The decisions

One source of truth. Telos is the system of record for goals and rewards. The other apps read and request; they never write balances. Every system has a written table of what it owns and what it never holds, with one writer per record.

Contracts, not hope. The apps share golden test fixtures, copied verbatim into each repo and pinned by a checksum. If one app’s idea of the data drifts, its build fails before a user ever sees it.

Sync that can’t double count. Each change commits locally alongside an outbox entry. The server dedupes by operation ID forever, keeps tombstones so deleted things stay deleted, and credits each goal once per session. Imported history never counts toward goals, so nobody can backfill their way to a reward.

Ship dark, roll back cleanly. Every new capability ships off and turns on per account. Rolling back means switching it off, and no rollback loses data.

Infrastructure that releases on its own. The AWS stacks live in their own CDK repos and deploy separately from app releases. A shared release tool signs all three Android apps without touching their code and scans every build for secrets before it ships.

AI with a ceiling. Doorway uses AI to play the Odyssey’s characters, but scenes follow authored branches that always rejoin the story, every account has daily caps, and an on-device mode works with no service at all.

What happened

Five weeks after the first commit, the public site was live at daysonpurpose.com, and a handful of friends, invited by name, were using the web app and three Android apps in a private preview. An iPhone build is in testing on the same shared engine.

What I’d do differently

I shipped too much at once, and testing is where it showed.

Four apps, three platforms, offline sync and one shared ledger multiply into more combinations than any person can tap through. I tested on my own phone every day and still couldn’t keep up: a fix in one app could quietly change what another one counted. What actually kept the suite honest was more than 600 test files my AI agents wrote alongside the code, plus the shared contract fixtures that fail a build the moment two apps disagree.

That suite was necessary, and it was also a symptom. When the surface area outruns real-life testing, the cheaper fix is less surface area per release. I’d build this the way I’d run a team: one app and its tests, real use, then the next app. Iterative, even when the only stakeholder is me.

How it flows

  1. A set is logged offline; the row and its outbox entry commit together
  2. Back online, the app pushes its queued changes; duplicates are dropped by ID
  3. The server records the contribution and credits the linked goal in Telos, once
  4. The goal bar ticks, and the weekly review counts it exactly once
  5. Later, a scroll block asks for a challenge, like reps or a Greek scene
  6. Telos returns a receipt, and Scroll grants earned time, once