Inspiration

Most people who start lifting quit for the same reasons. They don't know what to do, the machine they wanted is taken, they can't tell if they're improving, and they never find time to go. We wanted one app that fixes all four, with every set saved in the cloud so it follows you to any device.

What it does

CumulusFit is a strength-training app for beginner and intermediate lifters.

  • Create with AI. Enter your goal, experience, equipment, time and focus, and Gemini builds a routine with sets, reps, rest and a coaching note for each exercise.
  • Swap when the gym is busy. Say what's wrong ("the leg press is taken") and Gemini picks a replacement that trains the same muscles with the same movement pattern.
  • Train and log. A workout mode with weight and reps per set, a rest timer, and resume-after-refresh. Sets you finish with a bad connection stay on your phone and save when you're back online.
  • See progress. Every exercise shows last time's numbers and a next-session target ("155 lb × 6, you hit 8 reps on every set, so add 5 lb"). There's also a strength chart per exercise and your weekly pounds lifted.
  • Plan your week. Import your calendar (.ics from Google, Apple or Outlook). Gemini picks gym times around your classes and work, then you export them back to your calendar.
  • Build your own. A 133-exercise catalog with autocomplete, browsable by split or muscle, plus any custom exercise.
  • No sign-up to start. Everyone gets an anonymous account instantly. Add an email later and your workouts sync across devices. It also installs to your home screen like an app.

How it fits "In the Clouds"

Your training lives in the cloud: routines, every logged set and your gym schedule sync through Supabase, and Gemini runs server-side. The design is soft sky blues and clouds, and the weekly stats count each pound lifted as a foot climbed, so 9,100 lb puts you at altocumulus height.

How we built it

  • Frontend: Next.js 16 and React 19 with TypeScript and Tailwind CSS.
  • Backend: Next.js API routes.
  • AI: Google Gemini (gemini-3.5-flash) through the @google/genai SDK, with response schemas so every answer is structured JSON the app can check.
  • Database and accounts: Supabase Postgres with row-level security, so each user can only reach their own data, and anonymous sign-in that upgrades to email and password.
  • Calendars: files are parsed in the browser with ical.js, so only busy times leave the device, never event names.

Challenges we ran into

  • Gemini under hackathon load. The model in our first draft had been retired, and its replacement returned "high demand" errors during testing. We added an automatic retry on gemini-3.5-flash-lite, plus a built-in planner so scheduling still works if Gemini is down.
  • Trusting AI output. Gemini sometimes suggested gym times that overlapped classes. The server now checks every suggestion against busy times, gym hours and a 15-minute travel buffer before showing it.
  • Real calendar files. Weekly recurring classes, moved single classes and time zones all had to come out right.
  • Saving workouts on bad gym Wi-Fi without losing sets or saving them twice.

Accomplishments that we're proud of

  • Gemini does three different jobs (building routines, swapping exercises, planning schedules), and every one of them is checked before it reaches the user.
  • We tested that one account can't read or change another's data.
  • Privacy by design: calendar event names never leave your device.
  • It works end to end on a phone, from first visit to logged workout, with no sign-up.

What we learned

  • Structured output and validation matter more than prompt wording for AI features people rely on.
  • Designing for failure (rate limits, dropped connections, double taps) is most of the work in a real app.
  • Row-level security plus anonymous auth lets you skip a login screen without giving up data safety.

What's next for CumulusFit

  • Kilogram support.
  • A verified Google Calendar connection.
  • An AI recap after each workout.
  • Snap a photo of free equipment and let Gemini pick the swap.
  • Full offline mode.

Built With

Share this project:

Updates

Submission history