-
v1.0.0-Beta.05
Pre-releasereleased this
2026-09-01 18:07:30 +02:00 | 62 commits to main since this releaseThe phone: icon, zones, sessions that end and imports that speak
Fixed
- The installed application wears the mascot on a phone. The manifest declared
one icon and it was an SVG; Chrome on Android will not take a vector for a
home-screen icon, and with nothing it could use it kept whatever it already
had — the dumbbell that came before the mascot. The same drawing now ships as
PNG at 192 and 512, with a square-edged 512 formaskableso the platform's
own mask has a full plate to cut from, and anapple-touch-iconbecause iOS
never reads the manifest for that one. - The icon is one named face rather than whichever one was on screen.
scripts/icon.tstook the firstsvg.mascotit found, and which of the ten
moods that is depends on the account that happened to be open — so the
identity of the application was decided by somebody's training week, and a
rebuild could quietly change the face on every home screen. It signs out
first, asks formeetingby name, and refuses to write anything if that face
is not there. - The icon's plate is the canvas colour. It was left on
#121212when the
canvas moved, so it sat a shade lighter than the screen it opens. - Finishing a session ends it.
finish()recorded the workout and then left it
in the signal, and the Train tab asks that signal before it asks the device —
so touching Train after finishing walked straight back into the workout that
had just ended, every exercise still there, and the only way out was the menu
again.clear()existed for exactly this and nothing had ever called it. - A session says when it is over. Every exercise asks "done, or one more?" when
its sets are in; the last one was answered and the screen then sat there with
nothing owing, nothing to do and nothing saying so. The way out was behind
the three dots, which is where somebody goes to abandon a session rather than
to complete one. - Importing an activity says it worked. The message was written into the notice
and thenonChangedredrew the screen, throwing away the node it had just
been written to — so a successful import said nothing at all, and only the
new session appearing behind the sheet suggested anything had happened. It is
a toast now, which lives outside what is being redrawn. Errors stay in place:
a failure is to read and act on, not to glance at before it slides away. - The upload sheet closes when the file is in, and its file control is a button
of ours rather than the browser's grey "Choose file / No file chosen" under a
label repeating the title of the sheet it was in. - Time in zones is laid out.
.zone-barswas a class with no rule anywhere in
the stylesheet, so it rendered as the browser's own list — discs down the
margin, and three inline spans with nothing between them, which ran the
zone's range and the time spent in it together as one number: "Zona 1
114–1265:55". Nothing looks wrong reading the stylesheet, because the rule
that would be wrong is not there. Each zone is now its name, its range and
its time on one line with the bar underneath at full width, and a zone with
no time in it draws an empty track rather than a stub that says "a little". - A watch file can be chosen on a phone. Chrome on Android turns the file
input'sacceptlist into an intent filter, and it can only use the entries
it can map to a MIME type —.fitand.tcxare not in Android's table, so
what reached the picker was "XML" and a watch file was not something that
could be picked. The same screen worked from a computer, which is how a
filter that exists on one platform only manages to hide.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- The installed application wears the mascot on a phone. The manifest declared