Personal site of Vadim Shchepotev. Astro, static output, TypeScript, native CSS. No UI framework runtime, no analytics, no trackers.
- Node 24 (see
.nvmrc). Astro 7 requires>=22.12.0; this project is developed and built on the current Node 24 LTS line. - npm >= 9.6.5, using
package-lock.json.
nvm use # reads .nvmrc
npm ci| Script | What it does |
|---|---|
npm run dev |
Prepares assets, then starts the Astro dev server. |
npm run check |
astro check — TypeScript and template diagnostics. |
npm run build |
Prepares assets, then builds static output into dist/. |
npm run preview |
Serves the built dist/ locally. |
npm run assets |
Asset preparation only (see below). |
npm run bundle |
Runs check + build and prints where the output is. Publishes nothing. |
scripts/prepare-assets.mjs runs before dev and build. It:
- Copies the latin
woff2subsets out ofnode_modulesintopublic/fonts, together with each font's licence notice (*-LICENSE.txt), since the font files are redistributed with the site. - Derives responsive AVIF/WebP variants of the source artworks in
public/images. The multi-megabyte source PNGs are the input only; an Astro integration prunes them fromdist/. The featured horse art prefersgypsy-vanner-study.pngand falls back toequestrian-study.png; both write the sameequestrian-*variants. - Rasterises the favicon set and the 1200x630 social card.
Outputs are regenerated whenever they are older than their source, older than
the script itself, or built from a different source than the one recorded in
public/images/derived/sources.json, so changing a crop, a quality setting, the
social card copy or the horse source never leaves a stale file behind. Delete public/images/derived to
force a full rebuild.
src/data/site.ts— the main biographical and project copy, metadata and links.src/layouts/Base.astro— document head, metadata, fonts, landmarks.src/sections/— the four home page sections.src/components/— header, footer, artwork, legacy-route notice.src/scripts/— progressive enhancement only (pond canvas, copy-to-clipboard, legacy hash routes). The page is complete without them.src/styles/global.css— tokens, reset, shared primitives. One dark theme.
The build is a plain static site. dist/ includes CNAME for GitHub Pages
custom-domain hosting, plus robots.txt and a sitemap.
Publishing is deliberately manual. npm run bundle builds and stops; it does not
commit, push, or contact any remote. The 2021 deploy.sh, which force-pushed a
throwaway repository over a Pages branch, has been removed.