Progress log
Moveee Indoor versions
Moveee Indoor's own version history — the browser trainer world, shared rooms and route scenery, separate from the rest of the app. Currently on Moveee Indoor v0.4.44.
v0.3.49
Moveee Indoor: a clearer, steadier start screen
2026-07-23- Fixed Choosing "Ride a route" or "Choose workout" no longer opens a second popup on top of the first — the new one replaces it. Backing out returns you to the chooser, and picking a route goes straight on to the loading screen without the chooser flashing behind it.
- Changed Every popup in the start flow is now the same width, so stepping from one to the next no longer resizes the card under your pointer.
- New Custom artwork for the ride modes — a world with a road across it, a route running to a pin, and a set of interval bars — and the terrain choices are now drawn as the profile you would actually ride: a flat line, a rolling one, repeated climbs, one long ascent. All vector, so they stay sharp at any size.
- Changed Clearer wording on the three modes: "Free ride the virtual world", "Pick a real route — even your saved one", and "Follow targets (optionally ERG mode)".
v0.3.48
Moveee Indoor: the ride modes sit side by side
2026-07-23- Changed "How do you want to ride?" now lays its options out in a row rather than a stack, so they read as a choice between siblings instead of a list to work down. Each option is a tile with its icon, name and caption; on a narrow window they fold back to the old rows.
v0.3.47
Moveee Indoor: connect your trainer without leaving the ride
2026-07-23- New The settings menu now has a Trainer row beside Heart rate, so you can pair a trainer at any point — including in the middle of a ride you started without one. Connecting takes over from the self-drive automatically, and the row shows your trainer's name once it is on, so the menu tells you what is actually connected.
v0.3.46
Moveee Indoor: riding with friends is out of the picker for now
2026-07-23- Changed "Ride with friends" no longer appears when you choose how to ride. Multiplayer itself is untouched and still works — an invite link still drops you straight into a room, and everything inside a room behaves exactly as before. Only the way in from the opening screen is hidden, until it is ready to be offered.
v0.3.45
Moveee Indoor: know every climb, and read the HUD at a glance
2026-07-23- New Climbs are now found automatically on any route, and while you are on one a panel shows exactly where you stand: how far up you are, metres climbed, metres still to the top, and how much road is left. A climb starting within 600 m is announced before you reach it, and the panel stays out of the way entirely on flat ground.
- New The elevation profile has a zoom: choose how far up the road it looks, from 1 km to 20 km, defaulting to 5 km.
- Changed The profile now carries a real elevation scale down its right-hand edge — round heights with faint guide lines — instead of the two numbers that sat on top of the graph. You can read the actual height of the road you are riding, and the distance figure no longer repeats the zoom control beside it.
- Changed The mini-map and elevation profile are 25% bigger on desktop, and the real map no longer overlaps them (it had been overlapping the column by 64 pixels).
v0.3.44
Moveee Indoor: the same physics on every road, for every rider
2026-07-23- Fixed Riding a gravel route high in the mountains and then dropping into a free ride left the mountain behind but kept its road and its thin air: the invented scenery inherited gravel and altitude from the ride before it. Every world now states plainly what is under your wheels and how high you are, so nothing carries over. A route uses its mapped surface and real altitude; a free ride is an ordinary road at sea level.
- Changed Riders with nothing filled in on their profile get the full physics too — surface, air, drivetrain and gravity all apply, worked out for an average rider until you tell Moveee your height and weight.
- New The road surface under your wheels is now part of the physics. Routes carry OpenStreetMap's surface data segment by segment, so when the tarmac turns to gravel the ride does too: rolling resistance rises, you slow by several km/h at the same power, and your smart trainer's resistance follows — you feel the road roughen, on exactly the stretch where it really does. Cobbles, compacted forest roads, dirt and grass all get their own honest figures.
- New Air gets thinner as you climb, and the ride now knows your real altitude — about 9% less air per 1000 m, exactly the standard-atmosphere figure. The same watts carry you visibly faster at altitude, and an alpine descent runs away the way it does outdoors. The trainer's air resistance thins with it.
- New A drivetrain loss of 2.5% — what a clean chain actually costs — now sits between your power meter and the road, as it does on every real bike.
- Fixed The wind the world simulates now reaches your trainer: ride into a gust and the pedals lean back at you the moment the HUD shows it. And a unit error in what was sent as the trainer's air-resistance figure — half the correct value since the last change — is corrected.
- Fixed The ride itself was still being worked out for an average rider. Your height, weight and riding position were feeding the speed estimates and the trainer, but the world you actually ride through kept its own fixed figures — one drag area for everybody, a slightly grippier road and a heavier bike. So the personal numbers never reached the ride. The world now asks who is on the bike, and there is a single answer used everywhere: your drag area, your weight plus your bike, one rolling resistance.
- Changed That means everything the ride already did well — carrying your momentum, coasting when you stop pedalling, headwinds and tailwinds, sitting in a wheel — is now happening to YOU rather than to a stand-in. A bigger rider carries more speed downhill and pays more into a headwind, exactly as they would outdoors.
- Fixed Stopping could leave the cyclist drifting away from the bike and floating through the world. The pose that lifts the rider onto the saddle each frame recorded how to undo itself only after all the arm and foot solving had finished — so if any of that failed while stopped, the lift was never taken off and was added again on the next frame, and the next, until the rider had climbed out of the scene. The undo is now recorded the instant the lift goes on, and a bone that comes back as an impossible number drops that frame's adjustment instead of poisoning every frame after it.
- Fixed Turning off "Drive itself" no longer launches you down the road: the drive speed (up to 400 km/h) was handed straight to the coasting physics, so the world kept flying past with no one pedalling. Leaving the drive now hands over at a speed a rider could actually be doing.
v0.3.40
Moveee Indoor: turning the resistance down no longer makes you faster
2026-07-23- Fixed Your climb-resistance setting was making you quicker up hills, which it should never do. It exists so a brutal gradient can be ridden without cracking — it is gearing, not terrain. It now changes only how hard the trainer pushes back at your legs; the hill you are actually climbing, and therefore your speed, is the one the map drew. Ease the resistance off on a 15% wall and it will feel kinder, take exactly as long, and cover exactly the same ground.
- Changed Your speed is now worked out by Moveee rather than read off the trainer. A trainer reports the speed its own flywheel produces, which reflects whatever resistance it was asked for — so with the dial turned down it would claim you were flying up a climb you had merely made easier. Your watts, pushed against the real road, decide your speed. Everyone now rides the same physics, whether on a smart trainer or a plain power meter.
- Fixed Gravity was missing from the ride's own speed model — it only knew about air and rolling resistance, so as far as it was concerned a wall was as fast as a flat road. On a 10% climb at 300 W it thought you were doing 39.5 km/h; the truth is 12.2. If you ride with a smart trainer you never saw this, because your trainer worked out the hill itself. But riders on a plain power meter climbed at flat-road speed, and the pace group did too — so on every climb your virtual companions simply rode away from you. Both are now correct.
- Changed Freewheeling downhill works properly too: stop pedalling on a descent and you now roll, gathering speed to a realistic terminal pace, instead of stopping dead.
- Changed The hill the screen uses is the same one your trainer is given — including your climb-resistance setting. At the default 60%, a 10% road is ridden as 6% by both, so the effort in your legs and the speed on the screen keep telling one story.
v0.3.38
Moveee Indoor: the message boards speak with one voice
2026-07-23- Changed Every roadside message board now shares a single black background instead of each carrying its own colour. A row of purple, red, teal and white panels read as adverts for different products; on one dark ground they read as one voice, and the message is the only thing that changes. Two slogans whose lettering had been picked for a white panel were lifted to a lighter shade so they stay readable — every board's text is now checked to clear a proper contrast floor against the black.
v0.3.37
Moveee Indoor: the trainer now pushes back with your real air resistance
2026-07-22- Fixed Your trainer was being told to simulate far more air resistance than the world was actually drawing — about two and a half times your real figure — so the pedals felt heavier than the speed on screen suggested. It now gets your own air resistance and rolling resistance, the very same numbers behind the speed you see, so the effort in your legs and the speed on the screen finally tell the same story. Flat riding will feel noticeably easier than before, and correctly so.
- New Your weight is now sent to the trainer when you pair, so a climb loads it by how heavy you actually are. Not every trainer accepts this — where it doesn't, it keeps using the weight set in its own app, exactly as before.
v0.3.36
Moveee Indoor: your speed is now worked out from your own body
2026-07-22- Changed How fast your watts carry you is now calculated from your real height and weight rather than one average rider for everybody. Air resistance is what decides speed on the flat — and how much air you push depends on how big you are — so a tall rider now has to work harder for the same speed than a small one, exactly as outdoors. Your weight is also counted properly as you plus the bike. If your profile has no height or weight yet, nothing changes: it falls back to the same average rider as before.
- New Riding position is now part of the calculation. Today you always ride on the hoods, so nothing looks different yet — but the drops, the tops and an aero tuck are already defined, ready for when you can change position mid-ride.
- Changed A ride now takes three photos at most, and takes them at different moments each time: one ten seconds in, one somewhere in the first half hour, and one somewhere in the following hour. The two later moments are rolled fresh for every ride, so riding the same road twice doesn't hand you the same postcard. A short ride simply takes whichever of the three it gets to.
- New On the finish card the photos are numbered in the order they'll be saved, with arrows to move any of them earlier or later — so you decide which one goes up first — and an × to drop one you don't want.
- Changed Every photo is now squeezed to under 200 KB. Quality is eased down first and the picture only shrunk if that isn't enough, so an ordinary in-world frame keeps its full size and sharpness and only a busy one gives anything up.
v0.3.34
Moveee Indoor: see your ride photos before they leave, and drop the ones you don't want
2026-07-22- New The finish card now shows every in-world photo your ride took, and each one has a remove button — so nothing you don't like ends up alongside your ride. A ride also takes more than one photo now: the first after a minute, then one every five minutes, up to six, so a longer ride comes back with a few different places instead of a single shot.
- Changed Clearer wording on the Strava option: it now simply reads "Publish this Virtual Ride to Strava." The photos have their own section that says plainly what happens to them — they are saved to your device when you publish, because Strava's API does not accept photos, so you add them there yourself.
v0.3.33
Moveee Indoor: the seaside is the one on the map — materials, lighthouses and harbour cranes
2026-07-22- Changed The shore is made of what OpenStreetMap says it is made of. Its `surface` tag now decides the material and colour — pebble, sand, shingle, gravel, bare rock, mud, or the concrete bathing platforms that are the real Adriatic town beach — and the apron is as wide as the mapped beach actually is, measured inland from the coastline, so a broad strand and a two-metre ledge no longer look alike. Checked against the map: between Izola and Koper the beaches OSM tags are pebblestone and concrete, not sand.
- Fixed Stretches of coast that had no beach at all now have one. The side the water lay on was decided from a single point in the middle of each stretch, so on a headland, in a narrow inlet or along a spit — where that one point could not tell — the whole stretch was left bare. The question is now asked along the entire stretch.
- New Lighthouses are built where OpenStreetMap has them: a tapered tower in painted bands with a gallery and a lit lantern room. Built from shapes rather than a downloaded model on purpose — the coast is drawn before the model packs finish loading, so a modelled lighthouse would turn up minutes into the ride.
- New Harbour cranes, too — the container gantries that are the whole skyline of a working port. Koper maps 26 of them. They and the lighthouses are read from much further out than ordinary roadside objects, because that is how far away you see them.
v0.3.32
Moveee Indoor: bridges sit on the road, and big ones look the part
2026-07-22- Fixed Bridges no longer hover in the air above the road. Two things were lifting them: OpenStreetMap's layer tag (which only says "this way is above what it crosses", not by how much) was being converted into metres of height, and the deck ends started 60 cm above the ground while the roads leading in run at ground level. A bridge deck now meets the approach road exactly at both ends and carries the ridden tarmac across — the air below the span is real, coming from the dip or the carved river underneath. Bridges on the road you ride also follow your road's own elevation much more reliably.
- Changed A big bridge that OpenStreetMap tags only as "a bridge", with no word on its structure, now takes its look from its real length — a really long span gets suspension towers and cables, a long one a steel truss, a short one stays a simple deck. Where the map does say what the bridge is (stone arch, steel truss, timber boardwalk…), that always wins, whatever the size.
- Fixed On sharp climbs and descents a coloured field could still lie across the road. The ground is held under the tarmac at every terrain point near the road — but big fields were drawn with triangles tens of metres wide, and between two far-apart points the surface could rise straight over the tarmac on a slope. Field triangles near your road are now split down to about three metres, small enough that any triangle able to touch the road is pinned below it at every corner — so its surface cannot rise over the road anywhere in between. This is a geometric guarantee, not a tuning tweak.
v0.3.30
Moveee Indoor: only turns worth taking are offered
2026-07-22- Changed Turn choices at junctions now skip roads that lead nowhere: a turn is only offered when at least a kilometre of road is reachable through it before you would be forced back through the same junction. Cul-de-sacs, driveway stubs and little loops that dump you straight back where you turned no longer appear as choices — on a typical route that trims about a fifth of the clutter while every real road stays. The street you are already riding can always be continued to its end.
v0.3.29
Moveee Indoor: town signs greet you even on the outskirts
2026-07-22- Fixed Passing a town on its outskirts often showed no name sign, and cities never showed one at all — the sign only knew about settlements whose centre point sat within 400 m of your road, and cities were not even asked for. Settlements are now read at a range that matches what they are (a city from 3 km, a town from 1.5 km, a village closer in), and the sign stands beside the road at your closest approach whenever that pass is genuinely within the place's extent — a city greets you from over a kilometre out, a hamlet only up close.
v0.3.28
Moveee Indoor: roundabout approaches fuse into the ring like real ones
2026-07-22- Fixed Roundabout entrances and exits now merge cleanly: each approach follows its real road's line into a flared bell mouth that meets the ring edge-to-edge — no more gaps, stubs or sideways kinks where roads joined.
- Improved Kerb lines run continuously from the road, around each mouth's flare, and along the ring — the ring opens exactly where each mouth's edges land, whatever the road's width or angle.
v0.3.27
Moveee Indoor: the mapped shore's outer limits are a hard limit for the sea
2026-07-22- Fixed No more sea inside Koper. The shoreline data is fetched in a corridor around your route, and where a shore way was cut off mid-harbour the classifiers kept extrapolating water past the cut — into the city's streets. A clipped end of the mapped shore is now a hard limit: any point whose closest approach to the shore falls past one is land, full stop. On the Izola route that removes roughly ten thousand cells of phantom water while leaving the real shoreline untouched.
v0.3.26
Moveee Indoor: turn off your route and ride the real streets
2026-07-22- New Free-roam riding. As you approach a real junction, turn chips appear over the ride — pick one with the arrow keys and ride through it to take the turn; do nothing and you stay on your route exactly as before. Off the route you ride the actual mapped streets: forks keep offering choices, a road that simply continues is followed without interruption, a dead end turns you around, and when you arrive back at a junction your route passes through, riding through on the default puts you straight back on it. Gradient and trainer resistance follow the road you are actually on.
v0.3.25
Moveee Indoor: every road meets yours as an equal
2026-07-22- Fixed Side roads no longer duck beneath the road you ride: every junction now carries the crossing road at your road's level and grades it smoothly down onto its own line.
- Fixed Roundabouts are complete junctions from every direction — all arms rise to meet the ring the same way, so a far-side exit looks exactly like the one you rode in on.
v0.3.24
Moveee Indoor: the foam behaves like a real seaside
2026-07-22- Changed The foam is properly irregular now — flecks in loose, uneven patches instead of the faintly regular rows the old pattern produced — and each patch quietly appears, lingers and dissolves on its own ten-to-fifteen-second cycle, at a random offset, the way real whitecaps come and go. Still no measurable frame cost.
- Fixed The shallow-water tint blends smoothly out from the shoreline. It used to change in one hard line across the water, because each map square carried a single flat tone; the shore distance now ramps continuously across every square.
v0.3.23
Moveee Indoor: roundabouts rebuilt to match their real-life look
2026-07-22- Improved Roundabouts now follow their real mapped shape — an oval roundabout renders and rides oval, not as a forced circle.
- New Raised splitter islands separate the entry and exit lanes on every approach, with give-way signs standing on them at bigger junctions.
- New Street furniture scales with size like real life: mini roundabouts are just the painted disc, big ones add zebra crossings, lamps and planted centre islands.
- Changed Roundabouts are classified as intersections in the world — their own kind of object, separate from roads and buildings.
v0.3.22
Moveee Indoor: beaches under the water, foam on it, and no more phantom lagoons
2026-07-22- New The waterline reads as a beach now: the ground entering the sea turns wet sand and then sediment grey-brown instead of staying lawn-green under the water, and the water itself runs lighter over the shallows near the shore and deeper blue out at sea.
- New White foam drifts slowly across the water — dense little breakers along the shore, sparse whitecaps out in the open. It is drawn entirely on the graphics card as part of the one existing water surface: no new objects, no per-frame work on the processor, no measurable frame cost.
- Fixed Phantom water pockets behind harbours are gone. Around a concave port like Koper, deciding sea-or-land by the nearest stretch of shore alone let patches inland of the quays count as sea. Every candidate near the shore is now also checked against the one certain fact — the route you ride is on land — by counting how many times the line from it to the route crosses the shore, from three directions. What remains as water at Koper matches its real port basins and the Škocjanski zatok lagoon.
- Changed Still water stays still: the foam and shading move as colour only — the surface itself does not ripple, so the water's edge stays exactly on the coastline.
v0.3.21
Moveee Indoor: every real road for 3 km looks like a road
2026-07-22- New Groundwork for free-roam riding. Every real road around your route — from main roads down to village streets, out to about three kilometres — is now drawn as a proper road: pale kerb bands and an asphalt surface, following the land, dipping under your road where it crosses. Driveways, farm tracks and footpaths stay as simple strips. The whole network costs almost nothing to draw, and nothing can be planted on those roads any more — they are the roads you will soon be able to turn onto.
v0.3.20
Moveee Indoor: the coastline is exactly where the map says it is
2026-07-22- Fixed The water meets the mapped coastline everywhere — measured against every OpenStreetMap shore segment on the Izola route, 98% of the coast has water exactly at the line (the rest is Koper's harbour piers, thinner than the terrain can carve). Land that used to stand between the sea and the shoreline is pulled down to a low bank so the water reaches the line, while anything tall enough to be a real cliff coast is left standing — and the ground under the road never moves.
- Fixed Water reaches the town waterfront. The road used to keep a whole 40 m map square dry around itself, which held the sea a block away from Izola's quay — exactly where you ride. The road now keeps a verge measured in metres instead, so the water comes up to the quay with the tarmac untouched.
- Fixed Water can no longer spill past the coastline at a corner: the refined shore band is one square wider on every side, so the sea surface can only ever extend toward open water.
- Changed The sea is still now — the vertex waves are gone. A flat sheet keeps its edge exactly on the shoreline; the swell was pushing water over the shore apron on every crest and opening sky under it in every trough.
v0.3.19
Moveee Indoor: a real shoreline — sand, pebbles and rocks along the mapped coast
2026-07-22- New The coastline is a place now, not a seam. A foreshore runs along the mapped OpenStreetMap coastline: sand where OSM maps a beach, bare grey rock where it maps rock or scree, and the narrow pebble foreshore typical of the Slovenian coast everywhere else — with rocks standing half-submerged off the rocky and pebbly stretches. Through a marina the foreshore steps aside, because a harbour edge is quays and moorings, not beach.
- Fixed The sea stops at the coastline. The water's edge used to be built from 40 m squares, which either left it visibly short of the shore or pushed whole squares of water past it; squares the coastline crosses are now refined to 5 m so the water follows the mapped line, and the foreshore covers the last seam. The waterline strip that could reach across a road on the town waterfront is gone with it.
v0.3.18
Moveee Indoor: server map fixes now reach your browser
2026-07-22- Fixed Map scenery fixes made on the server now take effect in your browser immediately. The browser keeps its own 30-day copy of every map stretch, and its cache key never learned about server-side map updates — so a stretch cached with a fault (Izola's missing sea) kept replaying from disk no matter what the server had re-read since. The server's map version now rides along in the route data and turns the browser's copy over automatically; every earlier fix to the Izola coastline finally lands.
v0.3.17
Moveee Indoor: the world copies far more of the real map
2026-07-22- New Buildings wear their real mapped colours and materials — a red-roofed village square renders red-roofed, a brick factory renders brick.
- New Forests follow the map's leaf type: a tagged pine forest plants pines, a beech wood plants broadleaves.
- New Guard rails line the descents, and real traffic lights, stop signs and zebra crossings appear where the map has them.
- New Wayside shrines and crosses, hunting stands, water towers, factory chimneys and storage tanks, dams and weirs, and cemetery headstones — all placed from the real map.
- New Mountain passes get a named roadside sign with their elevation, like summits already do.
- New Schools, police and fire stations get their own recognisable look, and airfields render their runway and mown apron.
v0.3.16
Moveee Indoor: your ride is never lost to a bad connection
2026-07-22- New A finished ride is now kept on your own device until the server confirms it is filed, so a dropped connection, a closed laptop, or an app update at the wrong moment can no longer lose it. Saving retries by itself, and anything still unsaved is offered back the next time you open Indoor.
- Fixed Saving the same ride twice can no longer create a duplicate entry in your calendar.
v0.3.15
Moveee Indoor: a dropped coastline is no longer believed for a month
2026-07-22- Fixed A stretch of a coastal route could end up with no sea at all for thirty days. Map scenery is fetched from OpenStreetMap in stretches and each answer is kept for a month; an answer counted as good if it contained anything at all, so a stretch that came back with its buildings but its coastline missing was filed away as a place with no sea. It is pure luck of the moment — on the Izola route the same stretch answered with a full set of coastlines one minute and none the next — and whichever landed first was the one you were stuck with. A missing shore is now checked against a second, cheap question before it is believed: only a definite "there is no coast near here" is kept, and anything else is re-read within a minute.
- Fixed Stretches that had already filed away a missing coastline are re-read, so routes affected by the above get their sea back instead of waiting for the month to run out.
v0.3.14
Moveee Indoor: a bridge carries no grass
2026-07-22- Fixed Bridges no longer have strips of land hanging off either side. The road's grass verge runs the length of the route, and over a bridge it was carrying on straight across — leaving green shoulders floating above the water beside the deck. The verge is now cut back wherever it reaches over a river, so a bridge is only bridge: deck, parapets and the arches beneath. The banks either side of the water are untouched.
- Fixed The teal trees lining the road are finally a natural forest green — the previous pass only reached the textured tree packs and missed the flat-coloured ones that make up most of the woodland you actually ride past. Their pale trunks are untouched.