Footer: match new SSW.Rules + SSW.Website deployment line (text + tooltip + commit hash)#846
Merged
Merged
Conversation
…tip, commit hash) Mirrors the change shipped in SSWConsulting/SSW.Rules#2646 and in SSWConsulting/SSW.Website#4720 so ssw.com.au/people stays consistent with ssw.com.au + ssw.com.au/rules. Tiago's Rules-PR review: "Whatever is changed here should also be applied to ssw.com.au/people and ssw.com.au". This is the /people half. - src/components/footer/footer.js (deployment line only): * Text: drop "CONSTANT", lowercase "continuous deployment", "Last updated" instead of "Last deployed", drop Build # link, add "Last commit YYY" linked to the GitHub commit. * 3 hoverables (continuous-deployment link, time span, commit link) all white text + hover:text-ssw-red transition + no dotted bottom-border (skipping .footer-link class which adds the dots). * Custom CSS tooltip on the time span (group-hover) showing "Last updated D MMM YYYY at HH:mm UTC" using the existing moment + preval-derived buildTimestamp. Native title fallback for AT. * Full SHA in commit URL, slice-7 for display (matches Rules#2651). - .github/workflows/template-build.yml: plumb COMMIT_HASH=${{ github.sha }} alongside VERSION_DEPLOYED. Gatsby reads via process.env.COMMIT_HASH at build, SSG-inlined. Untouched: Chinafied / Powered by Azure + GitHub row, all other footer links, getLastDeployTime() helper, layout/breakpoints. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…es Gatsby
The previous commit added COMMIT_HASH to the replace-tokens env block in
template-build.yml, but missed the corresponding `COMMIT_HASH=#{COMMIT_HASH}`
line in .env.template. The replace-tokens action only substitutes #{...}
placeholders that exist in the file, so the value never reached
.env.production -> Gatsby's dotenv -> process.env.COMMIT_HASH -> the JSX
conditional, and the "Last commit" footer segment never rendered in the
artifact.
Verified: VERSION_DEPLOYED has its own #{VERSION_DEPLOYED} line in
.env.template (line 5), which is why "Build # 801" worked in prod
historically. COMMIT_HASH now follows the same pattern.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two follow-ups on the People footer change:
- Both deployment-line <a>s (continuous-deployment + commit) were
picking up the browser default text-decoration: underline once I
dropped the .footer-link class. Restore "no underline" with an
inline style={{ textDecoration: 'none' }} (same approach the
matching SSW.Website PR uses; inline style beats parent CSS).
- getLastDeployTime: replace "day(s)" / "hour(s)" / "minute" /
"minutes" with proper plurals -> "day" / "days" / "hour" / "hours"
/ "min" (matches the merged SSW.Rules formatRelative). Also fix the
pre-existing ternary bug `' ' + hours !== 0` (string concat made
that branch always-true so the minute branch was unreachable -
hence local builds always showed "0 hour(s) ago" instead of
"1 min ago").
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings the People footer to full a11y parity with the matching
SSW.Rules + SSW.Website implementations, plus a small DRY pass:
- Wrapper span around "X min ago" is now keyboard-focusable
(tabIndex={0}); the custom tooltip reveals on focus via
group-focus-visible:opacity-100; both <a>s + the wrapper get
focus-visible:text-ssw-red so keyboard users see the same red
affordance as mouse users on hover.
- Tooltip span has a stable id ("deployment-tooltip") and the wrapper
carries aria-describedby pointing at it, so screen readers announce
the exact UTC datetime after the visible relative time.
- Commit link rel="noreferrer" -> rel="noopener noreferrer nofollow"
to match the rel attrs Rules + Website use on the same link.
- Extract commitHash + lastUpdatedTooltip + deploymentTooltipId into
module-level consts so process.env.COMMIT_HASH isn't read 3 times
and the moment(...).utc().format(...) call is computed once.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Member
Author
Footer change — before / after / cross-site referencesBEFORE — current production ssw.com.au/people
AFTER — this PR's built artifact (run 26806142321)PR has no slot/preview deploy, so verifying from the CI
Hover on "X min/hour/day(s) ago" reveals the exact UTC datetimeDOM verified on the artifact:
Cross-site references — what this is matchingSSWConsulting/SSW.Rules#2646 — already merged + live on SSWConsulting/SSW.Website#4720 — merged earlier today, now live on All three sites share the same pattern now:
Screenshots hosted on branch |
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
Mirrors the footer deployment-line refresh shipped in SSWConsulting/SSW.Rules#2646 and being shipped in SSWConsulting/SSW.Website#4720, so
ssw.com.au/peoplestays consistent withssw.com.au+ssw.com.au/rules.Tiago's review on the Rules PR:
This is the /people half — last of the three.
Before:
After:
Changes
src/components/footer/footer.js— deployment line only:CONSTANT CONTINUOUS DEPLOYMENT→continuous deployment(lowercase, link torules-to-better-websites-deploymentto match Rules + Website).Last deployed→Last updated.Last commit ${shortHash}linked to the GitHub commit using the full SHA in the URL (mirrors Footer: full commit SHA in URL, short hash for display SSW.Rules#2651).text-white+hover:text-ssw-red+transition-colors, no underline / no dotted border (skip the.footer-linkclass on these three so they get the new affordance).group-hover, pure CSS, no JS) showingLast updated D MMM YYYY at HH:mm UTC. Nativetitlefor AT fallback..github/workflows/template-build.yml: plumbCOMMIT_HASH=${{ github.sha }}alongside the existingVERSION_DEPLOYED. Gatsby reads it viaprocess.env.COMMIT_HASHat build, SSG-inlined into the static HTML.Sibling "Chinafied / Powered by Azure / GitHub" row is untouched — keeps existing
.footer-linkstyle.Verification
gatsby developdidn't boot locally —gatsby-source-git(clonesSSW.People.Profiles) + CRM data sources didn't fully materialize even with Keeper creds, so the schema was missingallSkillUrlsand the build bundle crashed. Verified instead via:commitHash && ..., same tooltip markup).gatsby-source-git+ CRM data).Test plan
Follow-ups (out of scope)
SSW.People.Profiles). Discussed during planning; deferred — would touch all 3 SSW sites. Tracking-issue worthy if we want it.day(s)/hour(s)plural parens ingetLastDeployTime()— pre-existing, unrelated, leaving alone for "no scope creep".🤖 Generated with Claude Code