manji6’s JevSense matches website browsing context to offers prepared by a site operator. Jev answers narrow interest questions; application code controls eligibility, thresholds, priority and display. The repository includes a small experiment with saved requests and raw API responses.
Keep the delivery policy in code
- The browser collects page metadata and visible browsing time after consent. Browsing history and delivery state stay in browser session storage.
- The server filters eligible campaigns before sending their questions together to Jev. Each Noul, Jev’s yes/no probability output, represents a separate condition.
- Local code combines conditions with AND or OR, requires scores strictly above the configured threshold, and selects by campaign priority.
- Missing or invalid probabilities stop selection. The Node API holds delivery when the model call fails.
- URL-only campaigns can bypass Jev. Question-writing assistance uses fixed templates, with the conditions supplied by an operator.
A short visit still looks like interest
The author’s saved pilot uses real page descriptions from a clothing site with synthetic browsing histories. It reports six API calls, all returning jev-1.14.0. Offline checks matched the raw responses to the reported scores:
- A running-shoe page viewed for two seconds receives 0.90 for commuting-running interest; a 60-second view receives 0.91.
- Repeated visits to running shoes and a beginner campaign receive 0.96 for commuting-running interest and 0.92 for beginner-information interest.
- A brief homepage visit receives 0.10 and 0.05. Sparse evidence produces low scores here, rather than an explicit unknown state.
These are the author’s recorded model judgments, not measured visitor intentions. They show why dwell-time requirements and an “insufficient observation” state need their own policy.
Check which context the gate covers
The current implementation filters short visits out of qualified history. Campaigns can require prior qualified visits, while current-page and entry-page context remain separate. Setting the history requirement to zero permits an immediate decision from that context.
Offline checks confirmed the history gate and that zero-history path. They also confirmed strict threshold comparison and rejection of missing answers. A history filter alone does not impose a dwell-time requirement on every page the model sees.
Review the data leaving the browser
Self-hosting keeps the application under the operator’s control; Jev inference still sends selected context to TypeSafe. The URL sanitizer removes credentials and fragments, but retains query parameters unless their keys are explicitly excluded. Page titles and descriptions also need privacy review.
The local review app uses fixed model answers. The saved pilot measures neither conversion lift nor production targeting accuracy. Typed output checks the answer’s shape; a valid probability still needs evidence that its interpretation fits the intended decision.
Verification: inspected the README, SDK, Node decision route, Jev adapter and policy code; checked saved responses and exercised policy functions with synthetic inputs. No live Jev calls, browser deployment or security audit was performed.