462d9382970288a36d0d0da64bd92d73b6991773
Initial app scaffold wired end-to-end: Payload 3.82 CMS integrated with Next 16.2 App Router (standalone output), PostgreSQL 17 adapter, Lexical rich text, Tailwind 3 with Material 3 token palette ported from the stitch technical- editorial design, self-hosted Space Grotesk + Inter via next/font, and lucide-react icons. Admin lives at /admin, REST/GraphQL at /api/*, and /api/health returns build SHA/REV for deploy verification. Seven collections (Users, Media, Categories, Projects, Posts, Gear, ContactSubmissions) and six globals (Home, About, Contact, Resume, Navigation, SEO) model the content outlined in docs/PRD.md. Multi-stage Dockerfile builds a non-root standalone runner; Woodpecker pipeline lints, typechecks, builds, audits, builds with Kaniko to git.mosaicstack.dev, scans with Trivy, and links the package. Swarm compose mirrors the mosaic-stack-website Traefik entrypoints=web pattern with www->apex redirect and immutable WEB_IMAGE_TAG. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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%