AI-powered automotive parts identification and diagnostics for independent repair shops.
PartSnap closes the diagnostic-to-parts gap. Snap a photo of a failed part — AI identifies it, matches it to the vehicle's VIN, resolves the OEM part number, checks pricing and availability, and drafts a repair order. OBD-II diagnostics, VIN decoding, recall checks, and DMS integration all in one system.
Built by Adam Normandin at Vector Data.
| Capability | Description |
|---|---|
| Visual part identification | Snap a photo at the lift — AI identifies the part, assesses condition, flags urgency |
| VIN decoding | NHTSA-powered VIN decode → exact year/make/model/trim/engine/transmission |
| OEM part resolution | Maps identified parts to OEM numbers with supersession awareness |
| OBD-II diagnostics | Bluetooth adapter → live DTC reading, freeze frame, live data dashboard |
| Recall & complaint lookup | NHTSA safety recall + consumer complaint database for any vehicle |
| Repair estimates | Parts list, real-world labor times, difficulty ratings, related parts |
| Order drafts | Parts counter approval workflow with DMS write-back |
| Multi-agent chat | Routes sales/technical/onboarding/support to specialized AI agents |
| Shop templates | Drop-in bot templates for pi/Claude-powered shop assistants |
┌──────────┐ Bluetooth ┌──────────┐ HTTP/WS ┌──────────────┐
│ OBD-II │ ◄──────────────► │ Mobile / │ ◄────────────► │ PartSnap │
│ Adapter │ ELM327 │ Browser │ │ API (FastAPI)│
└──────────┘ └──────────┘ └──────┬───────┘
│ │ │
Vehicle ECU Web Bluetooth API ┌─────────┴──────────┐
CAN bus or Native BLE │ │
┌──▼──────┐ ┌───────▼──────┐
│ Vision │ │ NHTSA APIs │
│ AI │ │ (VIN/Recall/ │
└─────────┘ │ Complaints) │
└──────────────┘
# Install dependencies
pip install -r requirements.txt
# Set up environment
cp .env.example .env
# Configure AI_PROVIDER and credentials in .env
# Run the API server
python -m uvicorn api.main:app --reload --port 8000
# Open API docs
open http://localhost:8000/docscd landing
npm install
cp ../.env.example .env.local
# Add GEMINI_API_KEY to .env.local
npm run devCopy skills/ and templates/ into your bot workspace, customize templates/USER.md with shop details, and wire up the skills.
| Method | Endpoint | Description |
|---|---|---|
POST |
/identify |
Upload part photo + optional VIN → identified part + OEM number |
POST |
/decode-vin |
Decode 17-character VIN → full vehicle details |
POST |
/diagnose |
OBD-II scan (live/emulator/manual) → DTC codes + recommendations |
POST |
/order-drafts |
Create supervised order draft from identification |
GET |
/order-drafts |
List order drafts (filterable by status) |
POST |
/order-drafts/{id}/review |
Approve or reject a draft |
GET |
/exports/orders.csv |
Export approved orders as CSV |
GET |
/health |
Service health check |
Full interactive docs at http://localhost:8000/docs (Swagger UI).
partsnap/
├── api/ # Python FastAPI backend
│ ├── main.py # App entry point + all endpoints
│ ├── models.py # Pydantic data models
│ ├── vision.py # Provider-agnostic vision identification
│ ├── vin_decoder.py # NHTSA VIN decode
│ ├── parts_lookup.py # OEM parts catalog resolution
│ └── obd_scanner.py # OBD-II adapter interface
├── skills/ # AI bot skills
│ ├── diagnostics/ # OBD-II codes, parts matching, repair estimates
│ ├── vehicle-data/ # NHTSA VIN decoder, recalls, complaints
│ └── web-search/ # Real-time parts pricing & availability
├── landing/ # Next.js landing page + chat
│ ├── page.tsx # Landing page with feature rows
│ ├── components/ChatHero.tsx # Chat interface with SSE streaming
│ ├── api/route.ts # Multi-agent chat API with lead capture
│ └── globals.css # Dark theme + animations
├── docs/ # Technical documentation
│ ├── obd-bluetooth-integration.md
│ ├── dms-integration.md
│ └── parts-database.md
├── templates/ # Deployment scaffolding
│ ├── SOUL.md # Bot personality
│ ├── AGENTS.md # Non-negotiable rules
│ └── USER.md # Shop-specific customization
└── .github/ # CI/CD + community
├── workflows/ci.yml # Lint, typecheck, tests
└── ISSUE_TEMPLATE/ # Bug report & feature request
Set AI_PROVIDER in .env to one of:
| Provider | Required keys | Notes |
|---|---|---|
pi |
None (uses local pi CLI) | Recommended for Claude-powered setups |
anthropic |
ANTHROPIC_API_KEY |
Direct Anthropic API |
openai |
OPENAI_API_KEY |
GPT-4 Vision |
gemini |
GEMINI_API_KEY |
Gemini multimodal |
openclaw |
OPENCLAW_TOKEN |
OpenClaw Gateway endpoint |
If unset, auto-detects in order: pi → openclaw → API keys.
| Adapter | Protocol | Price | Recommended |
|---|---|---|---|
| OBDLink MX+ | BT Classic + BLE | ~$100 | ✓ Best for shops |
| OBDLink CX | BLE only | ~$80 | ✓ iOS compatible |
| Veepeak OBDCheck BLE+ | BLE | ~$35 | Budget option |
| BAFX Products 34t5 | BT Classic | ~$25 | Android only |
See docs/obd-bluetooth-integration.md for full implementation guide.
Write-back to shop management systems:
- API-based: Tekmetric, Shopmonkey, AutoLeap, Shop-Ware
- File-based: Mitchell1, NAPA TRACS
See docs/dms-integration.md for integration details.
PartSnap is open source and welcomes contributions. See CONTRIBUTING.md for:
- Development environment setup
- Code standards (Python + TypeScript)
- Pull request process
- Testing guidelines
- How to add new skills or API endpoints
MIT — see LICENSE for full text.
Built by Adam Normandin at Vector Data.