Skip to content

Permanent per-pair link for calendar events (#203) - #224

Merged
aleksejs1 merged 1 commit into
mainfrom
feat/pair-calendar-link-203
Oct 3, 2026
Merged

aleksejs1 merged 1 commit into
mainfrom
feat/pair-calendar-link-203

Conversation

@aleksejs1

Copy link
Copy Markdown
Owner

Closes #203, part of #213.

What

  • /pair/{userIdA}/{userIdB} — a pair's permanent link. It redirects to the pair's open chain meeting (one-offs ignored), so it keeps working after the meeting is archived and the next cycle starts.
  • No open meeting: a page with the last closed meeting's date, "Schedule the next one" (opens the create form with the colleague preselected) and "Open the last 1:1".
  • A pair the user isn't part of, an unknown user, or no shared meetings: "No 1:1 behind this link", not a blank page.
  • "Calendar link" button in the meeting page's header copies the link and shows a hint about pasting it into the recurring Google Calendar / Outlook event. Where the clipboard is unavailable, the link is shown in a field to copy by hand.

Frontend only: no new API, no schema change.

The issue's open questions

  • URL format: the link names both people instead of the proposed /with/{counterpartUserId}. A counterpart-only link works for just the person who copied it, while a recurring 1:1 is normally one shared calendar event with one description. pairPath() sorts the ids, so both participants get the same link.
  • Chains in both role directions: the server already matches a pair as unordered, so a pair has one chain whichever of the two leads it. The link ignores roles.

Beyond the issue

"Schedule the next one" preselects the colleague on the create form (an in-memory hand-over like "Create another"); UserTypeahead now shows a value set from outside.

Left open

Both are listed in docs/decisions/2026-10-03-pair-calendar-link.md:

  • A pair whose chain is closed but who still have an open one-off see "No open 1:1 with …" with no pointer to the one-off.
  • The preselected colleague replaces text typed into the colleague field before the form's first load finishes.

Verification

  • Unit tests for pairMeeting() (open over closed, most recent closed, next cycle after an archive, one-offs ignored, unknown user), pairCounterpartId(), the route, and the create-form hand-over.
  • A new dual-actor Playwright test follows the link through two cycles on the real e2e stack, as both participants. Full e2e suite: 51 passed.
  • Typecheck, lint, format, knip, unit tests (837), duplication and doc-link checks are clean. make verify-pr-ready was not run in full: no backend change.
  • Three code-review rounds: round 1 led to the two-id URL, round 2 found a redirect that could fire after the page was left (fixed), round 3 came back clean.

Translations for all 6 locales were written by Claude and are not native-speaker-reviewed.

🤖 Generated with Claude Code

A new route, /pair/{userIdA}/{userIdB}, opens the pair's open chain meeting,
whichever that is by now, so the link can sit in a recurring calendar event
and keep working after each archive. With no open meeting it shows the last
closed one and offers to schedule the next, with the colleague preselected
on the create form. A link to a pair the user isn't part of, or with no
shared meetings, gets a clear message.

The meeting page's header gets a "Calendar link" button that copies the
link, with a hint on where to paste it.

The URL names both people rather than the issue's proposed
/with/{counterpartUserId}: a counterpart-only link works for just one of the
two, and a recurring 1:1 is one shared calendar event. Frontend only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aleksejs1
aleksejs1 merged commit 641faff into main Oct 3, 2026
6 checks passed
@aleksejs1
aleksejs1 deleted the feat/pair-calendar-link-203 branch October 3, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Stable per-pair link to paste into calendar events

1 participant