This repo publishes content directly from Markdown files in the codebase.
There are two public entry types:
learningsarticles
- Install dependencies:
bun install- Copy envs and fill them in:
cp .env.example .env.localNo CMS-specific environment variables are required for content publishing.
- Start the app:
bun devMain URLs:
- Site:
http://localhost:3000
The site exposes:
/sitemap.xml- generated from indexable static routes and Markdown content./llms.txt- generated Markdown index for LLMs and agents.
Content lives in:
content/articles/*.mdcontent/learnings/*.md
Each file uses simple frontmatter:
---
title: Why we simplified the CMS
slug: why-we-simplified-the-cms
summary: A short explanation of why the old setup had too much surface area.
publishedAt: 2026-02-20
---
Markdown body here.Adding or editing an article is now a normal code change. The site rebuilds from those files on deploy.
Optimize images referenced from Markdown before opening a PR:
bun run images:optimizeThe optimizer is lossless and idempotent:
- source images stay in place and remain the canonical content references;
- generated variants are written under
public/images/_optimized/; - regular content and cover PNG/JPEG images get lossless WebP variants;
ogImagePNG assets get losslessly recompressed PNG variants;- already-optimized variants are left byte-for-byte unchanged on later runs.
Check image budgets without rewriting files:
bun run images:checkbun run buildProduction deploys are handled by GitHub Actions on main.
PR previews are also deployed through GitHub Actions to Vercel preview environments. To make them work, configure these repository secrets:
VERCEL_TOKENVERCEL_ORG_IDVERCEL_PROJECT_ID
Each PR from this repository gets a fresh preview deployment and the workflow updates a comment on the PR with the Vercel URL.
For security, previews are skipped for PRs opened from forks because GitHub does not expose repository secrets to those runs.