486bbc8cf823534cb47ea7e696e4637b967fb678
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
jasonwoltje.com — Professional Website
Personal brand + portfolio site for Jason Woltje. Payload CMS 3 on Next.js 16, Postgres 17, deployed to Docker Swarm (w-docker0) behind Traefik.
Stack
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| CMS | Payload 3 (Next-integrated, admin at /admin) |
| DB | PostgreSQL 17 |
| Styling | Tailwind v3 (ported from stitch design tokens) |
| Fonts | Space Grotesk (display/labels) + Inter (body), self-hosted via next/font |
| Media | Local volume (migratable to S3/MinIO via Payload adapter) |
| Analytics | Umami (self-hosted) |
| CAPTCHA | Cloudflare Turnstile |
| Registry | git.mosaicstack.dev container packages (immutable sha-* tags) |
| CI | Woodpecker CI + Kaniko |
| Deploy | Portainer stack on w-docker0 (Swarm) |
| Ingress | Edge Traefik (TLS) → per-swarm Traefik (entrypoints=web) |
Repository layout
professional-website/
├── src/ # Next.js app + Payload config
├── public/ # static assets
├── design-samples/ # stitch design reference (HTML + DESIGN.md)
├── images/ # source headshots (pre-upload originals)
├── docs/
│ ├── PRD.md # product requirements
│ ├── TASKS.md # execution tracking
│ └── scratchpads/ # per-task working notes
├── Dockerfile # multi-stage build
├── docker-compose.swarm.yml # Portainer stack (prod)
├── .woodpecker/web.yml # CI pipeline
└── .env.example
Local dev
pnpm install
cp .env.example .env # fill in local values
pnpm dev # Next + Payload on http://localhost:3000
Payload admin: http://localhost:3000/admin
Documentation
docs/PRD.md— product requirements, scope, architecture decisionsdocs/TASKS.md— milestone + task trackingdesign-samples/stitch_jasonwoltje.com/silicon_ethos/DESIGN.md— design system reference
Deployment
Container images are built by Woodpecker and pushed to git.mosaicstack.dev/jason.woltje/professional-website:sha-<short>. The Portainer stack references immutable tags — latest is never used as a deploy reference.
See docs/PRD.md §Infrastructure for the full deploy runbook.
Description
Languages
TypeScript
69.2%
HTML
28.3%
CSS
1.2%
Dockerfile
0.9%
JavaScript
0.2%
Other
0.2%