From 8fa768beb8374b231494324b092382a7faada82f Mon Sep 17 00:00:00 2001 From: Allison Muyideen Opeyemi Date: Tue, 10 Nov 2026 02:22:32 +0100 Subject: [PATCH] Record the new narrated walkthrough against the dark design The 2026-11-10 cut re-records the demo journey with the S4.15 palette: a brand intro card, a re-synthesized narration whose first two lines match the new hero and chain bar, dark-glass captions, an equal-height phone segment and a try-it-yourself outro. 103.3 s, 1080p30, H.264 + AAC, 6.96 MB. Docs only; the video lives outside the repo. --- LAUNCH.md | 2 +- README.md | 2 +- ROADMAP.md | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/LAUNCH.md b/LAUNCH.md index 6249a93..1abd3db 100644 --- a/LAUNCH.md +++ b/LAUNCH.md @@ -54,7 +54,7 @@ _one complete moment_ — a real user action to a visible result — and to skip Recording notes: -- **Two captures exist** (2026-11-09). A **silent** cut: 88 seconds, 1080p, landing → dashboard → invoices → pay → receipt → short payment → phone, with on-screen captions and a click indicator. A **narrated** cut: 90.7 seconds, 1080p, the same journey re-recorded so each shot lands with its line — 14 synthesized lines (`say -v Samantha`, written in `voice/narration.json` with durations measured from the rendered audio) placed at absolute timestamps, H.264 + AAC stereo, 4.6 MB. Both were recorded with Playwright against the production demo build, so both are honest demo-mode footage with the banner in frame. The narrated cut is the one to upload unless a human voice is recorded; if it is, re-record against the new lengths rather than dubbing over the old picture. Substituting the real-payment shot from S8.4 and uploading remain the human's. +- **Three captures exist.** On 2026-11-09: a **silent** cut (88 seconds, 1080p, landing → dashboard → invoices → pay → receipt → short payment → phone, with on-screen captions and a click indicator) and a **narrated** cut (90.7 seconds, the same journey re-recorded so each shot lands with its line — 14 synthesized lines placed at absolute timestamps, H.264 + AAC stereo, 4.6 MB). On **2026-11-10, against the dark S4.15 design**, a third cut: `settle-demo-walkthrough-voiced-2026-11-10.mp4` — a 3.2-second brand intro card, 89.1 seconds of desktop journey, a 6.1-second framed phone segment, and a 5-second "try it yourself" outro; 1920×1080 at 30 fps, H.264 + AAC 48 kHz stereo, **103.3 seconds, 6.96 MB**. Its 14 lines are re-synthesized with macOS `say -v Samantha`; two were rewritten to match what is now on screen, captions and the cursor moved from the old green to the dark-glass/magenta chrome, and the mix is loudness-normalised to −16 LUFS. All three were recorded with Playwright against the production demo build, so all three are honest demo-mode footage with the banner in frame. The 2026-11-10 narrated cut is the one to upload unless a human voice is recorded; if it is, re-record against the new lengths rather than dubbing over the old picture. Substituting the real-payment shot from S8.4 and uploading remain the human's. - Shoot shot 4 twice: once in **demo mode** (reliable, no funds) and once from the **real payment** in S8.4 if it lands before recording. The real one is stronger; the demo one is the fallback and is honest as long as the banner is visible. - Keep the "Demo mode — nothing on this page moves money" banner in frame whenever demo data is on screen. That is the difference between a demo and a claim. diff --git a/README.md b/README.md index 60c382c..51df83d 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ app/ (routes, pages) worker/ (two interval loops) - **One write path.** The worker, the status poll and `submit-tx` all write through `lib/server/sync.ts`, so three callers cannot disagree about what a status means. - **Every boundary is validated.** zod on request bodies, on `process.env` and on every 1Click response; `server-only` markers keep server modules out of the client bundle. - **Two runtimes, one secret.** `middleware.ts` runs on Edge and route handlers on Node, so per-process module state is _two_ values — the reason demo mode pins a fixed session secret and real mode requires `SESSION_SECRET`. -- Full detail in `ARCHITECTURE.md` (short version: `ARCHITECTURE_ESSENTIALS.md`); file layout in `project_structure.md`; remaining work in `ROADMAP.md`; what a host has to provide in `DEPLOY.md`; launch material in `LAUNCH.md` (the video script — recorded as an 88 s silent walkthrough and a 90.7 s narrated one — the X post, and the submission payload: a field skeleton plus a placeholder worked example, neither of them the real thing). +- Full detail in `ARCHITECTURE.md` (short version: `ARCHITECTURE_ESSENTIALS.md`); file layout in `project_structure.md`; remaining work in `ROADMAP.md`; what a host has to provide in `DEPLOY.md`; launch material in `LAUNCH.md` (the video script — recorded as an 88 s silent walkthrough, a 90.7 s narrated one, and a **103.3 s narrated cut against the dark redesign** (2026-11-10, 1080p30, 6.96 MB) — the X post, and the submission payload: a field skeleton plus a placeholder worked example, neither of them the real thing). **No custody.** Settle holds no client funds, no key that can move a client's deposit, and no payout key. The quote's `recipient` is the freelancer's own address and refunds go to the client's own address. The one key the app _can_ hold — `STORAGE_PAYER_PRIVATE_KEY`, which would pay USDC storage deposits on NEAR so delivery cannot fail on a registration technicality — is optional, app-funded, spends storage fees rather than anybody's payment, and is not wired to sign in the shipped MVP (S2.10 needs an explicit approval). diff --git a/ROADMAP.md b/ROADMAP.md index b6a56bb..cd3b62c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -24,7 +24,7 @@ | 7. Hardening & edge cases | Nov 10–11 | 100% | ✅ done (S7.1–S7.13; four were already built and are now pinned by tests, #108 closed the bare-receipt-link dead-end, and S7.13/#140 — found on the hosted URL, not by CI — stopped the landing page's first render depending on `window`, with a fifth e2e test that opens `/` and refuses a hydration mismatch. 🔍 the memo-chain list and the region-block mapping are still ours — S0.12/S0.13 came back from the vendor in 2026-11-09 and published neither) | | 8. Deploy & real run | Nov 11 | 67% | in progress (**S8.1/S8.2/S8.3 ✅ 2026-11-08 — the human chose Vercel and said deploy; the web app is live in real mode on https://settle-wine-alpha.vercel.app against a hosted Neon Postgres, `/api/health` green from the running deployment, no login wall. The serverless host cannot run the worker, so payments stay fail-closed on that URL and one real payment (S8.4 👤) still needs the partner JWT. **Re-deployed 2026-11-09** on the human's "follow your recommendation": the live build was ~5 merged PRs stale — `GET /api/auth/challenge?intent=session` answered 404 — and now answers 200 from `ab9d241`, with `/api/health`, `/` and `/demo` all 200 and no login wall. Verifying it in a real browser found S7.13/#140. **Re-deployed again 2026-11-10** with S1.7/#149: challenge probe 200, `/api/health` green, landing page clean in Chromium, and the live `/api/tokens` shows `refundChain` with BTC refund-only and absent from `payoutAssets`. S8.4 is blocked on a credential, not on code: measured 2026-11-10, **every unauthenticated `POST /v0/quote` now answers `400 Internal server error`** — dry or not, three routes, including the USDC→USDC dry call that returned 200 on 2026-11-09 — while a bogus bearer gets `401 Invalid token` and `/v0/tokens` still answers 200**. **Re-deployed the same day with S4.15**: the live HTML serves the dark landing hero, the challenge probe is 200, `/api/health` is green, and Chromium at 1440 px and 390 px reports an enabled sign-in button, no page or console error and no horizontal overflow**) | | 9. README & public repo | Nov 11–12 | 100% | ✅ done (S9.1–S9.7; the fresh clone was run against the public URL and passes. The hosted demo URL is Phase 8, not this one) | -| 10. Launch: video, post, submission | Nov 12–13 | 57% | in progress (S10.1, S10.3, S10.5, S10.6 ✅ as drafts in `LAUNCH.md`; S10.2, S10.4, S10.7 are 👤 — voice-over decision and upload, posting, submitting; two walkthrough cuts are recorded) | +| 10. Launch: video, post, submission | Nov 12–13 | 57% | in progress (S10.1, S10.3, S10.5, S10.6 ✅ as drafts in `LAUNCH.md`; S10.2, S10.4, S10.7 are 👤 — voice-over decision and upload, posting, submitting; three walkthrough cuts are recorded, the newest against the dark design) | | 11. After submission | Nov 14–25 | 0% | not started | | **Overall (MVP)** | | **92%** | by the formula under this table: (1100) ÷ 12 = **91.7**. See the correction note below — the number printed here for the last two days, ~82%, was itself miscalculated. **The figure that describes the entry is the one under it: 5 of 9 submission gates (56%).** | @@ -197,7 +197,7 @@ Format: `- [task id] what blocks it · who can unblock · since date` ## Phase 10 — Launch (Nov 12–13) - [x] **S10.1** [#81](https://github.com/MFrancis-dev/settle/issues/81) Demo video script: user problem → one full payment → NEAR's role → next step · 2026-11-06: `LAUNCH.md` §2 — nine shots with timings, totalling ~3 minutes, ordered exactly as the live rules ask (problem → one complete moment → NEAR's role → next step). Shot 4, the payment from token pick to receipt, gets 60 s because it is the shot the video exists for. Recording notes cover shooting it twice (real payment if S8.4 lands, demo mode as the honest fallback with the banner in frame), captions, no music under speech, and a size target for attaching rather than linking. -- [ ] **S10.2** [#82](https://github.com/MFrancis-dev/settle/issues/82) 👤 Record the video (real payment from S8.4 + demo mode) — the script is written; a real payment and the upload need the human. **2026-11-09: two captures exist.** A silent 88-second 1080p cut of the full demo journey (landing, dashboard, invoices, pay, receipt, short payment, phone) with on-screen captions and a click indicator, and a **90.7-second narrated cut** of the same journey whose 14 lines are synthesized with macOS `say` and placed at absolute timestamps, so the footage was re-recorded to the narration's own measured lengths and the picture changes with the voice (quote → address → status → receipt → short payment → phone). Both are demo-mode footage with the banner in frame. A human voice-over (or approval of the synthesized one), the real-payment shot from S8.4 and the upload remain hers. Raised in priority by Q-012: "screenshots are not enough when judges cannot open the demo". +- [ ] **S10.2** [#82](https://github.com/MFrancis-dev/settle/issues/82) 👤 Record the video (real payment from S8.4 + demo mode) — the script is written; a real payment and the upload need the human. **2026-11-09: two captures exist.** A silent 88-second 1080p cut of the full demo journey (landing, dashboard, invoices, pay, receipt, short payment, phone) with on-screen captions and a click indicator, and a **90.7-second narrated cut** of the same journey whose 14 lines are synthesized with macOS `say` and placed at absolute timestamps, so the footage was re-recorded to the narration's own measured lengths and the picture changes with the voice (quote → address → status → receipt → short payment → phone). Both are demo-mode footage with the banner in frame. A human voice-over (or approval of the synthesized one), the real-payment shot from S8.4 and the upload remain hers. **2026-11-10: a third cut, against the S4.15 dark design.** Silent 89.1 s desktop plus 6.1 s phone, 1920×1080 at 30 fps, with a 3.2 s brand intro card, an equal-height phone segment and a 5 s "try it yourself" outro. The narration is re-synthesized (`say -v Samantha`) so two lines now match the new hero and the chain bar; captions and the click indicator moved from the old green to the new dark-glass/magenta chrome; 14 lines are mixed at absolute timestamps and loudness-normalised to −16 LUFS. **103.3 s, 6.96 MB, H.264 + AAC 48 kHz stereo** at `/Users/allison/NEAR/recordings/settle-demo-walkthrough-voiced-2026-11-10.mp4`. Raised in priority by Q-012: "screenshots are not enough when judges cannot open the demo". - [x] **S10.3** [#83](https://github.com/MFrancis-dev/settle/issues/83) Draft the X post (problem first, NEAR's concrete role, repo + demo links, @NEARProtocol #NEARHackathon, optional @NearLegion @NearBuilders) · 2026-11-06: `LAUNCH.md` §3 — three options with character counts and what each is for: A problem-first and plainest (recommended, ~560), B leading with `swapType: EXACT_OUTPUT` for a technical timeline (~520), C short and letting the video carry it (~330). All three carry @NEARProtocol and #NEARHackathon; the optional tags are marked with their cost. The links section says plainly: post the hosted demo URL or nothing — no placeholder. 2026-11-09: the links are real now — hosted demo `https://settle-wine-alpha.vercel.app` and the project pfp `public/pfp.png` — and §3 says so. - [ ] **S10.4** [#84](https://github.com/MFrancis-dev/settle/issues/84) 👤 Publish the post; paste its URL here - [x] **S10.5** [#85](https://github.com/MFrancis-dev/settle/issues/85) Re-read live HACKATHON.md for rule changes · 2026-11-06: fetched https://nearhackathon.com/HACKATHON.md and diffed it against our assumptions in `LAUNCH.md` §1. No rule invalidates merged work. Four findings that change behaviour: (1) **Q-012 makes the video effectively mandatory** — a local-only demo is allowed but screenshots are not enough when judges cannot open it, so S10.2 outranks cosmetic work; (2) the submission contract's **`website` field is a spam trap** — any non-empty value rejects the submission, so our payload carries the eleven documented fields and nothing else; (3) **Q-006: the 1Click JWT is not required** and without it a 0.2% fee applies, which confirms the no-JWT path we already ship, and registering at partners.near-intents.org would unblock S0.8/S0.12/S0.13; (4) judging starts 2026-11-16 and results land by 2026-11-18, so the hosted demo must be up before judging, not merely before the 2026-11-14 deadline (S11.1's dates were already right). 2026-11-09: re-fetched; the contract is unchanged (11 fields, no `website`, one submission, same `requestId` on retry), and the JWT row's effect text was corrected because S0.12/S0.13 were answered without it. @@ -225,6 +225,7 @@ Format: `- [task id] what blocks it · who can unblock · since date` One line per contribution, newest first: `YYYY-MM-DD · who/agent · what changed · tasks` +- 2026-11-10 · agent · S10.1's script, recorded against the new design and voiced. The human asked for "a new video with voiceover" after the S4.15 restyle. The existing Playwright recorder was reused, so the footage is still demo-mode and honest. Two narration lines were rewritten and re-synthesized to match what is now on screen (the hero's own promise; one address, one exact amount, the fee named before anything is sent); captions and the cursor were moved from the old green to the new chrome because green is reserved for money that arrived. Added a 3.2 s brand intro card and a 5 s outro card rendered from `cards/cards.html`, re-paced the landing scroll by the second line's real spoken length, and scaled the phone segment to 1000 px high inside a framed dark field. Verification: every cue's mean level is −15.9 to −18.6 dB where speech should be and −91 dB in the intentional gaps; stream probe reports 1920×1080 at 30 fps, H.264 + AAC 48 kHz stereo, **103.333 s, 6.96 MB** at `/Users/allison/NEAR/recordings/settle-demo-walkthrough-voiced-2026-11-10.mp4`. Still 👤: a human voice-over decision (or approval of the synthesized cut), the S8.4 real-payment shot and the upload · S10.2 ([#82](https://github.com/MFrancis-dev/settle/issues/82)) - 2026-11-10 · agent · Restyled the submission-facing landing on the human's "use this as a template" with a Dribbble crypto-exchange shot. Dribbble serves curl and WebFetch nothing, so the reference was read from its `og:image` in the browser: near-black ground, one magenta light shaft behind a centred hero, glass panels on hairline borders, pill CTAs, floating coin chips. **S4.15** ([#143](https://github.com/MFrancis-dev/settle/issues/143)): a `.night` scope re-declares the colour and radius tokens under a single class, so the page flips to that palette without a second stylesheet, and `.paper` restores the light ledger for the receipt; the new magenta is chrome only, while brand green keeps meaning money that arrived. Hero, glass stage around the real client-view demo, chain bar (Bitcoin is refund-only), steps, live token picker, three feature cards with mini product visuals, FAQ, closing CTA. Measured in Chromium: **0 horizontal overflow at 1440 px and 390 px** (`documentElement.scrollWidth` equals the viewport), the landing e2e contract still passes (server HTML offers sign-in, hydration throws no `pageerror`, the receipt amount's RGB sum stays under 600), **671 unit + 1 skip**, typecheck/lint/format clean. No phase percentage moves — the redesign lands inside an already-complete phase · S4.15 (new, [#143](https://github.com/MFrancis-dev/settle/issues/143)) - 2026-11-10 · agent · Closed the leaked-credential item on the human's "revoke the leaked PAT": **the token is already dead.** `gh auth status` now fails every authenticated call for `TemiMustapha` ("The token in default is invalid"), where on 2026-11-09 the same entry answered as that account, so it was revoked or expired server-side in between. Removed the dead entry from this machine's keyring and corrected `LAUNCH.md`, which still listed the revocation as outstanding. No secret was quoted, printed or copied anywhere. · S10.6