Jason Woltje 7d125fe7d4
All checks were successful
ci/woodpecker/push/web Pipeline was successful
fix(admin): generate Lexical import map so richText editors render
The importMap.js was an empty stub, causing all Lexical richText fields
(bio, post body, etc.) to silently not render in the admin UI. Reverts
the unnecessary collapsible wrapper on About bio.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 21:28:02 -05:00

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.

Description
Jason Woltje professional website — Payload CMS 3 + Next.js 16
Readme 3.3 MiB
Languages
TypeScript 69.2%
HTML 28.3%
CSS 1.2%
Dockerfile 0.9%
JavaScript 0.2%
Other 0.2%