Backend: - studentController: scope teacher student list/count by timeline-latest enrollment (ORDER BY ay.year_range DESC, e.grade_level DESC, e.id DESC) instead of MAX(id) - documentController: same timeline-based scoping for teacher document access - folderController: same timeline-based scoping for teacher folder access - dashboardController: same timeline-based scoping for teacher dashboard stats - archiveController: same timeline-based scoping for teacher archive view - notificationController: replace MAX(id) enrollment subqueries with timeline sort; add broadcast notification support (entity_type IS NULL, category IN (student/document/system)) - schema, routes, reports, requirements, users: various supporting updates Frontend: - auth_repository: restore FlutterSecureStorage for JWT token storage (was broken: migrated to SharedPreferences while all other repos read from FlutterSecureStorage, causing all API calls to send null token silently) - student_model: add latestEnrollment getter computed dynamically from enrollments list; expose latestGradeLevel/latestSection as getters with fallback to server-supplied values - student_provider: invalidate studentDetailProvider on update/bulkEnroll/bulkGraduate - inactivity_wrapper: fix timeout 3000s -> 300s (5 min); improve _handleInactivity guard - dashboard, documents, settings, students, users screens: various UI updates Chore: - .gitignore: add .env, *.db, student uploads, debug/scratch scripts, flutter build artifacts - remove tis_rms.db from git tracking (runtime data, should never be committed)
frontend
A new Flutter project.
Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
For help getting started with Flutter development, view the online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.