| .forgejo/workflows | ||
| e2e | ||
| public | ||
| scripts | ||
| src | ||
| .gitignore | ||
| .nvmrc | ||
| .prettierrc | ||
| eslint.config.js | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| stylelint.config.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
Photos
A static, progressively enhanced photo portfolio for András Schmelczer.
Requirements
- Node
22.13.0or newer compatible with.nvmrc - npm
10.9.0or 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/.