2026 · work
MetaForest Web & BackendNode.js · MySQL · AWS
Traced real-user incidents in booking, deep links and organization management to their causes
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.
Deep-link expiry incident
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.