## Contributors
## About
A comprehensive fitness coaching platform that allows create workout plans for you, track progress, and access a vast exercise database with
detailed instructions and video demonstrations.
## π― Project Origin & Motivation
This project was born from a personal mission to revive and improve upon a previous fitness platform. As the **primary contributor** to the
original [workout.lol](https://github.com/workout-lol/workout-lol) project, I witnessed its journey and abandonment. π₯Ή
### The Story Behind **_workout.cool_**
- ποΈ **Original Contributor**: I was the main contributor to workout.lol
- πΌ **Business Challenges**: The original project faced major hurdles with exercise video partnerships (no reliable video provider) could
be established
- π° **Project Sale**: Due to these partnership issues, the project was sold to another party
- π **Abandonment**: The new owner quickly realized that **exercise video licensing costs were prohibitively expensive**, began to be sick
and abandoned the entire project
- π **Revival Attempts**: For the past **9 months**, I've been trying to reconnect with the new stakeholder
- π§ **Radio Silence**: Despite multiple (15) attempts, there has been no response
- π **New Beginning**: Rather than let this valuable work disappear, I decided to create a fresh, modern implementation
### Why **_workout.cool_** Exists
**Someone had to step up.**
The opensource fitness community deserves better than broken promises and abandoned platforms.
I'm not building this for profit.
This isn't just a revival : it's an evolution. **workout.cool** represents everything the original project could have been, with the
reliability, modern approach, and **maintenance** that the fitness open source community deserves.
## π₯ From the Community, For the Community
**I'm not just a developer : I'm a user who refused to let our community down.**
I experienced firsthand the frustration of watching a beloved tool slowly disappear. Like many of you, I had workouts saved, progress
tracked, and a routine built around the platform.
### My Mission: Rescue & Revive.
_If you were part of the original workout.lol community, welcome back! If you're new here, welcome to the future of fitness platform
management._
## Quick Start
### Prerequisites
- Node.js 18+
- Either:
- Docker
- OR PostgreSQL external database
- pnpm (recommended) or npm
### Installation
1. **Clone the repository**
```bash
git clone https://github.com/Snouzy/workout-cool.git
cd workout-cool
```
2. **Install dependencies**
```bash
pnpm install
```
3. **Set up environment variables**
```bash
cp .env.example .env
```
Fill in your database URL and other required environment variables:
```env
DATABASE_URL="postgresql://username:password@localhost:5432/workout_cool"
BETTER_AUTH_SECRET="your-secret-key"
# ... other variables
```
4. **Set up the database**
#### Option 1: Using Docker
The project provides a convenient `make` command that handles everything:
```bash
make init
```
This single command will:
- Start the PostgreSQL database using Docker
- Run database migrations
- Start the development server
#### Option 2: Manual PostgreSQL Setup
If you prefer to use your own PostgreSQL installation:
```bash
# Run migrations
npx prisma migrate deploy
npx prisma generate
# Start the development server
pnpm dev
```
5. **Open your browser** Navigate to [http://localhost:3000](http://localhost:3000)
## Exercise Database Import
The project includes a comprehensive exercise database. To import a sample of exercises:
### Prerequisites for Import
1. **Prepare your CSV file**
Your CSV should have these columns:
```
id,name,name_en,description,description_en,full_video_url,full_video_image_url,introduction,introduction_en,slug,slug_en,attribute_name,attribute_value
```
You can use the provided example.
### Import Commands
```bash
# Import exercises from a CSV file
pnpm run import:exercises-full /path/to/your/exercises.csv
# Example with the provided sample data
pnpm run import:exercises-full ./data/sample-exercises.csv
```
### CSV Format Example
```csv
id,name,name_en,description,description_en,full_video_url,full_video_image_url,introduction,introduction_en,slug,slug_en,attribute_name,attribute_value
157,"Fentes arrières à la barre","Barbell Reverse Lunges","Stand upright...
","Stand upright...
",https://youtube.com/...,https://img.youtube.com/...,slug-fr,slug-en,TYPE,STRENGTH
157,"Fentes arrières à la barre","Barbell Reverse Lunges","Stand upright...
","Stand upright...
",https://youtube.com/...,https://img.youtube.com/...,slug-fr,slug-en,PRIMARY_MUSCLE,QUADRICEPS
```
### Available Attribute Types
- **TYPE**: `STRENGTH`, `CARDIO`, `PLYOMETRICS`, `STRETCHING`, etc.
- **PRIMARY_MUSCLE**: `QUADRICEPS`, `CHEST`, `BACK`, `SHOULDERS`, etc.
- **SECONDARY_MUSCLE**: Secondary muscle groups targeted
- **EQUIPMENT**: `BARBELL`, `DUMBBELL`, `BODYWEIGHT`, `MACHINE`, etc.
- **MECHANICS_TYPE**: `COMPOUND`, `ISOLATION`
## Project Architecture
This project follows **Feature-Sliced Design (FSD)** principles with Next.js App Router:
```
src/
βββ app/ # Next.js pages, routes and layouts
βββ processes/ # Business flows (multi-feature)
βββ widgets/ # Composable UI with logic (Sidebar, Header)
βββ features/ # Business units (auth, exercise-management)
βββ entities/ # Domain entities (user, exercise, workout)
βββ shared/ # Shared code (UI, lib, config, types)
βββ styles/ # Global CSS, themes
```
### Architecture Principles
- **Feature-driven**: Each feature is independent and reusable
- **Clear domain isolation**: `shared` β `entities` β `features` β `widgets` β `app`
- **Consistency**: Between business logic, UI, and data layers
### Example Feature Structure
```
features/
βββ exercise-management/
βββ ui/ # UI components (ExerciseForm, ExerciseCard)
βββ model/ # Hooks, state management (useExercises)
βββ lib/ # Utilities (exercise-helpers)
βββ api/ # Server actions or API calls
```
## Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
### Development Workflow
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Commit your changes (`git commit -m 'feat: add amazing feature'`)
5. Push to the branch (`git push origin feature/amazing-feature`)
6. Open a Pull Request
### Code Style
- Follow TypeScript best practices
- Use Feature-Sliced Design architecture
- Write meaningful commit messages
- Add tests for new features
## Deployment
### Using Docker (Not ready yet : todo)
```bash
# Build the Docker image
docker build -t workout-cool .
# Run the container
docker run -p 3000:3000 workout-cool
```
### Manual Deployment
```bash
# Build the application
pnpm build
# Run database migrations
export DATABASE_URL="your-production-db-url"
npx prisma migrate deploy
# Start the production server
pnpm start
```
## Resources
- [Feature-Sliced Design](https://feature-sliced.design/)
- [Next.js Documentation](https://nextjs.org/docs)
- [Prisma Documentation](https://www.prisma.io/docs/)
- [Better Auth](https://github.com/better-auth/better-auth)
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
[](https://choosealicense.com/licenses/mit/)
## π€ Join the Rescue Mission
**This is about rebuilding what we lost, together.**
### How You Can Help
- π **Star this repo** to show the world our community is alive and thriving
- π **Report issues** you find. I'm listening to every single one
- π‘ **Share your feature requests** finally, someone who will actually implement them !
- π **Spread the word** to fellow fitness enthusiasts who lost hope
- π€ **Contribute code** if you're a developer : let's build this together
## π Sponsor This Project
Appear in the README and on the website as supporter by donating:
If you believe in open-source fitness tools and want to help this project thrive,
consider buying me a coffee β or sponsoring the continued development.
Your support helps cover hosting costs, exercise database updates, and continuous improvement.
Thank you for keeping workout.cool alive and evolving πͺ