Admin theme console

First-class team branding control across every portal.

Update mascot, sport theme, and team colors from Supabase-backed records. The console shows mobile and dark previews, basic contrast checks, and audit evidence for saved changes.

Theme editor

Rookie Rockets

Large text only
Preview
RocketRookie Rockets portal
RRookie Rockets mobile

Contrast ratio: 3.15. Use Pass for text-heavy portal headers.

Tenant defaults: Baseball - Team - logo not configured

All team themes

Theme audit

No theme audit events recorded yet.

Launch validation

20 target brand surfaces

100% covered

Email, push, and binary asset upload rendering remain provider-gated; brand profiles and monitoring events are persistence/validation foundations.

1. Team logo
Covered - Rookie Rockets has the required brand tokens for Team logo.

2. Team banner / hero image
Covered - Rookie Rockets has the required brand tokens for Team banner / hero image.

3. Primary color
Covered - Rookie Rockets has the required brand tokens for Primary color.

4. Secondary color
Covered - Rookie Rockets has the required brand tokens for Secondary color.

5. Accent / button color
Covered - Rookie Rockets has the required brand tokens for Accent / button color.

6. Team display name
Covered - Rookie Rockets has the required brand tokens for Team display name.

7. Team short name or abbreviation
Covered - Rookie Rockets has the required brand tokens for Team short name or abbreviation.

8. Default team avatar/icon fallback
Covered - Rookie Rockets has the required brand tokens for Default team avatar/icon fallback.

9. Team home/dashboard header
Covered - Rookie Rockets has the required brand tokens for Team home/dashboard header.

10. Navigation accents
Covered - Rookie Rockets has the required brand tokens for Navigation accents.

11. Chat/message thread header
Covered - Rookie Rockets has the required brand tokens for Chat/message thread header.

12. Announcement cards
Covered - Rookie Rockets has the required brand tokens for Announcement cards.

13. Event/game schedule cards
Covered - Rookie Rockets has the required brand tokens for Event/game schedule cards.

14. RSVP buttons and status badges
Covered - Rookie Rockets has the required brand tokens for RSVP buttons and status badges.

15. Roster page header
Covered - Rookie Rockets has the required brand tokens for Roster page header.

16. Photo/gallery page header
Covered - Rookie Rockets has the required brand tokens for Photo/gallery page header.

17. Invite landing page
Covered - Rookie Rockets has the required brand tokens for Invite landing page.

18. Invite emails
Covered - Rookie Rockets has the required brand tokens for Invite emails.

19. Announcement/reminder emails
Covered - Rookie Rockets has the required brand tokens for Announcement/reminder emails.

20. Push notification team identity
Covered - Rookie Rockets has the required brand tokens for Push notification team identity.

Test brands and metrics

RRRookie Rockets - published test brand
TTTiny Tigers - published test brand
HHHappy Hawks - published test brand

Coach can create and publish a brand
Target: Under 10 minutes. Current: Guided profile model and publish state are defined.

Branding appears on all 20 target features
Target: 100%. Current: 100% token coverage in launch validation.

Parent sees correct brand after switching teams
Target: 100%. Current: Team-scoped tokens are keyed by teamId.

Brand update appears on web after publish
Target: Under 5 minutes. Current: Supabase publish record plus cache invalidation policy required.

Invalid image uploads are rejected
Target: 100%. Current: HTTPS URL and review metadata gates are defined.

Non-coaches blocked from editing branding
Target: 100%. Current: Admin/assigned-coach RLS policy required for brand profiles.

Emails render with fallback brand if custom brand is missing
Target: 100%. Current: Fallback avatar and default token model defined.

Mobile web layout remains usable after branding
Target: 100%. Current: Mobile preview exists; browser QA still required.

Production monitoring

brand_profile_createdbrand_profile_updatedbrand_profile_publishedbrand_asset_uploadedbrand_asset_rejectedbrand_render_failedbrand_fallback_used

Brand API error rate > 1%

Brand asset upload failures spike

Published brand missing required tokens

Email rendering fails due to brand data

Public invite page cannot load brand

Coach feedback and acceptance

Was it clear what each branding field changed?

Did the preview match what parents actually saw?

Was publishing easy?

Were any important brand areas missing?

Did the final result feel like their team?

A coach can configure one team brand profile.

The coach can publish it immediately.

Parents see that brand across the team experience.

The brand applies to at least 20 defined features/surfaces. Emails and invite pages use the same published brand. The system works without separate code or deployments per team. The same brand-token model can support future iOS development.