A powerful, self-hosted workout tracking application for home gym enthusiasts
CasettaFit is a comprehensive fitness tracking platform that helps you plan workouts, log exercises, track progress, and achieve your strength training goals. Built with Flask and designed for easy self-hosting on your own server.
- Custom Programs: Create multi-week training programs with progressive overload
- Workout Days: Organize exercises by day with series and supersets
- Exercise Library: Comprehensive exercise database with custom additions
- Smart Suggestions: Auto-populate weights based on previous performance
- Live Workout Mode: Execute workouts with real-time tracking
- Mobile-Optimized: Responsive design works great on phones and tablets
- Previous Set History: See your last performance for each exercise
- RPE Tracking: Log Rate of Perceived Exertion for each set
- Rest Timers: Automatic rest period countdown between sets
- Skip Rest Option: Toggle to skip rest timers when needed
- Workout History: Complete log of all past workouts
- Exercise Analytics: Track progress over time for each exercise
- Goal Setting: Set and monitor fitness goals
- Visual Reports: Charts and graphs showing your progress
- Multiple Gyms: Track different gym locations (home, commercial, etc.)
- Equipment Tracking: Manage available equipment at each location
- Exercise-Gym Mapping: Link exercises to specific gym equipment
- Admin Dashboard: Manage multiple users
- User Profiles: Personal settings and preferences
- Role-Based Access: Admin and regular user roles
- Self-Hosted: Keep your fitness data private on your own server
- SSL/HTTPS Support: Secure connections with Let's Encrypt or custom certificates
- Production Ready: Gunicorn + NGINX setup included
- Systemd Service: Auto-start on boot, easy management
The main dashboard gives you an overview of your training schedule and upcoming workouts.
|
Dashboard - Mobile View |
Workout Calendar - Desktop |
Create and organize multi-week training programs with custom exercises and progression.
Log your workouts with an intuitive interface optimized for both desktop and mobile use.
|
Live Workout - Desktop View |
Live Workout - Mobile View |
Browse and manage your exercise library with categories and custom additions.
|
Exercise Library |
Equipment Management |
Manage multiple gym locations and review your complete workout history.
|
Gym Setup & Management |
Workout History & Analytics |
Plan and schedule your workouts with the mobile-friendly calendar interface.
- Clone the repository
git clone https://github.com/YOUR_USERNAME/CasettaFit.git /opt/CasettaFit
cd /opt/CasettaFit/app- Run the installation script
sudo bash setup.shThis will:
- Install Python dependencies
- Set up the database
- Create a systemd service
- Configure NGINX
- Create an admin user
- Configure SSL/HTTPS (recommended):
sudo bash setup_ssl.sh- URL: https://your-server-ip/ or https://your-domain.com/
- Username: admin
- Password: adminpass
Change the admin password immediately after first login!
CasettaFit supports three SSL certificate options. See SSL_SETUP.md for detailed instructions.
Automated setup:
cd /opt/CasettaFit/app
sudo bash setup_ssl_auto.shManual setup:
sudo bash setup_ssl.sh
# Select option 1
# Enter your domain nameFeatures:
- Free trusted SSL certificate
- Auto-renewal every 90 days
- No browser warnings
sudo bash setup_ssl.sh
# Select option 2Note: Browsers will show security warnings. Click "Advanced" → "Proceed" to continue.
If you have your own SSL certificate:
sudo bash setup_ssl.sh
# Select option 3
# Provide paths to your certificate filesFor detailed SSL setup instructions, troubleshooting, and certificate management, see SSL_SETUP.md.
The application runs as a systemd service using Gunicorn as the production WSGI server.
# Check service status
sudo systemctl status casettafit.service
# Start/Stop/Restart service
sudo systemctl start casettafit.service
sudo systemctl stop casettafit.service
sudo systemctl restart casettafit.service
# View real-time logs
sudo journalctl -u casettafit.service -fsudo systemctl restart casettafit.servicecd /opt/CasettaFit
source app/venv/bin/activate
flask db upgrade
sudo systemctl restart casettafit.service- Access Log:
/opt/CasettaFit/logs/access.log - Error Log:
/opt/CasettaFit/logs/error.log
# View logs
tail -f /opt/CasettaFit/logs/access.log
tail -f /opt/CasettaFit/logs/error.log- Service File:
/etc/systemd/system/casettafit.service - Port: 5000
- Workers: 4 Gunicorn workers
- Auto-start: Enabled on boot
- User: casettalocal
The application uses NGINX as a reverse proxy to the Gunicorn application server.
- Config File:
/etc/nginx/sites-available/casettafit - Ports:
- 80 (HTTP) - Redirects to HTTPS when SSL is configured
- 443 (HTTPS) - Primary access when SSL is configured
- Max Upload Size: 10MB
After running the initial setup, configure SSL using:
cd /opt/CasettaFit/app
sudo bash setup_ssl.shSee SSL_SETUP.md for detailed SSL setup instructions.
- With SSL:
https://your-domain.com/ - Without SSL:
http://your-server-ip/
# Test configuration
sudo nginx -t
# Reload configuration
sudo systemctl reload nginx
# Restart NGINX
sudo systemctl restart nginx
# View NGINX logs
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log# Check detailed status and logs
sudo systemctl status casettafit.service
sudo journalctl -u casettafit.service -n 100
tail -50 /opt/CasettaFit/logs/error.logsudo netstat -tulpn | grep :5000After editing /etc/systemd/system/casettafit.service:
sudo systemctl daemon-reload
sudo systemctl restart casettafit.service- Backend: Flask (Python)
- Database: SQLite with SQLAlchemy ORM
- Frontend: Bootstrap 5, Vanilla JavaScript
- Server: Gunicorn + NGINX
- Deployment: Systemd service management
CasettaFit is fully responsive with dedicated mobile views:
- One-at-a-time set logging for focused workouts
- Large touch targets for gym use
- Landscape mode optimization
- Works offline once loaded (PWA-ready)
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built for home gym enthusiasts who value data privacy
- Inspired by the need for a self-hosted fitness tracking solution
- Thanks to all contributors and users!
If you encounter any issues or have questions:
- Open an issue on GitHub
- Check existing issues for solutions
- See the troubleshooting section in SSL_SETUP.md
Future features planned:
- Export workout data (CSV, JSON)
- Progressive overload calculator
- Exercise instruction videos/images
