← back to trail

Project log: building this blog

28 April 2026·project-lognuxtdesign

How I scaffolded AI Trail with Nuxt 4 and the Content module — start to finish in an afternoon.

Meta entry: this site itself was the first project I logged.

The brief

  • A markdown-driven blog
  • Retro feel, but legible — not gimmicky
  • Greens and browns, outdoor / nature mood
  • No mascot
  • Static-friendly, low-maintenance

The stack

  • Nuxt 4 — file-based routing, Vue 3, SSR / SSG out of the box
  • @nuxt/content v3 — markdown collections with typed schemas
  • pnpm — fast, disk-friendly package manager
  • Hand-written CSS — no framework, palette baked into custom properties
// content.config.ts
export default defineContentConfig({
  collections: {
    posts: defineCollection({
      type: 'page',
      source: 'blog/**/*.md',
      schema: z.object({
        title: z.string(),
        description: z.string(),
        date: z.string(),
        tags: z.array(z.string()).default([])
      })
    })
  }
})

The look

I wanted the Brad Woods chunky-shadow energy paired with a PostHog-style retro card, but pulled toward forest greens and warm browns instead of neon.

Palette ended up roughly:

  • #2a3d2c — deep forest (headings, header bg)
  • #5a6f3a — moss (borders, accents, link underline)
  • #3b2a1a — bark (body text)
  • #efe4c2 — paper (background)
  • #a64a2a — rust (hover accent)

Pixel font for headings (VT323), monospace for body. Drop shadows and dashed borders carry the rest of the retro weight.

What I'd revisit

  • Syntax highlighting theme to match the palette
  • An RSS feed
  • Tag pages — easy to bolt on once a few more entries pile up

Done is better than perfect. Camp's set up. Time to start logging real entries.


← back to trail