Inspiration
I've always been interested by birds and wanted to learn more.
But every time I try.. I've given up.
I've visited websites, downloaded apps, but the same old pattern emerges. I find countless birds which look incredibly similar and find myself reading about birds that don't even visit where I live.
So, I decided to make an app that actually helps me spot and identify birds that are local to my area, which is actually fun to use.
Snap a bird, the app tells you what it is and why it's special, and it goes into your collection. If it's rare you get congratulated. Your town becomes a level. The Purple Heron two miles away becomes a side quest.
What it does
Robin is a bird identification and collecting app with a companion robin who talks you through it. You photograph a bird, Robin identifies it, and you add it to your collection. A Birdex tracks every species reported near you so you always have something to hunt. There's a logbook per location, achievements, streaks, and a shareable postcard of your finds.
Free users get on-device identification with Apple's Foundation Models. Robin Pro routes photos to Claude through my own proxy for much sharper IDs, plus bird chat, advanced bird information, and live "what are the birds doing in this exact weather" insights.
Using OneSignal, the Robin notifies you when rare birds are spotted nearby, if the weather is prime for birding and gives you the ability to track specific birds you're trying to collect.
How we built it
The app is SwiftUI + SwiftData, iOS 17+, native frameworks wherever possible. RevenueCat handles the subscription, paywall, and customer center.
The AI is two tiers. Free runs entirely on device with Apple Foundation Models. Pro calls Claude through a Cloudflare Worker I wrote that owns the prompts, validates everything, and enforces a fair-use budget per user.
The notification backend is Firebase (Firestore + scheduled Cloud Functions) talking to eBird, Apple's WeatherKit REST API, and OneSignal for continual engagement.
Challenges we ran into
Despite OneSignal being an incredibly useful platform, it is still difficult to build push notifications that are scale efficiently while still being customised for each user.
The trick is that nothing should scale per user. To do this, I round a user's location to a grid cell before it ever leaves their phone. Each saved location is roughly an 11km square. Everyone in a cell shares one API call, and identical alerts go out as a single batched push. This means an entire city of birds would cost the same as one user.
It's also a privacy win: precise coordinates never leave the phone, and the server only ever knows "somewhere in this 11km square".
Scheduling is one indexed timestamp per user per reminder. The hourly job just asks "who is due", touches only those rows, and recomputes the next send from the user's IANA timezone, so daylight saving fixes itself every single day.
Accomplishments that we're proud of
A scalable backend that integrates perfectly with OneSignal to provide a hyper-focused notification platform.
What we learned
- Batch by geography, not by user.
- Prove things by running them. Every feature got tested against real feeds before I trusted it, and the real data immediately found bugs my fixtures missed.
- Meaningful copy is a feature. "21C and rain, pack a hood" became "Wind grounds small birds, try sheltered hedgerows." and the notification went from boring to useful.
What's next for Birdwatching with Robin
The app is the start, but the real goal is a brand around birding itself. Birding is quietly huge and weirdly underserved: the data is communal (every sighting in Robin comes from real birdwatchers reporting what they see), yet the apps all feel lonely.
The backend already knows the interesting stuff: what's arriving with the season, which rarities turned up where, what the weekend weather means for birds. Turning that into a weekly "your birding week" email, personal to your area and your watch list, gives Robin a voice outside the app and a reason to come back that doesn't depend on a push notification.
Long term I want Robin to be what you think of when you think about birding, the way Strava owns running. The collection game gets people in the door, the community and the newsletter keep them, and the brand grows from there.
Built With
- firebase
- google-cloud
- onesignal
- swiftiui
Log in or sign up for Devpost to join the conversation.