Status & gaps¶
An honest current-state assessment against the product vision, informed by a full manager-experience audit. This is the page to read before planning the next quarter.
Where the product stands¶
The center can be operated on this today, and after the 2026 fixes it can also be set up and billed through the product. The reporting and practice experience is broad and trustworthy; the operational write-paths — historically the weak spot — have been largely closed.
Recently fixed (2026)¶
- Create a tuition charge — the ledger is no longer read-only; the manager can bill a student.
- Auto-charge on enrollment — enrolling a student into a class raises a charge from the class fee, so the ledger populates itself.
- Overdue status is derived from the due date (in local time), so late payers surface correctly.
- Change a user's role and block/unblock an account now work (they were dead buttons that failed on every click).
- A blocked/demoted account loses access immediately.
- AI budget now counts one grading as one unit (was ~3× too fast, throttling teachers).
- Dashboard KPIs corrected: "today" uses the center's local time, "still owed" never goes negative, and active-enrollment counts distinct students in active classes.
- Model names removed from the manager's reports.
- Grading edge cases fixed (partial AI replies no longer silently fill missing scores; the Reading/Listening band table matches the official scale; concurrent submissions can't lose an update or return the wrong row).
- Media range/seek, background-job double-charging, and internal-error leakage fixed.
Biggest remaining gaps¶
The manager audit surfaced these as the highest-value remaining work. They are features to build, not subtle bugs:
| Gap | Impact | Priority |
|---|---|---|
| Add-student / add-teacher forms | Onboarding still leans on the account-creation flow; a guided form per role is missing | P0 |
| Edit a class's core fields | A class's fee/capacity/band can't be corrected after creation, and a class can't be archived | P0 |
| Editable class schedule | UI-created classes get a fixed default timetable; the manager can't set custom weekly times | P1 |
| Listening audio upload in the editor | Manager-authored Listening tests have no way to attach audio | P1 |
| Session status & makeup sessions | Sessions can't be marked done/cancelled; no ad-hoc/makeup session | P1 |
| Auto-notifications | The "keep students/parents informed" module is inert — no delivery | P1 |
| Destructive-action confirmations | Delete test / assignment / material fire instantly with no confirm | P1 |
| Manager-facing grading oversight | No dashboard tile or link into the approval queues | P1 |
See the full manager-experience audit for all 77 findings and the prioritized plan.
Against the product roadmap¶
| Phase | Vision | Reality |
|---|---|---|
| Phase 1 | 8 management modules, 2 practice modes, AI grading + approval, AI Tutor, role dashboards | Mostly built. Read/reporting strong; a few operational write-paths and the notifications module still to finish. |
| Phase 2 | Parent portal, mobile app, push notifications, Zalo/SMS | Not started (mobile app scaffold exists). |
| Phase 3 | Handwritten-Writing OCR, deep pronunciation, white-label, multi-branch | OCR for test creation exists; the rest is future. |
Legacy code¶
The repository contains an older Node.js + MongoDB implementation of the same domain. It is not deployed and not part of the live system, but it still gates code merges and carries a weaker security model. Recommendation: archive it out of the merge gate so it can't be accidentally deployed or confused with production. Two of its unauthenticated internal endpoints were guarded defensively in the meantime.
Full audit reports¶
Two independent multi-agent audits back this assessment:
- A security & quality audit (46 verified findings) — access control, data integrity, AI-pipeline abuse, performance. The high-severity items are fixed.
- A manager-experience audit (77 verified findings) — every management module reviewed for whether the flow works, the data is right, and features exist. The P0 money-in and account-admin items are fixed; the feature gaps above remain.
Both reports are available as standalone documents from the product owner.