The lab

GitJudged

A team hackathon app that scores your commit message from 1 to 10, lets a bot roast it in a Discord-style chat, then commits only once you confirm.

React, TypeScript, Node.js, GitHub API, Gemini

Tech stack

  • React 19
  • TypeScript
  • Vite
  • Tailwind CSS
  • oxlint
  • Node.js
  • GitHub REST API
  • Gemini

My part

A four-person hackathon team project.

What it does

  • Type a draft commit message and get a score from 1 (good) to 10 (terrible), in a Discord-style chat channel
  • DramaBot posts an over-the-top reaction in a random comedic style, such as a sports commentator or a breakup text, building to an all-caps meltdown at 10
  • The commit only goes to GitHub after you confirm
  • Sign in with GitHub, list your repos or create a throwaway one, browse commit history, and read or commit a single file
  • Real commits from your own clones: it shows your changed files, pulls newer commits first, runs add, commit and push, and undoes the commit if the push fails
  • A shared leaderboard of the 10 worst pushed messages, shown as a live Hall of shame
  • Drama stats: today's average score with a comment on how it compares to yesterday, and a chart of the last 24 hours
  • A feed of every pushed commit and its roast, kept in the browser
  • Shareable roast cards: any roast becomes an image you can download or copy, or copy as text
  • A guardrail when picking a repo: names like demo or sandbox are recommended, and names like prod or payments are flagged as dangerous

How it works

  • Scoring is rule-based and shared between the backend and the frontend's mock mode. Short messages, vague verbs like "fix" or "wip", filler, buzzwords, repetition, length and a missing ticket number all push the score up. Mentioning a ticket or a file name brings it down.
  • GitHub sign-in uses state and PKCE checks, the GitHub token never reaches the browser, and every write needs a CSRF token.
  • The roast prompt guards against commit messages that try to give the bot instructions. Without an AI key it falls back to canned reactions.
  • The backend is a plain Node.js server with no npm dependencies, tested with Node's built-in test runner. There's no database: sign-in lives in an encrypted cookie and the leaderboard in a JSON file.
  • The frontend has a mock API mode, so it can run without the backend.