# docs/

Project documentation organised into four categories: architecture decision records (ADRs), system architecture diagrams, infrastructure runbooks, and detailed UI/UX specifications.

## Folder structure

```
docs/
├── adr/                     # Architecture Decision Records
├── architecture/            # C4 model diagrams and system architecture docs
├── infrastructure/          # Deployment, CI/CD, and ops guides
├── specs/                   # UI/UX feature specifications (HTML)
├── ARCHITECTURE.md          # Human-readable architecture overview (DOC-2)
├── DEPLOYMENT.md            # Day-1 checklist and operational reference (DOC-5)
├── GLOSSARY.md              # Domain terminology (DOC-3)
├── security-guide.md        # Security policies and hardening guide
└── STYLEGUIDE.md            # Coding and design style guide
```

## ADR (`adr/`)

Architecture Decision Records capture major technical decisions and their rationale.

| ADR                                    | Title                                | Status   |
| -------------------------------------- | ------------------------------------ | -------- |
| `001-ocr-python-microservice.md`       | OCR as a separate Python container   | Accepted |
| `002-polygon-jsonb-storage.md`         | Polygon coordinates in JSONB columns | Accepted |
| `003-chronik-unified-activity-feed.md` | Unified activity feed (Chronik)      | Accepted |

When making a significant architectural change (new service, data model change, technology swap), write a new ADR:

- **Status** (Proposed / Accepted / Deprecated / Superseded)
- **Context** (forces at play)
- **Decision** (what we decided)
- **Consequences** (trade-offs)
- **Alternatives Considered** (table format)

ADRs are sequential (`NNN-descriptive-name.md`). Do not reuse numbers.

## Architecture (`architecture/`)

Contains C4 model diagrams describing the system at different zoom levels:

- **Context diagram** — How Familienarchiv fits into the user and system ecosystem
- **Container diagram** — The high-level technology choices (Spring Boot, SvelteKit, PostgreSQL, MinIO, OCR service)
- **Component diagram** — Major structural components within the backend

Written in Markdown with embedded Mermaid diagrams (`c4-diagrams.md`). Gitea renders these automatically.

For the human-readable architecture narrative, see [`docs/ARCHITECTURE.md`](ARCHITECTURE.md).

## Infrastructure (`infrastructure/`)

Operational documentation for running Familienarchiv in production and CI.

| Document                   | Purpose                                              |
| -------------------------- | ---------------------------------------------------- |
| `ci-gitea.md`              | Gitea CI/CD pipeline configuration                   |
| `production-compose.md`    | Production Docker Compose setup and VPS provisioning |
| `s3-migration.md`          | Migrating documents between S3 buckets               |
| `self-hosted-catalogue.md` | Self-hosted software catalogue                       |

For the day-1 deployment checklist, see [`docs/DEPLOYMENT.md`](DEPLOYMENT.md).

## Specs (`specs/`)

High-fidelity UI/UX specifications written as standalone HTML files. These are design documents describing exact layout, interactions, and responsive behavior before implementation.

Each spec typically includes:

- Visual mockups with CSS-in-HTML styling
- Interaction flows and state transitions
- Responsive breakpoint behavior
- Accessibility requirements

Before implementing a feature, check `specs/` for an existing specification.

## Style Guide

[`docs/STYLEGUIDE.md`](STYLEGUIDE.md) covers:

- Code formatting and linting rules
- Component naming conventions
- Color palette and typography
- Accessibility standards (WCAG 2.1 AA)
