MathPro Academy
Full-stack coaching platform for 4,000+ JSC, SSC, and HSC students across Bangladesh. Course delivery, a Lexical-based curriculum editor with inline LaTeX, SSLCommerz/MFS checkout with coupons and bundles, and an admin backend spanning analytics, fine-grained course access control, live classes, and LLM-assisted quiz import.
- Client
- MathPro Academic & Admission Care / Abdul Aziz
- Role
- Full-Stack Developer & Platform Architect
- Timeline
- 2025 – 2026
- Stack
- 8 technologies
A closer look



- Runtime LaTeX rendering that auto-detects legacy plain-text vs. new Lexical HTML records, then walks the mounted DOM to render $...$/$$...$$ spans with KaTeX — necessary because course content is actively edited, not fixed at build time
- Server-verified SSLCommerz checkout: every IPN re-queries SSLCommerz's own validation API by transaction ID rather than trusting the webhook payload, cross-checks the paid amount, and inspects SSLCommerz's own fraud risk score
- Idempotent, audited fulfillment: every webhook attempt is logged to a payment_audit_log table; re-delivered IPNs are caught via SSLCommerz's own VALID/VALIDATED status, and duplicate enrollment attempts are treated as a non-error
- Course-level access control for shareholders: managerial users can be scoped to specific courses only, so a partner instructor manages their own course without seeing the rest of the platform
- Coupons, multi-course bundles, and standalone book purchases in one checkout path, with server-side pricing and shipping fulfillment tracking
- Atomic PostgreSQL UPSERT-with-CASE streak tracking that increments, resets, or holds a student's daily streak in one round trip
- LLM-assisted quiz import: admins convert a teacher's raw questions into the platform's JSON import schema via a documented LLM prompt
- Analytics V2 covering revenue, user, course, learning, and payment analytics, plus live class scheduling and role-based permissions fetched from the backend
Need a similar delivery process for your product? I can help shape the scope and ship the implementation end to end.
Start a projectDisplaying LaTeX-heavy math content on the web is genuinely awkward: a client-side math library flashes raw LaTeX source before it renders, and the platform's own content history compounds it — years of plain-text course records exist alongside newer, richly-formatted Lexical HTML, so there's no single format to render ahead of time.
Separately, mobile financial service payments in Bangladesh (bKash, Nagad via SSLCommerz) are notoriously flaky: webhook retries and out-of-order delivery meant a naive "trust the webhook, write the enrollment" handler would eventually double-enroll a student or enroll one who never actually paid.
For content, an earlier build-time rendering attempt didn't survive contact with a database holding two generations of content format — the fix was a runtime renderer that first normalizes legacy plain text and new Lexical HTML into one sanitized shape, then walks the DOM after mount to find and render LaTeX spans with KaTeX.
For payments, instead of trusting the webhook payload, every IPN triggers an active server-to-server query back to SSLCommerz's own validation API, cross-checked against the amount recorded at checkout and SSLCommerz's own risk score, with every attempt logged to an audit table for reconciliation.
Students get formula rendering that degrades gracefully across a decade of content history instead of requiring a one-time content migration. Payments are enrolled exactly once per real transaction, with a paper trail for every webhook delivery whether it succeeded or not. On the admin side, coordinators and partner instructors operate within a permission system scoped to the courses they actually own, plus tooling built for people running cohorts day to day, not just engineers.
4,000+ students across JSC, SSC, and HSC tracks use the platform. Payment fulfillment has produced zero duplicate enrollments in production — caught by SSLCommerz's own validation-status check plus a duplicate-safe enrollment write, not a custom signature scheme SSLCommerz doesn't require.