← Work

Jun 2025 – Feb 2026 · 9 months

Course Management System

Rebuilt an e-commerce catalog into a learning platform — video streaming, live classes, student portal, and cart integration.

180
commits
78%
of course code
9 mo
to launch
6
architecture rewrites
LaravelPHPMySQLVue.jsAWS S3CloudFrontAlibaba Cloud VODLINE Pay APIZoom

Overview

Transformed a product catalog into a full learning platform. Courses were just purchasable items — no video player, no progress tracking, no student portal. I built it from scratch while keeping the live e-commerce shop running.

What I Built

Database & Admin (Jun 2025)

  • Schema design: categories → packages → lessons → instructors
  • Pivot table course_instructor with sort_order for multi-instructor support
  • Full CRUD admin panels for each entity

Frontend & Video (Jul–Dec 2025)

  • Vue.js course listing and student portal
  • Custom video player with progress tracking
  • AWS S3 + CloudFront for video hosting
  • Alibaba Cloud VOD for streaming
  • Live class support with Zoom/Meet URL field

Cart Integration (Nov 2025)

  • Merged courses into existing checkout flow
  • Separated shippable vs non-shippable items
  • Fixed shipping threshold calculation for mixed carts

Payment (Feb 2026)

  • LINE Pay integration: request → auth → callback → confirmation
  • Cancellation and refund edge cases

Architecture Decisions

Multi-instructor pivot table Original FK broke with co-instructors. Migrated to pivot table with sort_order column.

Reuse Inventory + Promotion models Integrated courses into existing models instead of parallel pricing system — no duplication, no drift.

Single meeting_url field Dropped complex Zoom API integration. A simple URL field works with Zoom, Google Meet, or any platform.

Key Bug Fix: Shipping Recalculation

Problem: Courses (no shipping) were included in free-shipping threshold calculation.

Fix: Split cart items into shippable / non-shippable groups. Corrected recalculation order: subtotal → shipping → promotions → total.

Other Contributions

  • LINE Pay integration for e-commerce checkout (full request → authorization → callback → confirmation flow)
  • Fixed international shipping weight calculation to account for free gifts from promotions

Reflection

Would push earlier for cleaner separation between content metadata (title, lessons) and product metadata (pricing, SKUs). The coupling caused most architecture rewrites.