A powerful, modern assessment platform with automated certificate generation
Features • Installation • Usage • Documentation • Contributing
- Overview
- Features
- Technology Stack
- System Architecture
- Installation
- Configuration
- Usage Guide
- API Routes
- Database Schema
- Certificate Designer
- Deployment
- Testing
- Troubleshooting
- FAQ
- Contributing
- License
The Laravel Student Certification System is a comprehensive web application designed to revolutionize the way educational institutions, training organizations, and corporate entities conduct online assessments and issue digital certificates. Built on Laravel 11, this system combines robust backend architecture with a sleek, modern frontend to deliver an exceptional user experience.
- Zero Configuration Database: Uses SQLite out of the box - no complex database setup required
- Visual Certificate Designer: Drag-and-drop interface for pixel-perfect certificate customization
- Mobile-First Design: Fully responsive interface that works beautifully on all devices
- Intelligent Typography: Automatic text scaling and wrapping for long names
- High-Resolution Output: 3x DPI scaling ensures print-ready certificate quality
- Sri Lankan Mobile Validation: Built-in validation for local phone number formats
- Secure Admin Portal: Obscured login routes prevent unauthorized access attempts
- Export Capabilities: One-click CSV export of all submission data
- Real-time Preview: See exactly how certificates will look before publishing
- Unlimited Forms: Create as many assessment forms as needed
- Form Status Control: Toggle between Active/Inactive states
- Shareable Links: Generate unique, SEO-friendly URLs for each form
- Bulk Operations: Manage multiple forms efficiently
- Submission Tracking: Real-time view of student responses
- CSV Export: Download all submission data for offline analysis
The crown jewel of this system - a powerful, intuitive certificate customization tool:
- Drag & Drop Positioning: Click and drag the name element to any position on your certificate
- Live Preview: See changes in real-time as you design
- Typography Controls:
- Font size (10px - 200px)
- Font color (HEX color picker)
- Font weight (Normal, Bold)
- Font style (Normal, Italic)
- Advanced Text Layout:
- Max Width: Define text boundary boxes
- Text Alignment: Left, Center, or Right alignment
- Vertical Alignment: Top, Middle, or Bottom positioning
- Max Lines: Control text wrapping (1-5 lines)
- Auto-Scaling: Intelligent font size reduction for long names
- Background Options:
- Upload custom certificate templates
- Support for both Horizontal (Landscape) and Vertical (Portrait) orientations
- Fill, Cover, or Contain background modes
- Test Mode: Preview with sample names before publishing
- Zoom Controls: Zoom in/out for precise positioning
- MCQ Builder: Create multiple-choice questions with ease
- Dynamic Answers: Add unlimited answer options per question
- Correct Answer Marking: Single-click to mark the correct answer
- Question Reordering: Drag-and-drop to reorder questions
- Inline Editing: Edit questions without leaving the page
- Bulk Delete: Remove multiple questions at once
- Statistics Overview:
- Total forms count
- Active forms count
- Total submissions count
- Recent Activity:
- 5 most recent forms
- 5 most recent submissions
- Quick Actions: One-click access to common tasks
- Simple Form: Only name, email, and mobile number required
- Smart Validation:
- Email format verification
- Sri Lankan mobile number validation (supports
07xand+94formats) - Required field checking
- Instant Start: Begin quiz immediately after registration
- One Question at a Time: Focused, distraction-free experience
- Progress Tracking: Visual progress bar shows completion percentage
- Question Counter: "Question X of Y" display
- Clean Design: Modern, professional UI with SITC branding
- Responsive Layout: Works perfectly on mobile, tablet, and desktop
- Radio Selection: Clear, large touch targets for mobile users
- Instant Results: Immediate score calculation upon completion
- Professional Result Page:
- Glassmorphism design with gradient backgrounds
- Animated circular score display
- Score Summary Card: Shows score, percentage, and pass/fail status
- Certificate Preview Card: Live preview of the generated certificate
- High-Quality Downloads:
- 3x DPI resolution for print quality
- Automatic filename generation
- JPG format for universal compatibility
- Retake Option: Allow students to retake the quiz
- Mobile Optimized: Full functionality on smartphones
| Component | Technology | Version | Purpose |
|---|---|---|---|
| Framework | Laravel | 12.x | Application framework |
| Language | PHP | 8.2+ | Server-side logic |
| Database | SQLite | 3.x | Data persistence |
| Image Processing | GD Library | Built-in | Certificate generation |
| Session | File Driver | Default | User session management |
| Component | Technology | Version | Purpose |
|---|---|---|---|
| CSS Framework | Tailwind CSS | 3.x | Utility-first styling |
| JavaScript | Alpine.js | 3.x | Reactive components |
| Template Engine | Blade | Laravel 11 | Server-side rendering |
| Fonts | Google Fonts (Inter) | Latest | Typography |
| Icons | Heroicons | SVG | UI icons |
- Composer: PHP dependency management
- NPM/Node.js: Optional, for asset compilation
- Git: Version control
- Artisan: Laravel command-line tool
┌─────────────────────────────────────────────────────┐
│ Presentation Layer │
│ (Blade Views + Tailwind CSS + Alpine.js) │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Controller Layer │
│ (Admin Controllers + Public Controllers) │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Service Layer │
│ (CertificateService + Business Logic) │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Model Layer │
│ (Eloquent ORM + Database Relationships) │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Data Layer │
│ (SQLite Database) │
└─────────────────────────────────────────────────────┘
Admin Flow:
Admin Login → Middleware Auth → Dashboard → Form Management →
Certificate Designer → Question Builder → Publish → Share Link
Student Flow:
Public Link → Registration → Validation → Quiz Questions →
Answer Submission → Score Calculation → Certificate Generation → Download
Before you begin, ensure you have the following installed:
- PHP: Version 8.2 or higher (supports 8.2, 8.3, 8.4+)
php -v # Check your PHP version - Composer: PHP dependency manager
composer --version
- GD Library: For image processing (usually comes with PHP)
php -m | grep gd - Git: For cloning the repository
git clone https://github.com/codezelat/laravel-student-certification-system.git
cd laravel-student-certification-systemcomposer installThis will install all required packages including:
- Laravel Framework
- Eloquent ORM
- Blade Template Engine
- And all other dependencies defined in
composer.json
Copy the example environment file:
cp .env.example .envGenerate an application key:
php artisan key:generateEdit the .env file to set your admin credentials:
APP_NAME="SITC Certifier"
APP_ENV=local
APP_KEY=base64:... # Generated automatically
APP_DEBUG=true
APP_URL=http://localhost:8000
# Admin Credentials (Change these!)
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=your_secure_password_here
# Database
DB_CONNECTION=sqliteCreate the SQLite database file:
touch database/database.sqliteRun migrations to create all necessary tables:
php artisan migrateExpected output:
Migration table created successfully.
Migrating: 2024_01_01_000000_create_forms_table
Migrated: 2024_01_01_000000_create_forms_table (45.67ms)
Migrating: 2024_01_01_000001_create_questions_table
Migrated: 2024_01_01_000001_create_questions_table (32.11ms)
...
Create the symbolic link for storage:
php artisan storage:linkSet proper permissions (Linux/Mac):
chmod -R 775 storage bootstrap/cachephp artisan serveThe application will be available at: http://127.0.0.1:8000
APP_NAME="Your Organization Name"
APP_ENV=local # local, staging, production
APP_DEBUG=true # Set to false in production
APP_URL=http://localhost:8000 # Your application URLADMIN_EMAIL=admin@example.com # Admin login email
ADMIN_PASSWORD=SecurePass123 # Admin login password (use strong password!)DB_CONNECTION=sqlite # Database type (default: sqlite)
# DB_DATABASE=/absolute/path/to/database.sqlite # Optional: custom pathSESSION_DRIVER=file # Session storage driver
SESSION_LIFETIME=120 # Session timeout in minutesDefault certificate dimensions (A4 at 96 DPI):
- Horizontal: 1123 x 794 pixels
- Vertical: 794 x 1123 pixels
For high-quality certificates, we recommend uploading images at 300 DPI:
- Horizontal: 3508 x 2480 pixels
- Vertical: 2480 x 3508 pixels
- JPEG (.jpg, .jpeg)
- PNG (.png)
- Maximum file size: 5MB
The admin login is intentionally obscured for security. Access it via:
URL: http://127.0.0.1:8000/sitc-admin-super
Use the credentials you set in your .env file.
-
Navigate to Forms
- Click "Forms" in the sidebar
- Click "Create New Form" button
-
Fill Form Details
Title: "Web Development Certification" Description: "Test your knowledge of HTML, CSS, and JavaScript" Certificate Image: [Upload your certificate template] Orientation: Horizontal -
Click "Create Form"
- You'll be redirected to the form edit page
-
Access the Designer
- From the form edit page, click "Design Certificate"
- You'll see your uploaded certificate background
-
Position the Name
- Click and drag the "Student Name" element to your desired position
- Use the zoom controls (+/-) for precise placement
-
Customize Typography
- Font Size: Adjust using the slider (e.g., 48px)
- Font Color: Click the color picker to choose a color (e.g., #1F3A93)
- Font Weight: Choose Bold for prominence
- Font Style: Normal or Italic
-
Configure Text Layout
- Max Width: Set to 800px to prevent text overflow
- Text Align: Choose Center for centered names
- Vertical Align: Middle to center vertically within the text block
- Max Lines: Set to 2 to allow wrapping for long names
-
Test Your Design
- Click "Test Preview" button
- Enter a long name like "Mohamed Abdullah Ibrahim Al-Rahman"
- Verify the text fits properly
- Download the preview to check quality
-
Save Design
- Click "Save Design" button
- Your settings are stored in JSON format
-
From the Edit Form Page
- Scroll to the "Questions" section
- Click "Add New Question"
-
Create a Question
Question Text: "What does HTML stand for?" Answers: ☐ Hyper Text Markup Language [✓ Correct] ☐ High Tech Modern Language ☐ Home Tool Markup Language ☐ Hyperlinks and Text Markup Language -
Add Multiple Questions
- Repeat the process for each question
- Aim for 5-10 questions for a good assessment
-
Reorder Questions
- Use the drag handles (⋮⋮) to reorder questions
- Questions are automatically renumbered
-
Activate the Form
- Go back to "All Forms"
- Find your form
- Click "Activate"
- Status changes from yellow "Inactive" to green "Active"
-
Share the Link
- Click the "Share" icon (🔗)
- Link is automatically copied to clipboard
- Paste and share with students
Example URL:
http://127.0.0.1:8000/form/web-development-abc123
-
Access Submissions
- Click the "Submissions" icon (📋) next to your form
- View all student responses
-
Submission Details
- Participant name, email, mobile
- Score and percentage
- Submission date and time
-
Export Data
- Click "Export to CSV" button
- Opens in Excel for further analysis
-
Open the Shared Link
- Receive link from instructor
- Open in any web browser
-
Register
Full Name: John Doe Email: john@example.com Mobile: 077 123 4567- Click "Start Quiz"
-
Answer Questions
- Read each question carefully
- Select one answer by clicking the radio button
- Click "Next" to proceed
- Progress bar shows completion status
-
View Results
- Automatically redirected after last question
- See your score immediately
- View certificate preview
-
Download Certificate
- Click "Download Certificate (HQ)" button
- Save to your device
- Share on social media or print
| Method | URI | Controller | Action | Description |
|---|---|---|---|---|
| GET | / |
- | View | Home page (simple landing) |
| GET | /form/{slug} |
PublicFormController | show | View registration page |
| POST | /form/{slug}/register |
PublicFormController | register | Submit registration |
| GET | /form/{slug}/question/{index} |
PublicFormController | question | Display question |
| POST | /form/{slug}/answer |
PublicFormController | submitAnswer | Submit answer |
| GET | /form/{slug}/result |
PublicFormController | result | View results page |
| GET | /form/{slug}/certificate/view |
PublicFormController | viewCertificate | View certificate inline |
| GET | /form/{slug}/certificate/download |
PublicFormController | downloadCertificate | Download certificate |
| Method | URI | Controller | Action | Description |
|---|---|---|---|---|
| GET | /sitc-admin-super |
LoginController | showLoginForm | Admin login page |
| POST | /sitc-admin-super |
LoginController | login | Process login |
| POST | /admin/logout |
LoginController | logout | Logout admin |
| GET | /admin |
DashboardController | index | Admin dashboard |
| GET | /admin/forms |
FormController | index | List all forms |
| GET | /admin/forms/create |
FormController | create | Create form view |
| POST | /admin/forms |
FormController | store | Store new form |
| GET | /admin/forms/{form}/edit |
FormController | edit | Edit form view |
| PUT | /admin/forms/{form} |
FormController | update | Update form |
| DELETE | /admin/forms/{form} |
FormController | destroy | Delete form |
| POST | /admin/forms/{form}/toggle-status |
FormController | toggleStatus | Activate/deactivate |
| GET | /admin/forms/{form}/submissions |
FormController | submissions | View submissions |
| GET | /admin/forms/{form}/export |
FormController | export | Export CSV |
| GET | /admin/forms/{form}/design |
FormController | design | Certificate designer |
| POST | /admin/forms/{form}/design |
FormController | saveDesign | Save design settings |
| GET | /admin/forms/{form}/preview |
FormController | preview | Preview certificate |
| POST | /admin/forms/{form}/questions |
QuestionController | store | Create question |
| GET | /admin/forms/{form}/questions/{question}/edit |
QuestionController | edit | Edit question |
| PUT | /admin/forms/{form}/questions/{question} |
QuestionController | update | Update question |
| DELETE | /admin/forms/{form}/questions/{question} |
QuestionController | destroy | Delete question |
| POST | /admin/forms/{form}/questions/reorder |
QuestionController | reorder | Reorder questions |
erDiagram
FORMS ||--o{ QUESTIONS : has
FORMS ||--o{ SUBMISSIONS : receives
QUESTIONS ||--o{ ANSWERS : has
QUESTIONS ||--o{ SUBMISSION_ANSWERS : tracks
SUBMISSIONS ||--o{ SUBMISSION_ANSWERS : contains
ANSWERS ||--o{ SUBMISSION_ANSWERS : references
FORMS {
int id PK
string title
string slug UK
text description
string certificate_image
enum orientation
json certificate_settings
boolean is_active
timestamps created_at_updated_at
}
QUESTIONS {
int id PK
int form_id FK
text question_text
int order
timestamps created_at_updated_at
}
ANSWERS {
int id PK
int question_id FK
text answer_text
boolean is_correct
int order
timestamps created_at_updated_at
}
SUBMISSIONS {
int id PK
int form_id FK
string full_name
string email
string mobile
int score
int total_questions
timestamps created_at_updated_at
}
SUBMISSION_ANSWERS {
int id PK
int submission_id FK
int question_id FK
int answer_id FK
boolean is_correct
timestamps created_at_updated_at
}
Primary table for questionnaire forms.
| Column | Type | Description |
|---|---|---|
id |
INTEGER | Primary key |
title |
VARCHAR(255) | Form title |
slug |
VARCHAR(255) | Unique URL-friendly identifier |
description |
TEXT | Optional description |
certificate_image |
VARCHAR(255) | Path to certificate background |
orientation |
ENUM | 'horizontal' or 'vertical' |
certificate_settings |
JSON | Designer settings (position, font, etc.) |
is_active |
BOOLEAN | Publication status |
created_at |
TIMESTAMP | Creation timestamp |
updated_at |
TIMESTAMP | Last update timestamp |
Certificate Settings JSON Structure:
{
"x": 100,
"y": 400,
"font_size": 48,
"font_color": "#1F3A93",
"font_weight": "bold",
"font_style": "normal",
"background_fit": "fill",
"max_width": 800,
"text_align": "center",
"vertical_align": "middle",
"max_lines": 2
}Stores MCQ questions for each form.
| Column | Type | Description |
|---|---|---|
id |
INTEGER | Primary key |
form_id |
INTEGER | Foreign key to forms |
question_text |
TEXT | The question |
order |
INTEGER | Display order |
created_at |
TIMESTAMP | Creation timestamp |
updated_at |
TIMESTAMP | Last update timestamp |
Multiple choice options for each question.
| Column | Type | Description |
|---|---|---|
id |
INTEGER | Primary key |
question_id |
INTEGER | Foreign key to questions |
answer_text |
TEXT | Answer option text |
is_correct |
BOOLEAN | Whether this is the correct answer |
order |
INTEGER | Display order |
created_at |
TIMESTAMP | Creation timestamp |
updated_at |
TIMESTAMP | Last update timestamp |
Student quiz submissions.
| Column | Type | Description |
|---|---|---|
id |
INTEGER | Primary key |
form_id |
INTEGER | Foreign key to forms |
full_name |
VARCHAR(255) | Student's full name |
email |
VARCHAR(255) | Student's email |
mobile |
VARCHAR(20) | Student's mobile number |
score |
INTEGER | Number of correct answers |
total_questions |
INTEGER | Total questions in quiz |
created_at |
TIMESTAMP | Submission timestamp |
updated_at |
TIMESTAMP | Last update timestamp |
Computed property:
score_percentage:(score / total_questions) * 100
Individual answers for each submission.
| Column | Type | Description |
|---|---|---|
id |
INTEGER | Primary key |
submission_id |
INTEGER | Foreign key to submissions |
question_id |
INTEGER | Foreign key to questions |
answer_id |
INTEGER | Foreign key to answers |
is_correct |
BOOLEAN | Whether the answer was correct |
created_at |
TIMESTAMP | Answer timestamp |
updated_at |
TIMESTAMP | Last update timestamp |
The certificate designer uses a combination of frontend interactivity (Alpine.js) and backend image processing (GD Library) to create a WYSIWYG experience.
1. Canvas Display
<div id="canvas-container" class="relative">
<img src="certificate-background.jpg" class="w-full" />
<div id="draggable-text" class="absolute cursor-move">Student Name</div>
</div>2. Control Panel
- Font size slider
- Color picker
- Alignment buttons
- Width controls
3. Alpine.js State Management
{
x: 100,
y: 400,
fontSize: 48,
fontColor: '#000000',
maxWidth: 800,
textAlign: 'center'
}CertificateService.php
Key methods:
generate()- Creates the final certificate imageaddNameToImage()- Overlays the participant namecalculateTextDimensions()- Determines text bounding boxwrapText()- Handles multi-line textscaleFont()- Auto-scales for long names
High DPI Scaling: All coordinates and font sizes are multiplied by 3 for high-resolution output:
$scaleFactor = 3;
$scaledX = $x * $scaleFactor;
$scaledY = $y * $scaleFactor;
$scaledFontSize = $fontSize * $scaleFactor;Update your .env file for production:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com
# Strong admin credentials
ADMIN_EMAIL=admin@yourdomain.com
ADMIN_PASSWORD=VerySecurePassword123!@#
# Database (consider MySQL/PostgreSQL for production)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=certifications
DB_USERNAME=db_user
DB_PASSWORD=db_password# Clear and cache configuration
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Optimize autoloader
composer install --optimize-autoloader --no-dev# Set ownership (replace www-data with your web server user)
chown -R www-data:www-data storage bootstrap/cache
# Set permissions
chmod -R 775 storage bootstrap/cacheNginx Example:
server {
listen 80;
server_name yourdomain.com;
root /var/www/certifier/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Apache Example (.htaccess):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>Install Let's Encrypt SSL:
# Install Certbot
sudo apt install certbot python3-certbot-nginx
# Obtain certificate
sudo certbot --nginx -d yourdomain.comFor production with MySQL:
php artisan migrate --forceSet up error logging in .env:
LOG_CHANNEL=daily
LOG_LEVEL=error- Login with correct credentials
- Login fails with incorrect credentials
- Create new form
- Edit existing form
- Delete form
- Toggle form status
- Upload certificate image (JPEG)
- Upload certificate image (PNG)
- Design certificate (drag positioning)
- Change font size
- Change font color
- Test with long name
- Add question
- Edit question
- Delete question
- Reorder questions
- View submissions
- Export CSV
- Access public form via link
- Submit with all fields empty (should fail)
- Submit with invalid email (should fail)
- Submit with invalid mobile (should fail)
- Submit with valid data
- Answer all questions
- View results page
- Download certificate
- Retake quiz
- Test on mobile device
- Test on tablet
- Test on desktop
Run PHPUnit tests (if configured):
php artisan testSolution: Install GD library
# Ubuntu/Debian
sudo apt-get install php-gd
# macOS
brew install php@8.2
brew install php-gdRestart your web server after installation.
Solution: This is a CSRF token error. Ensure:
- Your form includes
@csrfdirective - Session is working properly
- Clear cache:
php artisan cache:clear
Solution: Fix file permissions
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cacheSolution: Create storage symbolic link
php artisan storage:linkVerify the link exists:
ls -la public/storageSolution: Run migrations
php artisan migrateIf migrations were previously run, try:
php artisan migrate:freshmigrate:fresh will delete all data!
Solution: Verify credentials in .env
grep ADMIN .envEnsure there are no trailing spaces in the password.
Solution: The system auto-generates unique slugs. If you see this error:
- Check if a form with similar title exists
- The slug includes a random 6-character suffix
- Manually edit the form title slightly
Q: Is this system free to use? A: Yes! This is open-source software licensed under the MIT License.
Q: Can I use this for commercial purposes? A: Absolutely. The MIT License allows commercial use.
Q: Does it require internet connection? A: The server needs to be accessible, but once deployed, it can run on local networks.
Q: Why SQLite instead of MySQL? A: SQLite is perfect for small to medium deployments. It requires zero configuration and is highly portable. You can switch to MySQL/PostgreSQL for larger deployments.
Q: Can I customize the certificate dimensions? A: Yes, you can upload any image size. The system adapts to the uploaded image dimensions.
Q: How many participants can use this system? A: SQLite can handle thousands of submissions. For larger scale (10,000+ students), consider MySQL/PostgreSQL.
Q: Can students retake quizzes? A: Each form submission is independent. Students can access the link again to retake.
Q: Are quiz answers randomized? A: Currently, no. Questions appear in the order you set. This can be added as a feature.
Q: Can I add time limits to quizzes? A: Not in the current version. This is a planned feature for future releases.
Q: Can I change the logo?
A: Yes! Replace public/images/sitc-logo.png and public/images/sitc-fav-150x150.png.
Q: Can I change the color scheme? A: Yes, edit the Tailwind configuration in the Blade templates or add custom CSS.
Q: Can I add more question types (essay, true/false)? A: This requires code modifications. Create an issue on GitHub for feature requests.
Q: Can I export results to PDF instead of CSV?
A: Currently, only CSV is supported. PDF export can be added using a package like dompdf.
We welcome contributions from the community! Here's how you can help:
- Check existing issues to avoid duplicates
- Create a new issue with:
- Clear title
- Steps to reproduce
- Expected vs actual behavior
- Screenshots (if applicable)
- Environment details (PHP version, OS, etc.)
- Open an issue with the tag
enhancement - Describe the feature in detail
- Explain the use case - why is this needed?
- Provide examples if possible
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Follow Laravel coding standards
- Add comments for complex logic
- Update documentation if needed
- Commit your changes
git commit -m "Add amazing feature" - Push to your fork
git push origin feature/amazing-feature
- Open a Pull Request
- Describe what you changed
- Reference any related issues
- Request review
- Follow PSR-12 coding standards
- Write meaningful commit messages
- Keep changes focused (one feature/fix per PR)
- Update tests if applicable
- Maintain backward compatibility when possible
This project is licensed under the MIT License.
MIT License
Copyright (c) 2024 CodeZelat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- GitHub Issues: Report bugs or request features
- Repository: codezelat/laravel-student-certification-system
- Laravel Team for the amazing framework
- Tailwind CSS for the utility-first CSS framework
- Alpine.js for lightweight reactivity
- SITC for the inspiration and branding
- Open Source Community for continuous support
Built with ❤️ by CodeZela Technologies
⭐ Star this repo if you find it helpful!