- Shipped
- May 18, 2026 at 12:40 AM UTC
- Author
- Kamo
- Commit
- de6012c
1. BorrowerHeader: slim sticky header on every post-application surface (apply/*, waypoints/*, workspace/*). Logo / back-to-workspace on the left, page title centred, "Help" button on the right that opens a sheet with phone, email, and a workspace shortcut. Replaces the prior "no global nav anywhere" dead end. 2. useAutosave hook + AutosaveBadge: debounced (800ms by default) form-state autosaver with a Saved/Saving/Error result. Front-door wired as the first consumer — keystrokes now stream to the server without the user needing to click save. Badge updates relative timestamp every 15s. 3. International address support: AddressFields drops the hardcoded US_STATES and replaces it with a SubdivisionField + Country selector per the platform standard. Postal-code label/inputMode flip per country (ZIP vs Postal Code vs CP vs Postcode vs PIN). US, CA, MX, GB, AU, IN enumerated; other countries fall back to a free-text subdivision input. AddressFields accepts lockCountry for surfaces that genuinely only collect US addresses. useAddressAutocomplete stub hook documents the integration point for Google Places / Smarty / USPS — returns disabled until an API key is wired. 4. Resume token recovery: ResumeClient no longer dead-ends. When the token is missing or expired it offers (a) pick up where you left off (when an active appUid is already in IndexedDB on this device) and (b) "send me a new link" form that posts to /api/resume-recover. The endpoint returns a generic ack regardless of whether the contact is on file (enumeration defence). Backend lookup + delivery TODO is documented inline. Build 29/29, 140 tests.