No description
Find a file
2026-06-02 08:51:39 +01:00
.forgejo/workflows Clean up 2026-05-31 14:29:43 +01:00
e2e Update 2026-05-31 15:04:14 +01:00
public TIdy up 2026-05-31 13:06:47 +01:00
scripts Remove captions 2026-06-02 08:51:39 +01:00
src Remove captions 2026-06-02 08:51:39 +01:00
.gitignore Clean up 2026-05-31 14:29:43 +01:00
.nvmrc Clean up 2026-05-31 11:13:13 +01:00
.prettierrc Line-endings 2026-05-31 09:56:07 +01:00
eslint.config.js Clean up 2026-05-31 11:13:13 +01:00
package-lock.json Add plausible 2026-06-01 07:33:05 +01:00
package.json Add plausible 2026-06-01 07:33:05 +01:00
playwright.config.ts Migrate to vite 2026-05-31 13:23:10 +01:00
README.md Clean up 2026-05-31 14:29:43 +01:00
stylelint.config.js TIdy up 2026-05-31 13:06:47 +01:00
tsconfig.json Clean up 2026-05-31 11:13:13 +01:00
vite.config.ts Migrate to vite 2026-05-31 13:23:10 +01:00
vitest.config.ts TIdy up 2026-05-31 13:06:47 +01:00

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 generates assets (validating the photo catalog against src/pictures/ in the process), 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/.