Peezy - Design Handoff Tool

Peezy is a Figma-inspect and design-handoff tool: a plugin sends a frame to a kanban board, and the card becomes an interactive spec — layers, spacing, tokens, CSS. It closes the gap where the spec and the work item live in different tools, so one of them is always stale. I designed it, built the full stack, and shipped it solo in about three weeks — orchestrating AI coding agents to get from a designer's idea to a production SaaS with a published Figma plugin and realtime sync.

Role
Product Engineering
Timeline
Mar — Apr 2026
Platform
Web · Figma plugin
Team
Solo — design, full stack, plugin
Skills
Product DesignFull-stack EngineeringAI-Assisted DevelopmentFigma Plugin Development
Visit the live site
First commit to shipped
26 days
AI-agent build sessions
64+
Person — design, stack, plugin
1

Context

By the time you build it, the spec has moved

Design handoff leaks. A developer needs a padding value, a hex code, a font size — and the answer is in Figma, or a screenshot the designer annotated, or a Slack thread, or a Notion page, or nowhere. The spec scatters across the tools nobody agreed to keep it in, and three weeks later no one can find the number that was decided.

The real problem underneath is that the spec and the work item live in different tools. The design is in Figma; the task is on a board; the two drift, and one of them is always stale. Reading a design shouldn't mean opening a second app and hoping it still matches the first.

Whatever fixed this would have to put the spec and the work in the same place — so the thing you're tracking is the thing that was handed over.

The flow

Select in Figma, send, inspect

The handoff is three actions and no tab-switching. Select a frame in Figma, click send in the plugin, open the card.

The Peezy Figma plugin panel — connected account, a picked frame 'Main', a board picker set to Design Handoff, a Create New / Update Existing toggle, and a Send to Peezy button
The plugin: pick a board, choose to create a card or update one that already exists, send.

The plugin is deliberately a dumb pipe — it reads the raw Figma node and hands it to the backend, plus runs the cheap, deterministic spec extraction locally. That keeps the surface small and the failure modes obvious: what it sends is exactly what Figma reported.

Detect what you picked, extract it, put it on a card — the whole loop in three steps.

Inspect

Layers on the left, canvas in the middle, truth on the right

Opening a card in inspect mode gives the three-column layout the job actually wants: the layer tree, the design itself, and the properties of whatever is selected.

A card in inspect mode. Every property shows the CSS it resolves to, in grey, underneath.

Three details carry most of the weight here.

Measurements are drawn on the design, not listed beside it. Padding and gaps render as annotations on the canvas, in the place they describe, which is how anyone reads spacing when they have the file open.

Named values beat raw ones. Where a fill or a text style resolves to a token, the panel shows primary or radii.md next to the hex and the pixel value. A developer copying #6366F1 has to guess; one copying primary is using the system. Selecting a component instance shows what it came from — source, variant, size — so a developer can tell whether they're looking at a one-off or a system component before they build it.

Every property shows its CSS underneath. Direction: row sits above flex-direction: row in grey — so the panel teaches the mapping rather than just asserting a value, and the code tabs (CSS, Tailwind, JSX) are a shortcut, not the only way to get the answer.

Rather than describe it — here it is. Peezy's own inspect interface, running against a sample file. Click any layer on the canvas, or pick one from the tree.

JD
Jane Doe
2 min ago

Updated the color tokens in the design system for dark mode support.

Design System
Tokens
View Changes
Dismiss
Click any layer

Tap a layer to inspect

Properties, tokens, and components

Select a layer: spacing is annotated on the canvas, tokens appear beside the raw values, and a component instance reports its variant.

In the product this interface also runs in dark, resolved from the system setting with no manual toggle to forget about. The copy above is fixed to light, so it belongs to this page rather than fighting it.

The engine

Measured locally, interpreted with a model

What makes the extraction trustworthy is a split in how it reads.

Reading a design is deterministic. Spacing, colour, type and layout are already in Figma's own node properties — the plugin computes them locally, exactly as drawn, with nothing to get wrong. The whole inspect canvas, layer tree and property panel run on that path, so what a developer copies is a measurement, not a guess.

Interpretation needs a model. Deciding that a frame is a screen rather than a component, naming things, summarising intent, generating Tailwind or JSX — that is judgement, not measurement, and it runs through Claude on the backend, metered and cached.

Keeping those two apart is the architecture decision the whole product rests on. Putting the AI behind an explicit boundary — instead of letting it seep into the parts that should be exact — means the reading stays honest and the interpreting stays contained. Measurement is deterministic; only opinion gets a model.

Scope

Knowing what to cut

Peezy did not start this focused. Its working title was Fast Kanban, and the plan was much bigger: a mobile-first PWA with six vertical "environments" (dev-designer, developer, content, freelancer, startup, student), a mirror-card system that copied a card into a developer's own board and mapped columns across the two, a QA overlay that onion-skinned the built screen against the Figma frame, PR and version-history integrations. A platform.

I built enough of it to see the shape — the environment config for two of the six presets is still in the codebase — and then cut almost all of it. What shipped is one wedge: Figma inspect without a Dev Mode seat. The mirror cards, the QA overlay, the marketplace of environments: planned, and deliberately not shipped.

The cut is the design decision I'd defend hardest. A platform with six audiences has no sharp answer to "why would I open this today"; a tool that hands a developer the exact spec, on the card they're already tracking, does. Narrowing the vision to a single, nameable job is what turned a moodboard of features into something a developer could adopt on a Tuesday.

Build

Built solo, paired with AI agents

I am a designer. Peezy is a production SaaS: Next.js 16 and React 19, Postgres through Drizzle, Supabase for auth and realtime, Zustand with Immer for board state, @dnd-kit for dragging, Stripe for billing, Sentry for monitoring, three OAuth providers including Figma's, and a published Figma plugin — roughly 2,800 lines of TypeScript on its own — doing the extraction. Optimistic updates with a 50-entry undo stack that skips history while a drag is in flight. 207 commits between the 8th of March and the 2nd of April.

I did not write most of that by hand. I drove it — through 64+ structured sessions with AI coding agents, against a 45-page build log that kept intent, decisions and constraints in one place so each session started with context instead of from zero. The agents wrote the code; I made the calls: what the product is, where the AI boundary sits, that reading should be free, that a designer's approval is a column. The parts that needed a human — the judgement, the taste, the scope cut above — stayed with the human.

That is the skill this project is really about. Not "a designer who can also code," but a designer who can hold a whole product argument end to end — from the handoff thesis to the plugin's node extraction to a bottom-sheet haptic — by directing AI to build faster than a solo human could, without handing any of the decisions away. The same instinct runs through the product itself: Claude does the interpreting, a person decides what's worth interpreting.

Craft

Built for the phone it will actually be opened on

Handoff gets checked on a phone — in a standup, in a hallway, away from the desk. So the board is not a desktop layout squeezed into a narrow viewport; the whole inspect canvas comes with it.

Peezy's board on a phone — the Design Handoff board with a Backlog column of cards and the next column peeking at the edgeA Peezy card open on a phone as a bottom sheet — the design preview above a full spec: dimensions, fill, stroke and typography for the selected text layer, with Copy Spec at the top
The same tool on the device it gets checked on: the board, and a full inspect as a bottom sheet.

Drag handles are gone on touch; a long press of 200ms starts a drag instead, with a 5px tolerance so a scroll gesture is never mistaken for one. Card details open as a bottom sheet rather than a full-page navigation, which keeps the board underneath and makes closing feel like dismissing rather than going back. Columns peek at their neighbour's edge so it's obvious the board continues sideways. Drag start, drop and error each get their own haptic.