Skip to content

v1.7.0

Latest

Choose a tag to compare

@svenger87 svenger87 released this 07 Aug 12:31
· 106 commits to main since this release

The wall-display release. Kinboard has always been aimed at a screen hanging in a kitchen; this is the release where the interface was measured against that claim rather than assumed to meet it.

It began as a full visual and interaction audit — every screen, every viewport from a 375px phone to a 4K panel, both themes, all three languages. Sixty-eight findings came out of it. This release closes all of them.

Upgrading

docker compose -f docker-compose.yml -f docker-compose.image.yml pull
./start.sh up

No schema migration and no new environment variables. Existing installs upgrade in place.

Security

  • Settings could open without the PIN. The lock checked whether a PIN existed but treated "I don't know yet" the same as "there isn't one", so before the app had established which family it belongs to — or if that check failed — Settings opened with no prompt. Arriving from a link elsewhere in the app was the usual way to hit it. The lock now stays shut unless it has positively established that no PIN is set. This predates 1.6.10; if you rely on the settings PIN, this is the release to take.
  • js-yaml updated to 4.3.1 (CVE-2026-59870). Build-time only — it reaches the project through ESLint and was never part of the running application. No instance was exposed.

Readable across a room

  • Nothing load-bearing renders below 13px on display-sized screens. Phones and tablets are unchanged.
  • The navigation is 48px with 16px labels, was 36px — and Home no longer scrolls out of reach on deeper routes.
  • Calendar event text and pills grew; meal names are no longer truncated to three characters.
  • Large panels are used: up to six columns at 2560px instead of stopping at four, and the clock no longer takes half the screen in landscape.
  • The "larger text" setting finally enlarges the small text. Around seventy sizes were in fixed pixels and ignored it — including the 9–12px labels that needed it most.

Legible in both themes

  • Person colours are readable everywhere they appear. Initials pick black or white by measuring the colour; coloured text adjusts in the direction that suits the theme. Worst case went from about 2:1 to above 4.5:1.
  • Smart-home, sensor and forecast colours follow the theme, the monthly accent and the alternate palettes instead of fixed values. The clothing suggestions in the weather detail were the worst of it — pale yellow on a pale card, barely visible.
  • Around forty switches, toggles and dropdowns that a screen reader announced as an anonymous "switch" now have names.

Honest about failure

  • An unreachable Home Assistant says so. Underneath, a failed request was being reported as a successful empty one, so the app could not tell "unreachable" from "nothing configured".
  • A backend error no longer looks like an ordinary empty day, and error and empty states are recognisably related rather than looking like they came from different apps.
  • The app no longer starts on a blank screen while the first data loads.

Also

  • Pocket money settings can be changed again — every edit was rejected by the server and silently discarded, and the same failure stopped a child's avatar stage from being recorded.
  • Modals are solid rather than faintly see-through, and sideways swipes no longer drag the panel behind them.
  • The public demo shows the school timetable and pocket money for the first time, and its shopping list is no longer empty.
  • The birthday ring survives a real number of birthdays, the day timeline covers the day it is showing, the screensaver looks intentional before you add photos, and the energy animation stops instead of running all day on an always-on display.

The full list is in CHANGELOG.md — sixty entries.

Known and deliberate

  • Blur is absent on all surfaces. It is the right call for ARM-class wall displays, where backdrop-filter is expensive; it may return as a per-device option.
  • Keyboard users still pass the navigation before reaching page content on some routes.
  • Commit history was rewritten during this cycle to consolidate author identities. An existing clone will not fast-forward — re-clone or hard-reset. File content is byte-identical.