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"); on spec.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

Share this project:

Updates

Submission history