Back to Projects
KTalk (Main Platform) - Language Learning Platform

KTalk (Main Platform) - Language Learning Platform
Professional 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.

My Role

Frontend Developer

My Contributions
  • 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.

Challenges & Solutions

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.

React
Remix
React Router 7
TypeScript
Redux Toolkit
NestJS
PayPal
Tailwind CSS
Chart.js
FullCalendar
TinyMCE
This project was developed as part of my work at Potential Inc. The source code is proprietary and belongs to the client/company.