Inspiration

I've never been a gym person. I always preferred playing basketball or going for a run — the gym felt boring, confusing, and time-consuming. I never understood exercises, weights, or proper form, and the idea of needing a personal trainer just to get started felt like a huge barrier.

But then I realized something: if I wanted the physique I was aiming for, basketball and running alone weren't going to cut it. The gym was unavoidable. Still, I was blocked by the same mental hurdles — spending hours there, doing dozens of exercises, feeling lost.

So I started studying. As a software engineer with a passion for optimization problems, I approached fitness the same way I approach code: how can I get the best possible results with the minimum required effort? And I found the answer. Through research, YouTube deep-dives, courses, and months of real-world testing, I discovered that with the right principles — compound movements, progressive overload, proper periodization, and smart recovery — you can achieve remarkable results in under 45 minutes, just 3-4 times per week.

After 6 months of training 3x/week and another 6 months at 4x/week (always ~45 minutes), I wanted to replace my sad PDF workout sheet with something better. When this Serverpod hackathon came along, I saw the perfect opportunity: build the app I wish I had when I started — my own Flutter Butler for fitness.

What it does

MinimalFit is a minimalist fitness app for iOS that helps users build personalized workout plans optimized for maximum results with minimum time investment. It's your personal "Flutter Butler" for the gym — it serves, automates, and guides you through efficient training.

Core Features:

  • Smart Training Plans: Choose between 2, 3, 4, or 5 days per week — each plan follows a proven 3-phase periodization structure (Base → Build → Peak) across 12 weeks
  • Equipment-Based Exercise Substitution: Don't have a cable machine? The app automatically swaps exercises based on your available equipment
  • MinimalCoach AI Assistant: A premium AI coach powered by Google Gemini that knows your profile, your progress, and your workout history — ready to answer questions, give advice, and keep you motivated
  • Progress Tracking: Log your weights, track your lifting progression, and see your improvements over time
  • Gamification & Achievements: Unlock badges for consistency (login streaks), training milestones (total minutes), and phase completions — keeping you engaged and motivated
  • Educational Content: Embedded video guides explaining proper exercise form and training principles

The Philosophy: You don't need 2-3 hours in the gym. With the right approach, 45 minutes of focused training is enough to transform your body. MinimalFit is built on this principle.

How I built it

Tech Stack:

  • Frontend: Flutter (iOS) with Riverpod for state management
  • Backend: Serverpod deployed on Serverpod Cloud
  • Local Storage: Hive for local data persistence + SharedPreferences for simple flags
  • Subscriptions: RevenueCat for in-app purchases
  • AI: Google Gemini API for the MinimalCoach assistant
  • OTA Updates: Shorebird for over-the-air updates

Architecture Highlights:

The app follows a feature-first architecture where each module (onboarding, workout, chat, achievements, subscription) is self-contained with its own logic, models, and screens.

Serverpod handles all server-side operations:

  • Anonymous authentication with device fingerprint hashing
  • User preferences sync between local storage and server
  • Workout plan delivery with dynamic exercise substitution based on user equipment
  • Progress tracking with timestamp-based conflict resolution for data sync
  • MinimalCoach context building — the AI endpoint aggregates user profile, current workout, and stats to provide personalized responses

Challenges I ran into

The biggest challenge wasn't technical — it was the Apple App Store review process. I've been "fighting" with Apple's review team, and despite having a production-ready app, MinimalFit won't be available on the App Store by January 30th. It will be available exclusively on TestFlight as a public beta, where users can test all features including premium subscriptions (which work in sandbox mode, so you can test everything for free).

On the technical side, designing the exercise substitution system required careful thought. Users have different equipment available (gym vs. home, cable machines vs. dumbbells), so the server needs to intelligently swap exercises while maintaining the workout's effectiveness. This required building a substitution graph where each exercise has ranked alternatives based on equipment requirements.

Another challenge was the MinimalCoach AI context. To make the AI actually useful, it needs to know about the user — their goals, current phase, today's workout, recent progress, and achievements. Building this context aggregation on the server side while keeping response times fast required careful optimization.

Accomplishments that I'm proud of

  • Built a complete, production-ready app in ~7 weeks while being in university exam session — both December and January were filled with exams, and I actually have my last exam of the session on January 30th (the hackathon deadline!). All documented on my X profile (@Sabatin02)
  • First time using Serverpod — and it was a revelation. The developer experience is incredible. My Xcode builds went from ~400 seconds (with Firebase) to ~35 seconds. That alone made development so much more enjoyable
  • Created something I actually use — this isn't a hackathon project that gets abandoned. I'm using MinimalFit for my own training, and I plan to keep developing it
  • Clean, minimalist design — a warm cream background with green accents, just 3 text styles, no clutter. The UI reflects the philosophy: minimal but effective

What I learned

Serverpod is a game-changer. Coming from Firebase, the difference is night and day. Full control over my backend, Dart everywhere (no context switching), blazing fast builds, and significantly cheaper. I'm confident I'll use Serverpod for all my future projects that need a backend. The framework keeps improving, and I'm excited to see where it goes.

Fitness app development is harder than it looks. The domain knowledge required — periodization, progressive overload, exercise biomechanics, muscle group targeting — meant I had to combine my software skills with months of fitness research. But that's what made it rewarding.

What's next for MinimalFit

I have a clear roadmap that will significantly evolve the app in the coming weeks:

  • Proprietary Exercise Videos: Replace the current YouTube embeds (used with authorization) with professionally recorded videos featuring fitness experts, providing a more seamless in-app experience
  • Enhanced Workout Experience: Improve the active workout flow with better timers, rest tracking, and real-time guidance
  • Expanded Training Options: More workout plans, greater customization of training splits, and the ability to modify individual sessions
  • MinimalCoach Evolution: Users will be able to modify their training plan directly through the chat with the Coach
  • Deeper Gamification: More achievements, challenges, streaks rewards, and social features to keep users engaged long-term

I hope MinimalFit resonates especially with people who want to start getting the most out of their workouts without spending 2-3 hours at the gym. Sometimes, less really is more.

If i can help you: X: @Sabatin02, Email: mario@sharpingknives.com

Thanks everyone for the opportunity, it was fun. Mario Gabriele Sabbatini.


Note on Testing: The app is available on TestFlight as a public beta. The TestFlight version has been frozen as of January 30th, to comply with the hackathon deadline — even though i use Shorebird for over-the-air updates, no changes will be pushed to the judging build. A dedicated serverpod-devpost-freeze branch in the GitHub repository preserves this exact state. Another thing is that i did this entire app as a solo dev, but a friend of mine, "fres-sudo," appears among the contributors on GitHub, and he initially wanted to participate. He made a couple of commits but then dropped out due to personal commitments. His contribution to the project is less than 10 lines of code (clearly visible on github), which is why I'm participating as an "alone" and not as a team.

Built With

  • dart
  • flutter
  • revenuecat
  • serverpod
  • shorebird
+ 13 more
Share this project:

Updates