3 Home
Maxime Lozach edited this page 2026-09-06 20:06:38 +01:00

Organisateur Familial — design documentation

A Nextcloud ExApp: Node.js/TypeScript + Fastify backend, Vue 3 frontend, SQLite on the AppAPI persistent volume. It gives a family shared shopping and task lists, a timetable, meal planning and recipes, on top of Nextcloud's own Calendar, Circles and Notifications rather than reimplementing them.

These pages are the design reference. They used to live in docs/ in the repository and moved here so that they can be read, and edited, without a checkout.

Page Covers
Scope What is in scope, what is deliberately out, and why
Architecture The stack, the numbered decisions D1…D37, the project layout, the database schema
UX The interface model: one active family and a switcher, never a list of families
Code guidelines The principles the code follows and the lint rules that enforce them
Dev environment The local Docker stack and how to test against it
Workflow How work is tracked: labels, the issue template, the steps, the review gates

The plan is not here. What is left to build is one open issue each, on the tracker. Workflow says how it is organised.

AGENTS.md stays in the repository. It is read by whoever — or whatever — is working in a checkout, and it holds the invariants the code must not break. These pages explain why the project is the way it is; AGENTS.md says what not to break while changing it.

Two things to know before reading anything else

Language. English for what a contributor reads: code, commit messages, identifiers, test names, AGENTS.md, these pages as they get translated. French for what a user reads: UI strings, notification text, API error messages. The dividing line is the audience, not the file — a Vue component holds both.

These pages are still largely French and are being translated; new sections are written in English rather than adding to the backlog, which is why Architecture is bilingual by section.

No PHP, no external service. This is an ExApp, not a traditional Nextcloud app, and everything stays on the instance.