Skip to content

feat(site): events page#7720

Open
aidankmcalister wants to merge 2 commits intomainfrom
feat/events-page
Open

feat(site): events page#7720
aidankmcalister wants to merge 2 commits intomainfrom
feat/events-page

Conversation

@aidankmcalister
Copy link
Member

@aidankmcalister aidankmcalister commented Mar 27, 2026

Summary by CodeRabbit

  • New Features
    • Added a dedicated Events page featuring Prisma Meetups, Sponsored Events, and Past Events sections
    • Event cards now display titles, descriptions, dates, and virtual event indicators
    • Updated image security policy to support event images from additional partner platforms

@vercel
Copy link

vercel bot commented Mar 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview, Comment Mar 27, 2026 2:01pm
docs Ready Ready Preview, Comment Mar 27, 2026 2:01pm
eclipse Ready Ready Preview, Comment Mar 27, 2026 2:01pm
site Ready Ready Preview, Comment Mar 27, 2026 2:01pm

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 27, 2026

Walkthrough

This pull request introduces a new events landing page feature by defining event data structures and types, adding a new Next.js page component to render multiple event sections, and updating the Content Security Policy to permit image assets from additional external sources.

Changes

Cohort / File(s) Summary
Content Security Policy Configuration
apps/site/next.config.mjs
Updated img-src CSP directive to remove trailing semicolon from existing https://raw.githubusercontent.com entry and added new allowlist for https://*.meetupstatic.com.
Event Data and Types
apps/site/src/app/events/events-data.ts
New module exporting three TypeScript types (Meetup, PastEvent, SponsoredEvent) and three hardcoded data arrays (meetups, sponsoredEvents, pastEvents) containing event metadata including titles, descriptions, images, links, dates, and virtual event flags.
Events Page Component
apps/site/src/app/events/page.tsx
New Next.js page component rendering an events landing page with metadata exports, hero section, upcoming events empty state, and three data-driven grids for meetups, sponsored events, and past events. Implements external link security attributes and next/image components.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~18 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(site): events page' directly and accurately summarizes the main change: adding a new events page to the site application.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@argos-ci
Copy link

argos-ci bot commented Mar 27, 2026

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected - Mar 27, 2026, 2:07 PM

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
apps/site/src/app/events/page.tsx (2)

64-99: Consider using a more stable key than meetup.title.

Using display text as a React key works fine when titles are guaranteed unique, but it's fragile if data changes. If two meetups ever share the same title, you'll get duplicate key warnings and potential rendering bugs.

A quick improvement would be to add an id field to the Meetup type, or use the array index as a fallback (though index keys aren't ideal for reorderable lists).

♻️ Suggested approach

Add an id field to the Meetup type in events-data.ts:

export type Meetup = {
  id: string;
  title: string;
  description: string;
  image: string;
  link: string;
};

Then use it as the key:

-            {meetups.map((meetup: Meetup) => (
-              <a
-                key={meetup.title}
+            {meetups.map((meetup: Meetup) => (
+              <a
+                key={meetup.id}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/site/src/app/events/page.tsx` around lines 64 - 99, The list is using
meetup.title as the React key, which is brittle; update the Meetup type (in
events-data.ts) to include a unique id (e.g., id: string) and populate each
meetup entry with that id, then change the rendering in page.tsx where
meetups.map is used to use meetup.id as the key (keep a fallback to the array
index only if id is missing, e.g., key={meetup.id ?? `meetup-${i}`}), ensuring
all references to the Meetup shape are updated accordingly.

74-80: Inconsistent unoptimized prop usage on Image components.

The meetup images (line 78) have unoptimized, but sponsored event images (line 128) don't. Since your next.config.mjs sets images: { unoptimized: true } globally, both work fine—but the inconsistency may confuse future maintainers. Either remove the explicit prop everywhere (rely on config) or add it to all external images for clarity.

Also applies to: 124-129

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/site/src/app/events/page.tsx` around lines 74 - 80, Inconsistent use of
the Image unoptimized prop causes confusion; remove the explicit unoptimized
prop from all Next.js <Image> usages in this file (the Image rendering
meetup.image and the Image used for sponsored event images) and rely on the
global images: { unoptimized: true } setting in next.config.mjs so all Image
components are consistent and not redundant.
apps/site/src/app/events/events-data.ts (1)

72-121: Consider using ISO date strings for future extensibility.

The human-readable date format ("June 15–16, 2022") works great for display, but if you ever need to sort events by date or filter by year, you'd need to parse these strings. Consider storing dates in ISO format (e.g., "2022-06-15") alongside or instead, then format for display in the component.

This is purely forward-looking—current implementation works fine for a static list.

♻️ Example approach
export type PastEvent = {
  name: string;
  startDate: string; // ISO format: "2022-06-15"
  endDate?: string;  // ISO format for multi-day events
  displayDate: string; // Human-readable: "June 15–16, 2022"
  description: string;
  link: string;
  virtual: boolean;
};
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/site/src/app/events/events-data.ts` around lines 72 - 121, Change the
PastEvent shape to include ISO date fields (e.g., add startDate: string and
optional endDate?: string) and keep or rename the existing human-readable string
to displayDate for rendering; update the pastEvents array entries (objects in
events-data.ts) to populate startDate (and endDate for multi-day events) with
ISO strings and set displayDate to the current human-readable values; update any
consumers that reference PastEvent (components or utilities) to use
startDate/endDate for sorting/filtering and displayDate for UI rendering.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@apps/site/src/app/events/events-data.ts`:
- Around line 72-121: Change the PastEvent shape to include ISO date fields
(e.g., add startDate: string and optional endDate?: string) and keep or rename
the existing human-readable string to displayDate for rendering; update the
pastEvents array entries (objects in events-data.ts) to populate startDate (and
endDate for multi-day events) with ISO strings and set displayDate to the
current human-readable values; update any consumers that reference PastEvent
(components or utilities) to use startDate/endDate for sorting/filtering and
displayDate for UI rendering.

In `@apps/site/src/app/events/page.tsx`:
- Around line 64-99: The list is using meetup.title as the React key, which is
brittle; update the Meetup type (in events-data.ts) to include a unique id
(e.g., id: string) and populate each meetup entry with that id, then change the
rendering in page.tsx where meetups.map is used to use meetup.id as the key
(keep a fallback to the array index only if id is missing, e.g., key={meetup.id
?? `meetup-${i}`}), ensuring all references to the Meetup shape are updated
accordingly.
- Around line 74-80: Inconsistent use of the Image unoptimized prop causes
confusion; remove the explicit unoptimized prop from all Next.js <Image> usages
in this file (the Image rendering meetup.image and the Image used for sponsored
event images) and rely on the global images: { unoptimized: true } setting in
next.config.mjs so all Image components are consistent and not redundant.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cd95cca1-bc83-42bb-9292-c3a89b84d97a

📥 Commits

Reviewing files that changed from the base of the PR and between 6f79795 and 401440a.

⛔ Files ignored due to path filters (4)
  • apps/site/public/icons/confs/internationaljs-conf.jpeg is excluded by !**/*.jpeg
  • apps/site/public/icons/confs/jamstack-conf.jpeg is excluded by !**/*.jpeg
  • apps/site/public/icons/confs/nextjs-conf.jpeg is excluded by !**/*.jpeg
  • apps/site/public/icons/confs/react-day.jpeg is excluded by !**/*.jpeg
📒 Files selected for processing (3)
  • apps/site/next.config.mjs
  • apps/site/src/app/events/events-data.ts
  • apps/site/src/app/events/page.tsx

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.

2 participants