BearPool
A rideshare app for UC Berkeley students. Post or join a ride, chat in real time, and rate each other afterward. Signup is locked to @berkeley.edu emails.
- React Native
- Expo
- TypeScript
- Firebase
- Contributors
- 2
- In active development
- 13+ months
Overview
BearPool is a rideshare app for UC Berkeley students, post a ride or join one, chat with the group in real time, and rate people once the ride's done. You need a real @berkeley.edu email to sign up. I built this with a small team.
What was built
You post a ride with a seat count and an optional gender preference, and the group chat runs on Firestore in real time, so joins, leaves, and host changes show up as system messages on their own. There's post-ride star ratings, push notifications, and the usual safety stuff: blocking, reporting, profanity filtering on anything people type.
Architecture
It's Expo Router (React Native, TypeScript) on top of Firebase. Firestore handles the real-time data, Firebase Auth handles sign-in (email/password, Google, and Apple, all checked against the @berkeley.edu domain server-side too), and Cloud Functions v2 handle push delivery, system messages, and account deletion.
Performance
I went and pulled the real numbers straight out of the Cloud Functions code instead of guessing: a message notification gets suppressed if you already have the chat open and were active in the last 75 seconds, notification text truncates at 120 characters, and pushes go out in batches of up to 100 at a time, with every batch for a message firing in parallel rather than one by one. An hourly job checks up to 300 pending delivery receipts per run and clears out any dead device tokens it finds. Later on I also cut 57 of the 70 changed lines (81%) out of the chat list screen by ripping out its per-row live preview and listener, mainly to bring Firestore reads down on that screen.