← projects
$ Contribution Radar
Turns a GitHub username or a programming language into a curated list of active, contributable open source issues.
- →Built with a hexagonal Spring Boot backend and a Vite/React frontend. Given a GitHub username, it analyzes the account's most used languages via the GitHub GraphQL API and surfaces open issues weighted toward those languages; alternatively, a language can be searched directly without any username.
- →Fixed a race condition in per search statistics tracking by replacing a read then write JPA flow with a single atomic PostgreSQL INSERT ... ON CONFLICT DO UPDATE upsert, eliminating duplicate key failures under concurrent requests.
- →Discovered that GitHub's own stars: search qualifier silently over filtered results server side; replaced it with client side post filtering against the real stargazerCount, combined with an activity window filter so only issues updated in the last 90 days or with meaningful discussion are suggested.
- →Resolved a hidden N+1 style delete pattern in a scheduled cache cleanup job deleting entities one by one triggered a separate DELETE per entity plus its @ElementCollection child table. Replaced it with two bulk native SQL DELETE statements, cutting the job to a fixed number of queries regardless of batch size.
- →Implemented IP based abuse protection as a single Servlet Filter chain instead of per controller checks: a ClientIpResolver that scans X-Forwarded-For right to left to resist IP spoofing behind the reverse proxy, automatic temporary bans after repeated invalid requests, and separate Caffeine backed rate limits per endpoint.
- →Deployed with Docker Compose (PostgreSQL, Spring Boot, Vite served via nginx) joined to an existing shared nginx proxy + Let's Encrypt network, with an nginx SPA fallback so client side routes resolve correctly on direct access and for search engine crawlers.
JavaSpring BootReactTypeScriptPostgreSQLDockerHexagonal ArchitectureGitHub GraphQL APIResilience4j