Uses
Tools, stack and typefaces
Everything below is a claim about what I actually use, so it stays short and specific. Rows, not adjectives.
Daily stack
What most of my working hours go through.
TypeScript
Strict mode, no exceptions. Types are documentation that fails the build.
React
Function components, hooks, and a bias for fewer abstractions.
Next.js
App Router, server components, static prerendering where it fits.
GraphQL
Day-job codebase — colocated fragments are the DX win I underused for years.
React Native
Shared logic across platforms, with platform edges treated as a real cost.
Node.js
APIs, scripts and the boring glue that keeps projects shippable.
The stack behind this site
If you're curious what built what you're reading.
Next.js 15
App Router, static prerendering, view transitions.
Tailwind CSS v4
Design tokens live in CSS (@theme), not in a JS config.
bun
Install, scripts, lockfile — the whole toolchain.
marked + gray-matter
Markdown in content/, frontmatter for metadata. No CMS.
next-themes
Real light/dark: system preference first, manual override second.
cmdk
The ⌘K palette — navigation and client-side search over every page.
Vercel
Deploys and analytics. Analytics is the only third-party script.
Resend
Contact form delivery.
Design & type
Bancada: warm bone paper, ink, one orange accent.
Bricolage Grotesque
Display headlines. Variable, a bit opinionated, never corporate.
Geist
Body text and UI chrome. Quiet and legible at small sizes.
JetBrains Mono
Labels, metadata, log entries and code, where precision matters.
Melro orange
One accent for links, status and CTAs. The same orange as Melro.io.
Violet ✦
Reserved exclusively for marking AI co-authorship. It never means anything else.
Desktop & cross-platform
Tauri
Small binaries, OS webview. Remember it's not Chrome.
Electron
Shipped a desktop canvas tool with it before Tauri was on my radar.
macOS
Where I build. WKWebView differences are a real test target, not a footnote.
What I'm doing with all of this is on the now page.