ILL Rewrite Progress 1

The rewrite is finally sitting on its own feet! I'm using Rust on the backend (Actix + SQLx + Postgres), Remix + Tailwind on the frontend, all glued together with a lot of migrations. This is the first pass of a running log; I'll keep dropping these as deemed fit. Frankly I didn't change much, I only really rewrote the codebase to be much friendlier to approach and also faster to run and take less resources.

✦ Ratings, but Sane This Time

The difficulty engine stays Bradley-Terry. Pairwise "A vs B" judgments feed an Adam optimizer that solves for a per-level rating. What changed is what happens after the numbers settle.

Rating drives rank. Rank drives points. Points are what actually show up on cards and leaderboards. The curve is base × decay^(rank - 1) with a floor. After a rating changes, We pass things through an Adam optimizer. The Adam optimizer minimizes by nudging each level's rating a little at a time. After enough iterations, the ratings settle into values that best match how staff collectively judged the levels.

There was a fun bug (which I unfortunately didn't record) where every rerate quietly multiplied every rating by 100. Three rerates later, Open Window's rating had drifted from 40.08 to 40,083,900.

/u/me · Customizations!!

Your own profile page remains editable. In-game name and creator name go through a staff-reviewed claim system. Once approved, records under that name show up on your public profile, and levels credited to your creator name link back to you.

✦ Tag Customization

Tags got a whole styling layer. Gradient or solid backgrounds, decoupled text and glow colors, a small preset icon library (star, flame, skull, crown, warning, and more), plus custom icons via URL. Animation presets: glow, pulse, shimmer, rainbow, bounce, wobble, spin.

Shimmer took two passes to feel right. The first version relied on a gradient background that most tags didn't have. Rewrote it as a translucent white stripe sweeping across an overlay. Now it glints regardless of what's underneath.

Banners Optimized

Banners now accept .jpg, .png, .webp, .gif, and .mp4 up to 10 MB. Video banners only play on hover; the rest play automatically as they don't take many resources. If a level has a custom thumbnail set, the YouTube auto-thumbnail is gated behind a click-to-play so the auto-picked frame never renders.

✦ Mobile Pass

The whole UI got a resize. The page scales with your resolution. Tags also no longer break the UI as visualized below...

? What's Next

  • Snapshots to keep a record in case any changes happen incorrectly.
  • A few tests around the rating engine.
  • More changes as needed based on feedback from staff :3

Thanks for reading! <3