# Robert Beckner — The Gay Wizard

A static birthday tribute built around one portrait of Merlin (aka Robert Beckner, aka The Gay Wizard), with attributed professional history. Every visual (hero kaleidoscope, mirrored `tile-*.webp` backdrops, icons, favicon, and `social.png`) is cropped or mirrored from `dist/merlin.webp`. No dependencies or backend required. Source and served assets are in `dist/`.

## Vercel hosting

The GitHub repository is intended to be private under `[private repository details removed]`. The Vercel project belongs to the personal `[private hosting workspace]` workspace. `vercel.json` serves the static `dist/` output; the build wrapper allows indexing for production and emits noindex for preview deployments. No dependencies are required.

Production is public at https://gaywizard.dev. Vercel Standard Protection retains authentication for preview deployments and generated deployment URLs. The www domain redirects permanently to the canonical apex domain. Keep the GitHub repository private. The legacy `.openai/hosting.json` is not used by Vercel and is excluded from CLI uploads.

## Public documentation archive

The homepage links to `/archive/`, containing current Markdown documentation, historical Markdown revisions from Git, and an attributed text snapshot of the public pages listed in rbeckner.com's sitemap. See [PUBLICATION.md](PUBLICATION.md) for scope and the missing conversation record. The archive is generated from committed snapshots by `scripts/build-archive.mjs` and included in the sitemap. Refresh the source text explicitly with `python3 scripts/snapshot-source.py`, then build and review before publishing.

## Local development

Run `npm run dev` and visit http://127.0.0.1:4173. Run `npm run check` for content and asset checks.

## SEO and public launch

The checked-in production output allows indexing. `npm run build` creates indexable output; `npm run build:preview` explicitly creates a noindex preview. Neither command deploys anything. The keywords tag includes the requested birthday branding, but Google does not use this tag for ranking.

The production domain is `https://gaywizard.dev`. Once DNS is connected and public launch is approved, run:

```sh
npm run build
npm run check:production
```

After deploying through your own host, run `npm run check:live`. This is a read-only network check of the production homepage, resources, robots.txt, sitemap, HTTP redirect, and unknown-path status. It exits unsuccessfully for unreachable endpoints or failed checks. It does not verify Google indexing; use Search Console's live URL Inspection for that.

Configure the host to serve `dist/404.html` with an actual HTTP 404 status for unknown paths. The file alone cannot set a response status. Permanently redirect HTTP to HTTPS and, if you configure www, redirect it to the apex. Do not configure an SPA catch-all returning the homepage with HTTP 200 for every path. Production homepage metadata is `index, follow`; the 404 page intentionally has `noindex, follow` because error pages should not rank.

The original birthday story is based on Max's account of coder friends creating a surprise meant to be found through search, not an invented career anecdote. A genuine inbound link must be placed on a separate, authorized website. That website has not yet been supplied, so no inbound link has been published.

The build sets the canonical URL, sharing URLs, sitemap, robots.txt, and indexing directive from one origin. For private previews, run `npm run build:preview`. Build is idempotent. Serve `dist/` with HTTPS. Review the finished content before public publication. Verify public access and indexability in Google Search Console, submit `/sitemap.xml`, and monitor impressions for Robert Beckner. Genuine inbound editorial links can help discovery; do not depend on Robert changing his accounts for a surprise. Ranking cannot be guaranteed.

## Editorial sources

The additional page at `/chronicles/the-case-of-the-missing-semicolon/` is original fictional birthday satire. Its first-person wizard narrator is not an attribution of statements to Robert. It is linked from the homepage and included in the sitemap, with its own canonical URL and fiction-labeled metadata. No real disputes, third-party identities, or source link are included in that story.

- https://rbeckner.com/about/ — self-published career history, agencies, Granis AI, Activate.
- https://www.linkedin.com/in/robert-beckner — user-supplied professional identity link.
- Birthday nickname and “gayer than gay” branding supplied by Max with Robert's approval as reported by Max.

Agency work is attributed to Robert's biography, not represented as independently verified employment. CIA is explicitly birthday lore, excluded from search snippets with `data-nosnippet`, and is not a structured credential. The site labels itself a birthday tribute.

See [SEO-REVIEW.md](SEO-REVIEW.md) for the audit, launch checks, and search monitoring plan. Hosting and DNS are managed by Max; no deployment is part of the build.

The only third-party page resource is Google Fonts; local system fonts provide fallbacks. The birthday spell respects reduced motion and announces its message accessibly. No tracking or data collection is added.
