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, the run does the rest

We call each marked moment a scene. Three steps, and the third is a link you paste into the pull request.

Add a linee2e/quote.spec.ts
39await page.goto('/quote/NW-4469');
40await page.click('[data-test=get-rates]');
41+await midstreamScene(page, 'rates-loaded');
42await expect(rates).toHaveCount(3);

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

Push#482

running e2e/quote.spec.ts

captured rates-loaded

captured booking-done

running e2e/signup.spec.ts

12 scenes captured

The suite you already run captures every one.

Share the linkmidstream.studio
quote-flow / rates-loadedOpen ↗
quote-flow / booking-doneOpen ↗
signup / invite-acceptedOpen ↗
billing / seat-addedOpen ↗

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

Skip the blank slate

A preview environment hands you the same screen with nothing in it, and leaves the setup to you. A scene hands it to you 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.

github.com/northwind/logistics/pull/482
Mmidstreambotcommented 4 minutes ago

Three scenes changed on this branch. Each link opens a running instance of your app at that moment.

quote-flow / rates-loadedOpen ↗
checkout / coupon-appliedOpen ↗
billing / seat-addedOpen ↗

Nobody waits for staging

One mark in a test, and everyone who opens the link gets their own copy of that moment — started on demand, thrown away after.

Stop describing what you built. Hand it over, running.

Start for free ↗

One line of code. No card.