design-system
Skill2 starsChanged 18 days agoMITView on GitHub
AppScreenMap's token system (packages/design-tokens/tokens.css): Ghost dark × Xcode blue, Geist type, the mobile icon language, which surfaces use the tokens, and how to change a value safely. Use before touching any colour, type, spacing, radius or motion value anywhere in the repo (web viewer, HTML reports), when adding a new surface that draws UI, or when asked to align, retheme or "centralise" the design.
192 other projects use a version of this.
Adopted by
Most recently taken up by
- Rojios/everything-claude-codetheir own version, first seen Nov 8, 2026
- caidanw/skillstheir own version, first seen Nov 8, 2026
- Adelie-Squad/solosquadtheir own version, first seen Nov 8, 2026
- darkweb19/skillstheir own version, first seen Nov 8, 2026
- dmoreq/agent-grimoiretheir own version, first seen Nov 8, 2026
- ahmadvahidi/skill-atlastheir own version, first seen Nov 8, 2026
Used with
Projects with it also use setup-engine, team-level and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CoralGameSkillsetup-engine
Configure the project's game engine and version. Pins the engine in CLAUDE.md, detects knowledge gaps, and populates engine reference docs via WebSearch when the version is beyond the LLM's training data.
Also in 13 projects that use this
CoralGameSkillteam-level
Orchestrate level design team: level-designer + narrative-director + world-builder + art-director + systems-designer + qa-tester for complete area/level creation.
Also in 12 projects that use this
lilangMaxSkillcreate-stories
Break a single epic into implementable story files. Reads the epic, its GDD, governing ADRs, and control manifest. Each story embeds its GDD requirement TR-ID, ADR guidance, acceptance criteria, story type, and test evidence path. Run after /create-epics for each epic.
Also in 11 projects that use this
lilangMaxSkillstory-done
End-of-story completion review. Reads the story file, verifies each acceptance criterion against the implementation, checks for GDD/ADR deviations, prompts code review, updates story status to Complete, and surfaces the next ready story from the sprint.
Also in 11 projects that use this
- +2 more from CoralGame
- +6 more from lilangMax
Other versions192 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 192
- nextlevelbuilder/ui-ux-pro-max-skill★ 147ksame name
- getsentry/sentry★ 46ksame name
- anthropics/knowledge-work-plugins★ 35ksame name
- Donchitos/Claude-Code-Game-Studios★ 27ksame name
- ethereum/ethereum-org-website★ 6ksame name
- langwatch/langwatch★ 5ksame name
- joye61/pic-smaller★ 2.9ksame name
- daveebbelaar/bama★ 1.7ksame name
- reatom/reatom★ 1.4ksame name
- microsoft/power-platform-skills★ 1.1ksame name
182 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository22 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- a11y-auditSkill
- adaptiveSkill
- add-a11y-ruleSkill
- add-exporterSkill
- android-intent-securitySkill
- android-permissions-securitySkill
- crawl-appSkill
- edge-to-edgeSkill
- extend-crawlerSkill
- ios-a11y-rulesSkill
- ios-simulatorSkill
- maintain-crawlerSkill
- play-policy-insightsSkill
- security-auditSkill
- security-rulesSkill
- stack-iosSkill
- stack-rulesSkill
- store-requirementsSkill
- tune-crawlerSkill
- wcag-mobile-rulesSkill
- web-uiSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.
0
Common
Most of the 175 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 93
Update the Values block above, apps/viewer/DESIGN.md's token table and #/design if a token was added or renamed.
- Distinctive: line 110
Check new values against the real system once it's readable.
“Common” is measured: kept by at least 6 in 10 of the 175 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AppScreenMap design system
One look for everything AppScreenMap draws: the web viewer today, the crawler's HTML reports next. This skill owns
the tokens and the rules behind them. web-ui owns how the viewer is built with them (components, motion,
verification), and apps/viewer/DESIGN.md is the viewer's component reference.
Where it lives
| File | What |
packages/design-tokens/tokens.css | The single source. Primitives (--gray-*, --blue-*, …) and semantic tokens. Nothing else defines a colour, size or curve. |
apps/viewer/src/tokens.css | The viewer's entry: @import "@appscreenmap/design-tokens/tokens.css" (a Bun workspace package) plus legacy aliases (below). |
apps/viewer/src/main.tsx | Loads the fonts: @fontsource-variable/geist and geist-mono (self-hosted, OFL, no network at runtime). |
#/design (apps/viewer/src/views/DesignSystem.tsx) | Live reference rendered from the real CSS. |
scripts/contrast.ts (this skill) | Contrast check for every text and status token on every surface. |
Mockups the system was designed from: the canvas "AppScreenMap redesign" (https://claude.ai/artifact/4SFYfivAGfxggUnZyrvKKq): Insights overview, an audit page, phone width, foundations, and the "Colour and type" board (every token as it is today and the proposed font-size migration).
Who uses the tokens
| Surface | Status |
Web viewer (apps/viewer/) | Adopted. Every value comes from packages/design-tokens/tokens.css. Old token names still work through aliases. |
WCAG report (a11y-report.html, packages/a11y/src/appscreenmap/a11y/report.py) | Not yet. It has its own light/dark palette inline (--bg #f7f7f5, --accent #3d5afe, …). To adopt: read packages/design-tokens/tokens.css at report time and inline it, and ship the file in the wheel (hatch force-include packages/design-tokens/tokens.css → appscreenmap/design/tokens.css). That's crawler-side work, so coordinate with that workstream. |
Terminal CLI (apps/cli/) | Adopted. src/theme.ts reads tokens.css at build time (text, dim, faint, accent, good, warn, bad, line-hi); same rules: blue only for what you can act on; status is an uppercase word (OK, WARN, FAILING, NOT RUN), never a dot or glyph; plain bold wordmark (APPSCREEN + blue MAP), no block lettering; a dim label column like the dashboard's field labels. |
| Exported Markdown, Maestro flows, Mermaid | No styling. Nothing to adopt. |
The look, in five rules
- Dark only. Ghost dark surfaces (
--bg #0a0a0a,--panel #121212,--panel-2 #181818). There is no light theme, so don't addprefers-color-schemerules. The app's own screenshots are the most colourful thing on screen, and the chrome stays out of their way. - Hairlines separate, colour means something.
--linebetween rows and sections,--line-hifor control borders and device frames. No filled colour cards, no shadows on resting surfaces (--shadow: none);--shadow-lgonly for things that float (popovers, sheets, a dragged map node). - Xcode blue is for what you can act on.
--accent #4da3ff: links, focus, selection, the one primary button per view, "today" markers. Never a status, never decoration, never a big fill. A filled accent button uses--on-accent(dark text, 7.5:1), not white. - Status never stands alone.
--good/--warn/--bad/--infoalways come with a word ("Failing"), a mono label (● ERROR) or a glyph (met / due / blocked / not checked). Element outcomes map onto them (--st-*), severities too (--sev-*). Sample data gets the dashed amberSAMPLEtag. - Built around the phone. Screens always show at their real aspect ratio in a device frame (
--radius-lg,--line-hiborder, 3–4 px inset), never cropped. Icons are drawn around mobile: phone, foldable, adaptive, tap, swipe, crash (phone + bolt), store, OS update, Android, iOS. Platform is always visible: Android / iOS chips and switches, "iOS · not crawled" stated honestly.
Type
Geist for UI text, Geist Mono for ids, numbers, code, kickers and data labels.
| Token | Size | Use |
--text-display | 40 | One big score number per page |
--text-3xl | 28–34 | One page headline (a plain question beats a label: "Is Playground ready to ship?") |
--text-2xl | 26 | View title (h1) |
--text-xl | 19 | Section title (h2), weight 600, --tracking-tight |
--text-lg | 16 | Card titles |
--text-md | 14 | Body |
--text-base | 13 | Secondary body, table cells, summaries in --dim |
--text-sm | 12 | Meta, captions |
--text-xs | 11 | Mono kickers (UPPERCASE, --tracking-label), tags, axis labels |
--text-2xs | 8 | Diagram labels only (map card title bars, SVG export): drawn at overview zoom, never running text |
Big numbers use proportional figures; tabular-nums only in aligned columns.
bun .claude/skills/design-system/scripts/type-guard.ts counts raw font-size, font-weight, line-height and letter-spacing values in the viewer CSS and fails when the count rises above type-baseline.json: new code uses the tokens, and the baseline only goes down (--update after a migration). A glyph drawn as text (an arrow, a star) keeps its px size and is marked /* glyph */; line-height: 1 is allowed.
Values
surfaces --bg #0a0a0a --panel #121212 --panel-2 #181818 --line #232323 --line-hi #333333
text --text #f0f0f0 (17.4:1) --dim #a3a3a3 (7.8:1) --faint #8a8a8a (5.7:1)
accent --accent #4da3ff (7.5:1) --accent-hi #6cb4ff --accent-08/-14/-28 (washes) --on-accent #0a0a0a
status --good #5dd17a --warn #e6c35a --bad #ff5d5d --info #a78bfa (+ -14 tints) failed #ff9a52
radius 4 tags/meters · 8 buttons/inputs/cards · 12 device frames/sheets · pill only for dots
space 4 · 8 · 12 · 16 · 24 · 32 · 48
motion --ease-out (0.23,1,0.32,1) · press 120ms scale(0.97) · fast 150ms · ui 220ms
touch --hit-min 44px on phonesChanging a token
- Edit
packages/design-tokens/tokens.cssonly. Change the primitive if the hue changes; change the semantic mapping if the role changes. bun .claude/skills/design-system/scripts/contrast.ts. It must print "All pairs pass" (text ≥ 4.5:1 on--bg,--paneland--panel-2). It already caught--faint #808080at 4.47:1 on--panel-2; that's why it's#8a8a8a.cd apps/viewer && bun run build, then screenshot with theweb-uiskill'sshot.ts(dark, 1400 and 390).- Update the Values block above,
apps/viewer/DESIGN.md's token table and#/designif a token was added or renamed. - Grep for hard-coded colours you may have just orphaned:
grep -nE "#[0-9a-fA-F]{3,8}\b|rgba?\(" apps/viewer/src -rshould only showpackages/design-tokens/tokens.cssvalues and alpha masks.
Legacy aliases (migrate, then delete)
apps/viewer/src/tokens.css maps the pre-Ghost names onto the new ones so ~200 older rules kept working through the
switch: --border → --line, --muted → --dim, --accent-soft → --accent-14, --accent-text →
--accent, --mono → --font-mono, --radius → --radius-md. New code uses the new names. When you touch a
rule, migrate it; when grep -r "var(--muted" apps/viewer/src finds nothing, delete that alias.
Decisions (Oct 2026), in the owner's words
- Source of the look: the owner's centralised design system on claude.ai/design (the "Ghost" theme of the
readback system). Reading it needs
/design-login, thenDesignSyncget_project/list_files/get_file(projecta62fa764-2f7b-4b6b-beae-1d6e70f641da). Until then, the Ghost values came from mksbrew's git history (sites/readback/style.cssat46cb054:#0a0a0a,#121212,#232323,#333333,#f0f0f0,#4da3ff). Check new values against the real system once it's readable. - Accent: "for main theme we can use the xcode blue?? or nearby blue", so Ghost's own Xcode blue
#4da3ff. (mksbrew's sites use terracotta; AppScreenMap does not.) - Theme: asked dark-first + light vs dark only, the owner picked "Dark only".
- Fonts: "try new fonts" (not mksbrew's IBM Plex Mono / Martian Mono). Geist + Geist Mono: a pair drawn together, good tabular figures for dense data, OFL, self-hosted.
- Insights: "insight is blunder not upto the marks". The coloured score cards, thick bars and all-red "Failing" labels were replaced by a hairline ledger sorted by urgency, a store/platform calendar, and honest status words ("Partial" for a budget-capped crawl, "Blocked" for a store gate). See the mockup canvas.
- Approved: "this look overall good. lets revamp everything around the same".
- Project mark: D, "stacked screens": a filled
--accenttile (radius 8 on a 32 grid) holding two dark phone screens, the back one at 45 % opacity.Logoinapps/viewer/src/components/common.tsx, favicon inapps/viewer/index.html(hex mirrors of--accent/--bg, since a favicon can't read CSS variables). Chosen from four options on the canvas's "Logo options" board. The owner first picked C ("phone with a route"), then changed to "D looks more better" before it shipped. Solid shapes only: a mark must read at 16 px.
Rejected: don't re-propose
- A light theme, or following the OS theme (owner chose dark only).
- Blue-to-purple gradients (the old run-card app tile). They're decoration, and a cliché.
- One filled, coloured card per audit with a big score (the first Insights). Too loud, and every card read "Failing".
- The system font stack (
-apple-system, Inter, Roboto) as the brand face. - A thin-stroke mark (a phone outline with three node dots on an
--accent-14tile): "fix the project icon.. new one looks bad". Strokes and dots disappear at 16–26 px.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

