–––

–––– ––––––– –––––––– @maia_analytics

––––– ––––––– –– – –––––––––– –––––– – –––––– –– ––––––––– –––– ––––––

// The supreme learning is to realize the meaning of selflessness.
// — Atisha
currently building
systems
-- services
-- crons
--% cpu
--% mem
Founder

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.

React FastAPI Python Postgres DuckDB Pydantic AI GCP
PROJECT NETWORK 12/20 NOMINAL SYNC —
CPU
--
MEM
--
SVC
--
CRON
--
PPD --
PUSHES / 7D
primary workspace
showcase piece
co-hosted on optiplex
interactive keymap
keyboard config
claude code plugin
cron on optiplex
hand-soldered
hand-soldered
ESP32 + FastLED
hotkey macros
background automation
telegram bots
telegram bots
cron on optiplex
co-hosted on optiplex
monitored services
monitors crons
claude code skill
claude tools
spotify api
spotify api
library sorting
on-device ML
react web apps
LLM backend
hand-built UI
cloudflare
browser frontends
same astro + bun stack
claude code harness
agent-driven python
public api scrapers
launchd plist in dotfiles
launchd on the mac
ONLINE
MAIA
AI geospatial platform 0.0/s
startup

Ask a question about a property, get a map back. My day job: LLM orchestration, agent workflows, and the property data pipelines underneath.

TypeScriptPythonFastAPIPostgresGCP
maia-analytics.com ↗
click to explore
ONLINE
c2k.page
This website 0.0/s
web

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.

AstroTypeScriptCanvasCloudflare
c2k.page ↗
click to explore
STANDBY
Flux Gauntlet
LED wearable 0.0/s
hardware

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.

C++FastLEDESP32
click to explore
ONLINE
Corne
42-key split keyboard 0.0/s
hardware

42 keys and 7 layers, running ZMK. Combos, home row mods, vim-style arrows. No number row, which sounds worse than it is.

QMKCKiCad
click to explore
ONLINE
Spotify Macro
Library auto-sorter 0.0/s
automation

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.

PythonSpotify APIEfficientNetscikit-learnlaunchd
click to explore
ONLINE
Optiplex Dashboard
Server monitoring PWA 0.0/s
infra

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.

Next.jsTypeScriptshadcn/uiSQLitesysteminformation
ONLINE
Dotfiles
Dev environment system 0.0/s
tooling

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.

BashZshClaude CodeTmuxGhostty
github/dotfiles ↗
click to explore
DEPLOYING
Secret Gate
Human-in-the-loop gate 0.0/s
security WIP

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.

Python1Password CLITelegramClaude Code
github/secret-gate ↗
ONLINE
Tech Digest
Daily release digest 0.0/s
automation

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.

PythonClaude CLITelegramGitHub APIcron
github/tech-digest ↗
STANDBY
Lightning Cloud
Procedural lightning 0.0/s
hardware

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.

C++FastLEDESP32
click to explore
ONLINE
Propeller Scrape
Concert ticket monitor 0.0/s
utility

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.

PythonBeautifulSoupTelegramcron
github/propeller-scrape ↗
ONLINE
Pane Skill
Claude tmux side pane 0.0/s
claude tools

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.

BashtmuxClaude CodeHelix
github/claude-pane-skill ↗
STANDBY
Playlist AI
ML playlist sorter 0.0/s
ml

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.

Pythonscikit-learnJupyterSpotify API
github/spotify-playlist-ai ↗
ONLINE
DJ Trainer
Learn the DDJ-FLX4 0.0/s
learning

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.

JavaScriptVitePythonCoreMLSAM
STANDBY
Song Sorter
Pairwise library ranker 0.0/s
web app

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.

TypeScriptReactZustandRadix UITailwind
github/song-sorter ↗
STANDBY
Moment Player
Podcast AI companion 0.0/s
ios WIP

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.

SwiftSwiftUIPythonFastAPILLM
ONLINE
All Look Different
Face-quiz game 0.0/s
game

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.

JavaScriptHTML/CSSCloudflare Workers
github/all-look-different ↗
DEPLOYING
Vibe Framework
In-app agent, live reload 0.0/s
tooling WIP

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.

AstroTypeScriptBunClaude CodeSSE
STANDBY
Polymarket Bot
Behavioral edge research 0.0/s
research

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.

PythonpandasPolymarket API
ONLINE
Cal Sync
Apple Note ↔ Calendar 0.0/s
automation

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.

PythonGoogle Calendar APIAppleScriptlaunchd
NETWORK OPTIMIZER
0.0 TP
0.0 /s
PROJECT NETWORK 11/18 NOMINAL
MAIA ONLINE
AI geospatial platform
startup

Ask a question about a property, get a map back. My day job: LLM orchestration, agent workflows, and the property data pipelines underneath.

TypeScriptPythonFastAPIPostgresGCP
Dotfiles primary workspace c2k.page showcase piece Moment Player LLM backend
maia-analytics.com ↗
tap to explore
showcase piece
c2k.page ONLINE
This website
web

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.

