Simplify SSW.Rules footer deployment line + iPad portrait fix (+ review follow-ups)#2646
Conversation
Per Adam's request, tighten the SSW.Rules footer so it fits on iPad portrait. "This website is under CONSTANT CONTINUOUS DEPLOYMENT. Last deployed 13 minutes ago on May 23, 2026 ..." becomes "ssw.com.au <3 CONTINUOUS DEPLOYMENT. Last deployed 13 min ago 23 May 2026 ...". - "This website is under" -> "ssw.com.au" + heart icon - drop "CONSTANT" - abbreviate "minutes"/"minute" -> "min" - date format "MMM D, YYYY" -> "D MMM YYYY", drop leading "on" Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Responsive check — iPad + narrow widthsReal before vs after of the footer (Playwright):
Latest design (head
3 hoverables on the line, all sharing one affordance — white text → red on hover, no underline:
Tooltip on hover (iPad portrait)Width comparison
768px — iPad portrait540px414px375pxDeploys run on Azure App Service via GitHub Actions; |
|
/deploy |
PR Preview Deployed
This preview will be automatically deleted when the PR is closed. |
|
Hi @0xharkirat / @adamcogan +1 to @danielmackay 's suggestion: Simplify the build information into a version number My 2 cents:
-- To go user-friendly, I would change from:
To:
--
|
Footer text now: This website is under continuous deployment. Last updated X ago. Last commit YYY - Drop ssw.com.au prefix + heart (too close to existing "We <heart> open source" heart - Tiago) - Lowercase "continuous deployment" (Tiago: no reason for ALL CAPS) - "This website is under" instead of "ssw.com.au" so it doesn't look like a self-link (Tiago) - Absolute build date moved into a tooltip on "X ago" (Tiago) - Replace Build # with linkable commit hash from COMMIT_HASH env, linked to the GitHub commit - Breakpoint md -> lg on social/deployment/powered-by rows so iPad portrait stays stacked with full width (Tiago: iPad portrait still bad at md). Also lg:text-right on powered-by for consistency - Drop now-unused versionDeployed/deploymentUrl consts Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Thanks @tiagov8 — applied your feedback:
New text: Retriggering |
|
/deploy |
|
/deploy |
…tooltips Per @0xharkirat feedback - too many hoverable things on the same line. - Drop the link wrapper on "continuous deployment" -> plain text. The original rule link (rules-to-better-websites-deployment) was invisible anyway (footer strips underline) and not worth the discoverability question. - "X min ago" tooltip text: now reads "Last deployed D MMM YYYY at HH:mm UTC" instead of just the date - more self-explanatory on hover. - Drop the title tooltip on the commit hash link - clicking goes straight to the commit; no extra tooltip needed. Net: 2 hoverable bits per line (1 tooltip + 1 link) instead of 3. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/deploy |
- Extract "X min ago" into <RelativeTime> Client Component that ticks every 60s. Fixes the "stuck at 7 min ago" issue: the old span was rendered server-side and frozen in cached HTML. - Replace native title="..." (invisible until ~1s hover, easy to miss, unscreenshottable) with a custom CSS tooltip via group-hover. White bubble on the dark footer, instant fade-in. Also adds cursor: help as a subtle affordance hint. - Fix UTC bug: tooltip label said "UTC" but moment().format() rendered local time. Now uses moment(buildDate).utc().format(...). On Azure (UTC server) the bug was invisible; locally / on non-UTC servers it was off by the timezone offset. - Plurals: "day(s)" / "hour(s)" -> "day"/"days", "hour"/"hours". - Remove the now-unused getLastDeployTime() helper and moment import from footer.tsx (moved into RelativeTime). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/deploy |
Previously plain text per the simplification pass; restoring as a real link to https://www.ssw.com.au/rules/rules-to-better-websites-deployment since that's a useful destination (the rule explaining the practice). Inline style textDecoration: underline overrides the footer's [&_a]:no-underline so it actually looks like a link. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/deploy |
Three hoverable items on the deployment line ("continuous deployment"
link, "X min ago" tooltip trigger, commit hash link) now use the same
hover pattern: text-white by default, hover:text-ssw-red, no underline.
- Drop the inline textDecoration: underline on the continuous-
deployment link (added in the last commit) - was the odd one out.
- RelativeTime span gets text-white hover:text-ssw-red transition
classes so the tooltip trigger gets the same color-change affordance
on hover instead of being indistinguishable from prose.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/deploy |
|
Hey @tiagov8 , |
|
cc @PothieuG
@Aibono1225 Can you action this? |
👍Yes - PBI created: #2648 |
|
Note: This new rule was created based on this PR: https://www.ssw.com.au/rules/show-deployed-commit |
|
/deploy |
Addresses the bot's 6 inline comments plus two small follow-ups:
- parseInt(BUILD_TIMESTAMP, 10): explicit radix, matches codebase style.
- Drop moment from RelativeTime; format the UTC tooltip with native
Date (Number.padStart for HH:mm). Saves shipping moment to the
browser for one tooltip.
- Accessibility:
* Wrapper span is tabIndex=0 when a tooltip exists so keyboard users
can reveal it via focus.
* Tooltip span is linked via aria-describedby (useId for an SSR-
stable id) so screen readers announce it after the visible time.
* Drop aria-hidden on the tooltip (was blocking AT access).
* focus-visible:text-ssw-red + group-focus-visible:opacity-100 so
the same color change + tooltip reveal happens on keyboard focus.
- formatUtcDate: guard against an invalid BUILD_DATE; bail to no
tooltip instead of rendering "Last deployed NaN undefined NaN ...".
- continuous-deployment link rel="nofollow" added for consistency with
every other external link in the footer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/deploy |
|
@copilot please review the latest commit ( |
Reviewed and applied 2 follow-up fixes in |
…r, native title - footer.tsx: switch the continuous-deployment link from a hardcoded https://www.ssw.com.au/... URL back to ${pathPrefix}/... so PR previews and non-prod hosts stay within their own site instead of jumping to prod (Copilot footer.tsx:129). Also drop the now-pointless target="_blank" and rel="..." since the link is internal again. - relative-time.tsx: tooltip prefix "Last deployed" -> "Last updated" to match the visible "Last updated X ago" copy (Copilot relative-time.tsx:70). - relative-time.tsx: apply cursor-help only when a tooltip is available, so the UI doesn't suggest extra info when there is none, e.g. when BUILD_DATE is missing/invalid (Copilot relative-time.tsx:75). - relative-time.tsx: add title={tooltip} on the wrapper as a native a11y fallback for older screen readers / non-AT contexts, alongside the existing aria-describedby pointing at the custom CSS bubble (Copilot relative-time.tsx:54). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
/deploy |
|
all copilot comments resolved. |
|
/deploy |
…me) (#4720) ## Summary Mirrors the footer deployment-line refresh shipped in [SSWConsulting/SSW.Rules#2646](SSWConsulting/SSW.Rules#2646) so `ssw.com.au` (homepage + most pages) stays consistent with `ssw.com.au/rules`. Tiago's review on the Rules PR called out: > Whatever is changed here should also be applied to: ssw.com.au/people/ and ssw.com.au/ This is the ssw.com.au half of that. SSW.People follow-up PR is next. **Before:** > This website is under CONSTANT CONTINUOUS DEPLOYMENT. Last deployed 13 minutes ago (Build # 1234) **After:** > This website is under continuous deployment. Last updated 13 min ago. Last commit 1443e30 ## Changes - **Text**: drop "CONSTANT", lowercase "continuous deployment", "Last updated" instead of "Last deployed", drop the Build # run-number link, replace with a commit-hash link to the GitHub commit. - **`<RelativeTime>` Client Component** (new `components/layout/footer/relative-time.tsx`): - Ticks every 60s so the relative time doesn't freeze in cached HTML (was a real issue on the Rules side). - Custom CSS tooltip (`group-hover` + `group-focus-visible`) showing the exact UTC datetime — replaces the easy-to-miss native `title`-only tooltip. - Accessibility: `tabIndex=0` when a tooltip exists, `aria-describedby` linking to the tooltip span, plus a native `title` fallback for older AT / non-AT browsers, conditional `cursor: help`. - Native `Date` formatting — no `moment` shipped to the browser for one tooltip. - **Workflow**: `template-build.yml` plumbs `NEXT_PUBLIC_GITHUB_SHA=${{ github.sha }}` into the Docker build args alongside the existing `NEXT_PUBLIC_GITHUB_*` family. The footer then derives the 7-char short hash for display + the commit URL via `NEXT_PUBLIC_GITHUB_REPOSITORY`. - **Cleanup**: delete `components/layout/deploymentLink.tsx` — no longer imported now that the deployment line is inline in `deployment-info.tsx`. ## Test plan - [x] Verified locally with `pnpm dev` + mock build env (`NEXT_PUBLIC_GITHUB_RUN_DATE`, `NEXT_PUBLIC_GITHUB_SHA`, `NEXT_PUBLIC_GITHUB_REPOSITORY`) - [x] Hover "X ago" → custom tooltip "Last updated D MMM YYYY at HH:mm UTC" - [x] Keyboard focus on "X ago" → tooltip reveals (focus-visible) - [x] `continuous deployment` link → SSW Rule - [x] Commit hash → `https://github.com/SSWConsulting/SSW.Website/commit/<sha>` - [x] If `NEXT_PUBLIC_GITHUB_SHA` missing (dev), commit segment hides cleanly; if `NEXT_PUBLIC_GITHUB_RUN_DATE` missing, RelativeTime falls back to "XXX" (matches existing behaviour) ## Follow-up - SSW.People (Gatsby) — separate PR to ship the same line on `ssw.com.au/people`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>











Description
✏️
md→lglayout breakpoint change.<RelativeTime>) with a custom UTC tooltip and keyboard-accessible behavior.Dateformatting.pathPrefix(host-aware for preview/non-prod environments), and relative-time includes a nativetitlefallback for broader accessibility support.Screenshot (optional)
✏️