forked / Architecture

2. Architecture Constraints

2.1 Technical Constraints

ConstraintDescriptionRationale
PWA onlyOne web UI delivered as a PWA; no native shellSingle codebase, easy updates (ADR-039)
Mobile-firstUI designed for phones, responsive up to desktopMain use is kitchen and grocery shopping
Client stackReact 19, Vite, IndexedDB via PouchDB (Section 4.2)Offline-first persistence, CouchDB-compatible replication
BunBun for installs and scripts; never npm, yarn or pnpmFast installs, runs TypeScript directly
InternationalizationGerman and English from the start; strings in src/locales/Learnability for the primary audience
Deployment-selected sync mode/forked-config.json (gatewayUrl, couchdbUrl) selects self-hosted or forked cloud modeUsers never choose; one image serves both (ADR-038)
Direct replicationThe PWA replicates directly with CouchDB; no backend in the data pathOne sync path (ADR-028)
Self-hosted authBasic auth against the fixed database forkedLogin-only flow; cookie-based proxy or SSO auth is outside the flow
Gateway outside the repositoryThe operator’s gateway and website are not in this repositoryOnly the client contract is public (Section 7.3)
Layeringapp > features > shared > infrastructure > core, downward only, no cyclesEnforced by an architecture test (ADR-031)

2.2 Organizational Constraints

ConstraintDescriptionImpact
Agent-driven developmentPrimary development by coding agents with human reviewDocs are the primary context and must be explicit and current
Maintainer-owned decisionsOne maintainer decides architectureAgents present options before architectural changes (Section 8.9)
Non-profit, open source (MIT)No funding except optional hosting; MIT-compatible dependencies onlyFree and open-source tools, minimal operating cost

2.3 Conventions

  • Coding standards: .claude/rules/. Working rules and validation commands for agents: CLAUDE.md.
  • Commits follow Conventional Commits: <type>(<scope>): <subject>, scopes frontend, docs, arc42, agents, deps; ! after the type marks a breaking change.

View source on GitHub