2026-05-07 - 2026-05-14

Overview

48 Active Pull Requests
75 Active Issues
Excluding merges, 1 author has pushed 449 commits to main and 465 commits to all branches. On main, 320 files have changed and there have been 29690 additions and 3833 deletions.

46 Pull requests merged by 1 user

Merged #568 fix(ci): run svelte-kit sync before lint to fix cache-hit tsconfig miss 2026-05-14 12:09:04 +02:00

Merged #565 ci: restrict push trigger to main — eliminate duplicate CI runs 2026-05-14 11:12:25 +02:00

Merged #564 fix(ci): run client coverage even when server coverage fails 2026-05-14 11:07:35 +02:00

Merged #563 fix(tests): use native element clicks in layout dropdown spec 2026-05-14 11:07:23 +02:00

Merged #561 fix(ci): add IMPORT_HOST_DIR stub to compose-idempotency job 2026-05-14 10:58:40 +02:00

Merged #558 ci(devops): downgrade upload-artifact v4 → v3 + ADR-014 + grep guard 2026-05-14 10:58:20 +02:00

Merged #559 chore(coverage): drop client branches threshold 80→75 to unblock CI 2026-05-14 10:16:52 +02:00

Merged #555 fix(#553): close [birpc] rpc is closed race — sync-factory invariant + duplicate-ID guard + PR #10267 backport 2026-05-13 12:55:49 +02:00

Merged #552 fix(notification): replace view-all anchor with button to prevent iframe navigation 2026-05-12 18:56:14 +02:00

Merged #550 fix(pdf-viewer): eliminate real pdfjs-dist loading from browser tests — stop birpc teardown race 2026-05-12 16:20:29 +02:00

Merged #549 fix(pdf-viewer): remove banned vi.mock('pdfjs-dist') — ADR 012 enforcement (issue #546) 2026-05-12 12:32:24 +02:00

Merged #548 fix(test): NotificationDropdown iframe navigation crash + Tailwind CI noise 2026-05-12 11:35:41 +02:00

Merged #547 test: fix flaky browser-mode tests in AnnotationShape and OcrTrainingCard specs 2026-05-12 11:14:22 +02:00

Merged #536 fix(#535): eliminate vi.mock(pdfjs-dist) birpc teardown race via libLoader injection 2026-05-12 09:57:30 +02:00

Merged #544 fix(ci): replace iproute2 ip with /proc/net/route for gateway detection 2026-05-12 09:57:03 +02:00

Merged #540 fix(ci): resolve smoke test host via bridge gateway, not 127.0.0.1 2026-05-12 09:28:45 +02:00

Merged #537 ci(nightly): reload Caddy before smoke test 2026-05-12 07:51:13 +02:00

Merged #505 test(coverage): drive browser tests to 80% on all metrics (#496) 2026-05-11 21:50:39 +02:00

Merged #526 feat(infra): bind-mount /import for backend mass-import endpoint 2026-05-11 20:55:43 +02:00

Merged #525 fix(infra): frontend healthcheck on 127.0.0.1, not localhost 2026-05-11 18:52:31 +02:00

Merged #521 fix(security): promote auth_token cookie to Authorization header (#520) 2026-05-11 18:20:10 +02:00

Merged #519 fix(user): findOrCreate Administrators group instead of blind-INSERT (#518) 2026-05-11 18:19:50 +02:00

Merged #517 fix(caddy): wrap actuator block in handle so it takes precedence over catch-all (#512) 2026-05-11 17:15:03 +02:00

Merged #516 fix(user): rename yaml key username→email so admin seed reads APP_ADMIN_USERNAME (#513) 2026-05-11 17:12:37 +02:00

Merged #515 fix(frontend): disable prerender crawl so protected routes aren't baked to login-bounces (#514) 2026-05-11 17:12:03 +02:00

Merged #511 fix(compose): mark create-buckets as one-shot for up --wait (#510) 2026-05-11 17:00:00 +02:00

Merged #509 fix(workflows): match runner label — runs-on ubuntu-latest (#508) 2026-05-11 16:18:40 +02:00

Merged #507 fix(minio): bake bootstrap.sh into image instead of bind-mounting (#506) 2026-05-11 15:56:06 +02:00

Merged #504 fix(fail2ban): pin polling backend so jail actually reads Caddy access log (#503) 2026-05-11 15:08:59 +02:00

Merged #499 feat(infra): production deployment pipeline — Caddy, staging, Gitea Actions (#497) 2026-05-11 14:29:33 +02:00

