← all posts← all yaps

how i built this blog

Sep 15, 20262 min read#meta#astro#cloudflare

A static Astro + MDX blog on Cloudflare Pages. No backend or database; Pagefind search and the yap-mode toggle run in a few kilobytes of inline script.

on this page
  1. 01stack
  2. 02theme
  3. 03vim bindings
  4. 04search
  5. 05normal / yap
  6. 06code blocks
  7. 07diagrams

stack

Built with Astro 7, MDX content collections, and Tailwind. Static output deployed to Cloudflare Pages on the free plan: unlimited static requests, zero functions, global CDN.

yap

broke-boy architecture on purpose. no server, no database, no $20/mo Vercel bill. markdown in, HTML out, Cloudflare eats the bandwidth for free.

theme

Catppuccin Mocha accents on a blackened ramp. Page #08080a, text #cdd6f4, accent mauve #cba6f7. System-sans body, JetBrains Mono headings and code. Single column, 76ch. Clean first, nerdy second.

vim bindings

keydoes
j / knext / prev post on lists, scroll in articles
gg / Gtop / bottom
/search
ytoggle yap mode
ttoggle dark / light
?this cheatsheet

Full-blown Pagefind: static index built at deploy time, no backend. / focuses it, arrows navigate, enter opens.

normal / yap

I write the yap. The normal version (frontmatter above) is written separately in a chat interface and pasted in. Normal is canonical for SEO and RSS; yap is client-side only.

yap

normal is the resume. yap is the group chat. same URL, pick your fighter with y.

code blocks

Fenced code renders as postcards now: traffic lights, language label, copy button, line numbers. Shiki paints Catppuccin tokens that flip with the theme toggle.

def fill_form(fields, document):
    for field in fields:
        field.value = document.lookup(field.label) or field.value
    return fields

diagrams

Mermaid fences render in place, themed to match, zoomable when wide. Same pipeline as everything else: markdown in, HTML out.

flowchart LR
  A[write markdown] --> B[astro build]
  B --> C[cloudflare pages]
  B --> D[pagefind index]
  B --> E[graph data]
cpz_-- NORMAL --bloggraphtagsaboutgithubxlinkedin