About the Project

We built GymBuddy to answer a simple question: “When and where should I work out today?” As Virginia Tech students, we realized that finding time to go to the gym is not always the hard part. The harder part is finding a time when the gym is not packed and when a workout actually fits around classes, meetings, and everything else happening during the day.

We wanted to build something that could take all of those factors into account instead of simply telling someone when the gym is usually less busy. GymBuddy combines Virginia Tech gym occupancy data, forecasts, gym hours, personal availability, and user preferences to find a workout window that actually works.

Since our first version, we also expanded GymBuddy beyond scheduling. We added a Food and Meal Planner so students can plan what they eat around their day as well. The meal planner allows users to choose Virginia Tech dining locations such as D2 at Dietrick Hall, West End at Cochrane Hall, and Squires Food Court, search available foods, track calories and macros, and add custom meals when something is not in the menu. This helped us move toward our larger idea of making GymBuddy a tool for planning the entire fitness part of a student's day, rather than just finding an empty gym.

What It Does

GymBuddy helps Virginia Tech students plan workouts at McComas Hall and War Memorial Hall using real-time information and personal scheduling.

A student can choose:

  • How long they want to work out, from 30 to 90 minutes
  • Which gym they prefer
  • How comfortable they are with crowded gyms
  • Times when they are unavailable
  • Their calendar through an .ics import or Google Calendar

GymBuddy then looks for an available workout window. It considers the user's schedule, gym operating hours, occupancy information, and predicted crowd levels before making a recommendation. The site can also provide an alternative when one is available. If there is no window that fits the requirements, GymBuddy tells the user instead of creating a recommendation that does not actually work.

We also added a food planning component. The Meal Planner allows users to select meals from Virginia Tech dining locations, search for specific foods, track calories and macronutrients, and manually enter food that is not already in the menu. The user's plate keeps a running total of calories, protein, carbohydrates, and fat.

This expansion came from the same problem that inspired our original idea: students have limited time. Instead of making someone separately figure out when to work out and what to eat, we wanted GymBuddy to help organize both parts of their day.

How We Built It

The main dashboard was built using Next.js, React, and TypeScript, with Python and FastAPI supporting the backend. We deployed the application through Vercel.

For the gym data pipeline, a Cloudflare Worker triggers a GitHub Actions collector every five minutes. The collector retrieves Virginia Tech's published occupancy information and sends the observations to Databricks. Databricks stores the historical observations and generates four-hour forecasts using recent averages and a capped trend.

The scheduling system then evaluates possible workout windows. It checks calendar conflicts, gym hours, forecast availability, crowd preferences, and workout length. This is important because we did not want the AI model itself deciding whether a time was actually available.

We use Gemini function calling to explain the recommendation after the scheduling system has already determined the valid options. This keeps the AI explanation grounded in information produced by our scheduling logic instead of allowing the language model to invent a workout time or crowd estimate.

We also built a clearly labeled historical demo using synthetic observations. This gives users a way to see longer-term patterns while we continue collecting real occupancy data, without pretending that synthetic observations are real measurements.

For the newer food feature, we extended the site with a dedicated Food / Meal Planner interface. Users can select dining locations, search the available menu, see their running nutrition totals, and add custom food entries with calories, protein, carbohydrates, and fat.

Challenges We Faced

One of our biggest challenges was getting the data pipeline to run automatically and reliably. Our original GitHub schedule did not produce scheduled runs during testing, so we moved the trigger to Cloudflare. We also encountered a runtime compatibility issue that had to be fixed before we could reliably collect data without someone having to manually run the program.

Calendar integration created another major challenge. A workout might look available at first, but recurring events, time zones, cancellations, overlapping commitments, and all-day events can change whether a student actually has enough time. The website now supports both .ics imports and Google Calendar, and it specifically communicates how calendar information is handled. Only busy times are sent to GymBuddy when planning, while event titles and edits are not sent to our backend.