Merged #495 fix(test): make browser-project tests contribute to coverage measurement 2026-05-09 19:04:28 +02:00

Merged #488 fix(fts): paginate FTS match-set in SQL instead of loading all matching IDs 2026-05-09 16:35:15 +02:00

Merged #491 fix(db): add indexes on documents.sender_id and document_comments.author_id (#470) 2026-05-09 16:34:26 +02:00

Merged #493 fix(a11y): increase PdfControls touch targets to 44×44px (#354) 2026-05-09 16:09:18 +02:00

Merged #494 fix(ci): resolve date-buckets timezone + Testcontainers Docker failures (#476) 2026-05-09 16:08:49 +02:00

Merged #490 fix(user): replace Math.abs(hashCode()) with Math.floorMod in computeColor 2026-05-09 15:49:01 +02:00

Merged #489 fix(comment): declare missing @PathVariable params on block comment endpoints 2026-05-09 15:46:09 +02:00

Merged #492 fix(db): add PRIMARY KEY to group_permissions and promote tbmp UNIQUE to PK (#469) 2026-05-09 15:44:35 +02:00

Merged #487 fix(documents): filter inputs don't sync with URL on navigation (#482) 2026-05-09 14:27:25 +02:00

Merged #486 fix(build): unbreak production build — /hilfe/transkription prerender unreachable behind /login 2026-05-09 14:25:55 +02:00

Merged #484 feat(dashboard): reader dashboard spec alignment #483 2026-05-09 14:24:24 +02:00

Merged #477 feat(#447): permission-gated reader dashboard 2026-05-08 15:56:54 +02:00

Merged #478 feat(documents): timeline date-range filter with density bars (#385) 2026-05-08 12:27:17 +02:00

Merged #475 feat(chronik): add commentPreview to ActivityFeedItemDTO (#454) 2026-05-07 20:07:46 +02:00

Merged #456 cleanup(legibility): repo hygiene, TODO cleanup, and test flakiness fixes 2026-05-07 13:42:14 +02:00

Merged #455 cleanup(legibility): polish — CLEANUP-2, CLEANUP-3, CLEANUP-4 2026-05-07 13:22:18 +02:00

2 Pull requests proposed by 1 user

41 Issues closed from 1 user

Closed #531 ci(nightly): post-deploy smoke test for /api/admin/import-status 2026-05-14 11:53:21 +02:00

Closed #557 ci(devops): downgrade actions/upload-artifact v4 → v3 (re-regression — needs ADR to prevent future re-upgrade) 2026-05-14 10:58:20 +02:00

Closed #554 audit: factory mocks → prop injection migration (sveltest pattern) 2026-05-14 10:37:38 +02:00

Closed #556 ci(coverage): drop client-project branches threshold 80 → 70 to unblock CI 2026-05-14 10:16:53 +02:00

Closed #553 Unit & Component Tests job exits 1 — birpc teardown race resurfaces from async vi.mock factory with dynamic import 2026-05-13 12:55:50 +02:00

Closed #551 fix(test): NotificationDropdown view-all click navigates iframe — breaks vitest coverage 2026-05-12 16:38:41 +02:00

Closed #546 test: PdfViewer.svelte.test.ts re-introduces banned vi.mock('pdfjs-dist') factory — restores birpc teardown race 2026-05-12 12:32:25 +02:00

Closed #545 fix(test): NotificationDropdown "view-all link" test causes iframe navigation crash in CI 2026-05-12 11:35:41 +02:00

Closed #541 test: fix flaky browser-mode tests in AnnotationShape and OcrTrainingCard specs 2026-05-12 11:14:22 +02:00

Closed #535 Unit & Component Tests job exits 1 from vitest-browser teardown race — every test green but CI red 2026-05-12 09:57:30 +02:00

Closed #496 Increase browser component test coverage to ≥ 80% on all metrics (statements, lines, branches, functions) 2026-05-11 21:50:39 +02:00

Closed #522 tech-debt(auth): replace cookie-promotion glue with a proper session-based auth model 2026-05-11 18:50:50 +02:00

Closed #520 bug(security): browser-side /api/* requests miss Authorization in production → browser shows Basic-auth popup 2026-05-11 18:20:11 +02:00

Closed #518 bug(user): UserDataInitializer blind-INSERTs Administrators group; fails on retry (HIGH, prod-blocking) 2026-05-11 18:19:50 +02:00