AstroTypeScriptCanvasCloudflare
MAIA showcase piece Dotfiles co-hosted on optiplex Corne interactive keymap Optiplex Dashboard co-hosted on optiplex Moment Player hand-built UI All Look Different cloudflare Vibe Framework same astro + bun stack
c2k.page ↗
tap to explore
Flux Gauntlet STANDBY
LED wearable
hardware

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.

C++FastLEDESP32
Corne hand-soldered Lightning Cloud ESP32 + FastLED
tap to explore
interactive keymap hand-soldered
Corne ONLINE
42-key split keyboard
hardware

42 keys and 7 layers, running ZMK. Combos, home row mods, vim-style arrows. No number row, which sounds worse than it is.

QMKCKiCad
c2k.page interactive keymap Dotfiles keyboard config Flux Gauntlet hand-soldered Lightning Cloud hand-soldered Spotify Macro hotkey macros
tap to explore
hotkey macros
Spotify Macro ONLINE
Library auto-sorter
automation

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.

PythonSpotify APIEfficientNetscikit-learnlaunchd
Corne hotkey macros Propeller Scrape background automation Song Sorter spotify api Cal Sync launchd on the mac
tap to explore
co-hosted on optiplex
Optiplex Dashboard ONLINE
Server monitoring PWA
infra

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.

Next.jsTypeScriptshadcn/uiSQLitesysteminformation
c2k.page co-hosted on optiplex Dotfiles monitored services Tech Digest monitors crons
primary workspace co-hosted on optiplex keyboard config monitored services
Dotfiles ONLINE
Dev environment system
tooling

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.

BashZshClaude CodeTmuxGhostty
MAIA primary workspace c2k.page co-hosted on optiplex Corne keyboard config Secret Gate claude code plugin Propeller Scrape cron on optiplex Tech Digest cron on optiplex Optiplex Dashboard monitored services Vibe Framework claude code harness Cal Sync launchd plist in dotfiles
github/dotfiles ↗
tap to explore
claude code plugin
Secret Gate DEPLOYING
Human-in-the-loop gate
security WIP

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.

Python1Password CLITelegramClaude Code
Dotfiles claude code plugin Propeller Scrape telegram bots Tech Digest telegram bots
github/secret-gate ↗
telegram bots cron on optiplex monitors crons
Tech Digest ONLINE
Daily release digest
automation

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.

PythonClaude CLITelegramGitHub APIcron
Secret Gate telegram bots Dotfiles cron on optiplex Optiplex Dashboard monitors crons Polymarket Bot agent-driven python
github/tech-digest ↗
hand-soldered ESP32 + FastLED
Lightning Cloud STANDBY
Procedural lightning
hardware

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.

C++FastLEDESP32
Corne hand-soldered Flux Gauntlet ESP32 + FastLED
tap to explore
cron on optiplex background automation telegram bots
Propeller Scrape ONLINE
Concert ticket monitor
utility

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.

PythonBeautifulSoupTelegramcron
Dotfiles cron on optiplex Spotify Macro background automation Secret Gate telegram bots Polymarket Bot public api scrapers
github/propeller-scrape ↗
DJ Trainer ONLINE
Learn the DDJ-FLX4
learning

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.

JavaScriptVitePythonCoreMLSAM
Song Sorter react web apps
spotify api react web apps
Song Sorter STANDBY
Pairwise library ranker
web app

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.

TypeScriptReactZustandRadix UITailwind
Spotify Macro spotify api DJ Trainer react web apps All Look Different browser frontends
github/song-sorter ↗
LLM backend hand-built UI
Moment Player STANDBY
Podcast AI companion
ios WIP

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.

SwiftSwiftUIPythonFastAPILLM
MAIA LLM backend c2k.page hand-built UI
cloudflare browser frontends
All Look Different ONLINE
Face-quiz game
game

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.

JavaScriptHTML/CSSCloudflare Workers
c2k.page cloudflare Song Sorter browser frontends
github/all-look-different ↗
same astro + bun stack claude code harness
Vibe Framework DEPLOYING
In-app agent, live reload
tooling WIP

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.

AstroTypeScriptBunClaude CodeSSE
c2k.page same astro + bun stack Dotfiles claude code harness
agent-driven python public api scrapers
Polymarket Bot STANDBY
Behavioral edge research
research

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.

PythonpandasPolymarket API
Tech Digest agent-driven python Propeller Scrape public api scrapers
launchd plist in dotfiles launchd on the mac
Cal Sync ONLINE
Apple Note ↔ Calendar
automation

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.

PythonGoogle Calendar APIAppleScriptlaunchd
Dotfiles launchd plist in dotfiles Spotify Macro launchd on the mac
Founder

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.

React FastAPI Python Postgres DuckDB Pydantic AI GCP
C2K.page this site

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.

Home

My name decodes in on load, then whatever I pushed most recently and how the box is holding up.

Projects

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.

About

Who is running all this. The stack, the hardware, and why it lives on a mini PC instead of somewhere sensible.

Lab

Where a feature gets tried before it is allowed onto a real page. Accept or deny it; the survivors get merged.

