Inspiration
I kept downloading goal-tracking apps that felt like spreadsheets with a gradient. Cold. Transactional. "Log your habit. See your streak. Repeat." None of them made me actually want to open the app.
I wanted something that felt like a coach in my pocket — one that knows it's raining outside and suggests I journal instead of run, one that celebrates my wins with confetti instead of a checkbox, and one that reminds me to call my mom before it's been too long.
Momentum was born from a simple question: What if a goal tracker actually understood your life?
What it does
Momentum is a premium iOS app that weaves together six features into one cohesive experience:
- Weather-Aware Suggestions — Real-time weather (or a manual "vibe" picker for privacy) shapes daily action recommendations. Rainy day? Skip the hike, try journaling.
- Vision Board Goals — A Pinterest-style goal system with magic templates, progress rings, milestone celebrations, and affirmations that actually stick.
- Daily Challenges — Weather and goal-driven challenges with a journal-like completion flow (notes, emotion, photos, voice memos). Not just a checkmark — a reflection.
- Relationship Tracker — Never lose touch. Track your inner circle, mentors, and friends with health indicators, quick-log interactions, and "neglected" alerts.
- Win Journaling — Capture wins of all sizes (tiny to massive) with emotion tracking. Because you do more cool stuff than you remember.
- Live Community — See how many people are building momentum alongside you. Share wins anonymously or by name via CloudKit. You're not alone.
Momentum+ (powered by RevenueCat) unlocks unlimited goals, unlimited relationships, community access, shareable accomplishment cards, and unlimited affirmation refreshes.
How we built it
I built this entirely solo — 100% SwiftUI + SwiftData, no UIKit, no Core Data. The entire app is native iOS 17+ with zero third-party UI dependencies.
Tech stack:
- SwiftUI — Every screen, animation, and component
- SwiftData — All local persistence (goals, wins, challenges, relationships, interactions)
- RevenueCat SDK v5 — Subscription management, paywall presentation, entitlement checks
- WeatherKit — Real-time weather data for personalized suggestions
- CloudKit (Public Database) — Anonymous community stats and shared wins
- AVFoundation — Voice memo recording in challenge completions
- PhotosUI — Photo capture for challenge journals
RevenueCat is the backbone of the business model. I used Purchases.configure() at app launch, a shared PurchaseService singleton as an @EnvironmentObject, and gated features with a simple purchaseService.isPlus check. The FreeTierLimits struct defines the free/paid boundary (3 goals, 5 relationships, 3 daily affirmation refreshes). RevenueCat's CustomerInfo listener keeps entitlements in sync across the entire app without me writing a single line of receipt validation.
I also built a complete custom design system — MomentumColors, MomentumTypography, Spacing, CornerRadius, and reusable components like MomentumButton, ToastView, CelebrationView with confetti, and ShareableCardView with 5 themes for Instagram Story-sized exports.
Challenges we ran into
Making features feel connected, not siloed. The hardest part wasn't building individual features — it was making weather suggestions flow into challenges, challenges auto-create wins, wins feed into the community, and relationships trigger gamification badges. Every feature had to talk to every other feature without spaghetti code.
Privacy-first weather. I didn't want to force location permissions for a goal tracker. Building the 3-mode weather system (Auto/Manual Vibe/Off) with a privacy-first default took real design thinking. The manual "vibe picker" turned out to be more fun than real weather anyway.
SwiftData growing pains. Lightweight migrations, relationship cycles between models, and @Query filter predicates that don't support everything you'd expect. I hit walls and had to restructure data models more than once.
Paywall placement that doesn't feel hostile. Finding the right free/paid boundary was tricky. Too aggressive and the app feels like a demo. Too generous and there's no reason to upgrade. Landing on 3 goals + 5 relationships + community access as the upgrade hook felt right.
Accomplishments that we're proud of
- The entire weather-to-challenge-to-win-to-community pipeline works end to end
- A complete custom design system that makes every screen feel cohesive
- Privacy-first weather with 3 modes (Auto/Manual Vibe/Off) — no forced location tracking
- RevenueCat integration took about 2 hours total for the entire subscription layer
- 5 shareable card themes that render to Instagram Story-sized images
- Live community stats via CloudKit public database with zero auth required
- Built the whole thing solo in under two weeks
What we learned
RevenueCat makes subscriptions almost trivial. Configure, check entitlement, show paywall. That's it. No receipt validation, no server-side logic, no edge cases around renewals or cancellations. For a solo dev on a hackathon deadline, this was the difference between shipping and not shipping.
Design systems pay for themselves immediately. Investing time upfront in MomentumColors, Spacing, and reusable components meant every new screen took minutes instead of hours. Consistency came free.
SwiftData is ready for production — but you need to plan your model graph carefully upfront. Retroactive changes are painful.
Users don't want more features — they want fewer, better-connected ones. The magic of Momentum isn't any single feature. It's that completing a challenge automatically logs a win, which feeds the community, which unlocks a badge, which keeps you coming back.
What's next for Momentum
- Widgets — Lock screen and home screen widgets showing streak, next action, and relationship reminders
- Apple Watch — Quick win logging and challenge completion from the wrist
- AI Affirmations — Personalized affirmations generated from goal history and win patterns
- Deeper Analytics — Weekly/monthly momentum scores with trend visualization
- Social Challenges — Challenge friends directly, compete on streaks
- Android — Bringing Momentum cross-platform with RevenueCat handling entitlements on both sides
Built With
- cloudkit
- revenuecat
- storekit-2
- swift
- swiftdata
- swiftui
- weatherkit
Log in or sign up for Devpost to join the conversation.