Get on TestFlight.
Internal testers in Apple's TestFlight by the end of the week.
- Day 1
App Store Connect record
Apple Developer account confirmed; app record created for com.newsletterpod.app.
- Day 2
Sign in with Apple + StoreKit
Enable Sign in with Apple for the bundle ID; create the monthly and annual subscription products.
- Day 3–4
Codemagic wired up
GitHub connected, App Store Connect API key integration added, iOS code signing enabled.
- Day 5
Backend pointer + auth secrets
AppConfiguration.swift pointed at the deployed Cloud Run; APPLE_CLIENT_ID and SESSION_SIGNING_SECRET confirmed.
- Day 6–7
First TestFlight build
Run the ios-testflight workflow, invite internal testers, watch what breaks.
Harden the backend.
Real verification, real scheduling, one full end-to-end run with a real user.
- Day 8–9
Apple token verification
Replace the placeholder path with real identity-token verification on POST /v1/auth/apple.
- Day 10–11
App Store notification signing
Signed-payload verification for POST /v1/billing/app-store/notifications.
- Day 12
Dispatcher on Cloud Scheduler
Call /jobs/dispatch-due-users every 15 minutes; evaluate Cloud Tasks for per-user enqueuing.
- Day 13–14
End-to-end with one real user
Sign in, configure sources and format, schedule, generate, subscribe in Apple Podcasts, hear it play.
Make it tunable.
Swipe-based interest replaces topic groupings as the relevance signal.
- Day 15–16
Persistent source items
New source_items Firestore collection; embed title + summary with OpenAI text-embedding-3-small at ingest.
- Day 17
Swipes + interest vector
Swipe collection in Firestore; user vector as right-mean minus left-mean, L2-normalized, cached per generation run.
- Day 18
Ranker behind a flag
Score candidates by cosine similarity before script generation; topics-based selection stays default until the flip.
- Day 19
Cold-start k-means deck
GET /v1/swipe-deck/cold-start returns ~15–20 cluster-center items; weekly refresh via Cloud Scheduler.
- Day 20–21
iOS swipe onboarding
Card-stack onboarding replaces the topics picker; a post-episode 'tune your pod' deck keeps the signal fresh.