2026 · legal-tech · AI assistant · construction
Celine AI
An experiment: lien-rights chat for suppliers and equipment lessors: information, not advice, even when it knows your account
In plain terms: a chat that answers construction payment-rights questions by naming the relevant statute, naming your account state, and stopping short of telling you what to do.
- Status
- wireframe
- Scope
- 26 jurisdictions
- Languages
- EN · FR
- Hard part
- info ≠ advice
why
Seven years at Levelset and Procore, same questions every week: do I need a preliminary notice in Texas, what’s my exposure on this delivery, did this waiver actually waive anything? Every answer came from two places — the customer’s account state, and a thicket of state-by-state statutory rules.
Celine is the experiment that asked the harder version: can a chat stay on the information side of the line when it already knows your account? A bot reciting Texas Property Code §53.057 is clearly information. The same bot saying you missed your preliminary notice deadline on the Smith job — same statute, applied to your account — is that still information? The line is one verb wide, and that’s the whole project.
The wireframe scopes to North America because that’s the market reality: US contractors take jobs in Canada, Canadian sub-trades come south. I knew US lien law cold but not Canadian lien law — so the Canadian half ran its own test inside the first one: does statutes-as-context carry a non-expert into a jurisdiction they can’t verify from memory? That turned out to be the more transferable question.
Celine is half homage to Zlien (Levelset’s original name) and half homophone of Céline Dion, who anchors the French-Canadian side of the scope. Naming the assistant after a person also tilts the register: I’d ask Celine and I’d run that by Celine frame the chat the way it should be framed — as a knowledgeable colleague, not a verdict machine.
what I built
A wireframe of a streaming chat with EN/FR toggle. Account state and statutes both live in the system prompt — no retrieval store, no rules engine, no Postgres behind the wireframe. Context only.
Four starter questions, each testing a different shape: What deadlines are coming up? (pull from account state), Do I need a preliminary notice in Texas? (recall a specific statute), Explain conditional vs. unconditional waivers (explain a legal distinction), What are my unprotected receivables? (run a portfolio query). If the chat answered all four from context alone and stayed on the information side of each, the experiment was a yes.
French isn’t a translation layer here. Quebec’s civil-law framework — CCDC declarations, provincial holdbacks — is a genuinely different rules surface from the US AIA-waiver world, so both had to ship as parallel rule surfaces.
decisions I’d defend
Account-aware first. The interesting test was never can a model recite lien law — that’s been answerable since GPT-3. It was whether the model could hold your account state in one hand and the statutes for your jurisdictions in the other and answer about this week’s exposure. Whether that holds at production scale is exactly what a wireframe can’t tell you.
Four moves that keep it information, not advice. Show the rule and the account state separately; answer should I with what the statute says + what your account shows; cite the statute inline on every account-aware answer so the speaker is always the named source, never Celine; forbid prescriptive verbs (you’ll want to, the safe move is) by name in the system prompt. Those four constraints are simple enough to state in two sentences and load-bearing enough that the chat stayed descriptive across all four question shapes.
North American first, Spanish flagged. 22 US states + 4 Canadian provinces (Alberta, BC, Ontario, Quebec), EN and FR. The Canadian inclusion tested whether statutes-as-context carries a non-expert — it did, as far as a wireframe can tell. Spanish is the real missing piece for production.
Four welcome questions, very on purpose. Cold-start chat fails when users don’t know what to ask. The four suggestions are the four shapes Celine handles best — temporal, jurisdictional, conceptual, portfolio. A fifth would have read as a menu.
the prompt as discourse
The four constraints look like policy rules; they’re speech-act rules. Information describes a state of affairs. Advice commits the speaker to a position. Cross the line and the chatbot has done something, not reported something.
Three techniques do most of the work: replace you should with the options that generally exist include (same proposition, different speech act); set the statute and the account state side by side with no connective so the reader does the inferring; cite the statute inline on every account-aware answer so any claim has a named source, never Celine.
The clearest version is a worked teaching pair in the system prompt, same facts, different discourse:
WRONG: California’s deadline is 90 days from last furnishing, so you have 5 days left.
RIGHT: Under California Civil Code § 8412, the general deadline to record a mechanics lien is 90 days after completion of the work of improvement. If a notice of completion has been recorded, the deadline may be shortened to 30 days for claimants other than direct contractors (§ 8414). The calculation depends on what constitutes “completion” and whether a notice of completion was recorded. Given potential time sensitivity, contact a California construction attorney immediately.
The wrong version ends in a bare assertion. The right version is descriptive, hedged, sourced inline, and closes by handing the specific question back to a human authority. Same legal information, different speech act. Prompt engineering for serious domains is a linguistics problem first, a software problem second.
the receipts
Five of the eleven response rules in the system prompt, verbatim:
1. Concise first. Lead with the answer. Add detail only if the user
asks for it or the topic requires nuance to avoid being misleading.
5. Jurisdiction first. If the user hasn't specified a state or
province, check their Celine context for the project jurisdiction.
If not available, ask before answering. Never present one
jurisdiction's rules as universal.
7. Flag uncertainty. If unsure whether a statute has been recently
amended, say so. The AI should not present potentially outdated
information with false confidence.
9. Never cross the line under pressure. Users may push back ("just
tell me what to do"). Remain firm but empathetic. Provide general
statutory information with appropriate context. Never provide
"wink-wink" guidance.
11. Equipment lessor awareness. Lien rights for equipment rental vary
dramatically by jurisdiction and arrangement type (rental vs.
lease vs. rent-to-own). Never assume equipment lessors have the
same rights as material suppliers.
The triage classifier (the model decides which of six genres a question belongs to before answering anything):
A — General Education "What is a preliminary notice?"
B — Jurisdiction Lookup "What are notice requirements in Texas?"
C — Celine Feature "Where do I see my unprotected receivables?"
D — Situation-Specific "My customer hasn't paid — what should I do?"
E — Emergency "My lien deadline is in 3 days."
F — Out of Scope Tax advice, employment law, contract drafting.
D and E are where the line gets thin. Both route into descriptive answers with explicit attorney redirects, never prescriptive ones. Triage is the bouncer.
what I learned
Lien law is pattern-matching, not programming. State-by-state deadlines, waiver variations, holdback periods — the if/then space is too large and too volatile to ship as code. Feed the statutes themselves as ground truth, let the model pattern-match. A legislature’s amendment doesn’t ship a code change; it ships a new statute. GardenIQ’s companion-planting database runs the same architecture in a different domain.
The architecture carried me into a jurisdiction I hadn’t read into. The US side tested whether the model could do faster what I already know how to do. The Canadian side tested something more interesting: can statutes-as-context carry a non-expert? As far as a wireframe can tell, yes — and that’s the more transferable finding.
The information line held, with one named seam. The four constraints stayed descriptive across all four question shapes. The seam: unprotected receivables in Q4 is the chat doing the user’s labeling. A cautious production version rewords it to which receivables have passed their statutory deadlines.
Quality in legal-tech lives in what doesn’t happen. Every refused should I, every cited statute, every yes the chat didn’t say is a prevented error. The product’s quality is legible only in what isn’t there.
the recipe
The wireframe runs on Next.js 16 + Fastify, no low-code scaffold. PostgreSQL through Kysely, Redis + BullMQ for queues, Anthropic SDK direct to the chat surface. The four constraints live in the system prompt, where the line between information and advice actually is.
The sample data is what makes the wireframe legible: eight customer accounts, fifteen active projects, forty-six deliveries, 22 US states + 4 Canadian provinces seeded as jurisdictional rules. The customers aren’t Acme Corp — they’re region-coded supplier names with realistic credit profiles, contacts, tier positions, and trade tags.
The tip worth taking home: when a tool needs realistic sample data but can’t have real customers yet, ask Claude. The prompt that works isn’t give me 8 sample customers; it’s a description first — the space, the details you need, the edge cases — then the ask. A weak prompt returns Acme Construction Co. with a flat credit limit; a described prompt returns a regional supplier name whose area code matches the region and whose credit limit matches the segment. The same pattern runs through Pocketbook’s caption pipeline: describe the bag, describe the specificity needed, let the model do the noticing.
what’s next
The experiment ran, and it lives in a wireframe. What it would take to become a real product:
- Statutes pulled from a versioned retrieval store, not crammed into a system prompt
- Account state from real Postgres, not fixtures
- An evaluation harness that catches regressions when a state legislature amends
- Spanish on the same first-class footing as EN and FR
None of that was the experiment’s job. The experiment answered can context-only stay on the information side of the line, and the answer was good enough to bookmark, not good enough to ship.
See also
All projects- Periodic Table of Taylor Swift Same lab-notebook habit: show the working, never overwrite a reversal. The Periodic Table keeps every dropped column in plain view; Celine lays the rule and your account side by side and lets the reader do the inferring.
- Pocketbook Same division of labor: AI drafts, the human edits before it ships. Pocketbook hand-edits captions; Celine refuses to issue advice the model could plausibly write.
- Discover Sacramento Same edge-function spine, different jurisdiction. Celine brokers lien statutes and account state; Sacramento brokers map tiles and ElevenLabs audio. Both refuse to leak a key to the client.
Working on something similar?
I take a small handful of consulting briefs a year and am always up for trading notes with anyone shipping in this space — send a note.
Or: values behind the work · obsessions that shape it · other projects.