Closed #512 bug(caddy): respond @actuator 404 swallowed by catch-all handle; /actuator/health returns 302 2026-05-11 17:15:04 +02:00

Closed #513 bug(user): admin seed ignores APP_ADMIN_USERNAME / PASSWORD — falls back to defaults (HIGH, prod-blocking) 2026-05-11 17:12:37 +02:00

Closed #514 bug(frontend): SvelteKit prerender-crawl bakes redirect-to-login into static HTML for protected routes (HIGH, prod-blocking) 2026-05-11 17:12:03 +02:00

Closed #510 bug(compose): up -d --wait treats create-buckets exit(0) as failure 2026-05-11 17:00:00 +02:00

Closed #508 bug(workflows): deploy workflows use runs-on: self-hosted but runner advertises ubuntu-latest — jobs never picked up 2026-05-11 16:18:41 +02:00

Closed #506 bug(infra/minio): create-buckets bootstrap.sh bind-mount fails on DooD runner (Is a directory) 2026-05-11 15:56:06 +02:00

Closed #503 bug(infra/fail2ban): jail defaults to systemd backend on Debian, never inspects Caddy access log 2026-05-11 15:08:59 +02:00

Closed #497 devops: production deployment — Caddy, staging env, and Gitea Actions CI/CD 2026-05-11 14:29:33 +02:00

Closed #367 security(transcription): CWE-79 — escapeHtml required for @mention rendering in PR-B 2026-05-09 22:03:13 +02:00

Closed #425 fix(test): make browser-project tests contribute to coverage measurement 2026-05-09 19:04:28 +02:00

Closed #468 fix(documents): paginate FTS match-set in SQL instead of loading all matching IDs 2026-05-09 16:35:17 +02:00

Closed #470 fix(db): add indexes on documents.sender_id and document_comments.author_id 2026-05-09 16:34:27 +02:00

Closed #423 fix(test): resolve pre-existing TranscriptionEditView and Richtlinien test failures 2026-05-09 16:20:45 +02:00

Closed #115 fix(ui): replace localStorage panel state restore with SvelteKit snapshot API to eliminate flash on load 2026-05-09 16:11:20 +02:00

Closed #354 fix(a11y): increase annotation toggle touch target to 44×44px minimum 2026-05-09 16:09:21 +02:00

Closed #476 fix(ci): two persistent CI failures — date-buckets timezone + Testcontainers Docker 2026-05-09 16:08:51 +02:00

Closed #471 fix(user): replace Math.abs(hashCode()) in AppUser.computeColor (negative on Integer.MIN_VALUE) 2026-05-09 15:49:02 +02:00

Closed #473 fix(api): add explicit @PathVariable name on transcription-block comment endpoints 2026-05-09 15:46:10 +02:00

Closed #469 fix(db): add primary key to group_permissions to prevent duplicate grants 2026-05-09 15:44:36 +02:00

Closed #482 fix(documents): filter inputs don't sync with URL — Sender/Receiver blank on load, fields don't clear on reset 2026-05-09 14:27:26 +02:00

Closed #472 fix(build): unbreak production build — /hilfe/transkription prerender unreachable behind /login 2026-05-09 14:25:56 +02:00

Closed #483 fix(dashboard): align reader dashboard with reader-dashboard-final spec 2026-05-09 14:24:25 +02:00

Closed #447 feat(dashboard): permission-gated reader dashboard for READ_ALL / BLOG_WRITE users 2026-05-08 15:56:55 +02:00

Closed #385 feat(documents): timeline date-range filter with density bars 2026-05-08 12:27:17 +02:00

Closed #454 feat(chronik): add commentPreview field to ActivityFeedItemDTO 2026-05-07 20:07:49 +02:00

Closed #416 audit(legibility): re-run readiness scorecard; ratify "ready for evaluation" 2026-05-07 15:22:38 +02:00

Closed #411 epic(legibility): polish — remove smells surfaced by audits 2026-05-07 15:22:26 +02:00

65 Issues created by 1 user

Opened #457 security(deps): bump Spring Boot to 4.0.6 to clear 2 CRIT + 17 HIGH CVEs 2026-05-07 17:21:13 +02:00

Opened #458 security(deps): bump @sveltejs/kit + vite to clear BODY_SIZE_LIMIT bypass + 5 high devDep CVEs 2026-05-07 17:21:33 +02:00

