Getting a card layout through app review
Last night on StatPro was almost all mobile: rebuild the Stats home, get the app ready for store review, and fix the paper cuts review would find anyway. One principle kept paying off.
The principle: one theme per screen
Reviewers skim the way skimmers read devlogs. Every app store screen now answers exactly one question. Profile answers "am I set up?": Follow Teams on the empty state, no subscription rows in free mode, no Pro offer in onboarding. The game page answers "what happened?": a team-color header, a quiet odds card, box-score leaders. Mixed screens read as clutter.
The home screen: a headline, then the data
The mobile Stats home got a full rebuild: league chips, a live scores strip, and stacked cards for standings, leaders, team rankings, records against the spread, and trending players. One screen answers "what did I miss?" and links to the detail screens for the follow-up. Heavy data sits on a separate feed so the page stays light.
graph TD HOME["Stats home"] --> CARDS["Card stack"] CARDS --> PERF["Performance feed"] CARDS --> DETAIL["Detail screens"]
Free mode must be, actually, free
Two changes review would have flagged anyway: the onboarding Pro offer no longer shows in free mode, and subscription rows are hidden from the profile. In-app account deletion went live in production too, a store requirement, done before submission. Sign-in state now survives a cold launch too.
Saying no to offshore books
We filter out offshore sportsbooks across web, mobile API responses, and the welcome page, plus responsible-gambling notices. Odds stay out of ranked betting lanes for now. That compliance pass got us to a mature age rating with real confidence, and the checklist now lives beside the listing copy.
Flaky CI: fix the clock, not the test
The cache handler deadline test failed twice on main and held a deploy. Cause: real timers against a 70 ms budget, so a loaded runner can lose the race before the first tick. Fix: a virtual clock. Fake Redis time plus a simulated 30 ms command latency makes the result deterministic, and the quarantine entry is gone. If your test measures elapsed time, own the clock.