Thank you for your interest in contributing! Before you start, please read through this guide.
TeleDesk was developed through vibe coding — an iterative, conversation-driven approach using Claude Code by Anthropic. The architecture, features, and bug fixes were shaped collaboratively between the developer and Claude in an ongoing dialogue rather than written entirely by hand.
If you contribute, you are welcome to use AI assistance in the same spirit — just make sure the code you submit is correct, tested, and follows the conventions below.
Read AI_INSTRUCTIONS.md for the full architecture reference. The short version:
- Layer order:
widget → controller → data. Widgets never touch repositories directly. lib/structure:main.dart+src/common/+src/feature/. Do not restructure this.- One feature per folder inside
src/feature/. Each feature containscontroller/,data/,model/, andwidget/sub-folders. - State management: use
Control+freezedfor business logic,ChangeNotifierfor UI-only state insidewidget/controllers/. No Provider, Riverpod, MobX or GetX. - Repositories: always define an abstract interface (
IXxxRepository) and a concreteimpl.
Any change to a @freezed class or other annotated code requires regenerating files:
dart run build_runner build && dart format lib/Never manually edit *.freezed.dart or *.g.dart files.
- Fork the repo and create a branch from
main. - Keep changes focused — one concern per PR.
- Run the app and verify your change works before opening a PR.
- Describe what you changed and why in the PR description.
Open a GitHub issue with a clear description of the bug or feature request, including steps to reproduce if applicable.