Skip to content

feat(storefront): theme presets + seller identity across all seller-facing surfaces - #731

Closed
OisinKyne wants to merge 2 commits into
oisin/skills-for-ethfrom
oisin/storefront-themeing-2
Closed

feat(storefront): theme presets + seller identity across all seller-facing surfaces#731
OisinKyne wants to merge 2 commits into
oisin/skills-for-ethfrom
oisin/storefront-themeing-2

Conversation

@OisinKyne

@OisinKyne OisinKyne commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

feat(storefront): per-hostname branding overrides

An offer bound to its own hostname is its own product — it should be able to carry its own identity instead of leaking the storefront-wide brand. Branding attaches to origins: the storefront profile covers the default tunnel origin; this PR adds a per-origin override for hostname-bound offers.

What's here

  • spec.branding on the ServiceOffer CRD (displayName, tagline, logoUrl, theme, accentColor, faviconUrl, ogImageUrl, description) — schema-validated (theme enum, accent hex pattern), with field-wise merge semantics: set fields override the storefront profile, empty fields inherit. One offer per hostname is already enforced, and multi-route offers share their origin's identity.
  • Controller: origin bundles (landing page + offer-scoped openapi.json) render the merged identity, including a new "About {operator}" richtext section fed by the branding description. Contact email deliberately stays storefront-wide.
  • Verifier: the branding patch rides RouteRule.Branding from the ServiceOffer informer into the 402 renderer and SIWX sign-in page, so paywall pages on a branded origin show that origin's name/logo/theme.
  • CLI: obol sell info set --hostname audit.acme.io --display-name AuditCo --theme obol … resolves the hostname-bound offer and merge-patches spec.branding; obol sell info reset --hostname … clears specific fields (merge-patch nulls) or the whole block. Passing --contact-email with --hostname errors with an explanation.

Testing

Controller test pinning the merge on landing + openapi surfaces (override wins, email inherits); verifier test asserting the branded origin's 402 shows the patch identity and the storefront name does not leak; CLI flag-surface test; CRD embed validation.

🤖 Generated with Claude Code

bussyjd added a commit that referenced this pull request Jul 13, 2026
Combined AgentSpec config fields (#728) with storefront spec.branding
(#731-#733) required a fresh controller-gen pass; the stacked branches'
committed CRD lagged the merged Go types. No hand edits.

Claude-Session: https://claude.ai/code/session_01VquWN9UMaSHH7MHGcG8bw1
OisinKyne pushed a commit that referenced this pull request Jul 13, 2026
Combined AgentSpec config fields (#728) with storefront spec.branding
(#731-#733) required a fresh controller-gen pass; the stacked branches'
committed CRD lagged the merged Go types. No hand edits.

Claude-Session: https://claude.ai/code/session_01VquWN9UMaSHH7MHGcG8bw1
@bussyjd

bussyjd commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Superseded by #749 (integration/v0.13.0-rc4). This PR's commits are already on main patch-equivalently — they landed via the earlier rc4 integration train (verified with git log --cherry: every commit on this branch shows as patch-identical to a main commit). #749 carries the remaining rc4 fixes and the fully green release smoke (run rc4-run7-20260714-171005, 18/18 flows incl. flow-13/14) that validates the combined train.

@bussyjd bussyjd closed this Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants