ExploreExplore toward homeHome

There is one engine underneath all of it, and one idea: the watch works out what is possible and hands back a single instruction. Not a dashboard, not a route, not five true numbers the wearer has to combine at threshold — one thing to do next, and a promise about how it ends.

In a city that promise is you will be back where you started, before your dinner. In a race it is you will finish in the time you came for, or the best one still left. The modes differ in what they compute. They do not differ in what they ask of the person wearing them.

Six modes, one engine

Same budget, same trail, same three phases. What changes is what gets drawn on top of them.

Built · offline

Discover City

One free hour, one unfamiliar city, no route. Missions one at a time, and the way home priced the whole time.

Built · offline

Race Brain

A goal, a plan that is not an even split, and one number: what to run for the next kilometre.

Built · offline

Free Ride

No missions at all. You go where you like; the clock is the only thing holding on to you.

Built · offline

Fitness Mission

Effort and recovery as missions rather than as a plan. Push, ease, find a hill.

Built · offline

Take It Again

An hour you kept, taken again — and raced, with the goal opening half a minute under your best.

Built · off by default

The Second Evening

Streets you used last time, carried between hours in the same city. Coarse, capped, thirty days.

Specified

Explore Nature

Bigger cells, gentler detour, climbs at the centre, and a wider margin — dusk on a hillside is a different kind of late.

Specified

Guided Tour

The evening you do want the famous things. A separate mode, because a slider between wandering and sightseeing is bad at both.

1 / 40
The start screen Running today

Why it does not turn round at halfway

Half the time is not half the distance: the way home is a straight line and the way out was not. So the budget is computed rather than assumed, once a second, and every mode is downstream of it.

homeDistancestraight-line metres back to where you pressed START
paceseconds per metre, rolling over the last ten minutes
detourhow much further than the crow flies — learned from your own trail
climbHomemetres to be regained, charged at 8 m of flat each — descent is free
marginsafety, 15% by default
minutesLefttimeRemaining − (homeDistance × detour + climbHome × 8) × pace × (1 + margin)
41 min

A runner is still exploring

Wandering at 3 m/s a kilometre out, the runner is not told to head home until minute 41 of 60 — eleven minutes past the halfway point a stopwatch would have used.

31 min

A walker turns sooner

Same streets, same kilometre, 1.2 m/s. The way home costs twice as much, so exploring ends ten minutes earlier — for the same reason, not by a different rule.

Both figures come out of the app’s own unit test, which drives the real Budget through a simulated hour and reads off the minute each one leaves EXPLORE. Neither number is written anywhere in the source. Stopping counts too: the clock runs while the pace does not, so ten minutes outside a café takes more than ten minutes off the budget. There is no pause button, because time did not pause.

Never chase lost time

The rule Race Brain is built on, and the one place in FlowMission that does arithmetic a person genuinely could not do while running.

4:54

What a pace calculator asks for

10K, goal 55:00, a minute down at 8 km. Remaining time over remaining distance says thirty seconds a kilometre faster — for the two hardest kilometres of the race. That is how a runner ends up walking at nine.

5:21

What Race Brain asks for

Against a plan of 5:26. The deficit is spread over what is left and capped at five seconds a kilometre; the rest is let go. Never punish one bad kilometre with another.

Those three figures are the test’s own debug output. The cap is the strategy: 3 sec/km safe, 5 balanced, 8 aggressive — and it drops to zero the moment the effort says the rest of the race cannot afford it, which is a separate test and the one that matters most. The clock is outranked by the body, deliberately and in writing.

The race plan is not an even split

A real race settles, controls, works, commits and empties — and halfway through a 5K is the middle of the work while halfway through a marathon is still control. Each phase carries a pace multiplier, and the whole profile is normalised so that running it arrives exactly on the goal. That normalisation is checked by a test rather than by eye.

Phase5K10KHalfMarathon
Settle0–10%0–20%0–15%0–10%
Control10–50%20–60%15–70%10–75%
Work50–80%60–80%70–88%75–90%
Commit80–92%80–90%88–96%90–97%
Empty92–100%90–100%96–100%97–100%

A hill is not a runner running badly, so the target moves with the gradient instead: 16 sec/km per percent of climb, 8 per percent of descent, because uphill costs about twice what downhill gives back. The screen says CLIMB, never TOO SLOW, and the time lost goes into the same spreading machinery as any other deficit.

