A baby tracker in the shape of Huckleberry: sleep, feeds, nappies and growth, logged one-handed in the dark, with a predicted window for the next sleep. What makes it different is that it tells you what the prediction is inferred from, and keeps quiet when it does not know.
Every design decision in this app answers to one situation. It is dark, you are holding a baby, you have one hand, and you are not going to read anything. Logging a feed has to take one tap and survive being done late and slightly wrong, because at that hour it always is.
The running-timer semantics are enforced by the database rather than the interface:
at most one open observation of a given type per baby. Both parents can hit
start feed at the same moment and there is still one feed.
Everything derived is recomputed from the log on every write, so correcting a mis-logged entry reshapes history instead of leaving it wrong. That matters here more than it does in most software, because the raw material is a person guessing at times while half asleep.
Most trackers show one number for the next sleep and quietly imply it is settled. SmallHours separates two different kinds of uncertainty and refuses to blend them.
Absence is recorded. "The baby did not nap" and "nobody logged the nap" are different facts, and an app that renders both as a gap teaches you to distrust it. Daily totals carry honest coverage alongside the number.
Reads may be stale. Writes are never faked. With no connection the screen still shows you the log and says how long ago it last managed to sync. There is no background queue and no optimistic "saved", because a tracker that claims to have logged a feed it did not is worse than one that admits it could not.
The night belongs to the evening it began in. Whether a sleep counts as the night is decided by how much of the night it covers, not by when it started. A real log contained a thirteen hour thirty-nine minute sleep beginning at 18:41, which any start-time rule files as a nap.
/v1 with scoped tokens you mint and revoke yourself./v1/openapi.json is generated from the same Zod schemas that validate the requests, so the documentation cannot drift from the behaviour./v1/export goes back in through /v1/import unchanged. Leaving is a supported operation rather than a support ticket.Phases one through four are done: the scaffold and data layer, the derivation engine, the app itself, and the API surface with tokens, OpenAPI, export and import. 99 tests passing. Webhooks and reminders are not built yet, and there is no deployment.
SmallHours is one of the Locke Werks house apps and the source is private. It is built to be self-hosted, with no public signup and no analytics. For access or a conversation about running it, write to archon@lockewerks.com.