
I am not a strong designer, so most of my design work starts with references. I would give an agent a screenshot and ask it to build something similar. It could usually copy the big decisions, but it missed the details that made the original work: the exact colors, border radii, spacing, typography, shadows, and component proportions.
I built getdesign to give the agent both sides of the reference. It gets a screenshot of the rendered page and a structured design document built from the page's actual CSS.
Why a screenshot was not enough
A screenshot tells an agent what the page looks like. It does not reliably tell it whether a card uses a 12px or 16px radius, which gray belongs to a border, or how the spacing changes between sections.
getdesign collects the page's HTML and stylesheets, renders it in a real browser, and extracts colors, typography, spacing, radii, borders, shadows, and responsive rules. It then combines that evidence with screenshots instead of asking the model to guess everything from pixels.
I based the file format on Google Labs Code's DESIGN.md idea, then made getdesign's own fixed nine-section contract. Every run returns the same order, including components, layout, depth, interactions, responsive behavior, and an agent prompt guide.

exact colorsborder radiusspacing rhythmtype hierarchybelow-the-fold designhow to apply itThe Daytona implementation
The Daytona capture system was the hardest part to build, and it is the part I am most proud of. Each run creates a temporary Daytona sandbox and launches Chromium inside it. getdesign measures the rendered page, captures it in viewport-sized tiles, scrolls through the full page, and stitches those tiles into one screenshot. The sandbox is deleted after the run.
This took far more work than calling a screenshot API. Pages load at different speeds, some continue growing as they scroll, fixed headers appear in every tile, and the browser can report a page as ready before the visual layout has settled.
How getdesign captures a full page
Start a short-lived Daytona environment.
Open the submitted URL in kiosk mode.
Read the rendered height inside the sandbox.
Screenshot each viewport while moving down the page.
Combine the ordered tiles into one full-page image.
Remove the temporary environment after the run.
One extraction pipeline, several ways in
What works today and what still breaks
getdesign is ready for private beta clients. A few friends use it, but the hosted extractor is not publicly available yet. The agent skill is public and works, although it is less reliable than the complete Daytona pipeline. The CLI and TypeScript SDK are published. The dashboard, documentation, and desktop app also work. The hosted API is not ready.
The weakest part is fetching the page source and CSS. Some sites render most of their interface on the server. Others inject styles after JavaScript runs, lazy-load assets, hide files behind authentication, or ship more CSS than the fetcher can reasonably process. The screenshot shows what appeared, but the crawler may still miss the rule that produced it.
getdesign is one of my startup projects, but Oikina gets most of my time. getdesign will stay open source. The business would come from hosted runs through a subscription, usage pricing, or a mix of both. I have not settled on the model yet.
# CLI
npx @getdesign/cli https://cursor.com --out design.md
# TypeScript SDK
import { getDesign } from "@getdesign/sdk";
const result = await getDesign("https://cursor.com");npx @getdesign/cli https://cursor.com --out design.md