Directeur
D 58 completed
Other
web_app / javascript · small
73
Files
8,297
LOC
2
Frameworks
8
Languages
Pipeline State
completedRun ID
#1542488Phase
doneProgress
0%Started
2026-04-16 21:27:01Finished
2026-04-16 21:27:01LLM tokens
0Pipeline Metadata
Stage
CatalogedDecision
proceedNovelty
61.07Framework unique
—Isolation
—Last stage change
2026-05-10 03:34:46Deduplication group #1911779
Member of a group with 6 similar repo(s) — canonical #1574418 view group →
Powered by Repobility — scan your code at https://repobility.com
🧪 Code Distillation
Browse all specs →AI Prompt
Create an AI-powered cycling activity analysis web app called "Le Directeur." The app needs to allow users to upload activity files (.FIT, .GPX, .TCX) or connect via Strava, Wahoo, or Garmin. Key features include power analysis (calculating TSS, Normalized Power, etc.), detecting intervals, and generating brutally honest commentary using the Claude API, which should incorporate user data like FTP, weight, and best efforts. The UI must display route maps using Leaflet on dark map tiles and feature a shared leaderboard. The backend should utilize Netlify Functions for processing and Supabase for data storage.
javascript vite web-app cycling strava supabase ai leaflet fitness
Generated by gemma4:latest
Catalog Information
Create an AI-powered cycling activity analysis web app called "Le Directeur." The app needs to allow users to upload activity files (.FIT, .GPX, .TCX) or connect via Strava, Wahoo, or Garmin. Key features include power analysis (calculating TSS, Normalized Power, etc.), detecting intervals, and generating brutally honest commentary using the Claude API, which should incorporate user data like FTP, weight, and best efforts. The UI must display route maps using Leaflet on dark map tiles and featur
Tags
javascript vite web-app cycling strava supabase ai leaflet fitness
Quality Score
D
57.6/100
Structure
49
Code Quality
80
Documentation
53
Testing
0
Practices
66
Security
100
Dependencies
90
Strengths
- Good security practices — no major issues detected
Weaknesses
- No LICENSE file — legal ambiguity for contributors
- No tests found — high risk of regressions
- No CI/CD configuration — manual testing and deployment
- 284 duplicate lines detected — consider DRY refactoring
Recommendations
- Add a test suite — start with critical path integration tests
- Set up CI/CD (GitHub Actions recommended) to automate testing and deployment
- Add a linter configuration to enforce code style consistency
- Add a LICENSE file (MIT recommended for open source)
Languages
Frameworks
Vite esbuild
Symbols
variable535
function99
constant17
API Endpoints (32)
| Method | Path | Handler | Framework | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Repobility (the analyzer behind this table) · https://repobility.com | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | authorization | headers.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | authorization | headers.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | code | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | code | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | code | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | code | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | cookie | headers.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | error | params.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | error | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | error | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | error | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | error | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | error | params.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | hub.challenge | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | hub.mode | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | hub.verify_token | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | id | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | limit | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | limit | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | name | params.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | order | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | platform | params.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | sort | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | sort | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | sport_type | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | state | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | state | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | state | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | state | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | success | params.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | user-agent | headers.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET | user_id | searchParams.get | Express | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Provenance: Repobility (https://repobility.com) — every score reproducible from /scan/
Embed Badge
Add to your README:
