Today
$1,284.50Emerald Pay · Path A
Tap to Pay on iPhone for every counter.
SoftPOS for operators and location partners — contactless acceptance without a dongle fleet. Partner portal sandbox is open; SoftPOS Live and App Store GA are coming soon.
Live SoftPOS & App Store — coming soon
Explore architecture and the partner Pay desk in sandbox. Real-money taps, TestFlight / App Store installs, and Connect Live remain launch-gated until Wave 0 and Apple entitlement clear.
Product preview
ePOS on the phone. Ledger on the web.
Preview UI inside the same device kit used for TMS — Tap to Pay keypad on mobile, Connect + taps desk on the partner portal. Not a live money claim.

Mobile ePOS · Tap to Pay
Contactless collect on the phone already in your pocket.
Staff enter an amount, the customer taps at the top of the device, and the sale lands on the location’s Connect account — Emerald keeps a platform fee.
Web · Partner portal
Onboard, register ePOS locations, watch every tap.
The same portal that runs fleet ops owns Connect onboarding, Stripe Terminal locations, and the Pay ledger. The phone is the reader — the web app is the system of record.

Why now
Cash share is shrinking. Phones are already on site.
ATM surcharge stays important in cash-heavy niches, but partners still need to take money in person. Emerald Pay adds a modern take-rate without a second processor brand or dongle fleet.
No dongle
Compatible iPhones become the reader. Staff tap the customer’s card, phone, or watch on the top of the device.
Money to the location
Stripe Connect Express-style onboarding. Destination charges settle to the location; Emerald keeps an application fee.
Stripe is the PSP
Path A only — Emerald never becomes an Apple-listed PSP. Terminal SDK + Apple entitlement name Stripe.
Architecture
Web is the ledger. Phone is the reader.
Same Next.js backend as machine checkout and the partner portal. Secret keys stay server-side; the app only receives connection tokens and PaymentIntent client secrets.
Vercel web app
- · `/portal/pay` — Connect onboard + ePOS locations + ledger
- · `POST /api/pay/terminal/connection-token`
- · `POST /api/pay/payments/intents` (destination + fee)
- · Webhooks → tap rows + capability refresh
- · Accounts v2 · Express dashboard · US launch
iOS companion
- · Stripe Terminal SDK · Tap to Pay reader
- · Apple entitlement (PSP = Stripe)
- · Location picker · Face ID ePOS lock
- · Keypad → collect → confirm → receipt
- · Soft-gate devices that cannot accept NFC
Safari cannot host Tap to Pay — native companion required.
Implement
How to build Path A end to end.
Dependency-aware checklist from the TDS. Ops (Stripe Terminal, Apple entitlement, migration) unblocks the iOS ePOS.
1. Platform prep
- ·US launch · Express-style Connect · destination charges (locked)
- ·Enable Stripe Terminal + Connect on the platform account
- ·Apply Supabase migration `20260827000000_emerald_pay.sql`
- ·Request Apple Tap to Pay entitlement with PSP = Stripe
2. Web (this app)
- ·Partner desk: `/portal/pay` — onboard, ePOS locations, tap ledger
- ·`POST /api/pay/connect/onboard` — Accounts v2 + Account Link
- ·`POST /api/pay/terminal/connection-token` — scoped to Terminal location
- ·`POST /api/pay/payments/intents` — `card_present` + fee + destination
- ·Webhooks update `pay_payments` on succeed / fail / refund / dispute
3. iOS companion
- ·Native app with Stripe Terminal SDK (SwiftUI preferred)
- ·Auth against Emerald users · location picker · Face ID ePOS lock
- ·Pre-connect Tap to Pay on foreground · amount keypad · collect/confirm
- ·Soft-gate unsupported devices; NFC accept on compatible iPhones only
Spec: docs/EMERALD_ATM_TAP_TO_PAY_TDS.md · Kanban map: docs/EMERALD_PAY_KANBAN.md
Test
Prove it in sandbox first.
Simulated reader and Connect test mode now. Entitlement builds and Live $1 pilots come after Wave 0 — not claimed at marketing launch.
Stripe test mode
Simulated Tap to Pay reader in the SDK. Success / decline / PIN amounts from Stripe docs. Forward webhooks with `stripe listen` to local or preview.
Connect gates
Restricted connected account cannot charge. Application fee appears on the platform balance. Destination receives correct net.
Apple + device
Physical compatible iPhone on latest iOS with development entitlement. First-run T&Cs and reader config — Live $1 pilots only after distribution entitlement (post-launch).
App Review kit (later)
When GA is ready: 2–3 min video — login → onboarded location → tap success → decline → receipt + matching portal row. Notes: PSP = Stripe.
Next step
Ready to explore Emerald Pay?
Open the partner sandbox desk and verification docs. Live SoftPOS pilots start after Connect + Apple entitlement — high-risk MCCs stay out of v1.