AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Rn Bootstrap

skill-lukedj78-dev-flow-rn-bootstrap · by lukedj78

Scaffold a new Expo + React Native app from a PROJECT.md + PRD.md + DESIGN.md using the opinionated stack (Expo Router, TypeScript, NativeWind v4, Zustand, TanStack Query, Reanimated, expo-image, FlashList). Reads .workflow/meta.json with stack.framework="expo-rn" and phase in {prd_drafted, design_extracted}. Produces a running Expo app at the project root, sets phase to "scaffolded". Always idem…

No reviews yet
0 installs
10 views
0.0% view→install

Install

$ agentstack add skill-lukedj78-dev-flow-rn-bootstrap

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No 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.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-lukedj78-dev-flow-rn-bootstrap)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
16d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

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 →
Are you the author of Rn Bootstrap? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

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 from references/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-flow when meta.json#stack.framework == "expo-rn" and meta.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 for app/.

Workflow

Step 1 — Verify preconditions

Read /.workflow/meta.json. Abort with a clear message if:

  • file missing → "Run dev-flow init_workflow.py first."
  • 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 in SafeAreaView from react-native-safe-area-context).
  • components/, lib/, store/, types/, assets/ — empty dirs with .gitkeep.
  • .env.example — empty stub with EXPO_PUBLIC_API_URL=.
  • tsconfig.json — extend expo/tsconfig.base, add paths for @/*.

Also patch app.json:

  • expo.scheme — set to a kebab-case of meta.json#project_name.
  • expo.experiments.typedRoutestrue.
  • expo.newArchEnabledtrue.
  • 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-addedmodule_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.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.