thyagocoan.com
This site. A statically exported Next.js app with MDX content, build-time GitHub data, and a CI pipeline that typechecks, deploys and audits every push.
maintainedNext.js · TypeScript · Tailwind · Cloudflare
The site you're reading. Built to be publishable with git push and otherwise
require no attention.
#Design constraints
I set three rules before writing any code, and they decided most of the architecture:
- No runtime. Every route is pre-rendered to static HTML. Nothing to keep running, nothing to patch, nothing that can fall over at 3am.
- Content as files. Posts are MDX in the repo, so drafts live on branches and edits show up in diffs.
- A failing integration must not fail the build. External data is fetched at build time and degrades to empty rather than throwing.
#Stack
- Next.js with
output: 'export'— emits a plain static directory - Tailwind v4 with the theme in CSS custom properties, not a JS config
- MDX rendered through
next-mdx-remote/rsc, highlighted by Shiki at build - Cloudflare Pages for hosting, GitHub Actions for CI, deploy, and a Lighthouse audit on pull requests
#Things worth stealing
The dark mode is a blocking inline script that sets a class on <html> before
first paint. It is unfashionable and it is the only approach that doesn't flash
white on navigation.
The frontmatter reader throws on a missing title, date or summary. Failing
the build is a better outcome than discovering an untitled post in the RSS feed.
There's a longer writeup in How this site is built.