Inspiration
In a world that often demands we keep it together, we wanted to build something that encourages falling apart (safely). We realized that while there are apps for finding restrooms or coffee shops, there was no map for the intensely human need for emotional release. We built CryMaps to normalize crying as a healthy coping mechanism. We wanted to create a supportive, digital companion that helps people find safe, quiet spaces to let their feelings out, reminding them that they aren't alone in their emotions.
What it does
CryMaps is a community-driven mobile application that tracks "cry spots." Users can explore an interactive map populated with markers indicating where others have found a safe place to cry. They can drop a pin at their current location to mark a new spot, adding a brief description of their experience or the vibe of the location. Users' personalized accounts allow them to track their own emotional journey.
How we built it
We built CryMaps as a full-stack mobile application using React Native and Expo.
Frontend: We used Expo Router for a modern, file-based navigation structure, implementing a native Tab Bar layout for seamless switching between the Map, Feed, and Profile. We styled the app with a custom design system (using StyleSheet and centralized theme constants) featuring a calming blue color palette and the Zain typeface for a friendly, approachable feel.
Map Integration: We utilized react-native-maps to render the interactive map and custom marker views.
Backend: We used Supabase (PostgreSQL) for our database and authentication. We implemented custom SQL Triggers to automatically generate public user profiles upon signup, ensuring data consistency.
Security: We implemented strict Row Level Security (RLS) policies to ensure users can only modify their own data while maintaining read access for the community.
Challenges we ran into
Database Relations: We ran into Foreign Key constraint violations when users tried to post markers before their public profiles existed. We solved this by writing a PL/PGSQL trigger in the database to automatically create a public.user row whenever a new account was created in auth.users.
Navigation Architecture: We initially had a "one-file" navigation state, but we want to use Expo Router's nested (tabs) layout later. This caused some routing errors initially which required us to restructure our entire file system and implement proper redirects.
Accomplishments that we're proud of
Styling: We are really proud of the custom styling. The curated and calming palette makes the app feel like a genuine mental health tool rather than just a utility.
Seamless Auth Flow: We built a professional-grade authentication flow with separate Login/Signup screens, error handling, and persistent sessions using AsyncStorage so users stay logged in.
What we learned
We learned how to design a relational database schema, specifically how to establish Foreign Key connections between our user authentication and public data tables. We also learned how to write and deploy Database Triggers. Additionally, we adopted Git best practices, including using feature branches to work on separate parts of the app simultaneously and resolving merge conflicts safely.
What's next for CryMaps
- The ability to react to other users' cry spots (e.g., "sending a hug")
- The ability add friends, and have a "Friends" system so users can choose to share their vulnerable moments with a trusted circle rather than with everyone in the whole world
- Allowing users to add pictures or attachments to their posts
- Continuing to refine the UI
Log in or sign up for Devpost to join the conversation.