feat(storefront): theme presets + seller identity across all seller-facing surfaces#731
Open
OisinKyne wants to merge 2 commits into
Open
feat(storefront): theme presets + seller identity across all seller-facing surfaces#731OisinKyne wants to merge 2 commits into
OisinKyne wants to merge 2 commits into
Conversation
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.
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.brandingon 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.openapi.json) render the merged identity, including a new "About {operator}" richtext section fed by the branding description. Contact email deliberately stays storefront-wide.RouteRule.Brandingfrom 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.obol sell info set --hostname audit.acme.io --display-name AuditCo --theme obol …resolves the hostname-bound offer and merge-patchesspec.branding;obol sell info reset --hostname …clears specific fields (merge-patch nulls) or the whole block. Passing--contact-emailwith--hostnameerrors 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