A comprehensive, enterprise-grade equipment rental management system built with Go, featuring advanced analytics, device tracking, and customer management. Designed for exclusive Docker deployment with professional theming and modern web interface.
- ✨ Key Features
- 🚀 Quick Start
- 🏗️ Project Architecture
- 🔧 Configuration
- 📊 API Documentation
- 🔐 Security
- 🚀 Deployment
- 📈 Performance
- 🛠️ Development
- 📝 Documentation
- 📱 Responsive Design
- 📷 Demo Images
- 🏷️ Version History
- 📧 Support
- Real-time Analytics: Revenue trends, equipment utilization, customer metrics
- Interactive Charts: Chart.js integration with responsive visualizations
- Device Analytics: Individual device performance with detailed insights modal
- Time Period Filtering: 7 days, 30 days, 90 days, 1 year analysis
- Export Functionality: PDF and CSV export with UTF-8 encoding
- Performance Metrics: Utilization rates, booking statistics, revenue analysis
- Device Inventory: Complete equipment tracking with categories and products
- Availability Tracking: Real-time device status (available, checked out, maintenance)
- QR Code & Barcode Generation: Automated code generation for device identification
- 🆕 Scan-Board: Full-screen pack workflow board displaying large barcodes for all job devices
- Live Pack Status: Real-time visual indication of packed vs pending items
- Visual Progress Tracking: Circular progress indicator with completion percentage
- Large Barcode Display: High-contrast barcodes for easy scanning from distance
- Missing Items Warning: Smart workflow prevents finishing with missing items
- Auto-refresh: Live updates every 5 seconds with manual refresh option
- Dark/Light Theme: Supports both themes with optimal contrast for scanning
- 🆕 Go-First Barcode Scanner: Industrial-grade WASM-powered barcode scanner
- Go WebAssembly Core: High-performance decoder compiled from Go using gozxing
- Industrial Symbology Support: CODE128, CODE39, EAN-13/8, UPC-A/E, ITF, QR codes
- Native Camera Experience: Tap-to-focus, continuous autofocus, pinch/double-tap zoom, torch control
- Progressive Enhancement: Optimal performance on modern devices with graceful fallbacks
- ROI Processing: Center-focused 1D scanning with dynamic frame downscaling
- Real-time Dedupe: LRU cache with 1-2s cooldown prevents duplicate scans
- Web Worker Architecture: WASM decoder runs in background thread for smooth UI
- Server-side Fallback: Optional Go-powered server decode for ultimate compatibility
- Responsive Design: Full-screen scanner with professional overlay and controls
- Performance Optimized: 20-30 fps processing with sub-70ms decode times
- Bulk Operations: Mass device assignment and status updates
- Equipment Packages: Predefined equipment bundles for common rentals
- Revenue Tracking: Per-device revenue analytics and performance insights
- 🆕 Rental Equipment System: External equipment rental tracking with supplier management
- 🆕 Manual Entry & Selection: Add external rentals directly to jobs or select from catalog
- 🆕 Rental Analytics: Dedicated analytics for external equipment usage and costs
- Customer Database: Comprehensive customer information with rental history
- Job Lifecycle: Complete job management from creation to completion
- Enhanced Job Modals: Revenue and device count display with detailed overview
- Device Assignment: Bulk scanning and assignment to rental jobs
- Device Price Management: Real-time price adjustment per job with API integration
- Categorized Device Overview: Devices grouped by Sound, Light, Effect, Stage, Other
- Invoice Generation: Professional invoice creation with customizable templates
- Status Tracking: Real-time job status updates with audit trails
- RentalCore Design System: Professional dark theme with consistent branding
- 🆕 Fully Responsive Design: Complete mobile-first responsive implementation
- Mobile Navigation: Drawer-style navigation with backdrop and touch optimization
- Tablet Interface: Icon rail navigation with compact layouts
- Desktop Experience: Full sidebar with comprehensive layouts
- Responsive Tables: Card transformation for mobile, horizontal scroll with sticky columns
- Adaptive Forms: Single-column mobile, multi-column desktop with responsive grids
- Touch-Optimized: 44px minimum touch targets, enhanced focus states
- PWA Support: Progressive Web App features for mobile deployment
- Multi-language Support: Internationalization ready
- Document Management: File upload, signature collection, document archival
- User Management: Role-based access control with security audit logs
- 2FA Authentication: Two-factor authentication with WebAuthn support
- Encryption: Industry-standard data encryption and secure key management
- GDPR Compliance: Privacy controls and data retention management
- Security Monitoring: Real-time security event tracking and alerting
- Financial Dashboard: Revenue tracking, payment monitoring, tax reporting
- Performance Monitoring: System metrics, error tracking, health checks
- Audit Logging: Comprehensive activity logging for compliance
- Backup Management: Automated data backup with retention policies
- Docker Engine 20.10+
- Docker Compose 2.0+
- External MySQL/MariaDB database
- Domain with SSL certificate (production)
git clone https://github.com/nbt4/RentalCore.git
cd RentalCore
# Or download configuration files directly
wget https://github.com/nbt4/RentalCore/raw/main/docker-compose.example.yml
wget https://github.com/nbt4/RentalCore/raw/main/.env.example
wget https://github.com/nbt4/RentalCore/raw/main/config.json.example# Copy and configure environment variables
cp .env.example .env
nano .env # Edit with your database credentials
# Copy and configure application settings
cp config.json.example config.json
nano config.json # Customize application settings
# Copy and configure Docker Compose
cp docker-compose.example.yml docker-compose.yml
nano docker-compose.yml # Adjust for your environment# Start the application
docker-compose up -d
# Check status
docker-compose ps
docker-compose logs -f rentalcore
# Access the application
open http://localhost:8080rentalcore/
├── cmd/server/ # Application entry point
├── internal/
│ ├── handlers/ # HTTP request handlers
│ ├── models/ # Database models and structures
│ ├── services/ # Business logic services
│ └── middleware/ # HTTP middleware
├── web/
│ ├── templates/ # HTML templates with modern design
│ └── static/ # CSS, JavaScript, assets
├── migrations/ # Database migration scripts
├── keys/ # SSL certificates and keys
├── logs/ # Application logs
├── uploads/ # User uploaded files
├── docker-compose.yml # Docker deployment configuration
├── .env # Environment variables (not in repo)
├── config.json # Application configuration (not in repo)
├── .gitignore # Git ignore rules with credential protection
└── README.md # This documentation
- Backend: Go 1.23+ with Gin web framework
- Database: MySQL 8.0+ with GORM ORM
- Frontend: HTML5, Bootstrap 5, Chart.js, vanilla JavaScript
- Authentication: WebAuthn, 2FA, session management
- Deployment: Docker with health checks and volume management
- Monitoring: Prometheus metrics, structured logging
- Security: TLS encryption, CORS protection, input validation
# Database Configuration
DB_HOST=your-database-host.com
DB_PORT=3306
DB_NAME=rentalcore
DB_USERNAME=rentalcore_user
DB_PASSWORD=secure_password
# Security Settings
ENCRYPTION_KEY=your-256-bit-encryption-key
SESSION_TIMEOUT=3600
GIN_MODE=release
# Optional: Email Configuration
SMTP_HOST=smtp.yourdomain.com
SMTP_PORT=587
SMTP_USERNAME=noreply@yourdomain.com
SMTP_PASSWORD=email_password- UI Theming: Professional dark theme with customizable colors
- Feature Flags: Enable/disable specific functionality
- Performance Settings: Cache timeouts, connection pooling
- Invoice Configuration: Tax rates, payment terms, currency settings
- Security Policies: Password requirements, session management
GET /analytics- Main analytics dashboardGET /analytics/devices/:deviceId- Individual device analyticsGET /analytics/devices/all- All device revenue dataGET /analytics/export- Export analytics data (PDF/CSV)
GET|POST|PUT|DELETE /api/v1/jobs- Job managementGET|POST|PUT|DELETE /api/v1/devices- Device inventoryGET|POST|PUT|DELETE /api/v1/customers- Customer databaseGET|POST|PUT|DELETE /api/v1/invoices- Invoice management
GET /health- Application health checkGET /barcodes/device/:id/qr- Generate QR codesPOST /search/global- Global search functionalityGET /monitoring/metrics- Prometheus metrics
- Multi-factor authentication (2FA, WebAuthn)
- Role-based access control (RBAC)
- Session management with secure cookies
- Password policy enforcement
- Industry-standard encryption (AES-256)
- HTTPS/TLS termination
- Input validation and sanitization
- SQL injection prevention
- CSRF protection
- GDPR compliance features
- Comprehensive audit logging
- Data retention policies
- Security event monitoring
# Latest stable release
docker pull nbt4/rentalcore:latest
# Specific version
docker pull nbt4/rentalcore:1.4# Traefik labels example
labels:
- "traefik.enable=true"
- "traefik.http.routers.rentalcore.rule=Host(`rental.yourdomain.com`)"
- "traefik.http.services.rentalcore.loadbalancer.server.port=8080"
- "traefik.http.routers.rentalcore.tls.certresolver=letsencrypt"# Health check
curl https://rental.yourdomain.com/health
# View logs
docker-compose logs -f --tail=100 rentalcore
# Update deployment
docker-compose pull && docker-compose up -d
# Backup data
docker run --rm -v rentalcore_uploads:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz /data- Database connection pooling (50 connections default)
- Response caching for analytics data
- Lazy loading for large datasets
- Image optimization and compression
- Minified CSS/JavaScript assets
- Application performance monitoring (APM)
- Database query performance
- Memory and CPU utilization
- Error rate and response time tracking
- User activity analytics
# Clone repository
git clone https://github.com/nbt4/RentalCore.git
cd RentalCore
# Copy configuration examples
cp .env.example .env
cp config.json.example config.json
# Build and run
go mod tidy
go build -o server ./cmd/server
./server
# Or use Docker for development
docker-compose up -d --build- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
All documentation is organized in the docs/ folder for easy access:
- Database Setup Guide - Complete database installation and configuration guide
- Docker Deployment - Comprehensive deployment instructions
- Quick Start Guide - Rapid deployment guide
- Configuration Examples - Environment and config examples
- API Reference - Complete API documentation
- Security Guide - Security best practices and features
- Architecture Guide - System architecture and design patterns
- User Manual - Complete user documentation
- Admin Guide - Administrator documentation
- Troubleshooting - Common issues and solutions
- ✅ Mobile-First Responsive Design: Complete overhaul with mobile-first approach
- ✅ Adaptive Navigation: Mobile drawer, tablet rail, desktop sidebar navigation
- ✅ Responsive Tables: Card transformation and horizontal scroll options for mobile
- ✅ Fluid Typography: CSS clamp() implementation for scalable text (14px-48px)
- ✅ Touch Optimization: 44px minimum touch targets, enhanced focus states
- ✅ Responsive Forms: Single-column mobile, multi-column desktop layouts
- ✅ Modal Enhancements: Full-screen mobile modals, adaptive tablet/desktop sizing
- ✅ Accessibility Improvements: WCAG 2.2 AA compliance, reduced motion support
- ✅ Layout Primitives: Stack, Inline, Cluster, Sidebar responsive patterns
- ✅ Responsive Utilities: Breakpoint visibility controls, responsive images
- ✅ Complete rental equipment management system for external equipment
- ✅ Rental equipment database tables with job integration
- ✅ Dedicated rental equipment management page with CRUD operations
- ✅ Rental equipment analytics dashboard with charts and statistics
- ✅ Job integration with manual entry and existing equipment selection
- ✅ Products navbar dropdown for Own Products vs Rental Equipment
- ✅ Supplier management and category-based organization
- ✅ Real-time cost calculation and usage tracking
- ✅ Enhanced job view modal with comprehensive device management
- ✅ Revenue and device count display in job modals
- ✅ Clickable device count for detailed device overview
- ✅ Device overview grouped by 5 categories (Sound, Light, Effect, Stage, Other)
- ✅ Real-time device price adjustment per job with API integration
- ✅ Toast notifications for user feedback on price changes
- ✅ Improved customer display and status handling in job modals
- ✅ Complete device analytics modal with detailed insights
- ✅ Enhanced Docker deployment with configuration examples
- ✅ Comprehensive .gitignore with credential protection
- ✅ UTF-8 PDF export fixes for proper currency formatting
- ✅ Analytics dashboard complete rewrite
- ✅ Fixed dropdown functionality and data display issues
- ✅ Professional RentalCore theming implementation
- Issues: GitHub Issues
- Docker Hub: nbt4/rentalcore
- Documentation: GitHub Repository
RentalCore features a comprehensive responsive design system built from the ground up for optimal user experience across all devices.
- Mobile-First Approach: Designed primarily for mobile devices, progressively enhanced for larger screens
- Touch-Optimized: All interactive elements meet WCAG 2.2 AA guidelines with 44×44px minimum touch targets
- Accessibility-Focused: Enhanced focus states, reduced motion support, and screen reader optimization
- Performance-Oriented: Fluid typography and spacing using CSS clamp() functions
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-5: 1.25rem; /* 20px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
--space-10: 2.5rem; /* 40px */
--space-12: 3rem; /* 48px */--text-xs: clamp(0.75rem, 0.9vw, 0.875rem); /* 12-14px - Label/Meta */
--text-sm: clamp(0.875rem, 1.0vw, 1rem); /* 14-16px - Body */
--text-base: clamp(1rem, 1.0vw, 1rem); /* 16px - Body baseline */
--text-xl: clamp(1.125rem, 1.4vw, 1.375rem); /* 18-22px - H3 */
--text-2xl: clamp(1.375rem, 1.8vw, 1.75rem); /* 22-28px - H2 */
--text-3xl: clamp(1.75rem, 2.4vw, 2.25rem); /* 28-36px - H1 */--radius-sm: 0.375rem; /* 6px */
--radius-md: 0.625rem; /* 10px */
--radius-lg: 1rem; /* 16px */--container-sm: 40rem; /* 640px */
--container-md: 48rem; /* 768px */
--container-lg: 64rem; /* 1024px */
--container-xl: 80rem; /* 1280px */
--container-2xl: 90rem; /* 1440px max content width */.rc-grid-auto {
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--space-6); /* 24px on mobile */
gap: var(--space-8); /* 32px on desktop */
}- Mobile: Single column, full width
- Tablet/Desktop:
repeat(auto-fill, minmax(280px, 1fr)) - Large Desktop:
repeat(auto-fill, minmax(320px, 1fr))
.rc-container {
max-width: var(--container-xl); /* 1280px */
margin: 0 auto;
padding: 0 var(--space-4); /* 16px base */
padding: 0 var(--space-6); /* 24px on tablet+ */
padding: 0 var(--space-8); /* 32px on large desktop */
}- Mobile: Single column layout
- Tablet (768px+): Two-column grid for appropriate fields
- Desktop (1024px+): Three-column grid for complex forms
- Gap: Consistent
var(--space-5)(20px)
- Desktop: Generous padding (16px vertical, 24px horizontal)
- Tablet: Reduced padding (12px vertical, 16px horizontal)
- Mobile: Card transformation OR horizontal scroll with sticky first column
- Touch Targets: 44-56px row heights
- Minimum: 44×44px for all interactive elements
- Buttons: Consistent
min-height: 44px - Form Inputs:
min-height: 44pxwith proper padding
- Focus-visible: 2px solid accent outline with 2px offset
- Focus Rings: Only visible for keyboard navigation
- High Contrast: Maintains WCAG 2.2 AA compliance
.responsive-image {
width: 100%;
height: auto;
aspect-ratio: 16/9; /* Intrinsic sizing */
object-fit: cover;
}- Fluid Typography: Uses
clamp()for optimal scaling - Container Queries: Future-ready responsive patterns
- CSS Grid: Prefer over flexbox for 2D layouts
- Aspect Ratio: Prevents cumulative layout shift
- Content-driven heights (avoid forced equal heights)
- Lazy loading for non-critical media
- Efficient selector specificity
- Minimal layout thrash with CSS-only solutions
- xs (360-479px): Compact phones with stacked layouts
- sm (480-639px): Large phones with selective horizontal arrangements
- md (640-767px): Small tablets and landscape phones
- lg (768-1023px): Tablets with icon rail navigation
- xl (1024-1279px): Small laptops with full features
- 2xl (1280px+): Desktop monitors with expanded layouts
- Mobile: Full-screen drawer navigation with backdrop blur
- Tablet: Compact icon rail with tooltips for space efficiency
- Desktop: Full sidebar navigation with labels and dropdowns
- Mobile: Transform to card-based layout for better readability
- Alternative: Horizontal scroll with sticky first column and header
- Tablet: Compact spacing with column prioritization
- Desktop: Full table layout with enhanced hover states
- Mobile: Single-column layouts, full-screen modals for complex dialogs
- Tablet: Two-column grids where appropriate, adaptive modal sizing
- Desktop: Multi-column layouts with optimized field grouping
- Stack: Vertical layouts with responsive spacing
- Inline: Horizontal wrapping with intelligent overflow
- Cluster: Flexible button groups that stack on mobile
- Sidebar: Responsive content/sidebar combinations
- Typography: Scales from 14px to 48px using clamp() functions
- Spacing: Responsive spacing scale from 4px to 96px
- Components: Auto-adapting cards, forms, and data displays
- Images: Aspect ratio preservation with responsive sizing
Get a visual overview of RentalCore's professional interface and features:
Professional login interface with secure authentication and modern design.
Comprehensive dashboard showing active customers, equipment items, jobs, and quick action buttons for daily operations.
Complete device inventory management with search, status tracking, and bulk operations.
Product catalog management with categories, pricing, and detailed descriptions.
Hierarchical device organization by categories and types for easy navigation and management.
Specialized cable management with connector types, lengths, and cross-section specifications.
Equipment case tracking with device capacity and availability status.
Detailed view of devices within equipment cases for precise inventory control.
Job selection interface with overview of active jobs, available devices, and assignments.
Advanced scanning interface with barcode/QR code scanning, manual input, and device selection.
Complete job overview with integrated barcode scanner and quick device scanning for case assignments.
decoder.go - Main WASM export functions and gozxing integration
types.go - Type definitions and configuration structures
roi.go - Region of interest processing and image manipulation
dedupe.go - LRU cache with time-based duplicate prevention
Build Pipeline:
# Development build
cd web/scanner/wasm && ./build.sh
# Production build (optimized)
cd web/scanner/wasm && ./build.sh prod
# Verify build
make verifydecoder.worker.js - Web Worker bootstrap for WASM loading
decoder-manager.js - Main thread API for worker communication
camera.js - getUserMedia with advanced camera controls
capabilities.js - Device/browser capability detection
gestures.js - Touch gestures (pinch zoom, tap-to-focus)
scanner-integration.js - Integration with existing scan endpoints
ScannerView.tsx - React component (full scanner interface)
scanner.css - Professional scanner styling
| 1D Barcodes | 2D Codes | Status |
|---|---|---|
| CODE_128 | QR_CODE | ✅ Active |
| CODE_39 | - | ✅ Active |
| EAN_13/8 | - | ✅ Active |
| UPC_A/E | - | ✅ Active |
| ITF | - | ✅ Active |
Note: DataMatrix and PDF417 planned for future gozxing releases
| Metric | Target | Typical |
|---|---|---|
| Decode Latency | <100ms | ~50-70ms |
| Frame Rate | 20-30 fps | 25 fps |
| WASM Load Time | <5s | ~2-3s |
| Memory Usage | <50MB | ~30MB |
| Battery Impact | Minimal | Optimized |
| Browser | WASM | Camera | Worker | Touch | Status |
|---|---|---|---|---|---|
| Chrome 90+ | ✅ | ✅ | ✅ | ✅ | Full |
| Safari 14+ | ✅ | ✅ | ✅ | ✅ | Full |
| Firefox 89+ | ✅ | ✅ | ✅ | ✅ | Full |
| Edge 90+ | ✅ | ✅ | ✅ | ✅ | Full |
| Chrome Android | ✅ | ✅ | ✅ | ✅ | Full |
| Safari iOS | ✅ | ✅ | ✅ | ✅ | Full |
http://localhost:8080/dev/scanner-demo
- Live WASM decoder testing with camera feed
- Real-time performance metrics and statistics
- Fallback server decode testing
- Browser capability detection results
# Enable server-side decode (disabled by default)
export ENABLE_SERVER_DECODE=true
# Test fallback endpoint
curl -X POST http://localhost:8080/api/scan/decode \
-H "Content-Type: application/json" \
-d '{"imageData": "base64...", "width": 640, "height": 480}'# Build WASM decoder
cd web/scanner/wasm
./build.sh prod
# Copy assets to static directory
cp decoder.wasm ../../../web/static/scanner/wasm/
cp wasm_exec.js ../../../web/static/scanner/wasm/
cp ../ui/*.js ../../../web/static/scanner/ui/
# Docker build includes WASM assets
docker build -t nbt4/rentalcore:latest .The Go-first scanner integrates seamlessly with existing RentalCore scan endpoints:
// Scanner automatically calls existing endpoints
POST /scan/{jobId}/assign // Device assignment
POST /scan/{jobId}/assign-case // Case assignment
POST /api/v1/jobs/{jobId}/assign-rental // Rental equipment
// Events emitted for UI updates
scanner.addEventListener('deviceAssigned', (event) => {
// Update UI, show success feedback
// Integrates with existing job management
});Progressive Enhancement Philosophy:
- Path A: Go-WASM decoder worker (optimal performance)
- Path B: Browser BarcodeDetector (if faster for specific formats)
- Path C: Server-side Go decode (ultimate compatibility)
This project is licensed under the MIT License - see the LICENSE file for details.
The MIT License allows you to:
- ✅ Use the software for any purpose (commercial or non-commercial)
- ✅ Modify and distribute the software
- ✅ Create derivative works
- ✅ Use in private projects
- ✅ Sell copies or services based on the software
No warranty is provided - use at your own risk.
🎯 Ready for Production: RentalCore is designed for professional equipment rental businesses requiring comprehensive analytics, robust security, and scalable Docker deployment.










