React · Vue · Framework Agnostic

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.

onboarding.tsx
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>
  )
}
<5KB gzipped core
14 rule operators
0 external deps
<100ms to first adaptation

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.

Declarative rules.
Instant adaptation.

Define who sees what in a single config. Presage evaluates rules against live user context and renders the right variant.

adaptive-client.ts
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'] },
    },
  ],
})

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.

Four steps. One render cycle.

1

Track

Record events with client.track(). Plug any analytics or use the built-in store.

2

Compute

Events become behavioral signals: sessions, feature usage, click patterns.

3

Evaluate

Rules engine matches context against conditions. Highest priority wins.

4

Adapt

The matched variant renders. Show, hide, reorder — all reactive, all declarative.

Simple, transparent pricing

Start building today. Scale when you're ready.

Free

$0/forever
  • Core rules engine
  • React & Vue adapters
  • Behavioral signals
  • User maturity segmentation
  • localStorage persistence
  • Community support
Get Started

Enterprise

Custom
  • Everything in Pro
  • Dedicated backend infrastructure
  • SSR support
  • Dedicated support engineer
  • SLA guarantee
  • Custom integrations
Contact Sales

Ready to build
adaptive interfaces?

Install Presage, define your first rules, and see your UI adapt in minutes.