<?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: Ruturaj Sonkamble</title>
    <description>The latest articles on DEV Community by Ruturaj Sonkamble (@ruturaj_sonkamble_293f90b).</description>
    <link>https://dev.to/ruturaj_sonkamble_293f90b</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%2F3717063%2F0d1221a0-2fe8-47ed-9ce6-f241c0405332.jpg</url>
      <title>DEV Community: Ruturaj Sonkamble</title>
      <link>https://dev.to/ruturaj_sonkamble_293f90b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruturaj_sonkamble_293f90b"/>
    <language>en</language>
    <item>
      <title>I Built VERDICT: A Hackathon Portal That Shows Its Work</title>
      <dc:creator>Ruturaj Sonkamble</dc:creator>
      <pubDate>Sat, 03 Oct 2026 06:45:54 +0000</pubDate>
      <link>https://dev.to/ruturaj_sonkamble_293f90b/i-built-verdict-a-hackathon-portal-that-shows-its-work-1n1n</link>
      <guid>https://dev.to/ruturaj_sonkamble_293f90b/i-built-verdict-a-hackathon-portal-that-shows-its-work-1n1n</guid>
      <description>&lt;p&gt;A hackathon portal can collect projects, assign judges, and publish scores.&lt;/p&gt;

&lt;p&gt;But there is a harder question hiding underneath all of that:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When the results are announced, can anyone understand how they were reached—and verify that they haven’t quietly changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question was the starting point for &lt;strong&gt;VERDICT&lt;/strong&gt;, our submission and judging platform built for &lt;strong&gt;DOGFOOD 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We didn’t want to build just another project gallery with a leaderboard attached.&lt;/p&gt;

&lt;p&gt;We wanted to build a portal where the &lt;strong&gt;entire judging process is inspectable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🎥 &lt;strong&gt;Watch the 5-minute demo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/EuBbR1fjryw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; VERDICT&lt;br&gt;
&lt;strong&gt;Stack:&lt;/strong&gt; Django 5.2, Django REST Framework, PostgreSQL 16&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;br&gt;
&lt;strong&gt;Run locally:&lt;/strong&gt; &lt;code&gt;docker compose up --build --wait&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; [Add your public GitHub repository link here]&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The idea: make the whole judging journey visible
&lt;/h2&gt;

&lt;p&gt;A hackathon is really a chain of decisions.&lt;/p&gt;

&lt;p&gt;Participants register.&lt;br&gt;
Teams are formed.&lt;br&gt;
Projects are submitted.&lt;br&gt;
Judges review them.&lt;br&gt;
Scores are calculated.&lt;br&gt;
Results are published.&lt;/p&gt;

&lt;p&gt;If one step in that chain is unclear, inconsistent, or insufficiently protected, the final leaderboard inherits the problem.&lt;/p&gt;

&lt;p&gt;So we designed VERDICT as one connected workflow—from &lt;strong&gt;event setup to result verification&lt;/strong&gt;—rather than a collection of disconnected screens.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The portal should not only produce results. It should make those results understandable.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  T1: The essentials, done properly
&lt;/h1&gt;

&lt;p&gt;The first layer is everything an organizer and participant expects from a hackathon platform.&lt;/p&gt;

&lt;p&gt;Organizers can create events with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start and end dates&lt;/li&gt;
&lt;li&gt;Tracks&lt;/li&gt;
&lt;li&gt;Prizes&lt;/li&gt;
&lt;li&gt;Custom submission questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Participants can create teams using invite links and work on submissions throughout the event.&lt;/p&gt;

&lt;p&gt;A project submission can contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tagline and description&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Demo video&lt;/li&gt;
&lt;li&gt;Repository URL&lt;/li&gt;
&lt;li&gt;Live deployment URL&lt;/li&gt;
&lt;li&gt;Technology tags&lt;/li&gt;
&lt;li&gt;Track&lt;/li&gt;
&lt;li&gt;Answers to event-specific questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projects remain editable until the submission deadline.&lt;/p&gt;

