The Problem
Most sport tracking apps are built around one main activity: running, cycling, lifting, or a fixed training template. That works until the training week mixes gym sessions, climbing, runs, volleyball, cold plunges, saunas, and activity-specific notes that do not belong in the same generic form.
EffortMaxx is a personal multisport logging system built for that messier reality. The goal is to make one place where different session types can have different fields, preferences, and context without forcing every activity into the same structure.
The product itself does not use AI for analytics or recommendations. The development process is the AI part: I directed the build through Codex and Claude Code, and the application code was written by those coding agents while I shaped the requirements, reviewed outputs, tested flows, and made product decisions.
Product Scope
The application is a web app and training dashboard for logging sessions across multiple activity types.
The core idea is simple:
- A climbing session should not ask for the same data as a run.
- A sauna or cold plunge should not be treated like a workout with distance and pace.
- A user should be able to record what mattered for that session type without maintaining multiple apps.
This made EffortMaxx more of a configurable logging product than a normal fitness tracker clone.
Technical Approach
EffortMaxx uses a frontend deployed on Vercel, a FastAPI backend deployed on Render, and Supabase for the database and authentication layer.
| Layer | Technology |
|---|---|
| Frontend hosting | Vercel |
| Backend | Python, FastAPI |
| Backend hosting | Render |
| Database | Supabase PostgreSQL |
| Auth | Supabase Auth |
| Development workflow | Codex, Claude Code |
FastAPI provides the API surface for session creation, retrieval, and activity-specific logic. Supabase keeps the system practical for a solo project: authentication, hosted PostgreSQL, and managed infrastructure without needing to build a custom auth service. Vercel handles the frontend deployment separately from the backend service.
AI-Coded Development
This project was intentionally built with AI coding tools as the main implementation layer, not as an afterthought.
I used Codex and Claude Code to write the application code, move through backend structure, UI iteration, debugging, and deployment friction. The result is not presented as a fully hand-written engineering artifact. It is a practical example of using coding agents to turn a personal workflow problem into a deployed application.
The important engineering work was deciding what the app should do, giving the agents precise context, reviewing generated code, connecting the pieces, testing real flows, and shaping the product around actual usage instead of accepting the first generated version.
What It Solves
EffortMaxx solves my own logging problem: I did not have one app where I could comfortably track gym sessions, climbing, running, volleyball, cold plunges, and saunas together.
The app gives those activities a shared home while still respecting that each one has different data needs. That is the difference between a generic habit tracker and a training log that can reflect how I actually train.
Current Status
The app is deployed and available at:
The GitHub repository is private for now.
What It Taught Me About AI Agents
EffortMaxx taught me that coding agents are most useful when treated like implementation partners, not magic autocomplete.
The biggest lesson was that the quality of the result depends heavily on the quality of the context I provide. Agents performed much better when I gave them a clear product goal, concrete constraints, existing code structure, and small implementation steps.
It also made the review loop more important. Since the whole app was coded by AI, I had to stay responsible for architecture, product behavior, testing, deployment decisions, and whether the generated code actually solved the problem. The workflow was less about typing every line myself and more about directing, checking, and correcting the system until the app behaved the way I wanted.