Build Sheet · July 2026
How SunnySky is built
A dark-mode, social-first weather app that reads sixindependent forecasts and shows you where they disagree. One TypeScript codebase ships it to iPhone, Android and the web. Here's what I used, why I picked it, and what it costs me to run.
- TypeScript
- 26,492
- Forecast sources
- 6
- Data providers
- 20
- Edge functions
- 12
- Cost today
- $8/mo
01The shape of it
It's one repo with four packages inside. Two of them are the actual apps — the phone app and the website. The other two are the stuff both apps have to agree on: all the weather logic, and the design tokens.
That split is basically the whole architecture, and it's the decision I'd defend hardest. The maths that draws the consensus line on the chart is literally the same function that fills in the iPhone widget, because they both import it from the same file. There's no second copy to drift out of sync. When I fixed a rounding bug in it once, the app, the website and the widget all got the fix at the same time without me touching three files.
Everything below hangs off that idea: keep the thinking in one place, keep the platforms dumb, and don't pay for anything the government already gives away.
02What I'm actually using
The phone app
I'm a solo dev. If I had to maintain a Swift app and a Kotlin app and a web app separately, I'd ship nothing. So the whole client is one codebase.
Stack.Protected— the whole onboarding → login → app gate is four lines of “this screen only exists if you're signed in”, instead of redirect logic smeared across every screen.The website
sunnyskyweather.com is the marketing site, and it also serves the entire app as a web build at /app — so you can try the real thing without installing anything.
The backend
This is the part I'd have expected to be hardest and it turned out to be the easiest. It's all one product.
Where the weather comes from
This is the actual product. Most weather apps resell one forecast. I pull six, plus a pile of government feeds, and show you where they disagree.
Shipping and keeping it alive
03What it costs me
Two columns — what I'm actually paying right now, and what it turns into at roughly 2,000 installs. These are operating costs; what users pay is under the table.
| Service | What I need | Now | At 2k installs |
|---|---|---|---|
| Apple Developer | $99/yr, non-negotiable | $8.25 | $8.25 |
| Open-Meteo | API Standard — commercial licence | $29.00 | $29.00 |
| Supabase | Pro — backups, and it stops auto-pausing | $0 | $25.00 |
| Vercel | Pro — commercial hosting | $0 | $20.00 |
| Pirate Weather | Paid once I outgrow the free calls | $0 | $5.00 |
| Apple WeatherKit | 500k calls included with the $99 | $0 | $0 |
| OpenWeather | Free tier is plenty | $0 | $0 |
| NOAA / NASA / USGS | Public data, no key, no bill | $0 | $0 |
| Sentry | Free — 5k errors/mo | $0 | $0 |
| EAS Build | Free — 15 iOS builds/mo | $0 | $0 |
| What I pay | per month | $37.25 | $87.25 |
What users pay:
The break-even line is small on purpose: 25 subscribers cover the 2,000-install bill if they all pay monthly, 50if they all pay yearly — and that is after Apple's full 30%. Severe weather alerts are not in Pro and never will be, so nothing about staying safe depends on reaching it. The budget stays manageable because the expensive-sounding parts — six forecasts reconciled, ten models polled, months of accuracy history — mostly run on free government data and on maths that happens on your phone.
There used to be three Google rows here — Google Weather as a source, Google Pollen outside Europe, and Google Routes for drives off iPhone. I took all three out in September 2026: Google Maps Platform's terms name a weather app as a use its Weather API isn't for, and cap how long its weather may be kept, and a weather app built on remembering forecasts can't live inside that. Pollen now comes from Copernicus CAMS, which covers Europe, and a route planned anywhere but an iPhone is a straight line between the two ends, stamped as one.
04Stuff I learned the annoying way
The licences come before the price
Open-Meteo's free API is non-commercial. Vercel's Hobby plan is non-commercial too. Charging users was never the test: SunnySky was a commercial product before it sold anything, and an app with a subscription in it is one by anyone's reading. The Open-Meteo licence was bought the day billing was switched on, not after the first sale.
At scale the licensed plans are $49/mo between them. Pro exists to pay for things like that — it is not a toll on the warnings.
The provider tier shapes the product
SunnySky stays on Open-Meteo's API Standard plan. Historical, climate, ensemble, and satellite-radiation endpoints require the Professional plan, so the app does not call them.
The multi-model rain vote and official NOAA climate normals answer the useful questions on the Standard plan, so Pro's price doesn't have to subsidise the Professional one.
Where the money isn't going
No servers. No Kubernetes, no Redis, no message queue, no CDN bill, no third-party product analytics vendor, no Mac in a cupboard running builds. The database schedules its own jobs and Apple handles app signing and distribution.
05Five things I deliberately didn't use
Every one of these is a thing you'd normally reach for, and skipping them was the right call each time.
No charting library
I hand-draw the forecast chart in SVG. I needed a median line coloured by temperature along its length, every source ghosted behind it, and a scrubber snapping to 30-minute steps — and once you've fought a chart library for a day you realise drawing it yourself is the shorter path.
No map library
The radar map is about 400 lines of hand-rolled tile maths. It draws the basemap, the radar frames and the warning polygons, animates them, and behaves the same on phone and browser. Mapbox and friends bill per map load, which is exactly the cost curve I built the rest of this app to avoid.
No state management library
Just React context and some hooks. The app's state is honestly simple — a location, a forecast, a session. Redux would be ceremony for the sake of it.
No global radar mosaic
The free worldwide mosaics are licensed for personal and educational use, with no commercial tier on sale at any price. The vendors who will sell you one quote four figures a month at this app's size, and what they sell is a satellite-blended field stitched across the places with no radar in them — which I could not put a RADAR stamp on and still look you in the eye. So radar is the real thing over North America and nothing at all everywhere else.
No component kit
Design tokens instead. The app has a very specific look — instrument panel, monospace numbers, true-grey surfaces with no blue in them — and starting from someone else's components means fighting their defaults the whole way.