dbradwood.com v1: from scaffold to repeatable publishing pipeline
Built a private, code-first executive site framework with design tokens + MDX content pipeline so publishing becomes a file-based, validated process (not a one-off project).
Outcome
- A working site framework with consistent layout, metadata, and SEO plumbing.
- A repeatable publishing pipeline: drop an
.mdxfile intocontent/and it appears in the site. - Draft safety: drafts can live in the repo without being indexed/published.
Starting state
- Blank Next.js scaffold.
- Dev environment instability risk (multiple dev instances, stale locks, port collisions).
- No content model; pages were placeholders.
Intervention
1) Stabilize development workflow
- Standardized on
next dev --webpackfor predictable local behavior. - Cleared stale
.next/dev/lockissues by terminating orphaned dev processes and removing.next/dev/when needed.
2) Build site structure (information architecture)
- Implemented routes:
/(home)/about/work+/work/[slug]/writing+/writing/[slug]/contact
- Added a shared shell (header/nav/footer) to enforce consistency.
3) Create a design-token system (enforceable, not vibes)
- Defined semantic tokens (background/surface/text/accent/border) with light/dark values.
- Mapped tokens to Tailwind utilities so the implementation stays consistent (e.g.,
bg-bg,text-text,border-border).
4) Replace placeholders with a content pipeline
- Added filesystem-backed content:
content/work/*.mdxcontent/writing/*.mdx
- Validated frontmatter with Zod so bad metadata fails at build time.
- Rendered MDX server-side and generated lists/detail pages.
- Ensured drafts are excluded from
sitemap.xmland return 404 in production.
Measurement
Definition of done:
npm run lintpasses.npm run buildpasses.- Creating a new post is as simple as adding a file under
content/.
Artifacts
- Repo (private during build/sanitization):
dbradwood.com - Design tokens:
src/app/globals.css - Content pipeline + schemas:
src/lib/contentfs.ts - Example templates:
content/work/case-study-template.mdxcontent/writing/post-template.mdx
Notes
- This is intentionally “boring” engineering: small choices that reduce friction and make future output inevitable.
- The real leverage comes next: publishing a handful of operator-grade case studies and essays that are verifiable and reusable.