About this software
About Supportdesk
SupportDesk is a complete helpdesk built for IT support and maintenance-contract companies that promise response and resolution times in their contracts. Tickets run against live SLA clocks (24/7 or business-hours), escalate across three support levels with skill-based auto-assignment, and a Claude AI assistant answers customer questions from your knowledge base before creating tickets. Customers raise and track tickets through a portal, agents work from a dashboard with SLA-sorted queues, and admins see reports proving SLA compliance. Runs on shared hosting with one cron job—no Node, Redis or Supervisor required.
Why Supportdesk
What makes it better
than the alternatives
- 01
Live SLA clocks per ticket
First-response and resolution timers pause when waiting on customer, breach alerts sent before deadlines
- 02
Three support levels with automatic escalation
Skill-based assignment, transfer with reason, escalates at configurable SLA percentages, out-of-office backups
- 03
Claude AI assistant with knowledge base
Answers from help articles, uploaded PDFs/Word/text, websites and custom answers; hands over as ticket when stuck
- 04
Contract-based service plans
Premium/Standard/Basic plans with different SLA targets and monthly support hours, renewals tracked
- 05
Single-cron deployment
Runs on cPanel shared hosting with database queue/cache/sessions, no build step, no Redis, no Supervisor
Ticketing & SLA Engine
- First-response and resolution clocks per ticket with live countdown
- 24/7 or business-hours targets with public holidays (BusinessHours
- SlaClock
- SlaMonitor classes)
- Clocks pause while status is 'waiting on customer'
- At-risk warnings and breach alerts via StaffAlert notifications and TemplateMail
- SLA snapshot stored per ticket for audit trail
- Bulk actions: assign
- transfer
- close
- delete with reasons
Three Support Levels
L1/L2/L3levels with skill-based auto-assignment (AgentRouter picks by category skill- online status
- working hours
- fewest open tickets)
- Transfer between agents with reason logged in TicketJournal
- Escalate up levels with reason (TicketRouting)
- Automatic escalation at configurable SLA percentages (SlaMonitor)
- Out-of-office status with backup agent redirect
- Level-specific roles: level-1
- level-2
- level-3
- team-lead (RolesAndPermissionsSeeder)
Customer Portal
- Raise tickets with attachments (AttachmentStore outside
public/ - View and reply to own tickets
- Resolve
- reopen and rate tickets (CSAT 1-5 stars)
- Company admins see all company tickets and invite colleagues (Inviter service)
- Public help center with live article search (ArticleSearch)
- Registration with email verification or invitation-only mode
Agent Workspace
- Dashboard with KPIs: open tickets
- SLA at risk
- average response/resolution
- rating (DashboardController)
- Ticket queues sorted by SLA urgency (index view with filters)
- Internal notes and canned replies (CannedReplySeeder)
- Time logging per ticket (TimeEntry model)
- Customer profiles with ticket history and contract details
- Real-time presence tracking (TrackPresence middleware
- is_online flag)
AI Assistant (Claude)
- Answers from help articles
- uploaded
PDF/Word/textfiles - websites and custom answers (Assistant
- KnowledgeSearch)
- Chunking and vector-like search via embeddings (Chunker
- Indexer with chunks table)
- Hands over as ticket when can't answer (ChatOutcome enum: Answered
- Ticket
- Abandoned)
- Draft with AI for agents (ReplyDrafter)
- Works without API key using article answers only
- Configurable tone (friendly/formal)
- instructions
- model selection (claude-3-5-sonnet-20241022
- claude-3-5-haiku-20241022)
- Test panel in admin (AssistantSettingsController::ask)
- Embeddable chat widget with localStorage continuation (chat-widget.blade.php
- app.js)
Knowledge Hub
- Upload PDF
- Word
- text
- CSV files (TextExtractor with smalot/pdfparser
- phpoffice/phpword)
- Index websites (WebsiteFetcher with Guzzle)
- Built-in sources: help articles and resolved tickets (KnowledgeSource type: articles
- tickets)
- Custom Q&A pairs (CustomAnswer model)
- Toggle sources active/inactive
- reindex on demand (IndexKnowledgeSource job)
- Chunk count and status tracking per source
Contracts & Plans
- Premium
- Standard
- Basic plans with SLA targets and monthly hours (Plan
- SlaTarget models)
- Contract per company with start/end dates
- status (Contract model)
- Monthly hours tracking with usage warnings at 85%
- Renewals (renew method adds one year)
- Plan changes apply SLA to new tickets only
- Reports show hours used per company
Administration
- Roles and permission matrix (14 permissions across 4 groups: Tickets
- Knowledge
- Reports
- Administration)
- Agent management with levels
- skills
- online/away status (AgentController)
- Email templates with {fields} and preview (EmailTemplateController
- TemplateMail)
- Audit log with search
- filter by person
- CSV export (AuditLog model
- AuditLogController)
- Settings: company name
- timezone
- password min length
- notify.* switches (Setting model with encrypted storage)
- SLA policies editor (SlaPolicyController)
Reports & Analytics
- KPIs: tickets received
- avg response/resolution
- SLA met %
- rating
- chats solved % (ReportBuilder)
- Tickets per day chart (weekly or daily points)
- SLA met by priority and support level (SlaStats service)
- Agent performance: resolved count
- avg response
- SLA met
- rating
- Category and rating distribution
- Excel export with 7 sheets including one row per ticket (SimpleXlsx class)
Integrations & API
- REST API with Bearer token authentication (AuthenticateApiKey middleware
- ApiKey model with SHA-256 hash)
- API keys: live/test environments
- revoke
- last-used tracking (ApiKeyController)
- Embeddable chat widget with domain whitelist (SUPPORTDESK_WIDGET_DOMAINS)
- Settings for email-to-ticket
- Slack
- Teams
- Google sign-in
- webhooks (IntegrationCatalog
- IntegrationSettings)
- Rate limiting: 10 wrong keys per IP per minute before 429
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| PHP | — | — | Web, API | 61.7% |
| SQL | — | — | Database | 20.6% |
| CSS | — | — | Styling | 14.9% |
| JavaScript | — | — | Front-end | 2.7% |
| Shell | — | — | Scripts | 0.1% |
- Primary language
- PHP 8.2
- Framework
- Laravel 12
- Database
- MySQL 8 / MariaDB 10.4
- Authentication
- Session-based with email/password, password reset, invitations, API keys (Bearer token)
- Licence
- Single-site
- Screens
- 42
- Database tables
- 31
- Supported languages
- English (en), Arabic support via ai.arabic setting, RTL-ready
- Browser support
- Modern browsers (Chrome, Firefox, Safari, Edge)
| Minimum | Recommended | |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 2 GB RAM / 10 GB storage | 4 GB RAM / 20 GB storage |
| OS | PHP 8.2+, MySQL 8 or MariaDB 10.4+, Apache/Nginx with mod_rewrite | PHP 8.2+, MySQL 8 or MariaDB 10.4+, Apache/Nginx with mod_rewrite |
| Est. monthly hosting | $15 | $15 |
```bash echo "DB_PASSWORD=$(openssl rand -hex 24)" > .env docker compose up -d docker compose exec app php artisan supportdesk:install --demo ``` Visit http://localhost:8000
```bash
sudo apt update && sudo apt install -y php8.2 php8.2-{cli,fpm,mysql,mbstring,xml,curl,zip,gd,bcmath} mysql-server nginx composer
sudo mysql -e "CREATE DATABASE supportdesk; CREATE USER 'supportdesk'@'localhost' IDENTIFIED BY 'CHANGE_ME'; GRANT ALL ON supportdesk.* TO 'supportdesk'@'localhost';"
cd /var/www && sudo git clone <repo> supportdesk && cd supportdesk/Laravel\ Project
sudo composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
# Edit .env: set DB_PASSWORD, APP_URL, MAIL_* settings
php artisan supportdesk:install --demo
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
# Configure Nginx to serve public/ as document root
# Add cron: * * * * * cd /var/www/supportdesk/Laravel\ Project && php artisan schedule:run >> /dev/null 2>&1
```1. Upload the `Laravel Project` folder contents to your account 2. Move everything except `public/` outside the web root (e.g. to `~/supportdesk`) 3. Move `public/` contents to `public_html/` (or subdirectory) 4. Edit `public_html/index.php`: change `__DIR__.'/../bootstrap/app.php'` to the actual path 5. Create MySQL database and user in cPanel 6. Copy `.env.example` to `.env` and fill in database credentials, APP_URL, mail settings 7. Run via SSH or Terminal in cPanel: ```bash cd ~/supportdesk php artisan key:generate php artisan supportdesk:install --demo ``` 8. Add cron job in cPanel: `* * * * * cd ~/supportdesk && php artisan schedule:run >> /dev/null 2>&1`
```bash cd Laravel\ Project composer install cp .env.example .env php artisan key:generate echo "DB_CONNECTION=sqlite" >> .env echo "DB_DATABASE=$(pwd)/database/database.sqlite" >> .env touch database/database.sqlite php artisan supportdesk:install --demo php artisan serve ``` In a second terminal: ```bash cd Laravel\ Project php artisan schedule:work ``` Visit http://127.0.0.1:8000
Quality report
Manually reviewedHow to read the quality report
What this is. Every project on Vibe96 goes through an automated audit of its source code before a reviewer in Dubai checks it by hand. The score is out of 100; 75 is the minimum to be listed, and any single failing check blocks a listing regardless of the score.
- Security
- No real credentials in the code, every data-changing route protected, admin areas role-gated, no SQL built from user input.
- Code structure
- A developer can navigate and extend it: clear module boundaries, no giant files, little copy-paste.
- Docs & completeness
- The setup guide, example config, schema and required files the builder committed to are actually in the archive.
- Dependency health
- Packages pinned, no known critical vulnerabilities, no abandoned libraries in production paths.
- Build & deploy
- A clean machine can restore, build and start it by following the shipped instructions.
Warnings are problems that didn't block the listing; they stay visible here until a later version clears them. The audit reads the code — it does not run it — so always try the live demo before you buy. Lines of code are counted from the same audited archive.
Reviewer notes (3 minor)
No real credentials found; weak demo password generation needs attention; strong authentication & authorization; minor ownership gaps on read endpoints; good separation of concerns with some duplication and oversized utility classes. None of these stop the software from working; the developer has been told and improvements come in a future update.
Versions & updates
No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.
What you get
- </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
- ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
- ↻One year of updatesEvery new version the builder publishes, free for 12 months.
- ♧30 days of supportInstallation and defect support through Vibe96 tickets.