
KTalk (Main Platform) - Language Learning PlatformProfessional Work
KTalk is a full-stack Korean Language Learning Management System (LMS) for online teaching and learning. The platform includes role-based dashboards, course and class management, subscriptions and payments, media management, blog and community features, and certificate management.
I worked as a Core Frontend Developer, contributing across three repositories and later expanding into full-stack development during the monorepo phase.
Frontend Developer
Built 22+ dashboard sections for Admin, Tutor, and Student roles.
Developed class, student, tutor, payment, subscription, inquiry, forum, promotion, textbook, Calendly, applicant, and language-centre management features.
Implemented PayPal payment and subscription flows with 28-day billing cycles, auto-renewal, discount tiers, and conditional UI.
Built media gallery functionality with CRUD operations and category filtering.
Developed blog management with SSR and slug-based routing for SEO-friendly blog pages.
Built community features including post comments and search.
Developed applicant and enrollment forms with validation and Google reCAPTCHA.
Built tutor profiles with multiple file uploads and nationality selection.
Implemented sorting and filtering across class, student, and tutor management tables.
Integrated Zoom links into class details and built inquiry functionality for admin and teacher panels.
Built the complete certificate management system, including creation, editing, publishing, revocation, and verification.
Implemented certificate request workflows from tutor request → admin approval → automatic generation.
Built PDF certificate generation with QR codes and public certificate verification.
Contributed to backend development using NestJS during the monorepo phase.
1. Complex Payment & Subscription Logic
Challenge: PayPal subscriptions required 28-day billing cycles, auto-renewal, discount tiers, and different UI states depending on subscription status.
Solution: Iteratively refined payment conditional rendering, PayPal button visibility, subscription end-date logic, and auto-renewal messaging.
2. Role-Based Dashboards
Challenge: Admin, Tutor, and Student users required completely different dashboards, permissions, and workflows.
Solution: Built role-specific dashboard components with conditional routing and access control across 22+ dashboard sections.
3. A Certificate Is a Document Someone Else Has to Trust
Challenge: A certificate is not a database row a student reads back on their own dashboard — it leaves the platform as a PDF and is shown to an employer or a school that has no account. Three things have to hold at once: it must be generated the same way every time, it must be verifiable by someone outside the system, and it must be revocable after it has been issued and sent.
Solution: Built the lifecycle around that — a tutor requests, an admin approves, generation is automatic rather than hand-assembled, and each certificate carries a QR code resolving to a public verification page keyed by a token in the URL path. Revocation flips the verification result rather than deleting anything, so an old PDF still resolves and now says so.
Result: A document a third party can check without an account, and an issuer who can withdraw one after it has left the building.
4. Scheduling Across Timezones
Challenge: A class has one true start time, but a student in Seoul, a tutor in Manila, and an administrator in Dhaka must each see it correctly in their own local time — and a subscription renewing on a fixed cycle must not drift when it crosses that boundary. Getting this wrong produces no error, only a student who misses a class.
Solution: Class times are stored once and rendered in the viewer's local zone.
Result: The same class reads correctly to all three roles without a second source of truth.
5. SSR for Blog Pages
Challenge: Blog detail pages needed server-side rendering for SEO while maintaining slug-based URLs.
Solution: Converted blog detail pages to SSR and implemented slug-based routing.