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

The news page is the product surface. Ordinary code identifies five bounded candidates; Jev estimates P(ad) for each; local controls highlight or collapse the elements that pass your threshold.

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.

02 / 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

03 / 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.

04 / 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.

05 / REAL-WORLD PATTERN

Candidate extraction before model judgment

COMMUNITY PROJECT

typesafe-adblock

Ordinary code finds ad-shaped DOM candidates, Jev decides whether each candidate is an ad, and code changes the page. Its author describes it as a demo or fun side project, not a complete ad blocker.

Inspect the community project ↗
COMMUNITY PROJECT

unclutter

The wider workflow classifies several clutter categories and stores reusable page-template hiding rules. That broader “should this be hidden?” problem is outside this route.

Inspect the community project ↗

06 / 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));

07 / 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 hides page elements after semantic classification; it does not block the underlying network request.

08 / SOURCES & NEXT STEPS

Study the pattern, then build a bounded decision