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.

SIMULATED WEBPAGEReal Jev decisions · No real website access
Customize page · edit candidate evidence

Editorial cards stay deterministic and are never submitted. Editing candidate evidence clears the scan.

C1
C2
C3
C4
C5
5 candidates found by deterministic page rules.No expected labels are shown before scanning.
Northstar DailyIndependent city journalism
Cities

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.

CLIMATE · 7 MINWhy small parks matter in hot weather

Pocket parks can lower surface temperatures on dense blocks.

© Northstar · About · Contact · Corrections
70%

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

JEV

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.

APPLICATION CODE

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

DETERMINISTIC CODE

Find ad-shaped regions

  • Ad-like labels
  • Sponsored markers
  • Suspicious wrappers
  • Known ad-shape structural signals
  • Stable candidate IDs
BOUNDED INPUT

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.

  1. Get the verified source.

    Clone the repository and check out the version reviewed here. The repository root contains manifest.json and the referenced src/ files; this version needs no npm install or build step.

    Terminal · source checkoutGit
    git clone https://github.com/realZachi/typesafe-adblock.git
    cd typesafe-adblock
    git checkout 7e067d243d87b7fe4d511653c0ddcd77b9beee18
  2. Load it locally.

    In Chrome, open chrome://extensions, turn on Developer mode, choose Load unpacked, and select the cloned typesafe-adblock folder containing manifest.json. This is a source install; we have not verified a Chrome Web Store listing for this project.

  3. 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?

THIS SITE'S DEMO

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.

COMMUNITY EXTENSION

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

PAID AD / CURRENT CANDIDATES

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 ↗
BROADER CLUTTER / SAVED TEMPLATES

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.

Semantic visual ad hidingTypeScript
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

01SIMULATED PAGEFull editorial layout
02CANDIDATE EXTRACTORDeterministic rules
035 BOUNDED CANDIDATESNo raw HTML
04ONE JEV REQUEST5 × P(ad)
05LOCAL THRESHOLDApplication policy
06KEEP / HIGHLIGHT / HIDEReversible UI

09 / LIMITATIONS

Visual hiding is not network blocking

This demo does
  • Classify five simulated candidates
  • Highlight likely ads
  • Collapse selected regions from layout
  • Restore every visual element
This demo does not
  • 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

Study the pattern, then build a bounded decision