UserCurrent Web: for growth and marketing

Personalize the site, with no CMS migration.

Your code declares where the page can change. UserCurrent decides what each visitor sees there, from what they did a moment ago. Run web experiments, and trigger journeys from the same behavior.

One slot, two visitors, and the decision for eachExample data
First visit v_0192Code default
Variant
default
Rule
None matched
Why
No rule matched, so the slot shows its code default.
Returning visitor v_4821Variant
Variant
returning_runner
Rule
r1
Why
In segment returning_trail_runners: trail_shoe_viewed at least 3 times in the last 7 days.

The page, its nav and its product cards are your code and your CMS. The slot is the only part UserCurrent decides.

Experiences and slots

Your code declares the slot. UserCurrent decides what goes in it.

Marketers stop waiting on a developer for each change, and nobody migrates a CMS. UserCurrent is headless: it picks the props, and your site renders them.

  1. A developer declares the slot

    In code or through their coding agent: an ID, a props schema and a fallback. The same contract serves Astro and the web SDK.

  2. A marketer authors the variants

    Variant props are edited in a form generated from the schema. Targeting, schedule and priority are set beside them.

  3. UserCurrent decides for each visitor

    The decision reads the live profile. On Astro the variant is in the first HTML. Elsewhere the web SDK shows the fallback at once and replaces it only if the decision differs.

  4. Your page renders the props

    Props are values or references: a CMS entry ID, a URL or a product ID. Your code and your CMS keep rendering.

BuiltSlots on Astro, in the browser through the web SDK, and on any server through the server SDK.

There is no media library, no rich-text editor and no visual editor on the live page. Variants hold values and references to content that lives in your CMS.

For the marketer

Edit, target, preview and publish from the console

The console and the config file are two front doors onto the same objects.

  • Publish without a code review

    A marketer can publish from the console unless the project locks experiences to the repo. Config and the console edit the same objects.

  • Targeting and schedule

    Target by segment, trait or context, and set start and end dates. Priority tiers with explicit overlap choices decide which experience wins on a slot.

  • Caps and dismissal

    Cap impressions per user and remember dismissals, so a banner stops showing to someone who closed it.

  • Preview before publish

    Open a preview as a link, a button or a QR code, and force a variant for a user or device while you check it.

  • Campaigns

    Group experiences, experiments and journeys under a campaign with a goal and a window, and publish them together.

  • Built-in message slots

    Banner, modal, tooltip, inline card and a one-question survey, with reference renderers for React and as web components. Survey answers are recorded as events.

Realtime segments

Target people by what they did seconds ago, not last night

A segment is evaluated on every event, at decision time and when time passes.

A segment and who just entered or left itExample data

Segment returning_trail_runners

1,284users now

Live Size and members update as events arrive.

Returning trail runners include users where all are true

  1. trail_shoe_viewedat least3 timesinlast 7 days
  2. last seenwithinlast 7 days

Membership changes

  1. 14:02:11u_4821entered trail_shoe_viewed, 3rd time in 7 days
  2. 13:58:40u_1977entered trail_shoe_viewed, 3rd time in 7 days
  3. 13:41:02u_3305left not seen in 7 days, with no new event
  • Targetable on the next interaction

    Every decision reads the live profile, so a behavior can change the next response.

  • Time moves membership too

    A condition such as "no session in 7 days" changes membership within 1 hour of becoming true, even if the user sends nothing.

  • New segments apply to past behavior

    Event counts and first and last seen cover behavior from before the segment existed, so it has members at once.

  • One definition, two front doors

    Build a segment in the console or in config. It is the same definition either way.

Web experiments

Know whether a change worked, and keep a person in charge

Experiments run on the same slots and the same profile. People set the budget, and the platform acts inside it.

  • A/B/n tests on a slot

    Test variants of a slot against a goal metric, with secondary metrics and guardrail metrics beside it.

  • Results you can read at any time

    Sequential intervals stay valid however often you check them. A sample ratio check warns when the split is off.

  • Layers and a holdout

    Mutually exclusive layers keep concurrent tests on one surface from overlapping. A project-wide holdout measures long-run lift.

  • Traffic that follows the winner

    Among approved variants, a bandit can shift traffic within a budget you set. Guardrails can roll a test back.

  • Variants drafted by AI

    Generate text variants within the slot schema. They go to the approval queue, and Production refuses an AI variant nobody approved.

    AI

  • Ship the winner

    Promote a variant to everyone from the console, config or MCP. An agent's change to Production waits for a person.

Outbound and journeys

Act on behavior outside the page

A journey starts when someone enters a segment, does an event or reaches a time. It waits, branches, sends and ends when the goal is reached.

A journey and how many people reached each stepExample data

Journey abandoned_checkout_recovery

  1. TriggerEnters segment abandoned_checkout1,240Entered
  2. Wait1 hour, or until order_placed1,046Still no order
  3. BranchIn segment has_push_token1,046Checked on each person
  4. pushSend push cart_reminder612Sent
    emailSend email cart_reminder_email434Sent
  5. GoalExit on order_placed31125.1% of 1,240 entered

Checked before every send: frequency cap, quiet hours in the person's time zone, suppression and unsubscribe.

  • Email through your provider

    UserCurrent renders code templates and sends through your own email provider account. It is never the sender of record for your mail.

  • Mobile push

    Sent directly to the push services for iOS and Android.

  • Signed webhooks

    Reach any tool that accepts a webhook, with retries, dead letters and replay.

Message content lives in code, as templates with a props schema, or in your email provider. There is no template designer. Frequency caps, quiet hours, suppression and one-click unsubscribe apply to every send, and a journey can hold out a share of people to measure its effect.

ComingRegistering push tokens from native apps needs the iOS and Android SDKs, which are not built yet.

Acquisition analytics

See where visitors come from and what they do next

Acquisition reporting runs on the same events as decisions. There is no second pipeline to keep in sync.

New visitors by channelExample data

New visitors, last 7 days

11,270

+5.6% vs prior 7 days (10,670). Email grew the most: 1,940 against 1,510.

  • Where visitors come from

    Reports group users by first-touch and last-touch UTM, referrer and landing page.

  • What they do next

    New users, activation and retention by channel, on the same events that drive decisions.

  • People and agents apart

    Each event carries a visitor class, so agent and crawler traffic can be told apart from people.

  • Filter by anything on the profile

    Break any report down by segment, experiment variant or property.

ComingImporting ad spend, so cost per channel sits beside what visitors do next, is not built yet.

E-commerce and content sites

Slots for content, and an angle for shopping

  • Comparison shopping

    For e-commerce, personalized comparison where the shopper's agent works with the site, instead of classic recommendations.

    Coming

  • Content slots and variants on entries

    Content slots on Astro pages, and an EmDash plugin that puts variants on any content entry.

    Built

Add the first slot to your site

Your coding agent declares the slot and the first variant from config in your repo.

Why this button?

It is this page's own suggestion for now. As you read, this site keeps a small profile of who each page is for and what it is about, in your browser, and picks this button from it. Nothing is sent.

See your vector on the live demo