16px bezel
8px glass edge · total 24px
TAUFIQ · PRODUCT DESIGNER{{ bt.big }}
{{ bt.lab }}
TAUFIQ · PRODUCT DESIGNER{{ bt.big }}
{{ bt.lab }}
DEEP VIEW · SOLUTION AHEAD
READ THE CASE STUDY ↗
ALT 000 KM
INCOMING · OBSERVATIONThe solution is often a simple thing nearby. Can you see it?
Hey, I’m TaufiqProduct designer & front-end developer. This is my portfolio.
LATEST LOGNov 5, 2026{{ tx.status }}{{ tx.dots }}

{{ tx.a }}{{ tx.g }}▍{{ tx.b }}

{{ l.date }}{{ l.text }}
Solide
COMING SOONLEAVLY · MOBILE APP
Solide editor
{{ p.name }}{{ p.tag }}

{{ p.desc }}

STATS · COMING SOON
{{ s.v }}
{{ s.l }}
ROLE{{ p.role }} TIMEFRAME{{ p.time }}
SIDE PROJECTLIVE · ACTIVELY MAINTAINED

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. Built over three months, with one restart along the way.

ROLEProduct designer and developer
TIMELINEJul 2026 – Present
PLATFORMDesktop app (Tauri)
SKILLSProduct design, design systems, front-end development
IMPACT
{{ s.v }}{{ s.l }}{{ s.d }}
{{ s.v }}{{ s.l }}{{ s.d }}
01 · CONTEXT

It started with one week, one library and one file that grew too big.

In late June 2026 I wanted a lo-fi tool I could bend to my own way of working. I built the first Solide on GrapesJS in a week, 84 commits from June 26 to July 2, and it worked. Then I audited it: one engine file of 1,179 lines, changed 52 times in 30 days. Every new feature had to squeeze through that one door.

On July 3 I started over. This time the framing, the flows and the UI system came first, and the code came after. That second start is the Solide you see here, and I have since drawn more than 300 Tasmi' screens on it, from rough lo-fi to final hi-fi.

84COMMITS IN WEEK ONEGrapesJS, June 26 to July 2. Then the audit found one engine file of 1,179 lines.
02 · USER 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?

SOLUTION · A DESIGN TOOL THAT…
{{ s.n }}{{ s.t }}{{ s.d }}
03 · RENDERER EXPLORATION

My first question was the oldest one in any design tool: what actually draws the canvas? GrapesJS got me running fast, and my own audit showed me what fast had cost.

{{ o.t }}{{ o.tag }}
{{ it.s }}{{ it.x }}
FINAL PICKCustom DOM renderer in TypeScript
{{ it.s }}{{ it.x }}
04 · PLATFORM EXPLORATION

Next: where should Solide live? I wanted to click an icon and start drawing, offline, in a window of its own. Anyone I share a file with would want a link instead.

{{ o.t }}{{ o.tag }}
{{ it.s }}{{ it.x }}
FINAL PICKTauri desktop app with a web adapter

The same frontend runs on both through a PlatformAdapter. The browser version has existed since 2026-09-21.

BROWSER · WEB ADAPTERDESKTOP · TAURI
05 · AI IN THE FILE

Then the part I cared about most: how can an AI help without guessing? I had watched too many generated drafts land next to my work instead of inside it.

{{ o.t }}{{ o.tag }}
{{ it.s }}{{ it.x }}
FINAL PICKAgent through MCP, with a decided answer for three failure points
1AI edits only the element you meant
2A drag lands in the right frame
3A paste never brings tokens the file lacks
All three are built. Every row the agent touches flashes.
06 · SPECS 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.

24BEHAVIOURS DRAWN, A TO X
4REVIEW ROUNDS TO SIGN-OFF
2 daysFIRST CARD TO MERGED CODE
15TEST SUITES NOW GUARD IT
ROUNDS 1–2 · 27 SEP · DRAW, SELECT, SET THE TYPE
{{ b.k }}{{ b.alt }}
{{ b.t }}
{{ b.d }}
ROUNDS 3–4 · 28 SEP · THREE CALLS THE REVIEW MADE
{{ b.k }}{{ b.alt }}
{{ b.t }}
{{ b.d }}

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.

07 · KEY FLOWS

Approved before any code. The eighth step is the point of the product: what you drew is what you build from.

EIGHT STEPS, FROM IDEA TO CODE
{{ fNum }} / 08
01
Home screenRecent projects, or a new one
02
A window per projectSeveral projects open at once
03
Frame from a presetA preset size or a custom one
04
Draw it, or ask the agentShapes and text, or a prompt over MCP
05
Select and styleOne node or many, in Properties
06
Auto layout and constraintsA group becomes a frame on the way
07
Export spec and codedesign-spec.json, HTML and CSS
08
Build the real productA coding agent builds from the export
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
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
08 · REFLECTION

What building Solide taught me.

{{ s.n }}{{ s.t }}{{ s.d }}
NEXT UP · CASE STUDY 02 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' cover
{{ specLabel }}{{ specCount }}
{{ b.k }}{{ b.alt }}
DIAGRAM · {{ b.k }}
{{ b.t }}
{{ b.d }}
{{ bpLabel }}