Developing a Mobile Application for School Digital Journal
Parent learned about child's bad grade on Friday evening — through another parent's messenger. Digital journal sent notification to email nobody reads. Mobile app with push — only channel that works in real time.
Three Roles and Three Different Apps in One
Digital journal serves fundamentally different users: teacher (enters grades, maintains attendance), parent (monitors progress, gets notifications), student (sees schedule, homework). One app with different interfaces by role — right architecture.
RBAC (Role-Based Access Control) at API level: request with teacher token can't get other class data, parent token — only own children's data. Implemented via Spatie Permissions (Laravel) or middleware on Node.js.
Push Notifications by Role
Parent receives:
- "New grade: Math, 5 (excellent)" — immediately when entered by teacher
- "Absence: Ivanov D. missed 3 classes today"
- "New homework in physics for tomorrow"
- "Parent meeting April 25 at 6:00 PM" — reminder day before
Student receives:
- "Homework in biology added"
- "Tomorrow's schedule changed: PE cancelled"
- "Algebra test the day after tomorrow"
Teacher receives:
- "Parent requesting meeting"
- "Replacement: you teach 5B on Thursday instead of sick Petrov"
Each notification type — separate FCM notification channel on Android (user configures each independently) and separate UNNotificationCategory on iOS.
Grade Entry: Real-Time and Offline
Teacher enters grades during class — connection might be weak. Optimistic UI: grade immediately displays, syncs in background. Network error — local queue (Hive/Isar), sync on restore.
Push to parent sent only after successful server sync — not on local save. Important: situation where "notification arrived but grade didn't save" shouldn't happen.
Grading system configurable: standard 5-point, 12-point (Ukraine), 100-point, letter (A/B/C). System type — school setting, not hardcoded.
Schedule and Its Changes
Schedule — source of most notifications. Teacher changes, class moves, weather days — all must-haves.
Schedule stored as base (for school year) + patches (individual changes). On patch apply server calculates diff and broadcasts to affected classes/students.
Client displays schedule via TableCalendar with custom cell render (each class — separate widget with subject, teacher, room).
Homework with Attachments
Teacher attaches files (PDF, photo from board, video link). Viewing in app via built-in viewer or url_launcher for external links.
Student can mark homework done — helps parents monitor without annoying "did you do homework?". Task status visible in parent interface.
Children's Data and 152-FZ
App works with personal data of minors — stricter 152-FZ requirements. Data stored on Russian servers, personal data encrypted, access only authorized users. Consent collected at parent registration.
Integration with Government Systems
Russian schools work with EPOS.School, "Network City" or regional systems. Integration via REST/SOAP API of these systems or import/export — depends on customer requirements.
Timeline
| Scale | Timeline |
|---|---|
| MVP: grades, schedule, push | 10–12 weeks |
| + Homework, attendance, chat | 16–20 weeks |
| + Integration with EPOS.School / "Network City" | +6–8 weeks |







