Technical Reference · For Engineering Diligence Teams

System Architecture.
The full picture.

Everything a technical buyer's team needs before asking questions: stack, data flow, AI layer, module structure, integration architecture, and security posture. This document is updated on every architectural change.

1,000+
API routes
220
Production modules
1,267
Callable feature surfaces
1.2M+
Lines of code
2,300+
Git commits
96
Frontend JS modules

The stack.

No proprietary infrastructure. No framework lock-in. Everything listed here is standard, replaceable, and readable by any senior engineer in the first hour.

LayerTechnologyWhy
RuntimeNode.js 20 LTSLong-term support, V8 engine, broad talent pool. Version pinned via .nvmrc.
HTTP frameworkExpress 4Minimal surface area. 1,000+ route handlers mounted via src/routes/_mount.js. No magic — every route is explicit.
Primary databaseSQLite via better-sqlite3Synchronous, zero-dependency, single-file. Runs on the dealer's machine with no network exposure. WAL mode + 5s busy_timeout on every connection. Singleton connection pool — no per-request open/close.
ORM (models only)Sequelize 6Used for Vehicles, Customers, Deals models. Raw SQL via src/helpers/sqlite.js for everything performance-sensitive.
Process managerPM2 (cluster mode)Multi-core utilization. ecosystem.config.js defines cluster mode, 1GB restart threshold. Online in under 3 seconds on restart.
Reverse proxynginxSSL termination (Let's Encrypt), gzip, cache headers. Port 4011 internal, 443 external.
FrontendVanilla JavaScript96 versioned JS modules loaded on demand. No React, no Vite, no build step. Any engineer can open a file and read it. Cache-busted via version hashes.
AI inferenceAnthropic Claude APIBrain / coaching / deal structuring layer. Data-retention: none (zero training on dealer data). Local simulation engine handles lender routing and nightly reweighting with zero external API calls.
AuthJWT + bcryptjsSigned tokens, single-login enforcement via active_sessions table. requireAuth middleware on all sensitive mutations and financial data GET endpoints. Public analytics, lead capture, and webhook endpoints use rate limiting instead. Demo accounts flagged with demo: true for fast token validation.
PaymentsStripeCheckout sessions for subscription tier. Webhook validates payment state. Kill switch enforced via license check on API access if payment >7 days overdue.
Real-timeSocket.io 4Live deal desk updates, BDC queue notifications, equity alert push.
TelephonyTwilio / TelnyxSMS inbox, AI voice BDC (Vapi.ai + ElevenLabs), inbound call screen pop.
EmailResendTransactional email for deal notifications, stip alerts, morning briefings.
ChartsChart.jsAll data visualization in the frontend. No external charting service.
PDF generationPDFKitDeal jackets, adverse action letters, compliance reports. Generated server-side.

Data flow.

From DMS input to AI output — the complete path a deal takes through the system.

┌─────────────────────────────────────────────────────────────────────────┐
  DEALERSHIP DATA IN                                                       
  CSV export from DMS (legacy DMS, legacy DMS providers, cloud DMS providers, legacy F&I software, legacy CRM software)  
  → /api/ingest/upload → parsed → normalized → SQLite                     
└──────────────────────────────┬──────────────────────────────────────────┘
                               
                               
┌─────────────────────────────────────────────────────────────────────────┐
  CORE DATABASE LAYER                                                      
                                                                           
  louieauto.db        Deals, Customers, Vehicles, DealerUsers, AuditLog   
  simulation.db       sim_runs, sim_scenarios, lender_outcomes             
  dealership-data.db  InventoryCurrent, CreditStaffRoster, moat signals   
  [module].db         Per-module isolated DBs (bdc.db, lead-intake.db...) 
                                                                           
  All queries filtered by dealershipId(req) — zero cross-tenant leakage   
└──────────────────────────────┬──────────────────────────────────────────┘
                               
                               
┌─────────────────────────────────────────────────────────────────────────┐
  AI BRAIN LAYER                                                           
                                                                           
  src/agent.js          Nightly cron: lender reweight, morning briefings  
  src/local-brain.js    Local pattern matching (zero API cost)             
  simulation/           Deal simulation engine (SQLite, no external API)  
                                                                           
  Hybrid routing:  local patterns first → Claude API fallback             
  Every API call:  data-retention: none — PII stripped before send        
└──────────────────────────────┬──────────────────────────────────────────┘
                               
                               
┌─────────────────────────────────────────────────────────────────────────┐
  CLOSED-LOOP LEARNING                                                     
                                                                           
  Deal outcome logged → lender_outcomes table                             
  1:30am nightly → sync-sims-to-closed-loop.js                            
  lender_weight_cache updated → getWeights(dealershipId) returns          
  freshly calibrated routing on every subsequent deal                     
└──────────────────────────────┬──────────────────────────────────────────┘
                               
                               
┌─────────────────────────────────────────────────────────────────────────┐
  FRONTEND OUTPUT                                                          
                                                                           
  96 versioned JS modules · 1,267 open__() entry points                  
  Role-based nav: GM / Desk / F&I / BDC / Service / Owner                 
  Real-time updates via Socket.io · Mobile-responsive                     
└─────────────────────────────────────────────────────────────────────────┘

The AI layer.

13 dedicated AI files. Three tiers: local pattern engine (zero cost), Anthropic Claude (coaching and complex reasoning), and the closed-loop simulator (nightly calibration, no external calls).

Tier 1 — Local (Zero API Cost)

src/local-brain.js — Pattern matching engine. 3,059 operator-encoded rows across 12 tables. Handles lender routing, objection responses, pricing velocity, and stocking recommendations without any external API call. Lazy singleton SQLite connections — opened once per process, not per request.

Confidence threshold: 0.65. Below that, escalates to Tier 2.

Tier 2 — Claude API (Coaching Layer)

Anthropic Claude Sonnet — Used for: Brain Command Center (natural language query over live dealer data), deal coaching, adverse action explanation, morning briefing narrative, and any query that requires judgment beyond pattern matching.

All calls: data-retention: none. PII stripped before transmission. No dealer data trains Anthropic models.

Tier 3 — Closed-Loop Simulator (Nightly, Zero Cost)

simulation/ + scripts/sync-sims-to-closed-loop.js — The real moat. Every funded or declined deal is logged with its outcome in lender_outcomes. At 1:30am nightly, the sync script reweights the lender routing matrix using the store's own deal history. getWeights(dealershipId) returns a fresh probability map consumed by matchLenders() on every deal submission. After 12 months of operation, routing accuracy is calibrated to that specific store's deal mix — a competitor with no outcome data cannot match this.

// Closed-loop learning cycle — runs every deal

1. Deal submitted  →  matchLenders(deal, getWeights(dealershipId))
                      ↑ reads nightly-updated weight cache

2. Lender decision  →  lender_outcomes row written
                       {lender, decision, days_to_fund, loan_amount}

3. 1:30am nightly  →  sync-sims-to-closed-loop.js
                      Reads lender_outcomes → recalculates approval probability
                      per lender per FICO band → writes lender_weight_cache

4. Next deal       →  routing uses updated weights
                      Loop compounds every day the store operates

900+ capabilities — by domain.

Every module is live, deployed, and included in the perpetual license from day one. Console-verifiable: 1,267 callable open__() functions in the live demo (count grows during the ~20s page-load window as scripts finish initializing — this is the settled figure).

Deal Desk & Finance
~40 modules
Desking Pro, F&I menu, reserve optimizer, lender hub, deal coach, deal jacket, stip checker V1+V2, eContracting, eSign, rate watch, deal P&L, deal board, remote F&I, fraud detection
AI & Brain Layer
~30 modules
Brain Command Center, deal coach AI, trade appraisal AI, credit repair intelligence, social intelligence, market intelligence, competitor intel, email campaign builder, daily DOC generation, digital retail AI
Inventory & Acquisitions
~30 modules
Inventory analysis, bookout, dynamic pricing, stocking buy list, auction analyzer (ACV/Manheim/eBay), wholesale hub, listing syndication, photo manager, VIN decoder, KBB ICO, market scan, lot locate, recon app
BDC & CRM
~25 modules
BDC command center, AI voice BDC, lead intake + router, lead timer, appointment hub, unsold reactivation, customer 360, customer LTV, cross-sell dashboard, referral loyalty, conquest intel, geofence zones
Compliance & Legal
~20 modules
Compliance dashboard, OFAC per-deal, fair lending monitor, document vision (AI scan), adverse action letters, buyers guide, agreements analyzer, legal response center, FCRA-compliant stip workflow
Service Drive
~25 modules
Service drive complete, equity alerts, RO creation + management, advisor coach, service-to-sales pipeline, absorption tracking, video MPI, technician dispatch, loaner management, recall scanner, parts inventory
HR, Payroll & Accounting
~20 modules
Payroll manager (federal + multi-state), accounting GL, commission calculator, commissions tracker, HR center, DMS sync, W-2/941/940 framework, admin settings, role-based access control (21 roles)
Marketing & Digital
~15 modules
Ad generator, Facebook Marketplace push, campaign blaster, email campaign builder, marketing attribution, marketing ROI, reputation monitor, geofence marketing, digital retailing, website builder
BHPH / Special Finance
~15 modules
BHPH dashboard + deal + underwriting, collections tracker, skip trace, credit repair, BK attorney program, GPS integration, repo management, ACH enrollment, promise-to-pay, portfolio management
Independent verification: Open the live demo, wait for the page to fully finish loading (initialization runs ~20 seconds as scripts come online), open browser console, run Object.keys(window).filter(k => k.startsWith('open')).length. Settles at 1,267 — more than the 220 marketed. The gap is the right direction.
Join the Waitlist → Full module directory →

Integration architecture.

CSV-via-email today. Full REST API layer built — gated by DMS partner agreements, not engineering. An acquirer with existing DMS API access flips to real-time immediately post-close.

Production today: CSV ingest

Path: Dealer emails daily DMS export → /api/ingest/upload → auto-column mapping → normalized into SQLite.

Supports: legacy DMS, legacy DMS providers, cloud DMS providers, legacy F&I software, legacy CRM software, legacy CRM software, and any DMS that exports CSV (all of them).

Limitation: Daily refresh, not real-time. Sufficient for morning briefing and coaching modules. Insufficient for live deal desk integration at the second-by-second level.

Architecture built: REST API layer

1,000+ API routes in src/routes/, all documented. Real-time DMS integration requires vendor partner agreements:

legacy DMS Partner Program · legacy DMS providers RCI Network · cloud DMS providers Developer Portal · legacy F&I portals API · legacy CRM software

Acquirer advantage: Any DMS platform with an existing partner agreement flips LouieAuto to real-time on day one post-close. The integration engineering is done — only agreement transfer required.

Integration typeStatusWhat's needed to go live
CSV / flat-file DMS✓ LiveNothing. Works today on any DMS.
Twilio SMS / Voice✓ LiveTwilio account credentials in .env.
Stripe billing✓ LiveStripe secret key + price IDs in .env.
Anthropic (AI Brain)✓ LiveAPI key in .env. Enterprise agreement for volume pricing.
legacy DMS API (real-time)Architecture readylegacy DMS Partner Program membership (acquirer likely has).
legacy DMS providers RCI (real-time)Architecture readyRCI Network agreement (acquirer likely has).
legacy F&I portals / legacy CRM softwareArchitecture readyAPI partner agreement.
Credit bureaus (full pull)Soft pull readyHooks built for iSoftPull / 700Credit. Activates when API credentials are added in provider setup. Hard pull requires FCRA permissible purpose agreement.

Security posture.

Hardened for dealer operations. Not SOC 2 certified yet — that's the Q3 2026 milestone. What is in place today covers the controls that matter for going live.

ControlStatusImplementation
Authentication✓ LiveJWT signed tokens · bcrypt password hashing · single-login enforcement (session invalidated on second login) · fail-closed on DB errors (503, not pass-through)
Authorization✓ LiveAuth required on POST/PUT/DELETE and sensitive GET endpoints (deal data, customer data, financials) · Public read-only endpoints (market scan, health checks) have rate limiting · dealershipId(req) on every authenticated query — zero cross-tenant data access possible
SQL injection✓ FixedParameterized queries throughout · table names quoted and sanitized where dynamic SQL is unavoidable (audit.js)
Data isolation✓ LiveEach dealership's data filtered by dealershipId at query level · no shared cloud DB · SQLite on-premises
HTTPS / HSTS✓ LiveLet's Encrypt SSL · HSTS max-age=31536000; includeSubDomains · enforced at nginx layer
Security headers✓ LiveHelmet.js · CSP configured · X-Frame-Options · no clickjacking surface
Rate limiting✓ Liveexpress-rate-limit on all public endpoints · magic-link endpoint: 3 per hour per IP · deal create: 50 per hour
FTC Safeguards / GLBA✓ CompliantPII stripped before any LLM call · financial data bucketed not transmitted raw · US-region infrastructure
AI data retention✓ LiveAnthropic API called with data-retention: none · no dealer data trains Anthropic models · JSONL portability on request
SOC 2 Type IIQ3 2026Control matrix and readiness roadmap in data room. Process gap, not security gap. Enterprise deals require it — available 60–90 days post-engagement.

API Authentication Posture

Transparency on endpoint classification — what requires auth, what's public, and why.

Endpoint CategoryAuth RequiredReasoning & Examples
Sensitive mutations✓ YesPOST/PUT/DELETE operations on deal data, customer records, financial details, inventory. e.g. /api/deals, /api/customers, /api/ingest/upload
Financial & personal data✓ YesGET requests returning PII, credit profiles, pricing, commissions, payroll. e.g. /api/customer/360, /api/deals/{id}, /api/payroll
Admin / configuration✓ YesRole-based access control, user management, provider setup, compliance settings. e.g. /api/admin/*, /api/provider-setup
Public analytics & monitoringNo (rate-limited)Health checks, market scan aggregates, public demo data statistics. e.g. /api/health/score, /api/market-scan/public
Lead capture & webhooksNo (rate-limited)Public lead intake, contact forms, third-party webhooks (Stripe, integrations). Validation + rate limits protect from abuse. e.g. /api/leads, /api/webhook/*
Licensee data (demo account)No (rate-limited)Demo dealership shares metrics and case studies. Dealership ID is public; customer names and sensitive data are redacted. e.g. /api/demo/stats, marketing pages
Rate limiting on all public endpoints: Every unauthenticated /api/* route is protected by token-bucket rate limits (3–50 requests per hour per IP depending on endpoint sensitivity). Magic-link authentication endpoints capped at 3 per hour. This prevents enumeration and DDoS while permitting legitimate public access (lead forms, market data).

Deployment model.

Standard Ubuntu VPS. 48-hour cold deploy. An acquirer running a cloud-native stack can containerize and migrate to Kubernetes in one sprint.

# Full deploy sequence — 48 hours cold start

1. Provision server          (2h)
   Ubuntu 22.04+ · 4 vCPU · 8GB RAM
   nginx + Let's Encrypt · Certbot auto-renew
   Node.js 20 via nvm

2. Clone + configure         (2h)
   git clone → set .env
   npm install · pm2 start ecosystem.config.js

3. Seed dealer data          (4–8h)
   First DMS CSV import via /api/ingest/upload
   Lender matrix mapped to dealer's lenders
   Demo data available immediately

4. Staff orientation         (4h)
   GM walkthrough · BDC lead · F&I manager
   Role-based UI — no certification required

─────────────────────────────────────
Total: Live system processing real deals in 48 hours
DMS API integration (real-time): 30–90 days (agreement transfer)
Current production server

DigitalOcean NYC3 · 8GB/4vCPU · PM2 cluster mode · nginx reverse proxy · SSL via Let's Encrypt · Port 4011 internal · Automated nightly jobs via node-cron

Monthly infra cost: ~$48/month. Scales horizontally — add servers, point nginx upstream.

Containerization path

No proprietary infrastructure dependencies. The entire application is a standard Node.js process + SQLite files. Dockerizes in one afternoon. Kubernetes-ready in one sprint.

SQLite → Postgres migration path is 75% complete (USE_POSTGRES=true flag in .env switches the query layer).

Ready to evaluate?

The full data room — DMS exports, ActivityLog tables, lender matrix, SOC 2 readiness — is available under NDA. Or start with the live demo — no login required.

Join the Waitlist → Request data room