feat(events): migrate events from Notion to ICS calendar feed, redesign category UI#515
Open
mohanadft wants to merge 8 commits into
Open
feat(events): migrate events from Notion to ICS calendar feed, redesign category UI#515mohanadft wants to merge 8 commits into
mohanadft wants to merge 8 commits into
Conversation
…gn category UI Replaces the Notion-backed events pipeline with a public ICS calendar feed (Mattermost Events Calendar plugin), and rebuilds both /events (MUI) and /events-new (new design system) around category-grouped sections instead of a flat list — each page keeps its own visual language. - src/store/eventsClient.ts: hand-rolled ICS parser (line unfolding, property parsing, text unescaping), dedupes recurring master/override duplicates and same-day "community call" duplicates from the source calendar, classifies links into register/location/watch buckets - src/utils/eventSections.ts: groups events into named categories (In-Person, Occupied Tech Podcast, Community Calls, Roundtable, Book Club, Others) with a title-keyword fallback for untagged events - src/utils/icalDate.ts: shared TZID->UTC resolver, extracted from notionClient.ts's existing implementation (now reused by community calls) - src/utils/eventDescription.tsx: lightweight Markdown-lite renderer (headings, bold, rules, lists, auto-linked URLs) for the popup — renders real React nodes rather than dangerouslySetInnerHTML, since descriptions are externally-sourced text - src/utils/googleCalendarLink.ts / webcal.ts: per-event "Add to calendar" links and a feed-wide "Subscribe to this calendar" link - Both pages: collapsible category sections (default expanded), always feature the 2 most-recent events per category (upcoming or past) with the rest in a capped "Past events" list, a detail popup with a sticky CTA footer instead of inline register/recording links - Removes dead code: event-details.astro/EventDetails.tsx (already broken, fetched a non-existent API route), fetchNotionEvents/ fetchNotionEventById from notionClient.ts - Updates docs (EVENTS.md, NOTION.md, API.md, ENVIRONMENT.md, DEPLOYMENT.md, CLAUDE.md) and adds EVENTS_ICS_URL to .env.example
Deploying website with
|
| Latest commit: |
0990c1c
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://be2953e1.website-aun.pages.dev |
| Branch Preview URL: | https://feat-events-ics-migration.website-aun.pages.dev |
Events whose tags/title don't match a named category are now skipped entirely instead of falling into a generic "Others" section.
Featured cards get a badge overlay on the image; the compact past-list rows get a small inline badge for the rare case a category has more upcoming events than fit in the featured slots.
The card itself now carries a colored border + subtle tint for upcoming events, instead of relying solely on a small corner badge. Adds a dedicated "positive" design token (muted sage, derived from the existing warm palette) rather than a generic bright green, used consistently on both /events and /events-new.
…king popup layout
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
fetchNotionEvents) with a public ICS calendar feed from the Mattermost Events Calendar plugin, fetched and parsed server-side (src/store/eventsClient.ts) — no external ICS library, hand-rolled line unfolding/property parsing/unescaping./events(MUI) and/events-new(new design system) around category-grouped sections — In-Person Events, Occupied Tech Podcast, Community Calls, Roundtable, Book Club, and an "Others" catch-all — instead of a flat list. Each page keeps its own distinct visual language.src/utils/eventDescription.tsx) — headings, bold, rules, lists, auto-linked URLs — as real React nodes (nodangerouslySetInnerHTML), since the text is externally sourced.<url>" lines from descriptions (while preserving the link in the exported Google Calendar event's details).event-details.astro/EventDetails.tsx(already broken — fetched a non-existent/api/event-by-idroute) with a 301 redirect to/events, andfetchNotionEvents/fetchNotionEventByIdfromnotionClient.ts(other Notion-backed features — FAQ, ideas, agenda, signatories, community calls — are untouched).EVENTS.md,NOTION.md,API.md,ENVIRONMENT.md,DEPLOYMENT.md,CLAUDE.md;EVENTS_ICS_URLadded to.env.example.Test plan
EVENTS_ICS_URLin.dev.vars, runpnpm dev, and check/eventsand/events-new/event-details301-redirects to/eventspnpm checkandpnpm buildpass