Opened #459 security(ocr): run OCR container as non-root user (CIS Docker §4.1) 2026-05-07 17:21:55 +02:00

Opened #460 security(history): scrub admin:admin123 from .claude/skills/transcribe/SKILL.md git history 2026-05-07 17:22:18 +02:00

Opened #461 devops(ci): add SAST/SCA/secret-scan/container-scan gates to .gitea/workflows/ci.yml 2026-05-07 17:22:49 +02:00

Opened #462 feat(observability): add handleError hook with structured stdout sink 2026-05-07 17:23:16 +02:00

Opened #463 feat(resilience): wrap OCR client with Resilience4j retry + circuit-breaker + time-limiter 2026-05-07 17:24:25 +02:00

Opened #464 security(uploads): integrate ClamAV scan before persisting documents to MinIO 2026-05-07 17:24:57 +02:00

Opened #465 refactor(frontend): replace raw fetch with event.fetch in admin/enrich routes (handleFetch bypass) 2026-05-07 17:25:18 +02:00

Opened #466 refactor(api): migrate GlobalExceptionHandler to RFC 9457 ProblemDetail 2026-05-07 17:25:41 +02:00

Opened #467 refactor(document): switch Document.tags + receivers + trainingLabels to LAZY + @EntityGraph 2026-05-07 17:26:13 +02:00

Opened #468 fix(documents): paginate FTS match-set in SQL instead of loading all matching IDs 2026-05-07 17:26:47 +02:00

Opened #469 fix(db): add primary key to group_permissions to prevent duplicate grants 2026-05-07 17:27:46 +02:00

Opened #470 fix(db): add indexes on documents.sender_id and document_comments.author_id 2026-05-07 17:28:06 +02:00

Opened #471 fix(user): replace Math.abs(hashCode()) in AppUser.computeColor (negative on Integer.MIN_VALUE) 2026-05-07 17:28:25 +02:00

Opened #472 fix(build): unbreak production build — /hilfe/transkription prerender unreachable behind /login 2026-05-07 17:28:47 +02:00

Opened #473 fix(api): add explicit @PathVariable name on transcription-block comment endpoints 2026-05-07 17:29:14 +02:00

Opened #474 cleanup(ocr): use %n instead of \n in TrainingDataExportService format string 2026-05-07 17:29:29 +02:00

Opened #476 fix(ci): two persistent CI failures — date-buckets timezone + Testcontainers Docker 2026-05-07 20:26:28 +02:00

Opened #479 feat(documents): keyboard-accessible range zoom for timeline 2026-05-08 10:12:06 +02:00

Opened #480 test(documents): timeline density Playwright coverage 2026-05-08 10:12:20 +02:00

Opened #481 perf(documents): move density aggregation into SQL when documents > 50k 2026-05-08 11:39:30 +02:00

Opened #482 fix(documents): filter inputs don't sync with URL — Sender/Receiver blank on load, fields don't clear on reset 2026-05-08 12:14:41 +02:00

Opened #483 fix(dashboard): align reader dashboard with reader-dashboard-final spec 2026-05-08 16:15:43 +02:00

Opened #496 Increase browser component test coverage to ≥ 80% on all metrics (statements, lines, branches, functions) 2026-05-09 18:43:54 +02:00

Opened #497 devops: production deployment — Caddy, staging env, and Gitea Actions CI/CD 2026-05-10 19:52:35 +02:00

Opened #498 devops: production observability stack — Prometheus, Loki, Grafana, Alertmanager 2026-05-10 20:47:48 +02:00

Opened #500 devops: bootstrap Renovate config for production deps (MinIO, mc, Postgres, Node, Caddy, mailpit) 2026-05-11 13:19:22 +02:00

Opened #501 test(ci): production image smoke-test job — boot frontend + backend images, curl /login 2026-05-11 13:19:38 +02:00

Opened #502 devops: nightly backup pipeline — pg_dump + mc mirror over Tailscale to heim-nas 2026-05-11 13:20:00 +02:00

Opened #503 bug(infra/fail2ban): jail defaults to systemd backend on Debian, never inspects Caddy access log 2026-05-11 14:58:50 +02:00

Opened #506 bug(infra/minio): create-buckets bootstrap.sh bind-mount fails on DooD runner (Is a directory) 2026-05-11 15:31:42 +02:00

Opened #508 bug(workflows): deploy workflows use runs-on: self-hosted but runner advertises ubuntu-latest — jobs never picked up 2026-05-11 16:15:46 +02:00

