01-projects/squarely-puzzles

mobile app inventory

2026-05-13·inventory·status: inventory-complete-awaiting-monetization-decision·! medium
squarelyiosmobile-appinventorypunchlistmonetizationfirebaseswift

Squarely mobile-app technical inventory — 2026-05-13

Summary

The iOS app is functionally complete and stable: SwiftUI on iOS 17+, ~9,556 Swift LOC across 20 source files, Firebase backend live with 11 deployed Cloud Functions, 150 unit tests across 3 test files, and a hardened crash-resolution history (5 distinct concurrency/Firebase crashes shipped fixes for in April 2026). Last meaningful work was 2026-04-09 (one month idle); the codebase is in a "would launch tomorrow" state from a correctness standpoint. The realistic gap to App Store launch is 2-4 weeks of small, mostly-cosmetic blockers (App Store ID wiring, share sheet, email feedback, domain fix, monetization plumbing, App Store metadata + screenshots). The biggest open strategic question is monetization model, not engineering: recommendation is conditional-continue — finish the punchlist and ship a free v1, defer monetization to v1.1 once daily-puzzle usage data is in hand.

Current state

Architecture

Punchlist to launch

Mining sources: in-code TODOs (5), known-issues.md, deployment-guide.md, prior state-review (2026-04-25), and missing-but-required App Store assets.

  1. [BLOCKER] Replace YOUR_APP_ID placeholder in AboutView.swift:191 — currently hardcoded itms-apps://itunes.apple.com/app/idYOUR_APP_ID?action=write-review. Requires App Store Connect record + assigned app ID first.
  2. [BLOCKER] Fix domain mismatch — iOS hardcodes squarelypuzzles.com (with s); live web is squarelypuzzle.com (no s). Affects AboutView lines 173, 184, 206 (mailto, terms URL, website link). Decide canonical domain + update one side or the other.
  3. [BLOCKER] App Store Connect record — create the app listing, bundle ID confirmation, App Store Connect API key for automated submission if using /squarely-deploy skill.
  4. [BLOCKER] App Store assets — icon at all required sizes, 6.7"/6.5"/5.5" screenshots, description copy, keywords, support URL, privacy policy URL (PrivacyPolicyView exists in-app; needs hosted web version too per App Store rules), age rating questionnaire.
  5. [BLOCKER] TestFlight verification pass — internal testers install + verify daily puzzle, score submit, leaderboard, calendar all work on a non-dev device. Deployment guide step 8 documents the procedure.
  6. [BLOCKER] Terms of service URLAboutView.swift:184 points to squarelypuzzles.com/terms which does not exist. Either ship a hosted terms page or remove the link.
  7. [SHOULD] Implement email feedbackAboutView.swift:172 TODO. Currently opens mailto:support@squarelypuzzles.com. Confirm that inbox routes somewhere monitored (Gmail? founder personal?), or wire to an actual feedback form.
  8. [SHOULD] Implement share sheetAboutView.swift:197 TODO. Needed for any organic word-of-mouth loop. UIActivityViewController wrapper, share App Store URL + tagline.
  9. [SHOULD] Monetization plumbingAboutView.swift:202 TODO openUpgrade() is a no-op. Decision in section below blocks build-out. If IAP/subscription, need StoreKit2 wiring + a paywall view. If ad-supported, need ad SDK (Google AdMob / AppLovin) integration. If free v1, just hide the button.
  10. [SHOULD] iOS launch event coordination with web + Amazon — per 2026-04-25 state-review: don't ship the iOS app before the web site (squarelypuzzle.com) is updated to Books 2+3 + App Store coming-soon section. Otherwise the web → iOS funnel breaks day one.
  11. [SHOULD] Crashlytics symbolication verified — deployment guide mentions upload of symbols on Archive. Confirm dSYM upload working end-to-end on a TestFlight build before public submission.
  12. [SHOULD] Increment build number automation — deployment guide has manual Xcode bump as step 1. The /squarely-deploy skill (RDCO-canonical iOS deployment rails per skill registry) should handle this; verify integration.
  13. [NICE-TO-HAVE] Casual-contact viral share — per growth strategy, the iOS app's potential casual-contact viral loop (Wordle-style shareable result format) is identified as Loop 2 in growth-strategy.md. Share-sheet implementation (#8) is the prerequisite; a custom share-image renderer is the v1.1 fast-follow.
  14. [NICE-TO-HAVE] GameView.swift refactor — known-issues KI-002. Extract subviews into separate files. No user impact, developer experience only. Defer.
  15. [NICE-TO-HAVE] Backend module split — known-issues KI-003. index.ts modularization. Defer until backend grows past ~15 functions.
  16. [NICE-TO-HAVE] Cross-device sync — ADR-003 future-work. Adds Firebase Auth (anonymous → email/Google upgrade), maps odId to auth UID. Not a launch blocker; consider for v1.2.
  17. [NICE-TO-HAVE] Amazon/KDP cross-promotion in-app — surface the 3 paperback books inside the app (About screen module? End-of-puzzle prompt?). Loop the iOS → Amazon engine. Defer to v1.1.
  18. [NICE-TO-HAVE] Daily push notifications — opt-in reminder to play today's puzzle. Adds an iOS retention lubricant. Needs Firebase Cloud Messaging setup and a notifications permission flow. v1.1 candidate.
  19. [NICE-TO-HAVE] Game Center integration — global leaderboards via Apple's native infrastructure. Either complement or replace the custom Firestore leaderboard. Defer.
  20. [NICE-TO-HAVE] App Privacy details (App Store Connect) — beyond the in-app privacy policy, the App Store Connect Privacy section needs filling out (data types collected, tracking declaration). Required before submission so technically a BLOCKER, but a 30-min form-fill, not engineering work.

Monetization model options

Surface the four shapes; founder picks.

Option A: In-App Purchase (IAP) — one-time unlock

Option B: Subscription

Option C: Ad-supported

Option D: Hybrid (free + ad-removal IAP)

Continue-or-park recommendation

Conditional continue. Honest read:

The app is in better shape than the strategy doc implies. 9,556 LOC of working SwiftUI + a hardened Firebase backend + 150 tests is not a project to mothball. The April crash-fix cluster proves the founder (or a contractor — commits are from bwilson668) actively stabilized this code recently; abandoning it would write off real recent investment.

But the strategic context matters:

Recommended posture: ship a free v1 without monetization as a 2-week sprint to clear blockers 1-7 + 11-12. Treat v1 as instrumentation — get the casual-contact viral loop tested, daily-puzzle DAU measured, and store listing live so Amazon ads can co-promote later. Defer the monetization decision to v1.1 when 4-6 weeks of usage data tells us whether ad-supported (need DAU), IAP (need conversion-rate signal), or hybrid is the right shape. Don't park — the app is too close to launch to write off — but don't accelerate monetization plumbing into v1; that's gold-plating ahead of evidence.

If the founder disagrees and wants monetization in v1, recommend Option D (hybrid) as the highest-fit + standard-pattern option. Option B (subscription) is the only one with a strong "don't do this" — the puzzle-app subscription pattern doesn't fit Squarely's positioning.

What the founder picks next

Related