Your app looks AI-generated. Dr. Unslopovich noticed.
Users don't hate your purple gradient. They hate what you did to the back button.
Dramatization. Your app may be worse.
npx unslopovichThen tell your agent:
/unslopovich review my app
Mobile apps, web apps, and websites. Same doctor, different reflexes: on a phone it checks you didn't build a website, and on the web it checks you didn't break one.
Dr. Unslopovich scanned 105,027 App Store reviews from 299 top apps. Exactly one mentioned a purple gradient. It was asking for one.
Here's what made people furious instead, in the 46,742 reviews rated 3 stars or lower:
- You made it slow. 4,326 reviews about lag, glitches, and crashes.
- You moved the button. 1,751. Telegram's Contacts tab. Chrome's back arrow. Instagram's hold to pause.
- You interrupted them. 1,148. Popups in the middle of ordering food.
- You hid everything. 859 said it was hard to find or use.
- You put AI where the feature was. 705. Gemini in the toolbar. Alexa in the search box.
- You never tried it on their phone. 345 about broken layouts.
Most recent reviews from the US and UK App Stores. Keyword matches, so treat them as rough. Themes can overlap.
So the doctor checks what users actually scream about first, and your gradient second.
The biggest bucket is the one no design review can see: you can't read lag off a screenshot. The doctor flags what code gives away, like lists that render every row up front, and every report says Not profiled until someone actually profiles it. A clean review is not a clean bill of health.
- Controls that moved, vanished, or do nothing
- AI features blocking the thing people came to do
- Numbers and labels that lie
- Website in a phone: hamburger menus, hero sections, fake tab bars
- Cards inside cards inside cards
- The tasteful default: white cards, thin gray borders, one blue accent, a colored dot beside every label
- Emoji pretending to be icons
- Stat tiles with numbers nobody measured
- The keyboard sitting on top of the input
- "Oops! Something went wrong"
- "Unlock your potential"
/unslopovich review the home screen diagnosis and a score out of 24, no edits
/unslopovich treat checkout diagnose, fix, verify, before and after
/unslopovich scan src/ quick code-only pass with the detector
/unslopovich chart write down your top tasks and brand rules once
/unslopovich follow-up home re-check and compare with the last visit
The chart lives in .unslopovich/chart.md. It's where you tell the doctor that the gradient is the brand, so it stops bringing it up.
Thirty-one rules that read SwiftUI, UIKit, Compose, Android XML, React Native, Flutter, Ionic, React, Vue, Svelte, Astro, HTML, CSS, and Tailwind classes. No model, no network, no dependencies. The skill runs it for you, and it works on its own too:
npx unslopovich detect src/
npx unslopovich detect --json ios/ android/ # for agents and CI
npx unslopovich detect --list-rules # every rule and its fixIt catches purple gradients and the project template's leftover purple, nested cards, decorative status dots, gradient text, glow shadows, emoji icons, unvirtualized lists, text that ignores the user's font size, disabled back gestures, hamburger menus, hover in a touch app, keyboards covering inputs, invented stats, and "Oops! Something went wrong".
On the web it adds clickable divs, removed focus rings, disabled zoom, images without alt text, tracked-caps eyebrows, icons in tinted squares, transition-all, cards that grow on hover, things that pulse forever, and "Trusted by 10,000+ teams".
It reads the nearest package.json to tell a phone app from a website, so hover is a problem in your Expo app and fine on your Next.js site. --platform web or --platform mobile settles it when it guesses wrong.
Exit code 2 means findings, so it can gate a pull request. Silence one line with // unslopovich-ignore <rule-id> (<!-- unslopovich-ignore <rule-id> --> in XML), or a whole rule in .unslopovich/config.json:
{ "ignoreRules": ["status-dot"], "ignorePaths": ["src/legacy/"] }It reads code, not screens. Most of what users complain about, a moved button, a popup in the way, a slow list, only shows up in the running app, which is why the skill looks at that first.
Three gradients, two hamburgers, no back button. I have questions.
This card contains a card. That card contains a sparkle. Remove all three.
"Seamless" is not a feature.
Sample verdicts. Yours may be worse.
Mobile: SwiftUI, UIKit, Jetpack Compose, React Native, Expo, Flutter, Ionic, Capacitor, Angular Native, and NativeScript.
Web: React, Next.js, Vue, Nuxt, Svelte, Astro, Angular, and plain HTML and CSS, Tailwind and shadcn/ui included.
It reads your theme, finds the problems, fixes the shared components first, and uses your platform's native building blocks. It won't move your users' favorite button without asking.
It also won't trade your purple gradient for the other default, the calm white one every model reaches for. A treated screen has to pass one test: cover the logo, and it should still look like your app.
Before a big change it tells you how sick the patient is (heavy, light, or healthy) and writes a five-line direction for you to approve. Healthy screens get told they're healthy and left alone.
Only want the bad news? Ask for a review and it stops at the diagnosis.
The doctor trained under good people. Impeccable by Paul Bakaus showed that a deterministic detector and design vocabulary beat a longer prompt. Hallmark by Together AI showed the value of a floor that never bends, defaults you can only waive on the record, and a fresh-eyed reviewer at the end. Unslop by Damir Sokolovsky (@heydamir) showed that deciding how much to change comes before changing anything, and that richness belongs in the content, not the chrome. Unslopovich is for the screens they leave to others: native mobile apps, and the parts of a web app people use every day.
Installs for Claude Code by default. The skill is SKILL.md plus a reference/ folder it reads on demand and the detector in scripts/. For any other agent that reads SKILL.md, point it at that agent's skills folder:
npx unslopovich --dir ~/path/to/skillsMIT