Opened #510 bug(compose): up -d --wait treats create-buckets exit(0) as failure 2026-05-11 16:32:12 +02:00

Opened #512 bug(caddy): respond @actuator 404 swallowed by catch-all handle; /actuator/health returns 302 2026-05-11 16:34:15 +02:00

Opened #513 bug(user): admin seed ignores APP_ADMIN_USERNAME / PASSWORD — falls back to defaults (HIGH, prod-blocking) 2026-05-11 16:35:26 +02:00

Opened #514 bug(frontend): SvelteKit prerender-crawl bakes redirect-to-login into static HTML for protected routes (HIGH, prod-blocking) 2026-05-11 16:52:24 +02:00

Opened #518 bug(user): UserDataInitializer blind-INSERTs Administrators group; fails on retry (HIGH, prod-blocking) 2026-05-11 17:25:37 +02:00

Opened #520 bug(security): browser-side /api/* requests miss Authorization in production → browser shows Basic-auth popup 2026-05-11 17:31:58 +02:00

Opened #522 tech-debt(auth): replace cookie-promotion glue with a proper session-based auth model 2026-05-11 18:20:55 +02:00

Opened #523 feat(auth): server-side session model replacing Basic-auth cookie promotion 2026-05-11 18:49:05 +02:00

Opened #524 feat(auth): defense-in-depth — CSRF, session revocation, login rate limit 2026-05-11 18:50:20 +02:00

Opened #527 "Unsaved changes" banner appears after creating a group/user — users think save failed 2026-05-11 19:06:41 +02:00

Opened #528 security(import): harden DocumentBuilderFactory against XXE in MassImportService 2026-05-11 20:13:22 +02:00

Opened #529 security(import): validate PDF magic bytes in MassImportService before S3 upload 2026-05-11 20:13:32 +02:00

Opened #530 security(import): reject path-traversal filenames from ODS in MassImportService.processRows 2026-05-11 20:13:41 +02:00

Opened #531 ci(nightly): post-deploy smoke test for /api/admin/import-status 2026-05-11 20:13:52 +02:00

Opened #532 ci(nightly): assert backend container can read /import after deploy 2026-05-11 20:13:57 +02:00

Opened #533 ui(admin/system): improve mass-import status card (loading state, i18n, font size) 2026-05-11 20:14:08 +02:00

Opened #534 spec(import): decide and document mass-import operator policy (3 open questions) 2026-05-11 20:14:22 +02:00

Opened #535 Unit & Component Tests job exits 1 from vitest-browser teardown race — every test green but CI red 2026-05-11 20:54:40 +02:00

Opened #538 bug(test): flaky browser-mode test — admin edit-user unsaved-changes guard 2026-05-11 22:46:07 +02:00

Opened #539 ci: extract Reload Caddy step into a composite action 2026-05-11 22:54:55 +02:00

Opened #541 test: fix flaky browser-mode tests in AnnotationShape and OcrTrainingCard specs 2026-05-12 09:35:57 +02:00

Opened #542 test: share fakePdfjs fixture across viewer test files 2026-05-12 09:39:45 +02:00

Opened #543 UX: PDF viewer has no loading indicator or error state when pdfjs-dist fails to initialise 2026-05-12 09:39:53 +02:00

Opened #545 fix(test): NotificationDropdown "view-all link" test causes iframe navigation crash in CI 2026-05-12 10:20:20 +02:00

Opened #546 test: PdfViewer.svelte.test.ts re-introduces banned vi.mock('pdfjs-dist') factory — restores birpc teardown race 2026-05-12 10:31:13 +02:00

Opened #551 fix(test): NotificationDropdown view-all click navigates iframe — breaks vitest coverage 2026-05-12 16:16:25 +02:00

Opened #553 Unit & Component Tests job exits 1 — birpc teardown race resurfaces from async vi.mock factory with dynamic import 2026-05-12 18:07:05 +02:00

Opened #554 audit: factory mocks → prop injection migration (sveltest pattern) 2026-05-13 10:02:51 +02:00

Opened #556 ci(coverage): drop client-project branches threshold 80 → 70 to unblock CI 2026-05-13 12:57:12 +02:00

Opened #557 ci(devops): downgrade actions/upload-artifact v4 → v3 (re-regression — needs ADR to prevent future re-upgrade) 2026-05-13 12:57:25 +02:00

Opened #560 audit report: factory vi.mock → prop-injection / __mocks__ migration (87 call sites, 12 modules) 2026-05-14 10:37:24 +02:00

