{{ vpLabel }}
DEEP VIEW · SOLUTION AHEAD
SIDE PROJECT{{ liveLabel }}9 MIN READ

Solide - One canvas, no second app

A design tool I built for myself first: layout, vector drawing and motion on one canvas, with my own AI working inside the file.

I worked across three apps and paid for two AI plans, and the only check that a built screen matched its design was my own eyes. The first Solide took one week on GrapesJS and then hit a wall, so I started over with the flows and the UI system first. Three months on, I have drawn more than 300 Tasmi' screens on it.

PROPERTIEScase-study.solide
{{ r.k }}{{ r.v }}IN DEVELOPMENT
{{ r.k }}{{ r.v }}IN DEVELOPMENT
SPEC · CASE STUDY 02solide
{{ r.k }}{{ r.v }}IN DEVELOPMENT{{ c }}
PROPERTIEScase-study.solide
ROLEProduct designer and developer, end to end
TIMELINEJul 2026 to presentIN DEVELOPMENT
PLATFORMDesktop app (Tauri) + web adapter
STACKTypeScript, custom DOM renderer, MCP
SKILLSProduct design, design systems, front-end
{{ x.l }} {{ x.d }}
IMPACT

{{ impH2 }}

WAS {{ s.f }}{{ s.to }}{{ s.l }}{{ s.dd }}
AT A GLANCE

One canvas to draw on, an agent that works inside it, and a check on what ships.

THE TOOL TODAY · A DESIGN TOOL THAT…
{{ s.n }}{{ s.t }}{{ s.d }}

The AI part at work: the agent reads the real scene, edits only the element you meant, and every row it touches flashes.

SWIPE TO SEE THE FULL STORY →
01 · USERS & CONSTRAINTS

One user to start: me, designing every screen and then building it.

Solide was built for its maker first. That made the brief unusually honest: every gap between a drawing and its code cost my own time, and every extra tool cost my own money.

{{ s.n }}{{ s.t }}{{ s.d }}
02 · PROBLEM

Three tools, two AI bills, and a gap only my eyes were checking.

A normal day meant laying out screens in one app, drawing icons in another, and paying for the AI that plugs into each. Every switch cost a little focus, and every plan a little money.

Then came the handoff. Porting Solide's own sidebar from its mockup took four rounds of me spotting mismatches by eye. When I finally automated the check, its first run on a section I had already reviewed three times found 134 mismatches. My eyes were the only test, and they were losing.

134MISMATCHES ON THE FIRST AUTOMATED RUNOn a section I had already reviewed three times by eye.
PROBLEM STATEMENT

How might I draw layout, vectors and motion in one place, let my own AI work inside the file, and know, not hope, that the built screen matches?

03 · APPROACH

I threw away a working week and started with the flows and the UI system.

Solide began in late June 2026 as a one-week GrapesJS build: 84 commits that worked, until an audit found one 1,179-line engine file changed 52 times in 30 days.

On July 3 I started over. This time the framing, the flows and the UI system came first, and the code came after. Three rules have carried every session since.

{{ s.n }}{{ s.t }}{{ s.d }}
04 · KEY DECISIONS

Three questions shaped everything else.

For each one I weighed the options before writing any code.

{{ d.n }}{{ d.q }}
{{ r.t }}{{ r.w }}
{{ d.pick }} {{ d.rest }}{{ d.why }}
BROWSER · WEB ADAPTERDESKTOP · TAURI
{{ o.t }}{{ o.tag }}
{{ it.s }}{{ it.x }}
05 · KEY FLOWS

What you drew is what you build from.

Eight flows, approved before any code. The eighth step is the point of the product.

EIGHT STEPS, FROM IDEA TO CODE
{{ fNum }} / 08
{{ f.n }}
{{ f.t }}{{ f.d }}
06 · DESIGN SYSTEM

The UI system came first, and tokens get a screen of their own.

Solide's interface is built from its own tokens. They are edited on a dedicated screen, in light and dark, with math, contrast pairs and alias chains in view instead of buried in a panel.

TOKENS · LIGHT AND DARKTokens get their own screen{{ tokCap }}
Solide token screen, List lens: Theme Color tokens in light and dark, with counts for tokens, broken links and unused tokensSolide token screen, Specimen lens: Theme Color and Base Color ramps on one sheet, with a collection index on the left
Math in tokens= {space/base} * 2, mix(), clamp()
Health at a glanceBroken, incomplete and unused, counted
Contrast pairsRatio and verdict in every mode
Alias chains, drawnWhat a token resolves through
07 · PROCESS AND PROOF

Every behaviour is drawn and signed off before its code.

The pen drew corners only. A curve could arrive in an SVG file, but dragging one of its points bent it out of shape, and a circle showed 5 points instead of 4.

So curves became 24 behaviours, A to X, each one drawn on the canvas and approved over four review rounds before I wrote a line of code. Six of them below.

{{ s.v }}{{ s.l }}
{{ r.label }}
{{ b.k }}{{ b.alt }}
{{ b.t }}{{ b.d }}
{{ r.galN }}

If I can't measure it, I don't claim it.

Solide's own interface plays by the same rule. Its panels are split into 126 sections, and each one must pass the design-diff gate against its mockup before a commit goes through. The gate proves the DOM matches the drawing. It does not prove behaviour or accessibility.

08 · OUTCOME & REFLECTION

Solide already carries real work: more than 300 Tasmi' screens.

Every Tasmi' screen, from rough lo-fi to final hi-fi, was drawn on the Solide canvas and moved into code through its MCP. For a tool built for its maker, that is the test that counts: I kept using it.

Details that matter

Small behaviours I have rarely seen in other design tools, each one designed on purpose.

RARE IN DESIGN TOOLS
Lines to one place travel as one
Links jump across pages
One ID for the panel, the CSS and the agent
Copy a style once, paint it many times
Rotate about any point, even outside the frame
Duplicate, undo and redo each have their own motion
{{ rareN }}

What building Solide taught me.

{{ s.n }}{{ s.t }}{{ s.d }}

What's next for Solide

{{ s.n }}{{ s.t }}{{ s.d }}
NEXT UP · CASE STUDY 01 Tasmi': registration and progress tracking A web app for a Qur'an recitation program, with a flow that is hard to get wrong. Read next
Tasmi' on three phones: picking sessions, the participant home, and editing a record