developer, mostly games.

A jar of marbles with hand-written physics. Each marble remembers where it was a moment ago and keeps moving that way, and overlapping marbles are nudged apart eight times a frame. Grab one and fling it; hit hard enough and it splashes into the fluid behind.

MarblesDrag, fling, or tap

A little boat floating on the fluid behind this page. Every frame, it asks the simulation how fast the water is moving right underneath it, and drifts with the current. Stir the water with your cursor, or tap the pond to blow it along.

PondStir the water, or tap to blow

Discord bots with no server. Your bot ships as a single AWS Lambda function; cordless provisions it, wires the endpoint and registers your commands, so you write handlers, not infrastructure. Nothing runs between interactions.

Visit cordless.dev
Interaction pathcordless.dev, fig. 1
POST /interactionsinvokeasync200, replyedit replycold start +12 mscold start +18 msDiscorduser runs a commandFunction URLlambda url, api gwhandler λyour codeworker λasync, slow work
idle, 0 ms compute, $0.00

A real fluid simulation runs behind every page, stirred by your cursor. The page moves sideways like film through a gate, with a timecode you can scrub.

Background
Renderer
WebGL2, hand-written
Model
Stable fluids, 20 pressure passes
Grid
128 × 128 cells
Dyes
Shader passes
28 per frame

What's Inside the Button

How the entire game state for Daily Dungeon gets packed into a Discord button, and why that packing discipline shapes everything built on top of it.

Read the post
Button ID0 / 39 bytes

door:AyEBAATXo_uwBQEDZQkHDgAcAC0AAACjAAYBAwACAQITAAEADAAA:2

  • identity
  • character
  • combat
  • economy
  • encounter
  • meta

00:00:00:00
shiv.mov