Opened #566 feat(admin): assign groups when creating an invite link 2026-05-14 11:41:11 +02:00

33 Unresolved Conversations

Open #386 feat(documents): calendar view with appointment-style document rows 2026-05-08 12:27:23 +02:00

Open #327 feat(transcribe): keyboard shortcuts for the transcribe power path + cheatsheet overlay 2026-05-07 17:52:16 +02:00

Open #323 feat(persons): visually distinguish incomplete placeholder persons + filter by completeness on /persons 2026-05-07 17:51:37 +02:00

Open #363 devops: add Playwright E2E job to CI for stammbaum spec 2026-05-07 17:51:23 +02:00

Open #380 feat(transcription): decouple @mention display text from person search 2026-05-07 17:51:18 +02:00

Open #355 feat(transcription): E2E test for bulk "Alle als fertig markieren" action 2026-05-07 17:51:18 +02:00

Open #356 ux(transcription): show error toast when bulk "Alle als fertig markieren" fails 2026-05-07 17:51:15 +02:00

Open #353 test(a11y): add axe-playwright E2E gate for PDF viewer WCAG 2.1 AA compliance 2026-05-07 17:51:12 +02:00

Open #424 refactor(frontend): move statusDotClass/statusLabel from person/ to document/ 2026-05-07 17:50:54 +02:00

Open #431 test(e2e): follow-up gaps from legibility pre-flight (#402) 2026-05-07 17:50:41 +02:00

Open #427 refactor(backend): ArchUnit Rule 5 — enforce controller @RequestMapping URL prefix per domain 2026-05-07 17:50:38 +02:00

Open #453 refactor(admin): dedicated /api/admin/stats endpoint returning counts only 2026-05-07 17:50:00 +02:00

Open #335 feat(admin): activity panel on admin dashboard — system-wide weekly contribution counts 2026-05-07 17:48:32 +02:00

Open #306 feature(persons): Korrespondenz-Überblick dashboard on /persons/[id] 2026-05-07 17:48:32 +02:00

Open #321 feat(transcribe): show visible per-document transcription progress in the panel header 2026-05-07 17:41:20 +02:00

Open #322 fix(document-viewer): surface error + retry when file load stalls instead of spinning forever 2026-05-07 17:40:55 +02:00

Open #368 feat(persons): audit + complete person-merge flow for all data domains 2026-05-07 17:40:43 +02:00

Open #83 fix(security): remove hardcoded fallback admin credentials in application.yaml 2026-05-07 17:40:12 +02:00

Open #318 feat(mobile): reader surfaces (Home · /documents · /briefwechsel · /persons) pass mobile-first bar at 375 px 2026-05-07 17:39:55 +02:00

Open #84 fix(security): validate file upload MIME type from magic bytes, not client header 2026-05-07 17:39:02 +02:00

Open #140 Add Prometheus + Loki + Grafana monitoring stack 2026-05-07 17:38:31 +02:00

Open #142 Add build-and-push and deploy jobs to CI workflow 2026-05-07 17:38:28 +02:00

Open #124 Add Playwright visual regression tests at 320px, 768px, and 1440px breakpoints 2026-05-07 17:38:04 +02:00

Open #87 fix(security): explicitly restrict Spring Boot Actuator endpoints in production config 2026-05-07 17:38:00 +02:00

Open #134 Build production-ready multi-stage Dockerfile for the backend 2026-05-07 17:37:52 +02:00

Open #135 Build production-ready multi-stage Dockerfile for the frontend 2026-05-07 17:37:52 +02:00

Open #137 Add application-prod.yaml with secure Spring Boot production defaults 2026-05-07 17:20:08 +02:00

Open #138 Add automated PostgreSQL backup script with offsite upload 2026-05-07 17:19:54 +02:00

Open #139 Create .env.example and DEPLOYMENT.md for production onboarding 2026-05-07 17:19:54 +02:00

Open #141 Add Hetzner VPS to Tailscale tailnet for private deployment access 2026-05-07 17:19:44 +02:00

Open #116 fix(security): add Content-Security-Policy headers to SvelteKit responses 2026-05-07 17:19:14 +02:00

Open #111 fix(security): add rate limiting to login and password-reset endpoints 2026-05-07 17:18:51 +02:00

Open #86 fix(security): set secure: true on auth cookie for production (HTTPS) 2026-05-07 17:18:30 +02:00