{"slug":"costa-rica-app","total":28,"limit":100,"offset":0,"since":null,"commits":[{"hash":"d2af7f0","date":"2026-09-14 11:35:28 -0700","author":"Steve Abrams","subject":"costa-rica: fix broken eas submit ascApiKeyPath -> canonical /Users/macstudio3/private_keys/AuthKey_72Y2TZT54R.p8","body":"The configured path ../nineoh-guide/.credentials/asc-api-key.p8 does not exist on\ndisk; a gated 'eas submit' would fail on it. Repointed to the canonical ASC API key\n(same key id 72Y2TZT54R already in this file; nineoh committed precedent). Config-only,\nreversible, no submit fired. TK-11730.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KoECqRCpUVbcsFegZ1Xp3e"},{"hash":"e1ee39b","date":"2026-09-13 02:23:21 -0700","author":"Steve Abrams","subject":"TK-11518: the honest-copy rewrite introduced its own 2.3.1 claims","body":"store/listing.md is the authoritative paste source, so two defects in it matter:\n\n- Its note asserted 'REALITY: 4 real listings (Arenal Volcano Hike, Casa Manuel\n  Antonio, Nosara Yoga Institute, Tamarindo Surf School)'. Those four were\n  classified by NAME. places.source says all four are 'seed-demo', inserted by\n  scripts/seed.sql:41-58 as 'placeholders so UI renders something before scrape\n  lands real data'. Genuine curated inventory is zero.\n- The body copy therefore makes false provenance claims -- 'hand-picked, not\n  scraped' and 'Every listing is reviewed by a human before it goes up' over a\n  catalog that is 8/8 machine-seeded -- and is coupled to the gated demo purge,\n  which deletes exactly the four destinations it names.\n\nBody copy deliberately NOT rewritten: the right copy depends on inventory that\ndoes not exist yet, and a speculative rewrite would create a fourth divergent\nversion. Warning banner added instead.\n\nDocs/copy only. Undo: git revert.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Vbtgv1MuWftpd3hfWEiZYG"},{"hash":"787b1cf","date":"2026-09-13 02:18:55 -0700","author":"Steve Abrams","subject":"TK-11518: kill the App Store paste traps + record the real ASC field state","body":"Three paste sources existed for the same listing; the 2.3.1 fix (1576ed3/5904b9b)\nlanded only in store/listing.md, leaving the other two live.\n\n- store/costa-rica-appstore-copy.md: marked SUPERSEDED. Its description still read\n  'Thousands of listings across all 7 provinces and 84 cantones' against a measured\n  live catalog of 8, plus Monteverde/Puerto Viejo (no listings) and restaurants +\n  local services (no such vertical). Withdrawn blocks kept as the record, never\n  pasteable. Only the ASC field checklist here is still usable.\n- store/listing.md: records the ASC state measured read-only 2026-09-13 — ~13 unset\n  fields, not the 9 previously packeted, and flags that the store-visible name is the\n  placeholder 'Costa Rica (b9f8c9)'.\n\nDocs/copy only. No code, no deploy, no ASC write. Undo: git revert.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Vbtgv1MuWftpd3hfWEiZYG"},{"hash":"8ec16a5","date":"2026-09-11 14:11:40 -0700","author":"Steve Abrams","subject":"eas: pin production ios.image=latest (ITMS-90725 guard)","body":"Fleet sweep under TK-11155 found this app missing the guard that Charge & Explore\nneeded after sitting at 0 builds in ASC on an ITMS-90725 upload bounce. The\ndocumented fix is exactly this line (Xcode 26 / iOS 26 SDK image), and the\nchargeandexplore-release canary treats it as a HARD gate.\n\nCheap insurance: without it a production build can bounce on upload after the\nEAS build has already been paid for.\n\nSemantic diff confirms this adds build.production.ios.image only; nothing else\nremoved or changed. JSON re-validated.\n\nRefs TK-11155.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>"},{"hash":"1576ed3","date":"2026-09-11 14:01:20 -0700","author":"Steve Abrams","subject":"Costa Rica listing: rewrite the copy to match the live catalog","body":"Steve's call (TK-11518): hold the submission, soften the copy, populate real\ninventory. This is the copy half.\n\nThe description promised a product that does not exist yet. Measured against\n/api/app/listings and the source, the previous copy carried five separate\nGuideline 2.3.1 exposures:\n\n  claim                                    reality\n  \"Thousands of listings\"                  8 listings (4 of them labelled DEMO)\n  \"all 7 provinces and 84 cantones\"        4 regions\n  \"Monteverde, and Puerto Viejo\"           neither has a listing\n  \"restaurants, and local services\"        verticals are tours/surf/short-rentals only\n  \"an interactive map\"                     no map in the binary (removed in 5904b9b)\n\nRewritten as an honest small-launch position: four named destinations, human-\nreviewed listings, growing. Subtitle and promotional text corrected the same way\n(\"Hotels, tours & local services\" -> \"Stays & tours in Costa Rica\").\n\nEvery surviving claim was re-verified against the code or the live API: SINPE\n(2 files), in-app messenger (5), Sign in with Apple (1 + expo-apple-authentication),\nMy Trips (2), booking (7), and \"four destinations\" against 4 live regions.\nLengths gated: subtitle 27/30, promo 142/170, description 1227/4000.\n\nNOT submitting. Two things still gate a submission and both are content, not copy:\nevery listing has image_url null, and the 4 DEMO rows are still live in prod.\n\nRefs TK-11518, TK-11155.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>"},{"hash":"5904b9b","date":"2026-09-11 13:42:44 -0700","author":"Steve Abrams","subject":"Costa Rica listing: drop the interactive-map claim — the app has no map","body":"The App Store description advertised \"See every place on an interactive map and\nfind what's near you.\" There is no map in the binary: no react-native-maps,\nMapView, mapbox, leaflet, or any lat/long/nearby code in app/ or src/, and\nreact-native-maps is not a dependency. expo-location is not a dependency either.\n\nAdvertising a feature the binary does not have is a Guideline 2.3.1 rejection,\nand it is the same defect class that flagged Unofficial 90210 (\"No ads. No\ntracking.\" over a binary shipping AdMob + Firebase). On an account already\ncarrying seven unresolved rejections, a self-inflicted 2.3.1 is expensive.\n\nThe 4 staged screenshots were already honest — directory, listing-contact,\nbooking, trips, no map shot — so only the copy was wrong.\n\nAlso refreshed two stale notes in the same file: the screenshot-size guidance\n(staged shots are 6.9\" 1320x2868, verified with sips, which is Apple's current\nrequired iPhone size; the old 6.7\"/6.5\" text predated it) and the suggested\nscreenshot set, which still listed a \"Map of places\" shot.\n\nRefs TK-11518, TK-11155.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>"},{"hash":"f1a335c","date":"2026-09-04 08:45:48 -0700","author":"Steve Abrams","subject":"Costa Rica: purge store copy + screenshot that advertised the removed invite feature (TK-10387)","body":"Removing the contacts/invite-friends feature made the staged App Store metadata FALSE.\nSubmitting it as-is would have described and shown a feature the binary no longer has —\nthe same Guideline 2.3.1 trap already flagged on another app in this fleet, and 2.3.3 for\nthe screenshot.\n\n- store/screenshots/05-invite.png showed the Invite-friends screen and WAS STAGED FOR\n  UPLOAD. Moved to store/_removed/ (kept, not deleted). Four shots remain, a valid set.\n- Removed the 'BRING YOUR FRIENDS' section from both costa-rica-appstore-copy.md and\n  listing.md.\n- Removed 'Contacts (optional, user-initiated)' AND 'Location (coarse, optional)' from\n  the declared privacy data types in listing.md. Location is gone too: there is no\n  expo-location and no maps dependency, so that permission was orphaned and has been\n  dropped from app.json.\n- Rewrote the privacy guidance block, which previously instructed 'Contacts and Location\n  are used ON-DEVICE ... do not label as collected'. That wording described an intent the\n  shipped code did not match — it uploaded and stored the whole address book — which is\n  precisely why the feature was removed rather than relabelled.\n\nMetadata only; no product code touched. ASC entry remains Steve's console action.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01QfGYEoLBywwJD1nfrHe1on"},{"hash":"ac997f8","date":"2026-09-04 05:59:39 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-04T05:53:32 (1 data files) — package-lock.json","body":""},{"hash":"325bd5d","date":"2026-09-03 20:17:16 -0700","author":"Steve Abrams","subject":"Costa Rica iOS: remove address-book import + invite-friends for v1 (TK-10387, DTD verdict C)","body":"The client read the user's ENTIRE address book and uploaded {name, phone, email}\nin cleartext to a server route that durably persisted it - third parties' personal\ndata from people who are not users and never consented. That also contradicted the\napp's own NSContactsUsageDescription, which promised contacts stay on-device.\n\nDTD panel ruled C unanimously (8/8): remove the feature for v1. At zero users an\ninvite-matcher matches an empty set, so the feature had no value to trade against\nthe Guideline 5.1.1/5.1.2 exposure. Prod was verified empty first (0 rows), so no\nthird-party data was ever actually collected.\n\n- delete app/contacts.tsx, its Stack.Screen route, and the home-screen entry point\n- drop importContacts/contacts/inviteContact from src/api.ts\n- drop NSContactsUsageDescription (no address-book access remains)\n- drop the orphaned NSLocationWhenInUseUsageDescription: verified there is no\n  expo-location and no maps dependency, so the app asked for a permission it\n  never used (decision 3)\n- supportsTablet -> false: only iPhone-6.9\" screenshots are staged, and an iPad\n  set is a hard ASC submit blocker (decision 2)\n- remove the expo-contacts dependency and plugin entry, so no contacts SDK ships\n\nServer counterpart removed in the costa-rica repo. Local only - no deploy, no\nsubmit, no DB write.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01QfGYEoLBywwJD1nfrHe1on"},{"hash":"ff7a06b","date":"2026-09-03 20:16:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T20:10:09 (2 data files) — app.json package.json","body":""},{"hash":"e870ac2","date":"2026-08-10 12:53:10 -0700","author":"Steve Abrams","subject":"chore: commit gen-shots intermediate + v0.1.2 (session close — TK-10363 Costa Rica shot prep)","body":""},{"hash":"368e715","date":"2026-08-10 11:01:36 -0700","author":"Steve Abrams","subject":"Costa Rica: reshoot 03-booking screenshot to fill frame (stay summary + trust strip) — fixes Cody 2.3.3 empty-half defect (TK-10363)","body":""},{"hash":"10b3c50","date":"2026-08-10 10:55:10 -0700","author":"Steve Abrams","subject":"Costa Rica: stage 5x 1320x2868 App Store screenshots + store copy (TK-10363, non-gated prep)","body":"- Regenerated 5 screenshots at exactly 1320x2868 (iPhone 6.9\" spec) via local\n  Playwright render of an HTML mock built from the app's REAL screens/branding\n  (green #0a7d55). $0 local render, no paid API.\n- Screens: directory browse, listing detail (BEST WAY TO CONTACT), booking\n  (card + SINPE Movil), My Trips, Invite friends.\n- Added store/costa-rica-appstore-copy.md: name/subtitle/keywords/description,\n  privacy labels per Steve's Aug 8 decision (Contacts+Location on-device, not\n  collected), export compliance, screenshot manifest. Anti-slop checked.\n- gen-shots.mjs renderer committed under tmp/ for reproducibility.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"a3a5146","date":"2026-08-09 10:44:16 -0700","author":"Steve Abrams","subject":"listing: point Support/Marketing URLs at public /support, add required Privacy Policy URL, correct build to #13","body":""},{"hash":"fca4bcf","date":"2026-08-07 16:02:21 -0700","author":"Steve Abrams","subject":"costa-rica-app: upgrade Expo SDK 52->54 (RN 0.81.5 / react 19.1.0 / expo-router 6) for Xcode 26 / iOS 26 SDK — Apple now mandates it for App Store uploads; tsc clean + expo-doctor 18/18, TK-10346","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"387e7dc","date":"2026-08-07 15:56:48 -0700","author":"Steve Abrams","subject":"chore: bump v0.1.0 -> v0.1.1 (session close)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"e028ded","date":"2026-08-07 15:55:47 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-07T15:54:54 (2 data files) — package-lock.json package.json","body":""},{"hash":"2413374","date":"2026-08-07 15:36:13 -0700","author":"Steve Abrams","subject":"costa-rica-app: App Store listing metadata (store/listing.md) + 5 real device screenshots @1290x2796 (directory, listing+BEST WAY TO CONTACT, booking, trips, invite) captured from live app via expo-web+headless-chrome","body":""},{"hash":"dc1e02f","date":"2026-08-07 14:22:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-07T14:22:04 (1 data files) — eas.json","body":""},{"hash":"b5406e9","date":"2026-08-07 13:51:58 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-07T13:51:08 (1 data files) — eas.json","body":""},{"hash":"a6f0009","date":"2026-08-07 13:35:20 -0700","author":"Steve Abrams","subject":"costa-rica-app: register expo-asset + expo-font plugins in app.json (complete the Metro bundle-phase fix)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"a7eb8a4","date":"2026-08-07 13:24:52 -0700","author":"Steve Abrams","subject":"costa-rica-app: add missing expo-asset + expo-font (Metro/EAS bundle-phase failure fix); local expo export now succeeds","body":""},{"hash":"e1db303","date":"2026-08-07 11:44:24 -0700","author":"Steve Abrams","subject":"costa-rica-app: big BEST WAY TO CONTACT block on listing — WhatsApp/Call/Email/Message/Other color buttons + in-app messenger composer modal","body":""},{"hash":"30a7d50","date":"2026-08-07 11:26:37 -0700","author":"Steve Abrams","subject":"costa-rica-app: align react-native 0.76.9 + react-native-screens 4.4.0 to Expo SDK 52 expected versions (expo-doctor 18/18) — pre-build hygiene, TK-10346","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"7d6bbd9","date":"2026-08-07 11:16:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-07T11:14:36 (3 data files) — app.json eas.json package-lock.json","body":""},{"hash":"2368baa","date":"2026-08-07 10:30:28 -0700","author":"Steve Abrams","subject":"costa-rica-app: Contacts screen — import address book (expo-contacts + NSContactsUsageDescription), show who's on-app, invite the rest via WhatsApp; 👥 entry point on directory","body":""},{"hash":"2d0b15d","date":"2026-08-07 10:18:51 -0700","author":"Steve Abrams","subject":"costa-rica-app: Sign in with Apple — expo-apple-authentication button on login, usesAppleSignIn + plugin, api.apple()","body":""},{"hash":"e816038","date":"2026-08-07 09:56:15 -0700","author":"Steve Abrams","subject":"costa-rica-app: Expo/EAS native scaffold — Router nav, JWT auth, directory browse, listing, booking+payment (card/SINPE via Tilopay 3DS), my-trips, host onboarding (SINPE/Plaid); eas.json wired to account ASC key (public IDs only, .p8 gitignored)","body":""}]}