How gcalacdayuniv/2026lms works
Online Portal is a student-and-lecturer course management SPA backed by a Cloudflare Worker API. Users register or sign in, reach role-specific dashboards, and access course rosters, attendance, performance summaries, and student submissions. The browser modules separate authentication, routing, course workflows, and UI templates; the Worker handles API operations and D1 data, with Google Apps Script/Drive as an optional document-storage integration. Source excerpts show frontend orchestration and API calls; backend and several README-described features are represented at subsystem level where implementation details were not excerpted.
Main entry points: globals.js Session and API client · course.js Course action coordinator · app.js App startup · router.js Hash router
Components 19
Browser application
- App startup
js/app.js - Hash router
js/router.js - UI components
js/components.js - Auth templates
js/components-auth.js - Dashboard templates
js/components-dashboard.js - Class templates
js/components-class.js - Session and API client
js/globals.js
Identity and profiles
- Authentication and admin
js/auth.js - Avatar utility
js/components-utils.js
Course operations
- Course action coordinator
js/course.js - Course dashboards
js/course-dashboard.js - Class roster
js/course-class.js - Attendance
js/course-attendance.js - Recitation picker
js/course-recitation.js
API and persistence
- Worker API
worker/worker.js - D1 database
Document storage
- Drive webhook
gas/Code.gs - Google Drive
Other components
- Portal user
Connections 31
- Portal user → App startup: opens portal
README.md - App startup → Session and API client: initializes
js/app.js - App startup → Authentication and admin: initializes
js/app.js - App startup → Course action coordinator: initializes
js/app.js - App startup → Hash router: initializes
js/app.js - Hash router → UI components: renders views
js/router.js - Hash router → Class roster: loads class
js/router.js - Hash router → Course dashboards: loads dashboard
js/router.js - Hash router → Authentication and admin: loads programs
js/router.js - UI components → Auth templates: exports templates
js/components.js - UI components → Dashboard templates: exports templates
js/components.js - UI components → Class templates: exports templates
js/components.js - Authentication and admin → Session and API client: uses session
js/auth.js - Authentication and admin → Avatar utility: formats avatars
js/auth.js - Class templates → Avatar utility: formats avatars
js/components-class.js - Dashboard templates → Avatar utility: formats avatars
js/components-dashboard.js - Course action coordinator → Course dashboards: delegates actions
js/course.js - Course action coordinator → Class roster: delegates actions
js/course.js - Course action coordinator → Attendance: saves attendance
js/course.js - Course action coordinator → Recitation picker: coordinates picker
README.md - Class roster → Attendance: renders metrics
js/course-class.js - Class roster → UI components: renders class
js/course-class.js - Course dashboards → Session and API client: reads user
js/course-dashboard.js - Attendance → Session and API client: uses API client
js/course-attendance.js - Authentication and admin → Session and API client: sends API requests
js/auth.js - Course action coordinator → Session and API client: sends API requests
js/course.js - Class roster → Session and API client: loads course data
js/course-class.js - Session and API client → Worker API: calls API
README.md - Worker API → D1 database: reads and writes
README.md - Worker API → Drive webhook: proxies uploads
README.md - Drive webhook → Google Drive: stores files
README.md