B2B Internship Management SaaS
Developed a multi-tenant web application managing the entire internship lifecycle during my internship at Vanness Plus Consulting Co., Ltd.
Overview
During my internship at Vanness Plus Consulting Co., Ltd., I contributed to a B2B Software-as-a-Service (SaaS) platform built with Laravel 10 designed to streamline the entire internship lifecycle. The system serves multiple companies (HR organizations) with role-based workflows for managing interns from application submission through onboarding, performance tracking, and final offboarding.
Key Features
- Multi-Tenant Architecture: Database structure that isolates data by HR organization (via hr_account_id), allowing each company to manage their own internship programs and intern records securely.
- Comprehensive Intern Portal: End-to-end features for interns including application submission, profile management, daily activity reporting, timesheet tracking, leave requests, and offboarding workflows.
- Application & Task Management: Submission of applications with required documents, automated task generation for each application, and status tracking through multiple stages.
- Performance Monitoring: Daily reports, feedback systems, and skill test recording that HR can review and evaluate intern performance in real-time.
- Role-Based Authentication: Distinct authentication guards and dashboards for three user types—Interns, HR Managers, and System Admins.
Challenges & Solutions
Challenge: Designing a secure B2B SaaS system required careful planning of the database structure to ensure strong multi-tenant data isolation—each company's HR must only see their own interns and programs, while the system supports different subscription tiers (free, standard, premium).
Solution: I designed a robust Relational Database Structure prioritizing Data Integrity and Multi-tenancy Isolation using MySQL and DBeaver. By implementing Foreign Key and Unique Constraints at the schema level, I ensured secure data boundaries between different companies. Additionally, I optimized application performance by utilizing Eager Loading (with()) in Laravel to eliminate N+1 query problems, ensuring efficient data retrieval across complex relationships such as Interns, Programs, and Applications.