ppuzzle.dev

puzzles in code

Work

col 1-4, row 1

pattern engine

here's the thing about puzzles -- they're just patterns waiting to be recognized. this project explores generative pattern systems, built with rust and rendered in real-time on the gpu. each pattern is a riddle, each solution a new visual language.

the engine processes fractal rulesets at 60fps, outputting svg artifacts that evolve with each interaction cycle. patterns range from simple tessellations to chaotic strange attractors. built on wgpu with a custom shader pipeline.

col 5-8, row 1

glyph decoder

a typographic experiment where letterforms decompose into their geometric primitives. try clicking a letter -- it splits into bezier curves, anchor points, and construction lines, revealing the hidden architecture of type.

uses opentype.js to parse font files client-side, extracting glyph outlines and converting them to interactive svg paths. supports variable fonts with real-time axis manipulation. the whole thing runs in a web worker.

col 1-5, row 2

grid compiler

what if css grid was a programming language? this compiler takes a visual grid layout and generates the minimal css needed to reproduce it. draw boxes, set constraints, export code. no magic, just math.

the constraint solver uses a modified simplex algorithm to find optimal track sizes. supports implicit grids, named areas, and subgrid. outputs clean, human-readable css that actually makes sense.

col 6-8, row 2

noise lab

perlin, simplex, worley, value -- every noise algorithm visualized side by side. tweak parameters, blend layers, export as shaders or textures.

written in glsl with a webgl2 renderer. all noise functions are implemented from scratch -- no libraries. includes a node-based editor for chaining operations and a timeline for animating parameters over time.

About

col 1-6, row 1

the short version

developer, designer, puzzle enthusiast. i build things at the intersection of creative coding and systems thinking. most of my work lives in the browser, but the interesting problems usually start on paper.

i believe every good interface is a solved puzzle -- and every great one invites you to solve it yourself.

previously worked on compilers, design tools, and one very ambitious procedural terrain generator. current obsessions: shader art, constraint systems, and the surprisingly deep math behind good typography.

col 7-8, row 1

tools

rust, typescript, glsl, wgpu, svelte, figma, blender

also comfortable with: python, go, postgres, redis, docker, nix. i pick the tool that fits the puzzle, not the other way around.

Explore

col 1-3, row 1

writings

occasional thoughts on creative coding, design systems, and the joy of constraints. no schedule, no newsletter, just words when they're ready.

recent: "why every grid is a puzzle," "the beauty of off-by-one errors," "helvetica is a mood." all posts are plain html -- no framework, no build step.

col 4-6, row 1

sketches

daily creative coding experiments. some are beautiful, some are broken, all are honest. built in p5.js, three.js, or raw canvas depending on the mood.

the archive goes back three years and counting. favorites get promoted to full projects. failures get their own special gallery because they're usually more interesting.

col 7-8, row 1

open source

all projects are source-available. take what's useful, break what's interesting, share what you learn.

contributions welcome -- especially bug reports that come with ascii art reproductions. those are the best kind.

Contact

col 1-5, row 1

say hello

got a puzzle you can't solve? a project that needs some creative engineering? or just want to talk about the golden ratio? reach out. worst case we have a good conversation.

response time varies with puzzle difficulty. simple questions: same day. collaboration proposals: give me a weekend. existential questions about grid systems: could be a while.

col 6-8, row 1

elsewhere

github -- where the code lives
mastodon -- where the thoughts wander
are.na -- where the inspiration collects

i don't do twitter/x anymore. if you need to find me in real life, i'll be at the coffee shop with the best wifi and the worst music.