Skip to content

[CSSG-12]: Add global navbar and public pages (Home, About, Contact, Projects)#8

Open
youzThomas wants to merge 14 commits intomainfrom
homepage-aboutus
Open

[CSSG-12]: Add global navbar and public pages (Home, About, Contact, Projects)#8
youzThomas wants to merge 14 commits intomainfrom
homepage-aboutus

Conversation

@youzThomas
Copy link
Collaborator

Linear

Issue: CSSG-12

What changes

  • Added the shared public-site navigation and page shell
  • Built the core public-facing pages for Home, About, Contact, and Projects
  • Replaced placeholder content with updated CSSG-specific content and contact details
  • Refined styling, spacing, metadata, and utility-class cleanup across the frontend

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

  • Lint, format, and tests pass locally (bun run lint:all, bun run format:check:all, bun run test:all)
  • Run cd apps/frontend && bun run build
  • Run cd apps/frontend && bun run dev
  • Review /, /about, /contact, and /projects
  • Confirm the navbar appears across public pages and the links/layout render correctly
  • Confirm the About, Contact, and Projects pages show the updated non-placeholder content

Notes

  • /login and /signup remain placeholders until the auth routes from the other team are merged.
  • I validated the frontend app with bun run lint and bun run build.

@youzThomas youzThomas self-assigned this Mar 10, 2026
@linear
Copy link

linear bot commented Mar 10, 2026

Copy link
Member

@pmoharana-cmd pmoharana-cmd left a comment

Choose a reason for hiding this comment

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

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 = [
Copy link
Member

Choose a reason for hiding this comment

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

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() {
Copy link
Member

Choose a reason for hiding this comment

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

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.

Copy link
Member

Choose a reason for hiding this comment

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

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%)]">
Copy link
Member

Choose a reason for hiding this comment

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

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>

Copy link
Member

Choose a reason for hiding this comment

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

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">
Copy link
Member

Choose a reason for hiding this comment

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

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>
),
},
];
Copy link
Member

Choose a reason for hiding this comment

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

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.
Copy link
Member

Choose a reason for hiding this comment

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

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)]" />

Copy link
Member

Choose a reason for hiding this comment

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

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"
Copy link
Member

Choose a reason for hiding this comment

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

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 (
Copy link
Member

Choose a reason for hiding this comment

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

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.

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.

3 participants