Skip to content

Uses

What I build with

Everything below is in use on something that shipped. Where a tool has a real cost or a real failure mode, it says so — a list of what I use is only worth reading if it also says what it is like to use.

AI

The part people actually ask about.

  • Claude Code

    Where most of the building happens, this site included.

    The gain is not autocomplete, it is that a whole task can be handed over with its context. The cost is that it will confidently do the wrong thing thoroughly, so anything it touches still gets read. This site's audit found four defects it had introduced and eleven it had documented incorrectly.

  • Claude Opus 5 — API

    Drafts one blog post from a story people are currently discussing.

    Structured output, so the model returns JSON and the script assembles the file. It never writes frontmatter and `draft: true` is set in code, which means a model that decides to publish itself cannot. See scripts/draft-post.mts.

Web

What this site and the product front-ends are built on.

  • Next.js 16

    App Router, every page prerendered except the subscribe route.

    Version 16 moved enough that most tutorials you find are wrong for it — `PageProps` is generated rather than imported, which cost this repo three days of red CI before anyone read the error properly.

  • Tailwind CSS v4

    The whole design system, as tokens in app/globals.css.

    v4 is CSS-first: there is no tailwind.config.js, and every tutorial that tells you to edit one is describing v3. Colours live in an @theme block.

  • TypeScript

    Content files included — builds, videos and tracks are typed data, not JSON.

    The reason is comments. A content file you edit six months later needs to explain itself, and JSON cannot. Typos fail the build naming the file and field.

  • MDX

    Blog posts, via next-mdx-remote.

    Plain Markdown for the most part; the components are worth it for two things only, a callout and a video embed.

  • Vercel

    Hosting and preview deployments.

    Previews are what makes the drafting pipeline reviewable — a machine-written post renders as a real page before anyone decides whether to merge it. A broken content file fails the build and the last good deploy keeps serving.

Behind the products

  • Supabase

    Postgres, auth and the API layer under REON.

    Row-level security is the whole game and it is easy to get subtly wrong: an audit of REON found 183 SECURITY DEFINER functions callable by the anonymous key, every one of them running as the database owner. Postgres, not Supabase, but Supabase makes the surface reachable from a browser.

  • NinjaTrader 8

    The platform EDGEON's signal engine runs inside.

    It has its own deterministic bar type, which is what lets a replayed chart be byte-for-byte the chart that was traded. Without that, backtests are fiction.

  • GitHub Actions

    CI, and the weekly drafting job.

    One thing worth knowing before you rely on it: an event produced with the repository's own GITHUB_TOKEN does not start another workflow. A job that opens its own pull request has to run its own checks, or the pull request arrives with nothing having run against it.

Every tool here is in use on something that shipped — see the builds. If one of these is wrong or there is something better, tell me.