![[IMG-Automate Your Gains-20250713163417973.png|500]]
---
The last five posts( [[Automate Your Gains, Part 1 - Plan a Custom Workout App with Google Sheets|1]], [[Automate Your Gains, Part 2 - Build a Workout App UI with Apps Script|2]], [[Automate Your Gains, Part 3 - Save Form Data to Google Sheets with Apps Script|3]], [[Automate Your Gains, Part 4 - Read & Display Data from Google Sheets in Your App|4]], [[Automate Your Gains, Part 5 - Code Smart Automation for Your Fitness App|5]]) on the Automate Your Gains series have broken down how to build a web app with Apps Script and Google Sheets. It started with a common problem, the frustration of tracking workouts in on mobile version of Google Sheets, then step-by-step a custom, smart web application was built to solve this problem. The project involved designing a database in Google Sheets, building a UI with HTML and Apps Script, and implementing both write and read data paths. The final piece to the whole project was creating an intelligent engine to automate progressive overload.
This final post will focus on reflecting on this project, and discussing the key discoveries and insights gained, weigh the pros and cons of the architecture, and explore where the this project can go next.
</br>
---
### **Section 1: Discoveries and Key Insights**
Building a complete application within the Google Workspace ecosystem provides some valuable takeaways.
**Google Sheets can be robust platform** for building useful, single-user web applications without the complexity of external hosting or traditional database setups.
The `google.script.run` API helps to simplify client-server communication.
Managing relational data (like linking `WorkoutTemplates` to the `ExerciseLibrary`) entirely through Google Sheets can become challenging as the app's complexity grows. This requires careful sheet design and thorough scripting logic to maintain data integrity.
</br>
---
### **Section 2: Pros and Cons of This Architecture**
The Sheets-and-Script approach has distinct advantages and disadvantages.
#### **Pros**
- **Highly Personalized:** The app is completely tailored to individual exercise routines and progression methods.
- **Automated Progressive Overload:** It simplifies the process of making workouts continuously challenging and removes the guesswork.
- **Cost-Effective:** It utilizes the free tools available in every standard Google account.
- **No External Hosting:** The entire application is deployed and hosted directly as a Google Apps Script web app.
- **Transparent Backend:** All data is directly viewable, modifiable, and easy to back up in the Google Sheet.
#### **Cons**
- **Single-User Design:** The architecture is not built for multiple users to share and modify data simultaneously.
- **Google Ecosystem Lock-in:** The entire application is reliant on Google's services.
- **Performance Limitations:** With a very large `WorkoutLog` sheet (tens of thousands of rows), performance may slow down, and Google Apps Script has execution time limits and API quotas.
- **Requires User Setup:** The user must perform the initial configuration of their exercises, templates, and progression models in the Google Sheet.
</br>
---
### **Section 3: Future Improvements and Refinements**
This project provides a solid foundation that you can expand upon. Here are several ideas for future development:
- **Visual Analytics:** Add charts and graphs to visualize progress over time for specific exercises.
- **In-App Management:** Build a UI (like the `ExerciseLibrary.html` page included in the repository) that allows users to manage their workout templates and progression models directly within the web app, reducing the need to edit the Google Sheet directly.
- **Support for Different Set Types:** Expand the logging to include warm-up sets, drop sets, or other complex training techniques.
- **Enhanced Error Handling:** Implement more sophisticated user feedback and error handling for a smoother experience.
</br>
---
### **Section 4: The Migration Path - The Levels.fyi Dilemma**
In Part 1, we were inspired by how Levels.fyi scaled to millions of users with Google Sheets as a backend. They serve as a powerful example of "avoiding premature optimization." However, their story also includes a critical lesson: knowing when to migrate.
The "Cons" listed above are the triggers for this migration. You should consider moving to a more traditional backend (like Firebase, Supabase, or a standard SQL database) when:
- You want to support **multiple users**.
- Your dataset grows so large that you hit **performance bottlenecks** or Google's API rate limits.
- You need to perform **complex data analysis** that would be better handled by SQL queries.
- You want to build a public-facing product where direct access to the database is not feasible.
This project is a perfect MVP (Minimum Viable Product). It validates an idea and provides immense value to a single user. If it grows beyond that scope, you can follow in the footsteps of Levels.fyi and migrate the backend while keeping the front-end logic you've already built.
</br>
### **Final Thoughts**
Thank you for following along with this series. We successfully took a common personal data problem and built a powerful, customized, and intelligent solution using accessible tools. You now have a fully functional workout logger that not only tracks your progress but actively helps you improve.
Feel free to fork the project on GitHub, customize the progression models to fit your own training philosophy, and continue building. Happy automating!
</br>
---
## Resources
</br>
### Github and Demo
You can find the completed code for the entire project, including all features and documentation, on GitHub.
- **[View Project on GitHub](https://github.com/drusho/workout-logger-google-apps-script)**
- **[Try the Live Web App Demo](https://script.google.com/macros/s/AKfycbwiQyKHvKap9oiKqSpAhFdbq9xH36wOZCr0a6QRZEgSL0ErCWXhaUoVAIPcqD1zM_2I/exec)**
</br>
### Related Articles
Check out the other articles from **Automate Your Gains** series:
%% DATAVIEW_PUBLISH_CONVERT start
```dataview
LIST WITHOUT ID
"**" + file.link + "** </br>" + description + "</br></br>"
FROM "07 - Publish - Obsidian"
WHERE
publish = true
AND file.name != "About Me"
AND file.name != "Home"
AND file.name != "Series - Automate Your Gains"
AND series = "Automate Your Gains"
SORT date DESC
```
%%
- **[[07 - Publish - Obsidian/Articles/A Deep Dive into the 'Automate Your Gains' Workout App UI & Features.md|A Deep Dive into the 'Automate Your Gains' Workout App UI & Features]]** </br>Take a tour of a custom workout logger built with Google Apps Script. See its mobile-friendly UI, dynamic workout planning, "last workout recall," and automated progression features in action.</br></br>
- **[[07 - Publish - Obsidian/Articles/Automate Your Gains, Part 1 - Plan a Custom Workout App with Google Sheets.md|Automate Your Gains, Part 1 - Plan a Custom Workout App with Google Sheets]]** </br>A fitness app project that shows how to plan a smart workout logger using Google Apps Script and Google Sheets to automate your training.</br></br>
- **[[07 - Publish - Obsidian/Articles/Automate Your Gains, Part 2 - Build a Workout App UI with Apps Script.md|Automate Your Gains, Part 2 - Build a Workout App UI with Apps Script]]** </br>Turn a Google Sheet into a database and build a mobile-friendly UI with Google Apps Script. A step-by-step guide to creating the foundation for the workout logger.</br></br>
- **[[07 - Publish - Obsidian/Articles/Automate Your Gains, Part 3 - Save Form Data to Google Sheets with Apps Script.md|Automate Your Gains, Part 3 - Save Form Data to Google Sheets with Apps Script]]** </br>Connect front-end to your back-end. This guide covers using google.script.run to capture HTML form data and save it directly to Google Sheets, creating a complete "write path."</br></br>
- **[[07 - Publish - Obsidian/Articles/Automate Your Gains, Part 4 - Read & Display Data from Google Sheets in Your App.md|Automate Your Gains, Part 4 - Read & Display Data from Google Sheets in Your App]]** </br>Close the data loop for the workout app. Fetch, filter, and sort data from a Google Sheet backend and display it dynamically into web app's UI for a richer user experience.</br></br>
- **[[07 - Publish - Obsidian/Articles/Automate Your Gains, Part 5 - Code Smart Automation for Your Fitness App.md|Automate Your Gains, Part 5 - Code Smart Automation for Your Fitness App]]** </br>Elevate the app from a simple logger to a smart training partner. Code automation logic that analyzes user performance (RPE) to recommend workout progressions.</br></br>
- **[[07 - Publish - Obsidian/Articles/Automate Your Gains, Part 6 - When to Scale Your Google Apps Script Project.md|Automate Your Gains, Part 6 - When to Scale Your Google Apps Script Project]]** </br>A complete review of the workout app project. Covers the pros and cons of using Google Sheets as a database, ideas for future features, and how to know when it's time to migrate.</br></br>
- **[[07 - Publish - Obsidian/Posts/Series/Automate Your Gains.md|Automate Your Gains]]** </br>Articles related to creating a workout logger web application using Google Sheets and Apps Script</br></br>
%% DATAVIEW_PUBLISH_CONVERT end %%