Phase Scope
| Phase | What's In | What's Out |
|---|---|---|
| P1 Early Now |
Conversation flow (R0-R7), property reveal (ATTOM/AVM), scenario cards on assumed data, clarity card, account creation + save/resume, portable clarity package, Always Approved framing | Credit checks, verified income, real rate eligibility |
| P1 Late Still Phase 1 |
Soft credit pull, verified income/DTI, actual rate eligibility, Stage 2 bridge (secure handoff), lender overlays, real confidence scoring | Human handoff, CRM, post-close monitoring |
| Phase 2+ Future |
Three service lanes, human-in-the-loop, CRM integration, post-close "homeowner operating system," re-engagement triggers, score monitoring loops, 7 D's life event triggers |
Use the sidebar filter to show only rules relevant to a specific phase. Every rule is tagged.
1. Foundation
The governing principles that define what the Clarity Engine is, what it feels like, and what it refuses to be. Later source documents override earlier ones. Transcript feedback (April 1) is highest priority.
Four Design Pillars
Achieved when the user understands what matters, knows what does not, and feels safe pausing. The product is clarity, not approval.
Give before you ask. The ask is always smaller than the give. The system never recommends. It orients. This is a legal boundary. No "you should," no "best option," no ranked recommendations.
It is a treasure hunt, not a door with a lock. "All doors have two ways." If the user does not enter their address, the system still provides value. General questions about rates, options, lowering payments should be answerable.
The product recognizes the person, not the session. Anxiety gets a steadier pace. Confusion gets a simpler explanation. Frustration gets acknowledgment before anything moves forward. A breakthrough gets a breath before the next step.
Six Design Principles (PRD v4)
- The system always knows more than it asks. Retrieves before it requests. Questions feel like confirmation, not interrogation.
- Complexity is the system's problem, not the borrower's. Mortgage logic is complex. Borrower experiences are not.
- Every exit is a door, not a wall. No dead ends. Anonymous users explore without accounts. Every stopping point is a pause, not an end.
- Math is the proof. Meaning is the message. "$247 less per month" is math. "$247 less per month means you stop choosing between the car payment and the kids' activities" is meaning.
- The system remembers context so the borrower never starts from zero. Returning borrowers pick up exactly where they left off.
- Empathy and dignity guide every interaction. No shame, embarrassment, pressure, or unnecessary confusion. The system presents alternative paths rather than framing outcomes as rejection.
When multiple implementation approaches are possible and the PRD does not explicitly cover the choice, the correct approach is the one that best aligns with these principles.
Calm Confidence
Every interaction communicates calm confidence. The system is thoughtful, steady, and intelligent. Borrowers are never rushed, pressured, or overwhelmed. The experience is a conversation with a knowledgeable guide helping them think clearly. Warm without being casual. Simple without being sparse. Trustworthy without being formal. This is the emotional target the EI layer enforces across every stage, every archetype, every exit point.
What PreFi Is Not
- Not a mortgage application. Does not originate loans in Alpha.
- Not a lead generation platform. No borrower data sold, routed, or exposed to lenders without explicit, borrower-initiated consent.
- Not a rate shopping tool. Presents scenarios on national rate benchmarks with full disclosure, not personalized rate quotes.
- Not advice. Educates and presents tradeoffs. The borrower decides.
- Not a monolith. Every stage is an independently deployable API service from Sprint 1.
Anti-References
- Aggressive Lead Capture (LendingTree, Bankrate, Zillow): Every interaction designed to extract contact info and route users to a lender. Users feel hunted, not helped. LendingTree specifically is the incumbent we build against.
- Chatbot Without Visual Payoff: Basic GPT wrappers that never graduate beyond a text thread. Conversation is the entry point, not the destination. If a user reaches their scenario options and they are still staring at a chat window, the design has not done its job.
- Corporate / Enterprise Feel (Friday Harbor, Total Expert): Dense, utilitarian, built for professionals. No warmth, no progressive disclosure, no emotional awareness.
2. The Give-to-Get Architecture
How the Clarity Engine earns trust. One gift at a time, in the right sequence, at exactly the right moment. This is not a progress mechanic. Not a gamification system. Not a qualification funnel. It creates intelligence through trust. (David Kawata, Give-to-Get Brief, March 2026)
Seven-Stage Waterfall
| Stage | Trigger | What Surfaces | Principle |
|---|---|---|---|
| HOOK | Entry screen | The implied promise. Language signals the product already knows something worth knowing. | Create anticipation. Design the approach as carefully as the arrival. |
| OPENING MOMENT | Address resolves | One warm observation. Their name. Equity or rate opportunity. A human sentence, not a data card. | The Known Gift. Low API cost. Stops them cold. |
| AWARENESS | Conversation begins | Property context referenced naturally. The borrower realizes the product already knew. | Context creates safety. The vehicle becomes visible. |
| DISCOVERY | Goal stated | First insight for their goal. A graph, calculator, or scenario. | Sample Drop. Earned by the conversation. |
| DEPTH | Engagement deepens | Additional tools surface as Oracle detects deeper intent. Each one more specific. | Treasure Hunt conditions monitored. Honest scarcity only. |
| PRESERVE | Account creation | Outside the conversation: "Your picture is taking shape. Worth saving before you close this tab." | Show what they are getting, then make it permanent. |
| VERIFY | Account created | Soft pull offered. "Let me sharpen these into real numbers." Report updates to Verified. | The ask is proportionate to value already received. |
Governing principles: (1) Sequence, do not dump. Attention is finite. The sequence is the product. (2) Earn the expensive reveal. Low-cost to high-cost as the conversation earns them. (3) Anticipation is a design material. The gap between what the product has shown and what it clearly knows creates desire. Restraint is not withholding. It is respect for the moment of revelation.
Three Exchange Rule
Before any meaningful ask (account creation, financial information, credit authorization), the system must complete three value exchanges first.
- Exchange One: Establish Usefulness. Property address returns a property intelligence summary. The user sees the system knows something real.
- Exchange Two: Establish Insight. Next input returns something that makes the user feel understood. An estimate. A scenario. The system is now intelligent, not just useful.
- Exchange Three: Establish Trust. The platform delivers something that feels like guidance. A scenario that reframes their thinking. Competence, usefulness, and respect have all been demonstrated.
Only then does the platform introduce a meaningful ask. An exchange counter is attached to every session. It increments only when measurable value is delivered. No high-friction action unlocks until the counter reaches three. This rule is what separates an advisor from a funnel.
Four Mechanics
| Mechanic | Analog | CE Expression |
|---|---|---|
| Known Gift | Costco rotisserie chicken. You came for the chicken. Now you are in the store. | "Hi Bob. Since you bought 7 years ago, you have built about $200,000 in equity." One sentence. Their name. A real number. Stops them cold. |
| Sample Drop | Costco free tastings. Unrequested, unexpected. Creates reciprocity before any ask. | A graph: loan paid off 8yr 4mo faster by $220/mo more. Their actual loan. Their actual numbers. Mid-conversation. A surprise, not a response. |
| Treasure Hunt | Costco. You did not come in for it. But there it is. Real value, unexpected. | Borrower comes in to lower their rate. CE finds high-interest consumer debt a cash-out refi can eliminate. Lower total monthly payments. Better blended cost of funds. They did not come for this. CE found it in their numbers. |
| Unreasonable Hospitality | Eleven Madison Park. One gesture, specific to this person, that they will never forget. | Veteran recognition. First-gen homeowner moment. Life event acknowledgment. One sentence. Matter-of-fact. Then immediately back to work. |
These mechanics work because they operate on trust, not pressure. The borrower never feels sold to. They feel served.
What the Product Never Does
| The Product Never... | Because... |
|---|---|
| Uses a progress bar | A progress bar tells the borrower they are incomplete. This product tells them they are already ahead. |
| Dumps all data at once | Overwhelming the borrower destroys the sequence. The sequence is the product. |
| Holds estimated value as a gate | AVM and equity are earned by the conversation, not locked behind account creation. |
| Manufactures urgency | Every time-sensitive reveal must have a real, documentable factual basis. Fabricated scarcity is a trust-killer and a compliance risk. |
| Uses a hard CTA for account creation | The gentle instruction exists outside the conversation. A heads-up, not a demand. |
| Rewards step completion | No badges, no milestone animations. The reward is the intelligence received, not a UI celebration of compliance. |
| Infers protected class characteristics | Life event moments fire only on explicit user statements. Never on ZIP code, name patterns, income level, or any demographic signal. |
| Locks tools behind steps or progress | A tool that must be earned is a progress bar with better clothes. Every calculator, graph, and explainer lives in the Clarity Report from the moment the address resolves. |
Clarity Report
The Clarity Report exists before it is asked for. It assembles from the moment the address resolves. By the time the gentle instruction appears, the borrower is not being asked to create something. They are preserving something that already exists.
Core constraint: The Clarity Report must never communicate progress toward a goal. It communicates accumulation of something already yours. Progress implies incompleteness. Accumulation implies ownership. That distinction is the design constraint that eliminates wrong directions.
It grows visibly as the conversation deepens but never demands attention. It contains the borrower's equity position, their best-fit scenario, any rate or cost-of-funds opportunity CE has identified, and a credit picture.
Account Creation
"Your picture is taking shape. Worth saving before you close this tab." The instruction is triggered by the Clarity Report's visible presence. There is something real worth saving. The borrower is not signing up. They are protecting what is already theirs.
Progress implies impermanence until saved. Warn that work could be lost. The prompt to create an account flows from the save action. Terms of service in account creation. Consent for third-party verification is separate, prompted per service. Do not stack three confirmations.
It must not look like a modal, a banner, or a CTA button. It should feel like a colleague saying "hey. Worth saving this."
Sample Drop Catalog
A sample drop passes one test: the borrower did not ask for it, could not have known to ask for it, and feels like CE was paying attention specifically to them.
| # | Trigger | Drop Type | Expression |
|---|---|---|---|
| 01 | Long-time owner, significant appreciation | Personalized graph | Chart showing equity growth over years owned. Their property, their timeline, their numbers. |
| 02 | Borrower mentions payment concern | Interactive calculator | $220/mo more = loan paid off 8yr 4mo faster. $47,000 in interest saved. Their actual loan. |
| 03 | FHA loan, estimated LTV below 80% | Text insight | "Your equity may be enough to remove FHA mortgage insurance without refinancing." |
| 04 | Property tax delinquency detected | Text insight | "One thing I noticed. Outstanding balance on your property taxes. That is solvable." |
| 05 | ARM reset year approaching | Graph + text | "Your rate adjusts in [year]. Here is what that means for your payment." |
| 06 | Refinance stated, closing cost gap detected | Break-even graph | Monthly savings vs. closing costs. The exact month the refinance starts paying for itself. |
| 07 | Borrower mentions paying off faster | Interactive calculator | Extra monthly payment input. Graph updates payoff date, lifetime interest saved in real time. |
| 08 | Sufficient equity + wealth-building goal | Graph + calculator | Mortgage balance declining vs. investment account growing. Crossover point modeled. |
| 09 | Borrower discloses non-mortgage debt | Interactive calculator | Complete debt picture. Four strategies: Snowball, Avalanche, Blended Refi, HELOC. |
3. Conversation Flow
The R0-R7 state machine governs the refinance conversation flow. Two parallel state machines (refi and purchase) share the same architecture but differ in entry points and data requirements.
| State | Entry Trigger | Goal | Exit Condition | Key Rule |
|---|---|---|---|---|
| R0 | Session starts | Neutral, no-pressure posture | User confirms goal + consents to questions | Opening question: "What's on your mind about your home?" |
| R1 | User states intent | Capture decision type and reason | Intent reflected back, timeframe named | Uncover the real "why," not just stated goal |
| R2 | Intent is clear | Current mortgage + cash-flow anchors | Working comfort range + horizon agreed | Accelerate to anchors. Do not let option expansion run wild. |
| R3 | Baseline anchors exist | Map full option set | 3-6 viable paths identified | Fan out all options, let user eliminate |
| R4 | Enough to model 2-3 paths | Produce "whole number" truth per path | User acknowledges monthly range + risk | All-in range, not a single number. Assumptions labeled. |
| R5 | Truth layer exists | Present 3-5 neutral scenario cards | User selects 1-2 or signals closure | Always include "do nothing / wait" when appropriate |
| R6 | Scenario selected | Compare, tweak assumptions, update | Stable decision posture | Detect anxiety spikes: stop adding variables, summarize knowns/unknowns |
| R7 | User signals closure | Summary + checklist + Stage 2 invite | Portable clarity package delivered | Package is borrower-owned, transferable |
Opening Question
"What's on your mind about your home?"
No hints at what is coming. No "let us see what we can find." No "we may already have some information about your property." Silence. Then the reveal. The gap between this question and the property reveal is where trust is built. Not through words, but through the shock of competence arriving unexpectedly.
Oracle classifies. Advisor sets tone. Navigator routes scenario family. The Clarity Report appears quietly, assembling silently on the borrower's behalf.
Property Reveal Choreography
800-1000ms of deliberate silence. No spinner. No progress bar. The system is hydrating. The borrower senses something real is happening. Do not fill the silence. The silence is the design.
Then the property appears in sequence: the address first, the aerial image second. Then, with a slight delay that makes the numbers feel discovered rather than populated: the value, the equity, the loan balance. Each arrives as if being read to the user rather than displayed.
The AI response: "Here's what I found." Then silence. Let the numbers speak. This timing is a build specification, not a developer judgment call.
The property reveal IS the trust mechanism. Products that pre-load disclaimers signal insecurity. They argue for their own trustworthiness before anyone questions it. The foundational UI disclosure handles the compliance obligation before the conversation begins. The conversation itself stays completely clean.
Never argue for trustworthiness. Demonstrate competence so clearly that trustworthiness becomes the only reasonable conclusion.
"Hi Bob. Since you bought 7 years ago, you have built about $200,000 in equity. That changes what is possible." Or: "Hi Bob. Since you bought 18 months ago, interest rates have come down meaningfully." One insight. Their name. A real number. A real timeframe.
Give Before You Get
After address entry, the system immediately shows what it knows (value, equity, rate, payment, property type, purchase date) before asking what brought the user here. Six data items captured and displayed before any question is asked.
Intent Probing (The Real "Why")
"When you say 'lower payment,' help me understand what that means for you. Is the current payment uncomfortable, or are you trying to free up cash for something specific?" The system uncovers the real why behind stated goals.
"No one says my target payment is X. They just say lower payment, lower rate." Users speak in directions, not targets. The system must accept directional language ("lower," "less," "cheaper") and use the conversation, property data, and scenario math to converge on a specific affordability number. Never ask the user to provide a target payment upfront.
Tension Detection
When the user states conflicting goals (e.g., lower payment AND cash-out), the system flags the tension: "I want to flag something. Lower payment and cash-out pull in opposite directions." The tension is logged as a first-class data point in the clarity model. The system illuminates the trade-off and offers an escape hatch ("Actually, payment is more important") but never resolves the tension for the user.
Consent Checkpoint Before Scenarios
Full-text recap of everything captured, then: "I have enough to show you some directions. These are not recommendations. They are different logics of choice. Each one optimizes for something different. Ready?" The user confirms before the system transitions.
After option expansion, the system must explicitly say the equivalent of "now we will narrow to 3-5 paths" to create psychological closure. Without this, the user leaves more anxious than when they started.
Scenario Cards
Each card must contain:
- The "whole number": all-in monthly range for that path
- How it works (mechanics)
- Trade-offs (pros/cons, equal weight)
- "What could break this" (risk factors)
- "What you would need next" (data to tighten assumptions)
- "When to choose this card" (decision criteria)
Cards never rank and never say "you should." Options organized by goals, without declaring a winner. Each card states what it "optimizes for."
"You have two cards on top... you are just really reflecting the same dual input from the second card below." When two scenario cards share the same adjustable variable (e.g., term slider), consider consolidating into one card with dual outputs. Reduce redundancy.
Rejection as Input
When a user says "Not for me" on a card, the system generates a new variant that addresses the rejection reason. The replacement card gets an "Updated based on your feedback" badge. Original wants remain in the clarity model. Example: User rejects $50k cash-out (too expensive). System generates "Smaller Cash Out" at $30k to keep payment lower.
Compare and Decide
Side-by-side comparison uses a clean data table. The system never chooses for the user. It reflects observed behavioral patterns instead: "Based on what you have told me, you have consistently prioritized monthly relief over cash access." It names the pattern, does not prescribe. Multi-session and partner sharing supported: "I need to show this to my wife" is a supported flow.
4. Emotional Intelligence
Every other tool cannot tell the difference between a user who is ready to move forward and one who is about to leave because they are lost. The EI layer is not added later. It is the layer that makes everything else work.
Four EI Components
| Component | P1 Alpha (Rule-Based) | P2+ (ML-Informed) |
|---|---|---|
| Oracle | 3-5 screening signals in conversation. Rule-based classification into 5 archetypes. Confidence score assigned. Result written to canonical ledger. | ML inference from conversation patterns. No explicit classification questions. Real-time confidence updates. |
| Navigator | 5 pre-defined conversation paths per archetype. Branching logic. Stage advance requires Navigator clearance based on archetype and emotional state. | Dynamic path generation. Adaptive complexity mid-conversation. A/B tested intervention strategies. |
| Advisor | LLM-based signal detection. Detects 8 emotional states: curious, engaged, confused, frustrated, anxious, skeptical, breakthrough, confident. Triggers tone shifts and intervention protocols. | 7-state parallel detection pipeline. Proactive intervention at crisis moments. |
| Storyboard | 2 complexity levels (detailed and simplified). Archetype determines default. Life-outcome framing. Magical Moment animation. Prefers-reduced-motion respected. | Full archetype-adaptive rendering. Visual style and narrative adapt in real time. |
Five Archetypes
| Archetype | Tone | Pacing | Emphasis |
|---|---|---|---|
| The Optimizer | Data-forward | Fast, dense | Numbers, comparisons, rate details. Lead with data, show full math, let them drive. |
| The Planner | Structured | Methodical | Timelines, steps, checklists. Frame as life decisions, not financial products. Normalize waiting. |
| The Cash-Flow Manager | Practical | Focus on monthly | Payment impact, breathing room. Non-judgmental framing. Relief without shame. |
| The Risk Reducer | Reassuring | Slower, careful | Stability, certainty, what-ifs. Lead with worst-case, not best case. Never pressure. |
| The Skeptical Independent | Neutral, factual | Let them lead | Transparency, no persuasion. Surface neutrality early. Explain the business model. Zero steering. This is the archetype PreFi was fundamentally built for. |
Archetypes determine tone, pacing, framing, and tradeoff emphasis. They do not determine answers. A single user may shift between archetypes within a session.
Advisor Reads Emotional State at Every Exchange
The Advisor reads emotional state at every exchange, not just entry or exit but throughout. Signals come from message length, response time, repeated questions, word choice, and interaction behavior. Eight emotional states in P1: curious, engaged, confused, frustrated, anxious, skeptical, breakthrough, confident.
Each emotional state has a defined response built into the system. Emotional state is logged and tagged as training data. Tone, pace, complexity, and personalization all flow from what the Advisor detects first. The Advisor runs before every response.
Two Types of Confusion
- Cognitive Confusion (understanding problem): Needs simplification, reframing, grounding examples. Signals: repetition of same question, contradiction, jargon mimicry, math overwhelm, rapid topic switching, "I'm lost."
- Personal Uncertainty (choosing a life direction): Needs reflection, values clarification, permission to pause. Signals: extensive life details, moral language ("I should..."), future-casting without commitment, "What is the safest option?", "Is it okay if I wait?", "I want to feel..." statements. If the user is in B, do not teach. Reflect and help them name what matters.
Magical Moment Specification
Trigger: Advisor detects confusion or disengagement sustained across 2+ consecutive exchanges. Signals: shortened responses, repeated rephrasing, explicit confusion, engagement drop-off after scenarios. A single confused message does not trigger it. The Advisor waits for a pattern, not a moment.
Timing: Beat 6 of 10 in Consultation, between Scenario Exploration and Summary. It is a conditional intervention, not a stage. Not every session triggers it, and that is correct.
Design: (1) 500ms fade transition creates visual breathing room. (2) Most complex visual replaced with its simplest equivalent. (3) Archetype-specific analogy card appears. Example: "$450 a month is a car payment you do not have to make." Must feel like a breath, not a celebration. No confetti.
Frequency: Maximum one per session by default. A second only if user re-enters sustained confusion after the first resolved. This rule is invisible to the user.
Recovery on Trust Break
No conversation is perfect. Trust will crack at a moment we did not anticipate. The platform does not push forward when that happens. It stops. It acknowledges. It offers a different path.
The Advisor maintains a confusion threshold. Repeated questions, shorter responses, or pulled-back interaction triggers recovery automatically. Recovery responses acknowledge the moment before offering a new path. No stage transition fires during recovery. The platform stays with the user until the signal clears.
When anxiety or confusion spikes: stop adding variables. Summarize knowns and unknowns. Offer exactly two next choices (tighten assumptions vs. compare scenarios). Do not continue building complexity.
Four-Check Message Gate
- Did we give before we asked?
- Does this message know who it is talking to?
- Is this the right moment?
- Does this leave the user more capable than before?
If it fails any one of them, it does not get sent.
5. Personalization
Personalization is not a name. It is full recognition. Being present. Being respectful. Knowing who you are talking to before you speak.
"If you showed the name of the owners up there, then it is still the same card, same presentation. And then there is an ask about personalization." Show the owner's name on the property card. Use public records to pull it. Personalize early and visibly. The user should feel "this is meant for me."
Not a paraphrase, not an upgrade. If they said "breathing room," the product says "breathing room." Every borrower at the same stage receives the same data. What adapts is pacing, framing, and language. Mirroring adapts how, never whether.
The Advisor governs personalization based on emotional state. Recognition lands differently when someone is overwhelmed versus confident. Anonymous users receive the full experience, and when they create an account the shift to personalized conversation feels like being seen clearly for the first time.
First-time homebuyers average 40 (NAR). Median homeowner is 56. "Designs feel like they are designed by young males for young people." Font sizes, button sizes, readability matter. Consider adjustable sizing. Imagery should show people in decision-making, not wellness aesthetic.
"When I go to Claude at 05:00, the golden hour. Working at 02:00 in the morning. Hey, you are doing something late." The system should acknowledge when it is late, when it is a weekend, when the context suggests urgency or leisure.
A borrower who served in the military should be greeted with their rank. Sergeant. Captain. Colonel. Not because it is a nice touch. Because it says this platform sees you, respects what you have done, and is paying attention in a way no other system ever has.
Life Event Recognition
| Signal | Exact Language | Design Requirement |
|---|---|---|
| Divorce / separation | "Before we get into the numbers. It sounds like there is a lot happening right now. Take the time you need. This will be here when you are ready." | Fires once. Back to conversation when user re-engages. |
| Military deployment | "Before we go further. Thank you for your service. This will be here when you get back." | VA benefits disclosure follows immediately. |
| New baby | "Congratulations. That is the best reason to get your finances right. Let us figure this out." | One sentence. Move on immediately. |
| Death in family | "I am sorry for your loss. Whenever you are ready to work through this, I am here." | Full stop. No financial content until user re-initiates. |
| First-gen homeowner | "Figuring this out without a roadmap is harder than anyone acknowledges. You are doing the right thing." | Explicit statement only. Never inferred from demographics. |
VA Founding Commitment
The Clarity Engine was built because David Kawata's father, a U.S. Army veteran of Japanese descent who served in Vietnam, was repeatedly denied home loans upon returning home and still rents today. No eligible veteran leaves a CE session without knowing their full VA entitlement. This is not a feature. It is a founding commitment.
Affordability vs Fundability
Fundability is what mortgage companies worry about (can you get the loan). Affordability is what a homeowner thinks (cash flow, the real cost). Affordability includes the unknowns: burst pipe, mold, unforeseen repairs. "Your little mortgage box is saying this is not a mortgage problem, but it is. It is to the borrower."
6. Language and Compliance
The education-not-advice line, documented clearly enough that engineers can make copy decisions without escalating. The platform informs. It never advises. It shows what is possible. It never tells someone what to do.
Education is showing a person what exists, what it means, and what the tradeoffs are. It gives them what they need to make their own decision. Advice is telling a person what to do. It steers them toward a particular outcome. The Clarity Engine does the first. It never does the second.
A scenario is a modeled financial outcome based on user inputs and market benchmarks. Scenarios illustrate possibilities. They are not predictions or recommendations. Scenario language is always safe as long as it presents, never prescribes.
Engineer's Three-Question Copy Test
- Does this tell the user what to do? "You should," "we recommend," "the best option for you is." Crossed the line. Rewrite it.
- Does this predict a specific outcome as fact? "You will save X," "this will lower your payment to X." Crossed the line. Rewrite it.
- Does this steer toward one option over another? Ranking options, implying one is better, framing one scenario as the obvious choice. Crossed the line. Rewrite it.
If all three answers are no, the copy is safe. When in doubt: am I showing them or telling them? Showing is always safe. Telling is never safe.
Prohibited Phrases
- "You should"
- "We recommend"
- "The best option for you"
- "You need to"
- "This is the right choice"
- "You will save" (as fact, not scenario)
- "This will lower your payment to" (as fact)
- "Rates are rising. Act now" (or any urgency language)
- "Apply now" (without lender context, belongs in P4)
- "Denied" must never appear
- "Unfortunately" must never appear
- "You may need to" (vague)
- "It depends" (non-answer)
- "Work on your credit" (generic)
- "Consider saving more" (generic)
- "Best" or "guaranteed savings" or "lock it in now"
- No raw technical terms without definition (DSCR, LLPA, AUS, GMI)
- No internal system name exposure (ConstraintReport, Clarity Engine, AlwaysApproved, Nova, BorrowerProfile)
- No invented numbers
- No progress score as probability
- Passive voice and percentage-only statements without dollar amounts
If any of these appear during development, flag and rewrite before shipping. No exceptions.
Permitted Phrases (Always Safe)
- "Here is what this could look like"
- "Based on current market benchmarks"
- "This scenario shows"
- "Depending on your goals"
- "Here are the tradeoffs"
- "This is for educational purposes"
- "Actual results will vary"
- "If your goal is X, here are the paths that align with that"
- "Here is how these options compare"
Compliance Rewrite Examples
| Situation | Do Not Use | Use This |
|---|---|---|
| Presenting a refinance scenario | "You should refinance now while rates are low." | "Based on current market rates, here is what a refinance could look like for your situation." |
| Showing a payment comparison | "This option will save you the most money." | "This scenario shows a lower monthly payment. Here are the tradeoffs." |
| Presenting multiple scenarios | "Option 2 is the best choice for you." | "Here are three paths. Each one has different tradeoffs depending on your goals." |
| Discussing credit impact | "You need to improve your credit score before applying." | "A higher credit score typically unlocks better rate options. Here is what that could mean for your scenarios." |
| Describing a loan product | "A 15-year loan is better if you want to build equity faster." | "A 15-year loan typically builds equity faster and carries a lower total interest cost. Here is how that compares to a 30-year in your situation." |
| Responding to a user goal | "To pay off your home faster you should choose this option." | "If paying off your home faster is the goal, here are the scenarios that align with that." |
Disclosures
Interface-level disclosure (not in-conversation), renders automatically at session open for every user regardless of authentication status: "PreFi helps you understand your mortgage options. Clearly, privately, and without anyone trying to sell you something. This is an AI tool. Educational only. Not a lender. Not financial advice."
Always visible. Never interrupts the conversation. Never requires a click to dismiss. Never repeats inside the chat unless a user directly asks.
"Scenarios are based on current market benchmarks and estimated inputs. They are for educational purposes only and do not represent a loan offer, rate guarantee, or financial recommendation. Actual terms will vary based on verified financial information and lender approval."
Visible at first read, never buried. Appears on every scenario card. Never removed or hidden based on user state or session progress. Fixed copy, never modified without review.
"Rates shown reflect the Freddie Mac Primary Mortgage Market Survey weekly average. They are national benchmarks, not personalized quotes. Your actual rate will depend on your credit profile, loan type, and lender."
Appears immediately below any rate-based output.
"No. I am an AI. I help you understand your options and tradeoffs so you can decide what is actually possible for your situation." Short, direct, no explaining. Brevity is the trust signal. Pending Dickinson Wright sign-off.
For users who question the product before they engage. A single grounding sentence activates only when early skeptic signals are detected. Never offered proactively. "I help you understand your mortgage options without talking to a lender." One sentence. No disclaimer energy. "Without talking to a lender" does the most work. It names the thing the Skeptical Independent fears most and removes it in four words.
Plain-language framing + capture assumptions + "verify with a professional" prompt. Never pretend to provide tax advice. Name the layer of the question before answering: "This sounds like a tax timing concern, not a refinance decision."
"Your squiggly, it does look like a minus." Never use ~ in borrower-facing output. Use "about" or "approximately" instead.
7. Signaling and Aesthetics
The visual and emotional language of the product. Meaning before decoration. Calm confidence as the quality gate for every screen.
Design Adjectives
- Quietly confident. Always calm.
- Knows the answer, knows the user.
- Warm without being too casual.
- Simple without being sparse.
- Trustworthy and beautiful.
- Feels like a person, not a product.
Aesthetic Palette
"It needs to be pretty, elegant, and sophisticated. Not what a man thinks a woman wants with pinks." B2B white palette as base. Playfulness should punctuate, not lead. Calm confidence, not cold. Daylight, wood, openness, homes that feel real. Warm, grounded, and human.
"Red is generally used as error or mistake. It kinda evokes a sense of alarm or failure. Maybe more of an orange or yellow as more of an alert versus an error." And David: "Colors to me is emotionally telling me something. The red is pretty harsh." No red in the default palette. Use orange/yellow for attention, neutral tones for structure.
Animation and Speed
Animation is not decoration. Speed conveys emotional tone. The deliberate pause during property reveal (800ms), the fade during Magical Moment (500ms), and the pacing of scenario card arrivals are all specified timing, not developer judgment calls.
Financial figures use monospace font. Interactive calculators must update under 200ms. 5th-grade level visual education for complex concepts.
Accessibility
WCAG 2.1 AA accessibility requirement is non-negotiable. Flag from day one. Mobile-first at 375px. Prefers-reduced-motion must be respected for all animations (magic moment, property reveal, confusion intervention). All animations must have reduced-motion alternatives. No color-only status indicators (already covered by meaning-before-color).
8. Tested and Validated
Rules discovered through live agent testing that are not in any original spec. These emerged from running real conversations with real property data across 5 archetypes and observing where the system's behavior didn't match what a real user would expect. Each one is now an enforceable guideline.
Before an address is provided, the agent has zero property data. It must not say "let me show you what your property opens up" or reference equity, value, or payment. If the user is vague, the only move is to invite the address: "Want to start with your address? I can pull up some real numbers for your place."
When a user gives a vague answer ("idunno," "not sure"), the agent must not ask the same question with more words. Instead: (1) give something to react to, (2) offer a concrete starting point, or (3) name the uncertainty and invite the address. Shorter, not longer. Give, don't ask again.
Some properties return $0 market value from public records (condos, trusts, new construction). The system must fall back to assessed value and note "based on tax assessment; market value may be higher." Never show $0 to the user.
When the owner on record is a trust, LLC, or corporation (e.g., "TOM LIVING TRUST," "SLG 315 WEST LLC"), the system must not use it as a personal greeting. Skip name personalization and use the address instead. Detect entity patterns: trust, LLC, inc, corp, ltd, estate.
When property records are incomplete (0 beds, 0 baths, 0 sqft, no year built), do not display the field. Only show data that exists. Incomplete data shown as "0" looks like a system error, not a data gap.
The agent must never say "ATTOM," "API," "our database," or any internal system name. When asked about data sources, say "public records." This applies to all internal system names per LANG-020.
When the user says "wrong unit," "it's Apt A," or corrects the address, the system must retry the property lookup with the corrected address. Do not give up after the first miss. The address is the gateway to personalization.
The conversation sequence must be: (1) probe what the goal means to the user (CONV-030), then (2) seek the specific payment ceiling (CONV-031), then (3) generate scenarios. The meaning probe comes first because it determines which paths are relevant. Ceiling without context produces irrelevant scenarios.
The phrases "not recommendations" and "logics of choice" in the consent checkpoint are required verbatim. Paraphrasing to "ready to see those options?" changes the frame from education to sales. The specific words do the work.
Scenarios are "directions," not "paths." David says "options," Sydney says "scenarios," the prototype says "directions." Do not invent terminology. Mirror the vocabulary the client and their users actually use. If a term doesn't appear in any source document, don't introduce it.
When a user asks for a recommendation, the agent responds: "I can't choose for you, but I can make it obvious. What matters more right now: [X], [Y], or [Z]?" Then shows 2-3 parallel directions with tradeoffs. Returns agency. Never prescribes.
Public records return when the house was built, not when the current owner purchased it. The agent must not say "since you bought [yearBuilt] years ago." Use value and equity estimates without referencing purchase timing unless the user provides it.
Users enter addresses in every possible format: "2609 nelson ave redondo beach apt a," "2609 Nelson Ave, Apt A, Redondo Beach CA 90278," "my house on nelson in redondo." The system must handle all of them. Address normalization uses AI, not regex. The agent is responsible for interpreting what the user means and constructing a proper lookup, regardless of how the input was formatted. This principle extends beyond addresses: any user input that needs to map to a system call should be interpreted by the agent, not parsed by rigid rules.
The prompt is the brain. It detects tensions, decides what to say. But the prompt cannot remember between sessions or share what it knows with other systems.
The architecture is: prompt reasons → structured output extracts state → state persists to database → next turn, saved state is injected back as context. The agent never re-derives what it already concluded. It reads its own prior state and builds on it.
Without this separation: every turn re-reads the entire conversation and re-concludes from scratch (fragile, inconsistent). With it: the agent picks up exactly where it left off, even across sessions, even when the conversation history is truncated.
Every exchange, the agent outputs structured state: archetype, confidence, emotional state, tensions, data captured (tagged), dimensions remaining, scenarios, rules satisfied. This is not logging. This IS the state. The clarity card reads it. The scenario engine reads it. The checklist reads it. Analytics reads it.
If the state only lives inside the prompt's reasoning, nothing else can see it. Extracting it into structured output makes the agent's understanding legible to humans and machines simultaneously.
When a user returns, the system loads their saved state and injects it as context: "Here's your session: Maria Chen, Cash-Flow Manager, tension between payment and kitchen, ceiling $2,200, rejected $50k option, preferred the $30k compromise." The agent picks up where it left off. No re-introduction, no re-asking questions already answered. Returning feels like continuation, not a restart.
Because the agent's state is extracted as structured data (not hidden inside a prompt's chain of thought), a human can inspect it at any point: "What does the agent think the user knows? What tensions has it detected? What's it planning to do next?" If the agent behaves unexpectedly, you can read the state and find exactly where the model went wrong. This is the glass box. It's not just a demo feature. It's how the system is debugged, evaluated, and improved. Every annotation David makes is a correction to the state model, not just feedback on the output.
Three layers, separated:
- State layer (Convex): What the agent knows. Persisted, queryable, shared across surfaces and sessions. Grows with each exchange. Never lost.
- Reasoning layer (prompt + LLM): How the agent thinks. Tension detection, emotional gating, the decision of what to say. Stateless per call, but receives the accumulated state as input.
- Delivery layer (message + UI): What the user sees. Conversation, clarity card, scenarios. Reads from state. Renders the reasoning's output. The three surfaces are three views of the same state.
If you change the state (user edits clarity card), the reasoning layer re-runs with the new state. If you change the reasoning (new prompt version), the state remains intact. If you change the delivery (new UI), neither state nor reasoning are affected. These layers are independent.
The agent tracks six dimensions, each with a state:
| Dimension | What it is | States |
|---|---|---|
| Rate | Interest rate target | open (not discussed), locked (user decided, with value + reason in their words), eliminated (ruled out) |
| Term | Loan length | |
| Max Payment | Monthly ceiling | |
| Cash Out | Equity access amount | |
| Timeline | How long staying | |
| Program | Conventional, FHA, VA, etc. |
The agent's job is to move dimensions from open → locked through conversation. Each transition needs a reason in the user's words. Tensions happen when locking one dimension conflicts with another. Elimination happens when a priority choice removes an option.
After each response, the agent's full structured output (dimensions, clarity card, detected state) is saved and sent back as context on the next turn. The agent reads its own prior conclusions and builds on them. It does not re-derive from conversation history. The mental model accumulates and evolves, rather than being reconstructed from scratch each exchange.
Three sections with seven categories mapped in:
| Section | Contains | Colors |
|---|---|---|
| Today (facts) | Property facts. Agent assumptions (dimmed, unconfirmed). | Purple #6B35E4 |
| What Matters (the user's world) | Motivation (their words). Preferences. Constraints. Tradeoffs accepted. | Coral #FE5F22, Lavender #B3A7B7 |
| What's Next (where it's going) | Scenario options with status. Advisor flags (tensions, risks). What's still open. | Green #2C841D |
No "surprises" category. Agent routes each discovery to the right section: new fact to Situation, preference shift to What Matters, new direction to Directions.
When a user rejects a scenario or says they don't like something, that is the most valuable data in the conversation. The agent must ask WHY.
Look for contradictions between what they said before and what they're rejecting now. Name the contradiction gently: "Earlier you said you wanted X, but this scenario gives you X and you don't like it. What's the piece I'm missing?"
Each contradiction reveals a hidden constraint or priority they haven't articulated yet. The agent's job is to name it back to them: "It sounds like there's a limit to how much time you'd trade for lower payments. Where's that line?"
The goal is to reach the moment where the agent can say: "Based on everything, here's what I think matters most to you: [synthesis]. Is that right?" That is when dimensions collapse and scenarios become personal.
Rejection is refinement, not failure. Every "no" gets you closer.
The clarity card has strict routing rules. Each piece of information goes in exactly one place:
| Field | What goes here | What does NOT go here |
|---|---|---|
| situation | Property facts from data: name, address, value, equity, rate, payment, sqft | User preferences, agent deductions, open dimensions |
| motivation | A direct quote of why they're here, in their exact words | Paraphrased goals, agent summaries |
| what_matters | Things the USER explicitly said they care about | Property facts, agent deductions, anything already in motivation |
| what_we_set | Assumptions the agent made that the user hasn't confirmed | Confirmed facts, user statements |
| directions | Named scenario options the agent has presented | Open dimensions, property facts, preferences |
| advisor_flags | Tensions or risks the agent detected | Facts, preferences, open dimensions |
| whats_still_open | Questions the agent needs answered to progress | Open dimensions (those live in the dimension pills) |
Prohibitions:
- Open dimensions (Rate, Term, etc.) are tracked in the dimension model, not in the card sections.
- Never repeat the same information across two fields. Say it once.
- If unsure where something goes, leave it out. An empty field is better than a wrong one.
When the system attempts a property lookup and gets no results, the agent must be told explicitly that the lookup failed. Without this signal, the agent assumes it's still waiting and stalls ("please hold on for a moment").
With the signal, the agent responds per the rules: "I wasn't able to pull up details for that address. Want to double-check it, or we can work with general numbers?" No technical language, no "something went wrong," just a choice that keeps the door open.
This applies to any system action the agent triggers: if it failed, tell the agent it failed so it can respond honestly instead of pretending to wait.