A friendlier version of the go-live questions for customers who are new to software: it stays in Settings, explains before it asks, and turns questions into big choices.
Mock for Gera · 2026-10-01 · nothing built yet · real questions from the app today, fictional company
Click around. Use the left menu (or the picker at phone width). Switch how far along the company is, including after go-live. Choices save as you tap.
/settings/onboarding/…, inside the normal Settings frame, so clicking a module never leaves Settings. After go-live the group drops to the bottom as a record. The Company group loses its "Onboarding & go-live" row (it became Overview). The other option, sub-pages under Company › Onboarding & go-live, buries the most important thing a new customer does three levels deep.acceptRecommendationPlan allows. Renewal limits show "used until you answer" instead: Clara does use 2 months owed and 2 late payments today, but the code deliberately refuses to call the customer's money our recommendation. Office hours get a quick preset, not a badge.From origin/main on 2026-10-01. "Counts" = it is in ONBOARDING_MENU[].fields, so it can hold a dot and shows in "N left". Labels in the middle column are today's; the mock rewrites them as plain questions.
| Section | Today's label · stored as | Answer type | Default / recommendation | Counts |
|---|---|---|---|---|
| Leasing › Hours & contact | Office hours · office_hours | Per-weekday hours editor | None. Deliberately not acceptable (registry default is a shape readers refuse) | Yes |
Tour length · tour.durationMinutes | Whole minutes, 15 to 120 | Recommended 30 (Accept recommendation) | Yes | |
Travel time between showings · tour.travelBufferDefaultMinutes | Whole minutes, 0 to 120 | our default 0 (Accept recommendation) | Yes | |
Company name used in emails · Organization.name | Text | From sign-up | No | |
| Tour hours, minimum notice, how far ahead, time zone, holidays, email signature | Coming soon (system admins only today) | n/a | No | |
| Leasing › Fees & deposits | Application fee, Admin fee, Security deposit, Pet deposit, Pet rent (monthly) · pricingDetails.* per building | Dollar amount per building, Confirm stamps pricingVerified | Scraped value shown until confirmed | Yes (5) |
| Leasing › Applying | How applicants get the application link · leasing.applicationLinkMode | Two choices; "A new link for each prospect" needs AppFolio | None | Yes |
How long a decision takes; ID and income documents needed; Income requirement; Portable screening reports; Co-signers and guarantors; Housing vouchers and affordable units · knowledge.section.* | Text, up to 500 characters | None | Yes (6) | |
| Leasing › Policies | Pet limit and rules; Notice needed on month-to-month; Lease lengths offered; Renter's insurance required?; Smoking | Text | None | Yes (5) |
| Leasing › Tours & move-in | Staffed or self-guided tours; How keys are handed over; What happens after approval | Text | None | Yes (3) |
| Leasing › People | Who gets escalations · escalation.owner | None | Yes | |
Leasing call ring order · ring_list.leasing | Up to 4 teammates, ordered | None | Yes | |
Who gets the lead-summary email · leasing_digest.recipients | Email list; saving one turns the weekly email on | Empty = off | No, on purpose | |
| Maintenance › Routing | Maintenance calls go to · maintenance.intake_route | Read-only for customers (Propflow sets it) | None | Yes (see finding 1) |
When a maintenance caller asks for a person, Clara rings · ring_list.maintenance | Up to 4 teammates | None | Yes | |
Calls Clara can't help with forward to · catch_all | Phone number with country code | None | Yes | |
| Maintenance › Emergencies | On-call rotation · emergency.route.residential | Propflow only | None | Staff only |
| What counts as an emergency; Emergency vendors (pointer to Vendors) | Coming soon; link | n/a | No | |
| Maintenance › Residents | Offer Spanish at this building; What to say when a repair is waiting on a part | Coming soon | n/a | No |
| Renewals › Offers | Days before lease end to send the first offer | Pointer: set per building | n/a | No |
How the new rent is set · renewal.offerTerms | Market / at most a % / at most a $, lease lengths, month-to-month premium | None (customer's money) | Yes | |
Which leases get an offer · renewal.eligibility | Months owed, late payments, grace days | Engine uses 2 months, 2 late, 10 days until answered; not offered as a recommendation | Yes | |
| Renewals › Follow-up | Follow-up timing; If there's still no reply; When to hold for a person | Coming soon | n/a | No |
| Overview (other go-live items) | Choose which buildings Propflow works in; Connect your shared leasing inbox; Connect a calendar for tours; Set up billing | Links and Stripe buttons | n/a | Setup steps |
Totals a customer sees: Leasing 25, Maintenance 3 (2 they can answer), Renewals 2.
maintenance.intake_route is read-only for customers ("Propflow sets this up with you") but it is not in PROPFLOW_ONLY_FIELDS, so it holds a dot and counts toward "N left" until staff set it. The mock shows it as "Propflow sets this up" and leaves it out of the count. Fix: add it to that list, a few lines in its own PR.label and help, never title.ONBOARDING_GUIDE_HREF becomes /settings/onboarding. Every section href, sectionForPath, the hub rows and the dots all read from it, so it is one constant.(workspace)/onboarding-guide/<module>/<section> to (workspace)/settings/onboarding/<module>/<section>, which puts them inside the Settings layout and menu with no new shell./onboarding-guide/** → the same path under /settings/onboarding; /onboarding-guide and /settings/go-live → /settings/onboarding. Same pattern as the old Knowledge page's redirect. Bookmarks and old emails keep working.settings-menu.ts: new group onboarding (Overview + one item per ONBOARDING_MENU tab; activeSettingsMenuHref already lights a module for every section under it); placed first before go-live, last after. company-topics.ts: go-live leaves COMPANY_TOPIC_PAGES. The menu test and the census test move in the same PR as the routes.OnboardingGuideShell → OnboardingModuleFrame: drops its own PageHeader, TabBar and back link (the Settings menu replaces them) and keeps the status, read-only and dots context. Adds the intro, the flow, the stepper with "x of y" and Back/Next.onboarding-menu.ts gains copy only: intro and flow per tab, intro per section. Still imports nothing.ChoiceCards (check the component library for a radio-card piece first). TextAnswerQuestion gains choices; the badge reads ctx.recommended, so it cannot appear where acceptRecommendationPlan refuses. KnowledgeQuestions gains optional quickAnswers that fill the same text.PreLaunchChecklistCard + onboarding-hub-rows.tsx keep their data (onboardingModuleRows, the customer rows) and get the progress hero and module cards.origin/main, each works on its own| Part | What ships | ≈ lines |
|---|---|---|
| 1 · Stay in Settings | Constant flip, page moves, redirects, Onboarding menu group, shell drops its own header. Today's question cards unchanged. This alone fixes "it leaves Settings". | 250 |
| 0 · Intake dot | maintenance.intake_route into PROPFLOW_ONLY_FIELDS. Independent, can go any time. | 20 |
| 2 · Friendly hub | Progress hero, go-live steps, module cards with "N left", setup rows; live and done states; menu counts. | 280 |
| 3 · Leasing page frame | Intro, flow, numbered stepper, "N of 25", Back/Next, live record view. Questions unchanged inside it. | 260 |
| 4 · Choice cards | ChoiceCards; tour length, travel time, office hours preset, application link, escalation and ring pickers as cards; choice autosave. | 300 |
| 5 · Plain words | Question labels and help rewritten, quick answers for the yes-or-no knowledge questions, "Propflow" spelling. | 200 |
| 6 · Maintenance & Renewals | Intro and flow copy, renewal rent as cards, "Propflow sets this up" rows. Renewal "keep current limits" card waits on finding 2. | 250 |
Order: part 1 first, since every later part uses its routes. Then parts 2, 3 and 4 open together, up to three at once, each off fresh origin/main. Parts 5 and 6 come after part 4, because they use the cards.