diff --git a/AGENTS.md b/AGENTS.md index fd04694..c619cd1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ Instructions for AI coding agents working in any Kinlock repository. Humans may read it too. -Kinlock lets **anyone, anywhere lock USDC on Stellar (Soroban) for a verified school or landlord anywhere in the world.** A sender locks funds to a verified payee (School or Rent), and funds can only go to that payee's payout address or back to the sender. The product is **worldwide by design and launched market by market**: nothing in the code is tied to one country. It handles other people's money, so **correctness and restraint matter more than speed or cleverness.** +Kinlock lets **anyone, anywhere lock USDC on Stellar (Soroban) for a verified payee anywhere in the world.** A sender locks funds to a verified payee (School or Rent), and funds can only go to that payee's payout address or back to the sender. The product is **worldwide by design and launched market by market**: nothing in the code is tied to one country. It handles other people's money, so **correctness and restraint matter more than speed or cleverness.** Docs version this file was written against: **v0.3** (`PRD.md`, `ARCHITECTURE.md`, `ARCHITECTURE_ESSENTIALS.md`). diff --git a/ROADMAP.md b/ROADMAP.md index 250c47d..9fd18e8 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,7 +4,7 @@ | | | |---|---| -| **Last updated** | 2026-10-08 (M3-13 receipt + verify pages; documentation-hub link) | +| **Last updated** | 2026-10-08 (wording: "verified payee" replaces "school or landlord") | | **Docs baseline** | v0.3, worldwide scope (`PRD.md`, `ARCHITECTURE.md`, `ARCHITECTURE_ESSENTIALS.md`, `AGENTS.md`, `CLAUDE.md`, `project_structure.md`) | | **Current phase** | Phase 0 (Foundations) → starting Phase 1 (M0 Validate) | | **Readiness** | See [§3](#3-progress-snapshot) | @@ -523,6 +523,7 @@ Newest first. One entry per PR. Required for every contribution (see §2). | Date | PR / ref | Repo | Rows touched | Summary | |---|---|---|---|---| +| 2026-10-08 | `docs/verified-payee-wording` | app | no row changes | Synced `AGENTS.md`/`docs/PRD.md`/`docs/ARCHITECTURE_ESSENTIALS.md` from `Kinlock-Org/.github` (`scripts/sync-docs.sh`), and updated `messages/en.json` (`app.tagline`, `pages.home.heroHeadline`/`heroSubtext`/`lockBody`/`sendersBody`, `pages.send.intro`): "a verified school or landlord" replaced with "a verified payee" everywhere it was used as a generic stand-in for the product's reach, rather than naming the two current MVP categories factually. Verified: `pnpm lint`, `pnpm typecheck`, `pnpm test` (92/92, including the inline-strings guard) all green. Canonical doc source edited in `.github` PR #23 | | 2026-10-08 | `feat/m3-13-receipt-verify` | app | DONE: M3-13 | Built `/r/[txHash]/[eventIndex]` and `/verify`, replacing their `PageStub`s. Both call the SDK's `verifyReceipt` (chain-authoritative tiered verification) and show "Valid"/"Not valid"; the "Payment to verified payee" headline (hard rule 7) renders only when `result.valid` is actually `true`. A separate `getLock` read is used purely to label the asset (code and issuer) since `VerifyReceiptResult.receipt` doesn't carry the token; falls back to an unlabeled amount rather than guessing when that lock is unavailable. New shared pieces: `lib/receipts/parse.ts` (pure link/hash parsing, unit-tested), `lib/receipts/receipt-text.ts` (message-key mapping), `components/receipts/ReceiptResult.tsx` (shared result view for both pages). Verified: `pnpm lint`, `pnpm typecheck`, `pnpm test` (92/92 passed, including new `parse.test.ts`), `pnpm build` all green | | 2026-10-08 | `docs/link-doc-hub` | app | no row changes (org row W-10 tracked in `.github`) | Linked `Kinlock-Org.github.io` (the org's documentation-issue hub) from README, with `area:app` | | 2026-10-08 | `docs/docs-site-link` | app | no row changes (org row W-10 tracked in `.github`) | Linked the new hosted docs site (`kinlock-org.github.io`) from README | diff --git a/docs/ARCHITECTURE_ESSENTIALS.md b/docs/ARCHITECTURE_ESSENTIALS.md index f91f2eb..45a3c83 100644 --- a/docs/ARCHITECTURE_ESSENTIALS.md +++ b/docs/ARCHITECTURE_ESSENTIALS.md @@ -6,7 +6,7 @@ > If code and this file disagree, stop and flag it. Don't silently pick one. ## 1. What this is -- **Anyone, anywhere can lock USDC on Stellar/Soroban for a verified school or landlord anywhere in the world.** Worldwide by design, launched market by market. +- **Anyone, anywhere can lock USDC on Stellar/Soroban for a verified payee anywhere in the world.** Worldwide by design, launched market by market. - A sender locks funds to a **verified payee** (School or Rent) in a **supported country**. - Funds go only to the payee's **snapshotted payout address** or back to the sender. - Receipts prove **payment to a verified payee**. They do **not** prove service delivery. diff --git a/docs/PRD.md b/docs/PRD.md index fd5f317..5472278 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -14,7 +14,7 @@ | **Companion docs** | `ARCHITECTURE.md`, `ARCHITECTURE_ESSENTIALS.md` | ### What changed in v0.3 (worldwide scope) -- **Product is no longer "abroad → Nigeria".** Any sender, anywhere, can lock USDC for a verified school or landlord anywhere in a **supported country**. Domestic payments (sender and payee in the same country) are in scope. +- **Product is no longer "abroad → Nigeria".** Any sender, anywhere, can lock USDC for a verified payee anywhere in a **supported country**. Domestic payments (sender and payee in the same country) are in scope. - **Worldwide by design, launched market by market.** The core stays country-agnostic: no country, currency, or anchor is hard-coded in the contract, SDK, indexer, or app. Country and local currency are **registry data** (ISO 3166-1 and ISO 4217). - **Supported-countries list** (REG-9), enforced in registry CI and app policy, set with counsel. It is **not** enforced on-chain (§9.1 B19). - **Naira-specific items generalized:** indicative **local-currency** equivalent (SND-4), per-market cash-out routes (PAY-5), per-market legal review. @@ -35,7 +35,7 @@ ## 1. Summary -**Kinlock lets anyone, anywhere lock USDC on Stellar (Soroban) for a verified school or landlord anywhere in the world.** +**Kinlock lets anyone, anywhere lock USDC on Stellar (Soroban) for a verified payee anywhere in the world.** In more detail: a sender locks USDC to a **verified payee** (a school or landlord) for a declared purpose. The funds can only be released to that payee, or returned to the sender if unclaimed or if the payee is revoked. Each release yields a **receipt anyone can verify on-chain**. @@ -46,7 +46,7 @@ Kinlock is non-custodial: a Soroban contract holds locked balances and no Kinloc **What Kinlock proves:** a specific amount of USDC reached a payee that a named attester verified, at a specific time, for a specific reference. **What Kinlock does not prove:** that the school credited the student, or that the landlord applied the rent. Optional payee acknowledgment narrows this gap (LCK-10) but cannot close it. -**MVP in one sentence:** a sender locks USDC to a registered school or landlord, the payee releases it in tranches, and anyone can verify the payment on-chain. +**MVP in one sentence:** a sender locks USDC to a registered payee, the payee releases it in tranches, and anyone can verify the payment on-chain. ## 2. Problem diff --git a/messages/en.json b/messages/en.json index eac3709..d67e945 100644 --- a/messages/en.json +++ b/messages/en.json @@ -1,7 +1,7 @@ { "app": { "name": "Kinlock", - "tagline": "Money that can only reach the school or landlord it was meant for." + "tagline": "Money that can only reach the verified payee it was meant for." }, "common": { "testnetBanner": "Testnet only. No real money moves here.", @@ -35,18 +35,18 @@ "pages": { "home": { "title": "Kinlock", - "heroHeadline": "Money that can only reach the school or landlord it was meant for.", - "heroSubtext": "Lock USDC on Stellar for a verified school or landlord, anywhere in the world. Nothing else can reach it.", + "heroHeadline": "Money that can only reach the verified payee it was meant for.", + "heroSubtext": "Lock USDC on Stellar for a verified payee, anywhere in the world. Nothing else can reach it.", "heroCta": "Send a payment", "howItWorksHeading": "How it works", "lockTitle": "Lock", - "lockBody": "You lock USDC for a verified school or landlord. The payout address is fixed at that moment. Nobody can redirect it later.", + "lockBody": "You lock USDC for a verified payee. The payout address is fixed at that moment. Nobody can redirect it later.", "claimTitle": "Claim", "claimBody": "The payee claims it directly, on the schedule you set. No one else, including Kinlock, can touch it.", "verifyTitle": "Verify", "verifyBody": "Anyone can check the payment on chain. The receipt says exactly one thing: payment to verified payee.", "sendersHeading": "For senders", - "sendersBody": "Pay a school or landlord for someone else, anywhere. Set a schedule instead of one lump sum, and get a receipt you can check yourself.", + "sendersBody": "Pay a verified payee for someone else, anywhere. Set a schedule instead of one lump sum, and get a receipt you can check yourself.", "sendersCta": "Send a payment", "payeesHeading": "For payees", "payeesBody": "Get verified once, then receive payments directly, without a bank account in the sender's country. Decline any payment before you claim it.", @@ -92,7 +92,7 @@ }, "send": { "title": "Send a locked payment", - "intro": "Lock USDC for a verified school or landlord. It can only be paid to them, or come back to you.", + "intro": "Lock USDC for a verified payee. It can only be paid to them, or come back to you.", "prefilled": "Filled in from a payment request. Check everything before sending: the request can't move money.", "prefillUnknownPayee": "The payee in this request isn't available right now (not verified or not active). Don't send until you've checked with them.", "payeeLabel": "Who you're paying",