SentientUI

Changelog

New features, improvements, and fixes — most recent first.

0.8.0Custom API Domain

June 2026

The SDK now defaults to api.sentient-ui.com — SentientUI's own domain with global edge routing. Latency is lower for visitors worldwide, and the integration is no longer coupled to any underlying infrastructure hostname. Existing integrations keep working without any changes.

improvementDefault endpoint moved to api.sentient-ui.com

@sentientui/core and @sentientui/react now point at https://api.sentient-ui.com out of the box. No action required — new and existing installs work without changes. If you proxy the API through your own domain, continue using the ingestUrl or baseUrl overrides in init() / AdaptiveRoot as before.

Phase 5 · SDK 0.6.0Inferred Goals + Faster Funnels

June 2026

SentientUI now learns from partial funnel completion and discovers meaningful goals on its own. Weighted composite goals let the bandit converge 3–5× faster on long funnels by crediting each step independently as it fires. Micro-signal detection passively tracks rage clicks, text selection, scroll hesitation, and early tab abandonment — no developer configuration. After 500 sessions in observation mode, SentientUI automatically clusters these signals and suggests which ones to promote to real goals.

featureWeighted composite goals

A new WeightedCompositeGoal type on <Adaptive> gives each funnel step its own fractional reward. A visitor who viewed pricing (weight 0.2) but bounced before signing up still generates signal. Steps fire independently — the bandit does not wait for all steps to complete. Existing CompositeGoal behavior (all-or-nothing, reward 1.0) is unchanged.

featureMicro-signal detection

Every <Adaptive> component now passively observes four behavioral signals: rage clicks (3+ within 500 ms), text selection / copy, scroll hesitation (3 s of no scroll while visible), and early tab loss (hidden within 15 s). Signals are sent through the existing event pipeline as micro_signal events. No developer configuration required — detection attaches automatically on mount.

improvementSDK performance pass (0.6.0)

Fixed a cache-key mismatch that caused unnecessary /assign calls when sessionSegment was not set, coalesced concurrent assigns for the same component into one request, and capped previewHtml uploads to once per variant per session. Bundles are now minified (react: ~3.7 KB gzip). Breaking for direct core users: preloadAssignments, preloadDecisions, and readSessionCookie moved from '@sentientui/core' to '@sentientui/core/server'. Imports from '@sentientui/react/server' are unaffected.

featureAuto-discovery: inferred goal suggestions

New observation mode for projects. While active, the bandit computes portraits and clusters but withholds variant weight updates — every session contributes data without committing to a winner. Once 500 sessions accumulate, SentientUI clusters micro-signals by component, labels the top behavioral patterns with AI, and surfaces them in the dashboard as "Moments we noticed". Developers confirm or dismiss each suggestion; confirming shows a ready-to-copy SDK snippet.

Phase 4AI Intelligence Layer

June 2026

SentientUI adds its first AI layer. Every project page now opens with AI-generated observations about what changed this week — narrator bullets for all paid plans, action recommendations for Growth. Persona cluster names are generated dynamically from behavioral patterns. Guardrail alert emails include an AI-written diagnosis of why a variant dropped. Agent endpoint usage is now fully observable.

featureAI Insights — narrator bullets and advisor recommendations

Every project overview now shows an InsightsFeed: 3–5 plain-English observations about what changed this week (variant CVR shifts, persona velocity, session volume, guardrail events). Growth tier projects also get 1–2 specific recommended actions. Insights are generated on-demand and cached for 6 hours. The Refresh button triggers a new generation; results appear in under 30 seconds.

featureDynamic persona cluster labels

Persona clusters are no longer hardcoded as "buyers", "researchers", "deal-seekers", "browsers". On each insights refresh, AI reads the behavioral centroid of each cluster and generates a human-readable label — "Cautious Evaluators", "Fast Converters", and so on. Dynamic labels appear on the Visitors page alongside the raw portrait dimensions.

improvementAI diagnosis in guardrail alert emails

When a variant is auto-paused by the guardrail (CVR dropped below threshold), the alert email now includes a 1–2 sentence AI-written diagnosis of the most likely cause. If the diagnosis is unavailable, the email sends without it rather than being delayed.

improvementAgent call observability

GET /v1/agent/layout calls are now fully tracked — project, visitor, resolved persona, and blocks served are all recorded. The project health endpoint exposes an agent call count. Previously, agent calls were fire-and-forget with no usage visibility.

improvementTrends layer shipped

The dashboard now computes week-over-week CVR deltas, momentum scores (gaining / stable / losing), persona velocity, portrait drift, session volume trends, and per-device / per-source CVR breakdowns. A TrendsCard on the project overview surfaces the top signals. A dedicated Trends tab shows the full breakdown.

Phase 3Layout Intelligence & Cross-Session Identity

May 2026

SentientUI expands from component-level A/B testing to full-page layout optimisation. A single server roundtrip now decides both section order and variant assignments. Cross-session identity links anonymous visitors to authenticated users so bandit weights carry over across sign-in. Text content variants ship as a first-class primitive.

featureLayout reordering via /v1/decide

