Self-hosted construction operations platform (FastAPI + React + PostgreSQL + Docker Compose) with role-based workflows for projects, planning, reports, files, chat, and operations.
Version: v2.0.0
Release date: 2026-04-22
Full release notes: docs/releases/v2.0.0.md
- Customer master data (Kunden):
- new first-class
customerstable with CRUD API under/api/customers, - new Kunden sidebar entry with list and detail pages (projects, activity feed, notes),
- project modal now uses a searchable customer combobox with "+ Neuen Kunden anlegen" inline create,
- legacy project
customer_*columns preserved as a mirrored cache; the additive20260501_0048_customersmigration backfills existing projects by normalised(customer_name, customer_address).
- new first-class
- External partners (Subunternehmer / Fremdfirmen):
- new
partnerstable andtask_partnersjoin via the additive20260505_0049_partnersmigration, - task create/edit modals gain a "Partner / Externe Firma" multi-select with trade-coloured pills,
- task list endpoints accept
has_partnersandpartner_idfilters, - "Nur Partner-Aufgaben" filter chip on My Tasks, Office Tasks, and the project Tasks tab.
- new
- Werkstatt (workshop / inventory) module:
- new top-level entry with tabs for Dashboard, Bestand, Auf Baustelle, Nachbestellen, Projekt-Bedarfe, Katalog, Lieferanten, Partner, Kategorien & Lagerorte, Bestellungen, and Datanorm-Import,
- full core schema shipped via the additive
20260425_0047_werkstatt_coremigration, - Partner tab fully wired to real endpoints; remaining tabs render empty states until their backend read-endpoints land in a follow-up release,
- mobile surfaces (QR scanner, home, Artikel-Detail, Nachbestellen) included.
- Project Gantt view:
- new Gantt tab on project detail with a timeline of scheduled tasks,
- auto-scroll to today, weekend shading, per-bar inline actions for Calendar export, mark-done, and Construction Report shortcut,
- unscheduled tasks listed separately beneath the timeline.
- Workspace switcher (Construction / Office):
- top-of-sidebar segmented control for switching between site and office modes,
- workspace preference persisted in
localStorage; sidebar entries and task surfaces adapt to the active mode.
- Construction report improvements:
- PDF / Excel output now accepts an explicit
company_nameargument, - submitted-by line uses the user's nickname when configured.
- PDF / Excel output now accepts an explicit
- Tooling and hygiene:
.gitignorebroadened to exclude dev / smoke / test SQLite files, Claude Code scratch, Playwright MCP output, and root-level debug snapshot YAMLs/PNGs,- test fixture for
test_construction_report_uses_nickname_for_submitted_byupdated to accept the newcompany_namekwarg; the full suite is now 180/180 green.
You can install/upgrade without losing existing project data.
- Open
Admin->System updates. - Click
Check nowand verify the displayed release matches the deployed git tag/commit metadata. - Run
Dry runfirst. - Run
Install update.
If the runtime cannot auto-install (common in container-only deployments), use Option B.
- Run safe update flow (backup + migration preflight + real migration):
BACKUP_PASSPHRASE='<pass>' ./scripts/safe_update.sh --pull --branch main
- Verify:
./scripts/test.sh- open app and run quick smoke flow.
If you need to run steps manually:
BACKUP_PASSPHRASE='<pass>' ./scripts/backup.shgit fetch --tags --prune && git pull --ff-only origin maindocker compose build api./scripts/preflight_migrations.shdocker compose run --rm api sh -lc 'cd /app && alembic upgrade head'docker compose up -d --build api api_worker web caddy
Do not remove Docker volumes during upgrade.
Do not run docker compose down -v unless you intentionally want to delete database and file data.
- Backend: FastAPI, SQLAlchemy, Alembic
- Frontend: React, Vite
- DB: PostgreSQL
- Runtime: Docker Compose + Caddy
docs/STATE.mddocs/DECISIONS.mddocs/TESTING.mddocs/SECURITY.mddocs/SETUP.md