feat: embedded project page — /project/{id} + public project view - #8
Merged
Conversation
…rce web app
Acceptance now returns project_url ({public_url}/project/{rfq_id}); the
workroom contract post and ops post carry it. The page is a super-light
web app embedded in the binary (checked-in vanilla HTML/CSS/JS under
web/, include_dir — same mechanism as pay's web-ui, no node toolchain):
scarce logo, live state badge, milestone scope, and Buzz onboarding
links (community web derived from the relay URL, desktop download).
GET /api/v1/projects/{id} serves the view (schema: project) —
deliberately commercial-free: no price, splits, budget, policy or npub
survives serialization (tested). workroom_name moved to studio-core so
mirror and page can never disagree. New config key public_url.
The relay ships a complete onboarding flow at /invite/<code> (Buzz Desktop deep link, platform-aware download, in-browser claim), so the page now links a minted invite instead of a bare product URL. BuzzPort grows mint_invite (NIP-98 signed POST /api/invites, x-auth-tag for managed identities); scarced keeps a live invite minted (72h ttl, re-mint daily, hourly retry). Fail-open: without owner/admin role the mint 403s, the log says why, and the page falls back to the community link. Buzz Desktop button now points at the canonical releases page.
lgalabru
force-pushed
the
feat/project-page
branch
from
August 1, 2026 21:22
e1f5821 to
4f8886e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements ludovic's e2e ask: after acceptance, the buyer gets
{public_url}/project/{id}— an exciting, shareable page served by scarced itself. Stacked on #6.What
web/— vanilla HTML/CSS/JS, ~7 KB + logo, compiled in viainclude_dir, the same mechanism as pay's web-ui but with no node toolchain): dark stage, scarce bolt logo, pulsing live badge, "Agents are actively working on this project", milestone scope cards, and Buzz onboarding CTAs (community web link derived from the relay URL, Buzz Desktop download).GET /api/v1/projects/{id}(schema:project) — the public view the page renders. Deliberately commercial-free: price, per-milestone amounts, payout splits, budget, gate policy and buyer npub cannot appear (no field can carry them; a serialization test enforces it). Quote status re-derived fail-closed againstnow.project_urlin the accept response; the 🚀 contract post and the ops workroom post carry it too. New config keypublic_url(e.g.https://scarce.sh; unset = bind address for dev).workroom_namemoved tostudio-core::projectso the mirror and the page can never disagree about a channel name.Verified
just ci— 147 tests (7 new: state ladder incl. expiry re-derivation, no-leak serialization, accept URL, page/assets serving, config validation)wss://scarce.communities.buzz.xyz: capture → quote → accept returnedproject_url; workroomproj-realtime-webhook-replay-debugger-67cd9e36(channel4015fe12) created with the URL in its contract post; page serves 200 html/css/js/png, project JSON walks QUOTED → FUNDED → WORKROOM_ACTIVE.🤖 Generated with Claude Code