Projects

Things I built, and why

Each project starts with a problem I had. For downloadable tools, see the Tools page.

Personal Butler

An AI assistant I built for my daily work at a tech company.

Problem

Too much of the day went to small, repeated tasks: looking up answers in internal docs, writing tickets, and labeling them the same way every time.

How it works

  • Answers questions by searching a knowledge base first, instead of guessing
  • Writes tickets in a fixed format for each ticket type
  • Suggests labels automatically from the ticket content
  • Runs in the cloud behind an LLM proxy, so the model can change without code changes

LLM agent · Knowledge search · LLM proxy · Built with Claude Code

Notion → MDX publishing pipeline

Write in Notion, publish to this site without touching Git.

Problem

Writing in a code editor is slow, but a CMS adds a server, a database and a login to maintain. I wanted Notion's editor and a static site.

How it works

  • A GitHub Action checks the Notion database every 15 minutes and converts pages with Draft = false into MDX files
  • Changes arrive as a pull request, so nothing goes live without review
  • When an Indonesian article has no English version yet, an LLM drafts the translation back into Notion
  • Images are downloaded into the repo, with guards against unsafe URLs

Node.js · Notion API · GitHub Actions · OpenRouter

Engineering Labs (this site)

A bilingual technical journal for QA, FPV and fishkeeping.

Problem

I wanted one place for engineering notes and drone work that is fast, cheap to host and needs no maintenance.

How it works

  • Fully static Next.js export on Cloudflare Pages: no server, no database
  • English and Indonesian versions of each article, linked so the language toggle opens the translated article
  • Content is plain MDX files in Git with a strict frontmatter contract
  • Built and maintained with coding agents, with checks and progress logs kept in the repo

Next.js · TypeScript · Tailwind CSS · MDX · Cloudflare Pages