&lt;p&gt;Once the deadline passes, the &lt;strong&gt;server rejects late submissions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That detail is important.&lt;/p&gt;

&lt;p&gt;A deadline displayed in the frontend is only a suggestion. A deadline enforced by the backend is an actual rule.&lt;/p&gt;

&lt;p&gt;VERDICT treats the submission deadline as a domain constraint, not a UI feature.&lt;/p&gt;

&lt;p&gt;The public gallery then makes submitted projects discoverable through search and track filters.&lt;/p&gt;


&lt;h1&gt;
  
  
  T2: Judging that respects boundaries
&lt;/h1&gt;

&lt;p&gt;The next challenge was judging itself.&lt;/p&gt;

&lt;p&gt;Organizers can invite judges and assign projects while considering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Judge workload&lt;/li&gt;
&lt;li&gt;Track scope&lt;/li&gt;
&lt;li&gt;Conflicts of interest&lt;/li&gt;
&lt;li&gt;Optional anchor projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rubrics can also contain weighted criteria, and organizers get a dashboard showing judging progress.&lt;/p&gt;

&lt;p&gt;But the most important part is not what judges &lt;strong&gt;can&lt;/strong&gt; see.&lt;/p&gt;

&lt;p&gt;It is what they &lt;strong&gt;cannot&lt;/strong&gt; see.&lt;/p&gt;

&lt;p&gt;A judge must not be able to inspect another judge's reviews. They also should not be able to access projects outside the tracks they are assigned to.&lt;/p&gt;

&lt;p&gt;And those restrictions are enforced on the backend.&lt;/p&gt;

&lt;p&gt;Changing a URL does not bypass them.&lt;/p&gt;

&lt;p&gt;Calling the API directly does not bypass them.&lt;/p&gt;

&lt;p&gt;The authorization rules live where the data is protected—not just where the data is displayed.&lt;/p&gt;

&lt;p&gt;That leads to a distinction that is easy to miss when building internal tools:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hiding data in the interface is not the same as protecting it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  The tricky part: scores aren't the whole story
&lt;/h1&gt;

&lt;p&gt;This was where the project became more interesting.&lt;/p&gt;

&lt;p&gt;Imagine two judges evaluating the same set of projects.&lt;/p&gt;

&lt;p&gt;One judge tends to give scores around 90.&lt;/p&gt;

&lt;p&gt;Another rarely gives anything above 70.&lt;/p&gt;

&lt;p&gt;Even when both judges are making reasonable decisions, their personal scoring habits can affect the final ranking.&lt;/p&gt;

&lt;p&gt;A naive average treats both scoring styles as directly comparable.&lt;/p&gt;

&lt;p&gt;We wanted VERDICT to account for that.&lt;/p&gt;

&lt;p&gt;We model a review conceptually as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;observed score = project quality + judge offset + noise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;judge offset&lt;/strong&gt; captures a judge's general tendency to score higher or lower.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;noise&lt;/strong&gt; represents the natural variation that exists in individual reviews.&lt;/p&gt;

&lt;p&gt;Instead of assuming every raw score is directly comparable, VERDICT can estimate and compensate for systematic differences in judging style.&lt;/p&gt;

&lt;p&gt;The point is not to tell a judge what a project &lt;em&gt;should&lt;/em&gt; have scored.&lt;/p&gt;

&lt;p&gt;The point is to make the final result less dependent on whether a particular judge is naturally stricter or more generous.&lt;/p&gt;

&lt;p&gt;That makes the ranking more about &lt;strong&gt;relative project quality&lt;/strong&gt; and less about the quirks of individual scoring habits.&lt;/p&gt;




&lt;h1&gt;
  
  
  T3: From scores to something people can actually inspect
&lt;/h1&gt;

&lt;p&gt;A leaderboard is easy to display.&lt;/p&gt;

