← projects
$ Chessfut
Turns a Chess.com username into a FIFA Ultimate Team style player card, complete with OVR rating and attributes.
- →Built a scoring engine that converts Chess.com public API stats into an OVR rating with six attributes (PAC/SHO/PAS/DRI/DEF/PHY), a position, and badges — inspired by GitFut, a similar concept built around GitHub profiles.
- →Backend written in Go following hexagonal architecture (ports & adapters), with PostgreSQL and Redis, integrating directly with the Chess.com public API; frontend built with Next.js App Router.
- →Hardened the scoring engine against bad input: unrealistic self-reported FIDE ratings (above the real-world record) are discarded rather than clamped, and accounts with zero games played are floored so an empty profile can never outscore an active player with a real track record.
- →Added IP-based rate limiting, constant-time admin key comparison to prevent timing attacks, upper bounds on pagination parameters to close a DoS vector, and server-side-only error logging so internal errors never leak to the client.
- →Set up CI (lint, vet, build, test with coverage for Go; lint, typecheck, test, build for Next.js) and a two-way isolated SSH deploy pipeline — a command-restricted deploy key for GitHub Actions to trigger the server, and a separate read-only deploy key for the server to pull the repository.
- →Locked down docker-compose so no service (Postgres, Redis, backend, frontend) exposes a port to the host — everything routes through an existing nginx-proxy container over the internal Docker network, with automatic Let's Encrypt certificates.
GoNext.jsHexagonal ArchitecturePostgreSQLRedisDockerCI/CDSecurity