← back to Charge And Explore
docs/appstore-connect-submission.md
194 lines
# App Store Connect — Submission Metadata (Charge & Explore)
Fill-in-the-blanks reference for the App Store Connect app record + the values
EAS needs. Aligned with `docs/legal-and-appstore.md` — every choice here defends
a specific review risk from that matrix.
## Identity
| Field | Value |
|---|---|
| App Name (≤30) | `Charge & Explore` |
| Bundle ID | `com.abrams.chargeandexplore` |
| SKU | `charge-and-explore-ios` |
| Primary language | English (U.S.) |
| Apple Developer team | (from ASC API key — auto-resolved by EAS) |
| ascAppId | `6797629330` (app record created; written into `eas.json`) |
## Store listing
**Subtitle (≤30):**
`Charging stops & things to do`
**Promotional text (≤170):**
`Find reachable charging stops and discover what to do nearby while your car
charges — sized to your charging window.`
**Keywords (≤100, comma-separated, no spaces after commas):**
`ev charging,charge map,charging stations,road trip,ev planner,charge stops,things to do,supercharger finder`
**Description (≤4000):**
```
Charge & Explore turns charging time into time well spent.
Find charging stops you can actually reach, then discover the best things to do
nearby — sized to how long your car will be plugged in. Grabbing a coffee on a
20-minute top-up or a sit-down meal on a longer charge? Charge & Explore matches
the suggestion to the window.
FEATURES
• Reachable charging stops near you and along your route
• Curated nearby activities matched to your estimated charging time
• Optional Tesla account connection for battery-aware charging-window estimates
• Clean, map-first design built for planning before you drive
PRIVACY-FIRST
• Browse stations and activities with just your location — no account required
• Connecting a Tesla account is optional; sign-in happens on Tesla's own secure
page and we never see your password
• Read-only: the app never sends commands to your vehicle
• Disconnect and delete your data any time
Charge & Explore is an independent application and is not affiliated with,
endorsed by, or sponsored by Tesla, Inc. Tesla is a trademark of Tesla, Inc.
Charging-station data is provided under license from third-party data providers.
```
**Support URL:** `https://chargeandexplore.com/support.html`
**Marketing URL (optional):** `https://chargeandexplore.com`
**Privacy Policy URL:** `https://chargeandexplore.com/privacy.html`
**Copyright:** `2026 Abrams`
## Categorization & rating
| Field | Value |
|---|---|
| Primary category | Navigation |
| Secondary category | Travel |
| Age rating | 4+ (no objectionable content; not child-directed, no child data — COPPA note in legal doc) |
| Price | Free |
## Privacy nutrition labels (App Store Connect → App Privacy)
Must match `PrivacyInfo.xcprivacy` + the Privacy Policy exactly (mismatch is a
documented rejection — see risk matrix).
| Data type | Collected | Linked to user | Used for tracking | Purpose |
|---|---|---|---|---|
| Precise Location | Yes | Yes (only if Tesla account connected) | **No** | App Functionality |
| Coarse Location | Yes | No | No | App Functionality |
| User ID (Tesla connection) | Yes (optional) | Yes | No | App Functionality |
| Product Interaction / Usage Data | Yes | No | No | Analytics (de-identified) |
- **Tracking: NONE.** No data is used to track across other companies' apps/sites.
- No advertising identifiers, no data brokers, no cross-context behavioral ads.
## App Review Information (the notes reviewers actually read)
**Sign-in required:** **No.** Sign-in is genuinely optional (the app works with
device location alone) and the reviewer reaches every connected-vehicle feature
via the on-screen **"⚡ Explore in Demo Mode"** button — NO credentials needed.
Setting this to "Yes" with blank credential fields is what contributed to the
2.1.0 rejection; leave it **No** and rely on the demo button. (Belt-and-suspenders
alternative: leave "Yes" and put any string in the fields with a note that the
demo button is the real entry point — but "No" is cleaner.)
**Demo account:** _Not required._ The `/auth/demo/login` button mints a synthetic
signed-in user + a synthetic connected "Demo Model 3" (battery/charging/range/history)
so My Tesla + Stats populate with sample data on tap. (built 2026-08-19, commit c1d8010)
**Notes to reviewer:**
```
Charge & Explore is an independent app and is NOT affiliated with Tesla, Inc.
It does not use Tesla's logo, wordmark, or vehicle imagery.
A Tesla account is OPTIONAL — the core experience (finding charging stops and
nearby activities) works with device location alone and requires no login.
To review the connected-vehicle experience WITHOUT a Tesla and WITHOUT any
credentials, use DEMO MODE:
1. Launch the app. On the first screen, tap the gold "⚡ Explore in Demo Mode"
button. No username or password is required.
2. Demo mode instantly loads a SAMPLE vehicle ("Demo Model 3") with sample
charging telemetry, route, and charging stations, so every feature —
including the "My Tesla" and "Stats" tabs — is fully reviewable.
Scopes are READ-ONLY: the app requests vehicle data and (optionally) location,
but requests NO vehicle-command or charging-command scopes. It cannot control
the car.
Charging-station data is provided under license from third-party data providers
(not scraped from Tesla). License summaries available on request.
Location permission defaults to "While Using". Charging alerts are delivered via
server-side telemetry + push, not background location.
```
## Build & submit config (EAS)
Once the ASC API key is wired, `eas.json` → `submit.production.ios`:
```json
{
"appleId": "steveabramsdesigns@gmail.com",
"ascAppId": "<minted app record id>",
"appleTeamId": "<resolved from ASC key>",
"ascApiKeyPath": "<path to AuthKey_XXXX.p8>",
"ascApiKeyId": "<Key ID>",
"ascApiKeyIssuerId": "<Issuer ID>"
}
```
## Pre-submit checklist
- [x] EAS project linked (`projectId` in `app.json` = `146f7382-cd4d-4cbf-8973-5df3093090fc`)
- [x] App Store icon opaque RGB, no alpha (1024×1024)
- [x] Support page authored (`public/support.html`)
- [x] Support page **deployed** — live at https://chargeandexplore.com/support.html (HTTP 200)
- [x] ASC API key generated + routed via secrets-manager (Key ID `72Y2TZT54R`, Issuer `cfbd63ed-…`)
- [x] Apple identity resolved: Team ID `3VAV3KMNZK`, enrolled Individual, Team "Steven Abrams"
- [x] Bundle ID `com.abrams.chargeandexplore` registered with Apple
- [x] Distribution certificate + provisioning profile set up (reused cert `S6LTRAGK8K`) → future builds headless
- [x] `eas build --platform ios --profile production` → **build #9 finished** (id `6eb24e14-…`; build #8 failed on missing expo-asset, fixed)
- [x] Build completed → signed `.ipa` ready
- [x] App record created in App Store Connect → `ascAppId 6797629330` written into `eas.json`
- [~] Demo-mode entry BUILT + web/server verified (commit c1d8010/b074346, 2026-08-19); "⚡ Explore in Demo Mode" button mints a synthetic connected vehicle so My Tesla + Stats populate with sample data. **STILL TO VERIFY ON DEVICE (TestFlight): tap the gold button → both tabs populate.** No static demo account needed.
- [ ] `PrivacyInfo.xcprivacy` audited against the labels above
- [~] `eas submit` — app record created; .ipa upload IN PROGRESS (EAS submitter queue)
- [ ] Fill store listing + screenshots + privacy labels in App Store Connect
- [ ] Submit for review → **HUMAN GATE: Steve's explicit go before App Store review**
## API-driven listing status (2026-08-03)
Populated via the App Store Connect API (app id `6797629330`, version `5cf89e06`):
- [x] Name `Charge & Explore` · Subtitle `Charging stops & things to do`
- [x] Description · Keywords (95 chars, Tesla-free) · Promotional text
- [x] Support URL · Marketing URL · Privacy Policy URL
- [x] Categories: Navigation (primary) / Travel (secondary)
- [x] App Review Information: contact + demo-mode reviewer notes
- [x] Screenshots — 3 iPhone 6.7" (1290×2796) generated + uploaded, all COMPLETE (set `972d8aa7`)
- [ ] Age rating questionnaire — app-level, web-UI only in current ASC (4+ target)
- [ ] App Privacy nutrition labels — limited API support; likely web UI
- [ ] Build #9 finishes Apple processing → attach to version
- [ ] Export compliance — declared via Info.plist `ITSAppUsesNonExemptEncryption:false`
- [ ] **Submit for Review — HUMAN GATE (Steve)**
## Session end-state (2026-08-03)
**App:** `6797629330` · **Version:** 1.0 · **Bundle:** com.abrams.chargeandexplore · **Team:** 3VAV3KMNZK (Individual)
Automated + done:
- [x] New brand logo (pin+bolt) → app icon (build #10) + site header + favicon (live)
- [x] Build #10 built + submitting to App Store Connect (new icon)
- [x] Listing text, URLs, categories, reviewer notes (API)
- [x] 3 polished framed/captioned screenshots (iPhone 6.7") uploaded
- [x] Support + Privacy pages live (HTTP 200)
Remaining (Steve / web-UI / gate):
- [ ] Age Rating questionnaire → all None/No → 4+
- [ ] App Privacy nutrition labels (Location/ID=App Functionality, Usage=Analytics, tracking=No)
- [ ] Build #10 finishes Apple processing → attach to version 1.0 (API-doable once processed)
- [ ] **Submit for Review — HUMAN GATE (Steve)**