Book a callGitHub1

Free and open source · MITNew: a field guide to motion, UX and UI

Make everything you build look like it belongs together.

Your AI tools know what to build. OpenDesigner tells them how it should look: one set of design rules that every new screen follows, and that it updates when you change your mind.

Two commands in Claude Code, then a few plain questions

/plugin marketplace add ckryptickunal/OpenDesigner
1 · You answerQuestion 5 of 5

Do you have a brand color or a logo?

You#15803D

  • Makinga finance tool for approving invoices
  • Whoused all day
  • Whereweb
  • Feelprecise, calm
2 · It writes the rulesPasses
/* build/css/tokens.css, resolved */
--ds-radius-control: 6px;
--ds-size-control-md: 32px;
--ds-text-body-md-size: 14px;
--ds-color-bg-action-primary: #15803d;

DESIGN.mdButtons and fields have 6px corners; cards have 8px corners.

164 color pairs checked · 50 files · 0 errors
3 · Your AI buildsBillerwick
Invoice 2207Waiting on you

Marlowe & Pratt Supplies · due Fri 16 Oct

$14,860.00

Traction battery × 1$12,940.00
Charger, three-phase × 1$1,420.00
Delivery and fitting$500.00
DeclineApprove $14,860
A real example: five answers, the rules written from them, and a screen built only with those rules. Photo: Philipp Hubert on Unsplash.

Works in the AI tool you already use

  • Claude Code / app
  • ChatGPT / Codex
  • Cursor
  • Copilot in VS Code
  • Gemini CLI

01The problem

Every new screen drifts a little.

One page gets rounded buttons, the next gets square ones, and a new blue appears. People notice: they judge how a page looks in 17 to 50 milliseconds, and simple, familiar screens are the ones they rate most appealing (research).

A copy in every tool

Each tool keeps its own corner value. Each new screen makes its own small choice, and the copies drift apart.

Design tool8 px
Code6 px
A new screen from an AI chat12 px

One source that every tool reads

The agreed value lives in one token file. Designers, engineers and AI coding tools all read the same number.

opendesigner/tokens/
radius.control
6 px
DesignersFigma variables6 px
EngineersCSS, Tailwind, Swift, Compose6 px
AI toolsDESIGN.md, read before any change6 px
Copies drift: a design file, the code and a new AI-built screen each end up with their own corner value. One token file, exported to every tool, keeps them the same number.

02The fix

One set of rules that every screen follows.

OpenDesigner turns a few plain answers into rules for color, type, spacing, corners and motion. Here are three products, each made from five answers.

The five answers

Making
a habit app for families
Who
Used regularly
Where
iPhone and web
Feel
friendly, playful
Brand color
#E0457B

What the engine wrote

Corners
16px controls, 24px cards
Control height
40px
Body text
16px
Type scale ratio
1.25
Heading weight
650

#E0457B stays your brand color, but white text on it reads at only 3.96:1, and the system's dark text at 3.93:1. So buttons use #d13c71, which reads at 4.57:1.

Evening readingOn track

Mia and Sam · 20 minutes a day

12-day streak

This week5 of 7 days
Longest streak19 days
Next reminder19:30
Skip todayMark today done

The five answers

Making
a public service for renewing a permit
Who
Used now and then
Where
Web
Feel
calm, trustworthy
Brand color
#1E3A8A

What the engine wrote

Corners
0px controls, 0px cards
Control height
48px
Body text
16px
Type scale ratio
1.2
Heading weight
600

Your color stays exact on buttons: white text on #1e3a8a reads at 10.36:1.

Renew your parking permitStep 2 of 4

Your vehicle

Permit zoneZone C
Permit length12 months
Save and finish laterContinue

The five answers

Making
a finance tool for approving invoices
Who
Used all day
Where
Web
Feel
precise, calm
Brand color
#15803D

What the engine wrote

Corners
6px controls, 8px cards
Control height
32px
Body text
14px
Type scale ratio
1.2
Heading weight
650

