Inspiration
We were inspired by ambitious people—especially women in travel, career, and self-growth—who have clear dreams but get stuck between inspiration and action. Goals like "Plan my dream trip," "Launch my side hustle," or "Save $1,000" feel big and vague. Without structure, motivation fades and progress stalls.
We wanted to build an app that turns any dream into a 30-day sprint with one small action per day. No overwhelm. No project management bloat. Just a simple system: pick a challenge, do today's task, build a streak, and celebrate progress.
Gabby Beckford's audience—travel-driven, career-focused, growth-minded people—embodies exactly who we built this for.
What it does
Challenge Library — Users pick a predefined 30-day challenge (Plan Your Dream Trip, Save $1,000, Launch Your Side Hustle, 30-Day Glow-Up) or create their own custom sprint.
Today View — One focused task per day. Users see their sprint title, day number, a motivational prompt, and a one-tap "Mark complete" button. Completing a task triggers confetti and updates the streak.
Sprint Dashboard — Progress bar, 30-day completion grid, streak counter, and achievements (7-day streak, 15-day streak, Sprint complete).
AI Micro-Actions — Pro users can create custom sprints with AI-generated daily tasks tailored to their title and goal.
Pro Subscription — Free users get one active sprint and limited challenges. Pro unlocks unlimited sprints, full challenge library, AI tasks, and a streak saver. Paywall appears when starting a second sprint, selecting a premium challenge, or enabling AI.
Guest & Sign-in — Anonymous sign-in to try the app; sign in or create an account to save progress across devices.
How we built it
We built DreamSprint as a React Native (Expo) app with a Supabase backend and RevenueCat for subscriptions.
Frontend: React Native + Expo for iOS and Android, TypeScript, React Navigation (native stack + bottom tabs). We use React Context for auth, subscription, and paywall state.
Backend: Supabase for authentication (email/password and anonymous), PostgreSQL for profiles, sprints, tasks, and challenge templates. Row Level Security ensures users only access their own data. A Supabase Edge Function calls OpenAI to generate 30 micro-actions for Pro custom sprints.
Monetization: RevenueCat SDK with entitlement pro. We integrated react-native-purchases and react-native-purchases-ui for paywall presentation. RevenueCat is configured with the Supabase user ID for cross-platform identity. Paywall triggers are placed at second sprint, premium challenge, and AI feature.
Architecture: AuthContext loads session and profile; SubscriptionContext fetches CustomerInfo and exposes isPro. PaywallContext controls modal visibility. Screens call sprintService for all Supabase operations.
Challenges we ran into
- Paywall modal layout — The Paywall modal was initially shown as a centered overlay. When triggered from the Challenges tab, it could appear cramped or cut off on smaller devices. We switched to a full-screen modal (
pageSheeton iOS) with ScrollView for a better experience. - Supabase email rate limit — During development, sign-up hit Supabase's default limit (e.g. 2 emails/hour). We improved error handling to show a friendly "Try again later" message when rate limited, and documented workarounds (wait, use guest mode, or configure custom SMTP).
- RevenueCat Paywall v2 — The "default" offering initially had no configured paywall in the RevenueCat dashboard, causing a warning. We documented that a v2 Paywall must be created and published in the dashboard, and built a custom entry screen that then calls
presentPaywallIfNeeded. - App load performance — Initial bundle was ~4.7s for 1000+ modules. We deferred RevenueCat configuration, lazy-loaded screens (Paywall, CreateSprint, Challenges, Register, Onboarding), and parallelized API calls to improve time-to-interactive.
Accomplishments that we're proud of
- Full MVP in scope — Auth, onboarding, challenge library, custom sprints, AI micro-actions (Pro), streak tracking, achievements, and RevenueCat subscription flow.
- Clean UX — Status indicators (On track / In progress), streak hero cards, 30-day progress grid, achievement badges, and guest sign-in prompts on Challenges and Dashboard.
- RevenueCat integration — Entitlement checks, paywall triggers at the right moments, and a clear separation between free and Pro features.
- Robust error handling — Rate limit messages, loading states, and non-blocking startup so the app feels responsive.
What we learned
- RevenueCat — How to configure the SDK with a custom user ID, check entitlements, and present the native paywall. The importance of publishing a Paywall v2 in the dashboard for the default offering.
- Supabase — Edge Functions for AI, RLS for multi-tenant data, and the impact of auth rate limits on development workflows.
- React Native performance — Lazy loading screens and heavy dependencies (e.g. Paywall, ConfettiCannon) significantly reduces initial bundle size and improves perceived load time.
What's next for DreamSprint
- Push notifications — Reminder at the user's preferred time to complete today's task.
- Streak saver UI — Pro users get one save per sprint; we'll add an explicit "Use streak saver" flow when they miss a day.
- Social sharing — Share sprint completion or achievements to social media.
- More challenge templates — Expand the library with community-suggested or seasonal challenges.
- A/B testing paywalls — Use RevenueCat experiments to optimize trial-to-paid conversion.
Built With
- expo.io
- javascript
- openai
- postgresql
- react
- revenuecat
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.