Skip to content

Harden and simplify the ARSAS product website - #54

Merged
masarray merged 17 commits into
mainfrom
agent/landing-audit-hardening
Jul 18, 2026
Merged

Harden and simplify the ARSAS product website#54
masarray merged 17 commits into
mainfrom
agent/landing-audit-hardening

Conversation

@masarray

@masarray masarray commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Summary

Second landing-page audit focused on product conversion, static SEO, branding consistency, accessibility, responsive behavior, and claim precision.

Critical findings corrected

  • Smart Reporting copy and metadata were being injected by JavaScript instead of existing in the source HTML. Crawlers, social previews, and no-JavaScript users could receive the older page.
  • Legacy ArIED 61850 / ArIED61850Tester branding remained in social-card, favicon, and an unused hero asset.
  • Major content depended on .reveal JavaScript behavior and could remain invisible if script execution failed.
  • Navigation became crowded before the previous mobile breakpoint.
  • The homepage emphasized building from source more than the engineering problem ARSAS solves.
  • FAQ schema existed without matching visible FAQ content.
  • The reporting copy could be misread as claiming universal dynamic RCB creation.
  • The validator did not detect JSON-LD drift, hidden schema questions, missing static Smart Reporting links, image dimensions, legacy text assets, external manifest icons, or project-version mismatch.

Product and UX changes

  • Rebuilt the homepage around the message: IEC 61850 engineering without the setup maze.
  • Makes Smart Reporting, empty-DataSet/no-RCB fallback, multi-IED ownership, and visible acquisition evidence clear in static HTML.
  • Adds a direct traditional-workflow versus ARSAS comparison.
  • Uses compact typography, spacing, cards, and heading weights.
  • Adds stable image dimensions and aspect ratios to reduce layout shift.
  • Adds explicit keyboard focus treatment and a wider responsive navigation breakpoint.
  • Simplifies JavaScript to menu behavior and the copyright year only.
  • Supports Escape-to-close and accurate navigation button labels.
  • Aligns Overview, Smart Reporting, Capabilities, Smart Control, Architecture, Roadmap, and 404 pages.

Branding and sharing

  • Replaces legacy social-card copy with current ARSAS positioning.
  • Removes legacy favicon labeling.
  • Removes the unused legacy hero SVG.
  • Makes the web manifest self-contained with a local icon.
  • Adds consistent Open Graph dimensions, descriptions, and Twitter metadata.

Technical claim boundary

Dynamic recovery is described precisely as an association-scoped temporary DataSet used with a suitable available RCB, including the required permitted writes. The website does not claim universal dynamic BRCB creation or universal interoperability.

Validation

  • Static website validator and public-boundary checks
  • JSON-LD parsing and visible FAQ parity
  • Static Smart Reporting links, image dimensions, manifest and metadata
  • Source, license, UX, GOOSE and SAS invariants
  • ARIEC61850 compatibility gate
  • .NET restore and Release build
  • Portable Windows publish and artifact upload

Application and ARIEC61850 runtime code are unchanged.

@masarray
masarray marked this pull request as ready for review July 18, 2026 03:53
@masarray
masarray merged commit 7c89f54 into main Jul 18, 2026
3 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6ae8eb52fe

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread landing/audit.css
@@ -0,0 +1,2 @@
/* Landing hardening: static branding, compact hierarchy, accessibility and performance. */
:root{--radius:19px;--radius-sm:13px;--max:1160px}.brand{font-weight:700}.brand-mark{background:transparent url("assets/favicon.svg") center/contain no-repeat;border-radius:9px;box-shadow:none}.brand-mark svg{display:none}h1{font-size:clamp(2.75rem,6vw,4.85rem);font-weight:720;letter-spacing:-.052em}h2{font-size:clamp(2rem,4.2vw,3.25rem);font-weight:710;letter-spacing:-.043em}h3{font-weight:700}.eyebrow,.kicker{font-weight:720}.hero{padding:5.8rem 0 3.6rem}.hero-grid{gap:3rem}.hero-copy{font-size:clamp(1rem,1.55vw,1.16rem);line-height:1.7}.hero-window,.screenshot-link,.reporting-visual .screenshot-link{aspect-ratio:1507/893}.hero-window img,.screenshot-link img{height:100%;object-fit:cover}.section{padding:4.8rem 0}.section-tight{padding:3rem 0}.card{padding:1.2rem}.callout{padding:1.75rem;border-radius:24px}.reveal{opacity:1;transform:none;transition:none}:focus-visible{outline:3px solid rgba(125,211,252,.92);outline-offset:3px}code{padding:.12rem .32rem;border-radius:6px;color:#dbeafe;background:rgba(255,255,255,.075);font-family:"Cascadia Code",Consolas,monospace;font-size:.9em}pre code{padding:0;background:transparent}.nav-links a{font-weight:610}.nav-cta{font-weight:700!important}.comparison-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.comparison-panel{padding:1.35rem;border:1px solid var(--line);border-radius:var(--radius);background:rgba(255,255,255,.035)}.comparison-panel.highlight{border-color:rgba(56,189,248,.26);background:linear-gradient(145deg,rgba(56,189,248,.09),rgba(139,92,246,.055))}.comparison-panel h3{margin-top:.65rem;font-size:1.18rem}.comparison-panel p{color:var(--muted)}.comparison-panel ul{margin:.9rem 0 0;padding-left:1.15rem;color:var(--muted)}.comparison-panel li+li{margin-top:.42rem}.faq-grid{display:grid;gap:.75rem}.faq-item{padding:1.15rem 1.2rem;border:1px solid var(--line);border-radius:17px;background:rgba(255,255,255,.035)}.faq-item h3{font-size:1.02rem}.faq-item p{margin:.45rem 0 0;color:var(--muted);font-size:.92rem}.proof-strip{display:flex;flex-wrap:wrap;gap:.55rem 1rem;margin-top:1.25rem;color:var(--subtle);font-size:.86rem}.proof-strip span{display:inline-flex;align-items:center;gap:.4rem}.proof-strip span:before{content:"✓";color:var(--green);font-weight:800}@media(max-width:1080px){.menu-toggle{display:grid;place-items:center}.nav-links{position:absolute;top:72px;left:1rem;right:1rem;display:none;padding:.7rem;border:1px solid var(--line);border-radius:16px;background:rgba(7,17,31,.98);box-shadow:var(--shadow)}.nav-links.open{display:grid}.nav-links a{width:100%}}@media(max-width:760px){.comparison-grid{grid-template-columns:1fr}.hero{padding-top:4.4rem}}@media(max-width:520px){h1{font-size:clamp(2.45rem,12vw,3.7rem)}.section{padding:3.8rem 0}.section-tight{padding:2.6rem 0}} No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve navigation when JavaScript is disabled

At viewport widths from 761px through 1080px, this new media rule hides .nav-links and shows only the menu button. Since the open class is added solely by app.js, users with JavaScript blocked or failed lose access to every primary-navigation link at common tablet and narrow-desktop widths. Retain a no-script navigation fallback (or only apply the collapsed state after JavaScript has initialized).

Useful? React with 👍 / 👎.

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