YardPro
YardPro is a comprehensive vehicle dismantling yard management system for automotive recyclers and breakers. It handles the complete workflow from vehicle intake through VIN decoding, part cataloging, inventory management, sales, invoicing, part interchange matching, label printing, and multi-channel marketplace integration (eBay + Facebook).
Solution Architecture
KeDevO.YardPro/
├── Domain/ # Core domain model (23 entities, 10 interchange, 20 enums, 5 VOs)
├── Contracts/ # Shared DTOs (50+ DTOs for API communication)
├── Infrastructure/ # EF Core persistence, repositories, security, storage
├── Application/ # AutoMapper profiles, license & vehicle services
├── Integration/ # External API clients (eBay REST, Facebook Graph v21.0)
├── API/ # ASP.NET Core Web API (20 controllers, 177+ endpoints)
├── Web/ # Blazor Server (18 pages, 7 admin tabs, 4 vehicle detail tabs)
└── PasswordHashSalt/ # Console utility for credential seeding
Clean Architecture layers: Domain → Infrastructure → Application → API / Web
Features
Vehicle Management
- VIN decoding via NHTSA API
- Full vehicle lifecycle tracking
- Vehicle catalog import from CSV
Parts Inventory
- Part cataloging with condition, pricing, status lifecycle
- Part interchange engine
- Batch label printing with QR codes
Customer Management
- Customer CRUD with typed classification (Retail, Wholesale, Transporter, etc.)
- Invoice and payment tracking
eBay Integration
- OAuth authentication
- Listing creation from templates
- Order sync and fulfillment
- Category mapping
Facebook Integration
- Page posting
- Engagement tracking
- Multi-destination support
Label Printing
- Customizable label templates
- QR code generation
- Part info + vehicle info on labels
Tech Stack
| Layer |
Technology |
Version |
| Runtime |
.NET |
10.0 |
| API |
ASP.NET Core Web API |
10.0 |
| Frontend |
Blazor Server (Interactive Server) |
10.0 |
| Database |
SQLite |
via EF Core |
| ORM |
Entity Framework Core |
10.0.2 |
| Auth |
JWT Bearer (HMAC SHA-256) |
— |
| Mapping |
AutoMapper |
16.0.0 |
| API Docs |
Swagger / OpenAPI |
10.1.1 |
| CSV Import |
CsvHelper |
33.1.0 |
| QR Codes |
QRCoder |
1.7.0 |
| eBay |
eBay REST APIs (Inventory, Fulfillment, Taxonomy) |
— |
| Facebook |
Facebook Graph API |
v21.0 |
| VIN Decode |
NHTSA vPIC API |
Free / Public |
Worker Roles
| Role |
Level |
Description |
| God |
0 |
System owner — full access to all companies and features |
| SuperAdmin |
1 |
Platform administrator — cross-company management |
| Admin |
2 |
Company administrator — company-scoped management |
| Manager |
3 |
Yard manager — yard operations oversight |
| Dismantler |
4 |
Dismantles vehicles, catalogs parts |
| Packer |
5 |
Packages parts for shipping |
| Accountant |
6 |
Financial operations and invoicing |
| SalesWorker |
7 |
Handles sales and customers |
| YardWorker |
8 |
General yard operations |
| Viewer |
9 |
Read-only access |
Domain Model
Core Entities (23)
| Entity |
Description |
| Company |
Multi-tenant business root |
| YardLocation |
Physical yard (optimistic concurrency via RowVersion) |
| Worker |
Employee with multi-role HashSet\<WorkerRole> |
| Vehicle |
Full vehicle record with VIN-decoded specifications |
| Part |
Inventory part with condition, pricing, status lifecycle |
| Customer |
Buyer/supplier with ContactInfo + Address value objects |
| Invoice |
Sales invoice with InvoiceLine and Payment collections |
| MediaAsset |
Polymorphic media (image/video) for vehicles and parts |
| StorageLocation |
Self-referencing hierarchical storage zones |
| RoleLicense |
Per-yard role seat caps |
| VehicleMake / VehicleModel |
Make/model catalog |
| VehicleCatalogEntry |
Pre-populated vehicle specifications |
| LabelTemplate |
Part label templates with layout config |
| LogEntry |
Structured audit log entries |
eBay Entities (5)
EbayAccount, EbayListing, EbayListingTemplate, EbayOrder, PartCategoryEbayMapping
Facebook Entities (3)
FacebookAccount, FacebookDestination, FacebookPostLog
API Endpoints (177+)
The API exposes 20 controllers:
| Controller |
Route |
Endpoints |
Key Operations |
| Auth |
api/auth |
1 |
JWT login |
| Vehicles |
api/vehicle |
9 |
CRUD, VIN lookup, search, filtering |
| Parts |
api/parts |
12 |
CRUD, reserve/sell, search, stats |
| Customers |
api/customer |
8 |
CRUD, invoices, vehicles per customer |
| Invoices |
api/invoices |
6 |
CRUD, payments |
| Media |
api/media |
4 |
Upload (1GB), download, reorder |
| Labels |
api/labels |
7 |
Label data, QR, scan lookup, templates |
| eBay |
api/ebay |
30+ |
Auth, listings, orders, templates, categories |
| Facebook |
api/facebook |
10+ |
Accounts, posts, destinations |
| Storage Locations |
api/storagelocations |
5 |
CRUD |
Web Pages (18)
| Route |
Page |
Description |
/ |
Home |
Dashboard with VIN/registration lookup |
/login |
Login |
Animated login page |
/vehicles |
Vehicles |
Searchable inventory with filters |
/vehicles/{id} |
Vehicle Details |
Tabbed: Overview, Parts, Media, Facebook |
/parts |
Parts |
Full parts inventory with stats |
/parts/{id} |
Part Details |
Part detail with media, interchange |
/customers |
Customers |
Customer management with filtering |
/invoices/{id} |
Invoice Detail |
Printable invoice with branding |
/ebay |
eBay |
Listings, templates, orders, sync |
/interchange |
Interchange |
Part interchange database |
/logs |
Logs |
System logs (God/SuperAdmin) |
/admin |
Admin |
Dynamic admin tabs (7 tabs, role-gated) |
Authentication Flow
- User submits credentials to
POST /api/auth/login
- API validates password (HMACSHA512) and returns JWT token with claims:
sub (email), workerId, CompanyId, role, username, companyName
- Web stores token in
ProtectedSessionStorage (encrypted, tab-scoped)
AuthMessageHandler attaches Authorization: Bearer <token> to all API requests
- On 401 response, user redirected to
/login
- Token lifetime: 1 hour
Deployment
| Service |
Server |
Domain |
Port |
| yardpro-api |
VPS2 |
api.yardpro.uk |
5000 |
| yardpro-web |
VPS2 |
yardpro.uk |
5001 |
| catalog |
VPS2 |
catalog.yardpro.uk |
5002 |