Skip to the page

Every hold ends one of two ways: paid through PayPal, or passed to the next buyer.

Hawker reads a live-sale chat in English, Pidgin or Taglish, turns each “mine” into a timed hold with its own PayPal invoice, and passes an unpaid hold to the next buyer in line.

PayPal sandbox: no real money moves. Ada’s Closet is a demo store with the builder’s own catalog.

Chat in

—

Ada's Closet · invoice padconnecting

Sales invoice

—

Paid–

Read from PayPal.

Passed–

To the next buyer in line.

The seller
Goes live anywhere and pins the stall link.
Buyers
Claim on the stall, then pay on PayPal.
A helper
Watches every hold on the desk.

How a hold ends

Traced live from the demo stall once a copy has ended.

  1. A buyer types it the way they would on the live

    —

  2. A model reads what they meant. Code decides who holds it

    —

  3. One PayPal invoice, one timer

    —

  4. It ends one of two ways

    —

Two endings. No third.

Paid only when PayPal says so.
Hawker reads each invoice’s status from PayPal. There is no mark-as-paid button and no seller override.
Read again before anything passes.
When the timer runs out, Hawker asks PayPal first. A paid invoice can’t be cancelled: PayPal refuses with CANNOT_CANCEL_PAID_INVOICE.
Nothing else to end in.
The database accepts only Waiting, Holding, Paid and Passed, and refuses any change to a hold that has ended.

Paid

The latest paid copy from the demo stall appears here.

Passed

The latest passed copy from the demo stall appears here.

Every way out, refused.

Try each forbidden ending yourself. Every button makes the attempt now, on a real copy from the demo stall: PayPal attempts are real API calls, and database attempts are rolled back.

At PayPal

  1. Cancel a paid copy's invoice

    on the latest paid copy

  2. Cancel a passed copy's invoice again

    on the latest passed copy

  3. Pay a passed copy late

    on the latest passed copy's invoice

In the database

  1. Turn a paid copy into a passed one

    on the latest paid copy

  2. Turn a passed copy into a paid one

    on the latest passed copy

  3. End a passed copy a second time

    on the latest passed copy

  4. Erase a paid copy from the record

    on the latest paid copy

  5. Give a copy a third ending

    on a new copy

  6. Hold a copy with no PayPal invoice

    on a new copy

Check it yourself

Nothing here is a mock-up. Each of these opens the real thing.

  • A paid invoice, on PayPal

    The latest paid copy's invoice opens on PayPal's own page once one exists.

  • Claim, then watch it end

    Claim on the demo stall from your phone, then watch the desk: every copy, each with its stamp.

    Claim on the demo stall
  • The running build

    The service reports the exact commit it runs and how long it has been up.

    Open /api/health

PayPal Invoicing API (sandbox) · Groq qwen/qwen3.8-27b, failing over to Gemini gemini-3.5-flash-lite · Neon Postgres · Render