UI that
anticipates your users
Stop treating every user the same. Presage adapts your interface in real‑time based on behavior, traits, and engagement — in a tiny library.
import { Adaptive, Variant } from '@presage-kit/react'
// The right onboarding for every user — automatically
function Onboarding() {
return (
<Adaptive id="onboarding" defaultVariant="welcome">
<Variant id="welcome"><WelcomeTour /></Variant>
<Variant id="checklist"><Checklist /></Variant>
<Variant id="whats-new"><WhatsNew /></Variant>
</Adaptive>
)
} The problem
Your UI treats every
user the same
A first-time visitor and a power user with 500 sessions see the exact same dashboard.
Personalization is either scattered if/else or a six-figure platform.
Scattered logic
Role checks and feature flags buried across dozens of components. Adding a new persona means touching every file.
Blind to behavior
You track what users click, but none of that data ever drives the UI they see. Two different worlds.
Enterprise-only
Real personalization platforms cost six figures and require a data team. You just want your sidebar to adapt.
The solution
Declarative rules.
Instant adaptation.
Define who sees what in a single config. Presage evaluates rules against live user context and renders the right variant.
const client = createAdaptiveClient({
rules: [
{
id: 'power-user-nav',
adaptationId: 'main-nav',
priority: 10,
conditions: {
all: [
{ field: 'maturity', operator: 'eq', value: 'power' },
{ field: 'traits.role', operator: 'in',
value: ['admin', 'editor'] },
],
},
action: { type: 'reorder',
order: ['analytics', 'settings', 'users'] },
},
],
}) Features
Everything you need.
Nothing you don't.
Rules Engine
14 operators, boolean logic, priority ordering. Declarative, deterministic, easy to debug.
Behavioral Signals
Session count, feature usage, click maps — auto‑computed from tracked events. Zero manual aggregation.
User Maturity
Auto-segment users as new, active, power, or dormant. Use directly in rules.
Framework Agnostic
Pure TypeScript core. React hooks and Vue composables ship today. Svelte and Solid planned.
Type-Safe
Full generics. selectedVariant is narrowed to your variant union. Auto‑complete everywhere.
Tiny & Fast
Under 5KB gzipped. Zero dependencies. Synchronous init from cache — no flash of wrong content.
How it works
Four steps. One render cycle.
Track
Record events with client.track(). Plug any analytics or use the built-in store.
Compute
Events become behavioral signals: sessions, feature usage, click patterns.
Evaluate
Rules engine matches context against conditions. Highest priority wins.
Adapt
The matched variant renders. Show, hide, reorder — all reactive, all declarative.
Pricing
Simple, transparent pricing
Start building today. Scale when you're ready.
Free
- Core rules engine
- React & Vue adapters
- Behavioral signals
- User maturity segmentation
- localStorage persistence
- Community support
Pro
- Everything in Free
- Backend data sync & retention
- Analytics dashboard
- Domain allowlist security
- Priority email support
- Early access to new features
Enterprise
- Everything in Pro
- Dedicated backend infrastructure
- SSR support
- Dedicated support engineer
- SLA guarantee
- Custom integrations
Ready to build
adaptive interfaces?
Install Presage, define your first rules, and see your UI adapt in minutes.