Your color stays exact on buttons: white text on #15803d reads at 5.02:1.

Invoice 2207Waiting on you

Marlowe & Pratt Supplies · due Fri 16 Oct

$14,860.00

Traction battery × 1$12,940.00
Charger, three-phase × 1$1,420.00
Delivery and fitting$500.00
DeclineApprove $14,860

Real engine output (site/demo_systems.py), nothing tuned by hand. Each system also has dark mode, three densities and reduced motion. Photo: Sean Fahrenbruch on Unsplash.

03Real screens

What consistent looks like.

B2B screens built by AI agents through OpenDesigner and reviewed by the maintainer. Every brand is invented, and much of the identity work was done outside the tokens.

See all 71 designs
Bill approvals · Fennick
FennickFennick
Service overview · Sounding
SoundingSounding
Security settings and audit log · Ferrule
FerruleFerrule

Photos: Photoholgic, Annie Spratt, Harshal Tandel on Unsplash.

04How it works

Five answers today. Consistent screens from then on.

  1. 01

    It reads what you have

    It reads your CSS, Tailwind config, tokens, logo and fonts, and never asks what they already answer.

    • globals.csscolors
    • tailwind.config.tstheme
    • package.jsonreact
    • logo.svgmain color
  2. 02

    You answer up to five questions

    What you're making, who it's for, where it runs, how it should feel, and your brand color.

    1. What are you making?
    2. Who is it for?
    3. Where does it run?
    4. How should it feel?
    5. A brand color or logo?
  3. 03

    It checks the rules, then saves them

    It checks contrast, target sizes, focus and motion, then saves the rules as files in your project.

    $ engine.py build
    Passes: no errors.
    Checked 164 color pairs in every mode,
    12 mode combinations and 427 tokens.
  4. 04

    Every new screen follows them

    Your AI reads DESIGN.md before changing the interface, and a review flags any value that drifted.

    $ engine.py review
    card.css:1 border-radius: 7px
    → use var(--ds-radius-container)

05What you can build

Websites, apps, dashboards and enterprise software.

06Why it stays consistent

Built to keep your product together, not just to start it.

Nobody has to guess why

Every value records how it was set and why. Locked values change only with the owner's yes.

D-0056 · dials.roundness = 75

chosen supersedes D-0033

“Use iOS style rounded edges with iOS kerning everywhere instead of sharp corners.”

Readable for everyone

WCAG 2.2 AA contrast, 24 px targets, focus rings and reduced motion: a floor, not a certificate.

Aa4.5:124 px

Start from what you have

Point it at a website, screenshot, Figma file or repo. It keeps the structure, never another brand's identity.

WebsiteScreenshotFigma fileRepositoryBrand book

Your brand stays yours

It asks you for the logo, photos, typeface and voice, and never fakes them.

Logo · Not enough informationVoice guide · Not enough information

Ask for a look in plain words

Glassmorphism, bento, risograph, Swiss: each style is named, shown and mapped to settings.

GlassmorphismBento gridRisographSwiss

Your work stays on your computer

No account and no server. The engine is one Python file with no network calls.

$ python3 engine.py --help
… stdlib only, no network

Rules your code and your design tools can read

The same answers always give the same tokens and exports, for your code, Figma and your next AI session.

  • DESIGN.mdyour rules in plain words
  • opendesigner/tokens/the source, DTCG 2025.10
  • build/css/, build/tailwind/CSS and Tailwind v4
  • build/figma/Figma variables
  • build/swift/, build/compose/iOS and Android
The overview page generated for OpenDesigner's own brand, with each area marked Chosen, Default or Not enough information.
A real overview page: what you chose, what is still a default, and what only you can give, like a logo. Photo: Annie Spratt on Unsplash.

07Learn the craft

A field guide to interfaces that feel right.

The rules come from people who build loved interfaces, such as Emil Kowalski. See each one live, with its source.

