feat: add dedicated marketing site - #25
Merged
Merged
Conversation
Adds a GitHub Pages marketing site under web/ following the AxeForge external-tool template (relay flavor): topbar, hero with a simulated structlint validate live-demo terminal, a mechanism feature grid, an integrations table, a commands fix-loop guide, real-README-grounded use cases, and an install section. Full SEO head block (OG/Twitter tags using the repo's own doc/banner.png, canonical, SoftwareApplication JSON-LD), robots.txt, sitemap.xml, and the Pages deploy workflow.
- integrations table: table-layout: fixed + overflow-wrap: anywhere on td/code so long CLI tokens wrap instead of blowing the table past its own .table-scroll container (was clipped/truncated with an orphaned word-wrap on mobile, same bug class as the grid-track overflow warned about, just in a table) - install curl <pre>: add -webkit-overflow-scrolling: touch to match the table's scroll affordance - integrations table: swap the "Reusable workflow" row -- the structlint.yml reusable workflow it referenced was removed from the repo in #5 and no longer exists -- for the real, currently-shipped "Setup action" (AxeForging/structlint/setup@v0.6.1)
✅ PR title follows the required formatCurrent title: |
Team credit should stay at the org level, not name a specific contributor -- more people than one work on AxeForging repos.
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
Adds a full GitHub Pages marketing site at
web/for structlint:structlint validateterminal demo, built from the tool's real violation codes (unallowed_directory,disallowed_file_pattern,placement_violation,missing_required_file,boundary_violation)init --infer→validate→suggest→hook install)curl | shinstall commanddoc/banner.png, canonical,SoftwareApplicationJSON-LD),robots.txt,sitemap.xmlAxeForging/structlintUses the shared AxeForge brand kit (
axeforge.css, relay flavor) byte-identical to the sibling sites (gumshoe, heyra, rsvp-m5).Impeccable audit -- final score 20/20
Ran the mechanical detector plus a full manual 5-dimension audit (3 rounds, re-verified after each fix with a real headless-browser render, not assumption).
:focus-visiblering, never suppressed; clean h1→h2→h3 hierarchy;prefers-reduced-motionhandled at both CSS (animation: none) and JS (setIntervalskipped) layers with state preserved -- the seed findings still render, only the auto-cycling stops.display=optionalto avoid font-swap CLS; the one large image (banner.png) is only referenced via OG/Twitter meta, never rendered on-page, so it doesn't touch the page's own load.var(--af-*)tokens; the only literal hex colors are the severity dots (info/warn) and a neutral shadow, matching the same justified-status-color pattern already used in the shared kit.document.documentElement.scrollWidth === clientWidthat both 375px and 1440px, before and after fixes. Found and fixed a real bug: the integrations table (long CLI tokens likeAxeForging/structlint/.github/workflows/...) blew its.table-scrollcontainer out to 792px on a 375px viewport, showing clipped text and an orphaned mid-cell word wrap with no scroll affordance -- the same "long unbroken token blows out an auto-sized container" bug class called out for CSS Grid, just manifesting in a table. Fixed withtable-layout: fixed+overflow-wrap: anywhereontd/code; table now fits without needing its own scroll.internal/validator/codes.go,internal/cli/*.go,schema/structlint.schema.json) -- all real. Found and fixed one real fabrication: the table's "Reusable workflow" row referenced.github/workflows/structlint.yml, which was removed from the repo in #5 (chore: remove reusable workflow...) five months ago; the README section documenting it was never updated. Replaced it with the "Setup action" row (AxeForging/structlint/setup@v0.6.1), which does exist and is documented.Verified false positives (detector flags, checked in context, not just accepted):
codex-grid-background-- the dotted radial-gradient hero background matches the same cross-site brand convention already used in gumshoe's build, not generated-UI slop.single-font-- the page inherits Inter (var(--af-font-sans)) globally fromaxeforge.css'sbody { font-family: var(--af-font-sans); }and uses JetBrains Mono (var(--af-font-mono)) explicitly throughout for code/CLI content; confirmed by greppingaxeforge.css'sfont-familydeclarations. Two families are in use, the detector just doesn't see the inherited one.em-dash-overuse-- 14 literal—characters (detector's count of 21 double-counts--flag-style CLI examples like--staged/--inferinside<code>), against ~15,200 characters of visible text: a density of ~1 per 1,500 characters, well under the detector's own "near 1 per 500" saturation threshold. All are legitimate term-then-elaboration technical clauses.Test plan
detect.mjs) -- only the 3 verified-false-positive findings remainscrollWidth === clientWidth) before and after each fix