Projects

Things I've actually built and shipped — what each one is, why it exists, and what it's made of. Most run on a single server I administer myself.

Updated September 2026 · Source code lives at git.rehbock.xyz

Live & public

Open to anyone. Click through.

Samford Valley house concept with timber pavilions, solar panels, garden beds and future building outlines

Samford Valley home Long-term project

A simple, extendible family homestead: natural materials, solar power, food gardens and space to grow. A Blender model and first Unreal Engine room render, with site LiDAR, detailed plans and a full walkthrough to follow.

Why: I want to spend the next few years getting this house right, leaving room for it to change as life changes.

  • Blender
  • Unreal Engine 5
  • Homesteading
Sonora — spectral peaks of birdsong plotted as a slowly orbiting 3D constellation

Sonora Live

Sound in space. Drop in a song — or press play for a blackbird field recording — and watch it become a slowly orbiting 3D constellation: every spectral peak is a point, tones that persist are joined into trails, and everything fades over a few seconds like a memory. Three further views plot texture (spread vs entropy), frequency and modulation as scientific scatter plots. A 4096-point FFT runs in the browser; no audio ever leaves your machine.

Why: Lucio Arese’s bird-song studies turn sound into something you can look at. I wanted my own music in that space.

  • three.js
  • Web Audio API
  • Vite
  • vanilla JS, no framework
  • node --test
BJJ injury visualizer — posterior view of a 3D thoracic spine with the left T2–T5 costovertebral joints glowing red

BJJ injury visualizer Live

A 3D explainer for one specific injury: a left costovertebral joint sprain at T2–T5 with a strained levator scapulae, the kind you get from a guillotine that turns into a neck crank. Orbit a procedurally built upper-body skeleton with its muscles, watch the crank mechanism play out with force arrows and a scrubber, then step through six rehab exercises that light up exactly which joints and muscles each one targets. Every bone, joint and muscle is clickable.

Why: I got this injury three times in four weeks. Reading about it did not make it click; seeing where the joints sit under the shoulder blade did.

  • three.js
  • procedural geometry
  • vanilla JS, single file
  • no build step
SF bedroom concept: a 3D dollhouse view of a warm bedroom with a full bed, a desk facing the window, a bookcase, paper lamps and framed art

SF bedroom concept Live

My next bedroom, designed before I move in. After a last-minute room swap, the room is rebuilt in Blender from the house-tour video (one tall sash window, a reach-in closet, a full bed that comes with it) and furnished from my shopping list at real sizes: a bamboo standing desk facing the window, a walnut bookcase, washi paper lamps, a jute rug, an olive tree and a wall of Hokusai, Hiroshige, Jakuchū and Hilma af Klint. The scene exports to the web, where you can orbit it as a dollhouse or walk through it at eye height, with path-traced renders underneath.

Why: I wanted to try the layout, the light and the art before buying anything, not after.

  • Blender (Python, Cycles)
  • glTF + Draco
  • three.js
  • no build step
maPPP — 3D globe coloured by purchasing power

maPPP Live

An interactive 3D globe of purchasing power. Spin the earth, pick a metric — income in local buying power, price level, value-for-money versus the US — and see where money goes furthest. A second view plots ~300 cities as bars with a quality-of-life ranking you can fly the camera to.

Why: I kept comparing cost-of-living tabs while deciding where to live next. I wanted one picture instead.

  • three.js
  • globe.gl
  • World Bank Open Data API
  • Natural Earth GeoJSON
  • single HTML file, no build

BuddhaGPT Source

A small local language model fine-tuned and grounded on the Pali Canon. Thousands of synthetic instruction pairs are generated from SuttaCentral's Bilara texts, Qwen2.5-7B is QLoRA-tuned on them on Apple Silicon, and answers are retrieved-then-generated with sutta citations (bge embeddings in LanceDB). CompassionBench — a rubric-scored prompt bank with an LLM judge — compares the tuned model against frontier models.

Why: To run the whole fine-tune → retrieval → evaluation loop end to end on a corpus I care about, and to test whether a 7B model trained on the suttas answers hard human questions more compassionately than a frontier model.

  • Python
  • Qwen2.5-7B
  • QLoRA
  • LanceDB
  • bge embeddings
  • OpenRouter
  • uv
Friends and Family Update #6

Friends & Family Newsletter Live

Seven issues of long-form updates to the people I care about — written, hosted and emailed from my own server. Behind it is a small publishing stack I built: an admin for subscribers, campaigns and open/click tracking (with a push to my phone on first open); Scribe, a Typora-style browser editor that round-trips each issue between email HTML and markdown; a voice-memo → transcript → draft pipeline; a self-service form where friends keep their details current; and a one-command bridge that mirrors an issue to Substack.

Why: Email is the one channel I own end to end. The tooling exists so that writing the next issue is the only hard part.

  • Node / Express
  • Postgres
  • Resend
  • Bun
  • Vditor
  • Python
  • Caddy
Budgy — AI budget meal planner

Budgy Live

An AI budget meal planner. Tell it your weekly grocery budget, who you're feeding and where you shop; it plans seven dinners and one shopping list with real prices for your store. iOS app plus a web quiz. Built under The Pai Company, the venture studio I co-founded.

Why: Grocery inflation made "what's for dinner" a budgeting problem. Most meal planners ignore the price.

  • iOS
  • Android (Obtainium releases)
  • LLM planning
  • store price data
rehbock.xyz homepage

This website Live

Hand-written HTML, no framework, no build step, served straight off the homelab. A /now page, a /uses page, heroes, quotes, media, a resume and this page. It also ships JSON-LD, an llms.txt and a sitemap so that agents can read it as easily as people can.

Why: A page I control is the only durable version of me on the internet.

  • HTML + CSS
  • Caddy file_server
  • JSON-LD

