I built the empty office first
Someone emails a small law office asking for help. The message is messy. Before any AI fills in a form, that original message has to live somewhere. Today that is all I built.
The short version
Intake Desk is a review workflow for a fictional five-person Chicago law office called Lakefront Legal. It will turn a messy inquiry into a draft client record, keep the exact words from the message next to each fact, and wait for a person to say yes before anything is saved.
I did not call a model yet. I built the empty office: a front door, a desk, and a filing cabinet that is not connected to a real client database. The website loads. The API says it is healthy. That is the point.
The message is messy, and someone still has to type it in
A name is in one sentence. A deadline is buried in another. The other side of the dispute might already be a client. A person on staff reads the email, copies the facts into another system, and hopes they did not miss something important.
AI can do that typing. The problem is it can invent a phone number, skip a deadline, or miss a name match, and still sound sure. Nothing in that confident answer shows where each value came from.
That gap is why I am building Intake Desk. The interesting question is not whether a model can read the message. It is how a person can trust and check what it proposes.
Why the original message has to exist first
Every field in the draft is supposed to carry a short quote from the inquiry. If the original text is not stored before the model runs, there is nothing to check those quotes against. The AI would be filling in a form in the air.
So the first working piece is boring on purpose. Save the message. Show a page. Do not let the public demo accept a real person's email. A model name lives in a settings file, not in the app, because those names change and the later scoreboard has to say which model produced the numbers.
The plan
The program follows five steps. Only the first one works today.
- Receive. Store the original inquiry before anything else happens.
- Extract. Ask a model to fill a typed form, with a quote for each value.
- Check. Ordinary software looks for missing details, tight deadlines, and names that might already be in the files.
- Review. A person sees the source, the draft, the warnings, and the quotes on one screen, and can edit any field.
- Approve. Only then does a fake client database change. Rejection writes nothing.
The model is one step in that list. It is not the whole product, and it never writes the destination on its own.
You can read the full plan on the Intake Desk case study.
What I set up
Two commits, none of them impressive on their own.
- A public README. It states the customer problem, the five-step path, and the stack, with a thumbnail in
public/. - The empty office. A React website that says Intake Desk, and a Python API that returns
{"status":"ok"}. Secrets stay in local files that Git ignores. The public app will only accept made-up scenarios I already wrote.
Lakefront Legal is a small general practice, not an employment boutique. Employment, family, business, estate, and real estate inquiries all land in the same inbox. That matches the stories I will use later, and it gives the extractor something real to classify or to leave unknown.
Frequently asked questions
Did you use AI yet?
No. The website and the API run. There is no model call in the path.
Can someone paste a real client's email?
No. The public demo will only accept fictional scenarios the server already owns. That keeps real legal information out, and it keeps the API bill from becoming an open tab.
Is this a real law firm?
No. Lakefront Legal is fictional. Every name, company, and matter in the demo is made up. The destination is a simulated contact list, not a live CRM.
Does it give legal advice?
No. It drafts an administrative record for a person to check. It does not decide who becomes a client, and it does not say whether a conflict exists. A name overlap is only ever a possible match.
Follow along
Next I will store the original message and seed a fake list of current clients. I will write as I go, about what actually broke, with titles that name the finding instead of the session number. The repository is public.
Related: The page never said the currency
