Overview#
osu!chan is a stats site for the rhythm game osu! that provides players a unique look at their play style and history, while also providing alternate ways to enjoy the game with the custom leaderboard system.
osu!chan is also used to power various systems of osu! events such as COE, osu!Sweden LAN, and others. osu!chan powers the event leaderboards for these events as well as a handful of stage shows at COE such as the “mrekk vs COE” pp race and others.



Technology#
The core application is a Python Django REST API backed by a PostgreSQL DB, with a TypeScript React SPA frontend.
The system runs on containers inside a VPS that is managed and deployed to via Ansible in a closed source pipeline for security purposes.
History#
osu!chan is a full rewrite of osu!chan classic into a standalone Django project incorporating all my learnings from the first few years of learning programming.
Along with cleaning up the code architecture and performance immensely, I also built a fully new React SPA frontend, experimenting with a few different design systems before deciding to build one from the ground up using styled-components.
osu!chan has continued to be my main ongoing project, being worked on semi-regularly over the years. There have been periodic breaks, to work on other projects to support osu!chan, such as difficalcy or upstream contributions to osu! itself, but in the end osu!chan is my home base.
Several new features were added over time including the profile sandbox, custom leaderboards and PP+ integration, as well as a whole host of backend improvements that unlock the potential for many features that now only require time to implement.
After the years of backend improvements, the React frontend has certainly fallen behind, both in terms of the wider JavaScript ecosystem patterns/tech but also in ease of maintainability compared to the backend, so I plan to soon rewrite a new frontend with a design overhaul as well.

