The problem
For years I had a recurring problem at work. When equipment gets
written off — laptops, phones, gear — it's often still in great
condition and more people want it than there are spots available.
I tried everything:
- Drawing names from a hat — people would "accidentally" draw again when no one was looking
- A shared spreadsheet — easy to manipulate, timestamps unreliable
- First come, first served — whoever lobbied hardest won
None of it felt truly fair. So I built a solution — for myself.
It started in Croatian
The first version was entirely in Croatian. It was a personal tool,
just for my workplace. I never planned to share it publicly.
Then I showed it to my wife. She's a professional translator, so
language is her thing. She looked at it and said: "This is really
good. Other people could have the same problem — translate it and make it
available to everyone."
That was the push I needed. So I translated everything, polished
the UI, and decided to launch it properly.
The solution
dibsl.com — create a timed event, share
a link, and whoever clicks fastest wins a spot.
- Server-side timestamps — no cheating
- Anonymous codes — transparent results without exposing emails
- Waitlist — if a winner steps down, next person gets notified
- Bot detection — clicks under 150ms are rejected
- Campaign system — organise multiple drops under one campaign
Tech stack
- Frontend: Next.js 16, Tailwind CSS
- Backend: Supabase (PostgreSQL + Realtime)
- Scheduling: QStash (Upstash) for precise event timing
- Emails: Resend
- Hosting: Vercel
The interesting technical challenge
The hardest part was ensuring fairness. Reaction time is calculated
server-side: reakcija_ms = server_click_time - actual_start_time
This means network latency is part of the game — just like in real
drops. But server-side ranking means no one can cheat with
autoclickers or scripts.
What's next
Currently in beta — free to try. Would love feedback on the fairness
angle and any use cases you can think of.
Top comments (0)