Text scramble/decode animations — characters resolve through random glyphs
Glassmorphic design — frosted glass cards, radial vignette, SVG glow filters
Statusline showcase — interactive Claude Code statusline configurator
Feature Lab — experimental components with expand/scramble/stagger animations
Mobile swipe nav — pill-shaped bottom bar with animated icon states
3-environment deploy — production, staging, feature branches on separate ports
Conductor CORE STACK

Orchestrates agent-deck sessions that build and deploy this site. Every feature starts as a conductor task.

Agent Deck AUTOMATION

Claude Code sessions in managed terminals. Each feature branch gets its own worktree so nothing steps on anything.

Beads AUTOMATION

Git-backed issue tracker. Tasks, bugs, and features for this site are tracked as beads with dependency chains.

OptiPlex Dashboard HARDWARE

The host machine. CPU, memory, service health. This page reads its status API for the footer telemetry.

Feature Lab CORE STACK

Where new components live until they earn a spot on a real page.

Dotfiles CONFIG

Claude settings, skills, hooks, shell config. Symlinked out of one repo so every machine matches.

C2K CTO, context engineer
currently building ...
optiplex · 8 services · cpu 12%
Astro TypeScript Bun Cloudflare Tailscale Canvas
Flux Gauntlet wearable

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.

Flux Gauntlet in action
300 LEDs
5 buttons
15+ effects
ESP32 brain
C++ PlatformIO FastLED ESP32 U8g2 WS2812
C2K-Corne keyboard

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.

C2K-Corne keyboard
homerow mods smart-shift combos mod-morphs tri-state swappers 7 layers tented
ZMK C Devicetree Bluetooth
spotify-macro automation

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.

Python Spotipy cron macOS LaunchAgents
optiplex-dashboard
infra

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.

Next.jsTypeScriptshadcn/uiSQLitesysteminformation
dotfiles config

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.

claude-statusline
main ±3 ~/repos/c2k.dev
0% ↯12 ⛁43 Opus 4.6 (1M) :5173

What is this?

A 221-line bash script that replaces Claude Code's default statusline. It runs on every prompt, parsing JSON input from Claude Code and rendering a two-line display with ANSI colors.

Line 1 — Git + Location

Branch Current branch, truncated at 30 chars. Shows HEAD during detached state.
State icons ↻ rebase · ⑂ merge · ⊕ cherry-pick · ↩ revert · ◇ bisect
±N Total of staged + unstaged + untracked files.
Path Shortened CWD. Detects git worktrees and shows worktree name.

Line 2 — Context + System + Model

Context % Color-coded: green (0-60%), yellow (60-100%), red (100%+). For 1M models, scales so the 500K personal limit reads as 100%.
↯ ⛁ CPU load and memory usage. Cached for 1 second to avoid expensive recalculation.
Model Shows "Opus 4.6 (1M)" for 1M context models. For other non-default models, shows the display name. Hidden when using the default model.
:PORT MAIA client dev port. Only appears in MAIA worktrees. White when the docker backend is running, grey when it's down.

Why native bash?

Replaced the third-party ccstatusline tool to eliminate rendering artifacts and stdin handling issues. A single bash script with jq parsing, no dependencies, no wrapper hacks. Works on both macOS and Linux.

Claude Code Skills dotfiles/claude/skills ↗
claude code
/issue-to-pr issue → code → PR → merged workflow
/sync pull repos, fix symlinks, rebuild config devops
/pane rich tmux pane — files, diffs, logs terminal
/dispatch send tasks to parallel worker sessions workflow
/make-tests FastAPI test patterns + fixture guide testing
/mods-command pipe docs into LLM CLI with custom roles tools
/resolve-pr-threads resolve GitHub review threads via GraphQL git
/bug-root-cause investigate via Linear, Logfire, Slack traces debugging
/raycast-chrome-tab AppleScript tab switcher for Raycast tools
Bash Zsh Claude Code Tmux Git
secret-gate
WIP security

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.

Python1Password CLITelegramClaude Code Plugin
tech-digest
daily driver

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.

PythonClaude CLITelegramGitHub APIcron
morning-digest
daily driver

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.

Next.jsTypeScriptClaude HaikuSQLiteTailwindRSS
LightningCloud hardware

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.

Lightning cloud in action
C++ Arduino FastLED ESP32 WS2812
propeller-scrape
utility

Concert ticket monitor

Scrapes Propeller rewards for new concert tickets in LA, SF, and Boulder. Sends Telegram notifications when shows appear. Runs on cron.

PythonBeautifulSoupTelegramcron
name Christopher Keesey
handle C2K
role CTO · context engineer
company MAIA Analytics
location Outer Sunset, SF
editor Claude Code
terminal Ghostty + Tmux
keyboard Corne 42-key split
host OptiPlex micro · Ubuntu
network Tailscale + Cloudflare Tunnel
whip Maroon Honda Odyssey
languages Natural Language · TypeScript · Python · Go
frontend React · Astro · Tailwind
backend FastAPI · Node · Postgres
infra GCP · Docker · systemd · Cloudflare
ai Claude Code · MCP · Pydantic AI

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.

Feature Lab

INITIALIZING

History