Built in a living room after shifts. Verified by the creator of hexagonal architecture. Independently evaluated against the patterns used by Segment, Palantir, and Stripe.
Lotlinx survey of 215 dealership executives, March 2026. 84% of dealers report AI tools produce ineffective or unusable outputs.
The gap between marketed “AI” and usable output is the industry’s largest unsolved problem.
Command Center’s claims are traceable to code — every feature on this page maps to a verified source path.
of total dealership gross profit now comes from fixed operations — a record high. The software sold to serve it doesn’t work.
average warranty claim denial rate. 78% of claims kicked back at least once before payment.
of technicians report job burnout. 48% say warranty work is the single worst part of working at a dealership.
Sixteen companies analyzed. None demonstrates offline-first operation, on-device inference, or pre-transmission PII scanning. Command Center ships architecture — verified against source code, evaluated against the patterns used by Segment, Palantir, and Stripe.
Built using hexagonal architecture — not because it was clever, but because the bay demanded it. The scan tool eats the only Ethernet port. The Wi-Fi password is on a sticky note from three years ago. It has to run offline. It has to work with whatever database the shop already licenses. It can’t care which AI provider sits behind it.
Hexagonal architecture means the business logic never touches the outside world directly. Databases, AI providers, scan tools — any of them can be swapped without rewriting the application. It’s the pattern used by Segment, Palantir, and Stripe to keep enterprise systems from collapsing under their own dependencies.
No cloud dependency. No internet required to function. Bidirectional sync queues offline and pushes when connectivity returns. The system doesn’t brick when the network goes down — it degrades gracefully to local SLM inference.
Deterministic. Temperature locked at 0.2. Won’t fill a gap with a guess. PII-scanned before anything touches a network. Post-generation pin verification cross-references every connector and pin against the vehicle’s actual netlist database.
SQLite with WAL mode. 24 versioned migrations. Eight databases per vehicle. SHA-256 audit hash chains. sqlite-vec for semantic search. A schema scanner auto-discovers and maps unknown OEM database formats without manual configuration.
AI providers, databases, vision engines, sync targets — all swappable through a single JSON config file. The swappable proxy hot-swaps AI backends live, with a smoke-test atomic commit. No restart. No degraded state.
Structured output enforcement. Controlled generation parameters. Database-grounded context injection. Token budget enforcement. Post-generation audit with a separate system prompt. Auto-search feedback loop so the model requests data instead of guessing.
Independently evaluated against the architecture patterns used by Segment, Palantir, Stripe Radar, Linear, VS Code, GitHub Copilot, and Shopify. Held up against every comparison.
~$3/month AI inference cost per dealership. Cloud sync $0–$25. Hardware: $0–$800 one-time (runs on existing bay machines). No enterprise DMS pricing. No per-seat licensing. No hidden infrastructure fees. The cost model matches the floor it was built on.
omg, that’s amazing… sweet — that’s exactly what it is supposed to do :)
Alistair Cockburn — creator of Hexagonal Architecture, after reviewing the codebase
Turn-by-turn chat that queries 10 local databases per request — DTC definitions, TSBs, pinouts, harness routing, component locations, flowcharts, symptom bytes, and symptom-based procedures. Pulled from the vehicle’s actual OEM databases. Cites sources so the tech can verify.
Generates OEM-compliant 3Cs narratives (Complaint, Cause, Correction) with measurements, TSB citations, and the specific language auditors look for. OEM-specific compliance rules auto-loaded from VIN. Multi-operation support — handles overlapping labor, TSB-guided multi-phase repairs, repeat labor codes, and complex dependency chains in a single narrative. Structured-output enforcement. Labor code suggestion post-generation.
Pattern-based rules engine and semantic AI audit run in parallel. Catches missing measurements, vague language, logical flow gaps, undocumented tools. Results merged and sorted by diagnostic impact. Interactive correction workflow preserves the full audit trail.
Master tech diagnostic reasoning preserved through LoRA fine-tuning. Trains on approved stories AND rejected ones — with admin reasoning. Dealership-owned AI models. The OEM’s own chargeback window serves as the quality signal. Auto-training during idle.
Local WebSocket server connects the desktop to a phone with no cloud intermediary. Phone-based diagnostic chat, VIN scanning, document capture. Live PID streaming from OEM scan tool. Three-tier consent gate. Rolling token auth every 120 seconds.
Self-healing vision pipeline captures claim codes from legacy scan tools through screen OCR. Filesystem polling for binary claim data. Thread-safe deduplication. Schema-agnostic OEM database ingestion auto-discovers and maps unknown formats.
Two analytics panels in one view. Training Status — all users see per-OEM SLM model quality tiers (BEST / HEALTHY / WEAK / COLD) based on story count and approval rate. In-progress training detection, untrained story counts, LoRA version tracking. Fleet Comparison (ADMIN/FOREMAN only) — side-by-side rooftop breakdowns with fleet-wide totals. Server-side PostgreSQL RPC with 5-minute client-side cache.
Real-time RO status board for large-format shop floor monitors. CDP-based extraction from Tekion's web application — no API access required. Self-contained HTML dashboard served over local HTTP. Multi-device support: TV, tablet, and phone layouts from the same web adapter. Connection-loss state machine with hysteresis recovery (requires consecutive successes, not just a single poll). Vault caching for resilience. Manual controls: freeze/unfreeze, on-demand announcements, manual RO cards, scheduled recurring announcements. Configurable dealership name.
Real-time direct messaging between technicians in the bay. No phone. No yelling across the shop floor. Slide-out panel from the desktop application. Group conversations with name-filtered participant selection. Read receipts, unread badges. Offline-first: messages write locally and sync to the cloud when connected. Rate-limited and emoji-blocked for workplace-appropriate professional communication. Built on the same Supabase real-time infrastructure and sync pipeline as the rest of the platform — no separate chat service required. Feature-flagged for controlled rollout.
Architecture diagrams prove structure. Video proves existence. Recordings of the desktop application running on a machine in a transmission bay — not a mockup, not a prototype, not a slide deck.
Turn-by-turn AI-guided diagnosis. Queries multiple OEM databases per request. Sources cited in every response. Live state cards populate from each AI turn. Running offline with local SLM inference.
3Cs narrative generation (Complaint, Cause, Correction). OEM-specific compliance rules loaded from VIN. DTC auto-extraction. Labor code suggestion. PII-scanned. Dual-audited. Saved with tamper-evident hash chain.
Real-time RO status extraction from Tekion via Chrome DevTools Protocol. Multi-device dashboards (TV, tablet, phone). Connection-loss state machine with hysteresis recovery. Manual controls, announcements, vault caching.
Every claim on this page is verifiable against actual source code — not a pitch deck, not a whiteboard diagram. Below are the call graphs, port boundaries, and data flows traced directly from the codebase. The flow is verified. The port boundaries are real. The code is the documentation.
Why this is defensible: PII is scrubbed before the story touches any network. Post-generation verification cross-references every connector and pin against the vehicle’s actual netlist database. The AI is constrained to structured output with controlled generation — it cannot “fill a gap with a guess.” The audit trail is cryptographically tamper-evident. If an OEM charges back, the dealership has a hash-verified chain of every edit, every prompt, and every audit flag — not a Word document.
8 database categories per vehicle: DTC definitions, flowcharts, TSBs, pinouts, harness routing, component locations, symptom bytes, symptom procedures. All read through abstract ports — zero OEM-specific imports exist in the domain layer. The schema scanner means a new OEM database format is discovered and mapped without new code. The diagnostic shell queries all databases in parallel per user question and cites the specific source in every response.
Self-healing: When vision confidence degrades — due to a tool update, UI change, or resolution shift — the system runs on-device calibration. A validation gate measures whether calibration improved accuracy. If it made things worse, the system rolls back automatically. No cloud retraining pipeline. No manual intervention. The system monitors itself and fixes itself.
get_organization_stats aggregates per-rooftop story counts, approval rates, and fleet-wide totals server-side. No raw narrative data pulled to the workstation.
Fleet cache → 5-minute TTL client-side cache with manual invalidation from the Rooftop Management panel
Health visibility → real-time sync status indicator in the sidebar — Ready, Unstable, Failed, or Offline — polled continuouslyFailure is visible, not silent: The dual-storage pattern (local vault + remote storage) means no data is lost when offline. The sync outbox is a durable database, not an in-memory buffer — a power loss during an offline period loses nothing. The health indicator shows sync health in real time so ops can see degradation before it becomes data loss.
Hexagonal at every layer: The capture service is constructed fresh per capture — zero persistent state. All dependencies are injected through abstract ports: vision extraction, local persistence, and remote storage. Processing runs in a background thread so VLM inference never blocks the UI. Every captured document passes through PII scanning before persistence or sync.
Why this is a moat: The OEM’s own chargeback decisions close the loop. A rejected story is training data for what not to write. An approved story that passes audit is training data for what to write. Every technician’s diagnostic reasoning, every successful warranty narrative, every chargeback lesson — absorbed into the model instead of walking out the door when the tech goes home. After a year in the bay, the model has learned from thousands of real claims, across every manufacturer the shop services. That trained model is the dealership’s IP — an asset that grows more valuable with every repair order, and that no other shop has. A competitor would need years of deployment data to replicate this, and the training loop itself is patent-protected.
PII scanner alone is a competitive moat: Of 16 competitor products analyzed, zero perform PII scanning before data leaves the device. Most stream VINs and repair histories to consumer-tier AI APIs with no sanitization. The three intercept points (save, sync, training export) mean PII is caught at every egress boundary — even if one check is somehow bypassed, the next one catches it.
vault.get_training_dashboard_stats(rooftop_id) queries training_jobs table (latest SUCCESS per OEM) + stories table (per-OEM approval rates) + active PENDING/RUNNING jobs + count_untrained_stories()
Tier logic → BEST (500+ stories, 90%+ approval) / HEALTHY (50+ stories, 80%+ approval) / WEAK (below thresholds) / COLD (no training runs). Composite badge: story count + approval rate, both from actual data — no estimates.
UI rendering → Summary stat cards (TRAINED OEMs, IN PROGRESS, UNTRAINED STORIES, BEST MODELS) + per-OEM rows with tier badge, story count, approval rate, LoRA version. In-progress OEMs highlighted in gold.
FLEET COMPARISON (admin/foreman only):
Role gate → DashboardController checks current_user.role — ADMIN and FOREMAN see fleet panel; TECHNICIAN sees only local stats
Data source → SyncCoordinator.get_fleet_stats() checks 5-minute TTL cache. On miss, calls remote_storage.pull_organization_stats(org_id)
Server-side compute → PostgreSQL RPC get_organization_stats(org_id) aggregates fleet-wide totals and per-rooftop counts server-side — zero raw narrative data transferred
UI rendering → Fleet stat cards (5 cards: total, approved, rejected, pending, approval rate) + per-rooftop table with own rooftop gold-highlighted
ROOFTOP MANAGEMENT (admin-gated, behind admin PIN):
Refresh → remote_storage.pull_rooftops(org_id) → GET /rest/v1/rooftops filtered by org_id
Add → remote_storage.register_rooftop(org_id, name, display_name) → POST with optional nickname field (e.g., "Chevy Dealership")
Update → remote_storage.update_rooftop(id, {name, display_name, location_code}) → PATCH
Deactivate → soft-deactivate via timestamp rename → original name freed for reuse
Cache invalidation → every mutating operation calls sync_coordinator.invalidate_fleet_cache() → next dashboard load pulls fresh dataWhy this matters to an acquirer: Fleet comparison operates entirely at the database layer — no DMS integration required. The Rooftop Management panel lets an organization add, rename, and deactivate dealerships from within the application itself, without touching Supabase directly. display_name support means rooftops can carry human-friendly nicknames alongside their legal names. The PostgreSQL RPC function runs server-side aggregations (counts, approval rates by status) — no raw narrative payloads leave the database. The Training Status panel gives every user in the organization a single glance at which OEMs have trained models, what tier they've reached, and how many stories are still untrained. All five new port methods on BaseRemoteStorage are hexagonal-compliant, with mock implementations for local testing.
What the deep scan surfaced. 50+ code-verified subsystems organized by category — from the diagnostic shell down to the infrastructure services that keep production running. Every entry here exists in the source code. No marketing. No roadmap.
get_organization_stats) — aggregation runs server-side, zero raw narrative data transferred. 5-minute client-side cache in SyncCoordinator with manual invalidation from Rooftop Management. Supabase REST API transport with mock fallback.IVaultRepository.get_training_dashboard_stats() — queries training_jobs and stories tables locally. Introduced with VaultDB migration v22.BaseRemoteStorage — all hexagonal-compliant with mock implementations./ (TV, card grid), /tablet (responsive clamp-based grid), /phone (vertical list with horizontal card scroll). Card grid with RO#, vehicle, customer, technician, flag badge, VIN, odometer. Configurable dealership name in header. 30-second auto-refresh (60s on phone for bandwidth). /data?fields= payload optimization for mobile. Freeze overlay with timestamp. Footer navigation across all three views.core/messaging_service.py), not in the adapter.Responded personally and posted public endorsement to 31,497 LinkedIn followers. “That’s exactly what it is supposed to do.” Cockburn co-authored the Agile Manifesto and published the definitive hexagonal architecture reference in 2025.
May 2026. 21 source files read directly — no documentation, no pitch. Verdict: “Genuinely well-architected application.” Hexagonal pattern confirmed as “implemented, not just named.” Dependency injection auditable and explicit. Degradation strategy consistently applied.
Architecture compared against Segment (multi-source normalization), Palantir (ontology layer), Stripe Radar (audit-grade ML), Linear (local-first sync), VS Code (extension architecture), GitHub Copilot, and Shopify. Held up against every comparison.
Responded personally: “I do enjoy hearing about unusual uses for SQLite.” Full architecture post published and approved on the SQLite Forum. Eight databases per vehicle, WAL mode, SHA-256 hash chains.
sqlite.org/forumWarranty narrative generation. Diagnostic state capture. Self-healing vision pipeline. Multi-OEM schema normalization. Distributed local AI training. Dual-provider live hot-swap. 204 claims mapped to specific code paths. Independently validated against prior art.
16 companies analyzed against public materials. None has demonstrated offline capability, local inference, PII scanning, database agnosticism, AI provider hot-swap, shop floor display integration, inter-technician messaging, or hexagonal architecture in a marketed offering.
The data room exists to answer every question a technical team would ask. No marketing. No white paper written in reverse. Just source-level evidence.
I’m not a startup founder. I’m not looking for press. I’m a transmission guy who got tired of watching the knowledge walk out the door. I built something because nobody else was going to.
The questions an acquirer's engineering team will ask during technical diligence — each traced directly against source code, not documentation. No marketing. No assumptions. Answers verified June 2026.
core/system_prompt_builder.py — all three live adapters call build_warranty_system_prompt(). Diagnostic shell prompts: core/shell/prompt_templates.py. Audit prompt: core/audit_prompts.py.AIProvidersRegistrar now wires agent_proxy.set_diagnostic_adapter(diag_ai) during registration, and SwappableAgentProxy.update_key() forwards the new key to both targets in sequence. A key rotation reaches both clients. The two adapters still use independent genai.Client instances (different models, different http_options), but key rotation is synchronized.
core/shell/schemas.py: DiagnosticResponse and DiagnosticResponseFull constrain every field the LLM can return (DTC, system, interactive step, parts flagged, sources, highlights). The audit prompt enforces a JSON schema with is_compliant, feedback, and questions.diagnostic_service.py line 43. OEM profile overridable via manufacturer resolver; user-lockable with set_temperature() (clamped 0.0–1.0) to prevent further profile overrides.search_service.py build_context() injects eight local data sources per prompt: semantic text, DTC definitions, documents, component locations, symptom bytes, netlist/pinouts, harness, TSBs, flowcharts, symptom procedures. The LLM is given the data — it doesn't guess.search_service.py _BUDGET caps each context field (pinout at 8k chars, TSB at 500k) to stay within Gemini's 1M token limit. Truncation logs a warning.core/audit_prompts.py provides a separate system prompt checking for vague language, missing measurements, and logical gaps. warranty.py run_audit() runs on a background thread. Issues open an AuditPopupWindow; each answer triggers regeneration and re-audit, with prior answers fed back to prevent repetition.diagnostic_service.py _auto_search_loop(): the LLM can set needs_more_info: true with a search_query. The system executes a new database search and retries. Capped at 2 iterations.
warranty_tool.* references in test_gemini_client.py and test_story_vault_separation.py) are gone — both files deleted and replaced by test_warranty_core.py. All 36 remaining logic/test-expectation failures (schema scanner, provider factory, backup service, sync tests, DI container) have been resolved.test_system_prompt_builder.py verifies the centralized warranty prompt builder — default GM persona, OEM profile injection via resolver, admin feedback rule injection.test_audit.py (35+ tests) and test_audit_patterns.py cover every external constraint layer: missing measurements, vague language, undocumented tools, time justification, logical flow, and the full run_pattern_audit() pipeline with deduplication.test_local_slm_adapter.py covers warranty story generation, streaming, labor code suggestion, audit, and OCR analysis. test_validate_swap.py tests swappable proxy mechanics — swap validation, rollback on failure, OEM LoRA reload. test_oem_routing.py tests per-OEM LoRA routing. test_slm_pipeline.py covers training data export — PII scrubbing, encryption/decryption, admin permission enforcement, remote narrative fetching.MockAgentAdapter (implements IAgentProvider — fixed responses for warranty story generation, audit, OCR, labor suggestion, DTC advice, service info) and MockDiagnosticAIAdapter (safe defaults for chat, embeddings, file upload, metadata extraction). The LLM itself is not unit-tested — it's an external dependency, integration-tested through the provider interface.manufacturers/ (GM, Subaru, Mazda) document warranty compliance rules, narrative requirements, audit rules, and OEM-specific terminology. Built from publicly available sources — NHTSA-hosted bulletins, OEM warranty administration manuals (public documents), I-CAR position statements. No OEM database was accessed to build any profile. The ManufacturerResolver maps VIN first-3-characters to these profiles; system_prompt_builder.py injects OEM-specific persona, rules, and terminology into AI prompts. Same code, different OEM compliance.build_schema_variants.py creates variant databases with intentionally shifted column names (Mitchell1, Alldata, Identifix) to verify the scanner discovers and maps non-standard schemas regardless of OEM. test_schema_scanner.py (30+ tests) proves the scanner works against any naming convention.requirements.txt lists 37 packages across 10 labeled sections. Every missing dependency is now present: google-genai, keyring, pymupdf, sqlite-vec, onnxruntime, transformers, pydantic, sounddevice, soundfile, edge-tts, SpeechRecognition, mss, pdfplumber, pywinstyles, keyboard, numpy, cryptography, qrcode — all with minimum versions.llama-cpp-python and just-playback — both require an MSVC compiler to build from source). A separate requirements-dev.txt provides pytest, pytest-mock, and pytest-cov..spec file referenced in the original audit no longer exists in the project tree. The project runs from source. The google.generativeai → google.genai migration flagged by the audit was completed in the source code. A production PyInstaller build would reference the current requirements.txt (which already documents all hidden imports). This is a straightforward post-acquisition productionization step.
core/, adapters/) is platform-agnostic Python. Only the UI layer (ui/, customtkinter) is Windows-tied. Porting to macOS or Linux requires a UI rewrite but zero core changes. The PocketBridge mobile companion already provides a web interface for phone access.
ui/views/warranty.py → core/system_prompt_builder.py → adapters/gemini_diagnostic_adapter.py in an afternoon. The architecture enforces the dependency direction.maps/ directory contains architecture-atlas, dependency-matrix, and pipeline-flowcharts. The Faux DB playbook documents the synthetic data pipeline. A triaged issue list is documented — a new contributor has an onboarding map on day one.llama-cpp-python) is optional — Gemini API works without it.ARCHITECTURE.md. Months 2–3: diminishing support as the team takes ownership. Standard solo-founder acquisition pattern.
core/crash_reporter.py (120 lines) installs as both sys.excepthook and threading.excepthook — every unhandled exception on any thread is captured. Structured JSON crash reports are written to the logs directory with timestamp, app version, Python version, platform, exception type, message, and full traceback.core/crash_reporter.py. If a telemetry_dsn is configured in settings.json, crash reports are securely uploaded in a non-blocking background thread.before_send interceptor that scrubs all Gemini keys, 17-char VINs, phone numbers, and emails in local variables and stack traces before any data leaves the local workstation. If no DSN is provided, Sentry silently de-initializes with zero overhead.
_save_settings() in config.py writes to a temp file first, then uses os.replace() for an atomic rename. A mid-write process termination cannot truncate settings.json. The non-atomic write gap documented in the May 2026 audit is fixed.ConnectionPoolManager.close_all_pools() is registered with atexit for clean connection pool closure. DiagnosticShellController.shutdown() provides ordered shutdown: flag → stop polling loops → stop I/O → cancel network → shutdown pools → join threads with timeout (3 seconds for vision thread).manufacturers/ directory contains 15 manufacturer directories — substantially more than the original audit's "empty stubs" characterization.
Tesla — disabled pending review (no public diagnostic data source available)
Faux DB (synthetic, for testing): Apex, Amanda, Faye, Richard, Valentino — 5 fictional OEMs
All nine production-ready profiles were built from public sources (NHTSA bulletins, warranty administration manuals, I-CAR position statements). No copyrighted OEM database was accessed. The actual diagnostic databases behind the profiles are copyrighted, licensed products — an acquirer with existing OEM relationships supplies the data.
9AX...) through the entire pipeline — VIN resolution → OEM profile → compliance rule injection → AI prompt → narrative generation → audit — and verify the output matches the fictional OEM's compliance rules. Same code, different profile → different behavior. That proves the architecture works.get_organization_stats(org_id) defined in core/supabase_schema.sql. The function performs a single SQL query joining public.rooftops and public.synced_narratives, aggregating story counts by status (approved, rejected, pending) across all rooftops in the organization. Fleet-wide totals are computed in the same query.narrative_json column is encrypted and is never accessed by this function. The workstation never receives raw story data from other rooftops.SyncCoordinator with a 5-minute TTL. The Rooftop Management panel invalidates the cache on any rooftop add, rename, or deactivate — the next dashboard load pulls fresh aggregates.current_user.role. Only ADMIN and FOREMAN roles see the fleet comparison panel. Technicians see only their own rooftop's local statistics. Security model: The PostgreSQL RPC runs as SECURITY DEFINER — the RLS bypass is intentional and limited to aggregate counts only. The encrypted narrative_json payload is not decryptable at the database layer. This is documented in the SQL file and the adapter code.
remote_storage.pull_rooftops(org_id) fetches all active rooftops via GET /rest/v1/rooftops?org_id=eq.{id}&order=name.ascremote_storage.register_rooftop(org_id, name, display_name) creates a new rooftop via POST. The display_name parameter supports human-friendly nicknames (e.g., "Chevy Dealership") distinct from the legal nameremote_storage.update_rooftop(id, {name, display_name, location_code}) modifies existing rooftop fields via PATCH(org_id, name) so the original name can be reused immediatelyBaseRemoteStorage (in core/interfaces/storage_provider.py): pull_rooftops, register_rooftop, update_rooftop, deactivate_rooftop, and pull_organization_stats. All are implemented in adapters/supabase_storage_driver.py and no-oped in adapters/mocks/remote_storage_adapter.py — the system never crashes on missing cloud connectivity. The display_name column was added to the rooftops table via ALTER TABLE rooftops ADD COLUMN IF NOT EXISTS display_name TEXT DEFAULT '' — a non-destructive, idempotent migration safe for re-execution.sync_coordinator.invalidate_fleet_cache(). The next dashboard load fetches fresh aggregates, ensuring the Fleet Comparison panel never shows stale data after a rooftop change.
requirements.txt completeness ✓ PocketBridge TLS ✓ _save_settings() atomic write ✓ Dual Gemini key rotation ✓ OEM LoRA short-retention ✓ Sentry-SDK Observability & Local PII Scrubber ✓ Selective Lazy-Loading GUI (<3s boot) ✓ Handoff Sync Freeze ✓ TclError Layout Packing ✓ FPDF Cross-Library Resilience ✓pdi_config.json PII (30 min), Module-level _settings (2 hr), WAL mode gaps (2 hr), ConsentGate race (2 hr), sqlite-vec silent failure (15 min), OEM Router accumulation (1 hr), print() statements (15 min), missing __init__.py (5 min), log PII (30 min), duplicate import (5 min), hotkey hook (1 hr), vision shutdown delay (5 min).
core/shell/agent.py — Removed. No longer exists.core/database.py no-op stubs — Present. No callers depend on them. Low priority.core/repository.py — Removed. No longer exists.core/models.py / enterprise_models.py duplication — Both exist. Consolidation recommended.requirements.txt is complete at 37 packages across 10 labeled sections, with dev dependencies cleanly separated.BaseRemoteStorage, all hexagonal-compliant with mock fallbacks.