[CSSG-12]: Add global navbar and public pages (Home, About, Contact, Projects)#8
[CSSG-12]: Add global navbar and public pages (Home, About, Contact, Projects)#8youzThomas wants to merge 14 commits intomainfrom
Conversation
pmoharana-cmd
left a comment
There was a problem hiding this comment.
Review focused on keeping pages smaller, reusing components, and passing data via props. Inline comments are on the specific files/lines below.
| import Image from "next/image"; | ||
| import Link from "next/link"; | ||
|
|
||
| const navLinks = [ |
There was a problem hiding this comment.
Component reuse / props: Consider accepting nav links via an optional prop (e.g. links?: { href: string; label: string }[]) with a default to the current list. That keeps the navbar reusable and testable if links ever differ by context (e.g. logged-in vs public).
| { href: "/contact", label: "Contact" }, | ||
| ]; | ||
|
|
||
| export function PublicNavbar() { |
There was a problem hiding this comment.
Props: PublicNavbar currently takes no props. Adding optional props for links and possibly auth CTAs (e.g. showAuth?: boolean or loginHref / signupHref) would make the component more flexible and ensure call sites pass the right data.
There was a problem hiding this comment.
Just for the first iteration make a type that has href and label in the object type
|
|
||
| export default function AboutPage() { | ||
| return ( | ||
| <main className="relative min-h-[calc(100vh)] overflow-hidden bg-[radial-gradient(circle_at_center,#2f6f9f_0%,#184566_40%,#081c2e_100%)]"> |
There was a problem hiding this comment.
Avoid large pages / reuse: This page shell (gradient background + overlay) is duplicated on Contact and Projects. Consider extracting a PublicPageLayout (or PublicPageShell) that renders the gradient + overlay and accepts children (and optionally className), then use it on all four public pages so the shell lives in one place.
| <div className="relative mx-auto max-w-6xl px-6 py-20 text-white"> | ||
| <section className="rounded-4xl bg-white/92 border border-cyan-100/15 px-6 py-10 text-slate-900 shadow-[0_25px_90px_rgba(4,18,33,0.22)] md:px-12 md:py-14"> | ||
| <h1 className="font-mono text-2xl font-bold tracking-tight md:text-3xl">Our Goals</h1> | ||
|
|
There was a problem hiding this comment.
Reuse: The numbered goal block is a repeated structure. Consider a small GoalItem (or generic numbered content block) that takes index and children so the page stays thin and the pattern is reusable.
|
|
||
| <section className="rounded-4xl bg-white/92 border border-cyan-100/15 px-6 py-10 text-slate-900 shadow-[0_25px_90px_rgba(4,18,33,0.22)] md:px-12 md:py-14"> | ||
| <h2 className="font-mono text-2xl font-bold tracking-tight md:text-3xl">Our Structure</h2> | ||
| <p className="mt-4 max-w-3xl text-sm text-slate-500 md:text-lg"> |
There was a problem hiding this comment.
Reuse: This card pattern (rounded border, title, icon, description) is similar to Contact’s info cards and Projects’ project cards. Consider a shared PublicCard or SectionCard with props like title, description (or children), and optional icon so styling and structure are defined once and each page passes the right props.
| </svg> | ||
| ), | ||
| }, | ||
| ]; |
There was a problem hiding this comment.
Reuse: Same page shell as About and Projects (gradient + overlay). Consider using a shared PublicPageLayout component so this isn’t duplicated in three files.
| <h1 className="text-3xl font-bold text-[#63e8c7] md:text-4xl">Contact Us</h1> | ||
| <p className="mt-4 max-w-3xl text-base leading-7 text-white/85 md:text-lg"> | ||
| Interested in partnering with CS + Social Good or joining our team? Reach out and we can | ||
| connect you with the right people. |
There was a problem hiding this comment.
Reuse: These article cards share the same visual pattern as About’s structure cards and Projects’ project cards. A shared card component (e.g. PublicCard) with title and children/description would reduce duplication and ensure consistent props at each call site.
| return ( | ||
| <main className="relative min-h-[calc(100vh)] overflow-hidden bg-[radial-gradient(circle_at_center,#2f6f9f_0%,#184566_40%,#081c2e_100%)]"> | ||
| <div className="pointer-events-none absolute inset-0 shadow-[inset_0_0_180px_rgba(0,0,0,0.55)]" /> | ||
|
|
There was a problem hiding this comment.
Reuse: Same gradient + overlay shell as About and Contact. Consider a PublicPageLayout component used across all public pages so the shell is defined once.
| {projects.map((project) => ( | ||
| <article | ||
| key={project.title} | ||
| className="rounded-2xl border border-cyan-100/15 bg-cyan-100/5 p-6" |
There was a problem hiding this comment.
Reuse: This card structure (rounded border, title, description) matches Contact and About. Consider a shared PublicCard or SectionCard with title and description (or children) props so all pages use the same component and pass the correct data.
| }; | ||
|
|
||
| export default function Home() { | ||
| return ( |
There was a problem hiding this comment.
Consistency: Home uses the same gradient + overlay as About, Contact, and Projects. For consistency and to avoid duplication, consider using the same PublicPageLayout (or PublicPageShell) here so the background and overlay are defined in one place.
Linear
Issue: CSSG-12
What changes
Why it's being done
This PR implements the public-facing frontend pages and shared navigation required by CSSG-12. It also replaces placeholder content so the site is closer to the current CSSG branding and ready for team review.
Summary
This PR builds the foundational public website experience for CSSG, including the shared navbar and the four main public pages. It also updates page content and styling to better reflect the current organization site and reviewed requirements.
How to verify
bun run lint:all,bun run format:check:all,bun run test:all)cd apps/frontend && bun run buildcd apps/frontend && bun run dev/,/about,/contact, and/projectsNotes
/loginand/signupremain placeholders until the auth routes from the other team are merged.bun run lintandbun run build.