5 Commits
Author SHA1 Message Date
patrickandClaude Sonnet 5 8f6e05481b fix(PROJ-11): address QA BUG-2/3/4, partially mitigate BUG-1
BUG-4 (High, failed acceptance criterion) — per-tile unread badges:
new use-team-unread-counts.ts runs one app-level Matrix client (separate
from useTeamChat's detail-view client) that syncs every room GET /api/teams
now resolves (matrixRoomId added via leftJoin on chat_rooms) and reports
unread counts per team. TeamsPage tiles show the badge without the chat
tab being open. Side fix: createMatrixClient() now dynamic-imports
matrix-js-sdk instead of a static import, so the new always-mounted hook
doesn't drag the SDK (and its 7.8MB crypto WASM) back into TeamsPage's
main bundle — verified via build output (TeamDetail chunk 853KB -> 27KB,
SDK now in its own on-demand chunk).

BUG-3 (High) — kick-while-open: use-team-chat.ts now listens for
RoomEvent.MyMembership; leaving/removal flips status to a new "removed"
state instead of leaving history and the composer usable.

BUG-2 (High, partially mitigated) — minted tokens are unscoped Matrix
credentials by nature (Matrix has no token scoping). Disabled
user_directory search on Synapse (config + live matrix.perlbach24.de
instance), verified empty results instead of cross-club user listing.
Direct addressing by known Matrix ID is still possible — full tenant
isolation needs an explicit decision (one Synapse per club vs. an
isolation module on a shared homeserver), documented as an open item
in the spec rather than silently declared fixed.

BUG-1 (Critical, not fixed) — backend/.env.example is outside my
permission sandbox (can't read or write .env* files). Documented the
required block in the spec for manual addition; talkhub's real .env
already has the values.

Verified end-to-end on talkhub/matrix test LXCs. Not addressed in this
pass (lower priority per QA): BUG-5/6/7/8/9/10.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0143yYvjesjHndBACoweyK67
2026-09-11 20:21:07 +02:00
patrickandClaude Sonnet 5 90669b4568 feat: add universal Synapse install.sh for bare-metal/Proxmox-LXC
Own installer instead of relying only on the external bashclub script:
builds homeserver.yaml straight from our homeserver.yaml.sample (so it
inherits TalkTime's security defaults — no federation, no public
registration — automatically), sets up Postgres, a systemd service, and
prints the admin token ready to paste into backend/.env. Works identically
in a Proxmox LXC and on bare metal (both are just a Debian userland).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBf3yfnnHzMQ5qhLV2285A
2026-09-11 15:38:07 +02:00
patrickandClaude Sonnet 5 51426a944c fix: finish VereinsChat->TalkTime rename in synapse docs, harden defaults
- Fixed leftover chat.vereinschat.local defaults in docker-compose.yml and
  homeserver.yaml.sample that the earlier bulk rename missed (placeholders
  weren't plain "VereinsChat" text)
- Generalized example prod domain from chat.verein.de to chat.example.org
- Disabled federation by default in homeserver.yaml.sample (client-only
  resources, empty federation_domain_whitelist) since TalkTime runs a
  private homeserver per deployment, not a public Matrix participant
- Added concrete nginx TLS reverse-proxy config and a federation-enable
  note to the Synapse README instead of a stale "see deployment.md" pointer

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBf3yfnnHzMQ5qhLV2285A
2026-09-11 15:34:25 +02:00
patrickandClaude Sonnet 5 b38a5a4a57 feat: member status actions, roles/audit-log UI, member deactivation sync
- PATCH /api/members/:id/status (suspend/reactivate/leave) with Matrix deactivation
- Reconciliation worker comparing local member status against Synapse state
- Roles page (assign/revoke) and audit log page on the frontend
- Dashboard tiles for departments/teams now link to their pages
- Reference bashclub/zamba-lxc-toolbox as a Proxmox-LXC autoinstaller option in Synapse docs

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBf3yfnnHzMQ5qhLV2285A
2026-09-11 15:13:23 +02:00
patrickandClaude Sonnet 5 5e6ee2c456 feat: build TalkTime MVP backend/frontend, rename from VereinsChat
- Generic org/team/member data model (renamed from club-specific naming)
- Auth, organizations, invitations with mail + Matrix provisioning
- Teams with automatic Matrix room creation, sync-job retry, reconciliation
- Departments, seasons, roles (RBAC with privilege-escalation guard), audit log
- Dashboard, members list, org switcher on the frontend
- Synapse setup docs (Docker + bare-metal) and generalized PRD/architecture docs

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBf3yfnnHzMQ5qhLV2285A
2026-09-11 15:07:47 +02:00