Back to portfolio

Project case study

Solo project / Sole developer

Enverga Arena

An intramurals system for tryouts, rosters, results, medals, and news.

Status
Solo project, 2026
Scope
MSEUF intramurals tryout, team, scheduling, result, medal, news, and reviewed-recap workflows.
Team and role
Solo project. I built the React client, Django API, and role-based workflows.
Enverga Arena repository-derived workflow from verified tryouts and registrations through reviewed results and recaps
Workflow diagram of the intramurals roles and publishing steps in the repository.

Context

Students, department representatives, and administrators need separate permissions for tryouts, rosters, results, and published recaps.

What I built

  • Built Django REST Framework tryout, roster, registration, result, medal, and role workflows.
  • Added domain OTP, hashed OTP storage, server-side Turnstile verification, rate limiting, duplicate protection, and human review for AI recap publication.

Technical approach

  • React and TypeScript client with a Django REST Framework API and the current local SQLite database.
  • Tryout, roster, registration, schedule, result, medal, and news workflows are separated by role.
  • Student tryouts are verified through the student-domain email and OTP flow before review.
  • AI recap generation creates a draft for administrator review rather than publishing generated text directly.
  • PostgreSQL is a future direction in the repository, not the current local database claim.

Security and verification

  • Access tokens are held in frontend memory and refresh credentials are set by the backend in an HttpOnly cookie.
  • OTP values are hashed, Turnstile is verified server-side, and rate limiting plus duplicate protection cover the public tryout path.
  • Role-specific workflows and explicit review states keep official results and recaps under administrator control.
  • I documented the authentication, tryout, roster, result, and recap flows used in the project.

Current limits

  • The current project uses SQLite locally. PostgreSQL is documented as a future direction, not a current deployment.
  • AI recap text remains a draft until human review and approval.