setup-project
Initialize a fresh clone of the Expo skeleton into a real project — interviews for product identity, then renames the app (app.config.ts + package.json), fills docs/product/vision.md, sets CODEOWNERS,
SKILL.md.claude/skills/setup-project/SKILL.md
GitHubContext
- Current package name: !
node -p "require('./package.json').name" - Git status: !
git status --short | head -5 || echo "no git repo"
Task
Turn this skeleton clone into project $ARGUMENTS. If the package name above is not expo-skeleton, this repo was already initialized — stop and confirm with the user before re-running anything.
1 · Interview (AskUserQuestion — don't guess any of these)
Collect in at most two rounds:
- Identity: project name (default
$ARGUMENTS), one-sentence pitch, one-paragraph product description, primary user + what success looks like for them, 2–3 explicit anti-goals. - App identity: display name, slug, URL scheme, iOS/Android bundle identifier base (e.g.
com.acme.app). - Data layer: none yet (keep painted-door stubs) / REST API / Supabase / Firebase / other. Plus auth: none yet / provider (note platform mandates like Sign in with Apple).
- Demo feature: keep
tasksas the canonical pattern (recommended until the first real feature ships) or delete it now. - GitHub: org/team handles for CODEOWNERS (replace every
@yourorg/*placeholder).
2 · Apply (small, reviewable edits — preserve all formatting conventions)
- Rename app identity:
app.config.ts(name,slug,scheme,ios.bundleIdentifier/android.packagebases — clear theTODO(company)markers) ·package.jsonname· README# title+ first paragraph (keep the rest — it documents the workflow, which doesn't change). - Product memory: rewrite
docs/product/vision.mdfrom the interview — remove any placeholder banner; keep the section structure. This is the file every agent grounds on; make it specific. - CODEOWNERS: replace every
@yourorg/*placeholder in.github/CODEOWNERSwith the real handles. - Data layer & auth: if chosen, create
docs/architecture/decisions/0007-data-layer.mdfrom_template.md(status: proposed — a human accepts it) and add the correspondingEXPO_PUBLIC_*variables to BOTH.env.exampleand the Zod schema insrc/shared/lib/env.ts. Do not install or wire the dependency here — that's the first spec's job, with the ADR as its anchor. - Skeleton-only files: delete
HANDBOOK.pdf(it documents the skeleton itself, not this project). - Demo feature, if deletion was chosen: remove
src/features/tasks/, its route insrc/app/,.maestro/flows/tasks-cuj.yaml, and any home-screen entry pointing to it; mark PRD-0001 (docs/product/prds/0001-task-capture.md) as removed-at-init; update the CUJ table indocs/quality/critical-user-journeys.mdand.maestro/flows/smoke.yamlif it referenced tasks. ESLintboundaries/*guarantees nothing else imports the slice — verify with Grep anyway. Runnpm run docs:lintafter.
3 · Verify and hand off
- Run
npm install, thennpm run verify. Everything must be green — a red gate here means step 2 broke something; fix before proceeding. - Commit as
chore: initialize project from skeleton(one commit — reviewable as a unit). - Report what was set, then list the steps only a human can do, with exact locations:
eas init+ setextra.eas.projectIdand theupdates.urlinapp.config.ts.- Push and protect
main(require the CI + E2E checks) — GitHub → Settings → Branches. - Add the
CLAUDE_CODE_OAUTH_TOKENsecret for persona reviews / agentic QA — Settings → Secrets. - Invite the CODEOWNERS teams.
- Close with: the project is ready for its first feature — run
/create-spec <idea>.