Skip to content

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

Merged
pmoharana-cmd merged 15 commits intomainfrom
homepage-aboutus
Mar 16, 2026
Merged

[CSSG-12]: Add global navbar and public pages (Home, About, Contact, Projects)#8
pmoharana-cmd merged 15 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.

@pmoharana-cmd pmoharana-cmd merged commit 8d69929 into main Mar 16, 2026
1 check passed
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