Days 20-23: Shipping M1, M2, M3 in Four Days
166 commits in four days. Three formal milestones shipped. This was the stretch where the project stopped being about building features and started being about building a business.
The Milestone Framework
I introduced milestones -- coherent, shippable increments. Also started using PRs properly (PRs #2 through #18 in this window). Solo developer reviewing own PRs sounds silly, but they're a forcing function for documentation.
M1: Credit Economy Foundation
- Anonymous-to-authenticated merging -- seamless account transition
- Cross-tab credit sync -- Supabase real-time subscriptions
- 7 contextual upgrade triggers -- tailored prompts at every credit-depleted moment
- Redeem codes -- admin-generated codes for promotions and partnerships
- Referral bonuses -- asymmetric (10 for referrer, 3 for referee)
The cross-tab bug was subtle: buy credits in one tab, switch to another, see old balance, think purchase failed, buy again. Fix: real-time subscriptions update every tab within a second.
M2: Daily Hub
The engagement play. Fortune-telling apps are event-driven -- users come when they have a question, then leave. The Daily Hub gives a reason to come back every day.
Key architectural decision: pre-generation. Content is generated at midnight Beijing time via cron, not on-demand. When a user opens the Hub at 8 AM, it's instant. No spinner. The difference between instant and a 3-second loading state was dramatic for perceived quality.
M3: Distribution
PostHog integration. Event tracking across the entire platform. Admin dashboard with user management, credit transactions, redeem code generation.
The Shift
Before M1-M3: "What feature should I build next?"
After M1-M3: "What behavior should I drive next?"
Conversion funnels. Retention hooks. Daily engagement. Referral incentives. These aren't engineering problems. They're business problems that happen to require engineering.
166 commits. 3 milestones. 17 PRs. And for the first time, I'm thinking about user retention instead of feature lists.