Latch

Playing

Progress, charts and insight

The four tabs of the Progress page โ€” what XP, levels and streaks mean, what every chart is actually measuring, and the floors that stop the Insight block inventing findings.

On this page

The Progress page (/progress, and /stats still gets you there) is the quantified side of the game. Everything on it is computed from the event log, and everything an undo voided is excluded โ€” uniformly.

It has four tabs. Each one is a separate page load that computes only itself: none of this is free, and a page that built all four on every visit would get slower the longer you played it.

Tab What is on it
Overview The totals, the per-week rates, the 26-week heatmap, where every activity stands
Trends The charts โ€” locked hours, training, reflections, check-in scores, gear hours, health
Insight Sentences the app can say about your own numbers, with the numbers under them
Log The training board, every event kind, and the last twenty locks

XP

Action XP
Lock 20
Clean unlock (time served) 50
Early unlock (emergency key) 0
Reflection (typed or spoken) 15
Check-in survey 5
Mantra recited 3
Affirmation 2
Headspace session 1 per minute, max 20
Photo check-in 5
Note 2
Wheel spin 5
Training done the task's own XP (library default 10)

XP is the sum over non-voided events. Undo an event and its XP goes with it.

Levels and ranks

Level n needs 100 ร— (n โˆ’ 1)ยฒ XP โ€” cheap early, steep later: level 2 at 100, level 3 at 400, level 5 at 1,600, level 10 at 8,100. The bar in the top bar is progress to the next level.

Ranks are tied to levels, in order:

runt โ†’ pup in training โ†’ good boy โ†’ obedient pup โ†’ kennel pup โ†’ show pup โ†’ best boy

Level 7 and beyond stays best boy. There is nothing above it. That is the point.

Streaks

A day counts toward the streak if anything you did was logged on that local day โ€” a lock, a note, a reflection, a spin, a photo. System events (an expired freeze, an overdue task failing, the Handler's audit) do not count; the streak is about you showing up. The current streak runs back from today, or from yesterday if today is empty so far, until it hits a gap. Best is the longest run ever.

The 26-week heatmap is the same rule, one square per day, shaded by how much happened.

Totals

Sessions, lifetime locked time, longest lock, events, time added, time removed, spins, training done and failed, photos, voice memos, and total voice seconds (which under-reports by any memo whose length could not be measured โ€” an unknown is never counted as zero).

Rates per week

Training per week, failures per week, spins per week, locks per week, days reflected per week, locked hours per week, and locked (28 d) as a percentage. These are observed rates over the age of the log, clipped to the window they name โ€” a young log reports honest small numbers rather than nothing. Days reflected counts days, not entries: four reflections in one evening is one day.

The same rates are available as stamp tokens, so a photo can carry Training / week on its overlay. The Progress page renders them too, so a rate that ships broken is visible here, not only inside a downloaded JPEG.

Every chart is an inline SVG this box drew from your own log. There is no charting library on this machine and there is not going to be one โ€” nothing is fetched, so nothing can be logged by anyone else. (See Privacy.)

Chart What it measures
Hours locked Wall-clock hours inside each week, split at the week boundary so an eleven-day lock lands in the weeks it was actually spent in. Frozen time is included, matching the total locked tile.
Training Assignments done and failed per week, on one axis because they share a unit.
Days reflected Days with at least one reflection โ€” never entries. Four reflections in one evening is one day, the same rule the streak uses.
Check-in scores The five sliders over the last 60 days, one point per day. A day with three check-ins is that day's mean, not three points.
Hours per week, by activity One chart for every activity that declares a duration source โ€” gear, play, headspace, trance sits. An activity nothing measures the length of has no hours to show.
Health Steps, sleep and mood on one time axis.

Five things those charts will not do:

On the health chart each line is scaled to its own range, which is printed in the legend: steps run to ~20,000 and sleep to ~8, so one shared axis would draw the sleep line as a flat smear along the floor. Only the time axis is shared โ€” how far apart two lines sit means nothing at all, and the chart says so.

Insight

The Insight tab is a handful of sentences computed from your log โ€” "headspace runs 1.5 higher on days you were locked" โ€” each with the numbers it came from underneath. They are rules in the code, not a model: nothing about your play is sent anywhere to produce them. (Later, the AI Handler will read these out in its own voice; it will be reading these same computed rows.)

Three rules, and all three are about not saying something:

And a fourth, about language: these are associations in your own log, not causes. "Headspace runs higher on days you worked out" is equally consistent with good days producing workouts, and with a third thing producing both. The page says that once, under the block, rather than hedging every line into uselessness.

An empty Insight tab is the normal state of a young log, and it is the honest one.

Sessions

The Log tab's last twenty locks: started, ended, sentence, adjustments, frozen time, verdict (clean or early). A hidden-timer lock that is still running shows no sentence and no remaining time here either โ€” the sentence is the secret, and started + sentence would give the end time away.


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.