All core school management features are self-contained with no third-party dependencies required.
Public-facing Website, React Admin Panel, and Laravel API — all included. Zero third-party dependencies.
Welcome to ClassKnot, a complete end-to-end school management platform built with modern technologies. Its purpose is to digitize and centralize all school operations — student records, fees, attendance, grades, staff management, admissions, and public website content — into a single web application. Designed for schools, colleges, and educational organizations looking to modernize their operations and improve efficiency.
This platform is distributed as a white-label solution, allowing complete customization of branding, configurations, and content to match your school's identity and scale your educational operations efficiently.
ClassKnot is a fully self-contained solution with zero external dependencies. Everything you need is included:
No payment gateways, map services, SMS services, push notifications, or external APIs required. Everything works out of the box.
Basic understanding of React-based website development, Laravel backend setup, and API integration is recommended before installation and customization.
ClassKnot is a completely standalone school management platform with zero third-party dependencies. Everything you need is built into the product — no external APIs, no subscription services, and no recurring fees.
Built-in role-based access control. No external permission services or third-party authorization packages needed.
Database-driven queue for background jobs. No external queue services or third-party job processors needed.
All data — student records, fees, attendance, grades, staff information, documents, and media — is stored in MySQL database. No external cloud storage or third-party databases required.
Zero external API dependencies. No payment gateways, map services, SMS services, or push notification services required.
| Component | Type | Description |
|---|---|---|
| Authentication | Built-in | Custom Laravel authentication system. |
| Role Management | Built-in | Native role-based access control with Super Admin. |
| Queue System | Built-in | Database queue for background job processing. No external queue services required. |
| Data Storage | Built-in | MySQL database for all data including documents, images, and media files. No external storage required. |
Zero Dependencies: ClassKnot is a completely standalone product. No third-party services, subscriptions, or external APIs are required for core functionality.
Database Configuration: MySQL database is included with the product, but requires configuration on your server. All data — including student records, fees, attendance, grades, staff information, documents, images, and media — is stored in the MySQL database. No external cloud storage or file hosting services required.
Hosting: Web hosting, domain registration, and SSL certificates are the responsibility of the buyer and are not included with the purchase.
Ensure the following software versions are installed before proceeding:
storage/,
bootstrap/cache/
--legacy-peer-deps)| Technology | Version | Check Command |
|---|---|---|
| PHP | 8.3.32 | php -v |
| Laravel | 13.22.0 | php artisan --version
|
| React | 19.2.8 | npm list react |
| Inertia.js | 2.0 | npm list @inertiajs/react
|
| Tailwind CSS | 3.2.1 | npm list tailwindcss
|
| Vite | 8.0 | npm list vite |
| Node.js | 18+ / 20+ LTS | node -v |
| npm | 9+ | npm -v |
| MySQL | 9.7 (Homebrew) | mysql --version |
| Composer | 2.x | composer --version
|
| Spatie Permissions | 6.0 | composer show spatie/laravel-permission
|
| Laravel Breeze | 2.4 | composer show laravel/breeze
|
| Laravel Sanctum | 4.0 | composer show laravel/sanctum
|
| Headless UI | 2.0 | npm list @headlessui/react
|
| DomPDF | 3.1 | composer show dompdf/dompdf
|
| Ziggy | 2.0 | composer show tightenco/ziggy
|
BCMath
Ctype
Fileinfo
JSON
Mbstring
OpenSSL
PDO
Tokenizer
XML
php -m
If any required extension is missing, uncomment or install it in your
php.ini file.
http://localhost in your browserNote: It's necessary to have a basic knowledge in both server side and frontend development.
Run these commands in your terminal/command prompt to confirm all required tools are properly installed:
# Check PHP version
php --version # Should show PHP 8.3+
# Check Composer version
composer --version # Should show 2.x or higher
# Check Node.js version
node --version # Should show v18+ or v20+ LTS
# Check npm version
npm --version # Should show 9+ or higher
# Check MySQL version
mysql --version # Should show 5.7+ / 8.0+
# Check PHP extensions
php -m # Verify required extensions: BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML
If all commands show the correct versions (or higher) and all PHP extensions are listed, your environment is ready for installation.
If any command returns "not found" or shows an older version, please install or update the corresponding software before proceeding.
ClassKnot is built using modern and scalable technologies to power the Website, Admin Panel, and API backend. All components are fully self-contained with zero third-party dependencies.
Before installing and running the application, ensure the following technologies and tools are installed with the recommended versions.
| Tool/Software | Minimum Version | Recommended Version |
|---|---|---|
| PHP | 8.3 | 8.3+ |
| Laravel | 13.8 | 13.x |
| React | 19.2.8 | 19.x |
| Node.js | 18+ | 20+ LTS |
| MySQL | 5.7+ | 8.0+ |
| Composer | 2.x | 2.x |
| npm | 9+ | 10+ |
| Vite | 8.0 | 8.x |
| Tailwind CSS | 3.0 | 3.2.1 |
| Git | 2.x | Latest |
| Category | Technology | Version | Purpose |
|---|---|---|---|
| Frontend (Website) | |||
| Framework | React | 19.2.8 | UI Library for building interactive interfaces |
| Build Tool | Vite | 8.0 | Build tool & development server |
| CSS Framework | Tailwind CSS | 3.2.1 | Utility-first CSS framework |
| JavaScript | ES2020+ | — | Modern JavaScript features |
| Backend (API) | |||
| Language | PHP | 8.3.32 | Server-Side Programming Language |
| Framework | Laravel | 13.22.0 | PHP Framework for API & Backend |
| Authentication | Laravel Breeze | 2.4 | Authentication scaffolding |
| API Authentication | Laravel Sanctum | 4.0 | API token authentication |
| Role & Permission | Spatie Laravel Permission | 6.0 | User Roles & Permissions Management |
| Database | MySQL | 8.0+ | Relational Database for all data storage |
| Queue Driver | Database | — | Background job processing |
| Dependency Manager | Composer | 2.x | PHP Package Management |
| Admin Panel | |||
| Framework | React | 19.2.8 | UI Library for admin dashboard |
| Build Tool | Vite | 8.0 | Build tool & development server |
| CSS Framework | Tailwind CSS | 3.2.1 | Utility-first CSS framework |
| UI Components | Headless UI | 2.0 | Accessible UI components |
| Icons | Lucide React | 1.26.0 | Icon library |
| Carousel | Swiper | 14.0.6 | Touch slider/carousel |
| PDF Generation | DomPDF | 3.1 | PDF generation for reports & receipts |
| JavaScript Integration | Ziggy | 2.0 | Laravel route generation for JavaScript |
| Inertia.js | Inertia.js | 2.0 | Full-stack single-page application framework |
BCMath
Ctype
Fileinfo
JSON
Mbstring
OpenSSL
PDO
Tokenizer
XML
Check installed extensions: Run php -m in your terminal.
If any extension is missing, uncomment or install it in your php.ini file.
storage/ and
bootstrap/cache/
ClassKnot is a completely standalone product. All technologies listed above are either:
No payment gateways, map services, SMS services, or external APIs are required for core functionality.
Install all required SDKs, development tools, and dependencies using the recommended versions before beginning the installation process. Version mismatches may result in build or runtime issues.
Pro Tip: Use Node Version Manager (NVM) for managing Node.js versions.
ClassKnot consists of two main components:
React + Inertia.js frontend
React + Inertia.js frontend with Laravel API
Website & Admin Panel: Both use React 19.2.8 with Inertia.js 2.0, Tailwind CSS 3.2.1, Vite 8.0
Backend API: Laravel 13.x with PHP 8.3+
The Laravel backend uses the following PHP dependencies:
{
"$schema": "https://getcomposer.org/schema.json",
"name": "laravel/laravel",
"type": "project",
"description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"],
"license": "MIT",
"require": {
"php": "^8.3",
"barryvdh/laravel-dompdf": "^3.1",
"inertiajs/inertia-laravel": "^2.0",
"laravel/framework": "^13.8",
"laravel/sanctum": "^4.0",
"laravel/tinker": "^3.0",
"spatie/laravel-permission": "^6.0",
"tightenco/ziggy": "^2.0"
},
"require-dev": {
"fakerphp/faker": "^1.23",
"laravel/breeze": "^2.4",
"laravel/pail": "^1.2.5",
"laravel/pao": "^1.0.6",
"laravel/pint": "^1.27",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.6",
"phpunit/phpunit": "^12.5.12"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"setup": [
"composer install",
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
"@php artisan key:generate",
"@php artisan migrate --force",
"npm install --ignore-scripts",
"npm run build"
],
"dev": [
"Composer\\Config::disableProcessTimeout",
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
],
"test": [
"@php artisan config:clear --ansi @no_additional_args",
"@php artisan test"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi",
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
"@php artisan migrate --graceful --ansi"
],
"pre-package-uninstall": [
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
]
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true,
"allow-plugins": {
"pestphp/pest-plugin": true,
"php-http/discovery": true
}
},
"minimum-stability": "stable",
"prefer-stable": true
}
| Package | Version | Purpose |
|---|---|---|
| Production Dependencies | ||
| php | ^8.3 | Server-side scripting language |
| laravel/framework | ^13.8 | Laravel PHP Framework |
| inertiajs/inertia-laravel | ^2.0 | Inertia.js server-side adapter |
| laravel/sanctum | ^4.0 | API authentication |
| laravel/tinker | ^3.0 | Artisan REPL & interactive shell |
| spatie/laravel-permission | ^6.0 | User roles & permissions management |
| barryvdh/laravel-dompdf | ^3.1 | PDF generation for reports & receipts |
| tightenco/ziggy | ^2.0 | Laravel route generation for JavaScript |
| Development Dependencies | ||
| laravel/breeze | ^2.4 | Authentication scaffolding |
| fakerphp/faker | ^1.23 | Fake data generation for seeding |
| laravel/pail | ^1.2.5 | Log viewer |
| laravel/pao | ^1.0.6 | Package auto-discovery optimizer |
| laravel/pint | ^1.27 | PHP code style fixer |
| mockery/mockery | ^1.6 | Mocking framework for tests |
| nunomaduro/collision | ^8.6 | Error handling for console |
| phpunit/phpunit | ^12.5.12 | PHP testing framework |
Both Website and Admin Panel share the same frontend dependencies:
{
"$schema": "https://www.schemastore.org/package.json",
"private": true,
"type": "module",
"scripts": {
"build": "vite build",
"dev": "vite"
},
"devDependencies": {
"@headlessui/react": "^2.0.0",
"@inertiajs/react": "^2.0.0",
"@tailwindcss/forms": "^0.5.3",
"@vitejs/plugin-react": "^5.0.0",
"autoprefixer": "^10.4.12",
"concurrently": "^9.0.1",
"laravel-vite-plugin": "^3.1",
"postcss": "^8.4.31",
"react": "^19.2.8",
"react-dom": "^19.2.8",
"tailwindcss": "^3.2.1",
"vite": "^8.0.0"
},
"dependencies": {
"axios": "^1.18.1"
}
}
| Package | Version | Purpose |
|---|---|---|
| Core Dependencies | ||
| react | ^19.2.8 | UI Library for building interactive interfaces |
| react-dom | ^19.2.8 | React DOM rendering |
| @inertiajs/react | ^2.0.0 | Inertia.js React adapter for server-side routing |
| axios | ^1.18.1 | HTTP client for API requests |
| Development Dependencies | ||
| vite | ^8.0.0 | Build tool & development server |
| @vitejs/plugin-react | ^5.0.0 | Vite plugin for React |
| laravel-vite-plugin | ^3.1 | Laravel integration for Vite |
| tailwindcss | ^3.2.1 | Utility-first CSS framework |
| @tailwindcss/forms | ^0.5.3 | Tailwind CSS plugin for form styling |
| @headlessui/react | ^2.0.0 | Accessible UI components |
| autoprefixer | ^10.4.12 | CSS vendor prefixing |
| postcss | ^8.4.31 | CSS processing tool |
| concurrently | ^9.0.1 | Run multiple commands concurrently |
Note: All dependencies are open-source packages included with Laravel and React ecosystems. No external subscriptions or third-party services are required.
This guide explains how each public website page works, what data it displays, and where that data comes from in the admin panel.
Purpose: Landing page that introduces the school and encourages visitors to apply.
banners table (Academics → Banners)
facilities table (Academics → Facilities)
faqs table (Support → FAQs)config/branding.php (school name, logo,
tagline)Purpose: Tell the school's story — mission, features, history.
about_sections table (type=feature) →
Support → About Pageabout_sections table (type=history) → Support
→ About Pageabout_sections table (type=content) → Support
→ About Pageconfig/branding.php (school name in text)
Purpose: Online application form for new students.
AdmissionController →
admissions table
AdmissionService → students + parents +
enrollments tablesacademic_years, schools,
classes, sections tables
Purpose: Display the school's teaching staff.
employees table (status=active, with
designations)employees.photo field (or random avatar
fallback)Purpose: Showcase school photos and videos.
gallery_items table (status=active)Purpose: Showcase campus infrastructure and amenities.
facilities table (status=active) →
Academics → Facilitiesconfig/branding.php (school name in CTA)
Purpose: Answer common questions.
faqs table (status=active) → Support → FAQsfaq_categories table → Support → FAQscontact_settings table → Support → Contact
DetailsPurpose: Get in touch form and display contact info.
contact_settings table → Support →
Contact DetailsEnquiryController →
enquiries table (admin views in Support → Enquiries)
Purpose: Display the school's privacy policy.
privacy_policies table
(status=active) → Support → PrivacyPurpose: Admin authentication page.
config/branding.php (logo, name, stats)| Page | Purpose | Data Source | Admin Menu Path |
|---|---|---|---|
| Home | Landing page | Banners, Facilities, FAQs, Stats | Academics → Banners/Facilities Support → FAQs |
| About | School story | About Sections (Features, History, Content) | Support → About Page |
| Admissions | Online application | Students, Classes, Sections, Academic Years | Admission Organisation → Classes/Sections/Acad. Years |
| Faculty | Teaching staff | Employees (active) | Employees → List |
| Gallery | Photos & videos | Gallery Items | Academics → Gallery |
| Facilities | Campus amenities | Facilities (active) | Academics → Facilities |
| FAQ | Common questions | FAQ Categories + FAQs, Contact Settings | Support → FAQs / Contact Details |
| Contact | Contact form & info | Contact Details, Enquiries | Support → Contact Details / Enquiries |
| Privacy | Privacy policy | Privacy Policies | Support → Privacy |
| Admin Login | Admin authentication | Branding config | — |
All public website content is managed from the admin panel. When you add, edit, or delete content in the admin, it automatically reflects on the frontend. No code changes required.
The Admin Panel provides complete control over the ClassKnot school management platform. Below is the detailed menu structure and functionality for managing the platform.
| Menu Section | Sub-Menu Items | Functionality |
|---|---|---|
| Dashboard | ||
| Dashboard | - | View school overview including total students, teachers, employees, fee collections, attendance summary, and key metrics |
| Organisation | ||
| Schools | - | Manage school profiles with name, code, branch, status, location, address, coordinates, contact details, logo, and established year |
| Classes | - | Create and manage classes with school association, name, capacity, and status |
| Sections | - | Manage sections under classes with school and class association, section name, and status |
| Designations | - | Create and manage employee designations with school association, designation name, and status |
| Academic Years | - | Manage academic years with name, code, start/end date, status, and ability to set current academic year |
| Admission | ||
| Student | List, Enrollment | Manage student list with profiles, enrollments, class/section assignment, and student status tracking |
| Fees | ||
| Fee Heads | - | Create fee heads with name, code, category, frequency, and status |
| Structures | - | Define fee structures for academic years with school and class association |
| Assignments | - | Assign fees to enrollments with fee head, amount, discount, and payment frequency |
| Payments | - | Track student payments with date, method, remarks, and payment status |
| Teacher | ||
| Subjects | - | Create and manage subjects with school, category, code, and name |
| Allocations | - | Allocate subjects to teachers with academic year, employee, subject, class, section, and class teacher toggle |
| Timetables | - | Create timetables with academic year, day, period, subject, teacher, class, section, start/end time, and effective dates |
| Lesson Plans | - | Create lesson plans with academic year, teacher, class, section, subject, date, period, title, chapter, topic, teaching method, progress, teaching materials, status, and remarks |
| Employees | ||
| List | - | Manage employee list with profile photo, name, academic year, school, designation, from/to date, and status |
| Attendance | - | Track employee attendance with date, status, check-in, check-out, and remarks |
| Leave | - | Manage employee leave requests with leave type, from/to date, reason, status, and approval |
| Parents | ||
| Parents | - | Manage parent profiles with father/mother name, mobile, email, username, password, address, and status |
| Users | ||
| Users | - | Manage system users with user, email, role, and joined date. Currently supports Super Admin with role-based permissions coming in future updates |
| Roles | ||
| Roles & Permissions | - | Configure roles and permissions. Currently Super Admin configured with all permissions. Additional roles (Admin, Teacher, Accountant, Parent, Student) coming in future updates |
| Academics | ||
| Banners | - | Manage hero slider banners with quotes, background image, and sort order for homepage display |
| Gallery | - | Manage image gallery with image, title, category, and sort order for public display |
| Facilities | - | Create and manage school facilities with title, description, image, and sort order |
| Code Masters | ||
| Code Masters | - | Manage lookup values across 14 categories. Create slug categories with code values and enable/disable toggle. Currently 57 values configured |
| Support | ||
| Subscribers | - | View newsletter subscribers with email, status, subscribed date, and actions |
| FAQs | - | Manage frequently asked questions with category, featured toggle, question, and answer |
| Privacy | - | Manage privacy policy content with title, content, and sort order |
| Contact Details | - | Manage website contact information including email, phone, location, office address, social links (Facebook, Twitter, Instagram, LinkedIn), and Google Maps embed |
| Enquiries | - | View and manage contact form submissions with first name, last name, email, phone, subject, message, status, and actions |
http://yourdomain.com/admin
Default Credentials:
admin@gmail.com / admin
This application requires PHP 8.3. Please ensure you have the correct version installed before proceeding.
php --version # Should show PHP 8.3.x
The complete project structure for the ClassKnot school management platform, including both backend (Laravel) and frontend (React + Inertia) components.
classknot/
├── AGENTS.md
├── README.md
├── artisan
├── composer.json
├── composer.lock
├── jsconfig.json
├── package.json
├── package-lock.json
├── phpunit.xml
├── postcss.config.js
├── tailwind.config.js
├── vite.config.js
├── .editorconfig
├── .env
├── .env.example
├── .npmrc
│
├── app/
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Admin/ ← 40+ Admin Controllers
│ │ │ │ ├── AcademicYearController.php
│ │ │ │ ├── AdmissionController.php
│ │ │ │ ├── BannerController.php
│ │ │ │ ├── CodeMasterController.php
│ │ │ │ ├── CodeSlugController.php
│ │ │ │ ├── ContactSettingController.php
│ │ │ │ ├── DesignationController.php
│ │ │ │ ├── EmployeeAttendanceController.php
│ │ │ │ ├── EmployeeController.php
│ │ │ │ ├── EmployeeLeaveRequestController.php
│ │ │ │ ├── EnquiryController.php
│ │ │ │ ├── EnrollmentController.php
│ │ │ │ ├── EventController.php
│ │ │ │ ├── FacilityController.php
│ │ │ │ ├── FaqCategoryController.php
│ │ │ │ ├── FaqController.php
│ │ │ │ ├── FeeHeadController.php
│ │ │ │ ├── FeePaymentController.php
│ │ │ │ ├── FeeStructureController.php
│ │ │ │ ├── GalleryController.php
│ │ │ │ ├── LessonPlanController.php
│ │ │ │ ├── ParentGuardianController.php
│ │ │ │ ├── PrivacyPolicyController.php
│ │ │ │ ├── RoleController.php
│ │ │ │ ├── SchoolController.php
│ │ │ │ ├── SectionController.php
│ │ │ │ ├── StudentController.php
│ │ │ │ ├── StudentFeeAssignmentController.php
│ │ │ │ ├── StudentHistoryController.php
│ │ │ │ ├── SubscriberController.php
│ │ │ │ ├── TeacherSubjectAllocationController.php
│ │ │ │ ├── TimetableController.php
│ │ │ │ └── UserController.php
│ │ │ ├── Auth/ ← 9 Auth Controllers
│ │ │ │ ├── AuthenticatedSessionController.php
│ │ │ │ ├── ConfirmablePasswordController.php
│ │ │ │ ├── EmailVerificationNotificationController.php
│ │ │ │ ├── EmailVerificationPromptController.php
│ │ │ │ ├── NewPasswordController.php
│ │ │ │ ├── PasswordController.php
│ │ │ │ ├── PasswordResetLinkController.php
│ │ │ │ ├── RegisteredUserController.php
│ │ │ │ └── VerifyEmailController.php
│ │ │ ├── Public/ ← 4 Public Controllers
│ │ │ │ ├── AdmissionController.php
│ │ │ │ ├── ApplicationDownloadController.php
│ │ │ │ ├── EnquiryController.php
│ │ │ │ └── SubscribeController.php
│ │ │ ├── School/ ← 7 School Controllers
│ │ │ │ ├── AttendanceController.php
│ │ │ │ ├── ClassController.php
│ │ │ │ ├── CommunicationController.php
│ │ │ │ ├── DashboardController.php
│ │ │ │ ├── GradeController.php
│ │ │ │ ├── ScheduleController.php
│ │ │ │ ├── SubjectController.php
│ │ │ │ └── TeacherController.php
│ │ │ ├── Controller.php
│ │ │ └── ProfileController.php
│ │ ├── Middleware/
│ │ │ ├── Admin.php
│ │ │ ├── CheckPermission.php
│ │ │ └── HandleInertiaRequests.php
│ │ └── Requests/
│ │ ├── Auth/
│ │ │ └── LoginRequest.php
│ │ └── ProfileUpdateRequest.php
│ ├── Models/ ← 47 Eloquent Models
│ │ ├── AcademicYear.php
│ │ ├── Admission.php
│ │ ├── Attendance.php
│ │ ├── Banner.php
│ │ ├── Classe.php
│ │ ├── CodeMaster.php
│ │ ├── CodeSlug.php
│ │ ├── Communication.php
│ │ ├── ContactSetting.php
│ │ ├── Designation.php
│ │ ├── Employee.php
│ │ ├── EmployeeAttendance.php
│ │ ├── EmployeeLeaveRequest.php
│ │ ├── Enquiry.php
│ │ ├── Enrollment.php
│ │ ├── Event.php
│ │ ├── Facility.php
│ │ ├── Faq.php
│ │ ├── FaqCategory.php
│ │ ├── FeeHead.php
│ │ ├── FeePayment.php
│ │ ├── FeePaymentDetail.php
│ │ ├── FeeStructure.php
│ │ ├── FeeStructureItem.php
│ │ ├── Gallery.php
│ │ ├── Grade.php
│ │ ├── LessonPlan.php
│ │ ├── LessonPlanAttachment.php
│ │ ├── LessonPlanProgress.php
│ │ ├── Notification.php
│ │ ├── ParentGuardian.php
│ │ ├── PrivacyPolicy.php
│ │ ├── PrivacyPolicyVersion.php
│ │ ├── Schedule.php
│ │ ├── School.php
│ │ ├── Section.php
│ │ ├── Student.php
│ │ ├── StudentFeeAssignment.php
│ │ ├── StudentFeeInstallment.php
│ │ ├── StudentHistory.php
│ │ ├── Subject.php
│ │ ├── Subscriber.php
│ │ ├── Teacher.php
│ │ ├── TeacherSubjectAllocation.php
│ │ ├── Timetable.php
│ │ └── User.php
│ ├── Policies/ (empty)
│ └── Providers/
│ └── AppServiceProvider.php
│
├── bootstrap/
│ ├── app.php
│ └── providers.php
│
├── config/ ← 10 Configuration Files
│ ├── app.php
│ ├── auth.php
│ ├── cache.php
│ ├── database.php
│ ├── filesystems.php
│ ├── logging.php
│ ├── mail.php
│ ├── queue.php
│ ├── services.php
│ └── session.php
│
├── database/
│ ├── .gitignore
│ ├── database.sqlite
│ ├── factories/ ← 10 Factories
│ │ ├── AttendanceFactory.php
│ │ ├── ClasseFactory.php
│ │ ├── CommunicationFactory.php
│ │ ├── FeeFactory.php
│ │ ├── GradeFactory.php
│ │ ├── ScheduleFactory.php
│ │ ├── StudentFactory.php
│ │ ├── SubjectFactory.php
│ │ ├── TeacherFactory.php
│ │ └── UserFactory.php
│ ├── migrations/
│ └── seeders/
│
├── lang/
│
├── public/
│ ├── .htaccess
│ ├── index.php
│ ├── robots.txt
│ ├── build/ ← Vite Build Output
│ │ └── manifest.json
│ ├── css/
│ ├── images/
│ │ ├── logo.webp
│ │ └── logo_icon.webp
│ ├── js/
│ └── storage -> storage/app/public (symlink)
│
├── resources/
│ ├── css/
│ │ └── app.css
│ └── js/
│ ├── app.jsx ← Inertia Entry Point
│ ├── bootstrap.js
│ ├── Components/ ← 14 Reusable Components
│ │ ├── ApplicationLogo.jsx
│ │ ├── Checkbox.jsx
│ │ ├── DangerButton.jsx
│ │ ├── DataTable.jsx
│ │ ├── Dropdown.jsx
│ │ ├── HeroSlider.jsx
│ │ ├── InputError.jsx
│ │ ├── InputLabel.jsx
│ │ ├── Modal.jsx
│ │ ├── NavLink.jsx
│ │ ├── PrimaryButton.jsx
│ │ ├── ResponsiveNavLink.jsx
│ │ ├── SecondaryButton.jsx
│ │ └── TextInput.jsx
│ ├── hooks/
│ │ └── useScrollReveal.jsx
│ ├── Layouts/ ← 4 Layout Components
│ │ ├── AdminLayout.jsx
│ │ ├── AuthenticatedLayout.jsx
│ │ ├── GuestLayout.jsx
│ │ └── UserLayout.jsx
│ └── Pages/
│ ├── Dashboard.jsx
│ ├── Welcome.jsx
│ ├── Admin/ ← 40+ Admin Pages
│ │ ├── Dashboard.jsx
│ │ ├── AcademicYears/Index.jsx
│ │ ├── Admissions/Index.jsx
│ │ ├── Attendance/Index.jsx
│ │ ├── Banners/Index.jsx
│ │ ├── Classes/Index.jsx
│ │ ├── CodeMasters/Index.jsx
│ │ ├── CodeSlugs/{Index, Masters}.jsx
│ │ ├── Communications/Index.jsx
│ │ ├── ContactSettings/Index.jsx
│ │ ├── Designations/Index.jsx
│ │ ├── EmployeeAttendances/Index.jsx
│ │ ├── EmployeeLeaveRequests/Index.jsx
│ │ ├── Employees/Index.jsx
│ │ ├── Enquiries/Index.jsx
│ │ ├── Enrollments/Index.jsx
│ │ ├── Facilities/Index.jsx
│ │ ├── Faqs/{Index, Categories}.jsx
│ │ ├── FeeHeads/Index.jsx
│ │ ├── FeePayments/{Index, Create}.jsx
│ │ ├── FeeStructures/Index.jsx
│ │ ├── Galleries/Index.jsx
│ │ ├── Grades/Index.jsx
│ │ ├── LessonPlans/Index.jsx
│ │ ├── Parents/Index.jsx
│ │ ├── Privacy/Index.jsx
│ │ ├── Roles/{Index, Create, Edit}.jsx
│ │ ├── Schedule/Index.jsx
│ │ ├── Schools/{Index, Create, Edit}.jsx
│ │ ├── Sections/Index.jsx
│ │ ├── StudentFeeAssignments/Index.jsx
│ │ ├── StudentHistory/Index.jsx
│ │ ├── Students/{Index, Profile, IdProof}.jsx
│ │ ├── Subjects/Index.jsx
│ │ ├── Subscribers/Index.jsx
│ │ ├── Teachers/Index.jsx
│ │ ├── TeacherSubjectAllocations/Index.jsx
│ │ ├── Timetables/Index.jsx
│ │ └── Users/{Index, Create, Edit}.jsx
│ ├── Auth/ ← 6 Auth Pages
│ │ ├── ConfirmPassword.jsx
│ │ ├── ForgotPassword.jsx
│ │ ├── Login.jsx
│ │ ├── Register.jsx
│ │ ├── ResetPassword.jsx
│ │ └── VerifyEmail.jsx
│ ├── Parent/
│ │ └── Dashboard.jsx
│ ├── Profile/
│ │ ├── Edit.jsx
│ │ └── Partials/
│ │ ├── DeleteUserForm.jsx
│ │ ├── UpdatePasswordForm.jsx
│ │ └── UpdateProfileInformationForm.jsx
│ ├── Public/ ← 11 Public Pages
│ │ ├── About.jsx
│ │ ├── Academics.jsx
│ │ ├── Admissions.jsx
│ │ ├── Contact.jsx
│ │ ├── Events.jsx
│ │ ├── Facilities.jsx
│ │ ├── Faculty.jsx
│ │ ├── FAQ.jsx
│ │ ├── Gallery.jsx
│ │ ├── Home.jsx
│ │ └── Privacy.jsx
│ └── Student/
│ └── Dashboard.jsx
│ └── views/
│ ├── app.blade.php
│ └── pdfs/
│ └── application-form.blade.php
│
├── routes/
│ ├── auth.php
│ ├── console.php
│ └── web.php
│
├── storage/
│ ├── app/
│ │ ├── .gitignore
│ │ ├── private/
│ │ └── public/
│ └── pail/
│
├── tests/
│ ├── TestCase.php
│ ├── Feature/
│ │ ├── ExampleTest.php
│ │ ├── ProfileTest.php
│ │ └── Auth/
│ │ ├── AuthenticationTest.php
│ │ ├── EmailVerificationTest.php
│ │ ├── PasswordConfirmationTest.php
│ │ ├── PasswordResetTest.php
│ │ ├── PasswordUpdateTest.php
│ │ └── RegistrationTest.php
│ └── Unit/
│ └── ExampleTest.php
Note: This is a combined product where both the Admin Panel and Public Website share the same codebase. The project uses a dual guard authentication system for admin and users.
Set up the Laravel backend and React frontend for both Admin Panel and Public Website
Download the source files from CodeCanyon and extract them to your working directory.
Copy the extracted folder and paste it inside XAMPP → htdocs.
Navigate to your project folder:
cd C:\xampp\htdocs\schoolmanagement
Copy the example environment file and configure your database credentials:
cp .env.example .env
Update your .env file with
your database credentials:
APP_NAME=your_application_name
APP_ENV=local
APP_DEBUG=true
APP_URL=http://your-domain.com
DB_CONNECTION=mysql
DB_HOST=your_database_host
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_database_username
DB_PASSWORD=your_database_password
SESSION_DRIVER=database
QUEUE_CONNECTION=database
CACHE_STORE=database
Run the following command to install all PHP dependencies:
composer install
Run the following command to install all JavaScript dependencies:
npm install --legacy-peer-deps
--legacy-peer-deps flag
is required for compatibility with certain packages.
Run the following command to generate a unique application key:
php artisan key:generate
Open config/app.php
and update the timezone based on your region:
'timezone' => env('APP_TIMEZONE', 'Asia/Kolkata'),
You can also set the timezone in your .env file:
APP_TIMEZONE=Asia/Kolkata
Asia/Kolkata
— India Standard Time (IST)America/New_York
— Eastern Time (ET)America/Los_Angeles
— Pacific Time (PT)Europe/London
— Greenwich Mean Time (GMT)Europe/Paris
— Central European Time (CET)Australia/Sydney
— Australian Eastern Time (AET)Asia/Dubai
— Gulf Standard Time (GST)Asia/Singapore
— Singapore Time (SGT)Run the following command to create the database tables and seed default data:
php artisan migrate --seed
--seed flag will create
default roles, permissions, and an admin user.
Run the following command to build the React frontend assets:
npm run build
Run the following command to start the Laravel development server:
php artisan serve
The application runs at http://localhost:8000
The complete .env file configuration
for the ClassKnot application:
# ------------------------------------------------------------------
# Application Settings
# ------------------------------------------------------------------
APP_NAME=your_application_name
APP_ENV=local
APP_KEY=generate_using_php_artisan_key_generate
APP_DEBUG=true
APP_URL=http://your-domain.com
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
# PHP_CLI_SERVER_WORKERS=4
# ------------------------------------------------------------------
# Security
# ------------------------------------------------------------------
BCRYPT_ROUNDS=12
# ------------------------------------------------------------------
# Logging
# ------------------------------------------------------------------
LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
# ------------------------------------------------------------------
# Database Configuration
# ------------------------------------------------------------------
DB_CONNECTION=mysql
DB_HOST=your_database_host
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_database_username
DB_PASSWORD=your_database_password
# ------------------------------------------------------------------
# Session Configuration
# ------------------------------------------------------------------
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
# ------------------------------------------------------------------
# Broadcasting / Storage / Queue
# ------------------------------------------------------------------
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
# ------------------------------------------------------------------
# Cache
# ------------------------------------------------------------------
CACHE_STORE=database
# CACHE_PREFIX=
# ------------------------------------------------------------------
# Memcached
# ------------------------------------------------------------------
MEMCACHED_HOST=127.0.0.1
# ------------------------------------------------------------------
# Redis
# ------------------------------------------------------------------
REDIS_CLIENT=phpredis
REDIS_HOST=your_redis_host
REDIS_PASSWORD=your_redis_password
REDIS_PORT=6379
# ------------------------------------------------------------------
# Mail Configuration
# ------------------------------------------------------------------
MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=your_smtp_host
MAIL_PORT=587
MAIL_USERNAME=your_smtp_username
MAIL_PASSWORD=your_smtp_password
MAIL_FROM_ADDRESS=your_email@example.com
MAIL_FROM_NAME="${APP_NAME}"
# ------------------------------------------------------------------
# AWS S3 Storage (Optional)
# ------------------------------------------------------------------
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_DEFAULT_REGION=your_aws_region
AWS_BUCKET=your_bucket_name
AWS_USE_PATH_STYLE_ENDPOINT=false
# ------------------------------------------------------------------
# Frontend
# ------------------------------------------------------------------
VITE_APP_NAME="${APP_NAME}"
DB_DATABASE,
DB_USERNAME,
and DB_PASSWORD
with your actual database credentials
SESSION_DRIVER,
QUEUE_CONNECTION,
and CACHE_STORE
are set to database for better performance
Run these commands in sequence to set up the application:
# 1. Copy environment file
cp .env.example .env
# 2. Configure database credentials in .env file
# DB_DATABASE=schoolmanagement
# DB_USERNAME=root
# DB_PASSWORD=
# 3. Install PHP dependencies
composer install
# 4. Install Node dependencies
npm install --legacy-peer-deps
# 5. Generate application key
php artisan key:generate
# 6. Run migrations and seeders
php artisan migrate --seed
# 7. Build frontend assets
npm run build
# 8. Start the application
php artisan serve
# Application runs at: http://localhost:8000
# Admin Panel: http://localhost:8000/admin
Use these default credentials to log in to the admin panel:
| Email: | admin@gmail.com |
| Password: | password |
| Access Level: | Super Administrator |
Security Alert: Change these credentials immediately after first login.
Access the admin dashboard:
http://localhost:8000/admin
Access the public-facing website:
http://localhost:8000
.env file
exists and is properly configuredphp artisan config:clear
after modifying .envAPP_URL
matches your application URL (http://localhost:8000)SESSION_DRIVER,
QUEUE_CONNECTION,
and CACHE_STORE
are set to database
.env
(DB_DATABASE, DB_USERNAME, DB_PASSWORD)php artisan migrate:fresh --seed
to reset databasephp artisan storage:link
to create the symbolic linkstorage
directory has write permissionsphp artisan optimize:clear
node -v)
npm install --legacy-peer-deps
for compatibilitynode_modules
and package-lock.json, then run npm install --legacy-peer-deps
againnpm run build
to rebuild assetsphp artisan optimize:clear
to clear all cachesphp artisan optimize
to optimize the applicationphp artisan serve
http://localhost:8000/admin
php artisan tinker
→ User::where('email', 'admin@school.com')->first()php artisan db:seed --class=AdminUserSeeder
php artisan shield:generate --all --option=permissions
All public website content is managed dynamically from the Admin Panel. Any changes made in the admin are instantly reflected on the frontend website without any code changes. This guide explains how each section of the public website is controlled through the admin panel.
Layout: Full-width hero → stats → facilities → FAQ → CTA → footer
Home Page — Dynamic content from banners, facilities, FAQs, and stats
banners table (admin uploads
images + text)
Student::count(), Teacher::count(),
Classe::count()
facilities table (active
status, limited to 3 items)
faqs table (active status,
limited to 6)
contactSettings + branding
config
/admin/banners)/admin/facilities)
/admin/faqs)/admin/contact-settings)Layout: Banner → who we are → feature cards → history timeline → CTA
About Page — Dynamic content from about_sections (features, history, content)
about_sections table (type =
content)
about_sections table (type =
feature)
about_sections table (type =
history)
config/branding.php
/admin/about-sections)config/branding.php)
about_sections table (type = feature)
about_sections table (type = history)
about_sections table (type = content)
Layout: Banner → steps info → application form
Admissions Page — Application form with dynamic dropdowns from classes, sections, and academic years
students,
classes, sections, academicYears
AdmissionController →
AdmissionService
/admin/admissions)/admin/classes)/admin/sections)
/admin/academic-years)/admin/schools)Layout: Banner → faculty grid → CTA
Faculty Page — Dynamic grid of active employees with photos and designations
employees table (active
status, eager-loaded with designations)
/admin/employees)/admin/designations)Layout: Banner → category tabs → image grid → load more
Gallery Page — Dynamic image grid with category filters and lightbox
galleryItems table (active
status)
/admin/galleries)Layout: Banner → stats bar → facility cards → CTA
Facilities Page — Dynamic facility cards with auto-detected icons
branding.stats from
config
facilities table (active
status)
/admin/facilities)
Layout: Banner → search → category tabs → accordion
FAQ Page — Dynamic FAQs with category tabs and search filter
faq_categories table
faqs table (active, with
category)
contactSettings
/admin/faqs)/admin/contact-settings)Layout: Banner → contact info + form
Contact Page — Dynamic contact info from contactSettings and enquiry form
contactSettings table
EnquiryController →
creates enquiry
flash.success
/admin/contact-settings)/admin/enquiries)Layout: Banner → table of contents → content sections
Privacy Page — Dynamic privacy policy sections from privacy_policies table
privacy_policies table (sorted
by sort_order)
privacy_policies table
/admin/privacy)| Page | Dynamic Data Source | Admin Menu Path | Data Type |
|---|---|---|---|
| Home | Banners, Facilities (3), FAQs (6), Stats | Academics → Banners / Facilities Support → FAQs |
Dynamic |
| About | Features, History, Content Sections | Support → About Page (/admin/about-sections) |
Dynamic |
| Admissions | Students, Classes, Sections, Academic Years | Admission Organisation → Classes/Sections/Acad. Years |
Dynamic |
| Faculty | Employees (active status) | Employees → List | Dynamic |
| Gallery | Gallery Items | Academics → Gallery | Dynamic |
| Facilities | Facilities (active status) | Academics → Facilities | Dynamic |
| FAQ | FAQ Categories + FAQs, Contact Settings | Support → FAQs / Contact Details | Dynamic |
| Contact | Contact Details, Enquiries | Support → Contact Details / Enquiries | Dynamic |
| Privacy | Privacy Policies | Support → Privacy | Dynamic |
Everything shown on the public website is managed from the admin panel. When you add, edit, or delete content in the admin, it automatically reflects on the frontend. No code changes are required for content management.
Cause: Missing or outdated Node.js/PHP version, unstable internet connection, or running commands from the wrong directory.
Solution:
npm install --legacy-peer-deps
composer install
rm -rf node_modules package-lock.json
npm install --legacy-peer-deps
Cause: Missing dependencies, incorrect import paths, or incomplete project extraction.
Solution:
resources/js/ files.npm install --legacy-peer-deps
npm run build
Cause: Missing or incomplete environment
configuration in .env file.
Solution:
.env.example to .env.APP_URL=http://localhost:8000
DB_DATABASE=your_application_name
DB_USERNAME=root
DB_PASSWORD=
MAIL_HOST=smtp.gmail.com
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_app_password
php artisan optimize:clear after updating .env.Cause: Missing configuration, incorrect .env values, or database connection issues.
Solution:
.env configuration is complete.php artisan optimize:clear.php artisan optimize.php artisan serve.storage/logs/laravel.log.Cause: Missing required fields, class/section not set up, or permission issues.
Solution:
Cause: Academic year, class, or section not properly configured.
Solution:
Cause: Fee heads, structures, or assignments not configured correctly.
Solution:
Cause: Subjects not allocated, teacher not assigned, or timetable not created.
Solution:
Cause: Employee not assigned to school or attendance module not configured.
Solution:
Cause: Parent not created or not linked during student admission.
Solution:
Cause: PHP version mismatch, missing dependencies, or permission issues.
Solution:
composer install to install all dependencies.php artisan key:generate.php artisan migrate --seed.storage and bootstrap/cache.
storage/logs/laravel.log.Cause: Incorrect credentials or admin user not created.
Solution:
admin@school.com / password.php artisan db:seed --class=AdminUserSeeder.php artisan tinker.APP_URL in .env matches your domain.Cause: Permissions not generated or assigned correctly.
Solution:
php artisan shield:generate --all --option=permissions.php artisan optimize:clear.Cause: MySQL service not running or incorrect credentials.
Solution:
.env database settings:DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=classknot
DB_USERNAME=root
DB_PASSWORD=
php artisan migrate --seed to create tables.Cause: Existing tables or migration conflicts.
Solution:
php artisan db:wipe.php artisan migrate --seed.storage/logs/laravel.log.
Cause: Symbolic link not created or storage permissions.
Solution:
php artisan storage:link to create symbolic link.storage directory has write permissions.APP_URL in .env is correct for asset paths.FILESYSTEM_DISK is set to public.If you encounter any issues that are not covered in this documentation, please contact our support team.
Monday – Friday
Response Time: Within 24–48 Business Hours
This will help us provide faster and more accurate assistance.
composer install — Install PHP dependenciesphp artisan key:generate — Generate app keyphp artisan migrate --seed — Run migrations with seedersphp artisan optimize:clear — Clear all cachephp artisan optimize — Optimize applicationphp artisan serve — Start Laravel serverphp artisan config:clear — Clear config cachephp artisan cache:clear — Clear application cachephp artisan route:clear — Clear route cachephp artisan view:clear — Clear view cachephp artisan storage:link — Create storage symbolic linknpm install --legacy-peer-deps — Install Node dependenciesnpm run build — Build for productionrm -rf node_modules — Remove dependencies (reinstall)php artisan migrate:fresh --seed — Fresh migration with seeders
php artisan db:wipe — Drop all tablesphp artisan tinker — Interactive REPLTrack all updates, improvements, and fixes for the Classknot classified School Management platform.
If you encounter an error that is not listed above, please feel free to contact our support team for further assistance. We’re here to help.
If you need any custom work, additional features, or modifications to this application, our team is ready to help you build and scale your project efficiently.
Custom feature development based on your business needs
UI/UX design improvements and branding customization
Third-party API integrations (payment, SMS, maps, etc.)
Performance optimization and scalability improvements
Full project setup and deployment assistance
Building large-scale applications from scratch
You can hire our development team for complete project development, from idea to deployment, including frontend, backend, and server setup.
+91 9150 441 443
sales@menpanitech.com
Custom development services may involve additional cost and timeline depending on the scope and complexity of the project.
We’re happy to collaborate and bring your ideas to life