Paste any website link and get a Slop Score (0-100), the receipts behind it, and a shareable card showing whether it looks hand-coded or vibe-coded / AI-made.
Live at slopdar.com, with 1,600+ sites roasted so far.
I'm Mukund. I built Slopdar solo as a fun side project, and now the whole app is open source. The code is all here; the roast wall, the scan database and the domain stay with me. Run your own copy, poke at the detection rules, or send a PR.
No AI, no API bills. The scanner is pure pattern rules:
- Fetches the page HTML safely (SSRF guard, size and redirect limits).
- Runs it through the signal rules in
src/scanner/: AI copy tells, template fingerprints, generic layout smells, leftover boilerplate, tech stack detection. - Adds the weighted signals up into a 0-100 Slop Score, with evidence attached to every point.
- Takes a screenshot (Playwright) and renders a shareable roast card.
Every check is cached in MySQL and rate limited per IP through Redis.
Here's what a report looks like. Yes, it's our own site, and yes, it found actual lorem ipsum in production:
- The scanner and crawlable report pages with full receipts
- Fix-your-slop kit: quick wins plus a copy-paste AI prompt, and a re-scan delta to prove the score dropped
- Slop or Not, a daily game: guess built or slop, keep a streak, climb the leaderboard
- Founder profiles with dofollow links you earn by winning
- Share cards, launch badges and SEO field guides
You need Node 20+, MySQL 8 and Redis.
git clone https://github.com/Slopdar/slopdar.git
cd slopdar
npm install # also runs prisma generate
npm run playwright:install # headless Chromium for screenshots
cp .env.example .env # then fill DATABASE_URL and REDIS_URL
npm run prisma:migrate # create the tables
npm run devOpen http://localhost:3000 and scan something.
Google login (used by the daily game) is optional: set AUTH_SECRET,
AUTH_GOOGLE_ID and AUTH_GOOGLE_SECRET in .env and sign-in switches on by
itself. Everything else works without it. Your install starts with an empty
database; the 1,600+ roasts on slopdar.com are not included.
Next.js 15 (App Router) · React 19 · MySQL 8 + Prisma · Redis · Auth.js · Cheerio · Playwright. In production I run it natively with PM2 behind Nginx. No Docker, no external APIs, so hosting costs basically nothing beyond the domain.
The planning and reference docs I built Slopdar from live in docs/:
| Doc | What's in it |
|---|---|
| 00-overview | The idea, why it exists, direction |
| 01-product | Full product vision |
| 02-features | Complete feature list |
| 03-pages | All pages + page map |
| 04-tech-stack | The stack and why it's all free |
| 05-architecture | Folder structure + scanner pipeline |
| 06-scanner-logic | Every detection signal, explained |
| 07-costs | Costs (basically just the domain) |
| 08-branding | Name, tagline, voice |
| 09-roadmap | Status + build order |
slopdar/
├── docs/ # planning and reference docs
├── prisma/ # schema + migrations (MySQL)
├── scripts/ # cron jobs and maintenance scripts
├── src/
│ ├── app/ # Next.js pages + API routes
│ ├── components/ # UI components
│ ├── lib/ # shared helpers (env, auth, ssrf, game logic)
│ ├── scanner/ # the detection engine (signals, scoring, fixes)
│ ├── server/ # check orchestration, rate limit, screenshots
│ └── styles/
└── public/
Fork the repo, make a branch, open a PR against main. I review and merge
everything myself, so small, focused PRs land fastest. New detection signals
are the most fun thing to contribute, and every signal needs tests. Details in
CONTRIBUTING.md.
MIT for the code. The Slopdar name, the slopdar.com domain and the scan data on the live site are mine and not part of the license.
Yes, Slopdar runs on the slop stack. We know. 🌊

