• v1.0.0-Beta.03 fdc0027fff

    v1.0.0-Beta.03
    All checks were successful
    CI / check (push) Successful in 3m18s
    Docker Release / build-and-push (push) Successful in 4m21s
    Release / release (push) Successful in 1m29s
    CI / tests (push) Successful in 4m56s
    Pre-release

    k4wit0 released this 2026-09-01 12:19:13 +02:00 | 76 commits to main since this release

    Native status bar and a cleaner hero

    Added

    • The mascot is the project's icon. The browser tab, the installed app's icon,
      the logo on the README and the face on the sign-in and setup screens are now
      one drawing rather than four things that could drift.
    • scripts/icon.ts, which builds that icon out of the running application
      rather than from a second copy of the same curves.
    • A .dockerignore. Without one the whole working tree went to the daemon on
      every build — 286 MB down to 4.2 MB, measured, and more to the point a stray
      database in the tree is somebody's training and has no business inside an
      image that gets pushed to a registry.
    • A container image, built and pushed on every tag. :beta while there is no
      stable release; latest is only ever moved by a stable one, deliberately, so
      nobody pulling it lands on a prerelease. It is built without a signing key, so
      the binary inside refuses to update itself — updating a container is pulling a
      new image.
    • scripts/screenshots.ts, and the screenshots it takes. Never by hand: a
      screenshot taken by hand is whatever the window happened to be that afternoon.
      It refuses to run if the server is not answering, because otherwise it
      photographs the offline screen out of the service worker's cache and nothing
      fails.
    • .env.example, for the container path. Every variable in it is one the server
      actually reads, checked against the config package.
    • A test that everything the binary redistributes is named in NOTICE. Apache-2.0
      requires the attribution, and a NOTICE is exactly the kind of file that stops
      being true when a dependency arrives through another dependency.

    Changed

    • The README, CONTRIBUTING and SECURITY files follow the same shape as the
      other CodigoSH projects: the centred header with the logo, the badges and the
      screenshots; "How Development Works" and "Join the Team"; and a security
      policy that leads with how updates are delivered and ends with how to report
      something. The substance is this project's own — it signs its releases and
      says what its threat model does not cover — but the shape is the house's.

    • The README carries the house blocks verbatim: Support & Recognition with its
      three parts, and the signature line every CodigoSH repository ends with. Those
      are the organisation's, not this project's, and they now diff clean against
      Lastboard's. Its sections and badges line up one for one, and the picture at
      the top is a composed hero — the name and a headline down the left, the
      application on the right with rounded corners and a shadow — built by
      scripts/mockup.sh from the screenshots, at the same 3200×1800 as the other
      projects.

    • The README is a third shorter and stops repeating the documentation. What it
      said about the first-run token was two versions out of date — the token was
      removed — and what it said about the languages was one: all twenty are
      translated, and what fourteen of them are missing is the plural forms.

    • Screenshots are taken in English and dark, from an account seeded for the
      purpose and deleted afterwards. Pointed at an account seeded weeks earlier the
      home screen showed a line falling to zero and the calendar an empty month:
      both true, both a poor picture of what the application does.

    • deploy/compose.yaml is docker-compose.yml at the root, where the other
      projects keep theirs.

    • Releases are cut with CodigoSH's release script — Lastboard's, the same file
      in every project, with a CONFIGURATION block at the top for the handful of
      things that genuinely differ: which files carry the version, what the
      preflight runs, and where the notes come from. Everything below that block is
      byte-for-byte the same, so a fix made in one project is a file copied to the
      others.

    • scripts/release.sh beta "the headline" checks the tree is clean and level
      with the remote, runs the whole suite before anything is written, works out
      the next version, stamps it, writes the notes, tags and pushes — the tag
      last, because the tag is what CI builds from. --dry-run prints every
      decision and writes nothing.

    • The two halves of a release are two scripts. scripts/release.sh is the one
      a person runs; scripts/build-artefacts.sh is the one CI runs, and it is
      where the signing key is needed — a release cut from a laptop should not need
      one on that laptop.

    • The version lives in package.json and is stamped there by the release
      script, the way it is in Lastboard.

    Fixed

    • The status bar of the installed application is the colour of the canvas
      instead of the accent. On a phone it was painting an orange band across the
      top of a dark screen, which is a browser announcing itself in the one place
      an installed application is supposed to look like it owns the whole screen.
      It follows light and dark on its own with no script, and a theme chosen by
      hand beats the one the phone is set to.
    • Scrollbars are gone on a touch screen. They were a desktop affordance
      inherited whole, and no application on a phone draws one.
    • The screenshots are taken with touch emulation on. Setting a phone-sized
      viewport does not change the input device, so the pictures were still being
      rendered as though a mouse were pointing at them — the scrollbar came back in
      them while being correctly absent on a real phone. The script now refuses to
      run if the page reports a fine pointer.
    • The two phones on the README's hero image are placed by their screen rather
      than by their shadow. The blur spills out on every side, so compositing the
      file at a coordinate put the shadow there and the phone somewhere else, which
      is what pushed the second phone against the edge of the picture and made it
      look cropped. They have a bezel now, and the feature pills are spaced from
      their own measured widths instead of from three numbers written by hand.
    Downloads