2 — Architecture¶
App Router¶
src/app/
layout.tsx # shell, fonts, global metadata, org/website JSON-LD
page.tsx # landing (revalidate 3600)
projects/page.tsx
projects/[slug]/page.tsx # SSG + revalidate 3600 + README
team/page.tsx
contact/page.tsx
sitemap.ts
robots.ts
image-sitemap.xml/route.ts
avatars/[login]/route.ts # same-origin GitHub avatar proxy
not-found.tsx
layout.tsx wraps Header → {children} → TerminalManager → Footer.
Data (src/lib/)¶
| File | Role |
|---|---|
site.ts |
URL, brand, email, helpers |
projects.ts |
Project list + types |
project-readme.ts |
GitHub README fetch + URL normalize |
team.ts |
Org members API |
faq.ts |
FAQ copy + schema source |
seo-images.ts |
Image titles, OG helpers, image sitemap XML |
README pipeline¶
getProjectReadme(project)useslinkLive→ owner/repo- Prefer
raw.githubusercontent.com(main/master) - Fallback: GitHub Contents API (
GITHUB_TOKENoptional) ProjectReadmeViewrenders markdown (GFM + safe HTML)- Missing README → nothing rendered
Styling¶
src/app/styles/globals.css — CSS variables under :root, Tailwind v4 @import / @theme.
Terminal¶
Client-only overlay: src/components/terminal/. Commands in Commands.ts.