Every user journey in your app as a live, working demo.

Your tests already walk every flow in the product. Midstream keeps the running app they leave behind.

Start for free

One line of code. A scene from every test.

Each marked moment is a scene: a fully interactive version of the app at the precise moment you care about.

Add a linee2e/checkout.spec.ts
checkout.spec.tse2e
39await page.goto('/cart');
40await page.click('[data-test=checkout]');
41+await midstreamScene(page, 'coupon-applied');
42await expect(total).toHaveText('£96.00');

Name the moment in the flow you want to be able to open.

Run CI#482
e2e (playwright)3m 41s
aster/storefront#482

Run npx playwright test

checkout.spec.ts · 4 passed

captured coupon-applied

captured order-placed

12 scenes captured

The suite you already run captures every one.

Share the linkmidstream.studio
checkout-squad4
priya9:41Promo code fix is up — here it is running: aster--checkout--a3f7.midstream.studio
marco9:43Opened it. Discount lands on the right total now 👍
👀 3✅ 22 replies

Anyone on the team lands in it, running, in a click.

Skip the blank slate

Preview environments start you on square one. Midstream scenes drop you into the exact moment you care about — seeded, signed in, mid-flow.

A diff can’t be clicked

Agents write code faster than your team can read it. Every pull request comes back with the scenes it touched, running and ready for review.

Nobody waits for staging

Everyone who opens the link gets their own copy of that moment. Change it, break it, compare two of them side by side — nobody is standing on anybody.

The tests you already have

No new suite, no separate seeding scripts. A scene is one call added to a test that was going to run anyway.

Don’t describe it. Hand it over, running.

Start for free ↗