Five complete visual identities (terminal, zine, arcade, editorial, blueprint) switched by a fixed bottom-right 5-button group, persisted in localStorage and linkable via ?design=<name>. Chrome rebuilt on semantic classes + CSS design tokens (src/styles/designs/). @gabvdl/ui wired in: GlobalSearch (Cmd-K palette over search-index.json, replaces the Svelte Lunr modal), ImageViewer on article images, CopyButton on code blocks. Deployed to beta.blog.dev.gabvdl.xyz.
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.