Cardinal Gray — Founding Engineer Take-Home Assignment

Vehicle Title Intelligence Platform

Build a full-stack application that retrieves vehicle data from a state DMV portal and helps users verify title ownership.

Background

You work at a lending company that originates auto loans. Before funding a loan, your team needs to verify that the borrower actually owns the vehicle, that the vehicle matches what was described, and that there are no existing liens that would block a new one.

Today this is done manually: a loan officer receives a title or registration document from the borrower, then goes to the state DMV website, looks up the VIN, and eyeballs the two to check for problems. This is slow, error-prone, and doesn't scale.

Your job is to build a tool that automates this workflow.

The DMV Portal

The state of Wakanda has a public DMV portal where anyone can look up a vehicle by VIN and see its title record — owners, liens, registration status, vehicle details, and more.

This is the site your app will pull data from:

State of Wakanda — Department of Motor Vehicles

Public vehicle title search and lien filing portal. Go ahead and try searching a VIN to see what the data looks like.

What You're Building

A full-stack web application (frontend + backend) that lets a loan officer:

  1. Enter a VIN — your app goes to the Wakanda DMV portal, looks it up, and brings back structured vehicle, title, owner, and lien data.
  2. Upload a document — the officer uploads the title or registration they received from the borrower. Your app extracts the key fields from it (VIN, owner name, vehicle info, etc.).
  3. See the comparison — your app shows the DMV data and the document data together, highlighting any discrepancies: wrong owner name, missing lien, vehicle mismatch, stale title status, etc.
  4. Review history — the officer can come back later and see all previous lookups, their results, and the uploaded documents.

That's the core product. You decide the tech stack, the UI, the architecture, and the data model. We care about the end result and how you think through the problem.

You are encouraged to use AI tools (Cursor, Copilot, ChatGPT, etc.) throughout. We use them heavily ourselves.

Core Requirements

1. VIN Lookup

A user enters a VIN into your app. Your backend visits the Wakanda DMV title search page, submits the VIN, and extracts structured data. At a minimum, you should capture:

2. Document Upload & Extraction

A user uploads a photo or PDF of a vehicle title or registration document. Your app extracts key information from it: VIN, owner name, vehicle description, lien info, etc. You can use OCR or any other structured extraction approach.

We provide an OpenAI API key for your convenience (see below) — use it however you want. We also provide sample documents to test with.

3. Verification Dashboard

This is the core value of the tool. After looking up the DMV record and extracting the document, display both sources and highlight discrepancies. The user should be able to quickly answer:

Design this for a non-technical loan officer. Think about what matters most, what should stand out, and how to make the answer obvious at a glance.

4. Data Persistence

Lookup results and uploaded documents should be stored. A user should be able to see a history of previous lookups, come back to them later, and review the results without re-running the lookup. The choice of database is yours.

Sample VINs

Here are some VINs in the Wakanda DMV database that cover different scenarios. Try them on the DMV search page to see what comes back.

VIN What to expect
WKND1A2B3C4D5E0001 Clean record — single owner, no liens, active title
WKND2F3G4H5J6K0002 Active lien (Wakanda National Bank)
WKND3L4M5N6P7Q0003 Two owners joined by AND
WKND4R5S6T7U8V0004 Two owners joined by OR, with a lien
WKND5W6X7Y8Z9A0005 Transferred out of state — inactive title, expired registration
WKND6B7C8D9E0F0006 SALVAGE brand on title
WKND7G8H9J0K1L0007 Electronic title (e-title), active lien
WKND8M9N0P1Q2R0008 Two active liens on one vehicle
WKND9S0T1U2V3W0009 Expired registration, high-mileage vehicle
WKND4T5U6V7W8X0014 Previous title record (prior owner history)

There are 50 vehicles in the database total. These are just some good starting points — any VIN in the database will work.

Sample Documents

Use these title and registration documents to test the document upload & extraction feature. They come in different formats (titles, registration cards) and different quality levels (clean PDFs, photos taken at an angle). Some documents have deliberate discrepancies vs. the DMV data — your app should surface these.

You don't need to test every single document. Pick a handful that exercise different scenarios.

