Three transit agencies are testing simpler late-night routes.
JEV FOR SEMANTIC PAGE CLEANUP
Jev Ad Blocker
Code finds ad-shaped page elements. Jev decides which ones are actually advertisements. Application policy decides what to hide.
A simulated webpage with real Jev decisions. This is not a browser extension.
01 / LIVE PAGE
Clean a page with one Jev request
Scan the simulated page, inspect which elements look like ads, then hide or show them locally.
Customize page · edit candidate evidence
Editorial cards stay deterministic and are never submitted. Editing candidate evidence clears the scan.
How cities are redesigning public space
From shaded sidewalks to quieter intersections, a new generation of street projects is changing how neighborhoods meet.
On weekday mornings, the old loading lane on Alder Street now fills with café tables, planters, and cyclists moving at walking speed.
The project is one of dozens testing a simple idea: streets can carry movement while also making room for rest, conversation, and play.
Researchers caution that design alone cannot settle questions of access. The strongest plans pair physical changes with long-term local stewardship.
Demo application policy — not a TypeSafe recommendation.
Changing this value reuses the five saved probabilities and makes no model request.06 / JEV DECIDES, CSS ACTS
Semantic classification and page mutation stay separate
Estimates one thing
For each bounded candidate: “Is this a paid advertisement?” The output is P(ad), not a selector or an instruction to hide.
Owns every action
Code applies the threshold, chooses Original, Highlight, or Hide, collapses matching regions, and restores them without another model request.
Advanced
05 / WHY CODE FINDS CANDIDATES FIRST
Narrow the search space before semantic judgment
Find ad-shaped regions
- Ad-like labels
- Sponsored markers
- Suspicious wrappers
- Known ad-shape structural signals
- Stable candidate IDs
Send descriptions, not a webpage
- Kind and label
- Short visible text
- Link host
- Structural hints
- Page position
This demo uses fixed simulated fixtures so extraction remains verifiable. It does not claim to be a general-purpose DOM detector, and it never sends raw HTML, scripts, cookies, or a whole page source to Jev.
Implementation
02 / USE ON REAL WEBSITES
Run the community browser extension
The live demo above runs on a fixed simulated page through this site's server API. For real websites, realZachi/typesafe-adblock ↗ is a separate, bring-your-own-key Chrome extension. Review its source and permissions before installing it.
- Get the verified source.
Clone the repository and check out the version reviewed here. The repository root contains
manifest.jsonand the referencedsrc/files; this version needs no npm install or build step.Terminal · source checkoutGitgit clone https://github.com/realZachi/typesafe-adblock.git cd typesafe-adblock git checkout 7e067d243d87b7fe4d511653c0ddcd77b9beee18 - Load it locally.
In Chrome, open
chrome://extensions, turn on Developer mode, choose Load unpacked, and select the clonedtypesafe-adblockfolder containingmanifest.json. This is a source install; we have not verified a Chrome Web Store listing for this project. - Configure your own key.
Open the extension popup, enter your own TypeSafe API key there, and select Test to check access. Then browse an HTTP(S) website and use the popup's threshold and Remove or Highlight only mode. Model calls use your key and may incur charges. Do not paste a key into this website or the repository source.
Source checked at realZachi/typesafe-adblock@7e067d243d87b7fe4d511653c0ddcd77b9beee18. Installing the extension is optional; it is not required for the demo above.
03 / TWO DISTINCT DATA FLOWS
What runs locally, and what leaves the browser?
Fixed page → site API → Jev
Our simulated fixture supplies five bounded candidates. Our /api/evaluate server endpoint sends one evaluation to Jev; your local threshold and Original / Highlight / Hide controls change only this simulated page.
Real page → extension → TypeSafe
A content script finds ad-shaped DOM elements on HTTP(S) pages. Its service worker sends compact candidate descriptions to https://api.typesafe.ai/v1/systemone, receives P(ad), and ordinary extension code highlights or removes the chosen elements.
Before you enable the extension
Its MV3 content script matches HTTP and HTTPS pages. It reads candidate DOM elements locally, then sends the page hostname and up to 120 characters of page title plus, per candidate, a visible-text excerpt of up to 220 characters, tag, ID/classes, role/ARIA label, shape, standard-ad-size flag, label, link hosts and external-link flag, iframe source host, up to three image alt texts, up to eight data-attribute names, and detected ad-network hints. A batch contains at most 30 candidates in one request with one Noul question per candidate. It does not upload the full DOM or page HTML, but those excerpts and metadata do leave your browser for TypeSafe. Avoid using it on pages whose snippets you do not want to send to that provider.
Your key and settings are saved in chrome.storage.sync; the total removed/flagged count is saved in chrome.storage.local, with the current-tab badge count kept by the service worker. The service worker sends your key as a Bearer credential to TypeSafe's API; this project has no separate backend. Check TypeSafe's privacy policy ↗ for provider-side handling of API input. The extension can remove a cross-origin iframe element, but cannot inspect that iframe's internal content.
07 / TWO COMMUNITY APPROACHES
A live ad judgment and reusable cleanup rules solve different jobs
typesafe-adblock
Locally finds ad-shaped candidates, asks Jev a yes/no Noul for each in a batch, and applies a configurable P(ad) threshold. It highlights or removes current DOM elements; it does not build reusable page-template rules. The author calls it a fun side project, not a complete ad blocker.
Read the reviewed source ↗unclutter
Classifies ads, cookie overlays, promotions, newsletters, social prompts and other page clutter. It derives validated selectors, caches rules by page template, and reapplies reversible hiding without a new model call for every visit. Its popup selects direct TypeSafe or Vercel AI Gateway; it is a separate extension with a different build and privacy model.
Read the reviewed source ↗Source checked at kitze/unclutter@9ef9beccc1e57b4e3115ae68644b8fc9c19c29f6. Its saved rules and provider settings do not apply to this site's demo or to typesafe-adblock.
08 / IMPLEMENTATION
Evaluate candidates once, then change ordinary UI state
The short example preserves the boundary: Jev returns probabilities; hideElement(...) belongs to application code. The Jev API guide covers the validated server endpoint and provider setup.
const candidates = findCandidates(pageFixture);
const questions = Object.fromEntries(
candidates.map((candidate, index) => [
candidate.id,
boolean(`Is candidate C${index + 1} a paid advertisement?`),
]),
);
const result = await evaluate({
state: describeCandidates(candidates),
questions,
});
const hidden = candidates.filter(
(candidate) =>
result.answers[candidate.id].probability >= threshold,
);
// Application code owns the reversible visual change.
hidden.forEach((candidate) => hideElement(candidate.id));This is a reversible visual-hiding simulation, not network-level ad blocking or a browser extension.
Limits & privacy
04 / HOW IT WORKS
Five bounded judgments, one reversible page change
09 / LIMITATIONS
Visual hiding is not network blocking
- Classify five simulated candidates
- Highlight likely ads
- Collapse selected regions from layout
- Restore every visual element
- Block requests, scripts, trackers, or cookies
- Prevent ad impressions
- Stop video ads
- Modify real websites
- Act as a Chrome extension or uBlock replacement
This demo and the community extension hide page elements after semantic classification; they do not block the underlying network request. Neither replaces request blocking, tracker or malware protection, cookie blocking, video-ad blocking, or a rules engine such as uBlock Origin.
Sources
10 / SOURCES & NEXT STEPS