Files
beenvoice-app/docs/APP_STORE_CONNECT.md
T
soconnor 355b14faef Add local iOS release pipeline, fix shortcuts, and improve invoice UX.
Enable App Store builds without EAS, iOS 18 App Intents plugins, and signing
fixes for distribution export. Add mobile invoice PDF preview, compact line
items, and more reliable shortcut deep-link handling.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 01:08:20 -04:00

285 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# App Store Connect — beenvoice iOS
Copy-paste reference for submitting **beenvoice** (`com.beenvoice.app`, v1.0.0). Update URLs if your production web host differs from `beenvoice.com`.
---
## App Information
| Field | Value |
|-------|--------|
| **Name** | beenvoice |
| **Subtitle** (30 chars max) | Invoices & time tracking |
| **Bundle ID** | `com.beenvoice.app` |
| **SKU** | `beenvoice-ios` (your choice; immutable) |
| **Primary language** | English (U.S.) |
| **Primary category** | Business |
| **Secondary category** | Productivity |
| **Content rights** | Does not contain third-party content |
| **Age rating** | 4+ (no restricted content; business/finance utility) |
### Copyright
```
© 2026 beenvoice
```
---
## URLs
Deploy the Next.js legal pages before submission. Privacy Policy and Terms must load without login.
| Field | URL |
|-------|-----|
| **Privacy Policy URL** | `https://beenvoice.com/privacy` |
| **Terms of Use (EULA)** | Use Apple Standard EULA *or* link `https://beenvoice.com/terms` |
| **Support URL** | `https://beenvoice.com` (or a dedicated `/support` page when available) |
| **Marketing URL** (optional) | `https://beenvoice.com` |
If production web is still on `beenvoice.soconnor.dev`, use `https://beenvoice.soconnor.dev/privacy` and `/terms` until `beenvoice.com` is live.
---
## Promotional Text (170 chars max)
Optional; can be changed without a new build.
```
Track billable hours, manage clients, and send invoices from your phone. Syncs with your beenvoice account. Lock the app with Face ID.
```
---
## Description (4000 chars max)
```
beenvoice is the mobile companion for freelancers and small teams who invoice clients and track billable time.
DASHBOARD AT A GLANCE
See revenue, pending and overdue invoices, and your running timer without opening multiple tools.
TIME CLOCK
Clock in and out with an optional description, client, invoice, and hourly rate. On iPhone, a Live Activity on the Lock Screen and Dynamic Island shows elapsed time while you work.
INVOICES
Browse, filter, create, and edit invoices. Update status and keep billing moving from anywhere.
CLIENTS & BUSINESSES
Maintain client records and business profiles so invoices stay consistent across web and mobile.
MULTI-ACCOUNT
Switch between beenvoice accounts (e.g. work and personal) with separate sessions, similar to a password manager.
SECURITY
Optional per-account app lock with PIN and Face ID / Touch ID when returning to the app.
OFFICIAL OR SELF-HOSTED
Sign in to the official beenvoice cloud or point the app at your own beenvoice server URL.
REQUIREMENTS
A beenvoice account and network access to your beenvoice server. The mobile app is not a standalone product—it connects to the same API as the beenvoice web app.
Questions or feedback: support via your beenvoice administrator or the contact on beenvoice.com.
```
---
## Keywords (100 chars max, comma-separated, no spaces after commas)
```
invoice,time tracking,freelance,billing,clients,timer,accounting,small business,hours,beenvoice
```
---
## Whats New (Version 1.0.0)
```
Initial App Store release.
• Dashboard with revenue and invoice summaries
• Time clock with optional client, invoice, and rate
• iOS Live Activity for running timers
• Invoice list, create, and edit
• Clients and businesses management
• Multi-account support with secure sign-in
• Per-account app lock (PIN and Face ID)
• Light and dark appearance
```
---
## App Review Information
### Sign-in required
**Yes** — the app requires a beenvoice account.
### Demo account (production server)
Ensure migration `0014_seed_demo_account` has run on the server reviewers will hit.
| Field | Value |
|-------|--------|
| **Username** | `demo@example.com` |
| **Password** | `demo123` |
### Notes for Review
```
beenvoice is a client for the beenvoice invoicing and time-tracking platform (web + API).
SIGN IN
1. Open the app.
2. Leave "Official" server selected (https://beenvoice.soconnor.dev) unless we specify otherwise in this note.
3. Sign in with the demo account above.
WHAT TO TEST
• Dashboard — sample invoices and stats are pre-seeded.
• Timer tab — clock in, optionally pick client/description; on a physical device, Lock Screen Live Activity appears while a timer runs.
• Invoices — list includes draft, sent, and paid examples.
• Settings — profile, theme, optional app lock (PIN / Face ID).
APP LOCK
Optional. Enable in Settings → App Lock. Face ID uses on-device biometrics only; no biometric data is sent to our servers.
LIVE ACTIVITY
Requires a physical iPhone (not available in Simulator). Start a timer, lock the device, and check the Lock Screen / Dynamic Island.
SELF-HOSTED SERVERS
Users may enter a custom server URL on sign-in. Review uses the official server only.
No in-app purchases. No ads.
```
Update the official server URL in the note if you change `DEFAULT_API_URL` in `lib/config.ts`.
---
## App Privacy (Privacy Nutrition Labels)
Answer in App Store Connect → App Privacy. Adjust if you add analytics later.
### Data linked to the user
| Data type | Purpose | Collected | Linked | Tracking |
|-----------|---------|-----------|--------|----------|
| **Email address** | App functionality, account | Yes | Yes | No |
| **Name** | App functionality, account | Yes | Yes | No |
| **Other user content** (clients, invoices, time entries, business details) | App functionality | Yes | Yes | No |
| **User ID** | App functionality | Yes | Yes | No |
### Data not collected for tracking
The app does **not** use data for tracking across apps/websites. No third-party analytics SDKs in the current build.
### Data collected but not linked (typically none)
If you only use on-device Face ID via `expo-local-authentication`, Apple treats biometrics as **not** collected by the developer—do **not** declare Face ID templates as collected data.
### Practice to select
- **Data Used to Track You:** None
- **Data Linked to You:** Contact info, identifiers, user content (as above)
- **Data Not Linked to You:** None (unless you add crash logs without account linkage)
---
## Age Rating Questionnaire (typical answers)
| Topic | Answer |
|-------|--------|
| Cartoon / fantasy violence | None |
| Realistic violence | None |
| Sexual content | None |
| Profanity | None |
| Drugs, alcohol, tobacco | None |
| Gambling | None |
| Horror | None |
| Mature / suggestive themes | None |
| Unrestricted web access | No (in-app browser not used for open web) |
| User-generated content broadly distributed | No (invoice data is private to the account) |
Expected result: **4+**.
---
## Export Compliance
In App Store Connect encryption questions:
- **Uses encryption:** Yes (HTTPS/TLS for API)
- **Exempt:** Yes — standard HTTPS only, qualify for exemption under mass-market encryption rules (same as most apps using TLS)
Confirm annually in Connect; no separate ERN needed for standard TLS-only apps in most cases.
---
## Screenshots (required sizes)
Capture from **iPhone 6.7"** (e.g. iPhone 15 Pro Max) and **6.5"** if you support older requirements. Xcode Simulator → Save Screenshot, or physical device.
Suggested screens (portrait):
1. **Sign-in** — brand, clean auth (optional; some teams skip)
2. **Dashboard** — stats + recent invoices (demo account)
3. **Timer** — running or ready to clock in
4. **Invoices** — list with statuses
5. **Invoice detail / edit** — line items
6. **Settings** — theme + app lock (shows polish)
Minimum: **3 screenshots** per required device size.
Optional: iPad 12.9" if `supportsTablet: true` — use iPad simulator or “Run on iPad” with scaled iPhone UI.
---
## Build & submit
### Option A — Local Xcode (no EAS)
See **[IOS_LOCAL_RELEASE.md](./IOS_LOCAL_RELEASE.md)** for the full guide.
```bash
cd beenvoice-app
cp .ios-release.env.example .ios-release.env # once — add Team ID + API key
bun run ios:release:upload # archive + upload to TestFlight
```
Requires Xcode on macOS, Apple Developer membership, and an App Store Connect API key.
### Option B — EAS (Expo cloud build)
```bash
cd beenvoice-app
# Production iOS build (auto-increments build number)
eas build --platform ios --profile production
# Submit latest build to App Store Connect
eas submit --platform ios --profile production
```
Prerequisites:
- Apple Developer Program membership
- App record created in App Store Connect with bundle ID `com.beenvoice.app`
- EAS credentials configured (`eas credentials`) — Option B only
- Privacy Policy URL live and reachable
---
## Pre-submission checklist
- [ ] Legal pages live at Privacy Policy URL (HTTP 200, no auth wall)
- [ ] Demo account works on production API (`demo@example.com` / `demo123`)
- [ ] `eas build --profile production` succeeds
- [ ] TestFlight smoke test on device (login, timer, invoices, app lock)
- [ ] Live Activity tested on physical iPhone
- [ ] App Privacy answers match actual data flows
- [ ] Screenshots uploaded for required device sizes
- [ ] Review notes include demo credentials and server URL
- [ ] Export compliance answered
- [ ] Version `1.0.0` matches `app.json` / Connect version field