• v1.0.0-Beta.14 2aae4e187c

    v1.0.0-Beta.14
    All checks were successful
    CI / check (push) Successful in 1m37s
    Release / release (push) Successful in 2m21s
    Docker Release / build-and-push (push) Successful in 4m23s
    CI / tests (push) Successful in 4m43s
    Pre-release

    k4wit0 released this 2026-09-02 16:59:24 +02:00 | 8 commits to main since this release

    Your account, your space, and screens that say what they are

    Added

    • A finished session opens with what it was: how long, how many sets, how much
      was moved and how hard it felt. Every one of those numbers was already
      recorded and none of them was shown — the screen was a drawing of food and
      then a list. Under each exercise it now also says what the same exercise
      looked like the time before, which is the difference between a record of what
      you did and something worth reading.

    • Weekly volume is no longer hidden from the interface a new account starts in.
      The argument for hiding it was that a tonnage means nothing without a scale to
      put it against, which is true of a figure and not of a line: whether it is
      going up is exactly the question somebody new has. By movement pattern and Not
      moving stay behind the switch, because those are coaching vocabulary.

    • An administrator can set how much room each account has, and each account can
      see what it is using: a bar with a part for photographs and a part for the
      activity files a watch writes. Two parts because two things charge that
      counter, and an architecture test now refuses a third without one being added
      to the bar in the same change.

      Every account starts with two gigabytes rather than no ceiling, because a bar
      with nothing to fill teaches nobody anything — and the reason to show it at
      all is that finding the limit at the moment of hitting it is finding it too
      late. Zero still means no ceiling, for an administrator who wants one person
      unbounded.

    • A plate the catalogue does not stock can be added by hand. Ticking from the
      list covered almost every gym and bars could already be typed in, so plates
      not being addable was an asymmetry with nothing behind it — and the
      calculator and the warm-up ramp are only worth anything if they work from the
      plates actually on the rack.

    • A destination for notices can be corrected. Adding and deleting were the only
      two operations, so fixing one character in an address meant rebuilding the
      destination — which throws away the record of when it last worked, and that
      record is how anybody diagnoses one that has quietly stopped. An empty secret
      means "keep the one you have", since it is never sent back to the browser.

    • A screen called You, holding the four things that are about the person rather
      than the application: what you are called, how you prove it is you, who else
      may look, and how you take it all with you. They were scattered — a row that
      led nowhere, a section called Security three rows down, a whole navigation
      entry holding one control, and a backup filed next to the bin.

    • The local PIN can be switched on. setPin and clearPin have been complete
      since the phase that wrote them — hashing, an attempt limit, an idle window —
      and nothing had ever called either, so the lock screen worked perfectly and
      could not be reached. Verified by driving it: set a PIN, push the idle stamp
      back an hour, come back, and the application is behind the curtain.

    • PATCH /api/me: somebody may now change their own display name and their own
      password. Neither was possible without an administrator, which quietly worked
      against the promise this project makes in writing — that an administrator
      manages accounts and the server and never reads anybody's training. A design
      where the only route to your own password runs through another person makes
      that promise harder to keep than it needs to be.

      The two halves are not held to the same standard. A display name is cosmetic
      and reversible, so a live session is enough. A password is the credential, and
      changing one is exactly what somebody does with a stolen session, so it asks
      for the current password first — the way turning off the second factor already
      does. The username is deliberately not changeable: it is the handle the audit
      log records, and a record of who did what is worth nothing if the name in it
      can be edited afterwards.

    Changed

    • Comparing two photographs is done by looking at them. The two were picked
      from a segmented control with one pill per photograph, each carrying a date:
      fine with four and a wall of identical grey dates with forty, and the wrong
      question anyway — nobody remembers a physique by its date. It is two rows of
      thumbnails that scroll sideways now, so forty take the same vertical room as
      two.

    • The body screen no longer says "Derived" over two numbers. The word reads as
      something out of a maths lesson, and what the row is for is the figures
      themselves; the sheet behind them still explains where each came from.

    • Disk usage has left the body screen for the account screen. It is a fact
      about an account rather than about a body — it counts photographs and the
      files a watch writes — and it now sits beside the limit that gives it
      meaning.

    • Train answers the same question Today does. Today said "Push · 5 exercises"
      with a button on it while Train, one tab across, said nothing was on the go
      and offered a blank session — so tapping the training tab looked like being
      told there was nothing planned. The plan leads there now, and recording
      without one stays underneath, because somebody who does not follow a routine
      is a whole user rather than a degraded case.

    • Routines names both of its halves. It holds two different things — the
      routines that belong to you, and the programme shapes anybody can take a copy
      of — and only the shapes had a heading, so the routines read as the screen
      itself and the shapes read as five more of them. Reported as "one running and
      five more below", which is exactly what an unlabelled list above a labelled
      one says.

    • Notices no longer keep a log on the settings screen. Nobody can act on
      "eleven were delivered"; they can act on some having been given up on, and on
      why. That is one line when it happens and nothing when it does not.

    • The green "notifications are on" banner is a row. A banner at the top of a
      screen reads as the most important thing on it, and this was the least: it
      told somebody what they had just done.

    • Destinations and push devices are rows that lead somewhere, with the
      destructive action inside rather than a red button pressed against the name.

    • "Devices" and "On this device" were two screens saying much the same thing,
      and are now one. What the first had that was worth keeping is a single line —
      whether anything is still waiting to reach the server — and it showed the
      sequence number and the sync epoch instead, which are for debugging the
      protocol.

    • The server screen's facts are tiles with their own icons rather than a list,
      and the schema number is gone from it: it matters while a migration runs and
      is otherwise a number with no action attached. The audit log is called
      Records.

    • Privacy is no longer a place in the navigation. It held one control, which
      most people use once and many never use at all, and it now sits on the account
      screen beside the question it belongs with.

    Fixed

    • i18n:scan could not see any key that takes a placeholder. Its pattern
      required a closing bracket straight after the string, so t("key") was
      checked and t("key", { count }) was not — seventy call sites, and the ones
      most worth checking: a missing label is visible, a missing sentence with a
      {count} in it needs somebody standing on the right screen.

    • lastgym doctor was quietly deleting activity files from everybody's usage.
      The recompute summed progress photographs alone and had done since before
      cardio existed, while cardio uploads charge the same counter — so rebuilding
      somebody's usage discarded every file their watch had ever contributed. It
      wrote the answer back, and it did that without --fix, so a command whose
      whole job is to look was corrupting the number it was looking at.

      Activity files now carry their size the way photographs always have
      (migration 018), the recompute sums both, and doctor fills in the sizes of
      files stored before there was a column to hold them.

    • Your date of birth came back empty every time. It saved correctly and could
      not be drawn: born_on is a moment, so it arrives as
      "1990-05-12T00:00:00Z", and an <input type="date"> takes exactly
      yyyy-mm-dd and ignores anything else without saying so. Anybody who set it
      reopened the screen, saw a blank field, and had every reason to think it had
      not been saved.

    • On a desktop the navigation showed itself twice. Past 60rem the bar becomes a
      sidebar with every destination on it, which is the point of having the room —
      but the More button stayed, sitting under the full list and offering a sheet
      containing the same list again.

    • A role noun stood in for a person the server has never met. The line that was
      drawn in Beta.13 — a role noun stays because it is a language's unmarked word
      for the job — turns out to have a second half. "Give a coach access" names the
      job. "Has my coach been looking?" names somebody, and eight languages put a
      gender on them: mi entrenador, mein Trainer, ο προπονητής μου, мой тренер.

      Where the language has a natural way to say it, the person is now named by
      what they do: quien me entrena, chi mi allena, quem me treina, όποιος με
      προπονεί, la personne qui m'entraîne. German, Polish and Russian have no short
      neutral for it, so those ask what the audit log actually answers — whether
      anybody read it — and their notification title names the session instead.

      The role labels themselves are unchanged, and so are the generic mentions.

    Downloads