Design System logo

Design System

Community
daveebbelaar
design-system

Accent color and design system for a macOS app, from the app's accent and the accent picker in Settings to Swift tokens in code plus a design/DESIGN-SYSTEM.md that says which token to use when. Use when the user wants a brand or accent color, wants people to pick a color, when an app has more than a few screens, when screens drift apart or animations feel inconsistent, or when the user asks for themes, a style guide, or design tokens.

Overview

Publisherdaveebbelaar
Repositorybama
Skill namedesign-system
Stars
952
Forks
136
Bundled files
1
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.

  • 1 bundled files

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

  • Open source

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

Installation

Install the Design System 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/daveebbelaar/bama/tree/main/skills/design/design-system
  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/daveebbelaar/bama.git /tmp/bama
mkdir -p .claude/skills
cp -r /tmp/bama/skills/design/design-system .claude/skills/design-system
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Design System 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 Design System 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 Design System 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.

Design system

A design system is a short list of tokens in code and one page that says which token to use when. Every screen uses tokens, never raw values. Then a change in one place changes the whole app, and an agent can review a screen against one page.

Start from mac-design. Tokens cover only what the system does not: the accent, custom surfaces, radii, motion, overlays, and custom controls.

The app keeps Apple's look. Only the accent color changes. For parts of your own (a custom sidebar, buttons, icons), call the Skill tool with design-kit. To copy the look of an app the user names, call it with design-from-app.

The template already has the base in Sources/<App>/UI/:

  • Theme.swift: the accent colors (Theme.all), the saved choice (ThemeStore), the tokens Palette.accent, Palette.accentText, Palette.onAccent, and .themed(), which tints every scene.
  • AppearanceSettings.swift: Settings > Appearance, where people pick the accent. Light and dark mode follow the Mac. Apple advises against an app-specific mode setting; add a System/Light/Dark picker only when the owner asks for one, with System as the default. [HIG Dark Mode]
  • Grid.swift: spacing (see the layout-grid skill).

1. Pick the accent

Read ## Look in docs/BRIEF.md. With no color named, keep system: it follows the accent color the person set for their Mac.

For a brand color, set ThemeStore.brand to a Theme with three shades: light (accent text in dark mode), base (fills and tint), and deep (accent text in light mode). Set darkText: true when white text on base is hard to read (yellow, mint, cyan). Keep ThemeStore.defaultID = "system". The brand then shows only while the Mac's accent is Multicolor, as in Apple's apps. Any other accent the person chose for their Mac wins, and so do sidebar icons, which people expect in their own accent. [HIG Color, Sidebars]

Use brand color sparingly: the app icon, an empty state, one hero element in the content. Keep it off most controls. [HIG Branding]

To compare colors, take snapshots with APP_ACCENT=<id> for two or three of them and show the user the PNGs. Keep the picker in Settings, so people can still choose their own color.

Check: ThemeStore.defaultID is "system", and the snapshots show the accent on buttons, toggles, and selection in light and dark mode.

2. Collect

New app with no views yet? Skip this step: write the token files with the defaults below before the first view.

Existing app: read every view. List each raw value you find: hex colors, opacities, corner radii, paddings, frame widths, animation durations and curves, custom button styles. Group them. Most apps have 3 to 5 of each where 1 or 2 are meant.

3. Write the tokens

Accent values live in Theme.swift. The rest get one file per group in Sources/<App>/UI/. Add each token when the app first needs it:

FileHolds
Theme.swiftthe accents, ThemeStore, .themed(), and Palette: accent, onAccent (text and symbols on accent fills), accentText (accent-colored text: deep shade in light mode, light shade in dark mode)
Grid.swiftthe spacing scale (Space) and the layout probes
Surfaces.swiftsurface, surfaceHover, hairline, one warning color
Radius.swiftxs 6 chips and key caps, sm 8 controls, row 10 row hover fills, md 12 cards, lg 18 widgets, xl 26 floating glass
Layout.swiftcontentWidth, fixed column and sheet widths
Motion.swifthover, quick (presses, small flips), ui, select (selection moving through a live list), appear, dismiss, glide, numberRoll, listChange, loops (pulse) that stop under Reduce Motion
Components.swiftmore control styles: HoverButtonStyle, .hoverFill, toggles, chips
Overlay.swiftone panel builder, one entrance, one exit

Surfaces adapt to light and dark. Views read the accent through .tint or Palette, so a new choice in Settings redraws the whole app.

4. Write design/DESIGN-SYSTEM.md

One section per file above. Each section says which token to use when, and the rules that go with it. Keep it under 100 lines. Rules that transfer to most apps:

  • Never hard-code a hex accent. Use .tint or Palette.accent.
  • Every custom color has four values: light, dark, and a stronger one of each for Increase Contrast (Color(light:dark:highContrastLight:highContrastDark:) in Theme.swift). [HIG Color]
  • Never redefine or copy a semantic color (.separator as text, a label color as a fill). Their values change per release.
  • A custom surface in its neutral state is a little translucent, so it picks up the desktop tint like system surfaces. A colored state is opaque.
  • A custom font only for headings. Body and captions stay in the system font, and every custom font has a bold weight for the Bold Text setting.
  • Accent-colored text uses Palette.accentText. Text on an accent fill uses Palette.onAccent, never a fixed white.
  • Style controls with ButtonStyle and ToggleStyle. Never rebuild a control from shapes: it loses the keyboard, focus, and VoiceOver.
  • Inner corners are concentric: inner radius = outer radius - inset.
  • Every animation goes through Motion, so a per-feature "Full, Fast, Off" setting and Reduce Motion apply everywhere.
  • Search results and switchers do not animate. Speed wins.
  • Hover never moves a selection. Only a click or a key does.
  • Units ("KB/s", "%") never animate. Only the number does (.contentTransition(.numericText())).
  • Never animate a view's first layout. Overlays wait one frame, then animate opacity, scale, and a few points of travel.
  • Leave room around glass for its shadow (about 3 times the shadow radius).
  • One primary button per page or card.

5. Migrate

Replace raw values screen by screen, one commit per screen. After each, build and snapshot (build-and-verify skill). The screen looks the same or better, never worse.

6. Point agents at it

Add one line to the app's CLAUDE.md (create the file if it is missing): "Design rules: design/DESIGN-SYSTEM.md. Use its tokens; never raw colors, radii, or durations."

Done when this finds no hits outside the token files:

bash
grep -rnE 'cornerRadius: [0-9]{1,2}\b|duration: [0-9]|\.spring\(response|\.snappy\b|\.easeInOut|\.easeOut\(|Color\(hex:|Color\(red:' Sources/ \
  | grep -v 'Path(roundedRect'

(hex strings in data and comments are fine), and DESIGN-SYSTEM.md has a section for every token file.

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 Design System AI skill do?

Accent color and design system for a macOS app, from the app's accent and the accent picker in Settings to Swift tokens in code plus a design/DESIGN-SYSTEM.md that says which token to use when. Use when the user wants a brand or accent color, wants people to pick a color, when an app has more than a few screens, when screens drift apart or animations feel inconsistent, or when the user asks for themes, a style guide, or design tokens.

Why use Design System on TypingMind?

Because you install it once and use it with any model. Design System 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 Design System in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/daveebbelaar/bama/tree/main/skills/design/design-system. 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 Design System?

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 Design System?

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

Is the Design System AI skill free?

Yes. It is published on GitHub by daveebbelaar 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 👇