gitclash review-commits --clash --date=today
defeat your colleagues with good commits.
A model wrote 99% of it. Good — that is the job now. gitclash grades the careful craft, not the author, slop gets roasted. Who prompts the best code?
Just login, I already have an account
“It works” is the lowest bar there is
Generated code passes review because it runs. Nobody checks whether it was built or just produced. gitclash does.
-
#412 Fix coupon lookup on cart update [A-]
-
#413 Refactor checkout + add reporting module [D ]
Not anti-AI. Anti-slop. Use every model you like — you still shipped it.
What the grade is made of
Three pillars, blended. The model reads the diff, not the commit message.
grading
- Qualityweight 55
- Naming, structure, validation, authorisation, N+1 risks, test coverage.
- Stack adherenceweight 30
- Did the work use the stack the repository is actually built on — or go around it by hand?
- Sizeweight 15
- Files touched, cross-checked against line churn, because a reviewable commit is a virtue.
A pillar that does not apply is not a zero — its weight is redistributed. A README fix is never marked down for skipping the framework.
The grading follows the repo
gitclash reads your manifest, works out what the repository is, and grades against that stack’s own idioms. A Django commit is never marked down for not being Laravel.
detected stacks
- Laravel TALLLaravel, Livewire, Tailwind, Alpine
- Earns marks: Eloquent relations, form requests, one Livewire component per concern.
- Marked down: Raw SQL in a controller, validation by hand, a <style> block, raw JS instead of Alpine.
- Laravel + ReactLaravel with Inertia or a React front end
- Earns marks: Inertia props off a thin controller, typed resources, shared layouts.
- Marked down: A second fetch layer calling the route the page was already handed.
- Next.jsReact on the Next.js App Router
- Earns marks: Server components by default, route handlers, next/image.
- Marked down: useEffect fetching what the server already had, ‘use client’ at the root.
- NuxtVue on Nuxt, Composition API
- Earns marks: <script setup>, useFetch, auto-imported composables.
- Marked down: Options API in a new file, axios sitting next to useFetch.
- SvelteKitSvelte on SvelteKit, file-based routing
- Earns marks: load functions, form actions, state kept in the component that owns it.
- Marked down: onMount fetching a page it could have loaded, a store invented for one prop.
- AstroAstro, server-rendered with islands
- Earns marks: Static by default, content collections, an island only where it clicks.
- Marked down: client:load on the whole page, a framework shipped to render static markup.
- Node / TypeScriptNode or browser TypeScript, no framework
- Earns marks: Types narrowed at the edges, errors handled, standard library first.
- Marked down: any and @ts-ignore to quiet the build, a helper that rewrites the standard library.
- DjangoPython on Django, batteries included
- Earns marks: Querysets with select_related, forms, migrations checked in.
- Marked down: Raw cursor SQL, an N+1 in a template loop, a model changed without a migration.
- FastAPIPython on FastAPI, typed end to end
- Earns marks: Pydantic models in and out, dependencies injected, async all the way down.
- Marked down: Bare dicts as responses, blocking I/O inside an async route.
- Ruby on RailsRuby on Rails, convention over configuration
- Earns marks: Scopes, strong parameters, includes, controllers that stay thin.
- Marked down: find_by_sql, business logic in a view, a callback chain nobody can trace.
- GoGo, standard library first
- Earns marks: Errors wrapped and returned, context passed through, table-driven tests.
- Marked down: An error assigned to _, panic used as control flow, an interface for one caller.
- TerraformInfrastructure as code in HCL
- Earns marks: Modules, variables, a plan that matches what is already in state.
- Marked down: Hardcoded ids and secrets, a resource clicked in by hand and never imported.
- Static HTML / CSSHand written HTML and CSS, no build step
- Earns marks: Semantic elements, labelled controls, CSS left to cascade.
- Marked down: Div soup, inline styles, ninety kilobytes of script for a dropdown.
Anything else is graded Generic — quality and docs only. The stack pillar is dropped rather than failed, and its weight moves to the pillars that do apply. Lock files, vendored directories and anything else the toolchain wrote are skipped before grading starts.
Achievements are the part people chase
Thirty-seven of them. They sit on your profile, outlive the day they were won, and the whole company sees who holds what.
trophy case
- Top of Leaderboard Top of the sheet for one whole day. It resets at midnight.
- Straight A A whole day at an A. Now do it twice.
- Three Figures A hundred commits in. Nobody has audited how many said “wip”.
- Se7en Seven days without a break. What’s in the box? More tickets.
- Forrest Gump Thirty days without stopping. Nobody was chasing you.
- I’ll Be Back Reverted a revert.
+ 16 hidden
You find out they exist by earning them.
notifications
Badges land on your phone via Pushover the moment they are earned.
certificates
Every badge has a public certificate page, one click to LinkedIn.
your clock
Timing badges read the author’s own timezone, not the server’s.
Reputation is company wide, not repo wide
One table per organisation, weighted by files changed. Moving between repos does not reset who you are.
standings
| # | grade | contributor | commits | the week | stack | rep |
|---|---|---|---|---|---|---|
| 01 | [A ] | j.reuter | 18 | ▂▅█▃▆▂▁ | [x][x][x][x] | 2,140 |
| 02 | [A-] | m.okafor | 11 | ▃▆▄█▂▁▁ | [x][x][~][x] | 1,884 |
| 03 | [B+] | s.lindqvist | 23 | █▇▅▆█▄▂ | [x][~][x][ ] | 1,612 |
| 04 | [C+] | d.aydin | 31 | █▄█▇█▅▃ | [x][x][~][!] | 1,109 |
| 05 | [D-] | p.vermeulen | 47 | █████▆█ | [!][ ][!][ ] | 402 |
Forty-seven commits and last place. Volume was never the score.
Put it on the office monitor
One read-only link, no account needed. It shows the standings and a line about what each person last pushed — and none of the material that line was written from.
shared sheet · read only
| [A-] | anna.k | One line, one locale, one test. Suspiciously professional. |
| [B+] | joschka | Validation done properly, then a country list typed out by hand. |
| [D ] | tim.m | 380 lines of jQuery to redo what a query scope already did. |
shows
Grades, counts, streaks, badges, repository names.
never shows
Commit messages, shas, findings, review narrative. Rows do not open.
The link is the whole authorisation — 32 random characters, revoked or reissued in one click. Turn the roasts off and it is figures only.
Free while the beta is open
Every repository, everyone in the organisation, the whole product. No card, no seat count, no trial quietly running out on you.
plan
€0
open beta · whole organisation
- Unlimited repositories and contributors
- Every check and stack, on every commit
- Achievements, certificates, notifications
- Company standings and the read-only office link
It stays free for as long as the beta runs. If that changes it will be said here first, and nobody is charged without being asked.
Now go and challenge your organisation.
Install it, pick the repositories it may read, and let them fight it out: who prompts the best code, and who walks off with the badges. Commits are graded as they land. Nothing is ever written back to your repos.