<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Ivanda</title>
    <description>The latest articles on DEV Community by David Ivanda (@davidivanda).</description>
    <link>https://dev.to/davidivanda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3989710%2F4f8bc908-1718-4f64-acad-a67da0797f2e.jpg</url>
      <title>DEV Community: David Ivanda</title>
      <link>https://dev.to/davidivanda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davidivanda"/>
    <language>en</language>
    <item>
      <title>My wife said "this is too good to keep to yourself" — so I translated my Croatian side project into a product</title>
      <dc:creator>David Ivanda</dc:creator>
      <pubDate>Wed, 17 Jun 2026 19:51:48 +0000</pubDate>
      <link>https://dev.to/davidivanda/i-built-a-fastest-click-wins-platform-because-drawing-names-from-a-hat-isnt-fair-g9a</link>
      <guid>https://dev.to/davidivanda/i-built-a-fastest-click-wins-platform-because-drawing-names-from-a-hat-isnt-fair-g9a</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;For years I had a recurring problem at work. When equipment gets &lt;br&gt;
written off — laptops, phones, gear — it's often still in great &lt;br&gt;
condition and more people want it than there are spots available.&lt;/p&gt;

&lt;p&gt;I tried everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drawing names from a hat&lt;/strong&gt; — people would "accidentally" draw 
again when no one was looking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A shared spreadsheet&lt;/strong&gt; — easy to manipulate, timestamps unreliable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First come, first served&lt;/strong&gt; — whoever lobbied hardest won&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of it felt truly fair. So I built a solution — for myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  It started in Croatian
&lt;/h2&gt;

&lt;p&gt;The first version was entirely in Croatian. It was a personal tool, &lt;br&gt;
just for my workplace. I never planned to share it publicly.&lt;/p&gt;

&lt;p&gt;Then I showed it to my wife. She's a professional translator, so &lt;br&gt;
language is her thing. She looked at it and said: &lt;em&gt;"This is really &lt;br&gt;
good. Other people could have the same problem — translate it and make it &lt;br&gt;
available to everyone."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That was the push I needed. So I translated everything, polished &lt;br&gt;
the UI, and decided to launch it properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.dibsl.com" rel="noopener noreferrer"&gt;dibsl.com&lt;/a&gt; — create a timed event, share &lt;br&gt;
a link, and whoever clicks fastest wins a spot.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server-side timestamps — no cheating&lt;/li&gt;
&lt;li&gt;Anonymous codes — transparent results without exposing emails&lt;/li&gt;
&lt;li&gt;Waitlist — if a winner steps down, next person gets notified&lt;/li&gt;
&lt;li&gt;Bot detection — clicks under 150ms are rejected&lt;/li&gt;
&lt;li&gt;Campaign system — organise multiple drops under one campaign&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js 16, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Supabase (PostgreSQL + Realtime)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduling:&lt;/strong&gt; QStash (Upstash) for precise event timing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emails:&lt;/strong&gt; Resend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The interesting technical challenge
&lt;/h2&gt;

&lt;p&gt;The hardest part was ensuring fairness. Reaction time is calculated &lt;br&gt;
server-side: &lt;code&gt;reakcija_ms = server_click_time - actual_start_time&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This means network latency is part of the game — just like in real &lt;br&gt;
drops. But server-side ranking means no one can cheat with &lt;br&gt;
autoclickers or scripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Currently in beta — free to try. Would love feedback on the fairness &lt;br&gt;
angle and any use cases you can think of.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.dibsl.com" rel="noopener noreferrer"&gt;dibsl.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>startup</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
