
Joe Lohr
Senior Laravel Engineer building AI-powered compliance software
Island Lake, Illinois
I've been building websites and web apps for 15 years. Right now I'm the sole developer at Automotive Risk Management Partners, where I build and run the company's multi-tenant Laravel platform that car dealerships use for compliance, including the AI features that answer their compliance questions.
3,038 contributions in 2026
github.com/jlarmBusiest day: Wednesday, April 22, with 54 contributions
Experience
Automotive Risk Management Partners
Dec 2022 to Present
Laravel Web App Developer
- Sole developer of the company's compliance platform for car dealerships, a multi-database, multi-tenant Laravel app built on stancl/tenancy. I handle the architecture, security hardening, deployment and support.
- Built the compliance features dealerships use for the FTC Safeguards Rule and other requirements.
- Designed a five-level role hierarchy: admin, consultant, owner, manager and employee.
- Built a tool-using AI compliance assistant with tenant-scoped authorization, so its answers only draw on data the user can access.
- Built an iOS audit app that consultants use at dealerships to record audits and photos, even offline. It syncs to the platform through a Laravel API and gets audits done much faster.
- Diagnosed why autorisknow.com was missing from AI-generated answers, then shipped server-side rendering, sitemap fixes and structured data.
- Also built and run the marketing site, a help desk, a sales CRM, courses and quizzes, PDF reports and third-party integrations.
TurnKey Digital
Mar 2011 to Dec 2022
WordPress Developer
- Built custom WordPress sites for local businesses.
- Shot product and location photos and video for clients.
Projects
ARMP compliance dashboard
Laravel, stancl/tenancy, Inertia, Vue, TypeScript
Multi-tenant compliance platform for car dealerships, with a separate database per dealership, five role levels, courses and quizzes, vendor and audit forms, PDF reports, and an AI assistant that answers compliance questions from tenant-scoped data.
ARMP help desk
Laravel, Laravel MCP, Inertia, Vue, TypeScript
Support desk for tickets dealerships open from inside the dashboard. The two apps never read each other's database; they trade signed, retry-safe events in both directions. An MCP server lets staff work tickets from Claude Code, which reads the conversation, checks the dashboard's docs, and drafts a reply that goes out under the staff member's name once they approve it.
ARMP Audit iOS app
Swift, SwiftUI, SwiftData, Laravel
Field app consultants use to record OSHA, body shop, GLBA and deal jacket audits at the dealership, with photos. It works offline, queues changes, and syncs to the compliance dashboard through a Laravel API, so audits get done much faster.
Self-hosted error tracker
Laravel, Horizon, React, TypeScript, shadcn/ui
Accepts errors in Sentry's envelope format, so apps already using a Sentry SDK can point at it without code changes. Repeat errors are grouped into issues by a SHA-256 fingerprint.
autorisknow.com
Laravel, Livewire, Claude API
ARMP's marketing site, with server-side rendering and structured data for AI search, and AI tools for SEO.
ARMP CRM
Laravel, Inertia, Vue, TypeScript
Sales CRM for dealership contacts and email campaigns, with AI help for drafting emails and call notes.
Case study
A tenant-scoped AI compliance assistant
- Problem
- Dealership staff ask compliance questions whose answers depend on their own dealership's records, like "Where are we at with employees completing their courses, and who hasn't finished yet?" A generic chatbot can't see those records, and one that could see everything would leak data between dealerships and roles.
- Constraints
- Each dealership has its own database through stancl/tenancy. Users sit at one of five role levels, from admin to employee, and should see only what their role allows. I'm the sole developer, so it had to be simple to maintain.
- Approach
- I gave the model tools to call rather than putting records in the prompt. Each tool runs inside the current tenant and checks the user's permissions before it returns anything, so the model only sees what that user could open in the app.
- Tradeoffs
- Tools take more work than stuffing context into a prompt, and each new kind of question needs a new tool. In exchange, the access rules live in application code, and the prompt has no say in them.
- Result
- The assistant answers compliance questions inside the dashboard, and its answers only draw on data the user can already access.
Skills
- Back end
- Laravel, stancl/tenancy, Laravel Horizon, Inertia, Livewire, Filament, MySQL, SQLite, WordPress
- AI
- Claude API, Claude Code, AI tool use, MCP servers, Prompt engineering
- Languages
- PHP, TypeScript, JavaScript, Swift, Go, HTML, CSS
- Front end
- Vue, React, Tailwind CSS, Alpine.js
- iOS
- SwiftUI, SwiftData
- Practice
- Object-oriented PHP, MVC, Pest, Larastan, Git
- Hosting and services
- Laravel Cloud, Forge, Ploi, DigitalOcean, Cloudflare, Sentry, Mailgun
- Media
- Photography, Video
- Currently learning
- Python