It started with a phone call
My mom called on a Saturday. She had been working on a crochet blanket — something with a repeating geometric border — and she wanted to plan the color layout before she started stitching. She had been sketching on real graph paper, coloring in squares with pencils, erasing, recoloring. It was working, but she wanted something she could use on her iPad. Something she could zoom in on, fix mistakes without eraser smudges, and save without worrying about the dog knocking her notebook off the table.
She had tried a couple of apps. One was a general-purpose pixel editor that had no concept of yarn or stitches. Another was a crochet tool so cluttered with features and ads that she gave up before finishing a single row. She did not need a full design suite. She needed graph paper that understood what she was making.
I told her I would look into it. Then I spent the next two hours thinking about it. By Sunday morning I had the start of something: a grid you could paint on, a palette you could customize, and a layout that did not fight with touch input. I sent her the link. She sent back a photo of her iPad on the kitchen counter with the grid open, half-filled with blues and grays, next to a cup of coffee.
That was the moment the project had a user. Not a hypothetical persona. Not a market segment. My mom, on her iPad, designing a blanket border.
Everything I have built since traces back to that phone call. Not because the technical problems are especially novel, but because every decision has a real person standing behind it. When I am choosing between two approaches, I think about whether she would notice the difference. Usually she would.
What Pattern actually does
Pattern is a graph-paper design tool for crochet, beading, and quilting. It is built around the way makers already think: in grids, in color blocks, in rows and columns that map directly to physical materials.
The core interaction is simple. You pick a color, you paint cells on a grid. You can erase, flood-fill a region, or swap colors across the whole design. The palette is not just a color picker — each swatch can carry material metadata like brand, SKU, and dye lot, so the design stays connected to the physical supplies you are working with.
From that single editor, Pattern supports three craft engines. A crochet project generates row-by-row stitch instructions from the grid. A beading project maps to bead counts and thread paths. A quilting project breaks the grid into block dimensions. Each engine includes its own validation, instruction generation, and visual preview. The grid is the same. The output is shaped by the craft.
The instruction generation is AI-powered. Pattern reads the colored grid cell by cell, interprets it against the selected craft type, and produces step-by-step directions with confidence ratings. The goal is not to replace a maker’s judgment. It is to save the tedious work of translating a visual design into written instructions by hand.
Export options include PNG for sharing, PDF for printing, and JSON for backup or transfer. Everything runs in the browser. There is no install step, no account wall for basic use, and no feature you have to unlock.
The whole thing is built mobile and tablet-first. Touch targets are sized for fingers, not cursors. The tool dock is fixed and accessible without scrolling. The layout responds to the device without hiding functionality behind menus. My mom uses it on an iPad. That is the benchmark.
Building what she actually needs
The features that matter most in Pattern are not the flashy ones. They are the safety features — the ones that protect a maker’s work from being lost, mangled, or accidentally destroyed. Every one of them came from a real moment.
She texted me: “I lost my whole pattern”
That text arrived on a Tuesday. She had been working on a design for about an hour, closed the browser to answer a call, and when she came back the grid was blank. She thought it had saved. It had not.
Autosave was the first real feature I built after the painting tools. The implementation is straightforward but deliberate. After any change to the grid, a 700-millisecond debounced timer starts. When the timer fires, the current state is serialized to JSON and compared against the last saved version. If the JSON has actually changed, a PUT request goes to the API. If it has not, nothing happens.
The UI shows a save status indicator: idle when nothing has changed, a brief saving state during the request, and a saved confirmation with a subtle pulsing animation when the write completes. On the server side, each save increments a project version number, so there is a recoverable history if something goes wrong downstream.
Seven hundred milliseconds is long enough to batch rapid painting strokes together and short enough that you never lose more than a second of work. She has not lost a pattern since.
”Can I undo just that last part?”
She had painted a row of cells, decided she did not like the color, and hit undo expecting it to reverse the whole row. Instead it undid one cell at a time. Twenty taps to undo twenty cells. She was not happy about it.
The fix was stroke-based undo. Pattern captures a snapshot of the affected region before each drag operation begins. When you press down, drag across twelve cells, and lift your finger, that entire stroke is one entry in the undo history. One undo action reverses one intentional gesture.
Under the hood, this is a pair of stacks — history and future. Each entry is a lightweight snapshot of the cells that changed, not a full copy of the grid. Redo works the same way in reverse. The stacks reset when you start a new action after undoing, which matches the behavior people expect from any editor.
”What if I close the tab by accident?”
This one came as a voicemail. She had been working on a design, swiped the wrong way on her iPad, and Safari closed. The autosave caught most of the work, but she wanted to know why the app did not warn her.
Now it does. Pattern registers a beforeunload event listener that compares the current grid state against the last saved state. If there are unsaved changes, the browser’s native confirmation dialog appears before the tab closes. It is not a custom modal or a branded popup. It is the browser’s own “you have unsaved changes” prompt, which is the one interaction pattern every user already recognizes.
This only fires when there is genuinely unsaved work. If autosave has already persisted the latest state, closing the tab is silent. No unnecessary friction.
”I want to fill this whole section”
She had outlined a shape — a diamond inside the blanket border — and wanted to fill the interior with a single color. She was painting cell by cell. It took a while.
Flood fill uses a standard breadth-first search. You tap a cell, the algorithm walks outward through adjacent cells that share the same original color, and replaces them all with the active color. A visited set prevents cycles. The fill respects the grid boundaries and stops at color edges, which is exactly how a paint bucket tool should work.
The important detail is that flood fill is tied into the same undo system as painting. One fill operation, no matter how many cells it touches, is one undoable action. Tap fill, change your mind, tap undo, and the entire region reverts. The implementation uses the same snapshot approach: capture the affected cells before the fill, push them onto the history stack, then apply the change.
The fill tool uses the same pointer event system as the paint and erase tools, so it works identically with touch, stylus, and mouse input. No separate code paths for different devices.
The feedback loop
Building Pattern for my mom has taught me something I already knew but had not fully internalized: building for one real person is better than building for an imagined audience.
When you have an abstract user in mind, you build features based on assumptions. When you have a real person texting you screenshots and voicemails, you build features based on evidence. The autosave threshold is 700 milliseconds because that is what felt right after watching her paint. The undo system is stroke-based because she told me cell-by-cell was wrong. The flood fill exists because she described exactly what she wanted to do and I could see the gap.
The texts keep coming. She has opinions about color palette organization, about how export should work, about what the grid looks like when printed. Every message is a tiny product brief. The app keeps evolving because the feedback never stops.
Pattern is still early. It is an invite-only prototype, and the craft engines are still being refined. But the foundation — a calmer, more tactile design tool that respects the maker’s work — is solid. The safety architecture is real. The touch experience is real. The person using it every week is real.
If Pattern sounds like something you would use, you can learn more on the Pattern product page. If you want to try it or have questions, reach out through the contact form. I am always interested in hearing from makers who have been looking for something like this.