• Joined on 2026-03-17
marcel commented on issue marcel/familienarchiv#117 2026-03-31 21:12:55 +02:00
fix(a11y): add skip-to-main-content link in layout for keyboard navigation

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

Questions & Observations

  • This is a WCAG Level A requirement (2.4.1 — Bypass Blocks). It's not optional. Every keyboard…
marcel commented on issue marcel/familienarchiv#116 2026-03-31 21:12:39 +02:00
fix(security): add Content-Security-Policy headers to SvelteKit responses

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

Questions & Observations

  • CSP enforcement can break visual design silently. When Phase 2 enforcement goes live, any inline…
marcel commented on issue marcel/familienarchiv#115 2026-03-31 21:12:26 +02:00
fix(ui): replace localStorage panel state restore with SvelteKit snapshot API to eliminate flash on load

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

Questions & Observations

  • The flash is a real problem, not just a polish issue. On first load, the panel briefly appearing…
marcel commented on issue marcel/familienarchiv#114 2026-03-31 21:12:09 +02:00
fix(a11y): replace clickable divs with button elements in PdfViewer and AnnotationLayer

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

Questions & Observations

  • This is critical for our senior users. Keyboard navigation is not a niche use case — it's…
marcel commented on issue marcel/familienarchiv#113 2026-03-31 21:11:55 +02:00
refactor(frontend): extract extractErrorCode() helper to eliminate repeated as-unknown-as type assertions

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

No UI/UX concerns from my angle — this is a backend TypeScript utility refactor with no user-facing rendering changes. No visual…

marcel commented on issue marcel/familienarchiv#112 2026-03-31 21:11:47 +02:00
fix(security): enforce maximum file upload size limit

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

Questions & Observations

  • Show the limit upfront, not just on error. The upload form should display the maximum file size…
marcel commented on issue marcel/familienarchiv#111 2026-03-31 21:09:37 +02:00
fix(security): add rate limiting to login and password-reset endpoints

🎨 Leonie Voss — UI/UX Designer & Accessibility Strategist

Questions & Observations

  • The 429 error must be user-readable, not just an HTTP status code. A family member who has…
marcel commented on issue marcel/familienarchiv#117 2026-03-31 21:09:23 +02:00
fix(a11y): add skip-to-main-content link in layout for keyboard navigation

🏗️ Markus Keller — Application Architect

Questions & Observations

  • Trivial change, correct approach. +layout.svelte is the right place — one change, every route gets the skip…
marcel commented on issue marcel/familienarchiv#116 2026-03-31 21:05:20 +02:00
fix(security): add Content-Security-Policy headers to SvelteKit responses

🏗️ Markus Keller — Application Architect

Questions & Observations

  • svelte.config.js kit.csp vs manual header injection — use the framework. SvelteKit's built-in CSP support…
marcel commented on issue marcel/familienarchiv#115 2026-03-31 21:05:02 +02:00
fix(ui): replace localStorage panel state restore with SvelteKit snapshot API to eliminate flash on load

🏗️ Markus Keller — Application Architect

Questions & Observations

  • The snapshot API is exactly the right tool. It is SvelteKit's native answer to "persist state across same-tab…
marcel commented on issue marcel/familienarchiv#114 2026-03-31 21:04:48 +02:00
fix(a11y): replace clickable divs with button elements in PdfViewer and AnnotationLayer

🏗️ Markus Keller — Application Architect

Questions & Observations

  • No architectural concerns. This is a component-internal fix — it doesn't cross module boundaries, doesn't affect…
marcel commented on issue marcel/familienarchiv#113 2026-03-31 21:04:29 +02:00
refactor(frontend): extract extractErrorCode() helper to eliminate repeated as-unknown-as type assertions

🏗️ Markus Keller — Application Architect

Questions & Observations

  • Correct placement. api.server.ts is the right home — it's the module that wraps all backend communication, so…
marcel commented on issue marcel/familienarchiv#112 2026-03-31 21:04:13 +02:00
fix(security): enforce maximum file upload size limit

🏗️ Markus Keller — Application Architect

Questions & Observations

  • @ControllerAdvice is the correct mechanism, not @ExceptionHandler in a controller. `MaxUploadSizeExceededExcep…
marcel commented on issue marcel/familienarchiv#111 2026-03-31 21:03:55 +02:00
fix(security): add rate limiting to login and password-reset endpoints

🏗️ Markus Keller — Application Architect

Questions & Observations

  • Resilience4j over the ConcurrentHashMap alternative. The manual map has no TTL cleanup, no burst tolerance…
marcel commented on issue marcel/familienarchiv#117 2026-03-31 21:03:34 +02:00
fix(a11y): add skip-to-main-content link in layout for keyboard navigation

🧪 Sara Holt — QA Engineer & Test Strategist

Test Strategy

Skip links require a real browser and keyboard simulation — Playwright only, no Vitest.

E2E — Playwright:

t
marcel commented on issue marcel/familienarchiv#116 2026-03-31 21:03:17 +02:00
fix(security): add Content-Security-Policy headers to SvelteKit responses

🧪 Sara Holt — QA Engineer & Test Strategist

Test Strategy

CSP headers are response-header tests — Playwright is the right layer, not unit tests.

E2E — Playwright (Phase 1):

marcel commented on issue marcel/familienarchiv#115 2026-03-31 21:03:02 +02:00
fix(ui): replace localStorage panel state restore with SvelteKit snapshot API to eliminate flash on load

🧪 Sara Holt — QA Engineer & Test Strategist

Test Strategy

The snapshot API requires a real browser navigation — this cannot be tested with Vitest unit tests. Playwright is the right…

marcel commented on issue marcel/familienarchiv#114 2026-03-31 21:02:49 +02:00
fix(a11y): replace clickable divs with button elements in PdfViewer and AnnotationLayer

🧪 Sara Holt — QA Engineer & Test Strategist

Test Strategy

Component tests (@testing-library/svelte):

it('annotation toggle button is reachable by keyboard', async ()
marcel commented on issue marcel/familienarchiv#113 2026-03-31 21:02:29 +02:00
refactor(frontend): extract extractErrorCode() helper to eliminate repeated as-unknown-as type assertions

🧪 Sara Holt — QA Engineer & Test Strategist

Test Strategy

This is a pure unit test target — a small, pure function with no side effects.

**Vitest unit tests (extractErrorCode.test.ts

marcel commented on issue marcel/familienarchiv#112 2026-03-31 21:02:16 +02:00
fix(security): enforce maximum file upload size limit

🧪 Sara Holt — QA Engineer & Test Strategist

Test Strategy

Backend integration test — @SpringBootTest:

@Test
void shouldReturn413WhenFileSizeExceedsLimit() throws