Borrower UI serves the entire borrower experience.
Each folder contains its UI, API layer, and tests.
Satisfy codes determine completion — screens are always present, not conditionally rendered.
Each satisfy code declares its screen and required fields.
Every screen calls the same submit handler. The renderer decides how to persist.
One component handles all three states — wizard screens, offer, and confirmation.
Three phases, each further decoupling screens from the decision engine.
1 rule = 1 field
Screens conditionally rendered
Rules drive visibility + completion
1 code = 1 to many fields
All screens always present
Codes drive completion only
Three principles behind the Borrower UI application wizard.