# Under the Limit - cut a college application essay to its word limit without cutting the writer's voice > A word-limit editor for application essays: personal statements (commonly 650 words), "why this college" supplements (often 250) and short answers (often 150 or less). Paste the draft and the page counts it the way most application forms count, splits it into paragraphs P1, P2... and draws each paragraph's share of the budget as a stack against the limit line, lists filler it can cut in one click (F#: "in order to" -> "to", "I think that", intensifiers such as "really" and "very"), flags stock phrases (G#: cliches, college-brochure language, template formulas, announced morals, wrap-up signposts), notes structural checks (X#: a stock opener, a signpost closer, a 45-word sentence, a paragraph holding over a third of the words, four-word runs repeated across paragraphs) and suggests a verdict from the numbers alone - free. Two metered tasks: `trim` returns cuts as exact find/replace pairs that the page lays onto the draft as accept-or-reject before/after edits with a live recount, and `voice` returns the lines that could be in anyone's essay, each with a question only the writer can answer. Nothing is written for the student: cuts only delete or tighten their own words, and every reply is checked against the draft. URL: https://under-the-limit.skillsafe.ai/ API: https://under-the-limit.skillsafe.ai/api.html Built on the SkillSafe skills @neolabhq/docs-3awrite-concisely (concise writing rules) and @hardikpandya/stop-slop (generic and template prose patterns). ## What runs free in the browser (essaykit.js, essayview.js) - Word count: runs of characters between spaces that contain a letter or digit; an em or en dash between two words splits them. Application forms differ by a word or two, so the page says to leave a little room. - Paragraphs split on blank lines (or on single line breaks when the draft has none). Sentences split on . ! ? with common abbreviations re-joined. - Suggested verdict for `trim`: up to 15% over the limit is `fits`, up to 40% `tight`, beyond that `restructure`. For `voice`: under 15% of sentences carrying a stock phrase is `yours`, under 50% `mixed`, otherwise `generic`. A reply may be more severe than the page, never milder. - Free cuts are applied by position, with the next word capitalised when a cut opens a sentence; there is an undo. - Exports: Markdown (the count, every cut with accepted or not, the cut version, the voice lines and questions), the cut essay as .txt, the cuts as CSV, everything as JSON. ## The metered tasks (model gpt-terra) - `trim` - inputs `kind`, `limit`, `words`, `over_by`, `paragraphs` and `checks` (JSON-encoded), optional `prompt`, `keep` (lines not to cut), `note`, `flags_first` (lines from a voice read to cut first). Returns `verdict` (`fits` / `tight` / `restructure`), `title`, `summary`, `cuts` [{id, para, find, replace, kind, why}] with kind filler / tighten / redundant / drop-sentence / merge, `keeps`, `restructure` [{para, action, why}], `voice_notes`, `words_after`. The page checks every `find` is in the draft word for word, that no replacement adds words the draft does not contain, that no cut touches a kept line, that the verdict is not milder than the page's floor or than the count after the cuts allows, and recounts the result. - `voice` - the same inputs. Returns `verdict` (`yours` / `mixed` / `generic`), `title`, `summary`, `lines` [{id, para, quote, issue, why, ask}] with issue stock-phrase / brochure / formula / vague / telling / tidy-moral / signpost, `strongest` [{para, quote, why}], `cut_first` (line ids). The page checks every quote against the draft and reports how many of its own stock-phrase flags the read covered. - House rules: never add content (no new sentence, detail or claim); keep the writer's voice; exact quotes; protect kept lines; never say or estimate whether anything was written by AI and never mention detectors; name only the colleges, people and places the input names. ## Notes - Sample essays, students and colleges are made up. - Saved drafts go to the signed-in user's own collection (`drafts`), only when they press save.