← back to Homesonspec

apps/mobile/ASC-METADATA.md

81 lines

# Homes on Spec — App Store Connect metadata (paste-ready)

ASC app **6798873898** · bundle `com.abrams.homesonspec` · v1.0.0 (build #2)
Name / Subtitle / Promo / Description live in **APP-STORE-LISTING.md** — this file is every *other* field.

---

## App Information

| Field | Value | Notes |
|---|---|---|
| **Primary Category** | **Lifestyle** | The App Store has no "Real Estate" category — Zillow/Redfin/Realtor all list under Lifestyle. |
| **Secondary Category** | Utilities *(optional)* | Or leave blank. |
| **Content Rights** | "Does not contain, show, or access third-party content" → **Yes** (your own catalog) | If the Browse webview surfaces external listing sites, revisit. |
| **Age Rating** | **DECIDED 2026-08-10 → ship 17+ (build #2)** — content descriptors all None, answer **"Unrestricted Web Access = YES"** | ⚠️ RESOLVED by code read: `browse.tsx` has NO `onShouldStartLoadWithRequest`, so the webview can navigate off-domain → Apple treats that as unrestricted web = 17+. The 4+ fix (domain-lock + build #3) is **deferred, not done**. See "Optional 4+ fix" below. |

## URLs

| Field | Value |
|---|---|
| **Privacy Policy URL** *(required)* | `https://homesonspec.com/privacy` ✅ verified 200 |
| **Support URL** *(required)* | `https://homesonspec.com` *(200; a real /support page would be nicer but the homepage is accepted)* |
| **Marketing URL** *(optional)* | `https://homesonspec.com` |

## Keywords (100-char field, comma-separated — paste exactly, no spaces after commas)

```
new construction,spec homes,new homes,homebuilder,move-in ready,quick move in,home search,new build
```

(96 chars. Don't repeat "Homes on Spec" — Apple already indexes the app name + subtitle separately, so these add *new* terms.)

## Copyright
`© 2026 Steve Abrams`  ✅ CONFIRMED 2026-08-10 (individual, not an LLC).

---

## App Review Information

| Field | Value |
|---|---|
| Sign-in required | **No** |
| Demo account | N/A — no login |
| Contact | First/Last · phone · `steveabramsdesigns@gmail.com` |
| **Notes to reviewer** | "No account or login — every feature works immediately on launch. Location permission is used only to center the map on nearby new-construction homes; if denied, the full national map still loads. Push notifications are opt-in for new-listing alerts." |

## Version 1.0.0 — "What's New / Promotional Text for this version"
```
Initial release of Homes on Spec — the only app that maps every new-construction home from every major builder in one place. Native map of 70,000+ homes, save homes with no account, and opt-in alerts when a new home lists in your market.
```

## Export Compliance
Already handled — `Info.plist` sets `ITSAppUsesNonExemptEncryption = false`, so ASC will **not** ask for encryption docs. If it prompts anyway → **"Uses no encryption / only exempt encryption" → No**, no CCATS needed.

---

## App Privacy (Data Collection questionnaire) — DRAFT, verify one thing

Based on the API client (`lib/api.ts`): the app sends **no account data**, saves homes **on-device only**, and `/api/map` is **not** passed the user's location — the map centers locally. So on its face:

- **Location** → used on-device to center the map, **not transmitted** → **not "collected"** in Apple's sense (App Privacy is about data that *leaves the device*).
- **No account, no analytics SDK, no ads** → nothing else collected.
- **Likely answer: "Data Not Collected."** ✅ cleanest.

✅ **RESOLVED by code read:** in `lib/notifications.ts`, the push-token POST to a backend is **commented out (`// TODO: POST token…`)** — the token is generated and stored **only in AsyncStorage on-device**, never sent to a server. Location isn't transmitted either, and there's no analytics/ads SDK. → **Answer "Data Not Collected."** ✅ final.

---

## Optional 4+ fix (recommended — small, improves UX too)
The only thing keeping this at 17+ is the un-scoped webview. Adding an `onShouldStartLoadWithRequest` to `browse.tsx` that keeps `homesonspec.com` URLs in-app and opens everything else in Safari (a) makes the age rating a legit **4+** and (b) stops external links from hijacking the app shell. It's ~10 lines, but it means a **new build #3 + resubmit** (both now fully non-interactive since `ascAppId` is wired). Ask me to do it if you want 4+.

---

## Everything is confirmed — only screenshots remain
- **Copyright** — ✅ `© 2026 Steve Abrams` (confirmed 2026-08-10).
- **Age rating** — ✅ ship 17+ with build #2 (confirmed 2026-08-10).
- **App Privacy** — ✅ "Data Not Collected".
- **Only real blocker left = screenshots** — capture from build 2 on a **real device via TestFlight** (the Simulator hangs on splash — `react-native-maps` native init). NOT from the Simulator.

Everything else above is final. Screenshots per `SCREENSHOT-SHOTLIST.md`; name/subtitle/description in `APP-STORE-LISTING.md`.