SO — Sherlyn Olalo

Sherlyn Olalo

Rhythm Game

A four-lane rhythm game with tap and hold notes, three difficulty levels, combos, health bar, and letter grades. Features retro arcade aesthetics with neon colors, CRT scan lines, and particle effects. High scores persist locally. Works on keyboard and touch.

RoleGame Developer
Year2025
ClientLifewood Data Technology (Internship)
Stack
HTML/CSS/JavaScript/Web Audio API/localStorage
01

The problem.

I wanted my internship project to be something I'd actually want to play, not just a demo. Rhythm games look simple from the outside, but a lot of small details have to feel right before it becomes fun. The goal was to build one from scratch with no game engine and no framework—just the browser.

02

What I built.

A full rhythm game you can open straight from a browser. Four lanes mapped to arrow keys, tap and hold notes, three difficulties, and a scoring system with combos and S to F grades. The notes are made from pure CSS shapes instead of images, the whole UI scales to fit any screen, and there's a demo mode that plays in the background of the song select screen. High scores save locally, and it works on mobile too.

Four-lane browser rhythm game — tap & hold notes, combos, letter grades, CRT visuals

The tech stack was intentionally minimal: Web Audio API for precise note timing, localStorage for persistence, vanilla JavaScript for the game loop. This constraint forced me to think carefully about what actually matters—timing, feedback, and feel.

Key decisions

No-framework approach — Every game loop, collision check, and animation is hand-written JavaScript, giving me complete control over timing and feel

CSS-based visuals — Notes, lanes, and UI elements are pure CSS, keeping the game lightweight and scalable to any resolution

Persistent local state — localStorage keeps high scores between sessions without requiring a backend

03

What I learned.

Game feel lives in the small things. The pulse before a note lands, the burst when you hit a perfect, the combo number growing as you chain hits. None of that is gameplay on its own, but the game feels flat without it. I also learned that working with no libraries pushes you to think more carefully about timing, structure, and what is really needed. Limits can make you more creative, not less.