feat(tangle-cloud): Show a visit-site link for every blueprint from website metadata#3267
Conversation
…om `website` metadata The blueprint `website` field already flows end-to-end (on-chain BlueprintMetadata + off-chain metadata JSON -> ParsedBlueprintMetadata.website -> Blueprint.websiteUrl) and renders on the legacy detail pages — but NOT on the modern blueprint-app surfaces. So a dev (with or without the iframe tier) can publish their site URL, yet the cloud never shows it on the new pages. This closes that render gap; no schema change. - BlueprintHostCard (declarative tier — the surface NON-iframe blueprints get): render a "Visit site ↗" link whenever blueprint.websiteUrl is set, distinct from the publisher console (externalApp). - IframeBlueprintLayout (iframe tier): thread websiteUrl through and render the link in the top-nav slot next to Details — the per-blueprint navbar. - BlueprintAppLandingPage: pass canonicalBlueprint.websiteUrl into the layout. Any external blueprint dev now just sets `website` in their metadata and the cloud presents a direct link to their own site, no iframe tier required. NOT verified locally (monorepo typecheck needs a full worktree install); relies on CI + review.
tangletools
left a comment
There was a problem hiding this comment.
✅ Auto-approved PR — e98752c1
Blanket team auto-approval is enabled for this reviewer service.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.
tangletools · auto-approval · reason: blanket_auto_approve · 2026-06-15T00:27:56Z
tangletools
left a comment
There was a problem hiding this comment.
🟢 Value Audit — sound
| Verdict | sound |
| Concerns | 0 (none) |
| Heuristic | 0.0s |
| Duplication | 0.0s |
| Interrogation | 30.0s (2 bridge agents) |
| Total | 30.0s |
No concerns — sound change, no better or existing approach found. ✅
What this audit checks
It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.
| Pass | What it asks |
|---|---|
| Heuristic | Vague title? Whitespace-only or cruft-bearing diff? (content signals only) |
| Duplication | Do added function/class names already exist elsewhere in the repo? |
| Value Audit | What does it do? What goal does it achieve? Is it good? Better architecture or already-exists? |
| Usefulness Audit | Does it integrate and fit? Will it hold up in real use and actually get used? |
Findings are concerns, not blocks — the human reviewer decides what to do with them.
✅ No Blockers —
|
Lets any blueprint dev — iframe tier or not — link to their own dedicated site by setting
websitein metadata, and the cloud presents it. (Companion to #3266, which makes Surplus an iframe app.)The gap
websitealready flows end-to-end: on-chainBlueprintMetadata.website+ off-chain metadata JSON (website/homepage) →ParsedBlueprintMetadata.website→Blueprint.websiteUrl, and the create/manage pages already author it. It renders on the legacy detail pages but not on the modern blueprint-app surfaces — so today a dev can publish a site URL that the new UI silently ignores. Render gap, no schema change.Changes
BlueprintHostCard(declarative tier — the surface non-iframe blueprints get): render a "Visit site ↗" link whenblueprint.websiteUrlis set, distinct from the publisher console (externalApp).IframeBlueprintLayout(iframe tier): threadwebsiteUrlthrough and render the link in the top-nav slot beside Details — the per-blueprint navbar.BlueprintAppLandingPage: passcanonicalBlueprint.websiteUrlinto the layout.Result
An external dev sets
websitein metadata → the cloud shows a direct link to their site, no iframe tier required (the explicit ask). First-party/iframe blueprints get it in the navbar too.Not verified locally (monorepo typecheck needs a full worktree install); relies on CI + review. Coordinate with the in-flight
feat/tangle-cloud-unified-shellwork.🤖 Generated with Claude Code