ssbg04
171afbd72b
fix(reports): require all mandatory documents across all enrolled school tiers (JHS/SHS) for student compliance
2026-08-18 20:03:45 +08:00
ssbg04
255fe61811
fix(reports): enforce mandatory docs filter and teacher scoping in stats API; add color guide tips banner on top of KPI cards
2026-08-18 19:58:56 +08:00
ssbg04
7084d5ab65
fix(syntax): add missing closing brace in updateStudent
2026-08-18 19:49:47 +08:00
ssbg04
e707842a5f
fix: single enrollment on OCR student add, strict Graduated status validation, transparency bar graph spacing/mobile scroll, and desaturated dark mode status colors
2026-08-18 19:48:03 +08:00
ssbg04
bc02d86a17
fix(enrollment): strictly prevent duplicate enrollments in the same academic year
2026-08-18 19:23:55 +08:00
ssbg04
4df929e1df
fix(students): use array-style params for better-sqlite3 compatibility
2026-08-18 19:16:28 +08:00
ssbg04
497a38d405
fix: use COUNT DISTINCT for enrollment/4Ps counts, fix student year filter param ordering
2026-08-18 19:12:30 +08:00
ssbg04
1220b79222
fix(students): year filter now joins on enrollment IN that year, not globally latest — fixes missing students when filtering by school year
2026-08-18 19:04:07 +08:00
ssbg04
a0ea82d7db
reports: remove tabs from transparency board, stack sections vertically, make tables responsive, simplify compliance & analytics language
2026-08-18 18:56:21 +08:00
ssbg04
7ff1d2aaa4
docs: mark android app push notification task as completed
2026-08-18 18:40:22 +08:00
ssbg04
b4b4df9d1f
feat(tunnel): configure Cloudflare tunnel runner script with token
2026-08-18 18:24:37 +08:00
ssbg04
14951a31a7
feat(tunnel): replace localtunnel with Cloudflare Tunnel (zero sign-in, fast edge routing)
2026-08-18 17:18:17 +08:00
ssbg04
5f1a2789a4
feat(backend): add localtunnel dependency and start_tunnel script
2026-08-18 17:05:17 +08:00
ssbg04
e8af7c6a2a
feat(network): add Bypass-Tunnel-Reminder header to support localtunnel / tunnel proxy endpoints
2026-08-18 17:03:26 +08:00
ssbg04
dd2d51e1ce
fix(notifications): prevent duplicate pop-up banner when launching app from background notification
2026-08-18 16:50:17 +08:00
ssbg04
33fd2d32a9
fix(windows): guard NotificationService against flutter_local_notifications LateInitializationError on Windows
2026-08-18 16:26:32 +08:00
ssbg04
94ef3ddb9f
fix(flutter): guard FirebaseMessaging against LateInitializationError with Firebase.apps.isEmpty check
2026-08-18 16:23:56 +08:00
ssbg04
f5f29c95d8
fix(flutter): lazy-access FirebaseMessaging only on mobile to prevent LateInitializationError on Windows desktop
2026-08-18 16:21:34 +08:00
ssbg04
93c737e526
chore(windows): silence CMake deprecation warning by setting CMAKE_POLICY_VERSION_MINIMUM to 3.10
2026-08-18 16:19:31 +08:00
ssbg04
26a5d4be60
fix(notifications): remove redundant foreground alerts, remove persistent sync notification, and synchronize LAN/FCM deduplication
2026-08-18 16:17:09 +08:00
ssbg04
1a063ab5c2
chore: remove backend/uploads/ from git tracking
2026-08-18 16:07:11 +08:00
ssbg04
be8a58b178
chore: remove backend/data/ from git tracking and ignore entire folder
2026-08-18 16:05:16 +08:00
ssbg04
030322d496
chore: untrack google-services.json from git and add to gitignore
2026-08-18 16:03:55 +08:00
ssbg04
5ba89a5fc1
docs: update AGENTS.md and gitignore
2026-08-18 16:02:07 +08:00
ssbg04
746f65338b
fix(windows): resolve CMake compatibility and PDB locking errors for Windows desktop build
2026-08-18 15:47:02 +08:00
ssbg04
0b121dd984
feat(fcm): real-time audience-targeted high priority push notifications
2026-08-18 15:37:29 +08:00
ssbg04
0c859d7142
feat(fcm): support firebase-admin v14 modular API and google-services integration
2026-08-18 15:35:47 +08:00
ssbg04
0725f4ecf9
feat(flutter): FCM real-time push notifications
...
- firebase_core + firebase_messaging added to pubspec.yaml
- google-services gradle plugin wired in settings.gradle.kts + app/build.gradle.kts
- fcm_service.dart: initialize FCM, handle foreground messages, register token with backend
- main.dart: Firebase.initializeApp (graceful no-op until google-services.json added)
- auth_provider.dart: FcmService.registerToken() on login and auto-login
- AndroidManifest.xml: FCM default notification channel metadata
2026-08-18 13:56:29 +08:00
ssbg04
cb484051e3
feat(backend): FCM push notifications via firebase-admin
...
- fcmService.js: Firebase Admin SDK wrapper with sendToUser/sendToAll
- notificationController: hook FCM fire-and-forget in createNotification
- registerFcmToken endpoint: POST /api/notifications/fcm-token
- schema.js: add fcm_tokens table
- routes/notifications.js: register /fcm-token route
2026-08-18 13:53:00 +08:00
ssbg04
e94eaa63bf
fix(android): remove automatic battery optimization ignore request
2026-08-18 13:45:46 +08:00
ssbg04
fa8b101b34
fix(android): guard setExactAndAllowWhileIdle with canScheduleExactAlarms() check
...
SecurityException crash on Android 12+ when SCHEDULE_EXACT_ALARM special
access not user-granted. Now checks canScheduleExactAlarms() and falls back
to setAndAllowWhileIdle() (inexact, no special permission needed). Both
schedule() and cancel() wrapped in try/catch to prevent future alarm crashes.
2026-08-18 13:37:05 +08:00
ssbg04
281a782b93
fix(android): remove startForegroundService from BootReceiver (crash on boot)
...
ForegroundService requires a live Flutter engine and cannot be cold-started
from a BroadcastReceiver. flutter_foreground_task handles boot-restart
internally via autoRunOnBoot=true. BootReceiver now only reschedules
the AlarmManager chain.
2026-08-18 13:25:49 +08:00
ssbg04
648280ab45
fix(android): add AlarmManager 2-min background notification polling
...
- AlarmScheduler.kt: schedules setExactAndAllowWhileIdle every 2 min
- AlarmReceiver.kt: reads FlutterSharedPreferences, polls LAN backend, posts native notifications, self-chains next alarm
- MainActivity.kt: schedule alarm on app open
- BootReceiver.kt: schedule alarm on device reboot
- AndroidManifest.xml: register AlarmReceiver
2026-08-18 13:19:11 +08:00
ssbg04
4306a19d7b
fix(android): add BootReceiver.kt (force-add past gitignore)
2026-08-18 13:03:02 +08:00
ssbg04
1f02eb1f26
fix(android): enable push notifications in background/killed state
2026-08-18 13:02:37 +08:00
ssbg04
9aa6e6df2b
feat: add dynamic hardware vibration patterns and fix realtime reports compliance data
2026-08-18 12:32:36 +08:00
ssbg04
4487f2872f
feat: implement Android Foreground Service for real-time LAN background notifications
2026-08-18 11:29:24 +08:00
ssbg04
f4cb43b29f
style: remove background and border from Archives filter button
2026-08-18 10:45:34 +08:00
ssbg04
078c395126
feat: enhance Settings suffix dropdown, Users modal stepper and email autocomplete, and Archives header options
2026-08-18 10:43:09 +08:00
ssbg04
db42cf3050
fix: resolve Sheetifye Excel viewer integration, Riverpod autoDispose type bounds, and Dashboard initState error
2026-08-18 10:30:34 +08:00
ssbg04
93f419f6d1
feat(archives): add context menus, multi-select operations, print list controls, and fix grid view
2026-08-18 10:08:48 +08:00
ssbg04
9e4ed42806
feat(ui): fullscreen preview modal, button refinements, and notification slide fix
2026-08-18 09:46:43 +08:00
ssbg04
006587cb23
feat(archives): convert status dropdown to chips and modernize filter modal
2026-08-17 00:10:03 +08:00
ssbg04
74f4dfff33
fix(documents): responsive filter modal with scrollable section and fixed buttons
2026-08-16 23:23:08 +08:00
ssbg04
14607c15c4
fix(students): dynamic database filter options with cascading resets and clean dropdowns
2026-08-16 23:16:12 +08:00
ssbg04
a7f0b6a66a
feat(students): dynamic database filter options with cascading resets and clean dropdowns
2026-08-16 02:16:44 +08:00
ssbg04
57e0c201f8
feat: scope dashboard KPIs to teacher students and restrict teacher actions on documents screen
2026-08-16 02:05:01 +08:00
ssbg04
b57bcffa41
update: 4Ps default color
2026-08-16 01:44:00 +08:00
ssbg04
65c989d747
fix: enrollments tab in student screen dropdowns
2026-08-16 01:05:03 +08:00
ssbg04
314337c443
fix: add ctrl+f search shortcut and format search tooltips with italicized hotkeys across dashboard, students, documents, archives, and users screens
2026-08-14 00:14:33 +08:00