A local-first Tango School management application built with Tauri v2, React, and SQLite.
- Core: Tauri v2 with
tauri-plugin-sqlfor SQLite - Frontend: React + TypeScript + Tailwind CSS
- State Management: TanStack Query (React Query)
- Architecture: Clean Architecture with Repository Pattern
src/
├── domain/ # Entities and types
├── repositories/ # Repository interfaces
├── infrastructure/ # SQLite implementations
├── services/ # Business logic layer
└── hooks/ # React Query hooks
The app uses SQLite with the following tables:
- students: Student profiles with role and Millesimi rating (0-1000)
- courses: Course schedules
- subscriptions: Student subscription management
Migrations are located in src-tauri/migrations/.
- Node.js 20+
- Rust (latest stable)
- npm or pnpm
npm installnpm run tauri devThis will:
- Start the Vite dev server (React frontend)
- Build and run the Tauri app
- Initialize the SQLite database with migrations
npm run tauri buildThe app follows a layered architecture:
- Domain Layer (
src/domain/): Pure TypeScript types, no dependencies - Repository Layer (
src/repositories/): Interfaces defining data contracts - Infrastructure Layer (
src/infrastructure/): SQLite implementations - Service Layer (
src/services/): Business logic (e.g.,promoteStudent) - Presentation Layer (
src/hooks/,src/App.tsx): React components and hooks
Services receive repository implementations via constructor injection:
const repository = new SQLiteStudentRepository();
const service = new StudentService(repository);This makes the code testable and allows swapping implementations (e.g., mock for testing).
- ✅ Student management with role tracking (Leader/Follower/Both)
- ✅ Millesimi rating system (0-1000)
- ✅ Student promotion logic (increments rating by 10, caps at 1000)
- 🚧 Course management (schema ready, implementation pending)
- 🚧 Subscription tracking (schema ready, implementation pending)
This application can be run on mobile devices in two ways:
- Via Browser (LAN): See
README-MOBILE.md. - Native App (Android/iOS): See
README-NATIVE-MOBILE.md.
MIT