PLAN.md
Plan
Made by /start:plan from onebox. Tick items as you go. Add notes anywhere: the next run keeps them.
To change an answer, run /start:plan again and say which one.
Your answers
- Where is your app now? An Expo app that runs on my phone or the simulator (you)
- Does the app need a server? Yes, my own API and database on one cheap box (you)
- Do users sign in? Yes, with Sign in with Apple (and maybe others) (you)
- Will users pay inside the app? Yes, subscriptions or one-time purchases (you)
- Do you want a landing page? Yes, a page for the app on my own domain (you)
- Does the app use AI? A chat or an agent that uses the app’s data (you)
Install
Only the plugins this plan uses. In Claude Code:
/plugin install dev@onebox
/plugin install box@onebox
/plugin install ship-ios@onebox
In Codex: codex plugin add <plugin>@onebox for each of them.
Other agents (Cursor, Gemini CLI): npx skills add ggi3201/onebox installs every skill.
Config keys
Skills read these from ~/.config/onebox/config.json, or .onebox.json for this app. Never put a secret value there, only a reference. See https://github.com/ggi3201/onebox/blob/main/CONFIG.md.
secrets.tool— not setapple.teamId— not setapple.ascKeyId— not setapple.ascIssuerId— not setapple.ascKeyReforapple.ascKeyPath— not setexpo.tokenRef— not setexpo.buildMode— not setbox.type— not setbox.ssh— not setbox.domain— not setbox.appsDir— not setbox.tunnel— not setbox.tunnelName— not setbox.cloudflareTokenRef— not setbox.runnerLabel— not set
Accounts and tools
- Join the Apple Developer Program — guide: https://onebox.lokkesveen.com/guides/apple-developer/ (raw: https://onebox.lokkesveen.com/guides/apple-developer.md)
- Install Xcode — guide: https://onebox.lokkesveen.com/guides/xcode/ (raw: https://onebox.lokkesveen.com/guides/xcode.md)
- Install the command-line tools — guide: https://onebox.lokkesveen.com/guides/tools/ (raw: https://onebox.lokkesveen.com/guides/tools.md)
- Pick one place for your secrets — guide: https://onebox.lokkesveen.com/guides/secrets/ (raw: https://onebox.lokkesveen.com/guides/secrets.md)
- Register a domain that stays cheap — guide: https://onebox.lokkesveen.com/guides/domain/ (raw: https://onebox.lokkesveen.com/guides/domain.md)
The app
- Make the Expo project fit the setup — guide: https://onebox.lokkesveen.com/guides/expo-app/ (raw: https://onebox.lokkesveen.com/guides/expo-app.md)
- detected: Expo app in apps/mobile with a bundle id, a dev client and the three EAS profiles
- Give your agent a test loop — guide: https://onebox.lokkesveen.com/guides/agent-test-loop/ (raw: https://onebox.lokkesveen.com/guides/agent-test-loop.md)
- Agent checks its own work, then proves it in the Simulator — skill: /dev:test-loop
The box
- Rent a small VPS (or use a mini PC) — guide: https://onebox.lokkesveen.com/guides/vps/ (raw: https://onebox.lokkesveen.com/guides/vps.md)
- Put the domain on Cloudflare, with a tunnel — guide: https://onebox.lokkesveen.com/guides/cloudflare/ (raw: https://onebox.lokkesveen.com/guides/cloudflare.md)
- Bring the box to a safe baseline — skill: /box:box-setup
The backend
- API and Postgres on the box, users kept apart, protected — guide: https://onebox.lokkesveen.com/guides/backend/ (raw: https://onebox.lokkesveen.com/guides/backend.md)
- Give the API its public hostname — skill: /box:expose-service
- A test build for your phone, pointed at a test backend — skill: /ship-ios:ios-preview-build
Features
- Sign in with Apple, verified on the server — guide: https://onebox.lokkesveen.com/guides/sign-in-with-apple/ (raw: https://onebox.lokkesveen.com/guides/sign-in-with-apple.md)
- Send push notifications from your API — guide: https://onebox.lokkesveen.com/guides/push-notifications/ (raw: https://onebox.lokkesveen.com/guides/push-notifications.md)
- Get an LLM API key — guide: https://onebox.lokkesveen.com/guides/llm-api-key/ (raw: https://onebox.lokkesveen.com/guides/llm-api-key.md)
- The AI consent Apple asks for — guide: https://onebox.lokkesveen.com/guides/ai-consent/ (raw: https://onebox.lokkesveen.com/guides/ai-consent.md)
- Ask for a rating at a good moment — guide: https://onebox.lokkesveen.com/guides/ask-for-a-rating/ (raw: https://onebox.lokkesveen.com/guides/ask-for-a-rating.md)
- Optional: share links that open the app, and a share extension — guide: https://onebox.lokkesveen.com/guides/share-links/ (raw: https://onebox.lokkesveen.com/guides/share-links.md)
- Optional: a Live Activity on the lock screen, for a timer or a delivery — guide: https://onebox.lokkesveen.com/guides/live-activities/ (raw: https://onebox.lokkesveen.com/guides/live-activities.md)
App Store Connect and builds
- The manual App Store Connect setup — guide: https://onebox.lokkesveen.com/guides/app-store-connect-setup/ (raw: https://onebox.lokkesveen.com/guides/app-store-connect-setup.md)
- An App Store Connect API key — guide: https://onebox.lokkesveen.com/guides/app-store-connect-api-key/ (raw: https://onebox.lokkesveen.com/guides/app-store-connect-api-key.md)
- Subscriptions with RevenueCat — guide: https://onebox.lokkesveen.com/guides/revenuecat/ (raw: https://onebox.lokkesveen.com/guides/revenuecat.md)
- Expo account, and local vs cloud builds — guide: https://onebox.lokkesveen.com/guides/expo-eas/ (raw: https://onebox.lokkesveen.com/guides/expo-eas.md)
- Build on your Mac and send to TestFlight — skill: /ship-ios:expo-local-build
- Ship JavaScript fixes without a new build — skill: /ship-ios:eas-update
- TestFlight builds, testers and subscriptions — skill: /ship-ios:appstore-connect
Store page and submit
- The landing page with privacy, support and terms — skill: /box:new-landing-page
- The app icon — skill: /ship-ios:draw-app-icon
- Store screenshots from real screens — skill: /ship-ios:app-store-screenshots
- Store page text that search finds — skill: /ship-ios:store-listing
- Find what Apple will reject, before Apple does — skill: /ship-ios:app-store-ready
- See crashes and errors after launch — guide: https://onebox.lokkesveen.com/guides/crash-reports/ (raw: https://onebox.lokkesveen.com/guides/crash-reports.md)
- Optional: see where new users drop off, before your first release — guide: https://onebox.lokkesveen.com/guides/product-analytics/ (raw: https://onebox.lokkesveen.com/guides/product-analytics.md)
- Fill in the version page and submit for App Review — guide: https://onebox.lokkesveen.com/guides/submit-for-review/ (raw: https://onebox.lokkesveen.com/guides/submit-for-review.md)
- Ship an update: version 1.1 and every release after it — guide: https://onebox.lokkesveen.com/guides/ship-an-update/ (raw: https://onebox.lokkesveen.com/guides/ship-an-update.md)
Notes
Your own notes. The planner never changes them.