Pinch Payments Hackathon 2026 · build window Fri 24 Jul 19:00 → Sun 26 Jul 19:00 AEST · updated as we go
The running record of the 48-hour build: what shipped, when, what broke, and which calls changed the shape of the project. Newest day first. The polished summary lives on the hackathon build page.
Day 2 of 3 — dry run in progressProgress tracker
Four workstreams. Three are done and verified against the Pinch test environment; the last is the submission wrapping.
remaining: native REST path for the platform payment actions · vendor payment-received notification · MCP redeploy + PINCH_MCP_URL · 60-second video · agent re-seed · CoachPlus prod push · final submission form
23 tools over the Pinch API, confirm-guarded writes, dishonour taxonomy, splits, term subscriptions and QR payment links. Two security passes complete; optional Managed-Merchants platform mode.
10-agent family including the customer-facing Remi Front Desk, deployable from the Agent Family with per-organisation Pinch keys. Re-seed pending.
Pinch as the platform's payments provider with BYO keys per coach — per-coach Connect Pinch, scoped credentials, per-coach Remi routes. Now with in-platform payment actions (subscriptions, refunds, cancel, splits, discount codes) via the MCP engine, plus a payments simulator. Prod push pending.
Landing page, hackathon build page, demo business packs and runbooks done; 60-second video pending.
Polish week
The build runs end-to-end against the Pinch test environment. This is the honest split between what ships today and what is queued for polishing — stated plainly rather than glossed.
| Area | Exists today | To complete (polish) |
|---|---|---|
| MCP server | 23 tools including QR links, splits, subscriptions and refunds; two security passes; hardened non-root container; per-tenant header credentials. | Caller-supplied idempotency keys on every write; a signed short-lived approval object; distributed rate limiting. |
| CoachPlus payments | Hosted checkout + QR, term / weekly / fortnightly subscriptions with deposits (direct debit), refunds, cancellations, splits and discount codes — coach routes calling the MCP engine; webhook-driven GST invoices; dishonour diagnosis. | A native direct-REST path for these actions (MCP-backed today); the vendor "payment received" notification delivered from the webhook; CaptureJS card capture. |
| Discounts | Reduced-amount codes on customer payments (percent or fixed), tenant-scoped, with a 100%-off short-circuit that skips Pinch (no $0 links). | A first-class Pinch discount object; a discount tool in the MCP. |
| Simulation | Mock mode (fabricated failures run through Remi's real issue-detection, no keys) and sandbox mode (#dishonour-code synchronous dishonours, term subscription, split). | Time-Travel overnight direct-debit fast-forward — a Pinch sandbox limitation, not our code. |
| Deploy | The pinch-mcp Dockerfile honours Cloud Run's $PORT; redeploy runbook (SETUP §3). | Confirm the live hosted endpoint URL and set PINCH_MCP_URL across CoachPlus + LyboAI. |
| Remi issue detection | Dishonour taxonomy (15 codes), silently-stalled subscription detection, split exposure, and a needs-attention feed with drafted messages — across all of the above. | — |
Timeline
Short factual entries, in the order they happened. Friday's times are AEST; Saturday's entries are numbered in sequence.
toolsHash manifest pinning on /meta, and a --bind flag. SECURITY.md rewritten as a standards mapping plus production roadmap.pinch_import_payers + pinch_onboard_business take the server from 20 to 22 tools — billing blueprint, payer import and per-payer setup links in one guarded call.x-pinch-current-merchant) is kept for licensed platforms.coachSecrets, AsyncLocalStorage credential scoping, a per-merchant token cache, and per-coach Remi routes.pinch.lybotechgroup.com (Vercel).llms.txt: schedule-preview and fee-preview endpoints queued for Polish Week, and the decision made to ship a toolkit for others — the MCP server stays proprietary./api/coach/finance/act (subscribe, collect, refund, cancel, split) and a discount-code helper — call the MCP engine, so CoachPlus and Remi share one implementation. A native direct-REST path is a polish item./api/coach/finance/simulate with a mock mode (fabricated failures run through Remi's real issue-detection, no keys) and a sandbox mode (#dishonour-code synchronous dishonour, term subscription, split) — so Remi's needs-attention feed lights up for every capability.pinch_create_payment_qr renders a hosted link as a scannable QR with an optional vendor-notification tag (delivered host-side from the webhook) — the server is now 23 tools.$PORT. Landing + docs refreshed to 23 tools, with the simulator, discounts and QR documented and clickable platform links added.pinch-version: 2020.1, money-in-cents, dishonour semantics, #code failure simulation, Time-Travel, Current-Merchant.tools/call.pinch_cashflow_summary, +pinch_create_subscription — found the real schema (recurringPayment{frequencyOffset, frequencyInterval}; sources optional at subscribe-time → setup-link pattern). 14 tools.allowedPaymentMethods is required; discovered that metadata passes through to the Payment object — adopted for CoachPlus correlation. Live link created.pinch_payer_statement (statement of accounts, live-tested), payment-link fixes, README honesty notes, and a timezone bug fixed — Pinch renders transactionDate as midnight-AEST-in-UTC (14:00Z), so naive UTC slicing shifted every payment a day early. 15 tools.pinch_cancel_subscription (real DELETE /subscriptions/{id} verified; GET-first preview; graceful 400 handling live-tested) → 16 tools, full subscription lifecycle. In parallel, the support-with-remi template and remi-capability recipe ship — Remi as a payments workflow inside a general support agent, instructions at 5,679/8,000 characters, guard language byte-identical across all three deployment shapes.startDate); the webhook gains the billing lifecycle — renewal invoices with GST split, dishonour → past_due, cancellation → downgrade. The $0.00 / 100%-discount path skips Pinch entirely.pinch_create_split +pinch_get_split_status — shared-cost splitting for service businesses with largest-remainder allocation, JSON metadata envelopes and exposure tracking. Live-verified with a real 3-party $1,200.00 50/30/20 studio-rent split, created and reconstructed purely from Pinch data (spl_Bh8QfH0Rai). Empirical find: the payment-links list endpoint returns metadata plus nested payments (undocumented), enabling fully server-side reconstruction.create_subscription gains term billing (endType number-of-payments / end-date offsets), deposit + instalments (plans' native fixedPayments alongside recurring), and plan-level metadata for per-instructor attribution. Live-verified: a "$100.00 deposit + $59.00/week × 10" term subscription created and cancelled. API discovery: Pinch hard-requires a stored source at subscription-create (docs say optional) → honest two-step: plan + setup link, subscription on re-call (pendingSetup).Challenges & opportunities
The decisions that set the direction — and, below, the challenges we turned into product opportunities. Kept high-level; the deep technical notes live in the repos.
One Pinch core, portable across Claude, Cursor and LyboAI — every host gets the same tools instead of three bespoke integrations.
Every write refuses without confirm:true and returns a preview — the gate lives in the tool layer, not the prompt, so no host can move money without a human step.
Repositioned as an augmented product line — Design · Do · Ask · Fix across three surfaces — with the MCP server as one pillar, not the pitch.
Each business owns its merchant relationship with Pinch directly — cleaner compliance, and every platform adoption grows Pinch's merchant base.
Back-office Remi and customer-facing Remi Front Desk carry different privileges — the customer-facing agent gets a restricted tool subset by construction.
The MCP server stays proprietary. What we share is the toolkit — integration recipes, the security guide and patterns — so others can build safely on Pinch. The value is the product line, not the server binary.
Move the hosted endpoint from an open relay to a gated service: a login / registration step, per-merchant domain registration, and headless operation. Today IAM + a shared-secret header gate it; the login + domain-registration console is a Polish-Week build.
metadata passthrough for correlation instead of fragile description markers; split payments brought in-scope as an underserved shared-cost wedge for service businesses (~22:30 founder call), with exposure thresholds of >14 days or >25% of total; and statement of accounts added now, with Xero and the report suite deferred to the roadmap — First Submission locks the concept Sunday, and Polish Week forbids new features.The friction we hit, and the opportunity each one opened. High-level — the blow-by-blow lives in the repos.
| Challenge | What we did — and the opportunity |
|---|---|
| Security is the real differentiator — payments + AI is a high-stakes surface. | Two hardening passes, guardrails enforced in the tool layer, and a new MCP Security Checker — seeding an AI Security product line. |
| A hosted MCP is an open relay with caller credentials. | Chose BYO-keys + confirm-guards + refund caps now, and scoped a gated server (login, per-domain registration, headless) for launch — a managed, secured Billing Studio. |
| The sandbox won't fast-forward overnight direct debit. | Demonstrate dishonours synchronously and shipped our own payments simulator — a cleaner, repeatable demo path. |
| Undocumented API behaviours — account-number length, required fields, timezone handling, a stored source needed before subscribing. | Encoded into the client and tool validation, and captured in the toolkit so others don't relearn them. |
| Platform docs didn't match the code on LyboAI. | Built against the code and patched the platform — hardening the Agents Platform ahead of its launch. |
Deploy pitfalls — Cloud Run $PORT, the Supabase pooler. | Fixed and written into a repeatable deploy runbook. |
live unless a self-hosted operator explicitly enables it.