Jan 2024 – Apr 2026 · 2.5 years
TPCA Education Platform
Built four major backend systems for a Taiwanese non-profit — payroll automation, school blacklist, program matchmaking, and donation pipeline.
Overview
A Laravel platform for Taiwan PCB Foundation connecting industry lecturers with schools. I built four systems that replaced manual spreadsheet workflows with automated, auditable features.
What I Built
Lecturer Payroll Module
Automated fee calculation and distribution for lecturers.
- Database design:
payrolls↔registrationsrelationship with Eloquent - Multi-factor calculation: hourly rate + transport subsidy + bonuses
- City-based lookup table for transportation subsidies
- PDF/Excel export with Laravel Excel
- Automated email with Mailable + PDF attachment
- Frontend self-service for lecturers to update payment info
School Blacklist System
Track and penalize schools that cancel or no-show.
- Refactored from school-level flag → dedicated
banstable - Granular control: ban by school, registration, or individual teacher
- Custom status:
CANCELED_BY_BANNED - Automated notifications to affected teachers and lecturers
GoGoGreen Program
Full lifecycle management for environmental education program.
- Multi-stage workflow: proposal → review → scoring → matchmaking
- State machine for registration status transitions
- Region-based filtering with geographic constraints
- Waitlist logic with automatic notifications
- Excel export for admin reporting
Donation Pipeline
End-to-end donation management with multi-step receipt signing.
- Sequential signing workflow with
signing_ordercolumn - Parallel notification for same-level signers
- Receipt void/rejection flows with state management
- Auto-generated thank-you emails post-signing
- Donor portal for donation history
Architecture Decisions
Per-registration bans, not per-school
School-level was too coarse. Refactored to dedicated bans table with foreign keys to both schools and registrations for granular penalties.
City-based transportation lookup Built lookup table mapping departure cities to subsidy amounts. Staff can update rates without code changes.
Sequential + parallel signing
Different roles sign in order, but same-level signers get notified simultaneously. Implemented with signing_order column and grouped notification logic.
Other Contributions
Registration UX improvements, high school course registration, member account management, survey system fixes, certificate templates, sponsor listing page, grade-binding optimizations, and various production hotfixes.