- Dart 75.9%
- PLpgSQL 9.6%
- C++ 7.5%
- CMake 5.4%
- Swift 0.8%
- Other 0.8%
- export the tracker CSV through the OS save dialog (file_selector) - add a shared comment field to bulk remove - default "Removed by" to the signed-in analyst via an email heuristic - add a tray icon whose tooltip shows the due count (tray_manager) - document the save dialog, bulk comment, and removed-by default |
||
|---|---|---|
| .agents/skills | ||
| android | ||
| assets | ||
| ios | ||
| lib | ||
| linux | ||
| macos | ||
| supabase/migrations | ||
| test | ||
| tool | ||
| web | ||
| windows | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| DEVELOPER_GUIDE.md | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
| skills-lock.json | ||
| supabase_setup.sql | ||
Incubation Tracking App
A Flutter (Windows desktop) replacement for the microbiology lab's Incubation Project Tracking Tool Excel workbook. Analysts record samples placed into incubators, see when each is due out, record dispositions, and print 3 × 2 in labels for the shared Zebra GK420d.
Data lives in Supabase, so the team collaborates in realtime the way they did on the shared workbook. Sign-in is required; analysts can edit everything, as they could in the shared workbook.
Features
- Sign in — email/password accounts managed in Supabase Auth. The session is kept in the OS keychain.
- Saved connections — point the app at a Supabase project once; it remembers the URL and publishable key and reconnects on launch.
- Enter Incubation Data — pick an incubator (temperature and room fill in), choose min/max incubation hours, and the earliest/latest out times are computed. Save and print the label in one step.
- Project Tracker — every open sample, with due-soon and overdue rows highlighted (the workbook's 30-minute red rule).
- Daily Removal — samples due today or overdue; record the disposition, who removed it, and comments.
- Label Printing — search any open sample, preview its label, and print.
- Theme — system, light, or dark, remembered between launches.
Setup
-
Apply the schema to your Supabase project (SQL editor, or
psql "$DATABASE_URL" -f supabase_setup.sql). It creates the tables, seeds the lab's incubators/analysts/dispositions/periods, enables realtime, adds theprofiles/role tables, and sets up RLS. -
Create the lab's users under Authentication → Users in Supabase. Each user gets a
profilesrow automatically. -
Promote the first supervisor (optional; analysts can already edit everything):
update public.profiles set role = 'supervisor' where email = 'you@example.com'; -
Run the app and add the connection on first launch:
flutter pub get flutter run -d windowsOr seed the connection at build time (it can still be changed in the app):
flutter run -d windows \ --dart-define=SUPABASE_URL=https://your-project.supabase.co \ --dart-define=SUPABASE_ANON_KEY=your-anon-keySUPABASE_PUBLISHABLE_KEYis accepted as an alias.
Development
flutter test
dart analyze lib/
dart format .
dart run tool/build_supabase_setup.dart # regenerate supabase_setup.sql
See DEVELOPER_GUIDE.md for the domain model,
architecture, and conventions.