diff --git a/src/components/home-sections/events-section.tsx b/src/components/home-sections/events-section.tsx
index 993dc16..4ff95c5 100644
--- a/src/components/home-sections/events-section.tsx
+++ b/src/components/home-sections/events-section.tsx
@@ -1,15 +1,112 @@
import { events, communityLinks } from "@/src/lib/constants";
import { Card } from "@/src/components/ui/card";
import { Button } from "@/src/components/ui/button";
-import { Calendar, MapPin, Users, Clock } from "lucide-react";
+import { Badge } from "@/src/components/ui/badge";
+import { Calendar, MapPin, Users, Clock, ArrowUpRight } from "lucide-react";
import Link from "next/link";
+type CommunityEvent = (typeof events)[number];
+
+const upcomingEvents = events.filter((e) => e.status === "upcoming");
+const pastEvents = events.filter((e) => e.status === "past");
+
+function EventMeta({ event }: { event: CommunityEvent }) {
+ const isPast = event.status === "past";
+ return (
+
+
+
+ {event.date}
+
+ {event.time && (
+
+
+ {event.time}
+
+ )}
+ {event.location && (
+
+
+ {event.location}
+
+ )}
+ {event.attendees > 0 && (
+
+
+
+ {event.attendees} {isPast ? "attended" : "going"}
+
+
+ )}
+
+ );
+}
+
+function UpcomingCard({ event }: { event: CommunityEvent }) {
+ return (
+
+
+
+
{event.title}
+
{event.description}
+
+
+
+
+
+
+
+ );
+}
+
+function PastCard({ event }: { event: CommunityEvent }) {
+ return (
+
+
+
+
+
+ {event.title}
+
+
+ Past
+
+
+
{event.description}
+
+
+ {event.recapUrl ? (
+
+
+
+ ) : null}
+
+
+ );
+}
+
export function EventsSection() {
return (
{/* Section header */}
-
+
Events & Meetups
@@ -19,52 +116,52 @@ export function EventsSection() {
- {/* Events grid */}
-
- {events.map((event) => (
-
-
- {/* Event info */}
-
-
- {event.title}
-
-
{event.description}
-
- {/* Details */}
-
-
-
- {event.date}
-
-
-
- {event.time}
-
-
-
- {event.location}
-
-
-
- {event.attendees} attending
-
-
-
-
- {/* CTA */}
-
-
-
-
+ {/* Upcoming */}
+
+
+
+ Upcoming Events
+
+ {upcomingEvents.length > 0 && (
+
+ {upcomingEvents.length}
+
+ )}
+
+ {upcomingEvents.length > 0 ? (
+
+ {upcomingEvents.map((event) => (
+
+ ))}
+
+ ) : (
+
+
+ No upcoming events scheduled right now.{" "}
+
+ Join the community
+ {" "}
+ to be the first to know.
+
- ))}
+ )}
+
+ {/* Past */}
+ {pastEvents.length > 0 && (
+
+
Past Events
+
+ {pastEvents.map((event) => (
+
+ ))}
+
+
+ )}
);
diff --git a/src/components/home-sections/team-section.tsx b/src/components/home-sections/team-section.tsx
index 1d3dd21..28d571c 100644
--- a/src/components/home-sections/team-section.tsx
+++ b/src/components/home-sections/team-section.tsx
@@ -1,4 +1,4 @@
-import { teamMembers, communityLinks } from "@/src/lib/constants";
+import { teamMembers } from "@/src/lib/constants";
import { Card } from "@/src/components/ui/card";
import Image from "next/image";
import { Github, Linkedin, Twitter } from "lucide-react";
@@ -76,27 +76,6 @@ export function TeamSection() {
))}
-
- {/* Join the team CTA */}
-
-
-
- Want to Join Our Team?
-
-
- We're always looking for passionate individuals to help grow
- the Django community in Rwanda.
-
-
- Get Involved
-
-
-
);
diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index 5d0df7c..37b3ec5 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -19,7 +19,7 @@ export const navigationItems = [
export const communityLinks = {
// Primary "Join Community" entry point — drives every Join/Register CTA
// (header, hero, team, events, footer "Get Involved" + "Join Us").
- whatsapp: "https://chat.whatsapp.com/your-invite-code", // TODO: real WhatsApp invite link
+ whatsapp: "https://chat.whatsapp.com/GvIF9Mw1E2ZBf2S5wazfOo?mode=gi_t",
// Social / code
github: "https://github.com/djangorwanda",
@@ -87,24 +87,39 @@ export const workshops = [
},
]
+// Events. `status` drives the Upcoming vs Past subsections.
+// Optional fields render only when set: `time`, `location`, `attendees` (>0),
+// `registerUrl` (upcoming — falls back to the WhatsApp community), and
+// `recapUrl` (past — links a recording / photos / writeup).
export const events = [
+ // ── Upcoming ────────────────────────────────────────────────────────────
{
id: 1,
- title: "Monthly Meetup - Kigali",
- date: "Every 2nd Saturday",
+ title: "Python/Django July Meetup 2026",
+ date: "Friday, 24 July 2026",
time: "2:00 PM",
- location: "Kigali Innovation Hub",
- description: "Join fellow Django developers for networking, knowledge sharing, and coffee.",
- attendees: 45,
+ location: "GIZ Digital Transformation Center, Rwanda",
+ description:
+ "A community meetup for Python and Django developers — talks, networking, and hands-on sessions.",
+ status: "upcoming",
+ attendees: 0,
+ registerUrl:
+ "https://docs.google.com/forms/d/e/1FAIpQLSetBc2-fgyo1IRR3_8hQ1mMDc-LCIwD5fWv7FxcsfXUTrf2Ww/viewform",
+ recapUrl: "",
},
+ // ── Past ────────────────────────────────────────────────────────────────
{
id: 2,
- title: "Django Bootcamp - Q1 2026",
- date: "January 15 - March 15",
- time: "Flexible",
- location: "Online + In-person",
- description: "Intensive bootcamp to launch your Django journey and build real projects.",
- attendees: 200,
+ title: "Python & Django Rwanda Bootcamp",
+ date: "February – April 2026",
+ time: "",
+ location: "",
+ description:
+ "A 3-month intensive bootcamp covering Python and Django through hands-on, real-world projects.",
+ status: "past",
+ attendees: 0,
+ registerUrl: "",
+ recapUrl: "", // TODO: link recording / photos / writeup
},
]