The pot

Every mission the watch can issue offline, in any city, with no signal. One instruction, one quantity, and something the wearer finishes by moving rather than by pressing. The last four are Fitness Mission’s pot; everything above them is Discover City’s.

MissionFinishes when

Roughly one in four is a wild card with nothing at the end of it, and that is load-bearing rather than filler. If FlowMission only ever navigated between highly rated points of interest it would be a walking-tour app with a worse screen — and nobody tells anyone about the time an app routed them efficiently between two four-star landmarks.

The trail is a set of bits, not a track log

The breadcrumb answers three questions and no others: have I been in this cell, how many have I entered that I had not, and which direction from here has the fewest. One bit per 60-metre cell instead of a point per second — an hour is a couple of hundred bits rather than three and a half thousand points.

The rose is the offline substitute for knowing anything at all about the city, and it is a better one than it sounds: the shape of where you have not been is a real fact about a place even when its name is unknown. West is where HEAD WEST comes from. In EXPLORE TOWARD HOME, the sectors pointing away from the start stop being candidates.

It is deleted at the summary screen. That costs a real feature — the second evening in a city cannot be made better than the first — and the trade is made knowingly rather than quietly.

The tracker, and what it is not

It is not Garmin LiveTrack and it does not replace it. Connect IQ cannot start LiveTrack, raise Assistance, or send a message — those are system features and no API hands them to an app. What an app can do is make a web request, over the phone or over LTE with no phone anywhere near.

Which is enough for the thing LiveTrack structurally cannot do. A dot has no idea where you were going or when you meant to be back, so it cannot tell anybody you are late. FlowMission knows both — the return point is where START was pressed, and the budget is a continuously computed promise about when you will be back at it.

{ "kind": "adventure", "lat": 55.678, "lon": 12.591, ← three decimals: ~100 m, not a doorway "elapsed": 2040, "dueInSeconds": 1560, ← the feature "homeMetres": 1430, "phase": 1 }

And the far end alarms on silence, not on an alert. An app that promises to shout for help can only keep that promise while it is working — a flat battery, no signal, a wrist that has stopped moving. Every real emergency is exactly the case where the shout does not happen. So FlowMission does not plan to shout: it says I will be back at 19:47, repeatedly, while it still can, and the far end raises the alarm when 19:47 passes in silence. Absolute, never a countdown — a countdown means nothing once the sending stops, which is the moment it needs to mean something.

Every two minutes, and immediately on three events regardless: setting off, turning for home, and arriving. A failed send backs off — doubling, to a quarter of an hour — rather than retrying into a dead radio. Off by default, inert until the wearer supplies their own endpoint, no identity beyond a random token per activity, and the trail is never sent. There is no FlowMission server.

Watch an hour happen

The frames above are drawn. This one is not: it runs the same rules — the same detour factor, the same recovery caps, the same eight-sector rose, the same one-in-four wild cards — against the twenty-four places far-end/places.js actually returned for central Copenhagen, facts included. Press replay and it gives you a different evening, which is the entire product argument in one button.