Pass a sections array to <AdaptiveRoot> and SentientUI will reorder your page sections for each visitor in a single server roundtrip — no extra network call, no layout shift. Section order is determined by persona: visitors whose cluster matches a section's historical engagement pattern see that section promoted to the top. The resolved order is seeded into React context so client components stay in sync.

feature<AdaptiveText> — text content A/B testing

A new <AdaptiveText> component lets you run copy experiments without wrapping entire subtrees. Provide a default string and an experiment ID; the SDK fetches the winning content variant from the API and swaps it in after mount. Impressions are tracked automatically.

featureCross-session identity

Call client.identify(userId) after sign-in to link the anonymous session to an authenticated user. Bandit weights, portrait scores, and persona assignments carry over — returning users see the variant that worked for them last time, not a fresh exploration draw. Pass userId at init time if the identity is already known on page load.

featureNamed goal events from the client

client.goal(name, metadata?) lets any client-side code fire a named conversion event — form submissions, checkout steps, video plays — without wiring up a full event schema. Goals are correlated with the active variant assignments server-side and feed directly into the bandit reward signal.

improvementSingle-roundtrip SSR decide

preloadDecisions() replaces preloadAssignments() for pages that use layout reordering. One POST /v1/decide call resolves section order and all variant assignments together, reducing server-side latency before the first byte is sent to the browser.

improvementLayout rewards and per-persona layout bandit

Goal events now train a per-persona bandit on which section orders convert best. The winning layout per persona improves automatically over time as more sessions accumulate. Layout order is also locked per session, so returning visitors within the same session always see a consistent page structure.

Phase 2Intelligent Experimentation

May 2026

SentientUI graduates from a single-component bandit to a full adaptive experimentation platform. Portraits, persona clustering, and graph-aware reward propagation ship in production.

featureVisitor portraits

The SDK now builds a six-dimensional behavioural profile for every session in real time: urgency, attention span, decision stage, price consciousness, risk aversion, and social influence. Each dimension is a 0–1 score computed from dwell time, scroll depth, and event patterns. Portraits update continuously as events arrive; a reliability score (0–1, based on data volume) indicates how much weight to place on each profile.

featurePersona clustering

A nightly job groups sessions into four behavioural personas — buyers (high urgency, ready to convert), researchers (thorough, high attention, late decision stage), deal-seekers (price-conscious, heavy comparison), and browsers (exploratory, low urgency). Once a session accumulates enough events for a reliable portrait (reliability ≥ 0.3), the bandit switches from generic device+source segments to persona-specific weights. Each persona can now have a different winning variant.

featureComponent dependency graph and reward propagation

The SDK optionally scans the DOM to discover structural and semantic relationships between components — hero → CTA → pricing, for example. These relationships are used to propagate conversion credit up to two hops: when a goal fires on one component, variants on related components receive a weighted fraction of that reward. This means a headline variant gets partial credit for a pricing conversion it influenced, and the bandit learns faster on low-traffic components by borrowing signal from high-traffic neighbours.

featureSegment-aware assignment

Assignment now resolves the richest available segment for each session: device + source when a session is new, expanding to device + source + persona cluster once clustering has run. Each segment has its own independent bandit weights, so buyers and researchers can be served entirely different winning variants from the same experiment.

improvementAdaptive exploration per variant

Exploration rate now decays independently per variant as traffic accumulates. High-traffic variants converge to exploitation faster, while low-traffic variants stay exploratory longer so no variant is starved of signal early in an experiment.

improvementDirect vs propagated reward split in the dashboard

Variant cards now show the breakdown between direct reward (events on the component itself) and propagated reward (credit flowing in from graph neighbours). This makes it clear why a variant won even when its direct conversion rate looks low.

improvementBilling, plan management, and session-limit enforcement

Full billing integration ships: upgrade flows, self-serve plan changes, and session-limit enforcement at the API layer. The Free tier (10k sessions/month) and paid tiers (Starter 100k, Growth 1M) are enforced in production.

improvementRate limiting and response caching

The event-ingest and assign endpoints are now rate-limited per project. The current best-variant snapshot per segment is cached server-side, so assignment latency stays low at scale without sacrificing freshness.

Phase 1Open Beta

April 2026

Initial launch. Core ε-greedy bandit, <Adaptive> React component, SSR preloading, real-time dashboard, and the Free plan.

featureε-greedy multi-armed bandit

Per-component bandit with segment-aware weights. Exploration decays as data accumulates; exploitation shifts traffic to the highest-CVR variant automatically.

feature<Adaptive> React component and SSR preloading

Wrap any element in <Adaptive>. Variant assignments are fetched server-side by <AdaptiveRoot> and injected into the initial HTML — zero layout shift, no loading flash, crawlable markup.

featureReal-time dashboard

Live variant stats via SSE: CVR, Wilson 95% confidence intervals, lift vs control, and segment breakdown by device and traffic source. One-click promote locks the winner.

featureCookie consent integration

Pass consent={false} to AdaptiveRoot or AdaptiveProvider to gate all SDK behaviour behind explicit visitor consent. The SDK does nothing until consent is granted.

Changelog — SentientUI — SentientUI