Project
Roadmap
What has shipped, the milestones that are the build order, the game layers behind them, and the proposals for packs and identity. A direction, not a schedule.
On this page
The roadmap is the issues and milestones in the repository. This page is the readable version of them. It is a direction, not a sprint: horizons flex with energy and interest, and anything below can be reordered by a good argument on an issue.
Shipped
| Version | Date | What |
|---|---|---|
| 0.1.0 | 2026-09-13 | The engine, the Handler, the wheel, training with photo verification, stamped export with five layouts, recap cards, voice memos, undo, the export bundle |
| 0.2.0 | 2026-09-14 | One /settings page with the play pages kept clean, the dashboard actions row, the retroactive log (when on every write), one-tap photo check-in, the share sheet |
| 0.3.0 | 2026-09-14 | This guide, served by the app; issue templates for testers |
| 0.5.0 | 2026-09-19 | The health module: Apple Health and SparkyFitness steer the game |
| 0.6.0 | 2026-09-19 | The kit module โ gear, toys and consumables โ and the badge engine |
| 0.7.0 | 2026-09-20 | Share cards: three kinds, seven themes, badges on the card |
| 0.8.0 | 2026-09-20 | /progress with four tabs, inline-SVG charts and the Insight block |
The milestones
M1 ยท Player surface โ
A play screen that is a game, settings that live elsewhere, retroactive logging so a game can start mid-stream, photo check-ins one tap away. Shipped in 0.2.0. One issue remains: the decisions only the maintainer can make (display name, licence, secrets to the password manager).
M2 ยท Share and install
- Stats-only share cards โ a card for the current state with no photo in it.
- Versioned releases and image publishing โ tags, a changelog you can trust, an image you can pull instead of build. Public registry when the maintainer says.
- An installer wizard โ Windows-98-style setup, pup aesthetic, for download and for disc.
- A DVD / ISO โ
make iso: an autorun disc with the image, the installer and this guide offline. Yes, really. - CI โ tests on every push, image build on every tag.
- A README for strangers, CONTRIBUTING, a licence.
M3 ยท Data and immersion
- โ
Health import โ the
healthmodule, shipped in 0.5.0: sleep, steps, mood and workouts steer the game through rules you tune. Local data only. - โ
Gear and toy tracker โ the
kitmodule, shipped in 0.6.0: what you own, what it is made of, what it cost, when it was used and what happened. Brought a badge engine with it (see below). - โ
Charts and insight โ shipped in 0.8.0:
/progressgrew four tabs, a chart primitive that draws gaps as breaks and refuses to invent a scale, and an Insight block whose observations are omitted unless they clear a sample floor and an effect floor. No charting library โ every coordinate is computed on your own box.
M4 ยท Bots
- A Matrix bot โ reminders, reflections, media and commands without opening the web UI. Talks directly to your homeserver; never through a third party.
- The Handler as a local AI persona โ a model on your own hardware, in the same module,
writing the prompts and reading the reflections; in-app chat and on Matrix. Acts only
through the API, as
actor=ai, rate-limited, every action an event. Your words never leave the LAN.
M5 ยท Packs (proposal)
Federated Latch: a Handler instance training several pups, pack-mates who can see each other's clocks and streaks, pack training and pack wheels โ with every capability a grant the pup chooses and can revoke. Not committed yet; the design is written up in Packs โ federated Latch.
M7 ยท Identity (proposal)
A pup that is a keypair rather than a server: badges that travel as signed papers, the collar as a first-class record with a start and an end, stray and collared as real states, and handles bound to the key instead of the key derived from an account. Not committed yet; the design is written up in Identity โ the pup, not the box.
Identity was numbered around a gap: the milestone depends on a badge engine to issue papers
about, and there was none. That engine now exists โ it arrived in 0.6.0 with the kit
module, in core/badges.py rather than inside kit, precisely so it could be built on.
A badge is already a durable record with a subject, a period and frozen evidence; what M7
adds is signing it and letting it travel. The gap in the numbering stays where it is.
The game layers behind the milestones
The milestones are the build order. These are the layers of the game they add up to:
- P2 ยท Game and training layer โ dice as a module, scheduled random events, โ achievements (the badge engine, 0.6.0), a hardcore mode (no self-unlock before time; an emergency key with a cost), streak rules, โ kit inventory (0.6.0), training goals with targets, headspace trend charts.
- P3 ยท Gallery โ albums, tags, page themes you curate, local AI tagging of photos (a local vision model, never a cloud one), a timeline scrubber, recaps with media.
- P4 ยท The Handler goes live โ the AI persona described under M4.
- P5 ยท Devices and quantified self โ phone and watch notifications, Shortcuts for the share sheet, correlation with a personal health database and habit tracker.
- P6 ยท The share layer โ posting stamped images, milestones and recaps to your own external accounts (a fediverse server you run, Bluesky, a mesh network page), authored by the Handler behind explicit per-rule opt-in. Optional, supplemental, never hosted here. Reflections and check-ins are never shareable; this layer only ever carries what export already carries.
What gates everything
Three rules no feature gets to bend:
- Class-P. Your data never leaves your box. No cloud AI on any of it, ever.
- The core makes zero outbound calls; a module says when it does not. The core contacts nothing. A module that reaches the network โ posting a card, fetching a playset โ declares it, and the app tells you before you enable it: optional, informed, per module. A declaration is a statement, not a cage โ the app can say a module reaches the network, never that one cannot. Anything that leaves is still re-encoded with metadata stripped, and Class-P data (rule 1) never rides along.
- The log stays honest. Append-only, derived clock, undo voids and never deletes, late is marked late. A feature that needs to edit history does not get built.
Have an idea?
Feedback and issues โ suggestions are issues with the type/feature label.
The best ones say what you were trying to do, not just what you want added.
This page also ships inside the app, at /guide โ so your own instance always serves the guide for the version you are running, with the internet unplugged. Get Latch ยท Something wrong here? Tell me.