All projects

TypeLeague

TypeLeague turns a single typing test into many competitions at once. Instead of only answering "how fast can I type?", every run also answers "how fast is my school, my company, my city, my country?" — one result ranks you globally and against each of those, so every test is a race on multiple fronts. Affiliations are verified by email, team standings are protected by server-side scoring and anti-cheat signals, and weekly seasons roll over automatically on a FastAPI service with Redis-powered leaderboards.

What it does

  • One typing test simultaneously feeds global, country, city, school, and company leaderboards
  • Multiple race formats: Sprint (15s), Standard (30/60s), and Marathon (120s) with real-time WPM and accuracy
  • Verified affiliations — school and company email OTP with MX-record checks, so official team rankings only count real members
  • Team scoring by the average WPM of an organization's top verified members, rather than gameable single-user averages
  • Weekly seasons that reset rankings automatically while preserving historical results
  • Anti-cheat — server-side scoring plus copy/paste, autofill, and burst-speed signals that flag suspicious sessions for review
  • Punctuation mode serves unmodified literary passages (classics and Wikipedia excerpts) instead of normalized word lists
  • Multi-language practice across several Latin-script languages plus Korean (IME-aware)
  • Auto-generated share cards for X, LinkedIn, Reddit, and Discord
  • Admin dashboard for affiliation verification, session-flag review, organization de-duplication, and reversible bans, with an audit log — plus distinct-human detection that clusters suspected duplicate accounts for review only, never auto-penalizing
  • Accounts, profiles, and privacy controls (hide or remove a verified affiliation) with Clerk auth

Tech stack

Next.js 14 (App Router) with React 18, TypeScript, Tailwind CSS, and shadcn/ui on the frontend. FastAPI (Python) backend with SQLAlchemy 2.0 and Alembic, PostgreSQL 17 for persistence, and Redis for real-time leaderboard ranking. Clerk handles authentication, Amazon SES sends affiliation OTP email, and APScheduler runs the weekly season rollover and team-score recompute in-process. The frontend deploys on Vercel; the backend and managed Postgres/Redis run on Railway.