A parametric design toy. One stroke, endless compositions.

dotweave.fun

dotweave.fun

The Idea

I wanted to make something people could play with.
Not observe, not study; actually get their hands on and make something from.

Give someone a canvas with a single mark and a small set of controls and see what they create. That's it. The fun was in finding out how few controls you need before something interesting starts happening.
Turned out the answer is not many.
dotweave.fun

How It Works

  • Built with SvelteKit and p5.js in instance mode. All canvas parameters live in Svelte stores and the p5 draw loop reads from them on every frame, keeping sketch logic entirely separate from UI logic.
  • A custom iOS-style glass morphism control panel morphs between a collapsed tab bar and an expanded controls view. No component libraries, entirely hand-rolled.
  • Five tabs: Form (the mark), Repeat (the grid), Drift (offsets and field effects), Colour (five-slot palette system with blend modes), Export.
  • Each mark is drawn as 200 subdivided vertices with sine displacement, keeping wave curves smooth at any frequency or density.
  • The glass panel samples actual rendered canvas pixel brightness every 20 frames and adapts its tint dynamically to stay legible over any composition.
  • Export includes Save as PNG, Share sheet, Copy Image to clipboard, Copy p5.js Code (a working self-contained sketch for editor.p5js.org), and Copy Link; the entire design state encoded into the URL. The link is the file.

What I Learned

Every control had to earn its place.
The instinct throughout was to keep adding: more tabs, more sliders, more modes.
A hard limit of five controls per tab forced real prioritisation. Features that couldn't justify themselves got cut.
The interesting creative territory didn't come from more controls but from the interactions between the ones that stayed. Wave height and frequency together. Drift rotation on a dense grid. Fade with progressive offset. The combinations are the product.
Constraints that feel like restrictions at the start of a build usually turn out to be the reason it's good at the end.

Related Work