About this software
About SalesCRM
SalesCRM is a Laravel 12 + MySQL 8 CRM for small and mid-sized B2B sales teams who want their pipeline, follow-ups and targets in one place they host themselves. It tracks leads through stages, manages contacts and companies, generates proposals, and calculates commission. An optional AI assistant (Anthropic Claude) answers questions from live CRM data, scores deal health, researches accounts, scans visiting cards and delivers weekly coaching briefs. The mobile PWA captures contacts at exhibitions and works offline.
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/privatewith 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.