photos/README.md
Andras Schmelczer 5bdf68eabd
All checks were successful
Check & deploy / validate (push) Successful in 3m0s
Check & deploy / deploy (push) Successful in 55s
Migrate to vite
2026-05-31 13:23:10 +01:00

2 KiB

Photos

A static, progressively enhanced photo portfolio for András Schmelczer.

Requirements

  • Node 22.13.0 or newer compatible with .nvmrc
  • npm 10.9.0 or newer

Install with:

npm ci

Development

npm run dev

The dev server binds to 127.0.0.1 by default. This generates responsive image assets and the typed photo manifest before Vite starts.

Build

npm run build

The build writes to dist/. Static files come from public/, and responsive photo assets are generated into public/static/photos/.

Quality Gates

Run the full local validation suite with:

npm run lint:check

This checks the photo catalog, generates assets, checks source photos for EXIF/XMP/IPTC metadata, type-checks, lints TypeScript and SCSS, and checks formatting.

Run unit tests separately:

npm test

Use npm run lint to apply Prettier formatting and auto-fixable ESLint/Stylelint issues.

End-to-end smoke tests are available separately:

npm run test:e2e

Playwright requires a browser installation. CI installs Chromium before running the smoke test.

Photo Catalog

Photo order, captions, and alt text live in src/photo-catalog.json. Add new source JPEGs to src/pictures/, then add a matching catalog entry. npm run dev, npm run lint:check, and npm run build validate that the catalog and source directory match.

The generated files under src/generated/ and public/static/photos/ are intentionally ignored because they are reproducible from the source images and catalog.

Metadata

Source photos should not contain private EXIF/XMP/IPTC metadata. Check with:

npm run lint:check

Strip metadata with:

node scripts/strip-image-metadata.mjs

Review image changes after stripping because this rewrites the JPEG files.

Deployment

The Forgejo workflow validates pull requests and trusted pushes with npm ci, npm run lint:check, npm test, npm run build, and a Playwright smoke test. Only pushes to main deploy, by copying dist/ to /pages/photos/.