Skip to main content
The browser profile is versioned, site-scoped and bounded. It is useful evidence of observed activity, not a verified customer record.

Profile shape

New profiles receive a random UUID. Memory uses localStorage with an in-page fallback. Preview namespaces isolate simulated journeys. The site config controls profileTtlMs, optional eventTtlMs, halfLifeMs and maxEvents; there is no single universal production retention period for all websites.

Normalization

The normalizer checks profile version/site, identifier syntax, finite timestamps, expiry and a one-minute future tolerance. It considers only the last maxEvents, deduplicates event IDs, rejects unknown event kinds and validates resources against registered pages/products. Durable WordPress reading IDs have a narrowly defined exception. Exposures must reference existing targets/variants. Attention must reference configured sections and valid durations. Article reading requires compatible editorial configuration and bounded progress/time fields. Purchases are capped separately to the latest 20 valid configured-product entries before live server logic removes browser claims.

Interest calculation

Product/resource actions contribute decaying weight:
Product view weighs 1; save/details weigh 2; add-to-cart weighs 3; begin-checkout weighs 4. For each tag and distinct product, the summary keeps the maximum decayed contribution rather than adding every repeat view. Tag strength sums those per-product values. Exposures do not create interest. A persona page trigger can compile pages into tagged resources, so the same machinery can express exploration outside commerce. Not every application action is automatically captured; use the configured action bindings or a deliberate integration.

Attention and reading

Configured section attention requires visibility and foreground activity and emits a bounded dwell record. Article reading uses a dedicated body observer, cumulative per-visit state, time deltas and progress milestones. Both measure observable behavior, not gaze or comprehension. Activity updates the stored profile and inspector. It normally affects the next navigation or explicit refresh. A storage change from another tab restores current bindings and leaves the runtime ready for the next page; it does not continuously optimize the page in place.

External profile source

An internal VisitorProfileSource supplies read() and optional subscribe(listener). In live mode it replaces the local profile store; automatic local action/attention collection is disabled for that source. A null/invalid profile yields no usable visitor context and original content. The host must own consent and lifecycle, and the server still normalizes submitted data.

Separate memory systems

The signed enrichment cookie is connected context with its own freshness. Authoring memory is a server-side file/retrieval layer for research and learnings. Neither is the same as browser activity. There is no automatic cross-site or cross-device profile merge in this implementation. Source: profile, storage, external source, activity, reading.