A React-based Training Management System for SSG/WSG API integration with Excel bulk upload support
SSG TMS React Excel is a web application that integrates with SkillsFuture Singapore (SSG) and Workforce Singapore (WSG) APIs, enabling training providers to manage course runs, sessions, trainers, enrolments, assessments, and skills framework data through a unified dashboard.
The app supports bulk operations via Excel file upload (.xlsx), with built-in validation, data preview, and direct API submission β streamlining administrative workflows for training providers.
- Course Run Management β Publish, edit, delete, and view course runs with sessions and trainers
- Trainer Management β Full CRUD for training provider trainer profiles
- Enrolment Lifecycle β Create, update, cancel, search, and manage fee collections
- Assessment Management β Create, update, void, search, and view assessments
- Skills Framework β Browse occupations, search job roles, and explore skills
- Excel Bulk Upload β Upload
.xlsxfiles with multi-sheet support, field validation, and data preview before submission - Centralized API Layer β Axios client with interceptors for auth, error handling, and logging
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript 5 |
| Build Tool | Vite 7 |
| UI Library | Ant Design 6, Ant Design Icons |
| HTTP Client | Axios |
| Excel Parsing | SheetJS (xlsx) |
| Routing | React Router v7 |
| Date Handling | Day.js |
| API Integration | SSG/WSG REST APIs (mTLS + encrypted payloads) |
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser UI β
β βββββββββββββ ββββββββββββ ββββββββββββββββββ β
β β Dashboard β β Pages β β Excel Upload β β
β β β β (7 modules)β β + Preview β β
β βββββββββββββ ββββββββββββ ββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β React Hooks β
β useApi() Β· useExcelUpload() β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β API Service Layer β
β courseService Β· trainerService Β· enrolmentServiceβ
β assessmentService Β· skillsService β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Axios Client (ssgClient) β
β Auth Headers Β· Error Handling Β· Logging β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SSG/WSG REST APIs (mTLS) β
β UAT: uat-api.ssg-wsg.sg β
β Prod: api.ssg-wsg.sg β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
ssg-tms-react-excel/
βββ src/
β βββ api/ # Centralized API service layer
β β βββ ssgClient.ts # Axios instance + interceptors
β β βββ courseService.ts # Course Runs & Sessions endpoints
β β βββ trainerService.ts # Trainer CRUD endpoints
β β βββ enrolmentService.ts # Enrolment lifecycle endpoints
β β βββ assessmentService.ts # Assessment lifecycle endpoints
β β βββ skillsService.ts # Skills Framework endpoints
β βββ components/
β β βββ AppLayout.tsx # Sider + Content layout
β β βββ ExcelUpload.tsx # Upload + preview modal
β β βββ DataPreview.tsx # Table with error highlighting
β β βββ PageHeader.tsx # Breadcrumbs + title
β βββ pages/
β β βββ Dashboard.tsx # Module navigation
β β βββ CourseSessions.tsx # Session retrieval + upload
β β βββ CourseRuns.tsx # View/Add/Edit/Delete tabs
β β βββ Trainers.tsx # Retrieve/Add/Update/Delete
β β βββ Enrolments.tsx # Full enrolment lifecycle
β β βββ Assessments.tsx # Full assessment lifecycle
β β βββ SkillsFramework.tsx # Occupation & job role browser
β βββ hooks/
β β βββ useApi.ts # API state management
β β βββ useExcelUpload.ts # Excel file handling
β βββ utils/
β β βββ excelParser.ts # SheetJS parsing + mapping
β β βββ validators.ts # Schema validation
β βββ types/
β β βββ index.ts # TypeScript types + enums
β βββ App.tsx # Router + theme config
β βββ main.tsx # Entry point
βββ .env.example # Environment variable template
βββ package.json
βββ tsconfig.json
βββ vite.config.ts
- Node.js 18+ and npm
- SSG Developer Portal account with API credentials (developer.ssg-wsg.gov.sg)
- Client certificate (
.pem) and private key for mTLS authentication
# Clone the repository
git clone https://github.com/alfredang/ssg-tms-react-excel.git
cd ssg-tms-react-excel
# Install dependencies
npm install
# Configure environment
cp .env.example .env
# Edit .env with your SSG API credentials| Variable | Description |
|---|---|
VITE_SSG_API_BASE_URL |
SSG API base URL (UAT or Production) |
VITE_SSG_CLIENT_ID |
OAuth Client ID |
VITE_SSG_CLIENT_SECRET |
OAuth Client Secret |
VITE_SSG_UEN |
Training Provider UEN |
# Development server
npm run dev
# Production build
npm run build
# Preview production build
npm run previewAll endpoints are verified from SSG's official Sample-Codes repository.
| Module | Endpoint | Method |
|---|---|---|
| Course Runs | /courses/courseRuns/id/{runId} |
GET |
/courses/courseRuns/publish |
POST | |
/courses/courseRuns/edit/{runId} |
POST | |
| Sessions | /courses/runs/{runId}/sessions |
GET |
| Trainers | /tp/trainers |
GET/POST |
| Enrolments | /tpg/enrolments |
POST |
/tpg/enrolments/details/{refNum} |
GET/POST | |
/tpg/enrolments/search |
POST | |
/tpg/enrolments/feeCollections/{refNum} |
POST | |
| Assessments | /tpg/assessments |
POST |
/tpg/assessments/details/{refNum} |
GET/POST | |
/tpg/assessments/search |
POST | |
| Skills | /skillsFramework/occupations |
GET |
/skillsFramework/jobRoles |
GET |
The app supports .xlsx files with the following sheet structures:
| Column | Required | Description |
|---|---|---|
| Start Date | Yes | Session start date |
| End Date | Yes | Session end date |
| Start Time | Yes | HH:mm format |
| End Time | Yes | HH:mm format |
| Mode of Training | Yes | Training mode code |
| Column | Required | Description |
|---|---|---|
| Course Run ID | Yes | Target course run |
| Course Reference Number | Yes | SSG course reference |
| Trainee ID | Yes | NRIC/FIN |
| Trainee ID Type | Yes | SB/SO/OT |
| Trainee Full Name | Yes | Legal full name |
| Enrolment Date | Yes | Date of enrolment |
| Sponsorship Type | Yes | EMPLOYER/INDIVIDUAL |
| Training Partner Code | Yes | TP code |
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- SSG Developer Portal β Official API documentation
- SSG Sample Codes β Reference implementation
- Ant Design β UI component library
- SheetJS β Excel parsing library
If you found this useful, give it a star!