halkyon/apps/meditate
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tizian 「ティツィアーン」 b72cea1fe0
feat(base,app,keys): keys of shared spaces, sealed to each member
Step 3 of ADR 0044 (D3, D18, D19). A shared space's data keys are
sealed on a device to each member's public keys; the instance keeps
what devices sealed and never opens it.

- halkyon_keys: the safety code of two accounts' public keys
  (`safetyCode`), 60 digits, the same on both sides.
- halkyon_base: the register hands out accounts' public keys
  (`public-keys-of`, local and remote); the table `shared_space_key`
  and the endpoint `sharedSpaceKeys` (memberKeys, keysNeeded, seal,
  mine). Only the Owner and Editors seal, the first key sealed to a
  member stays, and a member's keys go with their membership. Every
  host's migration creates the table.
- halkyon_app: `ContentCipher` seals a key to another account and
  opens one sealed by another; `SharedKeys` shares a space's key with
  its members, seals keys to newcomers and opens the person's own,
  holding each member to the public keys `KeyPins` pinned on first
  sight (`key_pins.json` in the person's folder), a change refused
  until trusted anew.

Learn takes them into its `Privacy` in step 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-11 11:35:42 +01:00
..
halkyon_meditate_client feat(base,app,keys): keys of shared spaces, sealed to each member 2026-11-11 11:35:42 +01:00
halkyon_meditate_flutter feat(app,ui): sync waits on mobile data and asks first 2026-11-10 23:46:29 +01:00
halkyon_meditate_server feat(base,app,keys): keys of shared spaces, sealed to each member 2026-11-11 11:35:42 +01:00
tool feat(meditate): the app: Today, Explore, Profile, the sitting and its bells 2026-11-04 09:31:56 +01:00
.gitignore feat(meditate): the app: Today, Explore, Profile, the sitting and its bells 2026-11-04 09:31:56 +01:00
AGENTS.md feat(meditate,deploy): Meditate beside the instance, and every server's public address from .env 2026-11-08 19:59:39 +01:00
CLAUDE.md feat(meditate): the app: Today, Explore, Profile, the sitting and its bells 2026-11-04 09:31:56 +01:00
README.md feat(meditate): the app: Today, Explore, Profile, the sitting and its bells 2026-11-04 09:31:56 +01:00

Halkyon Meditate

Meditation, as a Halkyon app (ADR 0038): a silent timer with bells, Halkyon's own guided practices as text cues, found by goal and kind, and the person's minutes, days and days in a row, every sitting sealed and synced between their devices. People choose an instance, sign in (with SimpleLogin or a password), switch between the accounts on their devices, sign out and delete their account, as in every Halkyon app.

Package What it is
halkyon_meditate_server The server: Serverpod with the halkyon_base module and the sync engine
halkyon_meditate_client Its client, generated by Serverpod
halkyon_meditate_flutter The app, on halkyon_app and halkyon_ui (Android, iOS, Linux, macOS, Windows)

Run it with serverpod start in halkyon_meditate_server, which starts the server (and its embedded PostgreSQL) and the app; or the app alone against an instance with flutter run --dart-define=SERVER_URL=https://…/ in halkyon_meditate_flutter. Tests: dart run melos run test:dart --scope=halkyon_meditate_server and dart run melos run test:flutter --scope=halkyon_meditate_flutter at the repository's root, or dart run tool/check.dart for everything.

The app's icon is Lucide's sprout (ISC licence, ADR 0031), drawn by the repository's tool/app_icons.py. Its bells are synthesised by tool/bells.py and are the project's own. Licences: the server under the SSPL, the client and the app under the AGPL (LICENSE.md).