feat(events): migrate events from Notion to ICS calendar feed, redesign category UI - #515
Open
mohanadft wants to merge 13 commits into
Open
feat(events): migrate events from Notion to ICS calendar feed, redesign category UI#515mohanadft wants to merge 13 commits into
mohanadft wants to merge 13 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: |
0be58db
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://b2ec7584.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
…e on both events pages Splits the events page into a merged, 60-day-capped chronological Upcoming Events list and a per-category Past Events archive rendered as a uniform-card carousel, replacing the old featured/hidden split. Adds category permalink buttons, strips redundant "Category: " title prefixes, fixes markdown link/italic rendering in descriptions, and removes Add to Calendar / Watch Recording. Mirrored on the legacy /events page using its own MUI color palette.
…nk, cleanup Adds maxresdefault->hqdefault fallback (with placeholder detection) for Community Calls previews via a shared EventPreviewImage component, and restores the recording link as a minimal past-event CTA fallback. Also removes dead code found in an audit pass: unused EventSection.upcoming field, unused isEventPast(), and de-dupes carousel scroll logic and date/context helpers shared between the legacy and new-design events pages.
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