Gabriel Vidal d40c354c4a feat(audit): add a link & image audit script, warn-only in the build
Walks every post's <img>/<a> (markdown + raw HTML, .md/.mdx, plus the
frontmatter cover field) across both content collections, flags missing
local assets and internal links that don't match any real route, and can
optionally probe external refs for dead hosts (HEAD-then-GET, cached,
concurrency-capped, off by default).

Wired into `npm run build`'s postbuild step in warn mode — it can never
fail the build, only crash-guards + logs a warning. External checks are a
separate on-demand npm run audit:links:full since they touch the network
and would make every build network-dependent otherwise. Report artefacts
land in .ai/link-audit/ (gitignored).

First real run: 0 missing local assets, 4 broken internal links (dead
pre-Astro /Projects/... style paths from the old site structure), 18 dead
external refs with --external (6 confirmed, 12 low-confidence itch.io-style
403s that are more likely bot-blocking than actually dead — flagged as such
in the report rather than reported at face value).

Ticks the "Link & image audit" wishlist item in GOAL.md; "Fix what the
audit finds" is next and deliberately untouched here.
2026-08-10 01:58:30 +02:00
2023-03-02 18:44:53 +01:00
v0
2023-03-02 16:04:37 +01:00
v0
2023-03-02 16:04:37 +01:00
v0
2023-03-02 16:04:37 +01:00
2023-03-03 13:54:14 +01:00

Blog

My personal website / blog — live at blog.dev.gabvdl.xyz.

Built with Astro (based on the astro-ink theme): MDX posts, client-side search (Lunr), tags, RSS and a sitemap.

Develop

yarn
yarn dev             # astro dev
yarn build           # static build → dist/ (+ postbuild search index)
yarn preview

Posts live under src/content/blog/ (src/pages/blog/ holds the routes that render them); drafts under src/drafts/. The public URL and canonical/sitemap origin are set via site in astro.config.mjs.

Deploy

npm run deploy       # build + rsync dist/ to zipgo on raspy2

scripts/deploy.sh uses the zipgo deploy CLI to mirror dist/ into domains/gabvdl.xyz/dev./blog. on the remote, which serves https://blog.dev.gabvdl.xyz over Let's Encrypt HTTPS. The host → folder map also lives in package.json under zipgo.deploy.

There is no CI. The old GitHub Pages workflow was deleted — it triggered on a long-dead branch and had not been publishing this site for a long time.

Remotes

origin is the self-hosted Gitea at git.gabvdl.xyz/gabrielvidal/blog — that is the canonical repo. github remains as a secondary mirror of the old GabrielVidal1/gabrielvidal1.github.io repository; push there too if you want it kept in sync, but nothing depends on it.

Description
Personal website / blog, built with Astro (blog.dev.gabvdl.xyz)
https://blog.dev.gabvdl.xyz
Readme MIT 265 MiB
Languages
JavaScript 27.1%
Astro 25.1%
TypeScript 16.6%
CSS 15.9%
MDX 13.3%
Other 2%