Inspiration

"Adjusting brightness should never be easy." We take screen brightness for granted—a simple swipe, and done. Sunlight? Crank it up. Bedtime? Dim it down. It's boring utility. What if it required skill? Luck? Sheer frustration? Lumen Lottery turns the most mundane control into a collection of deliberately terrible minigames. Snake length = brightness. Pin-the-picture accuracy = glow. Miss a shot? Welcome to darkness. 20+ games. Zero practicality. Maximum hackathon absurdity.

What it does

The app replaces your brightness slider with over 20 minigames across five categories: Classic games like Snake and Tetris where score determines brightness. Luck-based games like slot machines and roulette where jackpot combinations yield maximum brightness. Puzzle games like lassoing apples whose numbers sum exactly to 10. Frustrating games with invisible sliders and reverse controls. Weird games where shouting volume or doing nothing controls brightness. Each game calls a single function that instantly changes your actual screen brightness using the expo-brightness API.

How we built it

React Native with Expo for cross-platform deployment to iOS, Android, and web. TypeScript for type safety. expo-brightness for system-level brightness control. react-native-svg for custom game graphics like lasso circles and donkey tails. react-native-gesture-handler for complex drag and swipe interactions. expo-haptics for tactile feedback. The architecture uses Expo Router with each minigame as a self-contained component that receives onBrightnessChange and onExit callbacks.

Challenges we ran into

Game loops created stale closures that captured outdated state values. Fixed with useRef to maintain mutable current values. Tetris required precise stack overflow detection to prevent false game-over triggers. Touch gesture conflicts between lasso drawing and tap detection needed careful PanResponder configuration. Balancing intentionally terrible UX with enjoyable frustration took multiple iterations.

Git conflicts are real. Four people editing the same home screen file is pure pain bro. We learned to use branches the hard way.

Accomplishments that we're proud of

We're proud of building 20+ minigames in 24 hours, from Snake and Tetris classics to original absurdities like "Pin the Picture" and "Apple Sum Puzzle" where players lasso numbered apples summing exactly to 10. We achieved real system brightness control across iOS, Android using expo-brightness with safety clamping to prevent total darkness. Advanced gesture handling powered lasso dragging, multi-touch Tetris, and reverse-control frustration mechanics through careful PanResponder configuration. The modular architecture with a single onBrightnessChange(0-1) callback enabled rapid prototyping—new games averaged just 2 hours each. Cross-platform deployment worked flawlessly from a single Expo codebase, while delightful sabotage UX like invisible sliders and backwards progress bars created addictive frustration. TypeScript eliminated runtime gesture and animation bugs across all 50+ components, and we maintained 60fps game loops using useRef and requestAnimationFrame despite complex SVG animations. Most importantly, we proved sliders are boring—Lumen Lottery makes brightness adjustment genuinely memorable through deliberate impracticality.

What we learned

Brightness APIs are surprisingly locked down. Turns out browsers can't touch screen brightness at all - it's a native-only thing. That's literally why we built a mobile app instead of a website.

Making something intentionally bad is harder than making something good. You'd think building a frustrating app would be easy. But there's a line between "funny annoying" and "actually broken." We crossed it a few times.

Microphone sensitivity is all over the place. The voice shout game picked up air conditioning as "screaming" on some phones. Had to add noise floors and thresholds until it actually required yelling.

Phone sensors are noisy. The seesaw game jittered constantly because accelerometers aren't perfectly stable. We left it in. It's a feature now.

What's next for Lumen Lottery

Multiplayer brightness battles where players compete to keep screens brightest longest. Global leaderboards tracking worst/best brightness scores. Daily challenges with unique brightness targets. Community submitted minigames through pull requests. Wear OS version for smartwatch brightness wars. Lumen Lottery proves that even the simplest utility can become a memorable experience when you remove all practicality and add delightful frustration.

Please go to our Github repository and scan the QR Code in the README with the Expo Go app installed on your phone to test out our application. It will certainly be an experience.

Built With

Share this project:

Updates