Skip to content

Update Now page: Mount Isa trip, family holidays now past - #98

Merged
simonives merged 46 commits into
mainfrom
dev
Sep 29, 2026
Merged

simonives merged 46 commits into
mainfrom
dev

Conversation

@simonives

Copy link
Copy Markdown
Owner

Summary

  • Family holidays (16-24 Sep) has passed; moved into the historical events group with the same dimmed/status-pill styling as other past items.
  • Added the upcoming Mount Isa work trip (9-30 October 2026) to the travel list.
  • Bumped the "last updated" date.

Test plan

  • Verified locally via a preview server, both the past-styling on Family Holidays and the new Mount Isa entry render correctly in the upcoming list.

🤖 Generated with Claude Code

simonives and others added 30 commits July 15, 2026 12:22
…ccess

Previously fired on push to main with a fixed 30s sleep, which races
GitHub Pages deployment. Now triggers on deployment_status success for
the github-pages environment — purge fires only after Pages confirms the
deploy is live.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…loses #54

- GA script, cookie banner HTML, and cookie consent JS removed from all six
  pages (index, doctrine, portfolio, now, governance, 404)
- Cookie consent CSS block removed from style-v2.css (~95 lines)
- GitHub icon (18px header, 20px footer) added to all pages
- JSON-LD sameAs updated on all pages to include github.com/simonives
- governance.html rewritten: Cloudflare Analytics explanation, no-cookies
  statement, infrastructure disclosure, updated jurisdiction section
- governance.html meta description updated to reflect Cloudflare Analytics
- llms.txt: GitHub profile section added
- sitemap.xml: governance.html lastmod updated to 2026-07-15

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace em dashes with colon and full stop per CLAUDE.md hard rule.
Found by code-review on PR #55.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Currently section: BHP, SAP SuccessFactors, ServiceNow, and Australian HR
  Institute all linked to their respective websites
- Where he'll be: expanded to three separate entries with event page links
    - 12 Aug: SAP NOW ANZ (sapnowanz.html)
    - 13 Aug: Snowflake World Tour Sydney
    - 1 Sep: SAP HR Connect Sydney (SuccessFactors event)
- Updated timestamp to 15 July 2026

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…E.md

