breathr
Inspiration
We kept hearing parents tell their children: “If you need any help, call me.”
Which is great, except calling someone is a very passive way of ensuring safety. It assumes that when something goes wrong, you’ll realise it, unlock your phone, open the app, and make the call. Panic and overwhelm tends to make that… optimistic.
As a parent, wouldn’t you want to be guaranteed that your child is alive and breathing at all times?
Instead of finding out after something happens, we decided to explore a more active, preventive approach to safety, one that checks in constantly and alerts when there's any chance of danger.
What it does
breathr is an active proof-of-life app that assumes the worst and forces you to prove otherwise.
Once a breathing session starts:
- Every 4 seconds, the user receives a notification reminding them to breathe
- The user must open the app and click the “I Breathe” button
- If they fail to confirm at least once every 10 seconds, the app assumes something is wrong
At that point, escalation begins:
- The user’s guardian is notified
- The guardian receives Telegram messages every second saying the user is dying
- A 1-minute countdown starts
- If the user still does not respond:
- The guardian is told the user has probably died
- The user’s app displays “You Died!”
- Their death count increases
- They can start a new session and try again
The core idea is simple: if you are alive, conscious, and breathing, clicking a button should not be difficult.
Why breathe alone?
At some point we realised that breathing alone is boring, and suffering alone is sad.
So we added:
- A friends system
- A loserboard ranking friends by how many times they have “died”
- A "Grieve" feature so your friends know that you're mourning their death(s)
How we built it
This was our first full-stack project.
Our stack:
- Frontend: React Native (Expo)
- Backend: 1. Flask for messaging and API calls, 2. Node.js for user and social aspect
- Database: PostgreSQL (via Supabase)
The React frontend handles the breathing UI, timers, and other frontend stuff. The Node.js backend enforces the actual logic of the app, like the death counts and the social media aspect of the application. Supabase stores users, guardians, friends, and leaderboard data as PostgreSQL. A separate flask service handles the high-frequency Telegram messages, because it was the first server-handling framework we discovered.
Challenges we ran into
We are freshmen, and this semester is the first time we have ever taken a computing module. At the time of building breathr, the most advanced thing we had officially learned was how to declare variables.
Some highlights:
- A lot of network server issues
- Learning how to use git (we accidentally force pushed 5 times)
- We didn't know about the existence of .gitignore so we were also pushing the API keys for the first few commits
- Figuring out the concept of public and private tables in Supabase
- Understanding how to use components in React
- Tried to troubleshoot bugs by printing the logs but even the logs didn't appear
Accomplishments we’re proud of
- Managing to create APIs for the first time
- Creating serves on 2 different frameworks (Node.js and Flask)
- Automated a Telegram bot
- Creating (in our opinion) a very pretty UI using React Native
- Implementing a social mediaesque feature
- Debugging and solving problems together as a team by sharing ideas
- Having a lot of fun building
Accomplishments we’re not very proud of
- exposing our keys
- losing sleep and hair
What we learned
- Full-stack development is mostly debugging and ensuring edge cases are managed
- Creating console logs helps to figure out where the issue might be occurring
- AI is very helpful in the debugging process and to find gaps in our knowledge
- How we could, in the future, split tasks more efficiently in the team
What’s next for breathr
- Uploading selfies or breathing into the mic as proof of life
- Calling, instead of texting, emergency contacts
- Uploading profile pictures from the user's gallery-
- And for our own learning, add AI somewhere
Log in or sign up for Devpost to join the conversation.