Skip to content

Releases: bardesss/haelan

v2.0.4

Choose a tag to compare

@github-actions github-actions released this 20 Sep 18:18
edc90f9

2.0.4 (2026-09-20)

Bug Fixes

  • ci: create the app tag release-please skips, so an app release ships (#317) (073140a)

v2.0.3

Choose a tag to compare

@github-actions github-actions released this 20 Sep 16:39
bcedfa8

2.0.3 (2026-09-20)

Features

  • a console tool for the password reset this app has never had (#131) (21cdf17)
  • a recovery index, haelan's own version of a score no API will hand over (#296) (a9e0ab3)
  • a source that has stopped reporting says so (#246) (517c2da)
  • a source that stopped inside the range says so on the page (#250) (52c754b)
  • an account's name, username, timezone and password can be changed after it is created (#136) (b6153bf)
  • core,server,web: a person whose rebuild failed is finally told so (#285) (e91fe35)
  • core: a browser safe metrics subpath, so pages stop copying the catalogue (#69) (24cf29d)
  • core: M1a store, schema, credentials and raw archive (#12) (5995f8e)
  • core: M1b API client, catalogue and field mapping (#14) (d9f1088)
  • core: M1c sync engine, day aligned windows and per row sources (#19) (885551a)
  • core: M2a metric catalogue, daily rollups and the derive queue (#38) (21e4801)
  • core: M2b source priority, merged daily rows and overrides at derivation (#45) (9c5c4fb)
  • core: M2c sleep derivation, night assembly and nap detection (#50) (182a726)
  • core: M2d baselines, insight suppression and the person bound query layer (#51) (9be53d1)
  • core: M2e rebuild from tier 1 with re-resolved source identity (#55) (d746833)
  • core: one unreplayable page costs that page, not the whole archive (#288) (7dfd3ad)
  • core: the detail page spine, and the archive re-mapped onto it (#141) (3eb7ff7)
  • core: the query layer M4a's agent surfaces read through (#138) (73de283)
  • demo: a browsable demo, recorded from the real app and served as static files (#215) (7c62858)
  • haelan installs into a Proxmox LXC without Docker (#229) (d957716)
  • Haelan's own cardio load, and the per-split heart rate the watch never wrote (#191) (dd4a15a)
  • how many backups to keep, and how often, become settings rather than variables (#205) (b2cd24b), closes #150
  • M1d wizard, accounts and the setup flow (#21) (9254125)
  • probe: M0 auth probe, answers scope, field paths and volume (#11) (3f17ebc)
  • say which of your sources wins a contested day (#279) (7ec89bb)
  • server: M3b-2 HTTP surface, ten person bound reads behind one guard (#67) (15c8a8b)
  • server: thirteen tools and an MCP server on stdio (#144) (0faee79)
  • site: a landing page, published to GitHub Pages on every release (#212) (b716193)
  • sql_query, over a projection nothing else is in (#164) (79e8b2d)
  • tell an admin when a newer release is out, if they ask for it (#269) (d30ddff)
  • the agent surface over HTTP, behind a token that belongs to one person (#159) (df7a3e2)
  • the all-time page, and what only the archive can answer (#253) (6da32e3)
  • the landing page's screenshots open full size, and cannot drift from the README (#239) (4e5e65b)
  • the maintenance card can download the latest backup (#243) (bc990ad)
  • the members card says who the admin is, and how each member is doing (#271) (f59d2fa)
  • the records a session holds, and the device that set a record (#256) (a4d6515)
  • tokens: chart tokens with enforced colour blindness and contrast checks (1f6f468)
  • tokens: colour conversion, cvd simulation and contrast (7bcc2bb)
  • tokens: emit css custom properties for both themes (36c031c)
  • tokens: primitive and semantic layers for both themes (800cfc5)
  • tokens: raise the type scale floor to 12px (b0426ac)
  • web: a card with nothing to show renders nothing at all (#293) (cea5f18)
  • web: a day tile says how that day sat against your own usual (#262) (3072a58)
  • web: a readable sessions list, a fitted sleep axis, and a rail that follows the pages you keep (#265) (97b4d53)
  • web: a weekly cardio load target and an acute to chronic workload ratio (#203) (4f9b5a9)
  • web: app shell built from semantic tokens only (268aa9c)
  • web: dashboard and sleep reference pages with styling spec ([3e2dd33](3e2dd337201ac...
Read more

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 15:07
39ab073

2.0.1 (2026-09-20)

Bug Fixes

  • android: system bar insets, a header, and Obtainium's own badge (#307) (5145353)

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 14:51
7e99ca0

2.0.0 (2026-09-20)

Features

  • a household can run haelan without a Google Cloud project (#305) (ce82467)

v1.40.2

Choose a tag to compare

@github-actions github-actions released this 20 Sep 07:29
1b19b08

1.40.2 (2026-09-20)

Bug Fixes

  • test: close the databases two test files were abandoning (#300) (821133a)

Android 0.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 18:07
dd24904

Hælan 0.3.0 for Android. See apps/android/CHANGELOG.md for what changed.

Android 0.2.3

Choose a tag to compare

@github-actions github-actions released this 20 Sep 17:41
6d63461

A data type that fails now says why on its own row. 0.2.2 shipped this half done: the row turned red and kept saying never synced, because the status line had two writers and the one that ran last knew nothing about the failure.

Android 0.2.2

Choose a tag to compare

@github-actions github-actions released this 20 Sep 17:19
5805bc9

A data type that fails now says why on its own row, instead of only drawing a red dot and writing the reason to a log nobody can read from a phone.

Android 0.2.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 15:03
5145353

The app no longer draws its first line under the status bar, and the main screen carries the Haelan mark and wordmark like the web app does. Android 15 draws every app edge to edge whether it asked to or not, and these layouts predated that.

Android 0.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 14:10

Two data fixes, both silent before this release.

A sync cursor was kept per data type, but Health Connect has many writers into one type. A watch that synced in more than a day late, after the phone had already moved that type's cursor, was never read again. Cursors are now kept per source.

A sleep or exercise session that a wearable revised in place arrived as a second session rather than replacing the first, which double counted a night's stages. Sessions now carry Health Connect's own record id.

Both are worth updating for even if nothing looked wrong: neither failure showed anything on the instance.


This app exists because of @Lory99, who wrote it and contributed it in #272: the Health Connect reads across nineteen data types, the sleep stage mapping, the chunked uploads and cursors, the sync worker, the permission flow, and Dutch alongside English. Thank you. It is a large thing to build for somebody else's project.