Files
professional-website/README.md
Jason Woltje c800bef739 chore: bootstrap repo with PRD, tasks, design samples, and Mosaic scaffolding
Personal professional website for jasonwoltje.com, built on Payload CMS 3 +
Next.js 16 and deployed to w-docker0 (Docker Swarm) behind the existing
MosaicStack edge Traefik. Establishes the delivery contract before any
scaffold work begins:

- docs/PRD.md — stack, content model, routing, design system, CI, infra,
  acceptance criteria, assumptions, and escalation log
- docs/TASKS.md — milestone breakdown 0.0.1 → 0.1.0 MVP
- README.md, LICENSE (All Rights Reserved), .gitignore
- design-samples/ — stitch "Technical Editorial" mockups + DESIGN.md tokens
- images/ — source headshots (to be imported into Payload media on seed)
- .mosaic/ — orchestrator scaffolding (quality rails, repo hooks)

Scaffold (Next.js + Payload init) ships on feat/scaffold in a follow-up PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 21:05:06 -05:00

2.4 KiB

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

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.