The problem
Specs, PRDs and prompts are full of words that feel precise and are not: "fast", "simple", "should", "user-friendly", "etc." They get handed to a coder or a coding agent, and the build goes wrong because nobody said what "fast" means. Writers do not see their own vague words.
What it does
Paste a spec. Jitters, an anxious monkey in a blue hoodie who codes, reads it as you type and sweats harder at every vague word.
- Every vague word is marked, with the one question that would fix it: "How fast is 'fast'? Give a number, such as under 200 ms on a phone."
- Five kinds: speed, size and effort, hedges ("should", "might", "try to"), quality buzzwords ("intuitive", "scalable") and open ends ("etc.", "and so on", "TBD").
- A word followed by a number with a unit ("fast: under 200 ms") does not count.
- Sweat goes from 0 to 5 by vague words per 100 words; at 4 and 5 he shakes. Click a word and it is selected in your text.
- Replace the vague words with numbers and facts, and the sweat dries up until he says: "I can build this. I'm... not even sweating."
In the demo, the sample spec has 48 vague words (sweat 5). A habit-tracker spec, fixed one sentence at a time, goes 5, 5, 5, 5, 4, 2, 0.
Who it is for
Anyone who writes a spec, PRD or prompt for a coder or a coding agent: indie devs, product people, and everyone in this challenge writing their own prd.md.
How it was built
From an empty folder with the Devpost Learn skill pack, run in a coding agent, planning before any code: 1-start wrote the learner profile, 2-scope scope.md (the smallest thing that works: one static page, no backend, no key), 3-prd prd.md (the journey, screens and states), 4-spec spec.md (a pure analyze(text), the page, the tests), and 5-build two slices, tests first. All three planning files are in the repo under devpost/.
Plain HTML, CSS and JavaScript, no dependencies, no build step, no network call: nothing you paste leaves the tab. node --test: 12 pass.
What I learned
- Planning first changed the build: the spec fixed
analyze(text)as a pure function before any page existed, so its tests came first: whole words only, phrases, a quantified word not counted, calm at zero, sweat 5 on the sample. - The tool caught its own plan: run on our
scope.md, Jitters reads sweat 2 ("fast", "simple", "small", "and more"); onspec.md, sweat 1. Even a careful plan has vague words. - A word list needs exceptions, or it nags: "fast" before a number with a unit is already precise, and "breakfast" is not "fast". Both are tests now.
- Checking in a real browser found what the tests could not: the headline pushed Jitters below the fold, and his panel stretched with the list. He now stays in view while you scroll, as a bar on top on a phone.
Try it
https://vibeoverflow.fun/sweat/ (free, no login). Source, MIT: https://bitbucket.org/jittersvibecoder/sweat-test
Log in or sign up for Devpost to join the conversation.