| Commit message (Expand) | Author | Age | Files | Lines |
| * | fix(node): CLI member invite now registers hub membership and enforces code | Christophe Besson | 2026-09-01 | 1 | -1/+1 |
| * | feat(hub): reCAPTCHA v2 on Register and Password Reset pages | Christophe Besson | 2026-09-01 | 2 | -3/+35 |
| * | feat: passphrase change and account recovery (auth-confirm) | Christophe Besson | 2026-09-01 | 1 | -3/+223 |
| * | feat: email verification for registration, email change, and invitations | Christophe Besson | 2026-08-31 | 2 | -25/+263 |
| * | refactor(ui): extract Explore, Login, Register and CreateGroup from app.js | Christophe Besson | 2026-08-31 | 1 | -1/+6 |
| * | feat: node workflow redesign — wizard auto-config, reset, MusicBrainz contact | Christophe Besson | 2026-08-29 | 1 | -0/+11 |
| * | feat(hub): group names unique per owner, shown as name@owner | Christophe Besson | 2026-08-28 | 2 | -13/+55 |
| * | feat(hub): let a hub admin disable public groups instance-wide | Christophe Besson | 2026-08-28 | 5 | -21/+125 |
| * | feat(music): network-adaptive prefetch depth, opt-in keep-screen-on toggle | Christophe Besson | 2026-08-26 | 1 | -0/+1 |
| * | fix(hub): no-store on the SPA HTML shell — pull-to-refresh wasn't enough | Christophe Besson | 2026-08-26 | 1 | -3/+15 |
| * | feat: add Photos group app | Christophe Besson | 2026-08-25 | 1 | -1/+1 |
| * | feat(hub): Music app client — album grid, flat list, persistent player | Christophe Besson | 2026-08-24 | 1 | -0/+1 |
| * | feat(node,hub): add Videos group app (poster grid, flat list, TMDB metadata) | Christophe Besson | 2026-08-24 | 1 | -1/+1 |
| * | feat(hub): split the group UI into a pluggable "applications" architecture | Christophe Besson | 2026-08-23 | 1 | -1/+7 |
| * | fix: delete notifications and detach content_reports before deleting a group | Christophe Besson | 2026-08-21 | 1 | -2/+7 |
| * | feat: unified group management, public groups, and activity-based sidebar | Christophe Besson | 2026-08-20 | 3 | -9/+47 |
| * | feat(ui): 11-point UI overhaul — tabs, transfers, settings, uploads | Christophe Besson | 2026-08-19 | 1 | -1/+121 |
| * | feat(ui): the M of the wordmark is the logo | Christophe Besson | 2026-08-19 | 1 | -1/+1 |
| * | fix: the chat tab no longer scrolls, and a group is listed or invite-only | Christophe Besson | 2026-08-18 | 1 | -10/+23 |
| * | feat(client): the platform seam, and an Electron shell that has never been run | Christophe Besson | 2026-08-18 | 1 | -1/+5 |
| * | feat: device linking, and signing in to the hub with a device key | Christophe Besson | 2026-08-18 | 2 | -1/+206 |
| * | fix(hub): serve the SPA under a fingerprint of what it is | Christophe Besson | 2026-08-16 | 1 | -7/+42 |
| * | feat(hub): leaving a group, a cap on public ones, and hosting as a precondition | Christophe Besson | 2026-08-16 | 2 | -5/+159 |
| * | fix: stop a stream on close, count only real users, record where a node is | Christophe Besson | 2026-08-15 | 5 | -10/+88 |
| * | feat(groups): remove a member, and keep gigabytes out of the tab | Christophe Besson | 2026-08-15 | 1 | -0/+48 |
| * | feat(groups): editable description, and one source of operator authority | Christophe Besson | 2026-08-15 | 1 | -0/+32 |
| * | feat(logs): keep the username on records the account no longer answers for | Christophe Besson | 2026-08-15 | 2 | -2/+10 |
| * | Notifications: one per conversation, none for your own messages | Christophe Besson | 2026-08-14 | 3 | -4/+106 |
| * | feat(account): a user can delete their own account, an admin can delete one | Christophe Besson | 2026-08-14 | 2 | -3/+110 |
| * | feat!: identity keys per node — C4's blast radius drops to one operator | Christophe Besson | 2026-08-14 | 2 | -46/+13 |
| * | feat(client): Argon2id for the keypair bundle, and remove the backup toggle | Christophe Besson | 2026-08-14 | 1 | -0/+4 |
| * | fix(hub): require proof of possession on node announce — closes M8 | Christophe Besson | 2026-08-13 | 1 | -0/+44 |
| * | fix: resource limits, signaling authz, node admin UI token | Christophe Besson | 2026-08-13 | 2 | -4/+70 |
| * | fix: swarm privacy, revocation persistence, keystore KDF, audit integrity | Christophe Besson | 2026-08-13 | 5 | -40/+98 |
| * | fix(hub): authenticate node WebSocket registration | Christophe Besson | 2026-08-13 | 1 | -13/+84 |
| * | feat: Phase 12 — P2P crypto material, password split, node Ed25519 auth | Christophe Besson | 2026-08-13 | 5 | -84/+256 |
| * | fix(hub): move _handle_chat_notify before @router.websocket decorator | Christophe Besson | 2026-08-11 | 1 | -1/+1 |
| * | feat: chat notifications via hub, file delete, upload fix, cached display, in... | Christophe Besson | 2026-08-11 | 1 | -0/+36 |
| * | feat: Phase 10b — Self-service UI (group create/join, upload, IndexedDB, se... | Christophe Besson | 2026-08-11 | 1 | -0/+53 |
| * | feat(hub): Phase 10.5–10.8, 10.10 — notifications, settings, search, version | Christophe Besson | 2026-08-11 | 4 | -8/+139 |
| * | feat(hub): Phase 10.1–10.4 — Site overlay + admin/moderation UI | Christophe Besson | 2026-08-11 | 4 | -1/+307 |
| * | feat: Phase 9 — Web client SPA with WebRTC P2P transport | Christophe Besson | 2026-08-11 | 3 | -59/+76 |
| * | feat: Phase 9.1–9.5 — WebRTC DataChannel transport for browser P2P | Christophe Besson | 2026-08-10 | 3 | -1/+121 |
| * | feat(hub): Phase 8 — Hub v2 security hardening + production readiness | Christophe Besson | 2026-08-10 | 8 | -69/+150 |
| * | feat: Phase 7 — Node v2 (multi-group, Sender Keys, 0-RTT, chat, denylist) | Christophe Besson | 2026-08-10 | 2 | -4/+56 |
| * | feat: password-based key derivation + operational QUICKSTART | Christophe Besson | 2026-08-09 | 1 | -3/+8 |
| * | feat: Phase 6 complete — chat, multi-group, federation, replication, webcrypto | Christophe Besson | 2026-08-09 | 2 | -19/+106 |
| * | feat(hub): add MHP federation + Mesh Relay registration — 5.2 + 5.3 | Christophe Besson | 2026-08-09 | 2 | -0/+330 |
| * | feat(hub): add moderation — content blocklist + reports — 5.9 | Christophe Besson | 2026-08-09 | 1 | -0/+200 |
| * | feat: add revocation push (WebSocket hub→node) — 5.7 | Christophe Besson | 2026-08-09 | 1 | -0/+194 |