Shipping overview
This page covers shipping the mobile app to the app stores. The web tier (marketing, brand, admin, docs.drape.to) ships via AWS Amplify — see Web deploys. The Mongo backend deploys to Render (this checklist's privacy URL still uses the Render host). The Postgres web API deploys to ECS Fargate — see Backend deploys and the AWS system map.
The honest status for the mobile app: iOS is close to submittable; Google Play has had essentially no dedicated work. Most of the app-side and code blockers are already closed — what remains is mostly manual store-console work and standing up Android from scratch.
Verified build config
Read from frontend/app.json and frontend/eas.json:
| Field | Value |
|---|---|
| App name / slug | Drape / drape |
| Version | 1.0.0 |
| iOS bundle id | com.kcb1099.drape |
| iOS build number | 1 (auto-incremented by EAS in production) |
| Android package | Missing — no android.package in app.json |
| Orientation | portrait (locked, in app.json and Info.plist) |
| Privacy policy URL | https://drape-backend-avjg.onrender.com/privacy |
| EAS project | owner kcb1099, project id present |
| EAS submit | iOS only (ascAppId set); no Android submit config |
iOS permission strings are all present and meaningful (camera, photo library,
photo-library-add). Android declares CAMERA, READ_EXTERNAL_STORAGE, and the
deprecated WRITE_EXTERNAL_STORAGE. The ios/ directory is prebuilt; there is
no android/ prebuild yet.
What is already done
- In-app account deletion (
DELETE /api/account) with a type-to-confirm UI. - Global error boundary (exported from
_layout.tsx) with Sentry capture. - Orientation lock, 1024×1024 app icons, honest loading copy with a timeout.
- Privacy policy + terms served by the backend and shown in-app.
- No Sign in with Apple needed — there is no third-party social login, so Guideline 4.8 does not apply.
The one prioritized list
P0 — will cause rejection or blocks a build
- Add
android.packagetoapp.json— no Android build exists without an applicationId. ~5 min, then a first Android prebuild. - Complete the App Store App Privacy label and the Google Play Data Safety form — a binary cannot be submitted on either store without them, and biometric/photo data makes accuracy mandatory. Include PostHog analytics + session replay in both. ~1–2 h each, manual.
- Enter privacy-policy and support URLs in both consoles; confirm the shipped
onrender.com/privacyURL returns 200 (the app ships the raw Render subdomain, not the branded domain the hosting doc validated). ~30 min. - Verify
EXPO_PUBLIC_SENTRY_DSNis set as an EAS secret — if it is absent, crash reporting is silently off in every production build. ~5 min. - Verify a crash-free launch and a working try-on on a physical device, and confirm the reviewer demo account is live with a body photo + consent. ~1–2 h.
- Set the age rating (12+) and add "18+ required" language to onboarding and the store description — BIPA self-attestation is 18+. ~30 min.
P1 — high risk of review friction
- Disable session replay in production — currently on in production builds. Flip the production EAS profile env and confirm disclosure. ~15 min.
- Produce final store-ready screenshots — completed renders (not loading states), partner brands only, neutral body photos; a full Android set too.
- Add upload safeguards (no moderation or file-size limit today) and stage the App Review notes covering biometric handling and demo credentials.
- Remove or replace
WRITE_EXTERNAL_STORAGE— unused on Android 13+ and a flagged permission that triggers a Play declaration. - Finalize non-spammy store copy free of unverifiable AI claims.
Hygiene (not blockers)
- Untrack the two committed
.ipafiles (~91 MB); add*.ipato.gitignore. - Backend launch-hardening (Render cold starts, orphaned jobs on spin-down, JWT revocation, an uptime monitor) — reliability, not a review gate at current scale.
Per-store detail
- Apple App Store — the item-by-item status for iOS.
- Google Play — what Android needs, from an
android.packageup.
Several store-readiness docs under frontend/docs/ are dated 2026-05/06 and
predate fixes now in the code (they claim eas.json doesn't exist, the icon is
too small, etc.). Where those docs conflict with the current config, the config
wins — this page reflects the config.