Recette
On real phones

Your journeys played on real phones, your bugs triaged

You describe the journeys in plain language and upload the APK. Recette turns them into Maestro flows, runs them on real devices, folds duplicates together and hands you a bug report: every bug with its reproduction steps, the video cut around the error and the matching logcat excerpt.

No credit card to start. Secure payment through Stripe when you change plan.

Triage 12 failures → 4 bugs Redmi 12 · MIUI 14 NullPointerException@CartAct… Galaxy A14 · One UI 6 NullPointerException@CartAct… Pixel 6a · Android 15 NullPointerException@CartAct… BUG-04 · Blocker crash · cart screen 3 devices · 3 pieces of evidence

The same crash on three devices: one bug, three pieces of evidence. Severity comes with its reason.
A sample report: no full campaign has run on real hardware yet.

The report

A document, not a pile of screenshots

Sections by severity, reproduction steps, the logcat excerpt cut around the first error, and the video cut at the same instant. A result you can read, print and pass on.

1Blockers 2Major 1Minor Verdict: blocking — a crash prevents release
BUG-04 NullPointerException when the cart opens
crash | [email protected]:87 | cart screen | com.example.shop
  1. Open the app with the test account
  2. Search for “chair”, then add the first item to the cart
  3. Open the cart: the app closes
09:41:07.318  E AndroidRuntime: FATAL EXCEPTION: main
09:41:07.318  E AndroidRuntime: Process: com.example.shop, PID: 8123
09:41:07.319  E AndroidRuntime: java.lang.NullPointerException: Attempt to
09:41:07.319  E AndroidRuntime:   invoke virtual method on a null object reference
09:41:07.319  E AndroidRuntime:   at com.example.app.CartActivity.onCreate(CartActivity.java:87)
09:41:07.320  E AndroidRuntime:   at android.app.Activity.performCreate(Activity.java:8051)
40 lines before, 120 after the first error — the video is cut at the same instant.
capture.pngvideo-bug04.mp4 · 4 slogcat.txt · 160 lines
In all honesty

What we do not do

A product that hides its limits wastes everybody's time. Here are ours, today.

  • No campaign has run end to end on real devices: the trial depends on a station and a free pool, reserved for other products during the build.
  • Uploading an APK from a remote machine is impossible in phase 1: the Hangar upload URL is internal, so uploads happen from the server.
  • Stripe is not wired: no real payment, no amount is charged.
  • No PDF export is produced: the kit HTML is standalone and prints — the missing PDF is stated inside the report.
  • Flow generation uses no LLM: it is deterministic and an operator reviews it before the first run.
  • iOS and mobile web apps are out of scope; fine performance testing (CPU, memory) too.
  • A single monkey seed for the whole campaign: the starting state depends on the installation, and that is documented as a limit.
What it does

Concretely

A result, not minutes of device time

Recette does not sell access to a phone: it sells "here is what breaks". You receive triaged bugs, not a pile of screenshots to sift through yourself.

Duplicate triage is the core

Every failure is grouped by the key kind | signature | step | target: the same crash on three devices becomes one bug with three pieces of evidence, not three tickets. Severity is proposed with its reason, and the logcat is cut around the first error (40 lines before, 120 after).

A report with its evidence

Videos are really cut around the error with ffmpeg — otherwise the full video is delivered with its offset and a note. RFC 4180 CSV export, public page behind a secret link, sections by severity and a verdict.

Retesting the fixes

You upload a new build and Recette replays only the open bugs: each one becomes fixed or stays open, without replaying the whole campaign.

Deterministic journey translation

The free-text description becomes a Maestro flow (tap, input, assert, wait) with no LLM call: a draft that does not understand a line fails entirely rather than guessing, and an operator reviews it before the first run.

Triage

Twelve raw failures, four bugs

Every failure is grouped by kind | signature | step | target: the same crash on three devices becomes one bug with three pieces of evidence, not three tickets.

  • An environmental incident (MIUI theme, launcher, systemui) is dismissed: it does not accuse your app.
  • Without a known package name, no crash is concluded — a missed bug is better than a false positive.
  • Severity comes with its reason: blocker for a crash or an ANR, major for a journey step that fails.

Raw failures12

crash · Redmi 12crash · Galaxy A14crash · Pixel 6aANR · Redmi 12step · Pixel 6astep · Galaxy A14+ 6 more

Grouped bugs4

BUG-04 · blockercrash — 3 pieces
BUG-05 · blockerANR — 1 piece
BUG-06 · majorstep — 2 pieces
BUG-07 · minorplatform warning
Questions

Frequently asked questions

How do my journeys become tests?

A deterministic generator turns your description into a Maestro flow, reviewed by an operator before the first run. No language model is involved in phase 1: if a line is not recognised, generation fails entirely instead of inventing a gesture.

Have you already tested on real devices?

No. The end-to-end trial depends on a station and a free pool, and the shared device is reserved for other products during the build. The repository tests are green, but no full campaign has run on real hardware.

Can I upload my APK from my machine?

Not yet: the Hangar upload URL is internal (it listens on 127.0.0.1), so uploads happen from the server today. Public exposure will go through a tunnel, and that is an operations task, not code.

Is payment open?

No: Stripe is not wired in phase 1, and the billing page says so instead of showing a dead button. Nothing is charged, and your current plan stays active.

Is a bug video really cut?

Yes, around the error, using ffmpeg called with an argument array — never through a shell. If the cut fails, the full video is delivered with the offset and a note explaining it: nothing is hidden.

Try it on a real phone

Create an account, take a key, run your first test. It is free to start.