DankDev
A working notebook on web apps, AI automation, Raspberry Pi and command-line tooling — 60 blog posts and 13 project write-ups, each with the numbers and the parts that broke.
Latest posts
All 60 posts →- Convert MP4 to GIF With ffmpeg, and the File Size Each Setting Costs ffmpeg -i in.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" out.gif, measured on ffmpeg 4.4.2: the bytes and colour accuracy of a GIF with and without a palette, at 10 and 15 fps.
- Run Two Claude Code Sessions at Once With Git Worktrees: Setup, What Each Copy Shares, and Merging Back git worktree add ../proj-feature -b feature, then claude in that folder, or claude --worktree: both ways to give a second Claude Code session its own checkout.
- Resume a Claude Code Session: --continue, --resume, /resume, and Where Sessions Are Kept claude -c continues the latest conversation in the current directory; claude -r opens a picker or takes a session ID or name; /resume does the same from inside a session.
- Claude Code Hooks by Example: the Matcher, Each Event's JSON, and Exit Code 2 A Claude Code hook is a matcher plus a command in settings.json; the command gets the event as JSON on stdin and answers with an exit code or JSON on stdout.
- Claude Code Skills vs Slash Commands vs Subagents: the File Each One Is, and How to Check It A skill is .claude/skills/<skill-name>/SKILL.md, a custom slash command is a Markdown file in .claude/commands/ (the docs now call it the older format of a skill).
- Build a Claude Code Plugin, Install It From a Local Marketplace, and See Every File It Writes A Claude Code plugin marketplace is a folder with .claude-plugin/marketplace.json (name, owner, plugins), and each plugin in it has its own .claude-plugin/plugin.json (only name is required).
Portfolio
Full portfolio →
DankGame.com
Fantasy conquest and tactical battles for phone and desktop, turn-based, free and with nothing to install.

DankLoot.com
A one-thumb dungeon descent you play in the browser, free on phone and desktop at /play/.

RadarAura.com
A pre-launch page for a planned line of radar presence sensors and air-quality monitors.

WeatherHack.com
Fast, ad-free forecast pages for any city — current conditions, hourly and a 7-day outlook, with no account or signup.

Polyatic.com
A directory of 100+ free utilities.

DankSnake.com
Snake rebuilt as a fast neon arcade game that runs in a browser tab, with nothing to install and no account.

DankChess.com
Play a friend over a shareable link.

DankGames.com
An indie game label: free games that run in a browser tab with no install and no account.

DrawMyCanvas.com
A studio of generative-art animations.

33o1.com
A chain of cryptic puzzles built out of its own addresses.

AItheism.com
Unhurried essays on what artificial intelligence does to the old questions about mind, meaning and belief.

I-ChingBot.com
Cast a reading with three coins or with the classical yarrow stalks.

smallcord.com
A tool that shrinks images, GIFs, video and audio to fit Discord's 10 MB, 50 MB or 500 MB upload limit.

n33q.com
A gallery of AI art I have generated.

DankBuild.com
Hands-on hardware build-logs.

Neuroatomic.com
Four cognitive tools in a terminal skin.

oscillationa.com
A website showcasing an AI entity that runs on the platform X.

VerifyHash.com
Tamper-evidence tooling.
Featured Projects
View All →A Star Map for Any Date, Drawn in the Browser
How the Polyatic star map turns a date, a time and a place into the sky that was overhead: the 1,630-star catalogue it ships, the four coordinate steps from that catalogue to the paper (with the real function names).
A One-Thumb Action RPG in PixiJS: Keeping a Crowd of Monsters Moving
How DankLoot, a one-thumb dungeon game that runs in a browser tab, keeps hundreds of monsters on screen: a fixed-step simulation under PixiJS's frame loop, object pools that stop allocating once a fight starts.
Friend Duels Over a WebSocket Referee: a Small Server That Checks Every Move
How the Duel mode of a browser strategy game is refereed by a small Node process: the 5 browser and 11 server message types on the wire, a server that imports the very rules modules the page runs and refuses illegal moves.
and ten more: One Exact Answer per Page, One Node Script, No Framework, Two Thousand Pages From One City File, Generating 3D-Printable Parts From Code, Two Transports for One Chess Game, Routes With No File Behind Them, E-Invoice Conformance Validator, Raspberry Pi Bluetooth Tracker, WiFi Security Monitor, Oscillationa X-Bot