Adds tool-neutral (AGENTS.md) and Gemini/Antigravity (GEMINI.md) instruction files for
this repo, reorganised under Scope/Precedence/Instructions/Negatives/Expiry with all
named topics (accessibility, voice, architecture, SEO, dark mode, GitHub workflow,
Superpowers) folded into Conventions/Commands. CLAUDE.md was rewritten to the same
structure but is not included in this commit — it is gitignored by existing repo
convention (.gitignore line 57, "AI collaboration files... not needed in the public
repo view") and remains local-only, consistent with that convention.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same privacy boundary as CLAUDE.md — these carry identical brand/site
content and were committed before the boundary was reconsidered.
GitHub Pages serves the apex domain directly (CNAME: simonives.com,
no www). Cloudflare 301-redirects www to apex. Every canonical
reference on the site (link rel=canonical, og:url, sitemap.xml,
llms.txt, simonives.md, robots.txt's Sitemap line, JSON-LD url)
pointed to www instead, so any tool that doesn't follow cross-host
redirects, several AI fetch tools among them, got a dead end
instead of content.

Also adds a CI check (check-canonical-host.yml) that fails the
build if www.simonives.com reappears anywhere in tracked files, so
this can't quietly come back when new pages are added.

Fixes #72
# Conflicts:
#	404.html
#	doctrine.html
#	governance.html
#	index.html
#	now.html
#	portfolio.html
#	sitemap.xml
Replaces the Google Fonts CDN dependency. Instanced from Google's
variable fonts (wght for Cormorant Garamond, wght+opsz for Inter),
subset to latin, converted to woff2 via fonttools. SIL OFL 1.1,
license included alongside each family.
fonts.css: @font-face for the self-hosted faces (Task 1) plus the
existing Material Symbols font.
tokens.css: full M3 semantic colour, typography, spacing, and shape
token layer, light + html.dark, seeded from the site's own Aurum,
Midnight, Parchment, and Slate palette per STYLE_GUIDE.md.
components.css: component layer keyed to class names used across
all six pages (Tasks 3-8).

Not yet wired into any page; that's Tasks 3-8.
Review finding: 28 em dash occurrences across the three new stylesheets' comments violated the plan's no-em-dash constraint. Replaced with full stops or commas, no functional CSS changed.
Stylesheet links swapped, hero and quote-band moved onto Midnight
with the Phi watermark, polyrhythm rule replaces the old <hr>,
engage cards added at end of page. No copy changed except the
engage-cards placeholder text (see Task 8).
fonts.css (Task 2) references fonts/material-symbols/MaterialSymbolsOutlined-Variable.woff2,
but that file only ever existed on the unmerged material-design-poc branch,
not on dev, so it was missing from this worktree. Brought in from that
branch (same file, Apache 2.0 licensed, license included). Task 3's
implementer flagged this as a concern; it doesn't affect index.html
(no icons rendered there) but would break every other page's nav icons
(menu, theme toggle) once they're migrated.
Sticky rail navigation removed (superseded by numbered practice
cards per the M3 spec). Three practices wrapped as numbered cards
with ghosted ordinals; polyrhythm diagram added to practice 03. No
copy changed.
components.css styles engage-card descriptions via the bare .engage-block p
selector, which a span never matches. Changed <span class="engage-body"> to
<p class="engage-body"> in both files so the intended 16px/1.6/on-surface-variant
styling actually applies. No text content changed.
Prose wrapped in reading rails with a dropcap opening paragraph 1,
the two-teachers quote promoted to a full quote band, a phi-break
marks the shift from movement two to three (immediately after "I
want to be clear about one thing..." and before "When I decided to
study it formally..."). Engage cards added with the Understand ->
doctrine.html variant. No copy changed except the placeholder
engage-body text.

Two deviations from the task brief, both required by the actual spec
doc (docs/superpowers/specs/2026-09-16-material-design-site-refresh.md,
lines 235-249), not the brief's paraphrase of it:

1. The brief assumed 9 paragraphs across 3 even movements. The real
   file has 12. Per the spec's own paragraph counts and semantic
   description, the split is 2/3/7: movement one is the two-teachers
   paragraphs (dropcap opens the first), movement two is exactly the
   three paragraphs "not a straightforward student" through "I want
   to be clear about one thing," and movement three is the remaining
   seven paragraphs from "When I decided to study it formally" to the
   close. The phi-break sits at the movement two/three boundary,
   marking "the shift from childhood to working life" per the spec.

2. The spec calls for an 80px .quote-phi on this page versus 88px on
   the home page, implying a page-specific modifier (e.g.
   .quote-band--portfolio). No such modifier exists in components.css
   (Task 2). This is a CSS gap, not fixable from this file alone;
   the base 88px .quote-band sizing is used here for now. Tracked as
   a follow-up for whoever revisits Task 2/components.css.
Flat now-label paragraphs restructured into an M3 card grid;
schedule entries restructured into event rows with a date chip.
No copy changed, existing headings and body text preserved
exactly, mapped to the closest matching card from the design spec.
…dd past-event marker and update Now schedule

Task 6 review found two real defects inherited from the task brief's
literal markup template colliding with the existing CSS: event rows
rendered stacked instead of chip-beside-text (the wrapping <a> had no
flex layout of its own), and the "Still going" card's background
never actually switched to Midnight (a class-collision between
.card-filled and .on-midnight of equal specificity), producing a
severe contrast failure. Both fixed in components.css.

Also adds a Material Design 3-consistent past-event treatment
(dimmed row plus a tonal "Past" pill, matching the site's existing
eyebrow/tag typography, rather than strikethrough) and refreshes the
Now page's schedule per Simon's direction: three past events marked
accordingly, three upcoming events added (family holidays 16-24 Sep,
Montreal SAP SuccessFactors Executive Innovation Board 2-6 Nov,
Gartner HR Symposium/Xpo Sydney 16-17 Nov, the latter's dates verified
against Gartner's own conference page). Last-updated stamp bumped to
17 September 2026. This is content Simon supplied directly, distinct
from the placeholder engage-cards copy still pending the separate
content pass.
.event-row--past:hover was resetting opacity to 1 (inherited from the
base .event-row:hover rule), popping past events back to full
brightness on hover instead of staying visually de-emphasised.
Governance stays deliberately plain, no Midnight band, no watermark,
per the spec. 404 gets the largest Phi watermark on the site, full
Midnight treatment, with a phi-break transition device between the
hero and the engage cards in place of the removed legacy divider.
No copy changed on either page, including the existing 404
subheadline's em dash, which is a content fix for the next pass,
not this one.
Grep-verified across all six HTML files that nothing references
either stylesheet before deleting them, the M3 stylesheet trio
(fonts.css, tokens.css, components.css) is now the site's only CSS.
tokens.css's own comment on this block said to delete it once every
selector was migrated and style.css was removed (Task 9). Grep-
confirmed zero remaining references to any --color-* alias or
--transition-premium anywhere in the six HTML files or components.css
before removing it.
Discovered during Task 10's accessibility pass: the mobile nav's
menu-toggle script had no keyboard path to close the overlay other
than tabbing back to the toggle button. Pre-existing on dev, not
introduced by this refresh, but worth closing given the site owner's
stated vision impairment and the WCAG 2.2 AA baseline this project is
held to. Escape now closes the overlay and returns focus to the
toggle button, identical behaviour added to all six pages since each
carries its own inline copy of this script.
Fixes #74. .on-midnight a (element+class, specificity 0,1,1) was
beating .btn-filled's own color rule (single class, 0,1,0) at rest,
painting the "Read all of Phronesis" button's text the same Aurum as
its own background, a zero-contrast label invisible until :hover's
higher-specificity rule took over. Added .on-midnight .btn-filled
(0,2,0) so the filled button's own text colour always wins inside a
Midnight section, regardless of any future placement.
Two Critical findings:
- 404.html's engage-cards section was not new: the page already had a
  real, site-owner-authored Phronesis/LinkedIn card pair before this
  refresh (confirmed via git show against the base branch), which
  Task 8's "no existing equivalent anywhere" premise wrongly assumed
  didn't exist. The migration silently overwrote both bodies with
  placeholder text and wrapped the loss in a PLACEHOLDER COPY marker
  that would have hidden it from the future content pass. Restored
  both original strings verbatim (including their own pre-existing
  em dash) and narrowed the placeholder marker to bracket only the
  genuinely new third card.
- Past-event rows on now.html used `opacity: .55` to convey "past",
  which composites every descendant colour toward the card surface.
  Measured against the real card background, 8 of 10 affected
  text/UI pairings fell to 2.33-3.75:1, well under the 4.5:1 floor,
  on a site whose owner has a stated vision impairment. Replaced with
  explicit token colours per element (each independently verified
  against its actual background) so muting is a colour choice, not an
  opacity side effect.

Two Important findings:
- Two new em dashes in the schedule content Simon supplied directly
  (family holidays, Montreal trip) violated the project's own
  no-em-dash constraint; reworded with a comma and a full stop.
- now.html's cards sit in a bare .container, not .container.prose, so
  the underline non-colour cue for inline links never applied to the
  five links inside them (BHP, SAP SuccessFactors, ServiceNow, AHRI,
  Phronesis), leaving link-vs-text contrast below 3:1. Extended the
  underline rule to also cover .card-filled/.card-outlined body links,
  rather than wrapping the cards in .prose, which would have capped
  the whole now-grid to reading-column width.

Three trivial minors fixed while in these files: the On-Midnight
outlined-button border was 2.78:1 against the 3:1 non-text floor,
raised to .62 alpha (3.20:1, verified); a fonts.css comment described
Roboto/Roboto Flex directories that never existed in this repo; and
an undefined --md-sys-color-outline-var typo was silently masked by
its own fallback value.

Remaining minor findings (dropped outbound vendor links on now.html's
event rows, unused .btn-outlined, a raw 999px value, portfolio.html's
retained legacy .section-marker versus index.html's newer .phi-rhythm
device) are disclosed as known items in the Task 11 PR rather than
fixed here, none are defects a user would notice.
.phi-break had margin: var(--space-14) 0, zero horizontal margin, so
once its parent exceeded the bar's own 680px max-width (any desktop
viewport, in the footer's 1200px-wide container and 404.html's
hero-to-engage-cards divider), it sat flush against the container's
left edge instead of centering. Changed to margin: var(--space-14)
auto. No effect where .phi-break already sits inside an exactly
680px-wide .prose column (its own max-width leaves no space to
redistribute there). Found via Simon's own report of a left-aligned
footer divider on wide viewports.

Also scopes the .card-filled/.card-outlined link-underline rule
(added in 67cd92e for Important 4) to exclude .btn-filled/.btn-
outlined/.cta-button descendants. The earlier re-review caught that
the unscoped selector was giving the Now page's "Read all of
Phronesis" filled button an unintended hairline underline, since its
<a> also sits inside a <p> inside a .card-filled.
.footer-tagline and .footer-orient are <p> elements, and the global
p { text-align: left; } rule (components.css:80) applies directly to
them, which always wins over an inherited value from an ancestor
(.footer-band's text-align: center) regardless of specificity math,
since a rule targeting the element itself is never beaten by
inheritance. Set text-align: center directly on both classes.
Confirmed live in Chrome (localhost preview) at 1600px viewport
width, before and after: the phi-break divider fix (f273300) alone
was not sufficient, this second, distinct rule was the actual cause
of the tagline/link line still reading as left-aligned.
Fixes #76. simonives.md has YAML front matter, so without this file
GitHub Pages' default Jekyll build treats it as a page and renders it
to simonives.html instead of serving the raw .md file, leaving the
literal /simonives.md path 404ing. This site is hand-authored static
HTML/CSS with no Jekyll templating in use, so disabling Jekyll
entirely is correct, not a workaround: every file is now served
exactly as committed. Pre-dates the Material Design 3 refresh, not a
regression from it, confirmed via git log.
simonives and others added 16 commits September 17, 2026 15:57
Closes #78.

The Material Design 3 refresh (#75) added the hamburger button and its
is-active/no-scroll toggle JS but shipped no matching CSS: .menu-toggle
was visible at every width and .nav-links never collapsed below 1024px,
so on mobile the nav overflowed off the right edge of the viewport
instead of hiding behind the hamburger.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…skip-link, and stale security docs

Closes #81, #82, #83, #84, #86, #87.

- Remove placeholder-copy markers from the homepage engage section (copy approved as final); no wording changes.
- Update README: remove the defunct Web3Forms contact-form docs and Google Fonts references, correct the Pages and Stylesheets tables to match the actual current files.
- Bump stale 2026-07-15 dates in sitemap.xml, llms.txt, and simonives.md to today.
- Add a skip-to-content link (WCAG 2.4.1) to every page, with matching #main-content landmark ids and shared CSS.
- Fix a stale CSS comment (scrollY > 8 to > 10, matching the actual JS threshold).
- Remove the stale, simulated DPIA and IRAP assessment files from security_outputs/ (described an old Web3Forms/GA4 architecture that no longer exists); regenerated current versions tracked separately in a new issue.

Issues #80 (Cloudflare Analytics beacon vs governance.html copy) and #85 (CSP/Referrer-Policy/frame headers) are Cloudflare dashboard configuration, not code changes, and remain open as manual follow-ups.
Closes #89.

- Replaces the removed, stale security_outputs/*.md files (PR #88) with current versions reflecting the site's actual architecture as at 29 Sep 2026: no form, no analytics beacon, self-hosted fonts, CSP/Referrer-Policy/X-Frame-Options headers, TLS 1.2 minimum.
- DPIA treats the Australian Privacy Act 1988 (Cth) as the primary governing framework (Simon resides and publishes from Australia), with GDPR and CCPA explicitly assessed as voluntary alignment rather than primary jurisdiction.
- IRAP-aligned assessment scopes ISM control categories honestly to what applies to a static, serverless site, and documents the same-day TLS 1.0 to 1.2 remediation found during the assessment.
- Adds security.txt (RFC 9116) at both /.well-known/security.txt (canonical) and /security.txt (courtesy copy for scanners), pointing to a dedicated security@simonives.com address kept separate from Simon's and Heather's primary Workspace mailboxes.

Both documents are published to demonstrate practice, not as formal certifications, and say so explicitly.
… add Permissions-Policy

Closes #91.

- #81 (reopened): remove the placeholder-copy comment block from doctrine.html, portfolio.html, now.html, governance.html, and 404.html, missed in PR #88's original fix. Copy itself is unchanged, already reviewed and approved as final.
- Add .github/workflows/check-no-placeholders.yml, fails CI if PLACEHOLDER or an internal docs/superpowers plan path appears in any published file.
- #91: extract the mobile-nav and header-scroll/theme-toggle/reveal-on-scroll scripts (identical across all six pages bar whitespace) into a shared site.js, loaded with defer. Only the small theme-flash-prevention script stays inline, since it must run before first paint.
- Add scripts/csp-hashes.sh, computes the sha256 CSP hash of the inline theme script across all pages and fails if any page's copy has drifted; scripts/csp-hashes.txt records the current hash.
- Add .github/workflows/check-csp-hashes.yml, fails CI if the recorded hash is stale.
- Document all Cloudflare edge security headers (CSP, Referrer-Policy, X-Frame-Options, Permissions-Policy, HSTS) in a new README.md section, so the repo stays the source of truth even though the config lives in Cloudflare (#92).

The Cloudflare CSP's script-src still allows 'unsafe-inline' at this commit; it gets switched to the hash-only value in a follow-up once this PR is deployed (switching it before deploy would break the still-inline scripts on the currently-live site). Permissions-Policy has already been applied live, since it doesn't depend on this deploy.
…r favicon

Closes #60. Closes #62. Closes #67. Closes #69.

- Add scroll-behavior: smooth to the base html rule; the existing prefers-reduced-motion block already forces scroll-behavior: auto, so the accessibility override was already in place.
- Preload the two Cormorant Garamond display weights actually used (500 for headings, 600 for the Phi mark) on every page, ahead of the fonts.css stylesheet link.
- Add a "Machine-readable" footer link to /llms.txt next to the existing Information Governance link, per the issue's own suggested copy.
- Replace the text-rendered Phi favicon with a genuine vector mark (favicon/phi-mark.svg, a line and an ellipse drawn from primitives, no font glyph involved), exported to 16x16 and 32x32 PNG fallbacks and a 180x180 apple-touch-icon with a solid Midnight background, since iOS handles transparency poorly on home-screen icons.
…o-top

Closes #28. Closes #39. Closes #58. Closes #61.

- Make .lead text fluid with clamp(16px, 1vw + 14px, 18px) instead of a static 18px, so it scales down gracefully on smaller viewports.
- Nudge .phi-mark 1px to correct a slight baseline mismatch against the Inter wordmark in the header logo, caused by Cormorant Garamond's differing font metrics.
- Extend the existing .pullquote treatment (already used once, on the Socratic practice card) to the Utilitarian and Polyrhythm practice cards on doctrine.html, with new one-line synthesis copy for each, reviewed and approved directly.
- Add a back-to-top button to portfolio.html (the longest page), appearing after scrolling past 300px, an Aurum filled circle with an inline SVG arrow matching the site's existing icon-button pattern, scroll-to-top handled in site.js and respecting prefers-reduced-motion.
Google was pulling body copy into search results instead of the meta
description. Rewrite it to be more specific and complete so it reads
as a stronger candidate for the snippet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Family holidays event has passed and is now styled and ordered with
the other historical events. Added the upcoming Mount Isa work trip
(9-30 October).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@simonives
simonives merged commit 2d61ae8 into main Sep 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant