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.
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_instructorwithsort_orderfor 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
shippablevsnon-shippableitems - 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.