Woodblock · indigo and vermillion, gouged black line, paper grain
Action-adventure 2D samurai brawler, late-Edo woodblock.
Writing, experiments, and field notes from Joel Citron — building enterprise AI systems by day, prototyping at the edge of the model after hours.
Began as a creative director in 2005, pivoted to development in 2008, and have spent the last decade-plus marrying the two — building enterprise attribution systems at AI Media Group, where I'm now CTIO.
The thesis hasn't changed: a design-trained engineer makes better technical decisions because they think about the human standing in front of the system, and a engineering-trained designer ships things the design-only crowd never finishes. acidlemon is where I write about both sides.
Woodblock · indigo and vermillion, gouged black line, paper grain
Action-adventure 2D samurai brawler, late-Edo woodblock.
Arcade window · depth, horizon, one eye closed and a lean
3D head-tracked rail shooter. Monitor as a window.
Fighter cabinet · steel on sun-warmed sandstone, khanda against battle-axe
2.5D weapon fighter, twelve researched cultures, one blade each.
Cyber-industrial · cyan and magenta panel light over Doom brick
Fully rendered first-person shooter. Classic Doom WADs convert straight into it.
Hellfront dust · silhouette command readability
Hybrid small-unit tactics and FPS possession. Command outdoors, clear indoors, Human and Cyber-Demon campaigns.
Neon rail · grounded graybox catcher
Cyberpunk kart racer with stunts, a track editor, and a first campaign. Build a course, Test Race, then race it.
Three.js maze runner with post-processing shaders, outline pass, and effect composer.
First-person maze, simpler engine. Find the exit.
Three.js first-person shooter prototype. Mouse + keyboard.
Side-scrolling platformer, vanilla canvas. Arrow keys + space.
Browser-based action prototyping playground.
Personal real-estate tracking + analysis tool for the NJ market.
Operator-persona executive site — Astro + Tailwind, Metric Stage design system.
This site — Calibrated Gantry design system, bento grid, dark mode.
Pre-DevDay operator pin: agency, economics, contracts. Score the stage against your harness before you clap.
Frontier week: Astra vs Gemini 3.8 Flash cost gap, Muse Spark pitching fewer tool calls. Price-per-token lies under agentic load. Measure cost-per-completed-task against a pinned schema.
Clash of Steel Blades is a 2.5D Khanda vs Katana fighter in the browser. The first coding agent doom-looped on the build. Switching the worker finished it.
When a tool schema drifts under a live agent — enums renamed, param types tightened — the agent looks broken. It is not. The contract broke. Pin versions. Fail closed.