Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion LAUNCH.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ _one complete moment_ — a real user action to a visible result — and to skip

Recording notes:

- **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.
- **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, ~96 seconds of desktop journey, a 6.0-second framed phone segment, and a 5-second "try it yourself" outro; 1920×1080 at 30 fps, H.264 + AAC 48 kHz stereo, **110.3 seconds, 7.31 MB**. Its 15 lines are spoken by **Daniel (UK)** at rate 175; 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.

- **The real-payment segment is a slot, verified empty and fillable.** After the demo receipt and before the phone shot, `assemble.mjs` inserts a 2.5-second "One real payment" card and then the clip at `recordings/real/real-payment.{mp4,mov,webm}` if that file exists; line `n15` narrates it ("One real payment. Same flow on mainnet…") and every later cue shifts automatically. The clip is muted, letterboxed to 1080p, and should show the pay page with **no demo banner**. Verified with a 10-second stand-in: the build grew 110.267 s → 122.767 s, the card sat at 99.2 s, n15 at 102.0 s and the phone shot moved to 111.7 s; the stand-in was then deleted, and the shipped cut is the 110.267 s demo journey. Recording the real payment (S8.4, needs the partner JWT and a funded signer) 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.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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, 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).
- 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 **110.3 s narrated cut against the dark redesign** (2026-11-10, 1080p30, 7.31 MB, Daniel's voice, with a reserved real-payment segment) — 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).

Expand Down
3 changes: 2 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. **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".
- [ ] **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, now in Daniel's voice with a real-payment slot.** ~96 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. All 15 lines are spoken by `say -v Daniel -r 175`; two were rewritten for the new hero and chain bar, captions and cursor moved to the dark-glass/magenta chrome, and the mix is loudness-normalised to −16 LUFS. `assemble.mjs` adds a **real-payment slot** between the demo receipt and the phone: if `recordings/real/real-payment.{mp4,mov,webm}` exists, a 2.5 s "One real payment" card and the muted clip are inserted and line `n15` narrates it, shifting every later cue. Proven with a 10 s stand-in (110.267 s → 122.767 s; card at 99.2 s, n15 at 102.0 s), then removed. **110.267 s, 7.31 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.
Expand Down Expand Up @@ -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 · The human picked a different voice and asked for the real-payment slot. **Daniel (UK, rate 175)** replaces Samantha for all 15 lines (14 cues plus one for the real-payment segment), and the cut was re-recorded because `record-demo.mjs` paces every shot by its line's measured length. Added `assemble.mjs`, which builds the whole file from the raw captures, computes the cue offsets, mixes and loudness-normalises the narration, and — when `recordings/real/real-payment.{mp4,mov,webm}` exists — inserts a "One real payment" card plus the muted clip after the demo receipt with line n15 over it, shifting the phone and outro. The slot was proven with a 10 s stand-in (110.267 s → 122.767 s; n15 at 102.0 s), the stand-in was deleted, and the shipped cut is **110.267 s, 7.31 MB** with the first line starting over the brand card. Still 👤: recording the real payment (S8.4), approving the synthesized voice, and uploading · S10.2 ([#82](https://github.com/MFrancis-dev/settle/issues/82))
- 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
Expand Down
Loading