/network/create is one page; the twelve steps move to /settings/wizard

Featurekamo-internal
Shipped
August 28, 2026 at 4:22 AM UTC
Author
Kamo
Commit
8f58728

CreateOrgForm.tsx is one component with two layouts (page/widget), built from Task 7/8's CreateOrgFields model, field groups and OrgBrandPreview. page.tsx is now just the full-width shell around it. The old wizard's nine step files plus Stepper/stepIcons move to app/settings/wizard, where Task 12 rewires them into the Getting Started Configuration Wizard; BranchTypeStep, MemberInfoStep, ReviewStep, StepNavigation, CancelModal and the sessionStorage-backed useWizardForm hook are retired outright, since a one-page create has no steps to navigate between and nothing left to save a draft of. Every relative import in the moved files that pointed at ../ui/*, ../brandscan/*, ../../types, ../../validation, ../../appSelections, ../../complianceWizard or ../../hooks/* is rewritten to the absolute @/app/network/create/... form, since components/ui and components/brandscan stay put (the surviving field components still use them) and only resolve one directory up from the steps' old location. hooks/useWizardForm.ts is trimmed rather than deleted: __tests__/submitWizard.test.ts imports freshWizardData from it and must stay green and unedited, so the file keeps that one export (and the INITIAL_DATA it needs) and drops everything else that no longer has a caller. Two correctness fixes found in review before wiring the field components up: - CreateOrgForm's onChange is now referentially stable across renders (requestScan read through a ref instead of a useCallback dependency) — OrgTypePicker and IdentityFields each list onChange in a useEffect dependency array, and requestScan's own identity changes on every completed brand scan, which would have re-fired both effects on every scan rather than only on real input changes. - DropZone takes a real disabled prop (tabIndex=-1, guarded handlers, native disabled on its file input and fallback button) instead of relying only on an ancestor's pointer-events-none, which does nothing for keyboard activation; wired through BrandFields' logo slots so a locked form actually locks out keyboard users too. /network/create?fresh=1 becomes plain /network/create in FirstOrgCta.tsx and network/page.tsx: the one-page form starts from initialCreateOrgFields() on every mount rather than restoring a sessionStorage draft, so the param has nothing left to do.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing