–––– ––––––– –––––––– @maia_analytics
––––– ––––––– –– – –––––––––– –––––– – –––––– –– ––––––––– –––– ––––––
AI geospatial platform
The interface between a question and a map. You ask in plain English; agents go find the parcels and draw them. Site selection, solar analysis, location intelligence.
Ask a question about a property, get a map back. My day job: LLM orchestration, agent workflows, and the property data pipelines underneath.
This site. Astro SSR on the OptiPlex under my desk, out through a Cloudflare Tunnel. Every project on it got a hand-built component instead of a card.
300 LEDs in 16 rings, addressed as a 3D cylinder so effects travel around the arm instead of along a strip. Seven of them: blast, lightning, fire, firework, casimir, twinkle, pew.
42 keys and 7 layers, running ZMK. Combos, home row mods, vim-style arrows. No number row, which sounds worse than it is.
Keeps my Spotify library sorted without me. The whole library is cached locally so classification runs offline; track metadata plus a 30-second audio embedding decide which folder a new song belongs in. Adding the audio head moved folder accuracy from .800 to .878.
Mobile-first dashboard for the OptiPlex. CPU, memory, disk, network sparklines, cron status and running Claude sessions, all polled live. Installable PWA, reachable over Tailscale.
One repo for shell, editor, keybindings, and my Claude Code skills and hooks. Symlinked into place, so setting up a new machine is a clone and a script.
An agent that wants a 1Password secret or a sudo command has to ask my phone first. Telegram sends the request, I reply yes or no, nothing runs without an answer. Ships as a Claude Code plugin.
Pulls release notes for everything in my stack, has Claude read them, and sends me the short version on Telegram. The same bot lets me drive a headless Claude session from my phone.
A cloud lamp that makes its own lightning. Bolts are generated at runtime with branching forks, then flashed and faded. No animation files, just an ESP32 doing math.
Watches Propeller rewards for concert tickets in LA, SF, and Boulder and pings me on Telegram when something good shows up. Runs on cron and I forget it exists.
Claude Code skill that throws files, diffs, and command output into a managed tmux side pane instead of the chat log. Routes each through Helix, delta, or less depending on what it is.
The first attempt at auto-sorting my liked songs, back when Spotify still handed out audio features. Random forests against gradient boosting against SVMs against a small net, scored on my own playlists.
Click any knob, fader or pad on a Pioneer DDJ-FLX4 and it tells you what that one does. The hotspots come from an on-device SAM and CoreML pipeline that finds the controls in a photo, because placing them all by hand was not happening.
Ranks a Spotify library by making you pick between two songs, over and over, until fuzzy taste comes out as an ordered list. React and Zustand over the Spotify Web API.
Podcast player for iOS. Pause on a line you did not follow, ask about it, get an answer with the transcript as context, then keep going. SwiftUI on the front, a Python transcript and LLM service behind it.
Guess the nationality from the face. You will be worse at this than you expect. Retro arcade styling, a global leaderboard, Cloudflare Workers behind it.
Astro template with a chat panel on every page, wired to a Claude Code session on the host machine. Ask it to change something and Vite refreshes the page while you watch. Works from my phone over Tailscale, which is either very good or very bad.
Backtest and paper-trade harness for behavioral biases on prediction markets. Public read-only data, no wallet, no real money. Most of the hypotheses died in the gauntlet; the mid-range underdog one survived replication.
Plans get written in a shared Apple Note, not a calendar app. This syncs that note to a Google Calendar both ways, and identifies the calendar by a marker instead of its name so renaming it does not quietly break the sync.
Ask a question about a property, get a map back. My day job: LLM orchestration, agent workflows, and the property data pipelines underneath.
This site. Astro SSR on the OptiPlex under my desk, out through a Cloudflare Tunnel. Every project on it got a hand-built component instead of a card.
300 LEDs in 16 rings, addressed as a 3D cylinder so effects travel around the arm instead of along a strip. Seven of them: blast, lightning, fire, firework, casimir, twinkle, pew.
42 keys and 7 layers, running ZMK. Combos, home row mods, vim-style arrows. No number row, which sounds worse than it is.
Keeps my Spotify library sorted without me. The whole library is cached locally so classification runs offline; track metadata plus a 30-second audio embedding decide which folder a new song belongs in. Adding the audio head moved folder accuracy from .800 to .878.
Mobile-first dashboard for the OptiPlex. CPU, memory, disk, network sparklines, cron status and running Claude sessions, all polled live. Installable PWA, reachable over Tailscale.
One repo for shell, editor, keybindings, and my Claude Code skills and hooks. Symlinked into place, so setting up a new machine is a clone and a script.
An agent that wants a 1Password secret or a sudo command has to ask my phone first. Telegram sends the request, I reply yes or no, nothing runs without an answer. Ships as a Claude Code plugin.
Pulls release notes for everything in my stack, has Claude read them, and sends me the short version on Telegram. The same bot lets me drive a headless Claude session from my phone.
A cloud lamp that makes its own lightning. Bolts are generated at runtime with branching forks, then flashed and faded. No animation files, just an ESP32 doing math.
Watches Propeller rewards for concert tickets in LA, SF, and Boulder and pings me on Telegram when something good shows up. Runs on cron and I forget it exists.
Click any knob, fader or pad on a Pioneer DDJ-FLX4 and it tells you what that one does. The hotspots come from an on-device SAM and CoreML pipeline that finds the controls in a photo, because placing them all by hand was not happening.
Ranks a Spotify library by making you pick between two songs, over and over, until fuzzy taste comes out as an ordered list. React and Zustand over the Spotify Web API.
Podcast player for iOS. Pause on a line you did not follow, ask about it, get an answer with the transcript as context, then keep going. SwiftUI on the front, a Python transcript and LLM service behind it.
Guess the nationality from the face. You will be worse at this than you expect. Retro arcade styling, a global leaderboard, Cloudflare Workers behind it.
Astro template with a chat panel on every page, wired to a Claude Code session on the host machine. Ask it to change something and Vite refreshes the page while you watch. Works from my phone over Tailscale, which is either very good or very bad.
Backtest and paper-trade harness for behavioral biases on prediction markets. Public read-only data, no wallet, no real money. Most of the hypotheses died in the gauntlet; the mid-range underdog one survived replication.
Plans get written in a shared Apple Note, not a calendar app. This syncs that note to a Google Calendar both ways, and identifies the calendar by a marker instead of its name so renaming it does not quietly break the sync.
AI geospatial platform
The interface between a question and a map. You ask in plain English; agents go find the parcels and draw them. Site selection, solar analysis, location intelligence.
System monitor for my life
The public readout of everything I run. Astro SSR on an OptiPlex micro, out through a Cloudflare Tunnel. No templates and no generic project cards: every showcase on this page is its own component.
My name decodes in on load, then whatever I pushed most recently and how the box is holding up.
Every project as a node on a map. Click one to open it, click again for the full thing. The lines between them are real dependencies.
Who is running all this. The stack, the hardware, and why it lives on a mini PC instead of somewhere sensible.
Where a feature gets tried before it is allowed onto a real page. Accept or deny it; the survivors get merged.
Orchestrates agent-deck sessions that build and deploy this site. Every feature starts as a conductor task.
Claude Code sessions in managed terminals. Each feature branch gets its own worktree so nothing steps on anything.
Git-backed issue tracker. Tasks, bugs, and features for this site are tracked as beads with dependency chains.
The host machine. CPU, memory, service health. This page reads its status API for the footer telemetry.
Where new components live until they earn a spot on a real page.
Claude settings, skills, hooks, shell config. Symlinked out of one repo so every machine matches.
Wearable LED instrument
300 WS2812 LEDs on my forearm, plus a button per finger, a rotary encoder and an OLED. The LEDs are addressed as a 3D cylinder rather than a strip, so blasts and fire rings travel around the arm. 15+ effects, switchable mid-song.
42-key split keyboard
Custom Corne running ZMK, forked from urob's config. Homerow mods, smart-shift, combos, mod-morphs, tri-state swappers, app shortcuts. Seven layers, 42 keys, no number row.
Spotify library, sorted by machine
Python automations that keep my Spotify library sorted. The whole library is cached locally so classification runs offline; the current model reads track metadata and a 30-second audio embedding to decide which folder a new song belongs in.
Server monitoring PWA
Mobile-first dashboard for the Optiplex. CPU, memory, disk, network sparklines, cron job status, Claude sessions — all polled live. Installable PWA over Tailscale.
Developer environment as code
Shell, editor, Claude Code setup, custom tools. All of it lives in one repo and gets symlinked into place, so a new machine is a git clone and one script.
Human-in-the-loop approval gate
Routes AI agent requests for secrets (1Password) and sudo commands through Telegram for explicit approval. Ships as a Claude Code plugin with PreToolUse hooks.
Daily tech release digest via Telegram
Fetches release notes from GitHub repos and web changelogs (Claude Code, Cursor, Linear, etc.), parses them with Claude CLI, and sends formatted summaries via Telegram. Includes a Telegram bot for remote repo control through a headless Claude Code session.
LLM-powered personal news briefing
Fetches RSS from 9 sources across world news, SF local, and tech. Claude Haiku generates two-tier summaries — quick scans on fetch, deep dives on tap. Self-hosted Next.js PWA served over Tailscale.
LED lightning cloud
A cloud that makes its own lightning. Four WS2812 strips, and bolts generated at runtime with branching forks, strobe and fade. No animation files, just an ESP32 doing math.
Concert ticket monitor
Scrapes Propeller rewards for new concert tickets in LA, SF, and Boulder. Sends Telegram notifications when shows appear. Runs on cron.
CTO at MAIA Analytics. The pitch is that you ask a question about a property and get a map back. The reality is a lot of LLM orchestration and a lot of data pipelines that have to be right, because a map that is confidently wrong is worse than no map.
Outside of that I solder things that don't need to exist. A 300-LED gauntlet. A cloud that generates its own lightning. A keyboard with 42 keys, which is fewer than you think you need and turns out to be enough. Most of my week is Claude Code in a terminal. The rest is Ocean Beach, backcountry when there's snow, and more time mixing drum and bass than I'd defend in public.
All of this runs on a used OptiPlex micro under my desk, this site included. The status bar at the bottom of the page is real. If it goes red, something in my apartment is actually broken.