Skip to main content

The problem

Most companies and projects gain content over time until no one person can understand all of it, or know where to spend effort improving it. The Django documentation has 279 pages and 584,234 words, not counting release notes. Reading them once takes a person about 39 hours. There are different kinds of content and different kinds of errors, and some pages are much more important than others. But which?

Why Jev fits

Jev turns large amounts of text into numbers. Instead of writing hundreds of manual rules, you can ask questions in natural language: Is this page out of date? Is it a tutorial or a reference page? Is it for beginners or experts? Jev answers dozens of these about a page in one request and returns a probability or a score for each, so you can sort, filter, and plot the results.

One request per page

Each request holds one page and 45 questions: Jev answers every question in a request in parallel, so more questions add little time: on one test page, the median request took 144 ms with 1 question and 151 ms with all 45. Questions do add cost, because their text counts as input tokens: here, the 45 questions are about 40% of the $0.10. This audit asks every question that might be useful, including ones that flag only a handful of pages. There is no limit on the number of questions, only on context length.

Visualizing the results

You can build any dashboard or visualization from Jev’s answers. Here, we plotted each page on an importance and quality grid, so it’s easy to see the pages that most deserve human attention: the low-quality, high-importance quadrant in the top left, labeled “Fix first”. The dashboard also lists quick wins: important pages that Jev rates trivial or small to fix. Depending on what matters to you, the grid could instead show fix effort, page complexity, or anything else.
The audit dashboard: importance plotted against quality for all 279 Django docs pages, with the fix-first list beside it.

What the questions found

Each problem and quick-win question is a yes-or-no flag. The left side of the chart counts how many of the 279 pages each one flagged. The right side shows how the pages split on four of the classification questions. Most Django pages are reference or explanation pages for intermediate developers, and quick to fix. The common flags are small jobs, like adding cross-links or a diagram, or explaining jargon. The serious flags fire on far fewer pages: 28 show a deprecated API, 18 may contain an incorrect fact, and 13 have out-of-date content. Those are short lists to check by hand.

Find the exact sentence

Each page in the audit has a deep scan button. It asks Jev which sentence holds each problem, and highlights that sentence. Here, it flags a sentence on the Django admin page with two typos: “it’s” should be “its”, and “as” should be “are”.
A deep scan of a paragraph on the Django admin page, with the sentence 'At it's simplest list_filter takes a list or tuple of field names to activate filtering upon, but several more advanced options as available.' underlined and tagged as a typo with a trivial fix.
Each finding links to its line on GitHub, so you can fix the typos in a pull request.

Build it

Get an API key

Create a key in the TypeSafe console.

Question types

Score, Choice and Noul, and when to use each.
This script is a cut-down version of the demo’s scoring pass. It asks 7 of the 45 questions, and the # ... comment marks where the other 38 go. It sends 12 pages at a time and lists the 20 pages with the highest priority. Its priority is simpler than the dashboard’s: (1 − overall quality) × importance, so its list can differ from the dashboard’s “Fix first” list.
audit.py
The pages come from the docs/ folder of django/django at commit ca3f31b (4 November 2026), under Django’s BSD license. Release notes are left out.