OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Auto-book competitive fitness classes before they fill up
Translation pending
Sports & fitnessPython · TypeScriptGitHub @andeslee444OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Auto-book competitive fitness classes (Barry's, Aarmy, SLT, and more)
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Auto-book competitive fitness classes as soon as booking opens or a slot appears.
Fitness Sniper is a private TypeScript monorepo with a Next.js dashboard, a PostgreSQL-backed booking worker, and shared studio/API logic.
• Stores encrypted per-studio credentials.
• Lets users create recurring and one-time snipe targets.
• Browses live and cached class schedules.
• Creates booking jobs at each studio's booking-open time.
• Books through platform-specific adapters.
• Tracks worker health, booking history, and per-studio success rates.
• Sends success/failure email notifications through Resend.Read the full README ↗Auto-book competitive fitness classes as soon as booking opens or a slot appears.
Fitness Sniper is a private TypeScript monorepo with a Next.js dashboard, a PostgreSQL-backed booking worker, and shared studio/API logic.
.
├── web/ # Next.js App Router dashboard and API routes
├── worker/ # Always-on booking daemon
├── packages/shared/ # Shared types, studio registry, and API clients
├── supabase/migrations/ # PostgreSQL schema migrations
├── archive/ # Legacy reference code only, not deployed
└── screenshots/ # UI verification screenshots
npm install
Create environment files from the examples:
cp web/.env.local.example web/.env.local
cp worker/.env.example worker/.env
Required web variables:
DATABASE_URL=
DATABASE_POOL_MAX=2
ENCRYPTION_KEY=
AWS_REGION=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
COGNITO_USER_POOL_ID=
COGNITO_CLIENT_ID=
COGNITO_CLIENT_SECRET=
AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are required on Vercel because signup uses Cognito AdminConfirmSignUpCommand. DATABASE_POOL_MAX is optional; the web app defaults to 2 in production to avoid exhausting PostgreSQL connections from serverless instances.
Required worker variables:
DATABASE_URL=
ENCRYPTION_KEY=
RESEND_API_KEY=
WORKER_ID=
ENCRYPTION_KEY must be the same 64-character hex key for web and worker.
npm run web:dev
npm run worker
Build commands:
npm run web:build
npm run worker:build
npm run build
Lint:
npm run lint
There is currently no automated test framework configured.
Deploy from the repository root:
Install Command: npm ci --workspace=web --workspace=packages/shared --include-workspace-root
Build Command: npm run web:build
Output Directory: web/.next
Set the required web environment variables in the Vercel project. The booking worker is not a Vercel function; run npm run worker on the always-on worker host with the worker environment variables.
The active schema is PostgreSQL with Cognito user IDs:
supabase/migrations/001_rds_schema.sqlsupabase/migrations/002_one_time_targets.sqlsupabase/migrations/003_class_schedules.sqlsupabase/migrations/004_credential_separate_iv.sqlsupabase/migrations/005_booking_timing.sqlsupabase/migrations/006_optional_time_arketa.sqlsupabase/migrations/007_history_class_name.sqlSupabase Auth and Supabase client helpers are legacy and should not be reintroduced.
This repository root is the active Fitness Sniper app. The old class-sniper tree was an earlier name/copy and should stay deleted. Archive files are retained only for historical selector and flow reference.