Projects

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.

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.