A full-stack IT support ticket management system built with Laravel 12, Inertia.js, Vue 3, and TypeScript.
- Create tickets with subject, description, and priority
- Upload photo attachments (JPG/PNG/GIF, max 2MB)
- Track status: Open → In Progress → Resolved → Closed
- Set priority levels: Low, Medium, High
- Add comments for collaboration
- Students - Create and view their own tickets
- Faculty - Create tickets and manage assigned tickets
- Admins - Full access to all tickets and user management
- Search and filter tickets by subject, description, creator, status, or priority
- Smart sorting with high priority tickets first and closed tickets at the bottom
- Real-time updates
- Dark mode support
- Responsive design for desktop, tablet, and mobile
- Laravel Sanctum for SPA authentication
- Policy-based authorization
- CSRF protection
- Secure session management
- PHP 8.2 or higher
- Composer
- Node.js 18 or higher
- SQLite (or MySQL/PostgreSQL)
- Clone the repository
git clone https://github.com/elijaspen/tech-ticket-sys.git
cd tech-ticket-system- Install PHP dependencies
composer install- Install Node dependencies
npm install- Setup environment
cp .env.example .env
php artisan key:generate- Create database
touch database/database.sqlite- Run migrations
php artisan migrate- Seed database (needed for admin)
php artisan db:seed- Create storage link
php artisan storage:link- Build frontend assets
npm run build- Start development server
php artisan serveVisit http://127.0.0.1:8000
For hot module replacement during development:
# Terminal 1: Start Vite dev server
npm run dev
# Terminal 2: Start Laravel server
php artisan serveScreenshots will be added by the team.
- Laravel 12 - PHP Framework
- Laravel Sanctum - API Authentication
- SQLite - Database (easily switchable to MySQL/PostgreSQL)
- Vue 3 - Progressive JavaScript Framework
- TypeScript - Type-safe JavaScript
- Inertia.js - Modern monolith
- Tailwind CSS - Utility-first CSS
- shadcn/ui - Component library
- Lucide Icons - Icon set
- Vite - Fast build tool
- ESLint - Code linting
- Create tickets
- View own tickets
- Add comments
- Edit priority while ticket is Open
- Cannot delete tickets
- Cannot change status
- All Student permissions
- View assigned tickets
- Change ticket status for assigned tickets
- Manage assigned tickets
- Full access to all tickets
- Manage user roles
- Delete tickets
- Change any ticket status or priority
- Assign tickets to faculty
tech-ticket-system/
├── app/
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── TicketController.php
│ │ │ ├── CommentController.php
│ │ │ └── AdminUserController.php
│ │ └── Middleware/
│ │ └── AdminOnly.php
│ ├── Models/
│ │ ├── User.php
│ │ ├── Ticket.php
│ │ └── Comment.php
│ └── Policies/
│ └── TicketPolicy.php
├── resources/
│ ├── js/
│ │ ├── components/
│ │ ├── layouts/
│ │ ├── pages/
│ │ │ ├── Dashboard.vue
│ │ │ ├── Tickets/
│ │ │ ├── Admin/
│ │ │ └── auth/
│ │ └── app.ts
│ └── css/
│ └── app.css
├── routes/
│ ├── web.php
│ └── api.php
└── database/
├── migrations/
└── seeders/
Edit .env to change database:
DB_CONNECTION=sqlite
# Or use MySQL:
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=tech_ticket
# DB_USERNAME=root
# DB_PASSWORD=Files are stored in storage/app/public/tickets/ Maximum file size: 2MB
For deployment, update:
SESSION_DOMAIN=your-domain.com
SANCTUM_STATEFUL_DOMAINS=your-domain.com- Start your Laravel server
php artisan serve- In another terminal, start ngrok
ngrok http 8000- Update your .env
APP_URL=https://your-ngrok-url.ngrok.io
SESSION_DOMAIN=your-ngrok-url.ngrok.io
SANCTUM_STATEFUL_DOMAINS=your-ngrok-url.ngrok.io- Clear cache
php artisan config:clear
php artisan cache:clearSee Laravel Deployment Documentation for production deployment options:
- Laravel Forge - Automated deployment
- DigitalOcean - VPS hosting
- Heroku - Platform as a Service
- AWS - Enterprise cloud
php artisan testThis project is created for educational purposes as a final project.
- [Eli Jaspen Faderguya] - Full Stack Developer
- [Ralph Louise Seguera] - UI/UX Designer & Front-End Developer
- [Kristen Modesto] - Product Manager
- [Marc Joseff Umiten] - QA(Quality Assurance) & DevOps
- [Hezane Kate Agustin] - Documentation & Technical Writer
- [Artaxerxes Garcia] - Technical Analyst & Support
- Built with Laravel 12
- UI Components from shadcn/ui
- Icons from Lucide
- Powered by Inertia.js
For issues or questions, please open a GitHub issue.