00:00
EXPLORE— min to explore

    It is a re-implementation of the same rules in JavaScript, not the Monkey C itself — the constants are copied from the source and the shape is the same, but the app on the watch is the app on the watch. Every place name and every fact below is real and came out of OpenStreetMap.

    The far end exists now

    One file, no dependencies — anybody who is going to be trusted with knowing where somebody is should be able to read the whole of what they are running.

    node far-end/server.js POST /beacon the watch says where it is and when it is due GET / a page that counts down and goes loud on silence GET /places what is near this coarse position, from OpenStreetMap GET /city and the name of the city, rounded to about 11 km

    It alarms on silence

    Overdue and still sending is overdue — somebody is late and you can see it. Overdue and gone quiet is the alarm. It survives its own restart, because a restart at the wrong moment must not clear an alarm that is about to matter.

    The page says what it means, too: the time they gave has passed and nothing newer has arrived — it does not mean something is wrong, it means nobody can tell.

    And it answers the lookup

    The place question had three requirements: coverage of small European cities, a licence permitting caching, and a taxonomy separating historic square from supermarket. OpenStreetMap meets all three, and the third better than anything else — that taxonomy already exists, argued over by people standing in front of the thing.

    Verified against Copenhagen: twenty real places, four per category maximum, and facts that are restatements of tags rather than inventions.

    What comes next

    Ordered by what unblocks what, rather than by what is most interesting.

    1. Put it on a wrist

      A cable and two minutes: app/tools/install.sh builds the release image and copies it into GARMIN/APPS. Three questions the simulator cannot answer — whether the detour factor converges in a real city, whether the fatigue allowance covers the last kilometre, and whether one wild card in four actually feels good on an evening. Blocked on nothing. Nothing below is worth building first.

    2. Somewhere to run the far end

      The receiver is written and works. What is left is deciding where it lives — a box at home, a small VPS, something on the home network — and giving the watch the address. An afternoon and a decision about who is watching, not a build.

    3. Turn the lookup on

      Same service, same decision: an address in the watch’s lookupUrl, and the invented side quests become named ones with real facts attached. Blocked on 2, since it is the same box.

    4. Guided Tour

      The evening you do want the famous things. The engineering is the smallest part: tours are authored, themed and reviewed, and where they come from is a publishing question. Blocked on 3, and a content pipeline.

    5. Race Brain, told about the course

      There is no Connect IQ API that hands an app the elevation profile of the course the watch is following, so LOAD COURSE is named and dark. When there is one, the plan can see the hills before the runner does. Blocked on the platform.

    Done since this list was written

    Items 2, 3 and 4, all three. The far end is written and alarms on silence. The place question is answered — OpenStreetMap, verified against Copenhagen. And trails now persist per city, off by default, coarse to five kilometres, three cities, thirty days.

    The home-city objection had an answer that needed no rule: where everything is eventually remembered the novelty rose goes flat and the picker falls back to bearings. It degrades into being no help rather than into being an accusation.

    Deliberately not on the list

    A map. The moment there is a line to follow, every mission becomes a suggestion about a route rather than a thing to go and do.

    A leaderboard, a streak, a share card. The app has one line of praise and it is Back on time — praise for the app, not the wearer.

    A backend that thinks. Race Brain is deterministic and explainable, and that is not a limitation to lift later: an instruction a runner cannot be told the reason for is one they stop following.

    The question that decides the product

    Whether an hour of this is actually good.

    Everything here is written as though it is, and the only evidence so far is that the idea survived being specified — and then survived being built five times over the same engine.

    Step 1 is one evening’s work, and it is worth more than the rest of the list put together.

    What is actually running

    Built, compiled, tested

    Four modes run offline — Discover City, Race Brain, Free Ride and Fitness Mission. The engine, the trail, the return budget, the picker, the race plan, the effort model and all fourteen mission kinds are Monkey C, building clean for five devices with no warnings: fēnix 9 Pro 43/47/51 mm and Venu 3 / 3S.

    Twenty unit tests pass in the simulator, and the figures on this page are their output rather than illustrations. Release build: 41 KB of code, 11 KB of data. No background service and no store to drain — an adventure only exists while it is being had.

    Built, and waiting on an endpoint

    The phone link, Opportunities, Trivia, the tracker and the far end are all written. The watch asks over Bluetooth or LTE, rate-limits itself, and rounds every position to about a hundred metres; far-end/server.js answers, alarms on silence, and looks places up in OpenStreetMap.

    What is left is an address. There is no FlowMission server and never will be — the endpoint is the wearer’s own box. Without one, none of it arms and the offline engine carries on exactly as it did. The feature does not degrade; it is absent.

    The rule that outranks the rest

    No point of interest is interesting enough to be worth being late for, and no deficit is worth the kilometre that would take it back. Where goals conflict the promise wins silently, by choosing differently — not by warning and carrying on.

    So return time is a gate rather than a term: a candidate that cannot be reached and left behind in the time available is removed before anything is scored. A term can be outvoted; this must not be.

    What it will not do

    It will not optimise. Two FlowMissions from the same hotel should be two different evenings, so the picker draws from what survives its filters rather than taking the best of them — ranking produces the same evening twice.

    It will not nag. A finished mission buzzes once, a discovery twice, a phase change twice; in a race, four patterns mean four things and nothing else vibrates. The wearer is outdoors, in traffic, in a city they do not know.