We also had to think carefully about stale data. A recommendation based on old occupancy information can be misleading, so GymBuddy preserves timestamps, identifies cached information, and avoids using outdated forecasts to make recommendations.

Another challenge was deciding what the AI should and should not control. We initially wanted AI to be involved in the recommendation itself, but we realized that letting a language model make scheduling calculations could lead to unreliable results. Instead, our scheduling engine determines the actual valid windows, while Gemini is used to explain the reasoning. This gave us a better separation between deterministic calculations and generative AI.

Adding the meal planner introduced another set of considerations. Nutrition data needs to be presented clearly, and users may eat something that is not part of a dining hall's menu. That is why we included both menu searching and custom food entries.

Accomplishments We Are Proud Of

We are proud that we built a complete system connecting real-world data to a personalized recommendation.

Some of the parts we are most proud of are:

  • Building an automated pipeline that collects Virginia Tech gym occupancy data
  • Storing real observations in Databricks and using them to generate forecasts
  • Creating a scheduling engine that checks whether an entire workout actually fits into a student's schedule
  • Supporting both .ics calendar imports and Google Calendar
  • Keeping calendar information privacy-conscious by working with busy times instead of event details
  • Using Gemini to explain recommendations without giving the model control over the underlying scheduling calculations
  • Providing a fallback when an AI explanation or recommendation process cannot be completed
  • Clearly separating synthetic historical demonstrations from live data
  • Expanding GymBuddy into a food and meal planning tool
  • Allowing students to track calories, protein, carbohydrates, and fat while planning meals
  • Supporting Virginia Tech dining locations as well as custom food entries
  • Deploying a working application that can be accessed through the web rather than only running locally

The most important accomplishment to us is that GymBuddy is not just a chatbot giving generic fitness advice. It connects several different systems and uses actual constraints to produce something actionable.

What We Learned

One of our biggest lessons was that building an AI application is about much more than putting an AI model into a website.

We learned how important reliable data collection is. Even a good prediction is not useful if the underlying data is missing, stale, or incorrectly timestamped.

We also learned that AI and deterministic software have different strengths. A language model is good at explaining information in a natural way, but it should not necessarily be trusted to perform every calculation or make every decision. By having our scheduling engine determine the valid workout windows and Gemini explain those results, we were able to make the AI component more reliable.

Calendar integration taught us how many edge cases exist in something that seems simple. Time zones, recurring events, cancellations, and overlapping events all have to be considered when deciding whether someone really has enough time for a workout.

The meal planner also taught us that a useful product can grow from the original problem. We started with the question of when to work out, but realized that a student's fitness routine also involves what they eat. Adding meal planning gave us another way to reduce the amount of planning students have to do themselves.

Most importantly, we learned that building a forecast is not the same as proving that the forecast is accurate. Our current forecasting model is a starting point. As we collect more genuine occupancy observations, we can compare predictions against what actually happened and use that information to improve the model.

What's Next for GymBuddy

Our next priority is collecting more genuine occupancy history so that we can evaluate and improve our forecasts. We want to measure how closely our predictions match actual gym attendance and eventually incorporate recurring patterns such as different days of the week and times of day.

We also want to improve the food side of GymBuddy. As more nutrition data becomes available, we can make the meal planner more useful for students trying to organize their meals around their schedules and workouts.

We would also like to support additional Virginia Tech facilities and expand Google Calendar access beyond our current approved testers.

Long term, our goal is for GymBuddy to become a single place where a student can plan the fitness-related parts of their day: when to work out, where to go, how crowded it will be, and what to eat afterward.

At its core, GymBuddy is about reducing small decisions. Instead of a student having to check gym crowds, look at their calendar, figure out when they have enough free time, and separately search for food, GymBuddy brings those pieces together. Our goal is simple: less guesswork, less waiting, and an easier way to fit fitness into a busy college schedule.

Built With

Share this project:

Updates

Submission history