Jev Design logo

Jev Design

Community
notque
jev-design

Design React interfaces with the full shadcn/ui catalog. The agent writes a brief, Jev picks components and a style recipe from bounded catalogs, then the agent implements, renders, and reviews against concrete checks.

Overview

Publishernotque
Repositoryvexjoy-agent
Skill namejev-design
Stars
443
Forks
50
Bundled files
8
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 8 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by notque on GitHub. Read the source before you install it.

Installation

Install the Jev Design AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/notque/vexjoy-agent/tree/main/skills/frontend/jev-design
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/notque/vexjoy-agent.git /tmp/vexjoy-agent
mkdir -p .claude/skills
cp -r /tmp/vexjoy-agent/skills/frontend/jev-design .claude/skills/jev-design
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Jev Design in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Jev Design on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Jev Design is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Jev design

Each part of the work goes to whoever does it best:

PhaseWhoOutput
1. Briefthe agent running the skillbrief.json
2. PickJev, through scripts/plan.pya component per requirement, a style recipe, install commands, and CSS
3. Compose and buildthe agent, with the frontend skilllayout, hierarchy, copy, custom parts, and working code
4. Reviewthe agent, with any screenshot toolconcrete findings, then fixes or a revised brief

Jev only picks from lists: a component from the catalog's candidates and a recipe from its styles. It does not write layout, copy, or code. The agent does all open-ended work. Everything below is a default. Override any step when you have a stated reason, and write the reason in your summary.

1. Brief

Turn the user's request into brief.json. Read references/brief-writing.md for the procedure and a worked example.

json
{"brief":"Support agents triage 200+ cases a day on desktop; calm, dense, keyboard-first.",
 "style_traits":["dense","calm","professional"],
 "requirements":[
  {"id":"results","role":"Compare, filter, and act on open cases","capabilities":["tabular-data","filter","row-actions"]},
  {"id":"details","role":"Inspect one case without leaving the list","capabilities":["overlay","details"]}
]}
  • List capabilities, style traits, recipes, and limits with --list-capabilities. Use only listed names.
  • Keep the brief to audience, task, and tone, 1,500 characters at most. Layout and copy notes stay with you for phase 3.
  • Add "primitives": "radix" | "base" | "aria" when the project already uses one primitive set.
  • Ask the user only when the surface type (landing page or app) or the audience is unknown. Otherwise decide, and record the assumption.

Deriving a brief from an existing screen

The planner has no vision input and picks components, not layout. Read the screen (DOM, a screenshot) yourself and write the brief from it: one requirement per region, each with 1 or 2 capabilities and a role written as a verb plus an object. Three capabilities per requirement abstained with no_compatible_component; vague roles abstained with low_fitness, and verb-plus-object roles selected (data-table 0.94). Layout stays with you in phase 3.

2. Pick

bash
python3 skills/frontend/jev-design/scripts/plan.py \
  --input brief.json --output /tmp/design-plan.json \
  --receipt /tmp/jev-design-receipt.json --css /tmp/design-theme.css

The planner filters the catalog by capability in code: each requirement gets at most six candidates, tightest fit first. It packs requests to 3,500 tokens or fewer and refuses to send any request over 4,500. It sends through the selectable Jev transport (Vercel AI Gateway when configured), which retries 429, 503, and 529 with jittered backoff. It validates every answer and accepts a pick only when its fitness is 0.62 or higher. It never installs anything or edits code.

When the plan is selected, implementation holds:

  • install: the exact npx shadcn@latest add ... command, plus npm for extra dependencies.
  • css: paste-ready @theme inline, :root, and .dark blocks.
  • fonts: the families to load.
  • layout_tokens: radius, density classes, and shadow.
  • contrast: every checked WCAG pair and its ratio.

When the plan abstains, the output still holds baseline and candidates:

ReasonDo
no_compatible_componentFix the listed capabilities, or split the requirement.
low_fitness, none_or_out_of_catalogRewrite that requirement's role as a verb plus an object, and rerun. If it abstains again, build that part as a custom component (phase 3).
low_style_fitnessAdd or change style_traits, and rerun. If it abstains again, pick from --list-capabilities styles yourself.
jev_unavailable, malformed_responseUse the baseline, check it against each candidate's use_when, and say in your summary that Jev did not pick.
request_too_large, invalid_requestShorten the brief or roles as the message says.

Run the planner at most three times per screen.

3. Compose and build

Use the frontend skill. Follow this order:

  1. Run init (if needed), install, and npm exactly as the plan gives them.
  2. Paste css into the app's global stylesheet, replacing the existing theme variables. Load fonts.
  3. Write the layout. Apply layout_tokens everywhere: the same control height, row height, gap, and section spacing on every part of the screen.
  4. Write real copy: a headline that names the task, labels as nouns, buttons as verbs with objects ("Assign case", not "Submit").
  5. When no catalog component fits, compose from catalog parts first (item + dropdown-menu, card + chart). Write new markup only when that fails, and reuse the recipe's variables.

4. Review

Build with UI design judgment and its recipes. Render the screen and review it with references/visual-review.md. Use the harness's screenshot tool (Playwright or chrome-devtools MCP). Capture 375, 768, and 1280 px widths in light and dark mode (set deviceScaleFactor 2 for the 375 px shots you send to Jev).

  • Send the desktop and mobile screenshots to Jev, one Noul per trait, with the rated reference in the same state. Load references/jev-images.md for captures, question set, and code. Image answers steer the review. They do not replace the checklist.
  • Report each finding as a fact with a location: "Primary button in the dialog footer is below the fold at 375 px", not "spacing feels off".
  • Fix code-level findings in code. Put requirement-level findings (a wrong component, the wrong tone) back into brief.json, and rerun phase 2.
  • Stop after three review rounds. Report what remains.
  • If the harness has no screenshot tool, say so. Give the user the checklist from visual-review.md to check by eye, and do not claim visual quality.

Rules for changing the planner

Apply the Jev production rules to any change in how requests are built or sent. They cover request size, retries by status, and budget checks. Keep the worst-case size test passing: too much context is the most common failure. The planner picks among catalog candidates, and Jev leans toward the first option on some inputs: keep candidate order out of the signal (tightest fit first is a code ordering, so test a reversed order on labeled requirements before trusting a pick). Pin a versioned model ID for planner calibration; jev-latest moves between versions. Read references/decision-card.md before you change the model, catalog, rubric, threshold, bounds, failure policy, or promotion status. references/catalog-v1.json is kept for reference only.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Jev Design AI skill do?

Design React interfaces with the full shadcn/ui catalog. The agent writes a brief, Jev picks components and a style recipe from bounded catalogs, then the agent implements, renders, and reviews against concrete checks.

Why use Jev Design on TypingMind?

Because you install it once and use it with any model. Jev Design is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Jev Design in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/notque/vexjoy-agent/tree/main/skills/frontend/jev-design. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Jev Design?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Jev Design?

As many as you like. As long as a model supports skills, you can use Jev Design with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Jev Design AI skill free?

Yes. It is published on GitHub by notque under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