RAVONEVERSLEEPS
The rewards hub for Kick streamer Ravo: a playable slot machine in the hero, real three.js 3D props, Kick clips played on the site, and a monthly leaderboard that syncs itself.
- Client
- RAVO · Kick streamer
- Partner
- Qzino & Flush
- Year
- 2026
- Role
- Design & development
- Live site
- ravorewards.org ↗
- Next.js 16
- React 19
- three.js
- Tailwind v4
- MySQL
- Zod
- Kick API
- Discord OAuth + bot
- Netlify

01Overview
Ravo's viewers sign up on Qzino with his code, play, and compete for prizes. Before the site, everything lived in Discord messages and screenshots.
I designed and built the whole hub: the brand look around his pug mascot, the public pages, the admin panel, the Discord bot and the Kick integration. It runs on Netlify with a MySQL database.
02What I built
Home
Playable RAVO slot hero, Kick clips strip, leaderboard podium, partner cards and stream status.
Leaderboard
Points board with podium, countdown, search, rules and a browsable monthly archive.
Tournaments
Solo or duo knockout brackets filled from Kick chat, with a tall overlay for OBS.
Bonus hunts
Live hunt tracker with stats, biggest multi and break-even multi.
Challenges & VIP
"First to hit Nx wins $X" challenges and VIP transfer applications, reviewed in Discord tickets.
Admin
Everything editable from one panel, and every change written to an audit log.
03Album · 8 screens
Click any screen to open it. Leaderboard and store screens use sample data; player names are hidden.
04Problems I solved
01A leaderboard that never goes blank
The problem
The data comes from an outside service that can be slow or down. An empty leaderboard during a stream looks broken.
The fix
A scheduled function syncs every 8 hours through a protected route. A failed sync keeps the last good snapshot, and the page shows a delay notice instead of an empty table.
02Tournaments straight from chat
The problem
Viewers shouldn't need an account or a form to join a bracket in the middle of a stream.
The fix
Opening registration subscribes the channel to Kick's chat webhook. Every !join is recorded on the server, the bracket fills itself, and the overlay updates live in OBS.
03One Discord app for everything
The problem
Sign-in, username checks, challenge proof and VIP requests all needed a human to review them.
The fix
One Discord app handles sign-in and a ticket bot. The bot opens a private channel for each request, and the admin's decision is posted back in the ticket.
04MySQL on serverless, on a free tier
The problem
The database allows very few connections, and frozen serverless functions can hold them open.
The fix
Each session sets a short wait timeout, and migrations can apply themselves on first use, so a deploy works even before the migration script runs.
Next case study
ONO DEGEN TUNNEL →
Booking new projects
Got a streamor a store?Let's build it.
Tell me what you have in mind. You'll get a plan and a timeline before anything starts.
