A Next.js (App Router) implementation of techtankto.com, Toronto's volunteer-run tech community website. The redesign moves away from a flat "link-tree" layout toward a conversion-oriented onboarding hub that funnels visitors into specific roles β attendee, speaker, host, sponsor, or volunteer.
Specs live in prd/; application code lives in app/.
The initial UI scaffold was generated from the PRD via v0 β
original prompt and generation.
- Next.js 16 (App Router, Turbopack)
- React 19 + TypeScript
- Tailwind CSS 4
- shadcn/ui component pattern (
components.jsonconfig) - class-variance-authority (CVA) for type-safe component variants
- Radix UI primitives (via
@radix-ui/react-slot) - lucide-react for icons
- Inter + Space Grotesk via
next/font - pnpm 10 for package management
Requirements: Node.js 20+ and pnpm 10.
pnpm install
pnpm devThen open http://localhost:3000.
| Command | What it does |
|---|---|
pnpm dev |
Start the dev server with Turbopack |
pnpm build |
Production build |
pnpm start |
Serve the production build |
pnpm lint |
Run Next.js' linter |
The tree below doubles as a route map β each directory under app/ is a
route, annotated with its purpose.
.
βββ app/ # Next.js App Router routes
β βββ layout.tsx # Root layout (header, footer, fonts, SEO)
β βββ page.tsx # / Social-proof-driven home
β βββ about/ # /about Values & community manifesto
β βββ events/ # /events Upcoming (Luma) + past event timeline
β βββ get-involved/ # /get-involved Onboarding hub (shared layout)
β β βββ speaker/ # /speaker Speaker intake
β β βββ host/ # /host Host intake
β β βββ sponsor/ # /sponsor Sponsor intake
β β βββ volunteer/ # /volunteer Volunteer intake
β βββ legal/ # /legal Legal documents (shared layout)
β β βββ terms-of-service/ # /terms-of-service
β β βββ privacy-policy/ # /privacy-policy
β β βββ code-of-conduct/ # /code-of-conduct
β βββ resources/ # /resources
β β βββ media-kit/ # /resources/media-kit Brand assets + fast facts
β β βββ design-system/ # /resources/design-system Brand guidelines β design tokens & component reference
β βββ globals.css
βββ components/
β βββ layout/ # Header, Footer
β βββ ui/ # Reusable UI (buttons, cards, sections, etc.)
βββ constants/ # Structured data (events, sponsors, social links)
βββ prd/ # Product requirements documents (specs)
βββ public/ # Static assets (images, downloads, social media dumps)
βββ next.config.ts
βββ vercel.json # Vercel deployment config (noindex header)
βββ tsconfig.json
See prd/PRD.md for the full route map, shared-layout
conventions, and per-page content requirements.
The site deploys to Vercel. Search engine indexing is
disabled via an X-Robots-Tag: noindex header in vercel.json
β remove that header before launching to production.
See CONTRIBUTING.md for contribution guidelines.
- Read
prd/PRD.mdbefore making structural changes β it defines the Info Architecture, brand, and content conventions.- AI agents only: also read
CLAUDE.mdfor agent-specific working conventions and constraints.
- AI agents only: also read
- When adding or renaming a route, update both the route table in
prd/PRD.mdΒ§2.1 and the corresponding spec inprd/pages/. - Keep one dominant CTA per page. Role pages under
/get-involved/*must end in an intake action (email us).
MIT β see the file for details.