Project record

01 / 03

The athletics management system at Poli-USP

Poliatletas

The Poli-USP athletics team uses the system to record meets, results, records, and training, replacing the spreadsheets that went missing every season. More than a hundred people use it, athletes and coaching staff, with an auditable history and public rankings.

I built Poliatletas to bring the team's operations into a model that understands events, marks, eligibility, and history. The backend serves public athlete and ranking pages as well as coaches' workflows for results, competitions, and training.

Period
08.2025 · present
My contribution
Sports-domain modeling, NestJS backend, API contracts, and integration with the React frontend.
Technology
NestJS · Fastify · PostgreSQL · Prisma · React · Redis
Status
In production and under active development
Official Poliatletas logo in blue and yellow
Poliatletas identity, used by the system that publishes athletes, results, and team rankings.

RING

Comparing marks without erasing context

In the 100 metres, a lower mark is better; in shot put, the greater distance wins. Results also vary by unit, gender, competition, round, and validity. Treating each mark as a sortable number would create false records and lose its source.

SECTOR

Decisions behind the product

  1. Direction-aware eligible metrics

    Each event defines a canonical unit and comparison direction. PBs, rankings, and records are derived only from eligible results without modifying the history that produced them.

  2. Idempotent, auditable writes

    Batch imports prevent duplicates; sensitive changes record actor, role, action, and metadata. Reprocessing rebuilds derived data without rewriting the original result.

  3. Explicit training concurrency

    Offline execution uses an Idempotency-Key, session revisions, and If-Match. Retries return the same response, while concurrent structural edits produce a conflict instead of silently overwriting data.

  4. One contract for API and UI

    The versioned REST API exports OpenAPI. The frontend generates types from that contract, reducing drift between NestJS DTOs and React screens.

MARK

What can be checked

  • Public rankings by event, period, and season, plus athlete profiles with PBs and history
  • Idempotent imports, record recomputation, and an audit trail for sensitive operations
  • More than 250 tests across the backend and frontend
  • Public product at poliatletas.com.br; application code kept in private repositories

SHEET