A self-hosted family life OS for one household: chores, rewards, meals, lists and a shared calendar, built for a kitchen wall tablet.
A varde is a cairn: each person adds a stone, and nobody takes one away. That is also the product's central rule. Progress and earnings do not decrease; the app has no punishments, quality scores, or leaderboards.
- Household work, earnings and planning usually live in separate apps, none of them made for a shared wall screen.
- It is not a monitoring app for children: the whole household takes part, parents included.
- It runs on your own hardware, on your LAN, as one Docker Compose stack.
Chores and optional paid work, rewards and progression, routines, meals, lists, a shared calendar, upkeep and pull-only notifications, on one wall tablet and a few phones. Norwegian Bokmål is the household default; English is the source language.
| Layer | Technology |
|---|---|
| Backend | .NET 10, C# 14, Cratis Arc |
| Persistence | Cratis Chronicle event streams, MongoDB read models |
| Frontend | React 19, TypeScript, Vite, Tailwind CSS v4, @cratis/components |
| Deployment | One host, one Docker Compose stack, images on GHCR |
The code is organised as vertical slices under Source/Varde/<Module>/<Feature>/<Slice>/: a slice's
C#, generated TypeScript proxy, React surface and specs live together.
Requirements: the .NET SDK pinned in global.json, Node.js 22 or newer, Yarn 4 through
Corepack, and Docker for the local Chronicle stack.
./scripts/dev.sh up # start Chronicle and the dashboard
./scripts/dev.sh run # run the app against themTo put it on a real tablet, see deploy/README.md.
- The whole household participates; this is not a monitoring app for children.
Pliktis expected household work and never pays money.Oppdragis optional paid work.- Levels reveal additional work but never reduce what existing work is worth.
- The app records money owed and settled but never moves money.
- Notifications are pull-only. The app never creates an unsolicited sound.
- Identity and authorization are enforced by the server.
- Norwegian Bokmål is the household default; English is the source language.
The durable rulings are indexed in Planning/Decisions/README.md.
Design contracts live under Planning/design/.
Requirements:
- the .NET SDK pinned by
global.json - Node.js matching
package.json - Yarn 4 through Corepack
- Docker for the local Chronicle stack
Use the repository scripts so the application cannot accidentally connect to another local project's databases:
./scripts/dev.sh ports
./scripts/dev.sh up
./scripts/dev.sh run./scripts/dev.sh reset removes and recreates only this project's development volumes. Local port
settings belong in the ignored .env; see .env.example.
Run the backend phases in order:
dotnet build -c Debug
dotnet build -c Release
dotnet testThe Release build regenerates the TypeScript proxies. Files beginning with
// @generated by Cratis must never be edited by hand.
Then run the frontend gates from the repository root:
yarn compile
yarn lint
yarn test
yarn buildChanges that affect a running household may also require:
scripts/production-reachability.sh
scripts/smoke.sh
node scripts/browser-check.mjsThe latter two need a correctly started local stack. See AGENTS.md for the complete
working rules and verification hazards.
The legacy issue index is Planning/BACKLOG.md. New follow-ups that must
survive a session should be tracked as GitHub issues rather than session plans or handover files.
