Inspiration

I started building Gonna Rain?! for myself. I ride my enduro bike a lot outdoors and too many forest rides were ruined by unexpected showers. Even when the forecast said otherwise. Most weather apps overwhelmed me with radar maps and dozens of charts when all I needed was a simple, trustworthy heads-up.

Family kept hearing my phone buzz and me shouting, “Gonna rain?!”, that became the name. When I saw Shipaton, I decided to polish the visuals, harden stability, and share the journey in public. The user promise is simple: “You won’t get wet anymore.”

What it does

  • Personalized-local rain alerts for one or multiple saved locations, minutes before it starts.
  • Personalization: quiet hours, and a rain probability threshold that triggers notifications.
  • Simple, refined UX - minimal surface area on the front, a lot of engineering under the hood (backend, cross-service APIs, push, and in-app messages).

Premium (Pro) unlocks:

  • 15-minute forecast granularity
  • Additional locations for alerts
  • No premium reminders
  • Share forecast and alerts without watermark
  • Advanced quiet hours (fine-grained delivery windows)
  • Custom rain probability threshold control

How I built it

  • Client: Flutter (iOS & Android)
  • Monetization: RevenueCat (IAP & trials)
  • Engagement: OneSignal (push + In-App Messages)
  • Weather: Open-Meteo data
  • Maps: Mapbox
  • Backend: custom server orchestrating weather ingestion and notification delivery; integrates OneSignal API, Open-Meteo, and MySQL for persistence.

Architecture highlights:

  • The Flutter app focuses on UI/UX and lightweight state.
  • The backend aggregates forecasts for all registered locations, applies business rules (probability thresholds, quiet hours), caches results, and batches/schedules pushes via OneSignal to optimize battery and network usage.
  • Separation of concerns lets the client stay fast while the server handles load, rate-limits, and retries.

Website: https://gonnarain.app

Challenges I ran into

  • Marketing > engineering. Shipping features and publishing on both stores was straightforward thanks to prior app experience. The hard part was telling the story, creating social content, and doing it consistently while solo.

Accomplishments that I'm proud of

  • Cross-platform from one codebase with Flutter, published on iOS & Android.
  • Rock-solid stability - no meaningful crash signals in App Store / Google Play logs.
  • Learned new muscles around content and distribution, using AI to lighten the load as a solo builder.
  • Visual polish and a clean alert flow that favors clarity over clutter.

What I learned

  • Users value timely, trustworthy alerts more than raw radar power.
  • Small UX details (quiet hours defaults, clearer copy on the threshold slider) improve opt-in and satisfaction.
  • Backend-driven orchestration (caching + batching) pays off in battery life and delivery consistency.
  • Marketing takes more time than expected. Shipping is half the job; telling is the other half.

What’s next for Gonna Rain?!

  • A short breather after Shipaton, then:
  • ASO improvements for both stores and paid user acquisition experiments.
  • New locales (multi-language support).
  • Further feature work based on feedback (e.g., richer widgets, watch support, additional alert types).

Built With

Share this project:

Updates