This website requires JavaScript.
45e1c88bdc
feat(federation): reset detection (markPeerReset) via handshake + probe
Jannis Braun
2026-07-01 22:09:43 +02:00
3b1a0b64a3
feat(federation): relay envelope populates peer epoch baseline
Jannis Braun
2026-07-01 21:58:03 +02:00
8f60e92f94
feat(federation): deterministic baseline epoch-refresh worker
Jannis Braun
2026-07-01 21:49:18 +02:00
bf74aa8bb2
feat(federation): signed /api/federation/epoch endpoint + caller
Jannis Braun
2026-07-01 21:43:02 +02:00
538519fcd2
feat(federation): exchange + store peer epoch on handshake
Jannis Braun
2026-07-01 21:35:20 +02:00
7acf48d0a4
feat(federation): shared epoch types + getInstanceId()
Jannis Braun
2026-07-01 21:19:25 +02:00
d8f2b1a9c7
feat(federation): instance epoch schema + minting
Jannis Braun
2026-07-01 21:11:34 +02:00
807b2f6234
refactor(web): fold final-review polish into join modal feature
Jannis Braun
2026-07-01 19:06:10 +02:00
cf9bcfbf1a
docs(spaces): document discovery-first Join a Space modal
Jannis Braun
2026-07-01 18:59:48 +02:00
309abd86e2
feat(web): discovery-first Join a Space modal
Jannis Braun
2026-07-01 18:56:56 +02:00
fc8df54cb0
feat(web): compact ExploreSpacePreviewCard for join modal
Jannis Braun
2026-07-01 18:51:31 +02:00
e840dcbe40
refactor(web): SpaceCard uses shared useSpaceJoin hook
Jannis Braun
2026-07-01 18:47:16 +02:00
6c66af7a88
feat(web): add shared useSpaceJoin hook over exploreStore
Jannis Braun
2026-07-01 18:42:45 +02:00
215750cb7a
fix(install): harden prereq/DNS paths against set -euo pipefail aborts
Jannis Braun
2026-07-01 18:35:20 +02:00
737402b5d2
docs(deployment): note install.sh commit injection + HTTPS reachability check
Jannis Braun
2026-07-01 18:14:38 +02:00
20ba7b42f9
feat(install): production-hardening for public self-hosting
Jannis Braun
2026-07-01 18:14:38 +02:00
f481e1fe9e
license: relicense to AGPL-3.0-only with commercial dual-license
Jannis Braun
2026-07-01 16:38:22 +02:00
16d75f2806
docs(readme): drop private-test-instance mention from status
Jannis Braun
2026-07-01 13:25:52 +02:00
3be8b36064
docs(readme): finalize for 1.0.0 public launch
Jannis Braun
2026-07-01 13:22:37 +02:00
ac20f22c72
fix(voice): consistent state on DM-call ↔ space-channel transitions
Jannis Braun
2026-07-01 02:08:53 +02:00
7a3d892c6e
deploy: never rsync over the host-owned Caddyfile
Jannis Braun
2026-07-01 01:34:16 +02:00
d2e9b92e80
docs(readme): correct project-status + bans wording
Jannis Braun
2026-07-01 01:28:28 +02:00
bdf957514c
docs: accurate read-state wording + mobile/PWA and app-store-roadmap mention
Jannis Braun
2026-07-01 01:15:33 +02:00
3f5b2920a4
docs: fix screenshot caption overclaiming read states
Jannis Braun
2026-07-01 01:11:47 +02:00
cb16c8feac
docs: add screenshot showcase to README + gallery
Jannis Braun
2026-07-01 01:06:08 +02:00
cfe4fd80c4
fix(icons): render small favicons from 3D raster to kill white tab-border
Jannis Braun
2026-07-01 00:58:51 +02:00
0eb65b6608
fix(uploads): keep HEVC inline playback for Safari/WebKit
Jannis Braun
2026-06-30 17:41:42 +02:00
209aef7e9d
fix(uploads): graceful fallback for browser-unplayable video (HEVC .mov)
Jannis Braun
2026-06-30 17:38:11 +02:00
e84daf57aa
fix(voice): push voice presence to user on mid-session space join
Jannis Braun
2026-06-30 17:00:37 +02:00
f807524103
docs: public-release prep polish (README, CLA, CONTRIBUTING, prep script/spec)
Jannis Braun
2026-06-26 14:25:11 +02:00
77ceda148a
docs(federation): document demand-driven peer recovery + recheck endpoint
Jannis Braun
2026-06-26 14:03:27 +02:00
e372a7a571
feat(web): Check now button to manually recover unreachable federation peers
Jannis Braun
2026-06-26 13:58:38 +02:00
4ad83a7cc1
feat(federation): POST /peers/:id/recheck — manual reachability probe
Jannis Braun
2026-06-26 13:53:57 +02:00
603973a02e
feat(federation): demand-driven recovery tick; health-check tick keeps rotation only
Jannis Braun
2026-06-26 13:49:40 +02:00
a6c7584e0c
feat(federation): lean federationRecovery module (probe + markPeerRecovered)
Jannis Braun
2026-06-26 13:44:37 +02:00
bafc7fbb47
feat(federation): add last_probe_at/probe_attempts columns for peer recovery pacing
Jannis Braun
2026-06-26 13:41:29 +02:00
00a2876e96
fix(channels): newly created channel sometimes hidden until space reopened
Jannis Braun
2026-06-25 12:34:11 +02:00
a4af708a41
fix(web): uniform category spacing in channel sidebar
Jannis Braun
2026-06-25 12:21:37 +02:00
8dd76f3435
Public-release prep: ELv2 license, README/CLA/NOTICE, SSRF safeFetch, identifier genericization, export tooling
Jannis Braun
2026-06-22 16:04:03 +02:00
c0a6477059
fix(install): post-install message reflects first-user-becomes-admin (no seeded admin/admin123)
Jannis Braun
2026-06-20 03:14:16 +02:00
a91702a255
fix(backup): manual snapshot CLI must open its own DB handle (getRawDb undefined in standalone process)
Jannis Braun
2026-06-20 02:58:46 +02:00
baf3a7d047
merge: deploy pipeline launch hardening (admin bootstrap, DB backups, image pinning, reproducible builds)
Jannis Braun
2026-06-20 02:52:22 +02:00
5107f63e60
harden(security): chmod seed-admin-rotated.txt to 0600 (guarantee perms on overwrite)
Jannis Braun
2026-06-20 02:51:13 +02:00
1c23c1fb60
docs(deploy): deployment.md (backup/restore, admin bootstrap, pinning) + env + CLAUDE.md
Jannis Braun
2026-06-20 02:45:33 +02:00
239578edc9
build(deploy): drop non-reproducible lockfile fallback; require frozen install
Jannis Braun
2026-06-20 02:41:26 +02:00
63732b9efb
build: pin Docker image tags for reproducible builds
Jannis Braun
2026-06-20 02:40:09 +02:00
a4333c4c23
fix(restore): robust empty-dir listing + injection-proof container swap
Jannis Braun
2026-06-20 02:38:07 +02:00
70da1ede64
feat(backup): manual-snapshot CLI + host-side backup.sh and restore.sh (safe restore)
Jannis Braun
2026-06-20 02:34:30 +02:00
9407e48293
feat(backup): scheduled snapshot worker wired into server lifecycle
Jannis Braun
2026-06-20 02:32:17 +02:00
154feb2dd6
feat(backup): pre-migration snapshot gated on pending migrations; checkpoint WAL on shutdown
Jannis Braun
2026-06-20 02:26:51 +02:00
48bcd69031
feat(backup): VACUUM INTO snapshot core (create/list/prune) + config + off-box hook
Jannis Braun
2026-06-20 02:21:22 +02:00
4b44996aac
feat(security): idempotent remediation script to rotate seeded admin123 on existing instances
Jannis Braun
2026-06-20 02:15:39 +02:00
ae61786335
feat(security): remove hardcoded admin/admin123 seed; first registered user is admin
Jannis Braun
2026-06-20 02:07:47 +02:00
3c134fe0e8
feat(sounds): self-made Ogg cues + watch/mute/pop fixes
Jannis Braun
2026-06-20 00:52:58 +02:00
4829746efc
chore: gitignore .claude/worktrees and scheduled_tasks.lock
Jannis Braun
2026-05-15 15:05:41 +02:00
bc286c2750
merge: fix(chat): pagination skeleton no layout shift into main
Jannis Braun
2026-05-15 12:57:38 +02:00
3f51db7ea1
docs(message-list): document top-of-list reservation slot and 2026-05-15 fix
Jannis Braun
2026-05-15 12:34:10 +02:00
fb38fee965
fix(chat): lower pagination skeleton delay threshold to 50ms
Jannis Braun
2026-05-15 12:30:20 +02:00
8beb093aab
fix(chat): eliminate pagination skeleton layout shift via constant-height slot
Jannis Braun
2026-05-15 12:25:27 +02:00
886111b21a
test(useDelayedLoading): lock in custom threshold parameter behavior
Jannis Braun
2026-05-15 12:20:27 +02:00
dc6caa0125
merge: wip(mobile): in-progress mobile + voice polish into main
Jannis Braun
2026-05-12 13:36:08 +02:00
7351b3d90d
fix(dm): surface dm.name on chat header/placeholder; collapse unnamed-group placeholder
Jannis Braun
2026-05-10 23:41:11 +02:00
87ecf0f4f3
fix(ui): AvatarStack — center inner Avatar in each tile (off-center clipping)
Jannis Braun
2026-05-10 23:18:24 +02:00
3c7bb02901
fix(dm): ownership transfer divergence after back-and-forth — canonicalize ownerHomeInstance + normalize authority checks
Jannis Braun
2026-05-10 22:38:03 +02:00
b6842c5590
fix(dm): owner-only group DM ops accept federated target identification
Jannis Braun
2026-05-10 22:09:14 +02:00
9279ac78e5
fix(ui): AvatarStack — radial overlap layout for 3-10 members (replaces 2x2 grid)
Jannis Braun
2026-05-10 21:57:38 +02:00
9f9a7c556b
fix(ui): mount GroupDmSettings on desktop too — Open Group Settings button now opens the modal
Jannis Braun
2026-05-10 21:50:58 +02:00
dbb9b2c34b
wip(mobile): in-progress mobile + voice polish
Jannis Braun
2026-05-10 21:26:40 +02:00
24240f24f4
fix(janitor): protect dm_channels.icon files from cleanup (owner + receiver)
Jannis Braun
2026-05-10 21:18:58 +02:00
0acdbbc4eb
docs(design-system): AvatarStack reusable component
Jannis Braun
2026-05-10 21:03:05 +02:00
941a365224
docs(mobile-ui): MobileGroupDmInfo + members-button rule for group DMs
Jannis Braun
2026-05-10 21:02:32 +02:00
a694522931
docs(api): three new group DM endpoints
Jannis Braun
2026-05-10 21:01:32 +02:00
62eb2c8be1
docs(federation): group_metadata_update event + bootstrap payload extension
Jannis Braun
2026-05-10 21:00:54 +02:00
1d24fe2182
docs(dm-system): group metadata update + owner-routing helper + bootstrap extension
Jannis Braun
2026-05-10 20:59:23 +02:00
f499176c01
docs(database): dm_channels.name + icon + metadata_updated_at
Jannis Braun
2026-05-10 20:57:05 +02:00
94a1d28a4c
feat(mobile): MobileDmsScreen uses AvatarStack + dm.name + group globe
Jannis Braun
2026-05-10 20:51:09 +02:00
058cf36d5a
feat(mobile): MobileChatScreen members button shows for group DMs
Jannis Braun
2026-05-10 20:50:05 +02:00
c0a61dc0fc
feat(mobile): MobileGroupDmInfo pushed screen with inline edit
Jannis Braun
2026-05-10 20:49:42 +02:00
a6c37e9e49
chore(ui): remove dead Pinned Messages buttons (DM + space chat headers)
Jannis Braun
2026-05-10 20:42:42 +02:00
86a668032a
feat(ui): DmListItem uses AvatarStack + dm.name + group globe
Jannis Braun
2026-05-10 20:40:35 +02:00
1b99f65d07
feat(ui): WelcomeHeader polish — AvatarStack, Owner label, Open Group Settings, Leave hover fix
Jannis Braun
2026-05-10 20:40:31 +02:00
f583d9186d
feat(ui): group DM chat-header polish — avatar stack, globe, cog, name + count click targets
Jannis Braun
2026-05-10 20:36:27 +02:00
f04477c812
test(ui): GroupDmSettings — mock ImageCropModal to harden cancel + save-with-icon tests
Jannis Braun
2026-05-10 20:33:06 +02:00
5e739b170e
feat(ui): GroupDmSettings modal with Overview + Members tabs
Jannis Braun
2026-05-10 20:26:25 +02:00
b34caf5f2d
fix(ui): DmMemberRow anchors profile popout to row bounds (matches MemberSidebar)
Jannis Braun
2026-05-10 20:18:05 +02:00
c21bc8078b
feat(ui): right-side DmRosterPanel for group DMs
Jannis Braun
2026-05-10 20:10:16 +02:00
68c4133abd
feat(ui): shared DmMemberRow component (used by roster panel, settings modal, mobile info)
Jannis Braun
2026-05-10 19:59:18 +02:00
c0151996c4
feat(client): chat timeline renders name_changed + icon_changed system messages
Jannis Braun
2026-05-10 19:47:18 +02:00
91aa06b48b
feat(client): sidebar previews for name_changed + icon_changed
Jannis Braun
2026-05-10 19:43:31 +02:00
d508fecfb0
feat(client): dm_channel_updated WS handler + updateDmMetadata store action
Jannis Braun
2026-05-10 19:42:05 +02:00
e77fae0402
feat(client): api.dm.updateMetadata + kickMember + transferOwnership
Jannis Braun
2026-05-10 19:41:24 +02:00
22c3fd6d50
feat(client): getOwnerInstanceForDm — route owner-only DM ops to current owner instance
Jannis Braun
2026-05-10 19:39:13 +02:00
063ed2dd64
refactor(federation): extract normalizeIconForWire helper
Jannis Braun
2026-05-10 19:31:06 +02:00
04d7910077
feat(federation): bootstrap carries group name + icon + metadataUpdatedAt
Jannis Braun
2026-05-10 19:23:47 +02:00
7c8de29eff
test(federation): lock kick authority behavior in member_remove receiver
Jannis Braun
2026-05-10 19:14:48 +02:00
78d2ab496d
refactor(federation): drop dead export on downloadProfileAsset
Jannis Braun
2026-05-10 19:10:56 +02:00
240df49d1d
feat(federation): processGroupMetadataUpdateEvent with receiver hardening
Jannis Braun
2026-05-10 19:04:00 +02:00
7f8d650cab
refactor(server): extract transferGroupDmOwnership helper + wrap in transaction
Jannis Braun
2026-05-10 18:56:01 +02:00
35c720429e
feat(server): POST /api/dm/:id/transfer — manual ownership transfer
Jannis Braun
2026-05-10 18:46:41 +02:00
ce11fd12b5
refactor(server): extract evictUserFromDmVoiceRoom helper + drop redundant optional chains
Jannis Braun
2026-05-10 18:42:25 +02:00