Files
MobilityOps/docs/16-portfolio-case-study.md
NuklearRabbit 29325b6c27
MobilityOps acceptance / backend (push) Canceled after 0s
MobilityOps acceptance / frontend (push) Canceled after 0s
M29: polish recruiter engineering story
2026-08-10 18:13:18 +02:00

3.3 KiB

Fleet Ops — portfolio case study

Product

Fleet Ops is a working operations platform for a fictional Belgian mobility company. It unifies vehicle and booking work, makes data defects resolvable, automates post-return follow-up and turns internal procedures into cited answers.

Problem

Rental operations often span booking records, vehicle state, inspections and separate procedure documents. The difficult part is not another dashboard; it is preserving one trustworthy state while people, automation and AI consume the same workflow.

Engineering approach

  • Keep business invariants in a FastAPI/SQLAlchemy domain layer backed by PostgreSQL constraints and row locks.
  • Commit vehicle returns, audit evidence and an outbox message in one transaction.
  • Let the existing central n8n execute secondary work asynchronously, with leases, retries and authenticated callbacks.
  • Detect five classes of data-quality issue and require bounded, explicit human resolution.
  • Integrate RAGcore through a provider adapter that refuses unsupported answers and preserves citation provenance.
  • Publish only four narrow read-only tools through ITWorx MCP Hub; never give external AI systems database access.
  • Expose correlation-based evidence in the product so architecture claims can be inspected, not merely read in a diagram.

Demonstrable result

  • 50 vehicles, 180 customers and 254 bookings in a deterministic synthetic dataset;
  • one complete controlled return workflow and five persisted quality-rule types;
  • 11 authoritative Dutch procedure sources with localized grounded retrieval;
  • four tenant-bound, service-authenticated read-only MCP tools;
  • trilingual responsive UI, server-backed roles, global search, privacy controls and audit;
  • degraded-mode coverage for n8n and RAGcore, production health/metrics and verified backups;
  • complete backend and browser acceptance recorded in artifacts/evidence/final-summary.md.

Product decisions worth discussing

Why an outbox? A return must remain committed when n8n is unavailable. Persisting the event in the same database transaction closes the gap between business success and later orchestration.

Why no generative fallback? A fluent procedure answer without evidence is worse than a clear unavailable state. Knowledge answers require cited provider evidence.

Why read-only MCP tools? Recruiter demos should show credible AI integration without granting autonomous mutation rights. Operational writes remain explicit product workflows with authorization, validation and audit.

Why synthetic but production-shaped data? The public demo can remain safely open while still exercising realistic state transitions, failure recovery and resettable scenarios.

Stack

React, TypeScript, Vite, FastAPI, SQLAlchemy 2, PostgreSQL, Alembic, n8n, RAGcore, ITWorx MCP Hub, Docker Compose, Prometheus, Grafana and Playwright.

Honest boundary

Fleet Ops is a completed locked PoC, not claimed customer adoption or a general ERP. Accounting, payments, public reservations, CRM, inventory, HR and autonomous write agents are intentionally out of scope. A real personal-data rollout would additionally require the adopting organisation's identity provider, retention approvals, secrets lifecycle, alert ownership and disaster-recovery process.