ExperienceOS · by RackMind

Make your AI agent build apps that feel right.

Coding agents ship working screens with generic motion: a 300 ms ease on everything. ExperienceOS gives your agent the exact springs, curves and timings behind the best apps, recovered from their shipping code, so what it builds feels like it was made by a team that sweats the details.

12apps studied
15interactive studies
20motion presets
0copied assets
Defaults vs feel

Same screen. Different team.

Left: what agents usually write, one generic transition for everything. Right: the same moments with numbers recovered from a shipping app. Press replay and watch them side by side.

Typical agent defaulttransition: 300ms ease
Progress after a correct answer
Reward cards appear
15
1:42
93%
With ExperienceOSduolingo.progressFill · statCardEnter
Progress after a correct answer
Reward cards appear
Replay both
How it works

Your agent asks. ExperienceOS answers with evidence.

Describe the feel you want by pointing at something real. Your agent pulls the recovered values instead of guessing, builds with them, and checks the result.

01

Point at a feeling

"Make the lesson-complete screen feel like Duolingo's." A reference beats an adjective.

02

Pull the real numbers

The agent reads named presets with provenance, such as duolingo.statCardEnter: scale 0.25 → 1 in 175 ms, a 21 dp tab lift, a 900 ms shine.

03

Build with them

Drop-in Web Components or plain values for any stack, with reduced motion handled.

04

Check the result

ExperienceOS captures the running interaction and compares it against the reference, so "feels right" becomes a test.

# you
build the lesson-complete screen. it should feel like duolingo's.

# agent
→ preset('duolingo.statCardEnter')   recovered · Duolingo 6.101.2 · ShortLessonStatCardView
  fromScale 0.25 · 175 ms · token lift 21 dp · ticker 300 ms · shine 900 ms
→ preset('duolingo.progressFill')    recovered · ProgressBarView
  delay 200 ms · 400 ms · Android overshoot, tension 2
→ build <xos-stat-card> ×3, <xos-progress>
→ verify capture vs reference: card entrance and fill timing within tolerance

Preview: agents read presets from the kit today. A preset lookup tool for agents (MCP) and reference comparison for app screens are on the way; behavior capture and comparison already run for web experiences.

Where the numbers come from

Recover, measure, rebuild.

Every value on this site is labelled by where it came from, so you can tell a measured fact from a design guess.

01

Recover

Decompile the app and read its motion code and resources: spring(0.6f, 350f), PathInterpolator(0.74, 0, 0.11, 0.96), layout constraints, type scales and palettes.

02

Measure

Read the timing out of bundled animation files (Lottie, Rive, even a game's packed UI movie clips), frame by frame, without shipping a single one of them.

03

Rebuild

Recreate the screen with original artwork and open fonts, test the numbers against their source, and package them as presets and Web Components.

The reference library

Eighteen moments, taken apart.

Every reference your agent can point at is a playable study. Open one, press things, and read the evidence beside it. Each one grows out of its card on the spring Robinhood uses to open a post, and Back folds it away again.

Kit

Feel, as a dependency.

Framework-free Web Components and motion primitives. One import, no build step, themed by tokens, and every preset names its source.

<xos-progress> · 200 ms + 400 ms overshoot
<xos-stat-card> · 0.25 → 1 in 175 ms
Play the cards
<!-- tokens + components -->
<link rel="stylesheet" href="/kit/tokens.css">
<script type="module">
  import { defineKit } from '/kit/components.mjs';
  defineKit();
</script>

<xos-progress value="0.4" streak="3"></xos-progress>
<xos-lip-button tone="success">Check</xos-lip-button>

// or just the numbers
import { preset } from '/kit/presets.mjs';
import { springEasing } from '/kit/motion.mjs';
const { spring } = preset('venmo.clusterEntrance');
el.animate(frames, { easing: springEasing(spring) });
Principles

Study the feel, not the brand.

Numbers, never assets

No artwork, animation file, sound, font or copy from any app ships here. Durations, curves, springs and layout values are recovered; everything you see is original.

Honest provenance

Every value is tagged recovered, measured or authored, with the app version and the class or file it came from. Guesses are labelled as guesses.

Tested against source

Each preset is pinned by a test to the study it came from, so a number cannot drift from its evidence without failing the build.