Self-hosted & private

Running for an audience of one (or a few). Described, not linked — they hold my data.

Self-hosted Gitea at git.rehbock.xyz

The homelab Ongoing

One VPS, about 35 containers behind a Caddy reverse proxy, each service in its own compose file: Immich for photos, Audiobookshelf and Navidrome for audio, Actual Budget and Ghostfolio for money, Vaultwarden for passwords, Radicale for contacts and calendar, Gitea with CI runners that build my Android apps, Memos, ntfy push notifications, Uptime Kuma and Dozzle for monitoring. Nightly database dumps plus an offsite restic backup to BorgBase. A single SERVER.md registry describes every service so that AI agents can operate the box safely.

Why: To own my data outright and to have a real system to run, break and fix. Every other project on this page lives here.

  • Docker Compose
  • Caddy
  • Postgres
  • restic → BorgBase
  • Gitea Actions
  • ufw

Personal health platform Private

My blood work from Australian and US labs, DNA traits, DEXA body composition, gym sessions, sleep and meditation logs in one place. Static dashboards on top of a Bun + SQLite API that normalises analytes and units across labs; an MCP server so Claude can answer "what's out of range and what's trending?"; a food log against daily macro targets; and an Expo app as a native front end. Workouts sync from Hevy every six hours.

Why: Every provider owns a slice of my health data and none of them has the whole picture. Now I do — and so does my AI.

  • Bun
  • SQLite
  • MCP
  • Expo / React Native
  • Hevy API
  • Caddy basic auth

Kin Private instance

A relational-wealth tracker: who matters, when we last talked, who's due for a catch-up. A deliberately thin Monica-style personal CRM — one Postgres database on my server, a Bun + Hono API, a vanilla-JS web UI and an Expo Android app, all clients of the same tiny API. It replaced a self-hosted Monica install.

Why: I think about relationships as depth of connection × time invested, summed over every friend. This is the ledger.

  • Bun
  • Hono
  • Postgres
  • Expo / React Native

ClaudeClaw — an ops agent for the server Private

A Claude Code agent that lives on the VPS and talks to me over Telegram. It sends a daily infrastructure report (CPU, RAM, disk, container diffs, 24-hour spikes), runs scheduled jobs, prunes Docker, takes the nightly database backups, and fixes things by hand when I ask — with destructive commands blocked at the tool level and a web dashboard behind the proxy.

Why: Thirty-five containers is too many to babysit. An agent with shell access and a registry of what runs where turns "is the server OK?" into a message.

  • Claude Code
  • Bun
  • Telegram Bot API
  • systemd + cron
  • built on moazbuilds/claudeclaw

Voice → Update Private

Upload an iPhone voice memo; it is transcribed locally with Whisper (or, for long memos, by a cheap audio-capable model via OpenRouter in ten-minute chunks with automatic fallback), split into structured "thoughts", and becomes the raw material for the next newsletter issue. Jobs survive container restarts.

Why: I think out loud on walks. The newsletter got better once the walk was the first draft.

  • Python
  • faster-whisper
  • OpenRouter
  • Docker

AudiobookBay Automated Private

Search AudiobookBay, send the chosen torrent to qBittorrent, and have the finished audiobook appear in Audiobookshelf — with a rebuilt light/dark UI over the original app, results as cards, progress bars on the status page. A fork of JamesRy96/audiobookbay-automated, feeding the same library that Lidarr and Prowlarr fill for music.

Why: One search box from "I want to listen to this" to "it's on my phone".

  • Python / Flask
  • qBittorrent
  • Audiobookshelf
  • Docker

Apps & experiments

Apps built for myself first. Source is public where it says so.

GoalHound — AI accountability partner on WhatsApp

GoalHound Live

A personal accountability partner that lives in WhatsApp. Set a SMART goal and a follow-up time, send a photo as proof when it's done, and GoalHound evaluates your progress and keeps chasing you until it is. Pay-what-it's-worth after a 21-day trial. Built with a co-founder as two ADHD entrepreneurs who needed it themselves; taken from ten jobs-to-be-done interviews to a live product during an internship in Da Nang.

Why: Goals die quietly. A hound that asks for the photo doesn't let them.

  • WhatsApp API
  • LLM evaluation
  • Vercel

GTD Source

A minimal Getting Things Done app: one Expo / React Native codebase for iPhone, Android and web, with data in Postgres on the VPS behind a small Bun API. Home shows the top three next actions; Today, Next, Waiting, Someday, Projects and Review are one tap away.

  • Expo / React Native
  • Bun
  • Postgres

Meditation timer Source

A Jhana meditation timer for GrapheneOS: start and end gong, scroll-wheel presets, session history with depth ratings and notes, synced to the meditation dashboard on my health platform. Every push to main triggers Gitea Actions to build a signed APK, publish a release, and Obtainium installs it on the phone — no app store in the loop.

  • Kotlin
  • Android
  • Gitea Actions
  • Obtainium

Tempo Source

A free, local-only pelvic-floor trainer — what Stamena was before it went paid. Guided sessions driven by a step timer with haptic cues and progressive overload, an Expo / React Native app with a Bun + Hono server on the VPS, and the same push-to-APK release pipeline as the timer.

  • Expo / React Native
  • Bun
  • Hono
  • Postgres

Helios Pre-alpha

A self-hosted, open-source AI health companion — a FOSS take on the closed "24/7 health companion" products. Your data stays on your server; the model runs on a key you provide (OpenRouter, or Ollama for zero third parties). Currently a scaffold with the design spec written.

  • TypeScript
  • Bun
  • OpenRouter / Ollama

Earlier

Shipped, learned from, retired.

Want to build something together, or talk product? Email me · see what I'm doing now · read the resume.