Spins up your app · walks it like a human

Stop guessing whether it works.

preuser is a GitHub App. On every pull request, it spins up your app and an AI user walks it like a person — driven by a plain-English goal — then hands you the recording. No test code. No selectors.

Watch a real run — start to verdict

The actual recorded walk, with the agent's trace advancing in sync — ending on the verdict it posted.

a real preuser run · demo.vercel.store
passed

Cart shows Acme Circles T-Shirt · Black / L · qty 1 · $15.00

0:00 / 1:40
What the AI user is doing

    It lands right in your pull request.

    Not just a red or green check. The AI user writes you a sentence on what it experienced — and, when something breaks, exactly where it got stuck. Open any journey to watch the walk.

    pre[user] commented on this PR
    passed sign-up-and-land 0:42 Watch

    AI user "Signed up with a test email and reached the dashboard — it rendered with no errors."

    failed add-to-cart-and-checkout 1:08 Watch

    AI user "I added the item, but the cart count never updated — so I couldn't get to checkout."

    passed browse-and-search 0:51 Watch

    AI user "Searched 't-shirt', the results filtered, and I opened the first product."

    Descriptive, in the agent's own words — the part a deterministic pass/fail can't give you.

    Spins up your app. Walks it like a human.

    Brings your app up

    In a fresh, isolated sandbox — your compose file, or your build + serve commands.

    Walks each journey

    An AI user uses the running app by sight, like a person: signs up, navigates, submits, reads the screen.

    Posts the result

    A pass/fail per journey and the video, right on your PR — usually in a few minutes.

    Another layer of your stack.

    Keep your tests. preuser adds the one thing they can't.

    Your unit & e2e tests

    Deterministic. They assert the logic you can predict — and break when the UI moves.

    vs
    pre[user]

    A non-deterministic, human-like user. It checks whether the real experience still works — no selectors, no fixtures.

    You write the journey in plain English.

    Describe what a person is trying to do and what "done" looks like. The agent figures out the path.

    .preuser/config.yml
    # .preuser/config.yml
    journeys:
      - name: sign-up-and-land
        goal: A new visitor signs up and reaches their home screen.
        success: They're signed in, on their own home, no error.

    That's the whole test. No selectors. No Playwright to maintain.

    Priced per journey.

    A journey is one walk, re-run on each push. We keep each one lightweight, so it's designed to be cheap — and it's free during the preview.

    Put a human-like QA pass on every PR.

    Drop a plain-English journey in your repo and let an AI user prove the experience on your next pull request.