minimoth

Test Group

Give up to 5 testers a link where they can see the OTP your Supabase Test Hook generates — without a real SMS or WhatsApp message ever going out, and without anyone digging through Supabase's Auth logs to find the code.

How it fits together

This only works together with the Supabase integration's Test Hook — it isn't a general-purpose way to test the OTP API. When your staging app calls signInWithOtp() against a number wired to your Test Hook, Supabase sends the code to MiniMoth as usual, but test mode never actually delivers it. Test Group gives a human a place to see that code anyway: a tester who's part of the group and has logged in sees the code appear on their screen (or as a push notification) within seconds, and relays it to whoever needs to finish verifyOtp().

Test Group only ever captures OTPs sent through your project's Test Hook. Live/production OTPs — from the Live Hook, the direct API, or anywhere else — are never captured or exposed here.

Setup

  1. Wire up the Supabase Test Hook first — Test Group has nothing to show until your app is actually triggering OTPs through it. See the Supabase integration guide.
  2. MiniMoth dashboard — switch the project to Test Mode, open the Test Group card, and click Set up a test group.
  3. Add testers — up to 5 real, reachable phone numbers. Each one has to log in with an actual OTP before they can see anything, so a number you don't control won't get you access.
  4. Share the invite link — copy it from the same card and send it to your testers. You can rotate it any time to revoke the old link immediately; testers already logged in aren't affected.
  5. Tester logs in — they open the link, enter their phone number, and verify a one-time code (this part is a real OTP, sent over MiniMoth's normal infrastructure). That signs them into a 10-day session, independent of your project's own session settings — logging out is the only thing that ends it early.
  6. Trigger a Test Hook OTP — from your staging app, for one of the allowlisted numbers:
    // Trigger this against a phone number in your test group,
    // with your Test Hook wired up in Supabase Auth
    const { error } = await supabase.auth.signInWithOtp({ phone })
    The code shows up on the tester's screen within about 10 seconds. They can also install the page as an app and enable notifications, so it arrives as a push instead of requiring the tab to stay open.

Billing

A tester's one-time login OTP is billed to your wallet like any other OTP, that's real delivery, so it's real cost. The OTPs they preview afterwards cost nothing: those come from your Test Hook, which never sends a real message in the first place.

Good to know

  • Up to 5 numbers per project.
  • A captured OTP is only held for 5 minutes — if nobody's watching the screen when it comes through, it's gone by the time they check.
  • Removing a tester's number immediately logs out their session, if they had one.

Try the full OTP flow interactively in the sandbox — no SMS sent, no credits consumed. The same Playground also has a live test to send a real OTP to your phone (uses your credits).

Test in Playground →