It's surprisingly hard to integrate into the local community for pretty much anything. (Professional communities, hobbies, volunteering, etc.). COVID made this need more acute because it destroyed all the ways to do this in person. We wanted to build the simplest possible way for people to connect digitally to their local community, whatever that community is.
What it does
It's a semi-public chat client with Slack-like rooms, except each room is associated with a physical location. Users subscribe to topics ("volunteering"; "news") or digital communities ("Indie Hackers"; "/r/COVID19") and are automatically bucketed into the physically closest channels for each subscribed topic. This means discovery is insanely easy; subscribing to any topic adds you to the relevant nearby rooms.
How I built it
GeoDjango + Django REST framework on the server. Postgres with PostGIS in the database. The frontend is a React Native app which is mostly just an API client and a couple of views for navigating from room to room, plus a flow for creating views.
Challenges I ran into
There were some tricky product details to work out:
- Should users lose access to a room if it's no longer their closest room? (Answer: no; when a user gets access to a room, they acquire a lease which stays valid as long as they've been active in the room recently.)
- How should anonymity be handled? (usernames, not names; privacy is important since user locations are sensitive. Rooms have moderators to avoid the toxicity that can arise from anonymity. In the future, might offer a double opt-in de-anonymize feature to users who want to connect in meatspace).
Accomplishments that I'm proud of
The room leasing model is slick and the UI is pretty clean, if simple/not fully-featured.
What I learned
First React Native project! Have learned a lot about RN and mobile development in general.
- Moderation features
- Lots of polish