Inspiration Sleeperr was born out of a very relatable frustration: the inadequacy of traditional alarms. Like many of my Gen Z peers, I've struggled not just with waking up, but with the critical step of getting out of bed and starting the day effectively. I personally missed a crucial job interview because my alarm simply wasn't enough to break through the morning inertia. This experience highlighted a gap: alarms needed to be more than just a sound; they needed to be a true motivator. We envisioned a solution that leveraged social connection and gamification to ensure users didn't just wake up, but truly won their mornings.

What it does Sleeperr is an innovative alarm clock app that transforms the morning routine into a fun, social, and highly effective experience:

Personalized Wake-Up Messages: Users can send and receive custom voice messages from friends and community members, often enhanced with fun soundboard effects, creating a unique and personal wake-up call.

Social Accountability: Users can see their friends' wake-up streaks, total successful wake-ups, and average snoozes, fostering friendly competition and motivation.

Daily Goal Management: A dynamic Journal page allows users to manage and check off their goals for today, and plan out their goals for tomorrow, providing a central hub for daily productivity.

Nuanced Performance Tracking: Alarms are categorized as 'On-Time', 'Late', or 'Missed' based on how quickly they're dismissed and snooze counts, giving users a more accurate reflection of their morning habits.

Reliable Alarms: Designed to ring loudly and reliably even when the app is closed or the phone is in sleep mode, and to stop instantly when dismissed.

How we built it Sleeperr is built as a cross-platform mobile application using Expo React Native, allowing us to target both iOS and Android. Our backend is powered by Supabase, which handles user authentication, stores all alarm data, user profiles, wake-up session details, and user-recorded audio.

Key technologies and tools used include:

expo-notifications: For scheduling and triggering system-level alarms and notifications.

expo-av: For handling all audio functionalities, including recording user messages and playing alarm sounds.

eas build: Utilized for creating standalone development builds, crucial for testing native features outside of the Expo Go client.

React Hooks (useRef, useEffect, useCallback): Extensively used for robust state management and optimizing component behavior, especially for complex audio and data synchronization.

Our development process was highly iterative, driven by continuous testing and detailed console logging to diagnose and resolve complex issues.

Challenges we ran into Building Sleeperr presented several significant and deeply challenging hurdles:

Alarm Persistence Across Sessions: The most stubborn bug was alarms set by a logged-out user continuing to ring for a new user. This required aggressive, multi-layered notification cancellation strategies that often contradicted initial console logs.

Unstoppable Alarms: Alarms would sometimes continue playing even after the stop/snooze button was pressed, or after logging out. This led to a deep dive into expo-av's audio session management and platform interactions.

Corrupted Recorded Messages: User-recorded .m4a files on iOS were consistently corrupted during recording, making them unplayable. This led to extensive debugging of expo-av's recording options and ultimately a decision to explore server-side transcoding for universal .mp3 compatibility.

Development Environment Quirks: We encountered specific network and permission issues within the Bolt WebContainer environment that interfered with direct streaming from Supabase Storage and global npm installs.

Dependency Compatibility: Keeping various Expo and React Native packages aligned with the SDK version caused build failures that required careful resolution.

Race Conditions & Timing: Ensuring asynchronous operations (like state updates and audio playback) happened in the correct sequence without unexpected null references was a recurring challenge.

Accomplishments that we're proud of Despite the challenges, we're incredibly proud of:

Conquering Critical Bugs: Successfully resolving the most complex and frustrating issues like alarm persistence across user sessions and alarms not stopping. This was a major breakthrough and ensures a reliable core product.

Functional Social Wake-Up: Implementing the personalized voice wake-up messages, a core unique selling proposition, despite the audio corruption challenges.

Robust Audio System: Developing a sophisticated audio playback system that handles sequential playback of recorded messages and chosen alarm sounds, with proper snooze logic and maximum volume.

Dynamic Journal: Building a user-friendly Journal page that intelligently manages goals for today and tomorrow, with intuitive date navigation.

Nuanced User Stats: Creating a more meaningful way to track morning habits with 'On-Time', 'Late', and 'Missed' statuses.

Cross-Platform Reliability: Navigating the complexities of building a reliable alarm app for both iOS and Android.

What we learned This project was a masterclass in debugging and problem-solving. We learned:

The paramount importance of aggressive, detailed console logging for diagnosing complex asynchronous and native-level issues.

The nuances and sometimes unpredictable behaviors of expo-notifications and expo-av when interacting with underlying mobile operating systems.

The critical distinction between Expo Go behavior and standalone app behavior for native features.

The necessity of stable object references (useRef) in React for managing external, mutable resources like audio players.

The value of iterative problem-solving and perseverance when facing stubborn bugs.

The architectural considerations for backend support (like server-side audio transcoding) for complex client-side features.

The power of community support (like the Supabase Discord) for external validation and insights.

What's next for Sleeperr We're excited about Sleeperr's future, especially our plans to introduce Tournaments!

Our next steps involve:

Launching Local and Nationwide Tournaments where users are rewarded for just participating and for winning.

These tournaments will serve as our primary monetization strategy, allowing restaurants, stores, and other businesses to market directly to our engaged user base by sponsoring challenges.

Users will also be able to use tokens (earned weekly) to enter more exclusive tournaments.

We're committed to providing free prizes, not just discounts, even if it means taking a financial hit, to ensure the best possible user experience and engagement.

We plan aggressive marketing of this product, leveraging our strong community support, particularly from platforms like Reddit (where we have already had dozens of sign ups for the app: look at links provided), to drive massive adoption.

Built With

Share this project:

Updates