v2.1.0 — A comprehensive fleet vehicle management system built on top of Snipe-IT, designed for enterprise fleet operations with reservation scheduling, maintenance tracking, compliance management, and multi-entity fleet partitioning.
This project was born from a real need in large-scale infrastructure programs. The challenge was managing diverse assets on a single platform: not just IT equipment, but fleet vehicles used by construction management, PMO staff, and field personnel across multiple project areas.
- Snipe-IT excels at IT asset management but lacks reservation/scheduling capabilities
- Fleet vehicles require advance booking, check-out/check-in workflows, and inspection tracking
- Paper-based vehicle check-out processes were inefficient and lacked governance
- No single platform to manage both IT assets and fleet vehicles
- Multi-entity programs need fleet partitioning — each organization sees only its own vehicles
SnipeScheduler FleetManager extends Snipe-IT with a user-friendly frontend specifically designed for fleet operations:
- Uses Snipe-IT's API as the single source of truth for all asset data
- Adds reservation scheduling with approval workflows
- Implements configurable vehicle inspection checklists (quick/full/off modes)
- Provides maintenance tracking integrated with Snipe-IT custom fields
- Supports multi-entity fleet partitioning with auto-detection
- Maintains full audit trail and compliance reporting
- API resilience with exponential backoff retry on 429/5xx responses
- Book Vehicles - Reserve vehicles in advance with pickup/return times
- Mobile-Friendly - Responsive design with QR code scanning
- Configurable Vehicle Inspection - Quick mode (4 high-level categories), Full mode (50-item detailed checklist with "All OK" quick-fill), or Off. Configurable by Fleet Admin
- Photo Upload - Optional camera-first photo capture during checkout and checkin for vehicle condition documentation
- Digital Inspections - Complete checkout/checkin forms on any device
- Email & Teams Notifications - Confirmation, reminders, and approvals via email or Microsoft Teams
- Vehicle Assignments - See your assigned vehicle with clear badge indicators (label, primary driver, additional driver count) alongside pool vehicles
- Approval Workflow - Review and approve/reject reservations
- Vehicle Management - Track all fleet vehicles and their status
- Maintenance Tracking - Flag issues, track maintenance history
- Training Expiration Tracking - Color-coded driver training status (green/yellow/red), date picker for completion dates, weekly expiration alerts via CRON
- Reports - Utilization, compliance, and usage reports with Chart.js visualizations
- Vehicle Assignment Management - Assign primary and secondary drivers per vehicle with configurable labels (Safety, Quality, etc.) that display as badges on catalogue cards
- Full Configuration - OAuth authentication, SMTP, custom fields
- Multi-Entity Fleet Management - Company-based vehicle partitioning with auto-detect. When multiple companies exist in Snipe-IT, vehicles are filtered by the user's assigned company. Configurable modes: Auto-detect, Always On, Always Off
- Corporate Theming - Full CSS variable system with configurable primary color palette. Set your brand color in Settings and the entire UI adapts
- Inspection Configuration - Choose between Quick (4 categories), Full (50-item checklist), or Off inspection modes
- Photo Upload Toggle - Enable or disable optional photo capture during checkout/checkin
- Notification Controls - Configure per-event channels (Email/Teams/Both/Off)
- CRON Health Monitoring - Sync staleness detection with configurable alert thresholds. Security Dashboard shows last sync time, asset count, and health status
- Startup Validation Script - Run
php scripts/validate_snipeit.phpto verify all required groups, statuses, fields, and API connectivity - Announcements - Display system-wide notices to users
- Security Dashboard - Monitor backup status, security checks, and CRON sync health
- Booking Rules - Set booking rules (min notice, max duration, blackouts, training requirements)
- Vehicle Assignment Enforcement - Restrictive vehicle assignment with configurable labels (Safety, Quality), primary/secondary drivers, pool vehicle fallback, and per-company enforcement modes (off/soft/enforced)
- Activity Log - Full audit trail of all system actions
- API Resilience - Exponential backoff retry on 429 (rate limit) and 5xx (server error) API responses
+-------------------------------------------------------------+
| SnipeScheduler FleetManager |
| +-----------+ +-----------+ +---------------------+ |
| | Drivers | |Fleet Staff| | Fleet Admin | |
| | (Group 2) | | (Group 3) | | (Group 4) | |
| +-----+-----+ +-----+-----+ +----------+----------+ |
| | | | |
| +---------------+-------------------+ |
| | |
| +---------------v-----------------+ |
| | SnipeScheduler PHP App | |
| | - Reservation Management | |
| | - Inspection Forms | |
| | - Approval Workflow | |
| | - Email & Teams Notifications | |
| | - Multi-Entity Filtering | |
| | - Photo Storage | |
| +---------------+-----------------+ |
| | API Calls (w/ retry) |
+------------------------+------------------------------------+
|
+------------------------v------------------------------------+
| Snipe-IT |
| - Asset Database (Source of Truth) |
| - User Management & Groups |
| - Company Assignments (Multi-Entity) |
| - Custom Fields (Mileage, VIN, Maintenance) |
| - Status Labels (Available, Reserved, In Service) |
| - Locations (Pickup Points, Destinations) |
+--------------------------------------------------------------+
Permissions are managed through Snipe-IT Groups. Notification recipients are resolved dynamically from group membership — no hardcoded email lists.
| Group ID | Group Name | Capabilities |
|---|---|---|
| 1 | Admins | Full system access including Settings |
| 2 | Drivers | Book vehicles, view own reservations |
| 3 | Fleet Staff | Approve reservations, manage maintenance |
| 4 | Fleet Admin | All staff permissions + user management |
Multi-Entity Fleet: When multi-entity mode is active, Drivers and Fleet Staff see only vehicles belonging to their assigned company. Fleet Admin and Super Admin always see all companies (full fleet visibility). Users with no company assigned see all vehicles (backward compatible).
Group IDs, status IDs, custom field names, and location parent IDs are all configurable in config.php.
Secure authentication via Microsoft OAuth or Google Sign-In. Users are automatically assigned permissions based on their Snipe-IT group membership.
Landing page with quick access to key actions and system overview.
Fleet overview with Chart.js visualizations, KPI summary cards (active reservations, pending approvals, fleet utilization), today's schedule, and overdue vehicle alerts. Users see their upcoming reservations at a glance.
Access: All authenticated users
Browse all available fleet vehicles with real-time availability pulled from Snipe-IT. Filter by type, status, or availability window.
Access: All authenticated users
Reserve a vehicle by selecting pickup/return dates, times, and location. Include purpose notes for approval workflow.
Access: All authenticated users
View and manage your own reservations. Cancel pending bookings, see approval status, and access checkout forms when ready. Pipeline tracker shows reservation progress from Booked through Returned.
Access: All authenticated users
Fleet Staff review pending reservation requests. Approve or reject with notes, view requester history and vehicle availability.
Access: Fleet Staff and above
Administrative view of all reservations across the fleet. Filter by status, date range, or vehicle.
Access: Fleet Staff and above
Track maintenance issues flagged during check-in. Log repairs, schedule service, and sync maintenance data back to Snipe-IT custom fields.
Access: Fleet Staff and above
Comprehensive reporting including utilization rates, compliance status, and usage history. Export to CSV for further analysis.
Access: Fleet Staff and above
Mobile-friendly QR code scanner for quick vehicle lookup. Scan vehicle QR codes to view details, check availability, or initiate checkout.
Access: All authenticated users
Administrative vehicle management. View all fleet assets, their current status, company assignment (when multi-entity is active), and quick links to Snipe-IT for detailed editing.
Access: Fleet Admin
Add new fleet vehicles with automatic asset tag generation from per-company prefix (fleet_tag_config table), VIN/plate duplicate checking, and Snipe-IT custom field mapping. Vehicle names auto-generate as [Year] [Manufacturer] [Model].
Access: Fleet Admin
View users and their Snipe-IT group assignments. Training column with date picker shows color-coded expiration status (green = valid, yellow = expiring within 15 days, red = expired). Track VIP status for auto-approval workflows.
Access: Fleet Admin
Full audit trail of system actions: logins, reservations, approvals, checkouts, and administrative changes.
Access: Fleet Admin
Configure email and Microsoft Teams notifications per event type. Set recipients, customize templates, and select channels (Email/Teams/Both/Off) per event.
Access: Fleet Admin
Create and manage system-wide announcements. Schedule display windows, set urgency levels, and make notices dismissible. Auto-deactivates on new releases.
Access: Fleet Admin
Configure reservation constraints: minimum notice periods, maximum duration, blackout windows, auto-approval rules, driver training requirements, and inspection mode selector (Quick / Full / Off).
Access: Fleet Admin
Monitor system security status, CRON sync health (Healthy/Stale/Never Run with last sync time and asset count), backup logs, config permissions, and security headers.
Access: Super Admin only
Full system configuration including authentication providers, SMTP settings, Teams integration, reservation controls, per-company asset tag prefix (via fleet_tag_config table), corporate theme color, and multi-entity fleet configuration (Auto-detect / Always On / Always Off with detected company count).
Access: Super Admin only
See docs/INSTALLATION.md for detailed installation instructions.
Security Requirement: Disk-level encryption (EBS encryption, LUKS, or equivalent) must be enabled before deploying. The application does not encrypt data at rest. See Security Prerequisites and SECURITY_AUDIT.md.
- Install Snipe-IT (if not already running)
- Clone this repository to
/var/www/snipescheduler - Configure Apache with Alias to
/booking - Copy
config/config.example.phptoconfig/config.php - Configure database, Snipe-IT API, and authentication
- Run database migrations
- Create user groups in Snipe-IT (Drivers, Fleet Staff, Fleet Admin)
- Run
php scripts/validate_snipeit.phpto verify configuration - Set up CRON jobs (see table below)
Create these groups in Snipe-IT:
| Group Name | Group ID | Purpose |
|---|---|---|
| Drivers | 2 | Basic vehicle booking access |
| Fleet Staff | 3 | Approval and maintenance management |
| Fleet Admin | 4 | Full fleet administration |
Group IDs are configurable in config.php under snipeit_groups.
Create these status labels in Snipe-IT:
| Status Name | Type | Notes |
|---|---|---|
| VEH-Available | Deployable | Default status for available vehicles |
| VEH-Reserved | Pending | Vehicle has upcoming reservation |
| VEH-In Service | Deployed | Vehicle currently checked out |
| VEH-Out of Service | Undeployable | Under maintenance |
Status IDs are configurable in config.php under snipeit_statuses.
Create a Fleet Vehicle Fields fieldset with these custom fields:
| Field Name | Element | Format | Purpose |
|---|---|---|---|
| VIN | Text | Regex (17 chars) | Vehicle identification |
| License Plate | Text | Regex | Plate number |
| Vehicle Year | Text | NUMERIC | Model year |
| Current Mileage | Text | Regex | Odometer reading (updated at checkout/checkin) |
| Last Oil Change (Miles) | Text | Regex | Maintenance tracking |
| Last Tire Rotation (Miles) | Text | Regex | Maintenance tracking |
| Insurance Expiry | Text | DATE | Compliance |
| Registration Expiry | Text | DATE | Compliance |
| Holman Account # | Text | ANY | Maintenance vendor |
| Last Maintenance Date | Text | DATE | Maintenance tracking |
| Last Maintenance Mileage | Text | Regex | Maintenance tracking |
| Maintenance Interval Miles | Text | Regex | Maintenance alerts |
| Maintenance Interval Days | Text | NUMERIC | Maintenance alerts |
Custom field names are configurable in config.php under snipeit_fields.
Inspection Fields (populated during checkout/checkin):
| Field Name | Element | Purpose |
|---|---|---|
| Visual Inspection Complete? | Listbox | Driver must select Yes (never pre-filled) |
| Vehicle Condition Issues | Checkbox | Multi-select issue types |
| Exterior/Tire/Undercarriage/Interior Issues | Textarea | Free text descriptions |
| Checkout Time / Return Time | Text | HH:MM (auto-filled) |
For multi-entity deployments, create one Company per fleet entity in Snipe-IT. Assign users and vehicles to their respective companies. Enable Full Multiple Companies Support in Snipe-IT General Settings.
When SnipeScheduler detects multiple companies, it automatically activates fleet partitioning. This can be overridden in Settings (Auto-detect / Always On / Always Off).
- Create a Vehicles category for fleet assets
- Create manufacturers (Ford, Chevrolet, etc.) and models
- Create Pickup Points and Destinations as locations
Location parent IDs are configurable in config.php.
Set up the following scheduled tasks:
| Script | Schedule | Purpose |
|---|---|---|
scripts/sync_checked_out_assets.php |
Every 5 minutes | Sync checked-out asset cache with Snipe-IT |
scripts/cron_sync_health.php |
Every 15 minutes | Monitor sync staleness, trigger alerts if stale |
scripts/cron_mark_missed.php |
Every 15 minutes | Auto-mark missed reservations past pickup window |
scripts/email_overdue_staff.php |
Every 30 minutes | Notify Fleet Staff of overdue vehicle returns |
scripts/email_overdue_users.php |
Every 30 minutes | Notify drivers of their overdue returns |
scripts/cron_training_expiry.php |
Weekly (Monday 8am) | Send training expiration warnings to Fleet Staff |
Example crontab:
*/5 * * * * php /var/www/snipescheduler/scripts/sync_checked_out_assets.php >> /var/log/snipescheduler/sync.log 2>&1
*/15 * * * * php /var/www/snipescheduler/scripts/cron_sync_health.php >> /var/log/snipescheduler/health.log 2>&1
*/15 * * * * php /var/www/snipescheduler/scripts/cron_mark_missed.php >> /var/log/snipescheduler/missed.log 2>&1
*/30 * * * * php /var/www/snipescheduler/scripts/email_overdue_staff.php >> /var/log/snipescheduler/overdue.log 2>&1
*/30 * * * * php /var/www/snipescheduler/scripts/email_overdue_users.php >> /var/log/snipescheduler/overdue.log 2>&1
0 8 * * 1 php /var/www/snipescheduler/scripts/cron_training_expiry.php >> /var/log/snipescheduler/training.log 2>&1SnipeScheduler uses the Snipe-IT API exclusively — no direct database access to Snipe-IT. All API calls use exponential backoff retry on 429 (rate limit) and 5xx (server error) responses.
Key API operations:
GET /hardware- List available vehiclesPATCH /hardware/{id}- Update status, location, custom fieldsGET /users- Validate users and group membershipGET /companies- List companies for multi-entity filteringGET /statuslabels- Get status optionsGET /locations- Get pickup/destination options
See docs/DATABASE_SCHEMA.md for complete schema documentation.
SnipeScheduler maintains its own MySQL database for:
- Reservations and approval history
- Inspection responses
- Email queue and notifications
- Announcements and blackout slots
- Activity log
- System settings (multi-entity mode, CRON health, etc.)
See SECURITY.md for security checklist and hardening procedures.
| Document | Description |
|---|---|
| Security Audit Summary | Authentication, authorization, input protection, session security, known limitations |
| Incident Response Plan | Detection, containment, notification timeline (72hr CCPA), credential rotation |
| Disaster Recovery Runbook | RTO/RPO targets, backup strategy, step-by-step restoration, validation checklist |
Key security features:
- Fleet group authorization gate — users must belong to an authorized Snipe-IT group
- CSRF protection on all forms
- XSS prevention with output encoding
- SQL injection prevention with PDO prepared statements
- Ownership validation on checkout/checkin operations
- Security headers (X-Frame-Options, CSP, etc.)
- Config file permissions (640)
- Automated daily backups
- API retry with exponential backoff
- CRON health monitoring with staleness alerts
This project is a derivative work based on SnipeScheduler by Ben Pirozzolo.
- Author: Ben Pirozzolo (JSY-Ben)
- Repository: https://github.com/JSY-Ben/SnipeScheduler
- License: MIT
- Author: Vitor Rodovalho
- Repository: https://github.com/VitorMRodovalho/SnipeScheduler-FleetManager
- Purpose: Extended for enterprise fleet management with additional features
- Multi-entity fleet partitioning (company-based vehicle filtering with auto-detect)
- Configurable vehicle inspection checklist (Quick / Full / Off modes, 50-item detailed checklist)
- Photo upload during checkout/checkin (optional, camera-first capture)
- Corporate theming with configurable primary color palette (CSS variable system)
- Driver training compliance tracking (date picker, color-coded expiration, weekly alerts)
- CRON health monitoring with sync staleness detection and alerting
- API resilience with exponential backoff retry on 429/5xx
- Startup validation script (
validate_snipeit.php) - Fleet-specific inspection forms (mileage + visual inspection enforcement)
- Maintenance tracking with Snipe-IT integration
- VIP auto-approval workflow
- Reservation pipeline tracker (Booked > Approved > Checked Out > Returned)
- Dynamic notification recipients from Snipe-IT groups
- Email + Microsoft Teams notifications (per-event channel control)
- Driver group merge (existing users get permissions appended, not blocked)
- Booking rules (blackouts, limits, min notice)
- Announcements system with auto-deactivation on new releases
- Security dashboard with backup monitoring
- Activity log with full audit trail
- QR code scanning for mobile vehicle lookup
- Mobile-optimized responsive interface
- Clean URLs (no .php extensions)
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
See CHANGELOG.md for version history and release notes.
For issues and feature requests, please use the GitHub Issues page.



















