Bootstrap or retrofit a Vite + React 18 + TypeScript project so it uses the Domino design system (`@dominodatalab/extensions-tools`). Scoped to a **fully standalone SPA frontend for a Domino application or extension**, not snippets, library additions, or work inside an existing Domino monorepo package. Use whenever the user wants to create, scaffold, refactor, retrofit, or set up such an SPA (a React app, web app, frontend, UI, or extension) that should "look like Domino", use Domino components, follow the Domino design system, or integrate with the Domino platform, including when they mention DominoThemeProviderDecorator, extensions-tools, or base-components without saying "Domino". Also use to make an existing standalone React/Vite project "Domino-styled" or add Domino theming. Handles React 18 / react-router 5 pinning, Storybook MCP registration, theme provider wiring, and build verification.
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Critical
Do not install without reviewing
Applies to Domino 6.3 and Domino Cloud.
This skill makes a project use the Domino design system correctly. It works in three contexts:
In all three cases, the skill executes the work end-to-end (runs commands, edits files), but it adapts to what's already there instead of overwriting blindly.
A handful of choices look arbitrary but aren't — they match the rest of the Domino ecosystem and are easy to get wrong:
@dominodatalab/extensions-tools peer-depends on React 18. React 19 fails at install.HashRouter from react-router-dom@5).domino-apps skill recommends for every React app on Domino. Client-side routes live entirely after the #, so they never collide with backend paths or the Domino proxy prefix, relative asset URLs resolve from the app root on every route, and inner navigation works without server-side rewrite rules.@dominodatalab/extensions-tools. Storybook code snippets show imports from @domino/base-components — that's a Storybook-internal alias. Rewrite every such import to @dominodatalab/extensions-tools before pasting into a Domino project.DominoThemeProviderDecorator wraps the whole React tree. Without it, Domino components render unstyled or crash./preview/<appId>/), so asset and API URLs must be document-relative — not root-absolute. Vite's default base: '/' emits /assets/… and bypasses the proxy; user-written fetch('/api/…') does the same. Set base: './', build API URLs against document.baseURI, and add the trailing slash when the App is opened without it (Domino serves <prefix> and <prefix>/ alike, and relative URLs then resolve one level up). See Step 8. Invisible in local dev (pathname is /), surfaces only after deployment.Treat these as invariants the project must satisfy by the end. How you get there depends on what's already in the target directory.
Steps 2, 6, 10, 11, and 13 write files that depend on which coding assistant is running this skill. Use the column for the current host. If you can't tell which host you are, or it isn't listed, ask the user which files their assistant reads.
| Purpose | Claude Code | Codex |
|---|---|---|
| Agent instructions file | CLAUDE.md | AGENTS.md |
| MCP server registration | .mcp.json | .codex/config.toml |
| Per-user MCP enablement | .claude/settings.local.json | None needed; Codex loads .codex/config.toml once the user trusts the project |
| Reload after MCP changes | Restart Claude Code | Restart Codex |
The rest of this skill calls these the instructions file, the MCP config, and the MCP enablement file.
Work Steps 1–13 in order; each reference file holds the full procedure for its steps. Retrofits skip Step 3 (scaffold) and Step 9 (starter screen); a project already on @dominodatalab/extensions-tools is a verification/repair job (Step 2 table). "Done" is gated by Step 12.
package.json to the pins (incl. the Node < 20.19 toolchain branch), install, register the Storybook MCP, wire the entry point.base: './', apiBase from document.baseURI), starter screen, CSS reset, components safe to use without an MCP query..gitignore.npm run build gate, dist/index.html URL check, build-failure causes, hand-off checklist.@dominodatalab/extensions-tools source. Only the published npm package is consumed; upstream changes need a release from the library repo.dominodatalab/domino-claude-plugin
6e5879f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.