Use when the user wants to prototype, sketch, try out, or build a feature/change in the FoodHealth Co mobile app or Chrome extension — phrases like "let's prototype X", "spin up the extension/app to try Y", "set me up to work on Z in the app/extension", or "translate this Figma frame to <screen>". Detects the repo (fhs-mobile-app vs foodhealth-score-extension), runs prereq checks, starts the right dev server (with explicit user confirmation), and translates Figma frames to code via the Figma MCP when requested. Do NOT use for production fixes, bug investigations, or work outside these two repos.
How this skill is triggered — by the user, by Claude, or both
Slash command
/foodhealthco-prototype:prototypeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill bootstraps a prototyping session in one of two repos:
This skill bootstraps a prototyping session in one of two repos:
fhs-mobile-app — Expo + React Native (iOS/Android)foodhealth-score-extension — Vite + CRXJS Chrome extension (Manifest V3)Follow the steps below in order. Stop and ask the user if any step's preconditions aren't met.
Read package.json#name in the cwd:
name | branch |
|---|---|
fhs-mobile-app | mobile |
foodhealth-score-extension | extension |
| anything else | tell the user this skill is mobile/extension-only and stop. |
If there is no package.json, the user is not in a JS project — say so and stop.
CLAUDE.mdBefore proposing any code, read the repo-local CLAUDE.md for conventions, design tokens, and patterns. The CLAUDE.md is authoritative over anything in this skill.
If the repo has no CLAUDE.md, fall back to references/<repo>.md in this skill directory:
references/mobile.mdreferences/extension.mdDo not duplicate CLAUDE.md content into your responses — reference it.
Run these checks without modifying anything. Report missing items as a checklist; never auto-create or auto-install.
Both repos:
node -v matches .nvmrc (currently 24). If nvm is the user's shell tool, suggest nvm use.node_modules/ exists. If absent, suggest npm ci (don't run it without confirmation).git status --short. If dirty, surface it so the user knows what they're starting from.Mobile only:
ios/<app>/GoogleService-Info-Dev.plist exists.android/app/google-services-dev.json exists.Extension only:
dist/ may not exist yet on a fresh checkout. The first npm run dev will create it.Ask: "Want me to start the dev server in the background?" Only proceed on a clear "yes".
Mobile (fhs-mobile-app):
npx expo start # Metro bundler; press r to reload, m for menu
Run in background. Then offer:
npx expo run:ios # First build is 5–10 min (gRPC compile). After that, subsequent JS changes only need Metro reload.
Warn the user before running expo run:ios if it's a fresh checkout.
Extension (foodhealth-score-extension):
npm run dev # tsc -b && vite build --mode development --watch
Run in background. Then walk the user through:
chrome://extensionsdist/ in this repoUse the repo's CLAUDE.md first; the conventions below are a fallback.
Mobile:
src/app/ (Expo Router file-based routing)src/features/<name>/components/src/components/ui/src/services/<name>-api.ts → TanStack Query hook in the feature dirtext-primary, bg-surface, text-headline); see src/global.css and tailwind.config.jsExtension:
src/components/<feature>/src/stores/src/services/src/content/src/pages/src/config/stores.ts (currently target.com only)fhc- to avoid clashing with retailer pages — keep the prefix.Once the user is happy with the prototype, run:
npm run type-check
npm run lint
Surface failures as-is. Do not auto-fix unless the user asks. If the user requested tests, also run npm test.
This skill never runs git add, git commit, git push, or any branch-changing command. Wait for an explicit user instruction.
Exception: the Figma flow (next section) creates a new branch when translating a new frame, because the workflow is explicitly "build this on a branch." It still never pushes.
If the user provides a Figma URL or says "translate this Figma frame", "build this Figma design", etc., switch to the procedure in references/figma.md. The short version:
.claude/figma-map.json (the frame manifest) at the repo root to decide if this is a new translate or a re-translate of an existing frame.get_design_context, get_variable_defs, get_screenshot, get_code_connect_map) before writing code.CLAUDE.md design rules — flag off-token colors, off-scale spacing, score-as-non-circle, etc.prototype/<frame-kebab>. For existing frames: targeted edits, preserve code-only changes.type-check + lint, hand back with a list of branch, files, and unmapped components.nvm use (don't try to switch silently).expo run:ios.dist/ (extension) → reload the extension card in chrome://extensions and refresh any open retailer tabs.expo start says "Metro already running" → another Metro process exists; tell the user, don't kill it.npm run dev fails on TypeScript errors (extension) → the watch mode runs tsc -b first; show the errors, don't suppress.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub bitewell/foodhealthco-claude-code-plugins --plugin foodhealthco-prototype