This file is read by Claude Code on startup. The authoritative project context lives in AGENTS.md. Read that first.
- This is a Flutter app (Dart 3, SDK
^3.8.0) plus a small Dart CLI and a Node Netlify backend. Repo layout, conventions and the backend contract live indocs/architecture.md. - Run
make buildafter any change to a@freezedclass, ajson_serializablemodel, or an enum with@JsonValueannotations. Never hand-edit*.freezed.dart,*.g.dartorapp_localizations*.dart. - Run
flutter analyzeandflutter testbefore claiming a task is done.test/widget_test.dartis a known-broken default-template smoke test, do not assert that all tests pass without flagging it. - User-visible strings go in
lib/l10n/app_en.arbandlib/l10n/app_nb.arb. No raw English in widgets. - Web-only code lives in
lib/web/behindif (dart.library.io)conditional imports. Do not importpackage:webordart:htmlfrom anything that is also compiled on Android or iOS. - The CLI (
bin/ringdrill.dart) and everything it transitively imports must stay free ofpackage:flutter/*imports. - Sentry calls must be inside the analytics consent gate set up in
lib/main.dart. Default is opt-out.
/initwill offer to refresh this file. If you run it, keep the section above (the pointer toAGENTS.md) at the top, then update the bullets to match any architectural shifts./reviewand/security-revieware appropriate for changes that touchlib/data/,lib/services/exercise_service.dart,bin/ringdrill.dart, or anything undernetlify/functions/.
AGENTS.md wins. This file is only allowed to be more specific, never to contradict.