Inspiration
We started building hello after our own frustrating experiences on dating apps. So many platforms today are built around superficial signals. Profiles feel curated and performative, and it becomes hard to tell who someone really is. We found ourselves craving something more real and more human.
At the same time, we noticed how rare in‑person connections have become. With social media and dating apps, meeting people now happens almost entirely online. The kinds of chance encounters that once felt normal have slowly disappeared, even though those moments often lead to the most meaningful relationships.
We wanted to bring that feeling back. We wanted to encourage people to step outside, touch some grass, breathe fresh air, and live the way our parents did when they met. By being in the right place at the right time, we believe people can find new friendships or maybe even something more.
What it does
hello helps people meet naturally in the real world. When two nearby people share interests and feel comfortable meeting in similar places, we suggest a real location where they could cross paths, like a coffee shop, bookstore, or park.
There is no swiping, no endless messaging, and no pressure to perform. We simply create the opportunity. Whether it leads to a quick conversation, a new friendship, or something deeper, hello is about making space for genuine connection and letting the moment speak for itself.
How we built it
We built the application as a mobile-first experience using React Native with Expo Router, which allowed us to move quickly while maintaining a clean, scalable navigation structure. For backend infrastructure, data storage, and authentication, we used Supabase with PostgreSQL, enabling us to handle user accounts, real-time data, and geospatial queries in a single platform. To support location-based matching, we stored user locations using PostGIS geography types and implemented Supabase Remote Procedure Calls (RPCs) to efficiently find nearby users within a configurable radius of the current user. These RPCs handle spatial filtering directly in the database, which significantly reduces data transfer and improves performance. On top of this, we used Supabase Edge Functions to apply higher-level business logic, filtering nearby users by compatibility factors such as shared interests and preferred meeting places. Real-time interaction was a key part of the experience, so we leveraged Supabase Realtime to broadcast database changes. The client subscribes to inserts on the notifications table, allowing users to receive in-app notifications instantly when a new match is found, without needing to poll the server. Within the edge function, we integrated the Google Maps Places API to find and recommend real-world locations near the current user that match both users’ preferred meeting places (e.g., coffee shops). This allows the app to suggest a practical, nearby meeting spot rather than just indicating a match. From a development process perspective, we divided the project into clear stages. We started by designing the database schema, including tables for user profiles and notifications, and setting up row-level security to ensure users can only access their own data. Next, we implemented the core backend logic using Supabase RPCs and edge functions, testing these endpoints independently before integrating them into the client. Finally, we focused on the React Native client, implementing the UI, wiring up real-time subscriptions, and testing the full end-to-end flow between the app and backend. This architecture allowed us to keep the client lightweight, move complex logic to the backend, and deliver a responsive, real-time experience while maintaining security and scalability.
Challenges we ran into
So many moments of “I have no idea why this isn’t working!” One of the most pressing challenges was getting our event listener to actually mount correctly in our React Native application and reliably relay its real-time subscription updates. We spent a significant amount of time figuring out how context is passed through the app in React Native, how hooks behave across different screens, and which actions or misconfigurations would cause the app to crash unexpectedly. Another challenge was debugging real-time behavior across multiple devices. At one point, notifications were working on one phone but not another, which led us down a long debugging rabbit hole before we realized that each physical device needed its own running Expo development server to properly subscribe to Supabase Realtime events. We also ran into challenges on the backend, particularly when working with Supabase Edge Functions, RPCs, and PostGIS. Understanding how these pieces fit together, how to test them in isolation, and how to debug errors across database functions, edge runtime logs, and the client took time and patience. Coordinating asynchronous flows between the backend and the mobile client, especially when dealing with real-time updates, was difficult but ultimately made our system more robust.
Accomplishments that we're proud of
We’re especially proud of the breadth of learning and problem-solving we accomplished across multiple domains in a short period of time. One memorable challenge involved debugging why one of our mobile clients wasn’t subscribing to Supabase Realtime broadcasts. After hours of investigation, we discovered that each physical device needed its own running Expo React Native development server to properly establish a real-time connection. Identifying this subtle issue was a turning point for us and deepened our understanding of how mobile development environments and real-time systems behave in practice. We’re also proud of the server-side architecture we built using Supabase. From implementing geospatial queries with PostGIS, to writing Remote Procedure Calls (RPCs) and Edge Functions that handle complex matching logic, we successfully moved heavy computation off the client and into a secure, scalable backend. Debugging these systems—especially across database, edge functions, and client-side real-time subscriptions—significantly strengthened our backend and full-stack debugging skills. Beyond the technical execution, we’re proud of our ideation and product thinking. We didn’t just focus on building features; we continuously refined the user experience, thought critically about real-world use cases, and designed the system to feel responsive and meaningful through real-time interactions and location-aware recommendations. Turning an abstract idea into a working, end-to-end product that connects real people in real places is something we’re genuinely proud of.
What we learned
Throughout this project, we experienced a steep but rewarding learning curve. One of our team members came in with limited experience in React Native, Expo Router, and mobile app development in general, and gained a strong understanding of how React Native differs from web-based React, particularly in terms of component structure, navigation, and platform-specific behavior. They also learned how to effectively use React hooks and providers, such as authentication providers, within a mobile environment. We also learned how powerful and developer-friendly Expo can be for rapid iteration and testing. Being able to test the app directly on a physical device by simply scanning a QR code significantly sped up our development and debugging process. On the backend, both of us deepened our understanding of Supabase beyond basic CRUD operations. We learned how to build and test Supabase Edge Functions, how different Supabase project URLs are used for various services, and how to configure and invoke Remote Procedure Calls (RPCs) for more complex database logic. We also worked with PostGIS for the first time, learning how to store and query geospatial data efficiently for location-based features. Finally, we gained hands-on experience with Supabase Realtime broadcasts. While we initially considered implementing custom WebSocket logic to listen for new matches, Supabase’s built-in real-time functionality allowed us to simplify our architecture, reduce complexity, and still deliver instant in-app notifications. This helped us appreciate the value of choosing the right tools and abstractions to move faster without sacrificing functionality.
What's next for hello
This is still a very early-stage product, but it has strong potential to become a meaningful way for people to connect with others more organically. To move toward that vision, the user interface would need a significant overhaul to improve clarity, usability, and overall experience, along with some simplification and optimization of the backend logic to ensure the system can scale reliably as usage grows. On the matching side, we’d also like to enhance our compatibility algorithm by incorporating vector embeddings and introducing a more personalized compatibility quiz with additional open-ended questions. This would allow us to better capture user intent, values, and preferences, resulting in more nuanced and meaningful matches.
Log in or sign up for Devpost to join the conversation.