← Work/Rewards hub · Live

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
  • Next.js 16
  • React 19
  • three.js
  • Tailwind v4
  • MySQL
  • Zod
  • Kick API
  • Discord OAuth + bot
  • Netlify
Home: playable RAVO slot hero with real 3D props

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

01

Home

Playable RAVO slot hero, Kick clips strip, leaderboard podium, partner cards and stream status.

02

Leaderboard

Points board with podium, countdown, search, rules and a browsable monthly archive.

03

Tournaments

Solo or duo knockout brackets filled from Kick chat, with a tall overlay for OBS.

04

Bonus hunts

Live hunt tracker with stats, biggest multi and break-even multi.

05

Challenges & VIP

"First to hit Nx wins $X" challenges and VIP transfer applications, reviewed in Discord tickets.

06

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.