← Home

2026 · work

MetaForest Web & BackendNode.js · MySQL · AWS

Traced real-user incidents in booking, deep links and organization management to their causes

Role
Backend and web development
Period
2026.05 – 2026.07
Status
In production
Stack
Node.js, MySQL, Docker, nginx, AWS

Context

The MetaForest web app (booking, organization management, session records) and its Node.js backend, running as dev/prod containers on a single EC2 instance.

Changing a session’s schedule issued a new token but did not expire the old one, so booking SMS went out carrying already-deleted tokens. Token expiry now updates on the schedule-change path; the fix was verified by executing the built artifact directly before release.

One column, three symptoms

Three separate reports: AI counseling showing “disabled”, social login bouncing, wrong default organization: all traced to the legacy users.partnerId. Code fixed, 72 users corrected in a full audit. A dead condition (|| constant) broke things when revived, so it was removed rather than restored. Zero regressions measured.

Four booking-screen bugs

Desktop date picker (.dateArrow pointer-events), multi-organization LNB via chat link (session-restore regression), date field autocomplete, and an unfilled organization select in the mobile booking modal. The first diagnosis blamed the session-restore regression; the real core was the unfilled select. The misdiagnosis was written down.

Cache policy and more

  • Stale JS after deploys was resolved with query versioning (?v=), html no-cache and one-day caching for js/css, together with PRs on the deployment tool; live on dev and prod.
  • A sub-organization hierarchy (mapping institutions under an education office) and an Agora webhook-based voice cost page, including a fix for a duplicate-session race in the webhook handler.