Repository navigation
feat(ui): shared Green Button Alliance theme and Third Party layout (prototype) - #244
Merged
Merged
Conversation
…ut (prototype) Prototype that makes the Data Custodian and Third Party look like part of greenbuttonalliance.org. - openespi-common ships META-INF/resources/css/gba-theme.css (served at /css/gba-theme.css in each app). Static resources cannot override application settings the way the jar's application.properties did. GBA palette (#2C4C3B, #3F6C54, #F99742, #005B96, #264653), Roboto, square outlined buttons, solid green card headers, dark-green header and footer with an orange rule. Bootstrap 5.3 variables plus the DC's --gb-* tokens are remapped, so existing pages adopt it without markup changes. - Third Party: new fragments/layout.html (head, header, footer). All five pages use it, all links are context-relative (th:href), and the footer year is computed. Terms of Service, Usage Policy and /error are now public, because the navbar links to them. - Data Custodian: theme and Roboto in the shared head; GBA header on the main, customer and custodian navbars (slate for the admin portal); GBA footer; home cards use the GBA card style; the custodian hero is now readable; duplicate Bootstrap JS removed from 4 pages; /css/** also serves the theme from the common jar (@EnableWebMvc disables Boot's default static mappings). - Bootstrap CSS/JS and Bootstrap Icons are pinned with SRI hashes, computed from the CDN files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sources - Official Green Button Alliance logo (from greenbuttonalliance.org, used with the GBA Technical Manager's authorization) in openespi-common META-INF/resources/images: a 120 px header logo (2x for 60 px) and a 64 px favicon for both apps. - Header now follows greenbuttonalliance.org: dark-green top bar (slate for the DC custodian portal), white band with the logo and green navigation links, orange rule. The logo and its TM mark need the white background. - Root pom: add an unfiltered <resource> for everything the filtered include list skipped. Until now no binary resource was packaged: the 4 ESPI XSDs in openespi-common, the DC favicon (it 404ed) and the new logo. *.disabled files stay excluded. - DC /images/** also serves META-INF/resources/images (as /css/** does). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dfcoffin
force-pushed
the
feat/gba-theme-prototype
branch
from
November 14, 2026 18:00
1cd2ca1 to
761ccdf
Compare
2 tasks done
dfcoffin
added a commit
that referenced
this pull request
Nov 14, 2026
#246) Follow-up to #244. - Data Custodian admin dashboard: GBA-green action buttons and icons (the rainbow btn-success/info/danger/warning are gone) and white "stat" tiles in place of the coloured cards. Login icons and the error pages' "Try Again" button use the palette; the error icon size moves from inline styles to a theme class. Semantic colours stay: status badges, Delete/Revoke, warning and danger error icons, neutral Cancel/Go Back. - Footer moved out of the page container in 18 templates (and the leftover <hr> separators removed), so it is a full-width child of <body> pinned to the bottom of short pages. The two legacy customer pages (#245) are untouched; the theme keeps a full-bleed rule for them until #245. - application.css reduced to the rules still used that the theme does not cover (table header, focus outline, print). The old Material palette, radii, hover lifts, gradients and light footer were fighting the theme, so the theme drops most of its !important overrides and the --gb-* bridge. - Theme: white inputs and tables (Bootstrap fills them with the grey body colour), stat-tile and status-icon classes, page content grows so the footer sits at the bottom. - Retail customers list: the Delete button is btn-sm like View/Edit (btn-group-sm does not reach a button nested in a form). - Tests: GbaThemeResourcesTest (DC) and GbaLayoutPagesTest (TP, the first TP test with a full Spring context) check that the theme, logo and favicons are served anonymously (the logo byte-for-byte, so resource filtering cannot corrupt it), that pages render the GBA layout with SRI-pinned assets, and that the TP public pages are reachable without login. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 14, 2026
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.
Summary
Prototype of the shared Green Button Alliance look for the Data Custodian and Third Party, based on a side-by-side review against greenbuttonalliance.org. Stacked on #242 (copyright notices); GitHub retargets it to
mainwhen #242 merges.Shared theme:
openespi-common/src/main/resources/META-INF/resources/css/gba-theme.cssServed by Spring Boot at
/css/gba-theme.cssin each app. Unlike the jar'sapplication.properties, a static file cannot override an app's settings.#2C4C3B(chrome, card headers),#3F6C54(links), orange#F99742(rules and accent borders only), blue#005B96(section titles), slate#264653(TP hero, DC admin portal), text#333on#F8F8F8.META-INF/resources/images/gba-logo.png(120 px, 2× for 60 px display, 17 KB) andgba-favicon.png(64 px), resized from the logo on greenbuttonalliance.org. They are used with the GBA Technical Manager's authorization. Both apps now have a favicon.--gb-*tokens are remapped, so pages adopt the theme without markup changes.Third Party
fragments/layout.html(head, header, footer). All 5 pages use it instead of repeating their own<head>/nav/footer.th:href), which fixes the navigation 404s in TP: home page navigation links ignore the /ThirdParty context path (404); dead energyos.github.io doc links #235 for these pages. The footer year is computed (2013-<current>), so it no longer goes stale./errorare permitted for anonymous users; previously they redirected to login.Data Custodian
layout :: headalready loads it, and double-loading breaks dropdowns./css/**also serves the theme from the common jar, because@EnableWebMvcdisables Boot's default static mappings.Build fix: binary resources were never packaged (root
pom.xml)The root
<resources>entry only included filtered text types (yml,properties,xml,sql,html,js,css), so every other resource was silently dropped from the jars:openespi-common/schema/(the certification validation target);A second, unfiltered
<resource>now copies everything else as-is, and*.disabledfiles stay out. Verified: the PNGs and XSDs are in the common jar, the logo is byte-identical (no filtering corruption), and the AS/TP jars contain no.disabledfiles. Nothing loads the XSDs at runtime today, so packaging them changes no behaviour.Both apps
Bootstrap CSS/JS and Bootstrap Icons are pinned with SRI
integrityhashes, computed from the CDN files (they match Bootstrap's published 5.3.0 values).Not in this prototype (follow-ups)
.container; the theme makes it full-width with CSS. Moving it out in the 20 templates is the cleaner fix.Test plan
mvn install -DskipTestsfor the full reactor;mvn verifyDC: 172 tests pass; TP: 44 pass (2 skipped, pre-existing)/DataCustodian/images/and/ThirdParty/images/; the old DC favicon now serves toolocalprofile: theme served at/DataCustodian/css/gba-theme.cssand/ThirdParty/css/gba-theme.css(200); TP/,/login,/TermsOfService,/UsagePolicy→ 200 anonymously🤖 Generated with Claude Code