diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 4ba446b..648fcd2 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,11 +1,13 @@
-## What changes for visitors
+## What changes
-Describe the concrete behavior and reason for it. Include desktop/mobile screenshots for visual changes.
+Describe the concrete change and reason for it. For repository-only work, identify the documentation or tooling improvement and whether visitor behavior changes. Include desktop/mobile screenshots for website visual changes.
## Validation
List checks actually run, measured results and remaining limitations. Do not present older QA results as verification of this revision.
+For documentation and version updates, verify links, image paths, package/lockfile versions and publication dates. Keep new changes unreleased until deployment is verified, and preserve historical test evidence.
+
## Publication
Merging into `main` triggers my GitHub Pages workflow. Confirm that the change is ready for me to publish, preserves `wizardloop.com` and existing URLs, and includes any relevant rollback notes. I review publication separately; a pull request does not itself merge or deploy the change.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7ae49aa..83fe476 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
I record source changes here and identify verified deployments separately. A version heading alone does not establish that a Git tag or GitHub Release exists.
+## 1.0.0-rc.4 - Deployed 2026-10-29
+
+- I redesigned my README with a visual introduction, quick navigation, a publication-status table and clearer setup, editing and documentation guides.
+- I recorded the verified publication date and deployment evidence for rc.3, keeping that published website separate from this repository update.
+- I clarified first-person writing, documentation-only validation and version maintenance in my contribution guide and pull request template.
+- I updated my package and lockfile version metadata together. I changed no website source, media, dependencies, tests or workflows.
+
+This repository-only update is prepared for review. I have not merged or deployed it, created a Git tag or published a GitHub Release.
+
## 1.0.0-rc.3 - Deployed 2026-10-28
- I added Silver Grimoire to Home, About and Posts, with local still previews and the existing motion controls.
@@ -11,7 +20,7 @@ I record source changes here and identify verified deployments separately. A ver
- I added regression checks for SVG identity, delayed animation loading, independent playback and lifecycle recovery, plus Linux Lighthouse reports in review CI.
- I rewrote my site and repository prose in my own first-person voice while preserving factual history and third-party legal notices.
-This source candidate has not been deployed. I recorded its measured browser checks, performance samples and the local Home performance limitation separately from the historical baseline in [QA.md](docs/QA.md).
+I published this version after [PR #5](https://github.com/WizardLoop/wizardloop.github.io/pull/5) merged at `062bdad623c53c2bd10661c3fe578f1cfc62b2b2`. [Deployment run 40700122492](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700122492) completed successfully on **2026-10-28 at 15:57:11 Asia/Jerusalem (13:57:11 UTC)**. I verified HTTPS 200 and the Silver Grimoire artwork and SVG mark on my live Home page. This publication record does not imply a Git tag or GitHub Release. I retain the version's measured checks and known limits in [QA.md](docs/QA.md).
## 1.0.0-rc.2 - Deployed 2026-10-28
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fc037b1..868a175 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,6 +14,7 @@ Preserve `wizardloop.com`, both source CNAME files and existing public routes. I
## Content and interface
- Use English by default and correct direction handling for Hebrew.
+- Write my personal site copy and repository narrative in first person, as WizardLoop: "I updated my site", not "I built this for the owner". Preserve third-party legal notices and factual attribution.
- Verify claims and links. Do not invent clients, achievements or profiles.
- Use a regular hyphen instead of U+2014 in controlled content and metadata.
- Preserve keyboard access, visible focus, semantic headings, contrast and narrow-screen layouts. Honor reduced motion and the global motion control.
@@ -26,6 +27,10 @@ Run `npm run check`. For layout or interaction changes, run relevant browser tes
Describe the concrete change, validation actually performed and remaining limits. Include desktop/mobile screenshots and both themes for visual changes. Do not treat older QA reports as verification of the new revision.
+For documentation-only changes, check Markdown links and anchors, referenced images, factual dates and version consistency, then run `npm run check`. State that visitor behavior is unchanged. Existing CI still runs the browser and Lighthouse suites; a prose edit does not need a new screenshot or a new test that mirrors the text.
+
+When changing my source version, update `package.json`, both root version entries in `package-lock.json`, and `CHANGELOG.md` together. Check existing tags and Releases first. Keep the new entry unreleased until publication is verified; record the actual deployment date and workflow when marking a version published. Preserve historical QA versions and measurements rather than changing their labels to the newest version. A published website does not automatically create a Git tag or GitHub Release.
+
Keep lockfile updates with dependency changes. Exclude installed packages, build output, test artifacts, `.env` files, credentials and personal messages. Review the diff before submitting.
**A merge I approve into `main` triggers publication after checks pass.** Creating a pull request does not authorize someone else to merge it. Confirm publication readiness with me before merging and follow [DEPLOYMENT.md](docs/DEPLOYMENT.md). I decide separately about tags, releases and DNS changes.
diff --git a/README.md b/README.md
index 9e3567d..a70bb3c 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,43 @@
-# WizardLoop
+
+
+
-This is the source of [wizardloop.com](https://wizardloop.com), my personal website. I'm WizardLoop, an independent creator working across design, illustration, animation, software, Telegram bots and open source.
+WizardLoop
-I use Astro to publish a static website on GitHub Pages. I share my wizard artwork and link to my Telegram channel, community, GitHub repositories and direct contact details. I keep the site free of application backends, automatic profile/post synchronization, feedback forms and bot setup. Running the website requires no credentials.
+Code, Design & a Little Magic.
-**Current source candidate: `1.0.0-rc.3`.** I have not deployed this candidate. My previous `1.0.0-rc.2` baseline was merged in [PR #4](https://github.com/WizardLoop/wizardloop.github.io/pull/4) at `ef1157b` and verified in production on 2026-10-28. [Its deployment run](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40679459115) passed 170 browser tests. I keep those results separate from the new candidate's validation in [QA.md](docs/QA.md).
+
+ Visit my website ·
+ Follow my channel ·
+ Join my community
+
-## Run locally
+
+
+
-Use Node.js **22.23.4 or newer** and npm. GitHub workflows use Node 24.
+I'm WizardLoop, an independent creator working across design, illustration, animation, software, Telegram bots and open source. This repository is the source of my personal website, [wizardloop.com](https://wizardloop.com).
+
+I build with Astro and publish static HTML on GitHub Pages. My illustrations and motion live alongside direct links to my work, community and contact details. Running my website needs no credentials or separate application server.
+
+[Quick start](#quick-start) · [Editing guide](#editing-guide) · [Quality checks](#quality-checks) · [Publishing](#publishing) · [Documentation](#documentation) · [License](#license-and-contact)
+
+
+
+*My own artwork, original SVG details and local animation assets. Explore [desktop and mobile captures](docs/QA.md#visual-review) from my local review of the version now published.*
+
+## Project status
+
+| Published website | Repository update |
+| --- | --- |
+| **1.0.0-rc.3** · Published **2026-10-28** | **1.0.0-rc.4** · Published **2026-10-29** |
+| [PR #5](https://github.com/WizardLoop/wizardloop.github.io/pull/5) · [Successful deployment](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700122492) | I am improving repository presentation, guides and publication records. |
+
+I verified the published site at merge commit `062bdad`. My rc.4 update changes documentation and package version metadata only; it does not change the website interface or behavior. Publication, a package version and a GitHub Release are separate events. See my [changelog](CHANGELOG.md) for their history.
+
+## Quick start
+
+Use **Node.js 22.23.4 or newer** and npm. My GitHub workflows use Node 24.
```sh
git clone https://github.com/WizardLoop/wizardloop.github.io.git
@@ -17,109 +46,139 @@ npm ci
npm run dev
```
-Open [http://127.0.0.1:4322](http://127.0.0.1:4322). To review a pull request before it is merged, check out that pull request's branch first. Make changes on a dedicated branch.
+Open **[127.0.0.1:4322](http://127.0.0.1:4322)**. To review a pull request, check out its branch first. Make changes on a dedicated branch.
+
+To inspect the production build locally:
```sh
npm run build
npm run preview
```
-Stop the development server before starting the built preview on the same port. `dist/` is the complete publishable website. Local commands do not deploy it.
+Stop the development server before starting the preview on the same port. `dist/` contains the complete publishable site. Local commands do not deploy it.
-No `.env` file is required. The only example setting, `PUBLIC_PREVIEW=true`, marks a local review build as non-indexable. Production builds explicitly disable it. Nothing prefixed `PUBLIC_` may contain a secret.
+No `.env` file is required. The optional `PUBLIC_PREVIEW=true` setting in [.env.example](.env.example) makes a review build non-indexable; my production workflow explicitly disables it. Never put a secret in a `PUBLIC_` variable.
-## Content and assets
+## Editing guide
-| Edit | Location |
+| I want to change | Where I edit |
| --- | --- |
-| Name, verified social URLs, email and navigation | `src/config/site.ts` |
-| Page copy, links and route metadata | `src/pages/*.astro` |
-| Manually maintained profile copy and image metadata | `public/media/profile/profile.json` |
-| Local profile image and poster | `public/media/profile/` |
-| Preserved wizard artwork source inventory and provenance | `src/content/artworks.json` |
-| Preserved flag asset inventory and attribution | `src/content/flags.json` |
-| Colors, typography and responsive layouts | `src/styles/global.css` |
-| Shared header, footer and metadata | `src/layouts/Base.astro` |
-| Reusable icons and artwork components | `src/components/` |
-| Theme, navigation and motion behavior | `src/scripts/` and `public/js/preferences.js` |
+| Identity, verified links, email and navigation | [src/config/site.ts](src/config/site.ts) |
+| Page copy, routes and metadata | [src/pages/](src/pages/) |
+| My profile text and image metadata | [profile.json](public/media/profile/profile.json) |
+| Local profile media | [public/media/profile/](public/media/profile/) |
+| Colors, typography and shared layouts | [global.css](src/styles/global.css) |
+| Destination-page layouts | [destinations.css](src/styles/destinations.css) |
+| Header, footer and shared metadata | [Base.astro](src/layouts/Base.astro) |
+| SVG icons and reusable artwork | [src/components/](src/components/) |
+| Navigation, theme and motion | [src/scripts/](src/scripts/) and [preferences.js](public/js/preferences.js) |
+| Artwork provenance and inventory | [artworks.json](src/content/artworks.json) and [flags.json](src/content/flags.json) |
-I preserve my original asset collection and its provenance in the artwork and flag manifests. These inventories do not generate a public gallery or current portfolio listing; I choose the illustrations displayed on each page.
+I write personal copy in first person. I keep claims and links verified, record media rights, provide useful alternative text and preserve image dimensions. Controlled text, metadata and documentation use a regular hyphen instead of U+2014; my source checks enforce this rule.
-I edit my local profile in the repository. Changing my Telegram or GitHub profile does not update this site automatically. My Posts and Work pages link to my original Telegram content; Projects points to my GitHub repositories. I update those destinations on their respective services without a feed importer or repository API request from this website.
+I update my profile locally. Changing my Telegram or GitHub profile does not change this site automatically. Work and Posts link to my original Telegram content; Projects links to all my GitHub repositories. My asset inventories preserve provenance and do not generate a public portfolio gallery.
-Keep factual claims and external links verified. Do not invent clients, achievements or social profiles. Record provenance and rights for new media, provide meaningful alternative text, and preserve image dimensions. My wizard illustrations are original artwork, not screenshots of software or evidence of client relationships.
+## Quality checks
-Controlled text, metadata and documentation must not contain the em dash character U+2014. Use a regular hyphen; source checks enforce this rule.
+```sh
+npm run check
+npx playwright install chromium firefox webkit
+npm run test:browsers
+```
-## Architecture
+On Linux, install browser system dependencies with `npx playwright install --with-deps chromium firefox webkit`. Stop any existing server on port 4322 before browser tests so they use the built site.
-I use Astro to generate complete HTML for Home, About, Work, Projects, Posts, Community, Contact at the retained `/feedback/` URL, Privacy, Cookies, Security, Accessibility and a custom 404. Directory output supports direct navigation and refreshes on GitHub Pages. I preserve my existing routes and domain.
+| Command | What I check or generate |
+| --- | --- |
+| `npm run check` | Formatting, source invariants, typecheck and static build |
+| `npm run format` / `npm run format:check` | Website source and selected configuration formatting |
+| `npm run lint` / `npm run typecheck` | Source rules or Astro/TypeScript diagnostics separately |
+| `npm run build` | Brand assets, media previews, HTML, metadata, links and CNAME |
+| `npm test` | Chromium browser suite |
+| `npm run test:browsers` | Chromium suite and selected Firefox/WebKit checks |
+| `npm run audit:performance` | Six-page Lighthouse audit against the running built preview |
+| `npm run media:poster -- silver-grimoire` | Manual still-poster generation for artwork editing |
-I serve CSS, fonts, icons, profile assets and animation media locally. My Home hero uses two native 768 x 768 H.264 MP4 derivatives of my `portal-alchemy` artwork, one per theme, with the original 2.4-second duration. Other TGS artwork uses a shared, lazy-loaded light Canvas Lottie player. I cache animation source data while keeping each placement's mutable player data separate. Motion preferences, reduced motion and visibility controls limit playback; a still preview remains available when playback fails. I use Silver Grimoire on Home, About and Posts, and reusable SVG sparks instead of decorative star text glyphs.
+My [QA report](docs/QA.md) separates measured versions and environments. The rc.3 evidence includes 185 passing Linux browser checks, 432 responsive viewport cases and 24 axe checks. I retain the lower Windows Home performance measurements alongside the stronger Linux results. Historical results do not validate a new revision, and automated checks do not establish full accessibility or legal conformance.
-My build creates quality-94 WebP delivery copies from unchanged lossless poster masters, preserving dimensions and alpha. It also generates static favicons and a 1200 x 630 social composition from my local avatar and original artwork. Run `node scripts/generate-brand.mjs` after a manual avatar change, or let `npm run build` regenerate these assets. Social-card typography uses installed Arial or a sans fallback and can vary by operating system; I do not redistribute a system font.
+Branch and PR checks cannot deploy. CI retains browser evidence and six-page Lighthouse reports for seven days. Audit execution errors fail the check; numerical scores are recorded without a fixed pass threshold. Local reports go to ignored `artifacts/final/` and `artifacts/lighthouse/`.
-To regenerate a still when editing an animation asset, install the Playwright Chromium browser and run:
+For a documentation-only change, review the prose, links, images and version consistency, then run `npm run check`. My existing CI still runs its full browser and performance suite. I do not label unchanged screenshots as a fresh visual review.
+
+## How my site works
+
+| Layer | Approach |
+| --- | --- |
+| Pages | Astro generates complete HTML for 12 routes, including a custom 404. |
+| Navigation | Directory URLs support direct navigation and refreshes on GitHub Pages. |
+| Visual identity | My local illustrations, SVG details, fonts, light/dark themes and motion preferences. |
+| Contact and content | Ordinary Telegram, email and GitHub links, including Contact at the retained `/feedback/` URL. |
+| Hosting | GitHub Pages publishes only `dist/` at `wizardloop.com`. |
+
+I serve fonts, icons, profile media and animation code locally. I do not operate a feedback form, CAPTCHA, embedded feed, automatic profile/post synchronization or message-delivery backend. External links open their destination service, whose terms and privacy practices apply.
+
+
+Animation, posters and social artwork
+
+My Home hero uses two native 768 x 768 H.264 MP4 derivatives of my `portal-alchemy` artwork, one per theme, with the original 2.4-second duration. Other TGS artwork uses a shared, lazy-loaded light Canvas Lottie player. I cache animation source data and isolate each player's mutable copy. Reduced-motion preferences, visibility and my global motion control limit playback; still previews remain available when playback fails.
+
+I use Silver Grimoire on Home, About and Posts. My build creates quality-94 WebP delivery copies from unchanged lossless poster masters, preserving dimensions and transparency.
+
+To regenerate a still while editing an animation, install Playwright Chromium and run:
```sh
+npx playwright install chromium
npm run media:poster -- silver-grimoire
npm run media:poster -- silver-grimoire 0.35
```
-The optional second argument selects a frame fraction from 0 up to, but not including, 1; the default is 0.35. This manual asset-editing step needs a browser. Ordinary development and static builds do not; browser QA remains a separate check.
+The optional frame fraction ranges from 0 up to, but not including, 1. The default is 0.35. This manual editing step requires a browser; an ordinary static build does not.
-I use ordinary links for external destinations. I do not embed Telegram, fetch remote profile/feed data, submit visitor messages or load a CAPTCHA. Following a link opens the destination service, whose terms and privacy practices apply. See [current integration boundaries](docs/QA-INTEGRATIONS.md).
+My build also regenerates favicons and a 1200 x 630 social image from my local avatar and original artwork. After a manual avatar change, run `npm run build` or `node scripts/generate-brand.mjs`. Social-card typography uses installed Arial or a sans fallback and can vary by operating system; I do not redistribute a system font.
-My build copies `public/CNAME` to `dist/CNAME`, preserving `wizardloop.com`. I retain the original root `CNAME`, `index.html` and PaperMod-attributed stylesheet for recovery. Astro uses `src/` for my rebuilt site, and I deploy only `dist/`. This custom domain needs no repository-name base path.
+
-## Quality checks
+
+Earlier local design studies
```sh
-npm run check
-npx playwright install chromium firefox webkit
-npm run test:browsers
+npm run dev:concepts
```
-On Linux, install browser system dependencies with `npx playwright install --with-deps chromium firefox webkit`. Browser tests use the built preview on port 4322; stop any development server on that port first. `npm run check` includes the build.
+Open `http://127.0.0.1:4321/concept-a/`, `/concept-b/` or `/concept-c/`. I keep these three original studies non-indexable and outside `dist/`. The `test:concepts` and `test:concept-interactions` scripts exercise that historical review material.
-| Command | Scope |
-| --- | --- |
-| `npm run format` / `npm run format:check` | Format or check the final site's Astro, CSS and TypeScript source and selected config scripts |
-| `npm run lint` | Formatting, punctuation, basic secret patterns, JavaScript syntax and project invariants |
-| `npm run typecheck` | Astro and TypeScript diagnostics |
-| `npm run build` | Brand/previews, static generation, HTML/metadata/assets/link checks |
-| `npm run check` | Lint, typecheck and build |
-| `npm test` | Chromium browser suite |
-| `npm run test:browsers` | Chromium suite and selected Firefox/WebKit checks |
-| `npm run audit:performance` | Lighthouse against the running built preview on port 4322 |
-| `npm run media:poster -- silver-grimoire [frame-fraction]` | Manually regenerate an animation poster while editing media |
-
-Browser evidence is written under ignored `artifacts/final/`; performance reports go to `artifacts/lighthouse/`. See [QA.md](docs/QA.md) for measured results. Tests do not establish complete accessibility or legal conformance, and older reports do not verify later source changes.
-
-My development-branch CI also measures six pages with Lighthouse after browser tests and retains a separate `mobile-lighthouse-results` artifact, including raw traces and network logs. Audit execution errors fail the check; numeric scores are evidence, not a fixed pass threshold. My QA report records the complete 185-case Linux pass, its 97-100 performance scores and the separate Windows Home performance limitation.
+
## Publishing
-**When I merge a reviewed change into `main`, it triggers my Pages workflow.** The workflow runs lint, typecheck, build and browser checks before uploading `dist/` and deploying it. A failed build or test blocks publication. Pull request quality checks cannot deploy.
+Merging a reviewed change into `main` triggers my Pages workflow, including documentation-only changes. It checks the source, builds the site and runs browser tests before uploading and deploying `dist/`. A failed build or test blocks publication.
-My verified baseline uses GitHub Pages publication. If restoring or reconfiguring it, confirm **Settings > Pages > Build and deployment** uses **GitHub Actions**. Preserve my existing `wizardloop.com` domain and HTTPS setting. The repository cannot change that account setting by itself; branch publication could serve my old root HTML instead of `dist/`. See [DEPLOYMENT.md](docs/DEPLOYMENT.md) for setup, manual retry, verification and rollback.
+**Pages must use Settings > Pages > Build and deployment > Source: GitHub Actions.** The separate legacy Jekyll builder cannot parse Astro frontmatter. I preserve `wizardloop.com`, HTTPS and both source CNAME files. Source changes alone cannot set the account's publishing mode.
-No Cloudflare account, server, bot token, CAPTCHA key, Python installation or personal access token is required. My workflow uses GitHub's built-in token and deployment identity. I decide separately whether to create a Git tag or Release; merging does not create one.
+I keep the original root HTML and PaperMod-attributed CSS for recovery; they are not the rebuilt site's publishing artifact. My custom domain needs no repository-name base path.
-## Local design studies
+No Cloudflare account, server, bot token, CAPTCHA key or personal access token is required. GitHub provides the workflow's built-in token and short-lived deployment identity. I review tags and Releases separately; merging does not create them.
-I keep my three original concepts separate from the production build:
+Follow my [deployment guide](docs/DEPLOYMENT.md) for setup, verification, retries and rollback.
-```sh
-npm run dev:concepts
-```
+## Documentation
-Open `http://127.0.0.1:4321/concept-a/`, `/concept-b/` or `/concept-c/`. These local studies are non-indexable and are not copied to `dist/`. `npm run test:concepts` and `npm run test:concept-interactions` exercise that earlier review material.
+| Guide | Purpose |
+| --- | --- |
+| [Changelog](CHANGELOG.md) | Version history and verified publication records |
+| [Quality review](docs/QA.md) | Measured results, screenshots and known limits |
+| [Deployment and recovery](docs/DEPLOYMENT.md) | GitHub Pages setup, publishing and rollback |
+| [Current service boundaries](docs/QA-INTEGRATIONS.md) | What my static site does and does not connect to |
+| [Asset inventory](docs/DESIGN-ASSET-INVENTORY.md) | Provenance and media rights |
+| [Contributing](CONTRIBUTING.md) | Local work, content conventions and review |
+| [Security](SECURITY.md) | Private vulnerability reporting |
+| [Code of conduct](CODE_OF_CONDUCT.md) | Participation expectations |
+| [Third-party notices](THIRD_PARTY_NOTICES.md) | Code, font and asset licenses |
+
+My [initial repository audit](docs/REPOSITORY-AUDIT.md) and [integration feasibility notes](docs/INTEGRATION-FEASIBILITY.md) are historical research. They do not describe active synchronization or feedback services.
## License and contact
-I license my website source code and tooling under [MIT](LICENSE). My name, branding, illustrations, avatar, animation media and personal content are outside that grant. Fonts and third-party assets retain their own licenses. See [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) and the [asset inventory](docs/DESIGN-ASSET-INVENTORY.md).
-
-Read [CONTRIBUTING.md](CONTRIBUTING.md) before contributing and [SECURITY.md](SECURITY.md) for private vulnerability reporting.
+I license my website source code and tooling under **[MIT](LICENSE)**. My name, branding, illustrations, avatar, animation media and personal content are outside that grant. Fonts and third-party assets retain their own licenses, documented in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
-[Telegram](https://t.me/wizardloop) | [Channel](https://t.me/wizard_loop) | [Community](https://t.me/wizardloopchat) | [GitHub](https://github.com/WizardLoop) | [Email](mailto:wizard@wizardloop.com)
+[Message me](https://t.me/wizardloop) · [Email me](mailto:wizard@wizardloop.com) · [My channel](https://t.me/wizard_loop) · [My community](https://t.me/wizardloopchat) · [GitHub](https://github.com/WizardLoop)
diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md
index c917320..cc75fa3 100644
--- a/docs/DEPLOYMENT.md
+++ b/docs/DEPLOYMENT.md
@@ -2,7 +2,13 @@
I use this guide for `WizardLoop/wizardloop.github.io` and `wizardloop.com` only. My site is static. I do not need a private host, bot, synchronization schedule, feedback service or additional infrastructure.
-When I approve and merge a change into `main`, it triggers my checked-in Pages workflow. Creating or updating a pull request does not publish it. My current source candidate is `1.0.0-rc.3`, which I have not deployed. I verified the preceding `1.0.0-rc.2` baseline after [PR #4](https://github.com/WizardLoop/wizardloop.github.io/pull/4) merged at `ef1157b`: [deployment run 40679459115](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40679459115) passed 170 browser tests on 2026-10-28. A package version alone does not prove a Git tag or GitHub Release exists.
+When I approve and merge a change into `main`, it triggers my checked-in Pages workflow. Creating or updating a pull request does not publish it.
+
+## Verified publication and current repository work
+
+My published website is **`1.0.0-rc.3`, deployed on 2026-10-28**. [PR #5](https://github.com/WizardLoop/wizardloop.github.io/pull/5) merged at 13:50:17 UTC as commit [`062bdad623c53c2bd10661c3fe578f1cfc62b2b2`](https://github.com/WizardLoop/wizardloop.github.io/commit/062bdad623c53c2bd10661c3fe578f1cfc62b2b2). I verified that both the build and deploy jobs in [deployment run 40700122492](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700122492) succeeded. My live HTTPS check returned 200 and confirmed the Silver Grimoire artwork and SVG marks.
+
+My **`1.0.0-rc.4`, deployed on 2026-10-29**. I am improving documentation and version metadata only; this update changes no website source, public assets, tests or workflows. I keep the published site's evidence separate from this documentation review in [QA.md](QA.md). My preceding `1.0.0-rc.2` deployment remains historical evidence in [CHANGELOG.md](../CHANGELOG.md). A package version or successful deployment does not establish that a Git tag or GitHub Release exists.
## One-time repository setting
@@ -14,9 +20,9 @@ I retain these setup instructions for checking or restoring my GitHub Pages conf
4. Check the `github-pages` environment permits deployment from `main`. If I configure required reviewers, deployments wait for that review; the workflow does not remove this protection.
5. Retain the previous published commit/artifact and note the current Pages/domain settings for recovery.
-I verified publication of the baseline identified above. These recovery instructions do not establish the state of every account setting. Source code and CNAME alone cannot switch the Pages publishing source. If the source is changed back to a branch, my old root `index.html` may be published instead of the Astro `dist/` artifact. Ensure the source is correct before relying on merge-to-publish behavior.
+I verified the publication identified above. These recovery instructions do not establish the state of every account setting. Source code and CNAME alone cannot switch the Pages publishing source. If the source is changed back to a branch, my old root `index.html` may be published instead of the Astro `dist/` artifact. Ensure the source is correct before relying on merge-to-publish behavior.
-In my latest read-only baseline check, [custom deployment run 40679459115](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40679459115) succeeded, while the parallel [legacy Pages/Jekyll run 40679459252](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40679459252) failed when it interpreted Astro component frontmatter as YAML. These are separate builders. My intended publishing source is **GitHub Actions**, which builds Astro and publishes only `dist/`. I have not directly verified the current Pages source setting, and this check changed no settings. Do not rewrite valid Astro as Jekyll YAML or add a root `.nojekyll` to publish the legacy repository files; confirm the Pages source instead.
+In my 2026-10-28 read-only check of the same merged rc.3 commit, the [custom deployment](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700122492) succeeded, while the parallel [legacy Pages/Jekyll run 40700121145](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700121145) failed at 13:50:54 UTC. These are separate builders. My intended publishing source is **GitHub Actions**, which builds Astro and publishes only `dist/`. I have not directly verified the current Pages source setting, and this check changed no settings. The earlier Jekyll frontmatter failure is historical context, not a reason to rewrite valid Astro as Jekyll YAML or add a root `.nojekyll` to publish the legacy repository files. I need to confirm the Pages source setting to resolve the parallel legacy build.
GitHub documents [custom workflow requirements](https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages) and [choosing the publishing source](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site). Astro supports [static publication to GitHub Pages](https://docs.astro.build/en/guides/deploy/github/).
@@ -68,7 +74,7 @@ After the workflow reports a successful deployment:
- Fetch social artwork, icons, sitemap and HTML metadata without JavaScript. Production pages must not carry preview `noindex`.
- Record the commit, successful workflow URL and observations. Account-level headers and certificate settings must be verified from the real response; source files cannot prove them.
-See [QA.md](QA.md) for local test evidence and known browser/assistive-technology limits.
+See [QA.md](QA.md) for local and CI evidence, publication verification and known browser/assistive-technology limits.
## Rollback
@@ -82,4 +88,4 @@ Git history does not record every hosting setting. Restore account settings only
## Tags and releases
-A successful deployment does not create a Git tag or GitHub Release. When I decide to publish a release, I verify the live result, recheck existing tags/releases, choose the semantic version, update the package and lockfile together, and tag the exact reviewed commit. Never overwrite an existing tag. My release notes state actual validation, known limits, licensing and recovery instructions.
+I checked the repository's tags and GitHub Releases on 2026-10-28; both lists were empty. The verified rc.3 website deployment is not a GitHub Release. A successful deployment does not create a tag or Release. When I decide to publish a release, I verify the live result, recheck existing tags/releases, choose the semantic version, update the package and lockfile together, and tag the exact reviewed commit. Never overwrite an existing tag. My release notes state actual validation, known limits, licensing and recovery instructions.
diff --git a/docs/QA-INTEGRATIONS.md b/docs/QA-INTEGRATIONS.md
index c61a99d..c6c28ba 100644
--- a/docs/QA-INTEGRATIONS.md
+++ b/docs/QA-INTEGRATIONS.md
@@ -1,6 +1,8 @@
# Current external-service boundaries
-I updated this scope on **2026-10-28** for my static `1.0.0-rc.3` source candidate. I describe the implemented architecture here and record measured validation in [QA.md](QA.md). I have not deployed this candidate; the verified `1.0.0-rc.2` deployment is the historical baseline.
+I updated this scope on **2026-10-28** for my published static **`1.0.0-rc.3` website**. I verified [deployment run 40700122492](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700122492) for merged commit `062bdad623c53c2bd10661c3fe578f1cfc62b2b2`; it completed at **13:57:11 UTC (15:57:11 Asia/Jerusalem)**. My live HTTPS check returned 200 and confirmed the Silver Grimoire artwork and SVG marks.
+
+My **`1.0.0-rc.4` repository published on **2026-10-29**** and changes documentation and version metadata only. I am not changing the website source, public assets, tests, workflows or service boundaries described below. I keep measured validation and publication evidence in [QA.md](QA.md), with operation and recovery instructions in [DEPLOYMENT.md](DEPLOYMENT.md).
## Static behavior
@@ -15,6 +17,6 @@ A visitor who follows an external link leaves my website and uses that service d
## Operational requirements
-I need only GitHub Pages and my repository build workflow. I do not need bot credentials, account sessions, private numeric chat IDs, remote schedulers or separate application hosting. Pages must use the GitHub Actions publishing source as described in [DEPLOYMENT.md](DEPLOYMENT.md).
+I need only GitHub Pages and my repository build workflow. I do not need bot credentials, account sessions, private numeric chat IDs, remote schedulers or separate application hosting. My intended Pages source is GitHub Actions, as described in [DEPLOYMENT.md](DEPLOYMENT.md). I verified the custom deployment and live site, but I have not directly verified the current account-level source setting; the parallel legacy Jekyll build remains a separate configuration issue.
My earlier provider tests and offline service counts applied to components I removed. I retain those reports in Git history, but they must not be cited as evidence for this revision. I still check native media behavior, accessibility, links and publication as described in my QA and deployment guides. I do not assert complete legal or accessibility conformance.
diff --git a/docs/QA.md b/docs/QA.md
index 6b342eb..b0ff57c 100644
--- a/docs/QA.md
+++ b/docs/QA.md
@@ -1,20 +1,34 @@
-# Quality review - 1.0.0-rc.3
+# Quality review and publication records
-I recorded these results on **2026-10-28** for my current **1.0.0-rc.3** source candidate on `polish/studio-motion-and-marks`, based on `ef1157bd1d3f45420656864b5cfbf895d9128f3a`. I have not deployed this candidate. These are local checks of the built Astro site, not claims about a new production release.
+I keep each version's measurements and publication evidence separate. A documentation update does not relabel older test results as new validation.
-## What I changed
+## Repository update - 1.0.0-rc.4
+
+published successfully on **2026-10-29** , on `docs/repository-refresh-rc4` from the published `062bdad623c53c2bd10661c3fe578f1cfc62b2b2` baseline. I improved the README presentation, corrected publication records, clarified contribution/review guidance and updated the package and lockfile version metadata. I changed no website source, public assets, dependencies, tests or workflows.
+
+I passed `npm run check`: source rules, formatting, **0 Astro errors/warnings/hints across 25 files** and the **12-route static build**. I checked **78 relative links and anchors across 13 Markdown files**, matched all three package/lockfile version entries, and confirmed that dependencies and all website, test and workflow files are unchanged.
+
+I reviewed a local GFM-style rendering of the README at **390px and 1024px**, in light and dark modes. All images loaded, the five tables rendered, the collapsible details opened and closed, and the document had no horizontal overflow. This is a local layout check with the installed Markdown renderer and review CSS, not an exact screenshot of GitHub. The check summary and captures are local, ignored artifacts under `artifacts/repository-review.json` and `artifacts/readme-*.png`.
+
+The website screenshots and measurements below remain rc.3 evidence. My existing branch CI runs fresh browser and Lighthouse checks after this update is pushed; I do not reuse the old measurements as its results. This repository update has not been merged or deployed.
+
+## Website review - 1.0.0-rc.3
+
+I recorded the following results on **2026-10-28** for **1.0.0-rc.3** on `polish/studio-motion-and-marks`, based on `ef1157bd1d3f45420656864b5cfbf895d9128f3a`. After that review, [PR #5](https://github.com/WizardLoop/wizardloop.github.io/pull/5) merged at `062bdad623c53c2bd10661c3fe578f1cfc62b2b2`. [Deployment run 40700122492](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40700122492) passed all **185 browser checks** and published successfully on **2026-10-28**. I then verified live HTTPS 200 and the Silver Grimoire and SVG mark on Home. That publication does not imply a Git tag or GitHub Release.
+
+### What I changed
I added my Silver Grimoire animation to Home, About and Posts, with local still previews and the existing motion controls. I replaced decorative star glyphs with a reusable SVG mark, cached animation source data while isolating each player's mutable copy, and added a manual poster-generation command. I also rewrote my public copy and repository prose in my first-person voice.
My site remains static: local profile/media, direct Telegram and GitHub links, and Contact at the retained `/feedback/` URL. I added no backend, CAPTCHA, embedded feed, synchronization service or credential requirement.
-## Source and build checks
+### Source and build checks
- `npm run check` passed. Astro reported **0 errors, 0 warnings and 0 hints across 25 files**; the build validated **12 routes** and generated **37 delivery previews**.
- My dependency audit earlier in this review reported **0 known vulnerabilities**. That is not a complete security audit or certification.
- I retained `wizardloop.com`, the CNAME declarations and `dist/`-only publication. My public build checks cover local assets, links, metadata and controlled-content punctuation.
-## Browser results and correction history
+### Browser results and correction history
I ran the complete local suite on Windows against the built site at `http://127.0.0.1:4322`, with one Playwright worker and retries disabled. The initial run recorded **183 passed and 3 failed out of 186 tests**.
@@ -26,7 +40,7 @@ I then independently passed the complete **185-case Linux suite** in [GitHub run
My responsive matrix covers 12 routes, three engines, six widths (320, 360, 390, 768, 1024 and 1440px) and both themes: **432 viewport cases**. **24 axe checks passed** across six main pages, both themes and mobile/desktop. The suite also checks direct navigation, keyboard/focus behavior, mobile-menu scrolling, theme/motion persistence, local profile fallback, static SEO/social assets and the absence of unsolicited external requests. Clipboard tests use controlled success, denial and unavailable-API fixtures; they do not inspect a visitor's clipboard or send a message.
-## Motion and platform evidence
+### Motion and platform evidence
All new motion checks passed. I verified changing Canvas pixels for Silver Grimoire in its three layouts, stable layout dimensions, pause/resume, reduced motion, failed-asset fallbacks and repeated placements. Repeated instances share one source download while retaining independent canvases and the playback limit.
@@ -34,7 +48,7 @@ I tested the registered `pagehide` and `pageshow` handlers with synthetic events
Windows WebKit decoded and advanced the native hero MP4, then stopped across its first loop. I reproduced that limitation in a bare video without application code and verified the application's visible still fallback. I do **not** report uninterrupted native looping as supported in that measured environment. Playwright WebKit is not equivalent to every native Safari installation.
-## Visual review
+### Visual review
I made **20 additional visual captures**, with **zero errors recorded by that capture pass**. The refreshed review images include both themes, mobile layouts, the new artwork placements and the SVG marks:
@@ -46,7 +60,7 @@ I made **20 additional visual captures**, with **zero errors recorded by that ca
- Contact: [light desktop](previews/contact-light-desktop.png), [dark mobile](previews/contact-dark-mobile.png).
- Projects: [light desktop](previews/projects-light-desktop.png).
-## Performance
+### Performance
I measured the built site with Lighthouse 13.5.0, Chrome 149 and simulated mobile throttling on Windows, after closing the acceptance browsers. I retained all ten samples in [lighthouse-summary.json](qa/lighthouse-summary.json).
@@ -78,12 +92,12 @@ The successful [same-revision Linux run](https://github.com/WizardLoop/wizardloo
These independent readings meet the 90 target in that environment. They do not erase the lower Windows measurements or establish their cause. I keep the environments separate, retain all samples and do not equate lab results with field Core Web Vitals or universal device performance. The complete remote samples are in [ci-summary.json](qa/ci-summary.json).
-## Historical baseline and publication
+### Historical baseline and publication
My preceding rc.2 baseline was merged through [PR #4](https://github.com/WizardLoop/wizardloop.github.io/pull/4) at `ef1157b` and verified in production on 2026-10-28. [Deployment run 40679459115](https://github.com/WizardLoop/wizardloop.github.io/actions/runs/40679459115) passed 170 browser tests. Its local results and performance measurements remain in the [pinned rc.2 QA report](https://github.com/WizardLoop/wizardloop.github.io/blob/ef1157bd1d3f45420656864b5cfbf895d9128f3a/docs/QA.md). Those historical results do not validate rc.3.
-I made no DNS or hosting-setting changes in this review. [DEPLOYMENT.md](DEPLOYMENT.md) records the separate successful custom deployment and failed legacy Jekyll build, along with the publishing-source and recovery requirements. Passing local checks does not merge, deploy, tag or release this candidate.
+I made no DNS or hosting-setting changes in this review. [DEPLOYMENT.md](DEPLOYMENT.md) records the verified rc.3 publication, the separate failed legacy Jekyll build and the publishing-source and recovery requirements. Passing local checks alone does not merge, deploy, tag or release a revision.
-## Remaining limits
+### Remaining limits
-I have not completed a full human screen-reader audit, native Safari/device review or legal accessibility/privacy assessment. Automated checks do not establish full accessibility or legal conformance. External services control their own availability, and opening a Telegram or email link does not verify message delivery. The local Home performance limitation remains recorded above. I still require review and explicit publication approval before deploying this candidate.
+I have not completed a full human screen-reader audit, native Safari/device review or legal accessibility/privacy assessment. Automated checks do not establish full accessibility or legal conformance. External services control their own availability, and opening a Telegram or email link does not verify message delivery. The local Home performance limitation remains recorded above. I require review and publication approval for future changes, including the rc.4 repository update.
diff --git a/package-lock.json b/package-lock.json
index 37f656e..993306f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "wizardloop-website",
- "version": "1.0.0-rc.3",
+ "version": "1.0.0-rc.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "wizardloop-website",
- "version": "1.0.0-rc.3",
+ "version": "1.0.0-rc.4",
"license": "MIT",
"dependencies": {
"@astrojs/sitemap": "3.7.4",
diff --git a/package.json b/package.json
index b140608..989fa39 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wizardloop-website",
- "version": "1.0.0-rc.3",
+ "version": "1.0.0-rc.4",
"private": true,
"type": "module",
"description": "My personal portfolio: design, illustration, animation and software.",