Marcel d11378c254
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 4m46s
CI / OCR Service Tests (pull_request) Successful in 24s
CI / Backend Unit Tests (pull_request) Successful in 5m42s
CI / fail2ban Regex (pull_request) Successful in 47s
CI / Semgrep Security Scan (pull_request) Successful in 21s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m8s
CI / Unit & Component Tests (push) Successful in 5m23s
CI / OCR Service Tests (push) Successful in 24s
CI / Backend Unit Tests (push) Successful in 6m4s
CI / fail2ban Regex (push) Successful in 48s
CI / Semgrep Security Scan (push) Successful in 25s
CI / Compose Bucket Idempotency (push) Successful in 1m12s
nightly / deploy-staging (push) Successful in 5m20s
fix(deps): pin esbuild 0.28.1 and cookie >=0.7.0 to clear npm audit gate
The CI step "Security audit (no dev deps)" (npm audit --audit-level=high
--omit=dev) failed repo-wide on every PR: newly-published advisories landed
against the already-pinned esbuild 0.27.7 (GHSA-gv7w-rqvm-qjhr,
GHSA-g7r4-m6w7-qqqr — both high), pulled in transitively via
vite -> @sveltejs/vite-plugin-svelte. The fix for both only exists at
esbuild@0.28.1. A scoped vite@7 minor bump cannot help — all vite 7.x pin
esbuild ^0.27.0.

Add an overrides block:
  - esbuild 0.28.1 (exact, no caret — a future 0.29.x must not silently
    float in and re-break vite; let Renovate propose bumps explicitly)
  - cookie >=0.7.0 (clears the low GHSA-pxg6-pf52-xh8x reaching the prod
    tree via @sentry/sveltekit; drop-in, done in the same pass)

npm audit --audit-level=high --omit=dev now exits 0 with 0 vulnerabilities.
npm run build, lint, and a dev-server boot all succeed with the forced
esbuild 0.28.1 (validated, not assumed — it sits outside vite@7.3.3's
declared ^0.27.0 range).

Closes #817

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 00:23:31 +02:00

Familienarchiv

Familienarchiv is a private web application for digitising, organising, and searching a family document collection — letters, postcards, and photographs from 1899 to 1950. Family members upload scans, transcribe handwritten text (Kurrent/Sütterlin), and read the archive from any device.


Subsystems

  • frontend/ — SvelteKit 2 / Svelte 5 / TypeScript / Tailwind 4 web app (server-side rendered)
  • backend/ — Spring Boot 4 (Java 21) REST API; handles documents, persons, search, and user management
  • ocr-service/ — Python FastAPI microservice for OCR and handwritten text recognition (HTR); single-node by design — see ADR-001. Not part of the default dev stack (see Quick start below)
  • infra/ — Gitea Actions CI/CD config; future home for infrastructure-as-code
  • scripts/ — operational and data-pipeline helpers (reset-db.sh, clean-e2e-data.sh, import scripts)

Quick start

Prerequisites: Java 21, Node 24, Docker with the docker compose plugin (V2).

1. Configure environment

cp .env.example .env
# The defaults in .env.example work for local development without changes.

2. Start infrastructure

# Starts PostgreSQL, MinIO (object storage), and Mailpit (dev mail catcher)
docker compose up -d db minio mailpit

3. Start the backend

cd backend
./mvnw spring-boot:run
# Starts on http://localhost:8080
# API docs (dev profile, auto-enabled): http://localhost:8080/v3/api-docs

4. Start the frontend

cd frontend
npm install
npm run dev
# Starts on http://localhost:5173

Open http://localhost:5173 — you should see the Familienarchiv login screen.

Default development credentials:

# local dev only — change before any network-exposed deployment
Email:    admin@familyarchive.local
Password: admin123

Development setup only. The default docker compose config exposes the database port and uses root MinIO credentials. Do not connect this to a network without first reading docs/DEPLOYMENT.md (coming: DOC-5, #399).

Running the full stack via Docker (optional)

To run everything including the backend and frontend in containers:

docker compose up -d

Note: the OCR service (ocr-service/) builds its Docker image locally and downloads ~6 GB of ML models on first start. Expect 3060 minutes on a first run. The rest of the stack starts independently; OCR can be excluded with --scale ocr-service=0 on memory-constrained machines (requires ≥ 12 GB RAM).


Where to go next

Resource Purpose
docs/architecture/c4-diagrams.md C4 container and component diagrams (current system view)
docs/ARCHITECTURE.md (coming: DOC-2, #396) Full architecture guide with domain list
docs/GLOSSARY.md Overloaded terms: Person vs AppUser, Chronik vs Aktivität, etc.
CONTRIBUTING.md (coming: DOC-4, #398) How to add a domain, endpoint, or SvelteKit route
docs/DEPLOYMENT.md (coming: DOC-5, #399) Production deployment checklist and secrets guide
docs/adr/ Architecture Decision Records — the "why" behind key choices
Gitea issue tracker (internal — home network only) Bug reports, feature requests, and project planning

License

Private project — all rights reserved. Not licensed for redistribution.

Description
No description provided
Readme 48 MiB
Languages
Python 68%
TypeScript 13.6%
Java 13.5%
Svelte 4.6%
Shell 0.1%
Other 0.1%