chore: production readiness audit

- Move plans/ to dev-docs/, delete unused scaffold SVGs
- Create .dockerignore, rename container to immich-folio
- Extract BackLink component and toPhotoItems() helper in page.tsx
- Add keyboard accessibility (role=button, tabIndex, onKeyDown) to PhotoGrid
- Add aria-label to Lightbox EXIF toggle
- Fix React lint: replace setState-in-effect with useState initializer
- Add rate limiting to /api/auth (brute-force protection, 10 RPM)
- Add HSTS and X-DNS-Prefetch-Control security headers
- Add Secure flag to auth cookie in production
- New unit tests: rate-limit.test.ts (5), auth.test.ts (12)
- All 47 tests pass, 0 lint errors, build clean
This commit is contained in:
ralksta
2026-02-15 11:23:51 +01:00
parent 3d71e9ffb7
commit a0ee0ff433
26 changed files with 314 additions and 786 deletions

View File

@@ -203,7 +203,11 @@ export function Lightbox({ assets, currentIndex, onClose, onNext, onPrev }: Ligh
</div>
{/* EXIF toggle */}
<button className={styles.infoToggle} onClick={handleExifToggle}>
<button
className={styles.infoToggle}
onClick={handleExifToggle}
aria-label="Toggle photo info"
>
{showExif ? 'Hide Info' : 'Info'}
</button>