&lt;p&gt;A trustworthy leaderboard is harder.&lt;/p&gt;

&lt;p&gt;For every result, we wanted the path from submission to ranking to be explainable.&lt;/p&gt;

&lt;p&gt;That means being able to answer questions such as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who judged this project?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which rubric criteria were used?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How were the scores combined?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did judge calibration affect the result?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Did the underlying review data change after judging?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of treating the leaderboard as a final number, VERDICT treats it as the output of a process that can be examined.&lt;/p&gt;

&lt;p&gt;This is where the project moves from being a CRUD application to something closer to an &lt;strong&gt;auditable system&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  T4: Results should be verifiable
&lt;/h1&gt;

&lt;p&gt;There is another problem with published results:&lt;/p&gt;

&lt;p&gt;Even if the original calculation was correct, how do you know the underlying data wasn't changed later?&lt;/p&gt;

&lt;p&gt;VERDICT addresses this by treating the judging history as something that should be possible to verify.&lt;/p&gt;

&lt;p&gt;The system keeps the relevant judging information available as part of the result-generation pipeline, so the published outcome can be traced back to the reviews that produced it.&lt;/p&gt;

&lt;p&gt;The philosophy is straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just show the answer. Show enough of the process to explain the answer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That principle shaped both the architecture and the UI.&lt;/p&gt;




&lt;h1&gt;
  
  
  Building it with Django
&lt;/h1&gt;

&lt;p&gt;The backend is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Django 5.2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Django REST Framework&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL 16&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Django gave us a strong foundation for modeling the domain: events, teams, submissions, judges, assignments, rubrics, reviews, and results.&lt;/p&gt;

&lt;p&gt;DRF provides the API layer, while PostgreSQL handles the underlying relational data.&lt;/p&gt;

&lt;p&gt;One architectural decision we kept coming back to was this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important rules belong in the domain and backend—not only in frontend flows.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Submission deadlines, judge visibility, track boundaries, and permissions all need server-side enforcement because those are business rules, not presentation rules.&lt;/p&gt;




&lt;h1&gt;
  
  
  What we learned
&lt;/h1&gt;

&lt;p&gt;The most interesting part of building VERDICT wasn't creating another hackathon portal.&lt;/p&gt;

&lt;p&gt;It was thinking about what happens &lt;strong&gt;after&lt;/strong&gt; everyone clicks "Submit".&lt;/p&gt;

&lt;p&gt;A conventional portal answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What did the judges score?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A more useful system also answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why is this the result, and can we verify it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That shift changes how you design the application.&lt;/p&gt;

&lt;p&gt;Authorization becomes part of the judging model.&lt;/p&gt;

&lt;p&gt;Deadlines become backend invariants.&lt;/p&gt;

&lt;p&gt;Scoring becomes a data-modeling problem rather than just an arithmetic operation.&lt;/p&gt;

&lt;p&gt;And the leaderboard becomes the end of an auditable workflow instead of a number rendered on a page.&lt;/p&gt;




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

&lt;p&gt;There is still plenty we would like to explore.&lt;/p&gt;

&lt;p&gt;More advanced calibration methods could improve consistency across larger judging panels.&lt;/p&gt;

&lt;p&gt;We could also expose more of the result-generation process publicly, provide richer audit trails, and make the system easier to operate for hackathons with thousands of participants and judges.&lt;/p&gt;

&lt;p&gt;But the core idea will stay the same:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A judging system should be able to show its work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is what we built with VERDICT.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;--wait&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; VERDICT&lt;br&gt;
&lt;strong&gt;Stack:&lt;/strong&gt; Django 5.2 · Django REST Framework · PostgreSQL 16&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/rajj28/verdict" rel="noopener noreferrer"&gt;https://github.com/rajj28/verdict&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks for reading—and if you're building evaluation, ranking, or judging systems, we'd love to hear how you approach the problem of making results explainable and trustworthy.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
