Install
$ agentstack add skill-lukedj78-dev-flow-rn-bootstrap ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
rn-bootstrap — scaffold Expo + RN from PRD/DESIGN
Contract
See references/contracts.md (vendored from dev-flow). Key facts:
- Reads
/.workflow/meta.json#stack.framework— must be"expo-rn". - Reads
/{PROJECT.md, PRD.md, DESIGN.md}. DESIGN.md is required for tokens; if absent, uses defaults fromreferences/stack-defaults.md. - Writes the app to
/(the same directory). - Sets
meta.json#phase = "scaffolded"on success. - Always idempotent: re-running detects existing
package.json+app/and exits 0.
When this skill applies
- Orchestrator routes here from
dev-flowwhenmeta.json#stack.framework == "expo-rn"andmeta.json#phase ∈ {prd_drafted, design_extracted}. - User says: "scaffolda app expo", "create RN app from PRD".
Knowledge dependencies (read these first)
rn-fundamentals/SKILL.md— confirms Expo SDK + New Architecture + TypeScript + npm.rn-styling/references/nativewind-setup.md— the 7-step NativeWind setup (this skill automates it).rn-expo-router/references/concepts.md— folder layout forapp/.
Workflow
Step 1 — Verify preconditions
Read /.workflow/meta.json. Abort with a clear message if:
- file missing → "Run
dev-flow init_workflow.pyfirst." stack.framework != "expo-rn"→ "This skill is for stack.framework=expo-rn. For Next.js use design-md-to-app."phase ∉ {prd_drafted, design_extracted}→ "Expected phase prddrafted or designextracted, got X."
If package.json + app/ already exist at project root: print "Already bootstrapped, nothing to do", set phase to scaffolded if not already, exit 0.
Step 2 — Run create-expo-app
Run scripts/init-expo-app.sh . The app name comes from meta.json#project_name (or PROJECT.md title).
Step 3 — Install opinionated stack
Run scripts/install-stack.sh . Installs NativeWind v4 (with Tailwind 3.4 pin), Zustand, TanStack Query, Reanimated, RNGH, expo-image, FlashList.
Step 4 — Wire NativeWind from DESIGN.md tokens
Run npx tsx scripts/wire-nativewind.ts . Generates tailwind.config.js, global.css, babel.config.js, metro.config.js. Reads tokens from a fenced `json tokens block in DESIGN.md (accepts LF + CRLF line endings).
Step 5 — Generate folder structure + boilerplate
Create (only if absent — idempotent):
app/_layout.tsx— Stack root, imports../global.css, renders ``.app/index.tsx— hello-world screen using NativeWind classes (wraps inSafeAreaViewfromreact-native-safe-area-context).components/,lib/,store/,types/,assets/— empty dirs with.gitkeep..env.example— empty stub withEXPO_PUBLIC_API_URL=.tsconfig.json— extendexpo/tsconfig.base, addpathsfor@/*.
Also patch app.json:
expo.scheme— set to a kebab-case ofmeta.json#project_name.expo.experiments.typedRoutes—true.expo.newArchEnabled—true.expo.plugins— add"expo-router".
Step 6 — Verify (scripts/verify.ts)
Run npx tsx scripts/verify.ts . If exit code != 0, do NOT bump phase. Report failures from references/post-bootstrap-checklist.md.
Step 7 — Update meta.json + commit
Update meta.json:
stack: merge{ framework: "expo-rn", ui: "nativewind", auth: null, db: null, payments: null, deploy: null }(existing keys preserved if already set).stack_config: merge{ expo_sdk: "", state_lib: "zustand", data_lib: "tanstack-query" }.phase: set to"scaffolded".history: append{ skill: "rn-bootstrap", ran_at: , outputs: ["package.json", "app/", "tailwind.config.js", ...], phase_before: , phase_after: "scaffolded" }.
If ` is a git repo, create a commit: chore: scaffold Expo + RN app via rn-bootstrap`.
Updating meta.json (recommended pattern)
When this skill modifies state (artifact written, phase advanced, history appended), use the canonical script when available:
# Wherever dev-flow is installed (e.g. ~/.claude/skills/dev-flow/), invoke:
python3 .../dev-flow/scripts/update_meta.py record-artifact \
--path --produced-by '' [--derived-from ...]
python3 .../dev-flow/scripts/update_meta.py set-phase
python3 .../dev-flow/scripts/update_meta.py append-history \
--skill '' --inputs '{...}' --outputs '{...}' --phase-after
The script enforces phase monotonicity, normalizes legacy kebab-case aliases (e.g. module-added → module_added), and writes the canonical sha256 + timestamp into meta.json#artifacts. Fall back to direct JSON editing only if the script is not on PATH (and warn the user).
Folder structure rules (canonical — Expo Router hybrid)
Non-negotiable Expo Router constraint: app/ is file-based routing only. Unlike Next.js App Router, Expo Router has no private-folder convention — there is no _-prefix skip rule, so every file placed under app/ (aside from reserved names like _layout.tsx, +not-found.tsx) becomes a real route. A previous revision of this skeleton put _components/ folders inside app/, copied from the Next.js convention — that was wrong for Expo (it creates ghost routes) and is corrected below. [VERIFY] against the installed expo-router version: there's an open upstream request for an underscore-skip convention; until it ships, assume app/ has zero tolerance for non-route files.
This skill scaffolds the canonical RN structure, hybrid model (spec: docs/superpowers/specs/2026-06-06-folder-structure-refactor.md, adapted for Expo Router):
app/ # ROUTES ONLY — no components, no hooks, no utils
├── (auth)/ # opt-in based on stack.route_groups
│ ├── _layout.tsx
│ └── sign-in.tsx
├── (app)/
│ ├── _layout.tsx # redirect to (auth) if !session
│ ├── (tabs)/ # opt-in based on stack.route_groups
│ │ ├── _layout.tsx
│ │ ├── feed/
│ │ └── profile/
│ └── settings.tsx
└── _layout.tsx # root: GestureHandlerRootView + ThemeProvider
components/ # ALL non-route UI lives here, outside app/
├── ui/ # NativeWind primitives
├── theme/ # ThemeProvider, useThemeColor
├── shared/ # L2 per dominio (created empty)
└── / # L0/L1 screen-private components (e.g. components/feed/, components/profile/)
# created on demand by rn-add-screen, not scaffolded empty here
lib/ # api, supabase, secure-store, utils
store/ # Zustand cross-feature (auth-store, app-preferences)
hooks/ # RN-specific (useColorScheme, useKeyboard)
assets/ # images/, fonts/
No src/ prefix: app/, components/, lib/ etc. stay at the project root — matches the default create-expo-app templates (which don't use src/) and keeps rn-add-screen / promote-component consistent with this scaffold.
Read meta.json#stack.route_groups to decide which route groups to scaffold. Empty array → flat routing (rare for mobile).
Components follow Rule of Three for promotion (L0 → L1 → L2), targeting components// (L0/L1) and components/shared// (L2) — never app//_components/. See rn-add-screen for screen-level details and promote-component for the promotion mechanics.
Sources
- Course: codewithbeto.dev/rnCourse — free lessons 5-6 (Creating Your First App, Project Structure).
- Official: https://docs.expo.dev/get-started/create-a-project/
- Official: https://www.nativewind.dev/v4/getting-started/expo-router
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: lukedj78
- Source: lukedj78/dev-flow
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.