Skip to content

Serve a static copy of the portfolio to clients without JavaScript - #4

Merged
aabiro merged 1 commit into
mainfrom
claude/nifty-einstein-59ctin
Oct 8, 2026
Merged

aabiro merged 1 commit into
mainfrom
claude/nifty-einstein-59ctin

Conversation

@aabiro

@aabiro aabiro commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Problem

The Claude Design export keeps all of its content inside a bundled template, so anything that fetches aabiro.github.io without running JavaScript (recruiter scrapers, job board importers, LLM agents, plain curl) sees only the Unpacking... loader and a "This page requires JavaScript" notice. The title, description and Open Graph tags were already there, so link preview cards were fine; the page text was missing.

Change

  • scripts/inject_static_profile.py (new): runs after inject_seo.py. It reads the page's own copy and the component's data (metrics, caseStudies, capabilities, experience, skillColumns, heroTags) out of the bundled template and writes them into index.html as a plain, semantic <main id="static-profile"> block. It also hides the loader thumbnail when JavaScript is off and drops the Unpacking... and "requires JavaScript" text. It is idempotent, and it fails the build if it can no longer find the experience or work data.
  • scripts/build_site.sh: calls the new script.
  • .github/workflows/github-pages.yml: the verify step now requires id="static-profile" and fails if Unpacking... is still served.
  • README.md: documents the static copy.

page/page.html is untouched. A re-export from Claude Design picks up the new content automatically on the next build.

Behavior

  • With JavaScript: unchanged. The loader thumbnail still covers the page while it unpacks, then the loader replaces the whole document with the designed page, the same as before.
  • Without JavaScript: a readable profile with intro, highlights, work, GitHub link, capabilities, experience, stack, contact links and the resume PDF link.

Verification

  • Ran bash scripts/build_site.sh and the workflow's verify commands locally: all pass.
  • Running the new script twice leaves index.html byte-identical.
  • Headless Chromium against the built site/:
    • JavaScript off: #static-profile visible, loader thumbnail hidden, no page errors.
    • JavaScript on: designed page renders (#sec-Experience present), static copy gone, no page errors or bundler errors.

🤖 Generated with Claude Code

https://claude.ai/code/session_01N4PmHXHU33xFbkndjeQEhH


Generated by Claude Code

The Claude Design export keeps all of its content in a bundled template,
so crawlers, link previewers, recruiter tools and agents fetching
aabiro.github.io saw only an "Unpacking..." loader. The build now reads
the page's own copy and component data out of that template and writes
it into index.html as plain HTML. Browsers with JavaScript still get the
designed page unchanged; the loader replaces the document as before.

CI fails the build if the static copy is missing or the bare loader
text is still served.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4PmHXHU33xFbkndjeQEhH
@aabiro
aabiro merged commit 7213c83 into main Oct 8, 2026
2 of 3 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.

2 participants