onebox

Agent skills · Expo · iOS

Your app, on the App Store.

You built something with Claude Code, Codex or Cursor. It works on your phone. Then come certificates, App Review, payments and a backend that is still on localhost. These skills and guides take you the rest of the way. Need a server? Run it on one cheap box.

Three steps

Not every app needs a server, a paywall or a landing page. Answer a few questions and take only what yours needs. iOS only, for now.

  1. Add the skills to your agent

    Claude Code: paste the lines from your cart below. Codex, Cursor, Gemini CLI and others: npx skills add ggi3201/onebox.

  2. Run the plan in your app’s folder

    Copy the prompt from your cart. It carries your answers, checks what your app already has, and writes PLAN.md. See an example.

  3. Work down the plan

    Skills do the work. Guides cover the clicks only you can make. Stuck? Here is how to get unstuck, or ask me.

01Where is your app now?
02Does the app need a server?
03Do users sign in?
04Will users pay inside the app?
05Do you want a landing page?

Apple needs a privacy policy URL and a support URL either way. Without a landing page you host those two pages somewhere else.

06Does the app use AI?
07Do you want to fix things from your phone?

The route

Where each part lives, and what carries your app from your Mac to a phone. No backend? Skip the box.

How the onebox kit fits togetherYour Mac runs your coding agent and every skill. It builds the app and submits it to Apple, which delivers it to phones. Phones call your API through a Cloudflare tunnel into one box that runs the API, Postgres, staging, backups, Traefik and the landing page with pricing, privacy policy, support and terms. App Store Connect links to that landing page. Outside services are RevenueCat and media APIs.01 · The workbenchYour MacYour coding agent runs every skill here.— Your Expo app’s code— Xcode, for free local buildsAapp-store-ready · eas-updateapp-store-screenshotsstore-listing · draw-app-icondraw-icon-setCimage · videoDtest-loop · trim-testsEagent-harness · chat-featureai-usage-limits · ai-consentdurable-jobs · share-import02 · The gateAppleApp Store Connect.— TestFlight— App Review— Sign in with Apple— Store page, privacy answers03 · DeliveredThe phoneWhere your users are.— Your app, via TestFlight or the store— Signs in with Apple— api.example.comAios-preview-build04 · The doorCloudflareThe free plan is enough.— DNS for example.com— A tunnel in. No open ports.06 · OutsideOutsidePaid per use. All optional.— RevenueCat: subscriptions— kie.ai · fal · Replicate: media05 · The boxThe boxA mini PC at home, or a €5 VPS. Docker on one machine.APIyour backend, in DockerPostgresone database per appStaginga second API and databaseBackupsnightly, kept off the boxTraefiksends each hostname to its containerLanding pageexample.com▪ Pricing▪ Privacy policy▪ Support▪ Terms of useApp Store Connect links here,and so does your paywall.build + submitexpo-local-buildappstore-connectbuild + submitexpo-local-buildappstore-connectinstallsinstallshttpshttpstunnelexpose-servicetunnelexpose-servicessh + git pushbox-setupstaging-envssh + git pushbox-setupstaging-envprivacy + support urlsnew-landing-pageprivacy + support urlsnew-landing-pagewebhookswebhooks
  1. 01 · The workbench

    Your Mac

    Your coding agent runs every skill here.

    • Your Expo app’s code
    • Xcode, for free local builds

    app-store-ready · eas-update · app-store-screenshots · store-listing · draw-app-icon · draw-icon-set · image · video · test-loop · trim-tests · agent-harness · chat-feature · ai-usage-limits · ai-consent · durable-jobs · share-import

  2. build + submitYour Mac builds the app and sends it to TestFlight.expo-local-build · appstore-connect
  3. 02 · The gate

    Apple

    App Store Connect.

    • TestFlight
    • App Review
    • Sign in with Apple
    • Store page, privacy answers
  4. installsTesters install from TestFlight, everyone else from the App Store.
  5. 03 · Delivered

    The phone

    Where your users are.

    • Your app, via TestFlight or the store
    • Signs in with Apple
    • api.example.com

    ios-preview-build

  6. httpsThe app only ever talks to your API over HTTPS.
  7. 04 · The door

    Cloudflare

    The free plan is enough.

    • DNS for example.com
    • A tunnel in. No open ports.
  8. tunnelCloudflare’s tunnel is the one way into the box.expose-service
  9. 05 · The box

    The box

    A mini PC at home, or a €5 VPS. Docker on one machine.

    • API, your backend, in Docker
    • Postgres, one database per app
    • Staging, a second API and database
    • Backups, nightly, kept off the box
    • Traefik, sends each hostname to its container
    • Landing page at example.com: pricing, privacy policy, support, terms of use. App Store Connect links here, and so does your paywall.

    Your Mac sets the box up over SSH. A git push deploys. box-setup · staging-env
    Apple needs a privacy policy and a support page. They live on the landing page. new-landing-page

  10. webhooksRevenueCat tells your API when someone subscribes.
  11. 06 · Outside

    Outside

    Paid per use. All optional.

    • RevenueCat: subscriptions
    • kie.ai · fal · Replicate: media
Stamps ACDE are plugins, listed in “What’s in the box” below. Tags on a route are the skills that move things along it.

What’s in the box

Every skill, grouped by plugin. A skill is a set of instructions your agent follows, like /ship-ios:app-store-ready. You install a plugin, not a skill.The planner tells you which plugins your app needs.

Ship iOS ship-ios

From “works on my phone” to TestFlight and App Review.

