Something went wrong. Try again.
this post sux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <title>sux</title> <link rel="stylesheet" href="sidebar.css"></head><body> <header> <h1>sux</h1> <label class="master" title="One press turns all filtering off"> <input type="checkbox" id="enabled"> <span>Filtering on</span> </label> </header>
<section> <label class="master" title="Hidden posts collapse to a one-line note you can correct, instead of vanishing"> <input type="checkbox" id="peek"> <span>Peek hidden posts</span> </label> </section>
<section id="permBanner" hidden> <p>Firefox hasn’t granted sux access to <b>bsky.app</b> and <b>api.typesafe.ai</b> yet — the filter can’t run until it does.</p> <button id="grantPerms" type="button">Grant site access</button> <p class="hint" id="permHint"></p> </section>
<section> <div class="rule-title"><span>Keep posts that lean toward…</span></div> <div id="rowsA"></div> <button id="addA" type="button" class="add">+ add clause</button> <p class="hint" id="ruleAHint"></p> </section>
<section> <div class="rule-title"><span>Keep posts that…</span></div> <div id="rowsB"></div> <button id="addB" type="button" class="add">+ add clause</button> <p class="hint" id="ruleBHint"></p> </section>
<section> <div class="rule-title"><span>Hide posts like these</span></div> <div id="rowsE"></div> <button id="addE" type="button" class="add">+ add rule</button> <p class="hint" id="ruleEHint"></p> </section>
<section> <label for="combine">When multiple clauses are on, a post passes if it meets</label> <select id="combine"> <option value="and">all enabled clauses (AND)</option> <option value="or">any enabled clause (OR)</option> </select> </section>
<section id="modeSection" hidden> <div class="rule-title"><span>How posts are judged</span></div> <label class="mode" title="Everything stays on your machine; no network calls"> <input type="radio" name="mode" value="local"> <span><b>Local model</b> — free, private, ~200 MB one-time download. No network calls.</span> </label> <label class="mode" title="TypeSafe's Jev judges posts; needs an API key below"> <input type="radio" name="mode" value="jev"> <span><b>Jev</b> — most accurate, needs a TypeSafe API key.</span> </label> <label class="mode" title="Local first; Jev only for posts the local model is unsure about"> <input type="radio" name="mode" value="both"> <span><b>Both</b> — local first, Jev for the unsure ones (uses a key when set).</span> </label> <div class="row" id="modelRow" hidden> <button id="initModel" type="button">Download model</button> <span class="hint ok" id="modelStatus"></span> </div> <p class="hint" id="modeHint"></p> </section>
<section> <label for="apiKey">TypeSafe API key</label> <div class="row"> <input type="password" id="apiKey" autocomplete="off" placeholder="ts-…"> <button id="testKey" type="button">Test</button> </div> <p class="hint" id="testResult"></p> </section>
<footer> <p id="status">judged <b id="stJudged">0</b> · hidden <b id="stHidden">0</b> · waiting <b id="stWaiting">0</b></p> <p id="backends" class="note">local <b id="stLocal">0</b> · escalated <b id="stEsc">0</b> · Jev calls <b id="stJev">0</b></p> <p class="note" id="diag"></p> <p class="error" id="lastError"></p> <p class="note"> Posts stay hidden until Jev judges them. Judgments are cached, so reposts and re-scrolls cost nothing. With the filter off, the page is left untouched. </p> </footer>
<script src="shared.js"></script> <script src="theme.js"></script> <script src="sidebar.js"></script></body></html>