Replaces paper tokens with a real-time browser experience β customers take a token from any device, track their live position, and get notified the moment their number is called. No app download, no accounts for customers.
Live Demo Β· Changelog Β· Roadmap Β· Report a Bug
Author: Muhammad Sufiyan Aasim Β· @SufiyanAasim
Latest release: v1.7.0 β Cosmos (LAN Connectivity & UI Polish)
Docs: Architecture Β· API Β· Deployment Β· Development Β· Guides Β· Troubleshooting Β· Release notes
Community: Contributing Β· Security Β· Support Β· Roadmap Β· Release process Β· Code of Conduct
QueueLess is a full-stack, cloud-native digital queue management system that replaces paper tokens with a real-time browser experience. Customers take tokens from any device, track their live position, and get notified the moment their number is called β no app download required.
Admins and staff manage the queue from a dedicated portal with a live dashboard, ML-assisted auto mode, granular analytics, and per-service staff portals. Every queue event is dual-written to MongoDB Atlas and a CSV event log, feeding a data mining pipeline that performs wait-time predictions, peak-hour heatmaps, and staffing recommendations.
v1.4.x turns QueueLess into an intelligent operational workspace: admin-defined custom queues, cross-counter token referral, a grounded AI assistant (RAG, never fabricates data), internal team messaging (1:1 + group chat), a notification center, secure sharing with QR codes, shared files, and role-based access control β all on the free Firebase Spark plan (no Cloud Storage / Blaze required).
- Take a token β pick a service, request priority if needed (elderly, medical, VIP), and get a token number instantly
- Group / family token β select a group size (1β5) when taking a token; hidden for medical industry
- Wait preview β see live queue length and estimated wait per service before committing
- Live position tracking β real-time queue position, ETA, and status powered by Firebase WebSocket
- Proactive push notifications β alerted at position 2 ("almost up") and position 1 ("you're next") even in background tabs
- Token re-queue β expired tokens can be re-issued within 2 hours without losing your place history
- Appointment booking β pre-book a visit by date, time, and service at
/book - Confetti + sound alert β browser celebration when your token is called
- Token history β all tokens ever taken on this device at
/history - QR code on home page β scan to join the queue without typing a URL
- Email tracking link β optional email with token number and live-tracking link
- Feedback β submit a star rating + comment after being served
- Live dashboard β real-time queue state per service with priority section, waiting list, serving-now card
- Per-service pause β pause and resume individual service queues independently; priority tokens always bypass
- SLA wait alert β red banner when any service exceeds the configured wait-time target
- Live announcements β broadcast a message to the display board and all customer screens instantly
- Token lookup β search any token by number, ID, or note; add inline notes from results
- Call next / skip / no-show β advance the queue or mark a token expired
- Priority queue β priority tokens served first across all service counters; regular queues auto-blocked until cleared
- Pause / resume / reset β full queue control including scheduled daily auto-reset
- ML Auto Mode β automatically calls next tokens on a dynamically calculated interval from historical traffic
- Analytics dashboard β peak-hour heatmap, hourly bar chart, service distribution, staff performance table, CSV export
- Detailed report β full traffic heatmap, drop-off rate, staffing AI suggestions, print to PDF
- Appointment management β list, confirm, and cancel customer bookings; confirmed appointments auto-merge into the queue Β±5 min
- Staff management β create/remove staff, assign services, set PIN for kiosk login, see who is online/offline
- Admin accounts β manage up to 10 admin accounts at
/admin/manage; bcrypt-hashed passwords - Feedback viewer β customer ratings and comments with average score; record verbal feedback manually
- Settings β organisation name, city/location, Industry Type, display board message, SLA target, auto-reset time
- Admin profile β edit display name, change password
- Separate login β staff authenticate with username + password or PIN via kiosk mode
- Service-scoped dashboard β call next for assigned service, skip / no-show current token
- Token notes β attach a short note to any called token (visible on display board and admin dashboard)
- Announcement banner β live admin broadcasts shown at top of staff view
- Priority awareness β alert when priority customers are waiting at other counters
- Online/offline presence β Firebase-powered live presence dots visible to admin
- Staff kiosk (
/kiosk) β fullscreen PIN numpad for shared terminals
- Fullscreen TV-optimised view β now-serving token per service, priority section, welcome banner, announcement banner, flash animation on token change, live clock
- Custom queue management (
/admin/queues) β admins create their own queues within an Industry Type with full CRUD: create, edit, enable/disable, archive, delete (blocked while active tokens exist), reorder, capacity, working hours, average service time, token prefix, and per-queue staff assignment + analytics. Dedicated Create and Manage screens. - Token referral / transfer β move a live token between counters (e.g. hospital OPD β Eye Specialist); it keeps its number, records a referral trail, is served as priority-tier at the destination, and never auto-expires mid-transfer.
- AI Assistant β a floating β¦ button on every screen + a full-screen workspace (
/assistant). Answers operational questions (longest wait, today's summary, predicted traffic, staffing) using Retrieval-Augmented Generation over verified backend data β it never fabricates figures. Pluggable providers (zero-config grounded default + optional OpenAI / Groq / OpenRouter / Ollama / Gemini). Persistent conversation history (pin, rename, delete, export). - Predictive insights β explainable wait-time forecasts, congestion alerts, and recommendations from a trained model artefact (scikit-learn) with rule-based cold-start fallback.
- Internal messaging β a docked π¬ message tray (bottom-anchored, slide-up, persistent) with 1:1 and group chat for admins & staff, team directory, emoji reactions, read receipts ("Seen"), and inline attachments (β€256 KB). Real-time without external services.
- Notification Center β a header π with unread badge + a dedicated screen (
/notifications); driven by an application-wide event bus (token referred, queue created, new message, β¦). - Secure sharing β share queue snapshots / analytics as capability links + QR codes with a printable view (
/share/:id) and expiry/revoke. - Shared files (
/files) β drag-and-drop sharing of reports, exports, PDFs, Excel, Word, ZIP (β€2 MB), stored in RTDB to stay on the free Spark plan (no Cloud Storage / Blaze). - Role-based access control β Super Admin > Admin > Manager > Staff. Managers run operations; only Admins+ manage accounts; only Super Admin changes roles. Audit log of sensitive actions at
/admin/audit.
Each Industry Type ships sensible default queues; admins can also add their own under Queues.
| Profile | Default queues |
|---|---|
| General Office | General Inquiry, Consultation, Transaction, Billing & Payments, Help & Support |
| Bank / Finance | New Account, Loan, Foreign Exchange, Card Services, Priority Banking, Locker, General Banking |
| Medical / Hospital | OPD, Eye Specialist, Cardiology, Dental, ENT, Dermatology, Orthopedics, Pediatrics, Gynecology, Lab, Pharmacy, Radiology, Emergency (auto-priority) |
| Restaurant / Dining | Table 1β2, Table 3β4, Table 5+, Reservation, Takeaway, Bar / Lounge |
| Technology | Version | Purpose |
|---|---|---|
| React | 18 | UI component framework |
| Vite | 8 | Build tool and dev server |
| React Router | 6 | Client-side routing |
| Tailwind CSS | 3 | Utility-first styling with custom design tokens |
| Firebase JS SDK | 12 | Real-time WebSocket subscriptions for live queue state, tokens, presence, and announcements |
| Axios | 1 | HTTP client with JWT interceptors |
| canvas-confetti | β | Confetti animation on token called |
| qrcode | β | QR code generation |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 20 | JavaScript runtime |
| Express | 4 | REST API framework |
| Firebase Admin SDK | 14 | Realtime Database writes, atomic multi-path updates, presence management |
| MongoDB Atlas | via mongodb driver |
Analytics event store (dual-written with CSV) |
| JSON Web Tokens | β | Admin and staff authentication, role + service claims |
| bcryptjs | β | Password hashing for admin accounts |
| Joi | β | Request validation and environment variable schema |
| express-rate-limit | β | Brute-force protection on PIN and login routes |
| nodemailer | β | Optional token email with tracking link |
| Jest + Supertest | β | Unit and integration tests (46 tests) |
| AI provider layer | β | Pluggable AIProvider (grounded default + OpenAI/Groq/OpenRouter/Ollama/Gemini) with RAG over verified data |
| Event bus | Node EventEmitter |
Application-wide events decoupling queue, messaging, and notification modules |
| Service | Purpose |
|---|---|
| Firebase Realtime Database | Live queue state, tokens, presence, announcements, appointments, admin accounts; custom queues; messaging, notifications & shared files (content via JWT API, real-time via content-free signal nodes) |
| MongoDB Atlas | Persistent analytics event log (queue_events) + full per-token lifecycle mirror (tokens) |
| Technology | Purpose |
|---|---|
| Python 3.11 | Pipeline language |
| pandas | Data cleaning, preprocessing, aggregation |
| scikit-learn | Linear regression with cyclical hour encoding (RΒ² = 0.893, MAE = 2.21 min) |
| matplotlib | Chart generation (6 charts in QueueLess editorial style) |
| Jupyter Notebook | Analysis report (auto-generated, fully executed) |
| joblib | Model serialisation |
| Service | Purpose |
|---|---|
| Vercel | Frontend hosting, auto-deploy on push to main, SPA rewrites |
| Render | Backend hosting, auto-deploy via render.yaml |
| Firebase | Realtime Database + Security Rules |
| GitHub Actions | CI β backend tests, frontend build, Firebase rules deploy |
Note: unlike a single-app repo (e.g. Metro Navigation System's
src/), QueueLess is a monorepo of independently deployed modules β Vercel and Render each build from their own root directory (frontend/,backend/), so the deployable modules live at the top level by design. The mapping to the conventionalsrc/ Β· tests/ Β· config/layout is documented in docs/Development.md.
queueless/
βββ backend/ # Node.js + Express REST API β Render
β βββ src/
β β βββ config/
β β β βββ env.js # Joi environment validation
β β β βββ firebase.js # Admin SDK init + database refs
β β βββ services/
β β β βββ queue.service.js # Token issuance, call next (regular + priority), skip, expiry,
β β β β # per-service pause, re-queue, groupSize, staffUsername attribution
β β β βββ auth.service.js # Admin login, password change, profile
β β β βββ staff.service.js # Staff CRUD, PIN login, profile
β β β βββ analytics.service.js# Dual-write (MongoDB + CSV), traffic stats, Firebase cross-ref,
β β β β # staff performance metrics aggregation
β β β βββ autoMode.service.js # ML-assisted auto-call with dynamic interval
β β β βββ expiry.service.js # Token expiry sweeper (every 5 min)
β β β βββ scheduler.service.js# Daily auto-reset scheduler (Asia/Karachi TZ, setInterval)
β β β βββ appointmentMerge.service.js # Auto-merge confirmed appointments β priority tokens (Β±5 min)
β β β βββ email.service.js # Nodemailer (optional)
β β βββ controllers/
β β β βββ admin.controller.js # Queue control, per-service pause, announcements, appointments,
β β β β # notes, admin CRUD, staff metrics, config management
β β β βββ staff.controller.js # Staff queue, notes, profile, password
β β β βββ token.controller.js # Token issuance, status, re-queue
β β β βββ feedback.controller.js
β β βββ routes/
β β β βββ admin.routes.js # /admin/* β JWT-protected, admin role
β β β βββ staff.routes.js # /staff/* β JWT-protected, staff role
β β β βββ token.routes.js # /tokens/* β public (groupSize + requeue)
β β β βββ index.js # /announcement, /appointments β public reads/posts
β β βββ middleware/
β β β βββ auth.js # JWT verification, role + service claim extraction
β β β βββ validate.js # Joi request body validation
β β β βββ errorHandler.js # Centralised error responses
β β βββ utils/asyncHandler.js
β β βββ app.js # Express factory (CORS, rate-limit, routes)
β β βββ server.js # Entry point, graceful shutdown, scheduler + merge service boot
β βββ tests/ # Jest + Supertest
β βββ .env.example
β βββ package.json
β
βββ frontend/ # React + Vite + Tailwind β Vercel
β βββ src/
β β βββ pages/
β β β βββ Home.jsx # Landing page, QR code, announcement banner
β β β βββ TakeToken.jsx # Service selection, wait preview, priority toggle,
β β β β # group size selector, per-service pause awareness
β β β βββ BookAppointment.jsx # Appointment booking form (/book)
β β β βββ MyToken.jsx # Live token tracking, proactive push at pos 2 & 1,
β β β β # re-queue button, group badge, confetti, QR code
β β β βββ Lookup.jsx # Recover token by ID or device storage
β β β βββ Feedback.jsx # Star rating + comment after served
β β β βββ TokenHistory.jsx # All tokens taken on this device
β β β βββ Display.jsx # TV display board β welcome banner, priority section, announcements
β β β βββ AdminLogin.jsx
β β β βββ AdminDashboard.jsx # Queue control, per-service pause, SLA alert, announcements,
β β β β # token lookup, notes, staffUsername attribution
β β β βββ AdminAnalytics.jsx # Heatmap, bar chart, staff performance table, CSV export
β β β βββ AdminReport.jsx # Traffic heatmap, hourly bar chart, AI suggestions
β β β βββ AdminAppointments.jsx # Appointment list with confirm/cancel
β β β βββ AdminStaff.jsx # Create/remove staff, live presence, PIN
β β β βββ AdminManage.jsx # Multi-admin account management (up to 10)
β β β βββ AdminFeedback.jsx # Customer ratings, record verbal feedback
β β β βββ AdminSetup.jsx # Org name, industry, display message, SLA, auto-reset time
β β β βββ AdminProfile.jsx # Admin display name, account info
β β β βββ AdminChangePassword.jsx
β β β βββ StaffLogin.jsx
β β β βββ StaffDashboard.jsx # Service queue, token notes, skip, announcement
β β β βββ StaffProfile.jsx # Staff display name, account info
β β β βββ StaffChangePassword.jsx
β β β βββ StaffKiosk.jsx # Fullscreen PIN numpad (/kiosk)
β β βββ components/
β β β βββ Layout.jsx # Nav (Dashboard, Analytics, Staff, Admins, Settings),
β β β β # ADMIN βΌ dropdown, dark mode toggle
β β β βββ StatusBadge.jsx
β β β βββ Stat.jsx
β β βββ context/
β β β βββ AuthContext.jsx # Admin JWT state + updateUser helper
β β β βββ StaffContext.jsx # Staff JWT state + updateStaff helper
β β β βββ ThemeContext.jsx # Dark mode toggle, persisted to localStorage
β β βββ hooks/
β β β βββ useQueueState.js # Firebase live β queue/state, tokens, announcements
β β β βββ useAppConfig.js # Fetches org config (industry, orgName, displayMessage, slaMinutes)
β β β βββ usePresence.js # Firebase onDisconnect presence for staff
β β β βββ usePushNotification.js
β β βββ services/api.js # Axios client, JWT interceptors, all API calls
β β β # (apiCallNext/Priority carry staffUsername)
β β βββ utils/industry.js # 4 industry profiles, getServices(), getServiceLabel()
β β βββ firebase.js # Firebase client SDK init
β βββ tailwind.config.js
β βββ vercel.json # SPA rewrites (/* β /index.html)
β βββ package.json
β
βββ firebase/
β βββ database.rules.json # Security rules β read-only clients, server writes,
β β # presence client-writable, schema validation
β βββ firebase.json
β βββ .firebaserc
β
βββ analytics/ # Python data mining pipeline
β βββ data_collection/
β β βββ data_simulator.py # Synthetic events (bimodal demand, lognormal service)
β β βββ csv_writer.py
β β βββ mongo_writer.py
β βββ data_cleaning/
β β βββ preprocess.py # Raw events β tokens DataFrame, outlier flagging
β βββ analysis/
β β βββ waiting_time.py # Descriptive stats, grouped views
β β βββ peak_hours.py # Frequency distribution, weekday Γ hour heatmap
β β βββ moving_average.py # Rolling-average predictor with backtest
β β βββ linear_regression.py # sklearn LinearRegression, cyclical hour encoding
β βββ visualization/
β β βββ charts.py # 6 matplotlib charts in QueueLess editorial style
β βββ notebooks/QueueLess_Analysis.ipynb
β βββ models/ # Serialised regression model (.joblib)
β βββ data/ # CSV outputs + chart PNGs
β βββ requirements.txt
β βββ run_pipeline.py
β βββ build_notebook.py
β
βββ .github/workflows/
β βββ backend-ci.yml # Jest tests on every push
β βββ frontend-ci.yml # Vite build verification
β βββ analytics-ci.yml # Python pipeline smoke test
β βββ firebase-rules.yml # Deploy RTDB rules on rules file change
β
βββ render.yaml # Render blueprint (build + start + env schema)
βββ LICENSE
βββ README.md
New modules in v1.4.x (not exhaustively expanded above):
backend/src/
βββ ai/ # AIProvider abstraction (grounded + LLM), RAG retrieval, assistant + conversation services
βββ events/ # Application-wide event bus + subscriber registration
βββ services/ # queueAdmin, prediction, messaging, notification, share, upload, audit services
βββ controllers/ # assistant, messaging, notification, share, upload controllers
βββ routes/ # assistant, messaging, share, upload routes
βββ config/roles.js # RBAC role hierarchy
βββ models/predictions.json # Shipped trained ML artefact (free-plan fallback)
frontend/src/
βββ components/ # AssistantDock, MessagingDeck, NotificationBell, ShareDialog, QueueForm, LiveTimer, PredictiveInsights, ErrorBoundary
βββ pages/ # AdminQueues(+New/+Edit), AdminAudit, AssistantWorkspace, Notifications, ShareView, SharedFiles, Credits
βββ services/api/ # Modular API client (client, queue, queues, messaging, notifications, assistant, share, files, β¦) re-exported by api.js
βββ hooks/useQueues.js Β· utils/queueRegistry.js # Custom-queue resolution
analytics/models/train_predictor.py # Trains GradientBoosting + IsolationForest β predictions.json
ββββββββββββββββββββββββββββββββββββββββββββ
β React (Vercel) β
β / β Home + QR + announcement β
β /take β Token + group size + pause β
β /book β Appointment booking β
β /token/:id β Live tracking + re-queue β
β /display β TV board + welcome banner β
β /staff β Staff dashboard + notes β
β /kiosk β PIN numpad β
β /admin β Admin portal β
β /admin/manage β Multi-admin accounts β
ββββββββββ¬βββββββββββββββββββ¬βββββββββββββββ
β β
REST /api/v1 β β Firebase WebSocket
(JWT auth) β β (onValue β live push)
βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββ
β Node.js / Express (Render) β
β β token issuance, group size β
β β priority + per-service pause engine β
β β re-queue (2-hour window) β
β β queue control (call/skip/pause) β
β β announcement broadcast β
β β appointment CRUD + auto-merge β
β β token notes β
β β ML auto mode β
β β admin + staff auth (JWT + bcrypt) β
β β token expiry sweeper (5 min) β
β β daily auto-reset scheduler β
β β dual-write: MongoDB + CSV β
ββββββββββ¬βββββββββββββββββββ¬βββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββ βββββββββββββββββββββββββ
β Firebase Realtime DB β β MongoDB Atlas β
β queue/state β β queue_events β
β queue/tokens β β (staff_username, β
β queue/announcement β β wait durations, β
β appointments/ β β service metrics) β
β presence/{username} β β (CSV fallback) β
β config/ β ββββββββββββ¬βββββββββββββ
β admins/ (bcrypt hashed) β β
βββββββββββββββββββββββββββββ βΌ
βββββββββββββββββββββββββ
β Python DM pipeline β
β pandas + sklearn β
β RΒ² 0.893 Β· MAE 2.21m β
β 6 matplotlib charts β
βββββββββββββββββββββββββ
| Module | Endpoints | Auth |
|---|---|---|
| Queues | GET/POST /admin/queues, GET /admin/queues/:id, PUT /admin/queues/:id, PUT /admin/queues/:id/enabled, PUT /admin/queues/:id/archive, DELETE /admin/queues/:id, PUT /admin/queues/reorder, GET /admin/queues/:id/staff, GET /admin/queues/:id/analytics |
admin-tier |
| Referral | POST /admin/queue/refer/:tokenId, POST /staff/queue/refer/:tokenId |
admin / staff |
| Predictions | GET /admin/predictions |
admin-tier |
| AI assistant | POST /assistant, GET/POST /assistant/conversations, GET/PUT/DELETE /assistant/conversations/:id |
admin / staff |
| Messaging | GET /directory, GET/POST /conversations, GET/POST /conversations/:id/messages, PUT /conversations/:id/read, PUT /conversations/:id/messages/:mid/react |
admin / staff |
| Notifications | GET /notifications, PUT /notifications/:id/read, PUT /notifications/read-all |
admin / staff |
| Sharing | POST/GET /shares, DELETE /shares/:id, GET /share/:id (public capability) |
admin / staff |
| Shared files | POST/GET /uploads, GET /uploads/:id, DELETE /uploads/:id |
admin / staff |
| RBAC + audit | POST /admin/admins (role), PUT /admin/admins/:username/role (superadmin), GET /admin/audit |
admin / superadmin |
Message, notification, and file content is served only via the JWT API; the Realtime Database holds only content-free signal nodes (messageSignals, notificationSignals) that clients subscribe to for real-time refresh β no Firebase Auth required.
cd backend
cp .env.example .env
# Fill in: FIREBASE_PROJECT_ID, FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY,
# FIREBASE_DATABASE_URL, JWT_SECRET, ADMIN_USERNAME, ADMIN_PASSWORD
npm install
npm test # Jest + Supertest
npm run dev # http://localhost:4000cd frontend
cp .env.example .env.local
# Fill in: VITE_API_BASE_URL=http://localhost:4000/api/v1
# Fill in all VITE_FIREBASE_* values from Firebase Console > Project Settings
npm install
npm run dev # http://localhost:5173cd analytics
pip install -r requirements.txt
python run_pipeline.py
# Simulates 4,400+ events β cleans β trains model β generates 6 charts
# If analytics/data/queue_events.csv exists from the live backend, uses real datacd firebase
firebase login
firebase deploy --only database- New Web Service β connect this repo β root directory:
backend - Render auto-detects
render.yamlfor build/start commands - Add secret environment variables in Render dashboard (see
backend/.env.example)
- New Project β connect this repo β root directory:
frontend - Framework: Vite (auto-detected) β
frontend/vercel.jsonhandles SPA rewrites - Add all
VITE_*environment variables fromfrontend/.env.example
| Concept | Implementation |
|---|---|
| PaaS hosting | Vercel (frontend CDN + serverless) + Render (backend web service) |
| NoSQL cloud databases | Firebase Realtime Database (operational) + MongoDB Atlas (analytics) |
| Real-time data sync | Firebase onValue WebSocket listeners β zero-polling live queue state |
| Dual-write pattern | Every queue event written atomically to MongoDB + CSV for redundancy |
| REST API design | Versioned at /api/v1/, role-segregated routes, Joi schema validation |
| Stateless JWT auth | Admin + staff roles, service claim embedded in staff token |
| Role-based access control | requireAdmin / requireStaff / requireRole(min) middleware; Super Admin > Admin > Manager > Staff hierarchy; per-admin bcrypt accounts; audit log of sensitive actions |
| AI provider abstraction | AIProvider interface with grounded (zero-config) + OpenAI/Groq/OpenRouter/Ollama/Gemini providers, selected via AI_PROVIDER; RAG grounding so no operational data is ever fabricated |
| Capability-based sharing | Secure share links (128-bit random ids) + QR codes, served read-only via the API with expiry/revoke |
| Firebase Security Rules | Schema-validated RTDB rules β clients read-only, server writes, presence client-writable |
| Presence detection | Firebase onDisconnect() for real-time staff online/offline state |
| CI/CD pipelines | GitHub Actions β automated tests, build verification, rules deploy on merge |
| Atomic multi-path updates | Single Firebase update() call for consistent token status transitions |
| Event-driven architecture | Queue state changes propagate to all connected clients via Firebase push |
| Scheduled background tasks | setInterval auto-reset scheduler and appointment-merge service β no cron daemon required |
| Concept | Implementation |
|---|---|
| Data collection | Backend dual-write + data_simulator.py synthetic event generator (bimodal demand, lognormal service times) |
| Data cleaning | preprocess.py β type coercion, missing-value handling, outlier flagging, derived feature columns |
| Descriptive statistics | Wait-time mean, median, std, percentiles grouped by service and hour |
| Frequency distribution | Hourly volume bar chart, queue-length histogram |
| Aggregation & grouping | Peak-hour heatmap by service Γ weekday Γ hour; staff performance by username |
| Trend analysis | 7-day daily token count with rolling average |
| Feature engineering | Cyclical encoding of hour-of-day (sin/cos) to preserve continuity across midnight |
| Supervised learning | sklearn.LinearRegression for wait-time prediction β RΒ² = 0.893, MAE = 2.21 min |
| Moving-average baseline | Backtest predictor with no data leakage for comparison against regression |
| Model serialisation | joblib saves trained model to models/ for reuse without retraining |
| Visualisation | 6 matplotlib charts rendered in QueueLess editorial style |
| Live in-browser analytics | Admin Analytics β peak hours, service distribution, staff metrics, drop-off rate, auto-refresh every 30s |
| Interactive report | Admin Report β traffic heatmap, hourly bar chart, AI staffing recommendations, print to PDF |
For the change log, see CHANGELOG.md; full per-release notes live in docs/releases/.
| Version | Codename | Milestone | Highlights |
|---|---|---|---|
| v1.7.0 | Cosmos | LAN Connectivity & UI Polish | LAN support, interactive UI pass, session expiry, dark-mode fixes, professional repo structure |
| v1.6.5 | Aurora | Summit | Credits overhaul, documentation refresh, release re-coding |
| v1.6.0 | Quasar | Forge | LinkedIn-style docked message tray (persistent, live badge) |
| v1.5.5 | Pulsar | Insight | Clock-style time pickers, city selection at setup |
| v1.5.0 | Orion | Beacon | Industry-aware analytics, enriched CSV export, proper No-show/Skip button, deployment-gap fix |
| v1.4.5 | Zenith | Intelligent Collaboration | AI assistant (RAG) + workspace, internal messaging (1:1/group, reactions, receipts, attachments), event bus + notification center, secure sharing + QR, shared files (Spark-free), RBAC + audit log |
| v1.4.0 | Polaris | Relay | Token referral between counters, custom queue management, live "serving for" timer + next-in-queue, Industry Type rename, trained ML predictions, credits page |
| v1.3.5 | Nebula | Pulse | Proactive push alerts, per-service pause, re-queue, group tokens, SLA alerts, staff metrics, multi-admin, auto-reset, appointment merge |
| v1.3.0 | Eclipse | Crew | Profile management, priority queue engine, 8 new features, 0 vulnerabilities |
| v1.2.5 | Comet | Alive | Analytics report, AI suggestions, dynamic heatmap, UI fixes |
| v1.2.0 | Nova | Sight | Initial release β core queue system, analytics dashboard, staff portal |
The backend ships 48 integration tests (Jest + Supertest) covering the queue engine, referral, custom queues, RBAC, messaging, notifications, sharing, uploads, the AI assistant, and every auth/error path. The Firebase layer is mocked in-memory, so the suite runs with no external services:
cd backend && npm testThe frontend gate is the production build (npm run build); UI flows are
verified manually in both light and dark mode. The analytics pipeline
has a CI smoke test (python run_pipeline.py --days 5 --skip-charts).
See docs/Development.md.
Clients are read-only on Firebase RTDB β every write goes through the JWT-protected API using the Admin SDK. Message/notification/file content is served only after server-side membership + RBAC checks; passwords and PINs are bcrypt-hashed; logins, token issuance, and the AI assistant are rate-limited; sensitive admin actions land in an append-only audit log. Report vulnerabilities privately β see SECURITY.md.
| Name | Role | |
|---|---|---|
| Mohammad Sufiyan Aasim | Software Engineer Β· Data Sciences & AIMLOps |
See CONTRIBUTING.md to get involved.
MIT License Β© 2026 Mohammad Sufiyan Aasim (@SufiyanAasim) β see LICENSE.
β Star this repo if QueueLess saved you a queue.