From 3f77240ebabae77f50056b710afd92f4d5b77bba Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 26 May 2026 23:29:03 +0100 Subject: [PATCH] feat(home): add scholarship alumni spotlight section --- src/pages/Home.test.tsx | 38 +++++++++++++++++ src/pages/Home.tsx | 90 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 src/pages/Home.test.tsx diff --git a/src/pages/Home.test.tsx b/src/pages/Home.test.tsx new file mode 100644 index 00000000..3e699631 --- /dev/null +++ b/src/pages/Home.test.tsx @@ -0,0 +1,38 @@ +import { describe, expect, it, vi } from "vitest" +import { MemoryRouter } from "react-router-dom" +import Home from "./Home" +import { render, screen } from "../test/setup" + +vi.mock("@stellar/design-system", () => ({ + Icon: { + Lightbulb01: () => null, + Trophy01: () => null, + Star01: () => null, + Users01: () => null, + }, +})) + +vi.mock("../hooks/useCourses", () => ({ + useEnrolledCourses: () => ({ + enrolledCourses: [], + isLoading: false, + }), +})) + +describe("Home", () => { + it("renders scholarship alumni spotlight content", () => { + render( + + + , + ) + + expect( + screen.getByRole("heading", { name: "Scholarship Alumni Spotlight" }), + ).toBeInTheDocument() + expect(screen.getByText("Amina Diallo")).toBeInTheDocument() + expect(screen.getByText("Diego Alvarez")).toBeInTheDocument() + expect(screen.getByText("Grace Mwangi")).toBeInTheDocument() + expect(screen.getAllByText(/Class of 2025/i)).toHaveLength(2) + }) +}) diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 8eaf8b9c..b7d040b9 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -62,6 +62,36 @@ const FEATURES = [ }, ] +const ALUMNI_SPOTLIGHT = [ + { + name: "Amina Diallo", + cohort: "Backend Engineering Cohort", + year: "2025", + scholarshipAmount: "4,000 USDC", + outcome: "Now shipping smart contract audits at an African fintech startup.", + quote: + "The milestone-based scholarship made me accountable and gave me runway to focus on mastery.", + }, + { + name: "Diego Alvarez", + cohort: "Frontend Product Cohort", + year: "2025", + scholarshipAmount: "3,200 USDC", + outcome: "Built an open-source design system now used by three community DAOs.", + quote: + "LearnVault turned my portfolio into verified on-chain proof that employers trusted instantly.", + }, + { + name: "Grace Mwangi", + cohort: "Data + AI Cohort", + year: "2024", + scholarshipAmount: "5,100 USDC", + outcome: "Leading analytics automation for a public health nonprofit.", + quote: + "The alumni network and DAO mentors gave me feedback loops I couldn't get anywhere else.", + }, +] + const Home: React.FC = () => { const { enrolledCourses, isLoading: isLoadingCourses } = useEnrolledCourses() @@ -238,8 +268,66 @@ const Home: React.FC = () => { + {/* ── SCHOLARSHIP ALUMNI SPOTLIGHT ────────────────────────────── */} +
+
+ +
+

Scholarship Alumni Spotlight

+

+ Stories from scholars who completed tracks, secured milestone funding, + and are now building real-world impact. +

+
+
+ +
+ {ALUMNI_SPOTLIGHT.map( + ({ + name, + cohort, + year, + scholarshipAmount, + outcome, + quote, + }) => ( +
+
+
+

{name}

+

+ {cohort} +

+
+ + Class of {year} + +
+ +
+ “{quote}” +
+ +
+

+ Scholarship:{" "} + {scholarshipAmount} +

+

+ Outcome: {outcome} +

+
+
+ ), + )} +
+
+ {/* ── CTA BANNER ───────────────────────────────────────────────── */} -
+

Join the open-source sprint

LearnVault is built in the open. Pick an issue, ship a feature, and