Efficient station-based training. Organize, run and track drills with ease.
Live web-version is available on https://ringdrill.app
docs/architecture.md: project overview, tech stack, repo layout, conventions, backend contract, and where to look first when navigating the code.docs/adrs/: Architecture Decision Records (MADR format). Read these to understand why a non-obvious choice was made, and add a new one when you make such a choice.AGENTS.md: operating guide for AI coding agents (Claude Code, Codex, Cursor, etc.) and a quick orientation for human contributors. Read this before letting an agent change code.CLAUDE.md: short pointer file read by Claude Code on startup, defers toAGENTS.md.
To get started with developing for RingDrill using Flutter, follow these steps:
-
Clone the Repository:
Clone the RingDrill repository to your local machine:git clone https://github.com/DISCOOS/ringdrill.git
-
Set Up Development Environment:
Ensure you have the following prerequisites installed:- Flutter SDK
- Appropriate code editor (e.g., Android Studio with the Flutter and Dart plugins or Visual Studio Code with Flutter extension)
- JDK 17 or higher if you're targeting Android
- Xcode installed if you're targeting iOS
-
Configure the Project:
- Run the following commands in the project’s root directory to ensure all dependencies are installed:
flutter pub get
- If you're targeting Android, verify and set the
compileSdkVersionin theandroid/app/build.gradlefile to match the target SDK version (34 in this case). - If you're targeting iOS, ensure that the iOS deployment target is appropriately set in
ios/Podfile.
- Run the following commands in the project’s root directory to ensure all dependencies are installed:
-
Generate Code Using Build Runner:
Generate any required code for the project by running:make build
-
Enable Build Runner Watch Mode (Optional):
To automatically rebuild generated code when making changes, you can run:make watch
-
Create Release Builds:
For generating an Android release build using Shorebird, execute:make release-android
-
Patch Android Builds (Optional):
If deploying incremental patch updates for Android, run:make patch-android
-
Cut a Release Tag: When the working tree is clean and you want to mark a new release, bump
pubspec.yaml, prepend aCHANGELOG.mdentry, commit and tag in one step:make release-tag VERSION=1.0.3+17
VERSIONmust follow Flutter'sX.Y.Z+Nshape. The changelog window isgit log <last-tag>..HEAD --no-merges, so each release lines up with the previous tag. The target refuses to run on a dirty tree, to overwrite an existing tag, or to "bump" to the versionpubspec.yamlis already on. Push afterwards with:git push --follow-tags
To tag a previous commit (e.g. retroactively tag the commit that bumped to
1.0.2+16), pass the SHA togit tagdirectly:git tag -a "1.0.2+16" <sha> -m "Released 1.0.2+16" git push origin 1.0.2+16
-
Run the Application:
Start the project on your desired emulator or physical device:flutter run
-
Run the Admin CLI: To activate:
dart pub global activate -s path .
See usage for additional information:bash
ringdrill -h
```
- Run the Netlify backend locally:
Start the Netlify function host (with emulated blob store) on your machine:
Seed it with a sample drill, list the feed, or reset the local store:
make netlify-dev
Seemake catalog-seed # uploads test/fixtures/test-7x.drill and publishes it make catalog-feed # lists the market feed make catalog-reset # clears .netlify/blobs-serve (with the backend stopped)
docs/architecture.mdfor the full workflow (including how to point the Flutter app at the local backend) and the known limitation around the/d/<slug>deep-link path. The rationale is in ADR-0013.