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/L3 levels 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/text files
- 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.
What to know before you buy
3 non-blocking findings shown publicly: 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. The seller has been notified; fixes ship in the next version.
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.