Netlify Identity protects Ably apps from hackers
Netlify Identity protects Ably apps from hackers

How to use Netlify Identity and serverless functions to issue Ably JWT tokens to verified users only — keeping your Ably API key hidden and bad actors locked out.

Replace WhatsApp with AI Chat
Replace WhatsApp with AI Chat

Public WhatsApp groups attract spam and bad actors. I replaced ours with an n8n pipeline and a siloed AI chatbot — zero moderation, automatic email escalation when confidence drops.

WebSocket Synced Stopwatch
WebSocket Synced Stopwatch

A PWA that keeps a pose countdown in perfect sync across every phone and laptop in the room — built for life drawing sessions. No app install. Just a URL.

Which Agent When?
Which Agent When?

Pick the right AI model — capability, context, cost per token. Because throwing Opus at a regex is the engineering equivalent of a sledgehammer on a drawing pin.

Painless paralax page elements
Painless paralax page elements

A pure CSS parallax effect with minimal scaffolding and zero JavaScript — demonstrated live on CodePen. Simple to drop into any lightweight static site.

Audiobook markdown renderer
Audiobook markdown renderer

A Ruby experiment that renders MP3 audiobooks from markdown articles using Google Speech API and Wavenet voices. Web Components power the story selection interface.

Improve UI with chrome extensions
Improve UI with chrome extensions

Use the Chrome extension API to inject a modern UI layer over any legacy ASCII interface — a lightweight approach to enhancing user experience without touching the underlying source.

Infinite procedural landscape
Infinite procedural landscape

Perlin noise terrain wrapped in both axes with dynamically injected artifacts, giving an infinite impression. Built in PHP and connected to the Instagram API for live content.

The Lorenz attractor in Blender
The Lorenz attractor in Blender

Using Blender's Python console to trace chaos algorithms as 3D splines, then converting each spline into a smooth geometry mesh. Pure maths, rendered physical.

TacTicToe on a 3D Rubik Cube
TacTicToe on a 3D Rubik Cube

Tic-tac-toe with a twist — a multilayer tactical game where players rotate the 3D matrix using Rubik's cube strategy. Built with BabylonJS, React, Redux and ES6.

Lifedrawing with SVG on WebSockets
Lifedrawing with SVG on WebSockets

An ultra-minimal UI that streams huge SVG images over WebSockets — the sketch recreates in real time, line by line, with zero wait. Node.js server hosted on Heroku.

Raspberry spy: a camera controller
Raspberry spy: a camera controller

BASH remote control for the Raspberry Pi Zero camera — JavaScript WebSocket UI with configurable settings and Sunrise/Sunset synchronisation for automated timelapse photography.

Desktop shredder for i3 lockscreen
Desktop shredder for i3 lockscreen

i3 is my preferred window manager — a lock screen that uses OpenCV and numpy to slice the desktop into animated strips. Developed with iPython, aka Jupyter notebook.