Skip to content

feat(events): member calendar feed and one Add to calendar menu - #260

Merged
codeforphilly-bot merged 7 commits into
developfrom
feat/calendar-member-feed
Nov 11, 2026
Merged

codeforphilly-bot merged 7 commits into
developfrom
feat/calendar-member-feed

Conversation

@codeforphilly-bot

Copy link
Copy Markdown
Collaborator

From Chris Alfano's idea in #website-relaunch: "ical subscription feed for users, add to calendar button for events."

The site-wide webcal:// feed and the per-event Google Calendar and .ics links already existed. This adds the two missing pieces.

What changes

  • Member feed. GET /api/events/feed.ics?attendee=<slug> is the site feed narrowed to the events one member has an RSVP on, under its own calendar name. Same 90-day window and VEVENT rules. Public with no token, because RSVPs are already public.
  • Add to calendar. One menu with Google Calendar, Outlook.com and Apple Calendar / .ics replaces the two text links on event detail. It also appears on full event cards (events index and series page). Hidden for drafts, cancelled and past events.
  • Subscribe on /events. Signed-in members choose "all events" or "events I'm going to", each with a webcal:// link and a copy fallback. Signed-out visitors see what they saw before.

Specs lead: specs/behaviors/events.md, specs/api/events.md, specs/screens/event-detail.md, specs/screens/events-index.md. Plan: plans/calendar-member-feed.md.

Decisions to review

  • Feed shape and privacy. A public URL keyed by slug. Anyone who knows a member's slug can subscribe to their RSVPs, which is the same information the attendee lists already show.
  • Handle renames. The API does not follow slug history, so a rename breaks an existing subscription and the member subscribes again. Listed under Risks in the plan.
  • Errors. 404 for an unknown or deactivated person, 422 for an empty attendee.
  • Home page. The compact cards and Subscribe link in the home strip are unchanged.

Verified

  • npm run type-check && npm run lint && npm test clean: 624 API tests, 186 web tests, 116 shared tests.
  • The API booted on a seeded throwaway data repo: the member feed returned only the RSVP'd event, and an unknown slug returned 404.

Not verified

  • No browser check. The build host has no Chrome. The plan stays in-progress and its validation boxes unticked until someone clicks through the menus.
  • Outlook.com link. The deeplink format is undocumented and was not clicked against a real account.
  • Nothing ran against the real fixture branch of codeforphilly-data.

🧡🤖 Written by GrittyBot, Code for Philly's ops bot. I am an AI.

🤖 Generated with Claude Code

codeforphilly-bot and others added 7 commits November 11, 2026 04:37
A member can subscribe to only the events they RSVP'd to, and the two
calendar text links become one menu with Google, Outlook.com and .ics.
RSVPs are already public, so the member feed needs no token.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Bridges the calendar spec change to code.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
The same 90-day window and VEVENT rules as the site feed, narrowed to
the events one member has an RSVP on, under its own calendar name.
Unknown or deactivated people answer 404.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
One menu replaces the two text links on event detail and appears on
full event cards. Signed-in members can subscribe to all events or to
only the ones they are going to.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
The shared dropdown matches a menu's width to its trigger, so the
menu on a card's icon button was 8rem wide and its items wrapped. On a
phone the Subscribe menu also sat against the screen edge.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Outlook.com renders the body parameter as HTML, so a < or & in an
event description was read as markup. The spec's Outlook row now says
so.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
@codeforphilly-bot
codeforphilly-bot merged commit eea72fd into develop Nov 11, 2026
1 check passed
@codeforphilly-bot
codeforphilly-bot deleted the feat/calendar-member-feed branch November 11, 2026 06:38
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.

1 participant