Document VIN Notes
Title — 2022 Toyota Camry WKND1A2B3C4D5E0001 Clean title, single owner, no liens
Title — 2021 Honda Civic WKND2F3G4H5J6K0002 Has a lien on record
Registration — 2020 Ford F-150 WKND3L4M5N6P7Q0003 Registration card format, two owners (AND)
Title — 2023 Tesla Model 3 WKND4R5S6T7U8V0004 Two owners (OR), has a lien
Title — 2019 BMW X5 WKND5W6X7Y8Z9A0005 Older title document
Title — 2018 Nissan Altima WKND6B7C8D9E0F0006 Has a title brand
Title — 2024 Hyundai Tucson WKND7G8H9J0K1L0007 Photo capture of an e-title, has a lien
Registration — 2020 Chevy Silverado WKND8M9N0P1Q2R0008 Registration card format
Registration — 2017 Subaru Outback WKND9S0T1U2V3W0009 Expired registration
Title — 2015 Dodge Charger WKND4T5U6V7W8X0014 Has prior title history in DMV
Title — 2025 Honda CR-V WKND0Z1A2B3C4D0020 Brand new e-title with lien
Title — 2024 BMW iX WKND5C6D7E8F9G0035 Photo capture, e-title
Registration — 2023 Tesla Model 3 WKND4R5S6T7U8V0004 Photo of registration card (same VIN as title above)
Title — 2020 Chevy Silverado WKND8M9N0P1Q2R0008 Full title document (same VIN as registration above)
Registration — 2021 Honda Civic WKND2F3G4H5J6K0002 Photo of registration (same VIN as title above)

Not all documents will match the DMV data perfectly. That's intentional — your app should identify the differences. Some VINs have both a title and a registration document.

OpenAI API Key

We provide an OpenAI API key for your convenience. Use it for document extraction, data normalization, or anything else you find useful. There's a spending cap on the key, so be mindful of usage.

API Key: will be provided via email

What We're Evaluating

Here's what we're paying attention to when we review your submission:

Architecture How you structure the different components of your app. Is the data retrieval decoupled from the web server? How does it behave if the DMV site is slow or down?
Data Modeling How you normalize data from different sources into a clean schema. How you handle the variety of fields, formats, and edge cases.
Error Handling What happens when things go wrong. Retries, graceful degradation, and clear feedback to the user when a lookup fails or a document can't be parsed.
UI/UX & Data Presentation Is the dashboard clear and useful? Can a loan officer look at it and immediately know if something is wrong? How does the app behave while a lookup is running? How does history navigation work?
Code Quality Clean, readable code. Good abstractions. Typing. Tests where they add value (not test coverage for its own sake).
Decision-Making The trade-offs you make and why. What you chose to build, what you chose to skip, how you scoped the work, and how you leveraged your tools (including AI).
What we're NOT evaluating:

Logistics

Time

Please do not spend more than 5 hours on this, including any extra credit below. We respect your time. It's better to submit something focused and well-thought-out than to try to do everything.

You'll have 5 days from when you receive this assignment to submit.

How to Submit

  1. Create a GitHub repo (private is fine) and push your code. Add @federicoz123 and @momo-ai as collaborators.
  2. Write a README in the repo that covers: how you approached the problem, what trade-offs and design decisions you made, anything you'd do differently with more time, and instructions to run it locally.
  3. Record a Loom (or similar screen recording) walking through your app. Demo the key flows: looking up a VIN, uploading a document, seeing the comparison, and browsing history. Keep it short — 5 minutes is plenty.
  4. Send us the links — the repo URL and the Loom link.
What happens next: We'll review your submission async, then schedule a call where we go through it together. We'll ask you to walk us through your code, discuss your decisions, and dive deeper into your approach. Think of it less like a grilling and more like a design review with a colleague.

Extra Credit

Everything below is completely optional. These will not count against you if you skip them. They're areas where you can go further if you have time and want to show more — but we'd much rather see the core requirements done well than a rushed attempt at these. All of this should still fit within the 5-hour time limit.

Extra 1 Lien Filing

The Wakanda DMV has a lien filing page where you can submit a new lien against a vehicle. Add the ability for users to file a lien through your app — fill in the lienholder info, submit it to the DMV, and capture the confirmation/filing number.

Extra 2 Sokovia Support

The Republic of Sokovia is another state with its own vehicle registration portal. It has the same vehicles as Wakanda, but the site is significantly less reliable and less friendly to work with:

Support lookups against Sokovia in addition to Wakanda. This tests resilience, error handling, and data normalization.

Extra 3 Deployment

Host your application somewhere publicly accessible. We'll reimburse up to $100 in cloud/infrastructure costs (include receipts if applicable). We're interested in how you architect the deployment — what services you choose, how you handle configuration, and how you think about separating components.

Questions? Reach out to your contact at Cardinal Gray. Good luck — we're excited to see what you build.