08Get started

Add it to the AI tool you already use.

You need your own AI tool. Claude Code, the Claude app and other agents also need Python 3.10 or newer; ChatGPT needs nothing installed.

Add the plugin, then ask for a design system in your project.

/plugin marketplace add ckryptickunal/OpenDesigner
/plugin install opendesigner@opendesigner

Then say: “Create a design system for this project.”

Build the skill zip, then upload dist/opendesigner.zip under Customize > Skills. Code execution must be on.

git clone https://github.com/ckryptickunal/OpenDesigner && cd OpenDesigner
python3 tools/build_dist.py

Then, in a chat: “Create a design system for my app.”

These tools read skills from .agents/skills/ in your project.

git clone https://github.com/ckryptickunal/OpenDesigner
mkdir -p your-project/.agents/skills
cp -R OpenDesigner/.agents/skills/opendesigner* your-project/.agents/skills/

Then ask your agent: “Create a design system for this project.”

No install: a Project with an instructions file and five knowledge files from chatgpt-project/ in the repository.

1. Create a Project.
2. Paste the part of chatgpt-project/instructions.md below its line into the Project instructions.
3. Upload the five files in chatgpt-project/knowledge/.

Then: “Create a design system for my app.”

No AI needed: Python 3.10 or newer, and nothing else to install. The same answers give the same tokens and exports.

git clone https://github.com/ckryptickunal/OpenDesigner
python3 OpenDesigner/skills/opendesigner/scripts/engine.py sketch --name "Acme" --feel friendly,minimal
python3 OpenDesigner/skills/opendesigner/scripts/engine.py build

Then open opendesigner/overview.html.

Status

Early, and honest about it.

  • Created on 2026-09-23 and maintained by one person. There is no tagged release yet; 0.1.0 is planned.
  • No watched user trials yet, and no recorded run in every AI tool. The engine's tests pass.

The most useful help right now: try it on a real project and tell us where it breaks.

ContributeHow to contributeGood first issuesReport a problem

Talk it through

Work through your design with Kunal.

A free 20-minute call with Kunal, OpenDesigner's maintainer, to see whether it fits your product and where to start. OpenDesigner stays free; you never need a call to use it.

FAQ

Questions

All questions

What is OpenDesigner?

OpenDesigner is a free, open-source add-on for AI tools like Claude, ChatGPT, Codex and Cursor. It helps you make a design system: the rules for how your app looks, like colors, text sizes, spacing, corners and buttons. It reads your project, asks a few plain questions, suggests an answer for each with a reason, checks the result, and saves the rules as files in your project.

The code, skills and data are under the MIT licence. The written research and docs are under CC BY 4.0. You need your own AI tool, which may cost money. See the introduction.

Isn't this just a prompt?

Part of it is written instructions your AI follows, yes. The math is done by a Python engine. It works out color ramps, type and spacing scales, contrast checks and every export. The same answers give the same files. The questions follow a fixed order, so nothing is asked before the things it depends on. You can also run the engine with no AI at all. See How it works.

Which AI tools does it work with?

It is packaged for Claude Code, the Claude app, ChatGPT (as a Project), and for Codex, Cursor, VS Code with Copilot, Gemini CLI and other agents that read skills from .agents/skills/. A recorded test run in each of those tools is still on the to-do list. See Install.

Does it send my code or data anywhere?

The engine runs on your computer, uses Python's standard library and makes no network calls. Your chat still goes to whichever AI provider you use, as with any prompt. The illustration skill searches open-licence art sites, but only when you use it. In the Claude app, the scripts run in Claude's code-execution sandbox.

The private log of your steps is off unless you say yes, and it stays in your project. Anonymous reports to the maintainers are a separate yes, and no server collects them yet, so nothing is sent today. See the privacy page.

Try it

Make your next feature feel like it was always there.

One set of rules, and every screen after that follows it.

Photo: Marcel Strauß on Unsplash