Φ Pay is a merchant terminal for accepting Φ (Phi) with instant settlement and verifiable receipts — fully offline-first, with no accounts, no processors, and no database.
It feels familiar (tap → scan → paid), but the underlying primitive is different:
The receipt is the proof.
Every payment generates a verifiable receipt glyph that can be audited offline.
Φ Pay is a PWA merchant terminal designed for businesses that accept payments regularly:
- cafés
- studios
- boutiques
- pop-ups
- service providers
- events
- on-site vendors
It provides a premium “terminal” experience (like a modern POS), but it remains sovereign:
- No sign-in
- No centralized payment processor
- No custodial gateway
- No hidden ledger server
- No “trust me bro”
Your terminal is simply a deterministic verifier + receiver that emits and stores proof-carrying artifacts.
Conventional payment rails make merchants live inside these constraints:
- settlement delays
- chargebacks
- account freezes
- reversible “approval” systems
- centralized dispute authority
- data capture + surveillance
- dependence on uptime of a third party
Φ Pay flips the model:
When the customer pays, the merchant gets a settled receipt immediately.
Receipts are signed, verifiable events — not “authorized requests” that can be reversed by a network operator.
Once installed, Φ Pay works in airplane mode:
- create invoices
- ingest receipts
- maintain a merchant session ledger
- close and seal a settlement file
Receipts and session settlements can be verified without an account, backend, or special access.
Instead of monthly statements from a third party, the merchant closes a register session and receives one sealed Settlement Glyph file containing the full session.
Φ Pay is built around a simple, powerful model:
-
Invoice Glyph
The terminal generates an invoice payload representing “pay X Φ to merchant”. -
Receipt / Settlement Glyph
The payer produces a settlement receipt (a verifiable artifact) that references the invoice. -
Portal Register Session (merchant mode)
A merchant “opens a register” and the terminal collects receipts into a session ledger. -
Close Register → Mint one Settlement Glyph
When the owner closes the register, Φ Pay mints a single Portal Settlement Glyph that contains:- totals
- receipt list (or blob)
- rolling commitment root
- (optional) owner close proof
That one file is the sovereign accounting object.
The owner uploads their Merchant Glyph (anchor glyph).
This “arms” the portal and binds the session to a specific merchant ΦKey.
Owner verifies presence (optional plug-in) and opens the register.
The portal persists as OPEN across refresh/reload because it’s stored locally (IndexedDB).
It cannot be closed accidentally.
The terminal generates an Invoice Glyph and displays it as a QR.
Customers scan the QR and complete payment in their wallet/verifier flow.
Receipts can be ingested entirely offline via:
- scanning the receipt QR (terminal camera)
- pasting receipt URL/JSON payload
- importing a
.svgor.jsonreceipt file - local broadcast / companion flow (optional)
The portal only auto-accepts receipts that are valid for the merchant, and can enforce:
- invoice-gated auto-settle (recommended)
accepts only receipts that match an issued invoice (invoiceId + nonce) - or direct receives (optional)
accepts any receipt to the merchant key (with inbox review for unmatched)
On close, Φ Pay generates a single Portal Settlement Glyph (SVG) that includes:
- session header (merchant key, opened/closed times)
- counts + totals
- a cryptographic rolling root commitment across all receipts
- all receipts (or compressed blob)
- optional owner close proof
The result is a portable, offline-verifiable settlement object the merchant keeps forever.
Offline-first is not a vibe — it’s a constraint:
- The terminal uses IndexedDB as the local ledger.
- It does not require an API to render state.
- It can ingest receipts via file/QR/paste without network access.
- The PWA caches its app shell to allow reload in airplane mode.
- When online is available, it can optionally sync or broadcast — but offline remains complete.
Φ Pay is compatible with the Presence-Bound Identity framing:
- Truth: the receipt artifact is verifiable and unaltered
- Identity: who created it can remain private
- Presence: optional owner/payer presence proof can be attached when relevant
Φ Pay focuses on merchant settlement truth:
- the money movement/receipt truth
- the session ledger truth
- the sealed settlement file truth
Key code lives here:
src/components/PhiTerminal/
PhiTerminal.tsx # shell (optional)
views/PortalView.tsx # merchant terminal (Portal Register)
portal/* # portal state machine + settlement minting
protocol/* # invoice/settlement primitives
storage/* # IndexedDB ledger
ui/* # keypad, QR, sheets, pills
transport/* # ingest helpers
pricing/* # USD/Φ conversion (optional module)
npm install
npm run devBuild + preview:
npm run build
npm run preview-
Open the app once online.
-
Install to Home Screen (or desktop install).
-
Turn on Airplane Mode.
-
Re-open the installed app.
-
Confirm:
- portal renders
- invoices generate
- QR renders
- receipts can be ingested by paste/file
- closing register mints a settlement glyph
Φ Pay is intentionally:
- merchant-native
- artifact-native
- proof-native
- offline-complete
- sovereign by default
This is not “another checkout UI.” It’s a payment terminal built on verifiable objects.