AD
All projects
PeakLife icon
Mobile2026 proprietary, code private

PeakLife

Vedic-astrology guidance app with chart-grounded AI chat

Play Store Flutter engineer, two-person team (~42% of commits)

PeakLife turns a user's Vedic birth chart into practical, hour-by-hour 'peak windows', daily transit alerts, and an AI advisor grounded in their chart: no mysticism, just actionable guidance. Live on Google Play, taken from zero to a signed production release in about six weeks.

The Problem

Astrology apps are either generic horoscopes or unusable jargon. PeakLife needed personalized, chart-derived guidance delivered like a productivity tool, with family profiles, subscriptions, and the release infrastructure of a serious consumer app.

The Solution

A feature-first Riverpod 3 Flutter app: phone-OTP auth with birthplace autocomplete, animated chart generation, an hour-by-hour hora table of favorable windows, threaded AI conversations grounded in the chart, multi-profile family charts, and Razorpay subscriptions with server-driven paywalls and usage-limit gating.

Architecture

  • Feature-first layering (features → shared → core) under a strict engineering guide: 300-line file cap, design-token-only UI, centralized endpoints
  • Dio interceptor chain: Firebase-ID-token auth with 401 refresh-retry → exponential backoff → logging
  • Dev/prod flavors wired to two separate Firebase projects with side-by-side installs; per-flavor API, Sentry environment and Google services config on both platforms
  • Remote Config as an ops layer: maintenance mode, forced-update gates, payment kill switch, runtime API failover, all without a release
  • GitHub Actions CI/CD: push to beta → signed Android APK + iOS IPA → Firebase App Distribution, secrets injected at build time

Challenges & How I Solved Them

Two Firebases, one codebase

Staging and production needed full isolation: auth, data, analytics, push. Flutter flavors drive the Firebase options dispatcher, API base URL and Sentry environment, with a .debug application-id suffix so both builds install side by side.

Paywalls that change without releases

The paywall is server-rendered HTML in a WebView with a subscription-intent → Razorpay checkout → status-polling flow, so pricing experiments never wait on app review.

My Contributions

  • Dev/prod flavor system with dual Firebase projects (authored the PR)
  • Multi-profile family charts and the profile switcher
  • Threaded AI chat: threads API integration, rename/pin/soft-delete
  • CI/CD and release infrastructure to a signed Play Store build

Impact

  • Live on Google Play (me.peaklife) as an early-access release
  • Zero → signed v1.0.5 production release in ~6 weeks, 99 commits

Lessons Learned

Release infrastructure is a feature: the flavor system, Remote-Config kill switches and CI pipeline let a two-person team ship weekly without fear.

Tech Stack

FlutterRiverpod 3go_routerDioFirebaseRemote ConfigSentryRazorpayGitHub Actions