feat(site): port stitch design system + seed-ready content model
Ports the "Technical Editorial" design sample into real TSX wired to Payload globals/collections. Home/About/Projects (list+detail)/Contact pages render against Payload data. Expands schemas (Home principles, About timeline/skills/gear, Contact channels) to cover the full design surface. Adds seed script that populates realistic AI-drafted content for first boot. Defers writing/resume routes per scope cut. - Design tokens: Material-3 palette + Space Grotesk/Inter typography scale + dot-grid + glassmorphism utilities - Shared layout: Nav, Footer, StatusTerminal, GridOverlay, Button, TechChip in src/components/site - Schemas: expand 5 globals + 6 collections; add auto-slug hook - Seed: scripts/seed.ts — idempotent upsert for media, categories, 6 projects, 8 gear, 3 posts, 5 globals; generates placeholder admin - Contact: form + /api/contact route with optional Turnstile verify - Rename TURNSTILE_SITE_KEY -> NEXT_PUBLIC_TURNSTILE_SITE_KEY (client) - Remove dead src/components/SiteHeader|SiteFooter|StatusTerminal
This commit is contained in:
60
src/components/site/README.md
Normal file
60
src/components/site/README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Site Components — Contract for Page Subagents
|
||||
|
||||
## Imports
|
||||
|
||||
```ts
|
||||
import { Nav, Footer, StatusTerminal, GridOverlay, Button, TechChip } from "@/components/site";
|
||||
```
|
||||
|
||||
## Rules
|
||||
|
||||
- **Do NOT** redefine `<Nav>` or `<Footer>` in page files. They are wired in `src/app/(frontend)/layout.tsx`.
|
||||
- `<StatusTerminal>` reads `NEXT_PUBLIC_BUILD_SHA` and `NEXT_PUBLIC_BUILD_REV` at build time. Accept `location` and `status` props to override defaults.
|
||||
- `<GridOverlay>` is `position: absolute` — wrap parent in `relative overflow-hidden`.
|
||||
|
||||
## Color Token Classes
|
||||
|
||||
| Token | Tailwind class |
|
||||
|---|---|
|
||||
| Background | `bg-background` |
|
||||
| Primary accent | `text-primary`, `bg-primary` |
|
||||
| Secondary | `text-secondary` |
|
||||
| Tertiary (terminal green) | `text-tertiary` |
|
||||
| Surface base | `bg-surface-container` |
|
||||
| Surface low | `bg-surface-container-low` |
|
||||
| Surface high | `bg-surface-container-high` |
|
||||
| Surface highest | `bg-surface-container-highest` |
|
||||
| Surface lowest | `bg-surface-container-lowest` |
|
||||
| Underscore aliases | `bg-surface_container_high`, `text-on_surface`, `text-outline_variant` |
|
||||
| Text default | `text-on-surface` |
|
||||
| Text muted | `text-on-surface-variant` |
|
||||
| Border ghost | `border-outline-variant/15` |
|
||||
|
||||
## Typography Utility Classes
|
||||
|
||||
| Class | Usage |
|
||||
|---|---|
|
||||
| `.display-lg` | Hero headline (H1) |
|
||||
| `.display-md` | Sub-hero or section hero |
|
||||
| `.display-sm` | Large section titles |
|
||||
| `.headline-lg` | Section headings (H2) |
|
||||
| `.title-lg` | Card / module titles (H3) |
|
||||
| `.body-lg` | Primary body copy |
|
||||
| `.body-md` | Secondary / card body |
|
||||
| `.label-md` | ALL CAPS metadata labels |
|
||||
| `.label-sm` | Tiny ALL CAPS technical labels, chips |
|
||||
|
||||
## Button Variants
|
||||
|
||||
```tsx
|
||||
<Button variant="primary">CTA Label</Button>
|
||||
<Button variant="secondary">Secondary</Button>
|
||||
<Button variant="ghost">Ghost</Button>
|
||||
```
|
||||
|
||||
## Design Rules (from DESIGN.md)
|
||||
|
||||
- No `border-1 solid` at 100% opacity. Use `border-outline-variant/15` or tonal shifts.
|
||||
- No `rounded-full` on cards. Use `rounded-md` (0.375rem) or `rounded-sm`.
|
||||
- No drop shadows on cards sitting on `bg-background`. Use `bg-surface-container-high` lift.
|
||||
- Glass surfaces: add class `glass` (backdrop-blur-24px + semi-transparent surface_bright).
|
||||
Reference in New Issue
Block a user