Why SalesCRM
What makes it better
than the alternatives
- 01
Self-hosted with full source code
Laravel 12 (PHP 8.2) and MySQL 8, no vendor lock-in or per-seat fees
- 02
AI features are optional
The CRM works fully without an Anthropic key; Deal Pulse scoring uses rules, not AI
- 03
Offline mobile app
Installable PWA that captures leads at events without signal, syncs when back online
- 04
Sales training academy
Courses, quizzes, AI role-play scenarios, gamification with points, streaks and badges
- 05
Role-based visibility
Reps see their own deals, managers see their team, Head of Sales sees everything
Leads & Pipeline
- Leads with stages
- priority
- source
- expected value
- close date and activity timeline
- Kanban pipeline board with drag-and-drop between stages (LeadStage table
- PipelineController)
- Duplicate detection on company name and contact email (LeadController::checkDuplicates)
- Bulk import from Excel or CSV (BulkImportController
- Import/ImportFormat)
- Excel export of filtered lead lists (LeadController::export
- PhpSpreadsheet)
Activities & Tasks
- Activity log per lead: calls
- meetings
- emails
- notes with timestamps (Activity table)
- Tasks with due dates
- priority and completion tracking (Task table
- TaskController)
- Follow-ups list showing overdue and due-today items in the team's timezone (FollowUpController)
- Urgent Attention list: stalled
- overdue and at-risk deals with reasons (UrgentAttentionController)
- Activity feed with My/Team tabs and filters by type and date (ActivityController)
Contacts & Companies
- Contacts with name
- phone
- designation
- industry and notes (Contact table
- ContactController)
- Companies with address
- website
- industry
- entity type and notes (Company table
- CompanyController)
- Relationship pages showing all deals
- activities and proposals per contact or company
- Visiting-card scanning with AI (CardScanController
- AI/CardReader
- Anthropic Vision API)
- Shared address book visible to all signed-in users (SECURITY.md)
Proposals
- Proposal creation with auto-numbering
- status
- validity period and file uploads (Proposal table
- ProposalController)
- File storage in storage/app/private with access control (ProposalDocumentController)
- Expiry reminders: scheduled job flags proposals nearing expiry (CheckProposalExpiry command)
- Proposal alerts view showing expiring and expired proposals (ProposalAlert view
- ProposalController::alerts)
- Status tracking: Draft
- Sent
- Accepted
- Rejected
- Expired (ProposalStatus enum)
Targets & Commission
- Monthly revenue targets for company
- teams and individuals (Target table
- TargetController)
- Commission tracking: set amount
- deal value
- notes
- paid status (Commission table
- CommissionController)
- Head of Sales sets and marks commissions paid; others view their visible commissions
- Unset commissions list for won deals without commission records (CommissionController::index)
- Commission totals: total
- paid
- pending (CommissionController)
Reports & Analytics
- Dashboard per role: KPIs
- pipeline
- revenue
- tasks
- proposals (DashboardController
- DashboardService)
- Analytics area with six tabs: overview
- revenue
- leads
- contacts
- proposals
- team (AnalyticsController)
- Sales performance report: rep stats
- win rates
- conversion rates (PerformanceService)
- Pipeline report by stage with value and count (ReportController::pipeline)
- Lead source report showing origin breakdown (ReportController::leadSource)
- Revenue report with monthly actuals vs targets (ReportController::revenue)
AI Assistant (optional)
- Chat interface answering questions from live CRM data visible to the signed-in user (AIAssistantController
- AI/AssistantContext)
- Weekly coaching brief on screen or by email (WeeklyBriefController
- AI/WeeklyBrief)
- Account and contact research with optional live web search (AIFeaturesController
- AI/WebSearch
- Tavily API)
- Deal Pulse: rule-based health score for open deals with AI explanation (DealPulseController
- DealPulseService)
- Visiting-card scanning using Anthropic Vision API (CardReader)
- Rate limited to 20 requests per person per minute (throttle:ai middleware)
Training Academy
- Courses
- lessons and quizzes with points
- streaks and badges (TrainingCourse
- TrainingLesson
- TrainingQuiz tables)
- Weekly training module chosen for each rep's weakest area (WeeklyTrainingJob
- Training/WeaknessAnalyzer
- Training/ModuleWriter)
- Role-Play Arena: AI-powered sales scenario practice (RolePlayController
- RolePlayService
- RolePlayScenarios)
- Gamification: points
- streaks
- badges
- leaderboard (Training/Gamification
- TrainingService)
- Team progress tracking for managers (Training/TeamProgress
- TrainingController::team)
- Job history showing generated modules and emails (TrainingController::jobHistory)
Mobile App (PWA)
- Installable progressive web app with offline support (resources/mobile/sw.js
- mobile-assets/)
- Event lead capture: photograph cards
- add notes
- works without signal (Mobile/CaptureController)
- Event management: create events
- assign reps
- track captured leads (Mobile/EventController)
- Follow-ups list on mobile (Mobile/FollowUpController)
- Lead list and detail views (Mobile/LeadController)
- Syncs when back online; offline page shown when no connection (mobile-assets/offline.html)
Settings & Administration
- User management: create
- edit
- deactivate users with roles (Settings/UserController
- User table)
- Four roles: Head of Sales
- Sales Manager
- Sales Executive
- Viewer (RoleId enum
- role: middleware)
- SMTP configuration with encrypted password storage (Settings/SmtpController
- MailSettings service)
- Pipeline stage management: add
- edit
- reorder
- mark as won/lost (Settings/StagesController)
- Scheduled jobs: overdue tasks
- proposal expiry
- deal scoring
- weekly training (ScheduledJobs service)
- Profile settings: change password
- timezone
- notification preferences (Settings/ProfileController)
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| PHP | — | — | Web, API | 82.7% |
| SQL | — | — | Database | 10.2% |
| CSS | — | — | Styling | 3.9% |
| JavaScript | — | — | Front-end | 3% |
| Shell | — | — | Scripts | 0.1% |
| HTML | — | — | Front-end | 0.1% |
- Primary language
- PHP 8.2
- Framework
- Laravel 12
- Database
- MySQL 8.0.16
- Authentication
- Session-based (email + bcrypt password, remember-me token)
- Licence
- Single-site
- Screens
- 47
- Database tables
- 73
- Supported languages
- English only
- Browser support
- Modern browsers (Bootstrap 5, ES6+)
| Minimum | Recommended | |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 GB RAM / 20 GB storage | 8 GB RAM / 40 GB storage |
| OS | Ubuntu 22.04+ / Debian 11+, PHP 8.2+, MySQL 8.0.16+ or MariaDB 10.6+, Apache 2.4+ or Nginx 1.18+ | Ubuntu 22.04+ / Debian 11+, PHP 8.2+, MySQL 8.0.16+ or MariaDB 10.6+, Apache 2.4+ or Nginx 1.18+ |
| Est. monthly hosting | $25 | $25 |
```bash cp .env.example .env # Edit .env: set DB_PASSWORD, DB_ROOT_PASSWORD, APP_PORT docker-compose up -d docker-compose exec app php artisan migrate --seed ```
```bash
sudo apt update && sudo apt install -y php8.2 php8.2-{cli,fpm,mysql,mbstring,xml,curl,gd,zip,bcmath} mysql-server-8.0 apache2 libapache2-mod-php8.2 composer
sudo mysql -e "CREATE DATABASE salescrm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER 'salescrm'@'localhost' IDENTIFIED BY 'your_password';"
sudo mysql -e "GRANT ALL ON salescrm.* TO 'salescrm'@'localhost'; FLUSH PRIVILEGES;"
cd /var/www && sudo unzip salescrm.zip && cd "Laravel Project"
sudo cp .env.example .env
# Edit .env: DB_PASSWORD, APP_URL, APP_ENV=production, APP_DEBUG=false
sudo composer install --no-dev --optimize-autoloader
sudo php artisan key:generate
sudo php artisan migrate --seed
sudo chown -R www-data:www-data storage bootstrap/cache
sudo a2enmod rewrite && sudo systemctl restart apache2
# Configure Apache VirtualHost to point DocumentRoot to /var/www/Laravel Project/public
``````bash # Upload ZIP, extract to public_html/salescrm cd public_html/salescrm/Laravel\ Project cp .env.example .env # Edit .env via File Manager: DB credentials from cPanel MySQL, APP_URL php artisan key:generate php artisan migrate --seed chmod -R 755 storage bootstrap/cache # Add cron job: cd /home/user/public_html/salescrm/Laravel\ Project && php artisan schedule:run >> /dev/null 2>&1 ```
```bash cd "Laravel Project" cp .env.example .env php artisan key:generate # Create MySQL database 'salescrm_testing' manually php artisan migrate --seed php artisan serve # Open http://localhost: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)
Weak default passwords in example files; no real credentials found; database access is mostly safe; a few unindexed foreign keys and one raw sql call need attention; access control is comprehensive with minor gaps on read-only endpoints. 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.