Customer-facing (B2C)Tutoring Course System
Registration, payment and scheduling once kept on paper and in Excel, consolidated into one online system connected to LINE
Tutoring course operations, once kept on paper and in Excel, integrated into one in-house system connected to LINE.
Source DAOS-Sport/Tutor-System
- Outcome
- Registration, payment and scheduling records in one system; main course operations handled online
- Role
- Built from requirements: architecture, development, deployment and maintenance
- Period
- Launched 2026.05
- Tech
- React · Node.js · Express · PostgreSQL · LINE LIFF · Ragic API
Problem Registration, payment and scheduling kept on paper and in Excel, records scattered
Registration, payment and scheduling were kept on paper and in Excel, with part of the data in third-party systems, so the records were scattered. Permissions also could not be divided by role.
Role From requirements and architecture to deployment and maintenance
Built from requirements and architecture upward, covering development, deployment and maintenance.
After consolidation into an in-house system, LINE LIFF and Ragic were connected, and a role-permission settings page was added so permissions can be set by job duty.
User flow Parents register from LINE; front desk confirms payment and schedules courses
- Parents enter from LINE and complete course registration.
- Front desk confirms payment, then arranges the courses.
- Registration, payment and scheduling records stay in the same system.
Coaches have a separate coach portal with LINE login. The back office is used by front desk staff, lifeguards and managers, with features divided by job role.
LINE integration Parent registration, coach login and push
Parents enter from LINE to register; coaches sign in to the coach portal with LINE; LINE push notifications are guarded by 6 safety valves.
Impact Main course operations handled online
Main course operations are now handled online, and courses and workflows can be adjusted in-house.
Parents can complete registration just by entering from LINE; registration, payment and scheduling records stay in one system and are no longer spread across paper, Excel and external systems.
Technical decisions Permissions read from back-office settings; LINE push gets 6 safety valves
Permissions were originally hard-coded and now come from the role settings in the back office. When one person holds several roles, permissions are the union of all roles. Completed in four phases.
LINE push notifications got 6 safety valves, and nothing is sent whenever conditions are unclear: a master switch, per-event switches and an hourly cap, plus deduplication, a rehearsal (dry-run) mode and test recipients.
After launch Three investigations and the root causes found
- 2026.06|Fixed Ragic employee sync timeout. The root cause was per-record queries inside a loop, which made cold starts prone to timeouts; changed to fetch both tables in one pass before the loop and match the rows through a Map.
- Same day|Fixed the manual sync button failing every time. The front end sent an empty value, which the server's format validation rejected; after the root cause was fixed, the button works again.
- 2026.09|Fixed some syncs stuck in processing for a long time. Only by running that record once against the production site was the full error obtained: name masking split an emoji in half. Fixed in three layers, and every sync failure is now written to the database; previously, when a batch failed, the database kept only the first record.
Scale 265 API routes, 125 test scripts
Counted from the GitHub main branch: 265 API routes, about 100 database tables and 13 scheduled jobs.
125 test scripts in total, across unit, DB, E2E and other layers.
Source code: DAOS-Sport/Tutor-System.