Cover One-link Solution

Overview & Context

The web-app currently supports a dedicated guest entry via /invite/{invite_code} and passes an invite query parameter / stored invite code into the join flow. With the unified room URL, every participant joins through /room/{room_id} and the invite code is no longer part of the join. Legacy /invite/{invite_code} links must keep working (backwards compatibility) but resolve to the unified room flow.

Technical Design & Interfaces

  • Keep the /invite/:inviteCode route functional as a compatibility landing page: resolve the room (existing room/fetchRoomByInviteId → /v1/invite/verify in roomSlice.ts and forward into /room/{room_id}.
  • Remove invite-code plumbing from the standard join path:
    • useInviteCode / invite query param -drop from the normal room-join flow.
    • inviteCode in room store state and start payload - stop sending invite_code to /start.
    • Invite-link/guest-link generation in dashboard/toolbar (e.g. CreateDirectMeeting, MeetingDetailsDialogActions, MoreMenu guest invite) should produce /room/{room_id} links.

Definition of Done (DoD)

  • /invite/{invite_code} still resolves and forwards to /room/{room_id}
  • Normal join no longer reads/sends an invite code (query param + store)
  • Invite/guest link generation produces unified /room/{room_id} links
  • UI no longer distinguishes a separate guest link
  • Tests updated

QA Test Scenarios

# Steps Expected outcome
1.1 Open a legacy https://<host>/invite/{valid_invite_code} link in the browser Page resolves the room via /v1/invite/verify and redirects to /room/{room_id}; user lands in lobby/self-test
1.2 Open /invite/{invalid_or_expired_code} Error view shown (error-invite-link), no crash, no redirect loop
1.3 Open a legacy invite link as a guest (not logged in) Redirect works; guest can proceed to the room (subject to room's guest-access setting)
# Steps Expected outcome
2.1 Open https://<host>/room/{room_id} Lobby/self-test appears; join succeeds
2.2 Inspect the WebSocket /start join payload (dev tools) Payload contains no invite_code field

3. JoinMeetingDialog paste/type behavior

# Input pasted/typed Expected outcome
3.1 Full /room/{uuid} URL Field fills with the UUID; submit navigates to /room/{uuid}
3.2 Full legacy /invite/{uuid} URL Field fills; submit navigates to /invite/{uuid} (legacy path preserved)
# Location Expected outcome
4.1 Dashboard → meeting card → copy link (MeetingActions) Copies .../room/{room_id}
4.2 Dashboard → Create Direct (ad-hoc) meeting → room link field Shows/copies .../room/{room_id} (single field, no separate guest link)
4.3 In-conference → Meeting details dialog → meeting link Shows/copies .../room/{room_id}
4.4 Open the moderator "More" menu in-conference No "Invite guest" menu item; no invite-guest dialog
Edited by Albrecht Weiche