9 skills · Your Mac
  1. 01/ship-ios:app-store-readyTells you why Apple will reject your app, before Apple does.
  2. 02/ship-ios:expo-local-buildBuilds on your own Mac and sends it to TestFlight. No build credits.
  3. 03/ship-ios:eas-updateSends a JavaScript fix to phones without a new build or App Review.
  4. 04/ship-ios:appstore-connectTestFlight builds, testers, groups and subscriptions from the terminal.
  5. 05/ship-ios:ios-preview-buildA build for your real phone that talks to staging, not production.
  6. 06/ship-ios:app-store-screenshotsStore images from your real screens, in your app’s own fonts.
  7. 07/ship-ios:store-listingName, subtitle, keywords and description that search finds, within Apple’s limits.
  8. 08/ship-ios:draw-app-iconA vector icon that still reads at home-screen size.
  9. 09/ship-ios:draw-icon-setA set of outline icons that look like one family.

Box box

Backend and sites on one cheap machine. A mini PC at home or a small VPS.

4 skills · Your server
  1. 01/box:box-setupTakes a fresh VPS to a safe, working baseline in one go.
  2. 02/box:expose-servicePuts a service on the internet at your domain, with no open ports.
  3. 03/box:new-landing-pageA self-hosted landing page, or your Next.js site moved off Vercel.
  4. 04/box:staging-envA second backend for test branches, with its own database.

Content content

Images and video for the store page, the landing page and social posts.

2 skills · Your Mac
  1. 01/content:imageGenerate and edit images with kie.ai, fal or Replicate. Look first, pay little, reroll.
  2. 02/content:videoAnimate an approved still. Chain shots so the cuts disappear.

Dev loop dev

The agent proves its change on the simulator before it says done.

2 skills · Your Mac
  1. 01/dev:test-loopLint, types, tests, then the simulator. Proof before “done”.
  2. 02/dev:trim-testsCuts a fifth of your tests and keeps what catches bugs.

App features app-features

An AI chat and agent, cost limits, consent, background jobs and share import, built into your app and API.

6 skills · Your app
  1. 01/app-features:agent-harnessAn agent in your API that calls your tools, streams, and proposes instead of acting.
  2. 02/app-features:chat-featureA chat screen that streams word by word, with Stop, photos and tap-to-apply cards.
  3. 03/app-features:ai-usage-limitsA monthly budget per user, so one account cannot run up your model bill.
  4. 04/app-features:ai-consentThe AI consent step App Review asks for, enforced on the server too.
  5. 05/app-features:durable-jobsSlow work as a background job that survives restarts, with cancel and refunds.
  6. 06/app-features:share-importShare a page into your app and get a record back, without the model making things up.

Good company

Skills by other people that I use next to these. Not mine. Each has its own install steps and licence.

  • ponytail ↗Dietrich GebertStops the agent from overbuilding. The simplest code that works, with safety kept.
  • impeccable ↗Paul BakausDesign vocabulary, audits and polish for a landing page or app UI.
  • taste-skill ↗LeonxlnxPushes UI away from the generic AI look. Includes a redesign skill for an existing site.
  • emil-design-eng ↗Emil KowalskiSmall details that make an interface feel good: motion, timing, polish.
  • RevenueCat ai-toolkit ↗RevenueCatRevenueCat's own plugin for the SDK, offerings and the paywall.
  • frontend-design ↗AnthropicThe official plugin for distinctive frontends. /plugin install frontend-design@claude-plugins-official

Need a backend? One box is enough.

Many apps need no server at all. If yours does, you don’t need AWS for your first thousand users. One machine runs the API, the database and the landing page. Cloudflare Tunnel puts it on the internet without opening a port. Your Mac builds the app for free. When one box is not enough, you will know, and you will have users to pay for the next one.

Receipt · one app with a backend

  • A small VPS, or a mini PC you already own€5 / month
  • Your domain€10 / year
  • Apple Developer Program$99 / year
  • Cloudflare DNS and Tunnel€0
  • iOS builds on your own Mac€0
  • AWS, Kubernetes, a DevOps person— / not needed

Total≈ €14 a month

Apple’s fee spread over 12 months. Your Claude plan not included.

One box needs a little care.

About 15 minutes a month. An agent does the work over SSH with the box skills. You read what it found and say yes.

What it asks of you

  • Security updates install themselves. Reboot when the box says a reboot is pending.
  • Once a month, and after any change, ask your agent to “check the box”. The check must end with 0 fail.
  • Update Traefik, Postgres and your images a few times a year. Read the release notes first.
  • Make sure last night’s backup ran. Restore one once, so you know it works.
  • Watch the disk. Docker images and logs grow.

When to go further

  • One box is one point of failure. If it dies, the app is down until you restore it. At home, a power cut or an internet outage takes it down too.
  • Move on when downtime costs you money or trust: a second server, a managed database with point-in-time recovery, and monitoring that wakes you up. Start with free uptime alerts.
  • A big app, sensitive data such as health or children’s data, or a team: plan a larger setup from the start, and get advice.

Shipped with these skills

Real apps, built and released with the skills on this page.

I’m Geir-Stian Løkkesveen, based in Norway. I build iOS apps next to a day job, and these skills come from releasing them. I use Claude Code. The skills are plain SKILL.md files, so Codex, Cursor and other agents can use them too.

Stuck on the last mile?

I can help you get it live.

I help you get your Expo app onto TestFlight and submitted to App Review. Apple makes the final call on approval. You keep your own Apple account and your own server. I set them up with you and hand them over.

  1. You write. Send a link to the app or the repo, and where you are stuck.
  2. I quote. One fixed price for the whole job, before any work starts.
  3. We ship. I do the work on your accounts, and you get notes on every step.

The first three launches get a reduced price, in return for a short case study.

Write to me