← Back to Projects

leptons1618@anishgiri.dev:~/projects/artifact-report cat project.toml

DevTools 2026 Active development

Proofline

Proofline turns an audit or investigation into one self-contained HTML file — three visual modes, a print-safe layout, and an embedded JSON block that agents can parse and that never drifts from the prose.

category
DevTools
year
2026
status
Active development
stack
5 tools
highlights
5
write-up
4 min read

01Highlights

  1. One 670-line renderer that uses nothing but the Python standard library — no npm, no build step, and no network request at render time.
  2. Three visual modes — `index`, `signal` and `essay` — picked from the shape of the findings, or pinned with `--variant`.
  3. Every report embeds a `<script type="application/json" id="report-data">` block that the human sections mirror 1:1; `build` refuses to write the file if the two drift apart.
  4. Severity is a word before it is a colour. `CRITICAL`, `MAJOR`, `MINOR`, `NOTE` and `PASS` all survive a black-and-white print.
  5. Nothing is marked `PASS` without naming the check that passed, and no score is emitted unless the report ships the rubric it was calculated from.

02Built with

  • 01Python
  • 02HTML
  • 03CSS
  • 04JSON
  • 05Markdown

03Case study

September 21, 2026 4 min read 824 words

Proofline — Reports That Read Like Documents and Parse Like Data

Why the fix for a report nobody can read and a report nobody can parse is to write one of them and project it twice.

The problem

A report has two readers. The person needs a document they can scan and act on; the agent needs structured data it can parse without guessing. Existing tooling forces the choice — JSON and Markdown are machine-readable and ugly, styled HTML and PDF are readable and opaque — so the workaround is maintaining a human document and a machine copy side by side, which agree on the day they are written and quietly drift apart after that.

The solution

Normalize the content once, then render the human view from it and embed that same normalized object as a JSON block in the page. A single 670-line Python renderer using only the standard library produces one self-contained HTML file in three visual modes — index, signal and essay — chosen from the shape of the findings or pinned explicitly, with severity carried by a text label before any colour and no score emitted unless the report ships the rubric it came from.

Outcomes

  • One 670-line renderer on the Python standard library alone — no npm, no build step, no network request, and no external asset in the output.
  • Three visual modes (`index`, `signal`, `essay`) selected from the findings' shape, or pinned with `--variant` when the subject demands one.
  • The embedded `#report-data` JSON block and the visible findings are checked against each other at build time, so drift is a failed build rather than a silent divergence.

+2 more in the write-up

Inside the write-up

  1. A report has two readers
  2. So build one thing and project it twice
  3. Three modes, chosen by shape
  4. Severity is a word before it is a colour
  5. Zero dependencies is a constraint, not a boast
  6. What it deliberately does not do
  7. Where it lives
Read the full case study →

Related projects