A web and mobile application to optimize training tracking and management for weightlifting.
Explore the project »
Access Alpha Version
·
Technical Documentation
·
Report Bug
📋 Table of Contents
DropIt is a web and mobile application designed to optimize training tracking and management for weightlifting.
Main Features: Athlete management, personalized training program creation, exercise library, session planning, and mobile app for performance tracking.
To discover all features in detail, check out the landing page and the technical documentation. (Documentation is in French, as this project started as a school study project)
- Frontend: React, TypeScript, TanStack (Query + Router), Shadcn/ui + Tailwind CSS
- Backend: NestJS + MikroORM
- Database: PostgreSQL
- Authentication: Better-auth with organization plugin
- CI/CD: Docker, Docker Compose, GitHub Actions
- Code Quality: Biome
- Monorepo: pnpm workspaces
- Node.js: Version 22 or higher (required for better-auth and ESM support)
- pnpm: Package manager version 9.7.1+ (install with
npm install -g pnpm@latest) - Docker and Docker Compose: For running services (PostgreSQL, PgAdmin, MailDev)
- Windows/macOS: Docker Desktop must be installed and running before executing Docker commands
- Linux: Docker Engine and Docker Compose are sufficient
git clone https://github.com/Netsbump/dropit.git
cd dropitpnpm installTo allow packages in packages/ to be used by the different services, you need to perform an initial build:
pnpm buildThe project includes an automated setup script that will:
- Detect and copy
.env.examplefiles to.env(if they don't exist) - Check for existing
.envfiles and only prompt for missing variables - Prompt you for database configuration (user, password, name, host, port)
- Prompt you for application ports (API, MailDev, PgAdmin)
- Detect your local IP address for the mobile app
- Generate a secure
BETTER_AUTH_SECRETautomatically - Configure all
.envfiles with the correct values - Optionally start Docker services (PostgreSQL, MailDev, PgAdmin)
- Optionally run database migrations or set up a fresh database with seed data
pnpm setupThe script will guide you through the configuration process interactively. After completion, you'll see a summary of all configured services and their URLs.
If you prefer to configure everything manually:
- Copy environment files:
# Root .env file (for Docker Compose)
cp .env.example .env
# API .env file
cp apps/api/.env.example apps/api/.env
# Web frontend .env file (API URL configuration)
cp apps/web/.env.example apps/web/.env
# Mobile app .env file (API URL configuration with local IP)
cp apps/mobile/.env.example apps/mobile/.env
# For production mobile build, also create:
cp apps/mobile/.env.example apps/mobile/.env.production
# Then edit .env.production with your public API URL- Configure environment variables:
Edit each .env file and update the values according to your environment. Key variables to configure:
- Database:
DB_USER,DB_PASSWORD,DB_NAME,DB_PORT,DB_HOST - API:
API_PORT,BETTER_AUTH_SECRET,BETTER_AUTH_URL,TRUSTED_ORIGINS - Mobile:
EXPO_PUBLIC_API_URL(use your local IP, e.g.,http://192.168.1.XXX:3000)
.env files to match your configuration.
- Start Docker services:
docker compose up -d- Set up the database:
Wait a few seconds for PostgreSQL to fully start, then run migrations or create a fresh database:
# Option 1: Run migrations
pnpm --filter api db:migration:up
# Option 2: Fresh database with seed data
pnpm --filter api db:freshpnpm devThe services will be available at the following URLs:
- Web Frontend: http://localhost:5173
- API: http://localhost:3000
- API Documentation (Swagger): http://localhost:3000/api
- PgAdmin: http://localhost:5050
- MailDev: http://localhost:1080
- Mobile App: A QR code will appear in the terminal for Expo Go
The project uses Docker Compose to provide the following services:
- PostgreSQL: Database server
- PgAdmin: PostgreSQL administration tool
- MailDev: SMTP server for development (not for production use!)
- Automated setup:
pnpm setup
- Start Docker services:
docker compose up -d - Stop Docker services:
docker compose down - View Docker logs:
docker compose logs -f
- Start all apps:
pnpm dev - Start web + API only:
pnpm dev:web-api - Start mobile app only:
pnpm dev:mobile - Build applications:
pnpm build - Type checking:
pnpm typecheck - Lint code:
pnpm lint - Fix linting issues:
pnpm lint:fix - Format code:
pnpm format
- Fresh database with seeds:
pnpm --filter api db:fresh - Run seeds only:
pnpm --filter api db:seed - Create migration:
pnpm --filter api db:migration:create - Run migrations:
pnpm --filter api db:migration:up - Rollback last migration:
pnpm --filter api db:migration:down - Check pending migrations:
pnpm --filter api db:migration:check
- Run API unit tests:
pnpm test:api:unit - Run API integration tests:
pnpm test:api:integration
Seed data is not created automatically. To populate development data, run:
pnpm --filter api db:seedThis creates test data including:
- A super admin (Super Admin - super.admin@gmail.com)
- A coach to test the web interface (Jean Dupont - coach@example.com)
- A default club
- Generated users/athletes with Faker (15-25 athletes)
After running seeds, the web app has two login routes:
- Admin login (email + password):
/login/admin(example seeded account:super.admin@gmail.com/Password123!) - Member/coach login (email OTP):
/loginthen/login/otp(example seeded account:coach@example.com)
Source of truth for seeded auth data: apps/api/src/seeders/athlete.seeder.ts and apps/api/src/seeders/organization.seeder.ts.
The OTP login flow sends a verification code by email. In local development, use MailDev to read those emails:
- MailDev UI: http://localhost:1080
- SMTP:
localhost:1025
After requesting OTP login, open MailDev to retrieve the verification email/code.
A mobile application is available in apps/mobile/. It starts automatically with pnpm dev (which launches
all apps in parallel). To test it:
- Install Expo Go on your phone
- Scan the QR code displayed in the terminal (the mobile app starts with
pnpm dev; if the QR code doesn't appear, run the command from theapps/mobile/folder)
To log in, use one of the users generated by the seeds. Since names and emails are generated by Faker, check the database directly via PgAdmin to retrieve credentials.
PgAdmin Access:
- URL: http://localhost:5050
- Email:
admin@admin.com - Password:
admin - Universal password for all seeded users:
Password123!
For deeper technical aspects of the project, check out the following guides:
- Deployment Guide: Complete production infrastructure configuration (VPS, Dokploy, Traefik, Docker Swarm) (in French)
- Emergency Recovery Plan: Recovery procedures in case of major failure (in French)
- Production Migration Guide: Strategies and best practices for managing migrations with real user data (in French)
Distributed under the GNU Affero General Public License v3.0 (AGPL-3.0).
This software is free and open source, but with strong protection against commercial appropriation:
- ✅ You can freely use, modify, and redistribute this software
- ✅ Any fork must remain open source under AGPL-3.0
- ✅ Modifications on a web server must be shared publicly
See the LICENSE.md file for the full license text.
LinkedIn: Sten Levasseur