Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 22 additions & 20 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -103,16 +103,17 @@ <h1>Steer code with rules, not with token maxxing.</h1>
<div class="shell">
<header class="sec-head">
<p class="eyebrow"><span class="eyebrow-dot" aria-hidden="true"></span>Demo</p>
<h2>Finding and fixing AI-slop commentary</h2>
<p class="sec-lead">Silent action loop across OpenCode, Neovim, and VS Code: paste an AI-slop comment, get a finding, apply the fix.</p>
<h2>Same <code>no-ai-slop</code> hit in three clients</h2>
<p class="sec-lead">OpenCode writes a matching comment and gets the diagnostic. Neovim shows it as virtual text. VS Code clears it with a code action. Silent, ~32s.</p>
</header>

<figure class="demo-frame">
<video controls playsinline preload="metadata" width="100%"
aria-label="Silent demo: OpenCode, Neovim, and VS Code detect and fix an AI-slop comment">
poster="./assets/demo-slop-triptych-poster.jpg"
aria-label="Silent screencap: OpenCode, Neovim, and VS Code on the same no-ai-slop finding">
<source src="./assets/demo-slop-triptych.mp4" type="video/mp4">
</video>
<figcaption>OpenCode → Neovim → VS Code · ~32s · no voiceover</figcaption>
<figcaption>OpenCode → Neovim → VS Code · ordinary LSP diagnostic</figcaption>
</figure>
</div>
</section>
Expand Down Expand Up @@ -169,28 +170,29 @@ <h2>Findings on the line: same surfaces your client already has</h2>
<div class="split-copy">
<p class="eyebrow"><span class="eyebrow-dot" aria-hidden="true"></span>Model shape</p>
<h2>Classifier, not chat</h2>
<p class="sec-lead">Chat reviews emit prose about the whole file. Jev answers one rule question about one candidate line: a typed value and a confidence <code>p</code>.</p>
<ul class="plain">
<li><strong>One question → one answer</strong>: pass/fail or typed value + probability floor.</li>
<li><strong>Rules in the repo</strong>: <code>.jev/rules/*.json</code>, versioned like code.</li>
<li><strong>Semi-deterministic</strong>: pattern exact; judgement must clear the floor before publish.</li>
<li><strong>One question → one answer</strong>: <code>pass</code>/<code>fail</code> (or another typed value), plus <code>p</code>.</li>
<li><strong>Rules in the repo</strong>: <code>.jev/rules/*.json</code>, reviewed like code.</li>
<li><strong>Gate before publish</strong>: regex picks the line; <code>p</code> must clear the rule <code>floor</code> or nothing is emitted.</li>
</ul>
</div>
<div class="compare-stack">
<div class="chat-reject">
<p class="compare-label">prose · whole file · every turn</p>
<p class="compare-label">chat review · reject</p>
<p class="chat-blob">Here are several thoughts about this file… consider error handling on line 412, also naming, also whether the module boundary is right, also…</p>
</div>
<div class="win win-answer">
<div class="win-chrome">
<span class="traffic" aria-hidden="true"><i></i><i></i><i></i></span>
<span class="win-title">Jev rule answer</span>
<span class="win-meta">typed · one line</span>
<span class="win-title">Jev decide</span>
<span class="win-meta">one line · one rule</span>
</div>
<pre class="win-body">{
<span class="k">"value"</span>: <span class="amb">"fail"</span>,
<span class="k">"p"</span>: <span class="n">0.91</span>
}</pre>
<div class="win-foot">typed value · one line · clears rule floor</div>
<div class="win-foot">publish only if p ≥ floor (e.g. 0.8)</div>
</div>
</div>
</div>
Expand Down Expand Up @@ -231,8 +233,8 @@ <h2>The loop</h2>
<div class="shell">
<header class="sec-head">
<p class="eyebrow"><span class="eyebrow-dot" aria-hidden="true"></span>Economics</p>
<h2>Why local / cheap models work here</h2>
<p class="sec-lead">Rules carry conventions; the model answers about one candidate line. No matching pattern → <strong>no model call</strong>.</p>
<h2>One line costs less than a whole-file chat</h2>
<p class="sec-lead">Patterns decide which lines run the model. No match → <strong>no call</strong>. A match asks about that line only, so a small/local decide model is enough.</p>
</header>

<div class="cost-card">
Expand All @@ -246,27 +248,27 @@ <h2>Why local / cheap models work here</h2>
<thead>
<tr>
<th scope="col"></th>
<th scope="col">rules pass</th>
<th scope="col">chat review (same file)</th>
<th scope="col">jev rules pass</th>
<th scope="col">whole-file chat review</th>
</tr>
</thead>
<tbody>
<tr class="mark">
<th scope="row"><code>server.rs</code> ~2.6k lines</th>
<td>~5.3k in / 345 out · 2 findings · <strong>~$0.00022</strong></td>
<td>~30.5k in / 9 out · 0 findings · <strong>~$0.00306</strong></td>
<td>2 findings · <strong>~$0.00022</strong><br><span class="dim">~5.3k in / 345 out</span></td>
<td>0 findings · <strong>~$0.00306</strong><br><span class="dim">~30.5k in / 9 out</span></td>
</tr>
<tr>
<th scope="row">30 Rust docs</th>
<td><strong>~$0.0034</strong> · 20 calls</td>
<td><strong>~$0.0034</strong> · 20 decide calls</td>
<td>—</td>
</tr>
</tbody>
</table>
</div>
<p class="cost-cap">decide <code>jev-1.13</code> vs chat review <code>gemini-2.5-flash-lite</code>. PoC: accuracy from steering, not token maxxing.</p>
<p class="cost-cap"><code>jev-1.13</code> decide vs <code>gemini-2.5-flash-lite</code> chat on the same file. Measured in this repo.</p>
</div>
<p class="pull">Accuracy from steering, not from burning tokens.</p>
<p class="pull">Cheaper because most lines never call the model.</p>
</div>
</section>

Expand Down
Loading