SkillHub Certification is a course and participant management system built using Laravel 12. This project was created to fulfill certification requirements and demonstrate proficiency in:
- Web application development using Laravel framework
- Implementation of MVC (Model-View-Controller) pattern
- Database management with Eloquent ORM
- Application testing with PestPHP
- CRUD operations implementation
- Model relationships (Many-to-Many)
β¨ Participant Management
- Create, Read, Update, Delete participants
- Complete information: name, email, phone, address
β¨ Course Management
- Create, Read, Update, Delete courses
- Course details: name, instructor, description, duration
β¨ Enrollment Management
- Enroll participants to courses
- Many-to-Many relationship between participants and courses
- View enrollment list with participant and course details
- Unenroll participants from courses
- Framework: Laravel 12.0
- PHP: 8.2+
- Database: MySQL/PostgreSQL/SQLite
- Testing: PestPHP 4.1
- Frontend: Blade Templates, Vite
- CSS Framework: Bootstrap/Tailwind (optional)
Make sure your system has installed:
- PHP 8.2 or higher
- Composer
- Node.js & NPM
- Database (MySQL/PostgreSQL/SQLite)
- Clone repository
git clone https://github.com/LouisFernando1204/skillhub-certification.git
cd skillhub-certification- Install dependencies
composer install
npm install- Setup environment
cp .env.example .env
php artisan key:generate- Database configuration
Edit .env file and adjust database configuration:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=skillhub_certification
DB_USERNAME=root
DB_PASSWORD=- Run migrations
You have two options to set up the database:
Option A: Using Migrations (Recommended for Development)
php artisan migrateOption B: Import SQL File (Quick Setup with Sample Data)
If you prefer to use the provided SQL dump with sample data:
# For MySQL
mysql -u root -p skillhub_certification < skillhub_certification.sql
# Or using phpMyAdmin: Import the skillhub_certification.sql fileThe SQL file (skillhub_certification.sql) includes:
- β Complete database structure with all tables and foreign keys
- β Sample participants data (3 participants)
- β Sample courses data (3 courses)
- β Sample enrollments data (4 enrollments)
- β Ready-to-use data for testing and demonstration
- Build assets
npm run build- Run application
php artisan serveApplication will run at http://localhost:8000
The database structure is defined in migrations and also available as a SQL dump file (skillhub_certification.sql).
id: Primary Keyname: Participant nameemail: Participant email (unique)phone: Phone numberaddress: Addresscreated_at,updated_at: Timestamps
id: Primary Keyname: Course nameinstructor: Instructor namedescription: Course descriptionduration: Course duration (in hours)created_at,updated_at: Timestamps
id: Primary Keyparticipant_id: Foreign Key to participants (CASCADE on delete/update)course_id: Foreign Key to courses (CASCADE on delete/update)created_at,updated_at: Timestamps
The provided SQL file includes sample data:
Participants:
- Budi Santoso (budi.santoso@gmail.com)
- Siti Aminah (siti.aminah@yahoo.com)
- Reza Rahadian (reza.r@outlook.com)
Courses:
- Pemrograman Web Dasar (20 hours) - Instructor: Eko Kurniawan
- Desain Grafis Kreatif (15 hours) - Instructor: Dodi Mulyadi
- Digital Marketing Mastery (25 hours) - Instructor: Andri Wongso
Enrollments:
- Budi Santoso enrolled in: Pemrograman Web Dasar, Digital Marketing Mastery
- Siti Aminah enrolled in: Desain Grafis Kreatif
- Reza Rahadian enrolled in: Pemrograman Web Dasar
GET /participants- List all participantsGET /participants/create- Add participant formPOST /participants- Save new participantGET /participants/{id}- Participant detailsGET /participants/{id}/edit- Edit participant formPUT /participants/{id}- Update participantDELETE /participants/{id}- Delete participant
GET /courses- List all coursesGET /courses/create- Add course formPOST /courses- Save new courseGET /courses/{id}- Course detailsGET /courses/{id}/edit- Edit course formPUT /courses/{id}- Update courseDELETE /courses/{id}- Delete course
GET /enrollments- List all enrollmentsGET /enrollments/create- New enrollment formPOST /enrollments- Save enrollmentDELETE /enrollments/{id}- Delete enrollment
This project uses PestPHP for testing. To run tests:
# Run all tests
php artisan test
# or use pest directly
./vendor/bin/pest
# Run tests with coverage
php artisan test --coverageAvailable tests:
- β Course CRUD operations
- β Participant CRUD operations
- β Enrollment operations
- β Model relationships
- β Validation rules
app/
βββ Http/
β βββ Controllers/
β βββ CourseController.php
β βββ ParticipantController.php
β βββ EnrollmentController.php
βββ Models/
β βββ Course.php
β βββ Participant.php
β βββ CourseParticipant.php
β
database/
βββ migrations/
β βββ 2025_11_22_044027_create_courses_table.php
β βββ 2025_11_22_044027_create_participants_table.php
β βββ 2025_11_22_099999_create_course_participants_table.php
β
resources/
βββ views/
β βββ courses/
β βββ participants/
β βββ enrollments/
β βββ layouts/
β
tests/
βββ Feature/
β βββ CourseTest.php
β βββ ParticipantTest.php
β βββ EnrollmentTest.php
- β Create, Read, Update, Delete for Participants
- β Create, Read, Update, Delete for Courses
- β Create, Read, Delete for Enrollments
- β Many-to-Many relationship between Courses and Participants
- β Eloquent ORM for query optimization
- β Form validation for all inputs
- β Email unique validation
- β Required field validation
- β Unit tests for models
- β Feature tests for controllers
- β Test coverage for critical paths
Louis Fernando
- GitHub: @LouisFernando1204