Full analysis of every signed-in route, the four menu surfaces that currently render them, and a final recommendation. Read-only — no code changed.
Every page under src/app/(app)/. “In menu?” = reachable from the desktop sidebar today.
| Route | Purpose | In menu? | Notes |
|---|---|---|---|
/ | Home | front | |
/browse | Listing search | front | |
/proposals | Proposals list | front | Also at /dashboard?tab=proposals · duplicate |
/vouch | Vouch picker | front | |
/inbox | Messages list | Messages | |
/trips | Trips list | Trips | Also at /dashboard?tab=traveling · duplicate |
/wishlists | Saved listings | Wishlists | |
/dashboard | Host dashboard | Host dashboard | |
/dashboard?tab=network | Network tab | dead | 500s · sidebar item removed (T3.10) |
/dashboard/traveling | Legacy redirect | hidden | Redirects to ?tab=traveling |
/dashboard/network | Legacy redirect | hidden | Redirects to broken target |
/dashboard/pending-vouches | Pending invites | orphaned | No menu entry · only via deep link |
/profile | Own profile | Profile | |
/profile/[id] | Public profile | indirect | |
/invite | Old invite flow | orphaned | Duplicate flow (issue 3) |
/invite/share | Newer invite flow | indirect | From /vouch empty state |
/settings | Account settings root | Account settings | |
/settings/{hosting,notifications,phone} | Settings sub-pages | indirect | 3 pages |
/alerts | Proposal alerts | Proposal alerts | |
/faqs | FAQ encyclopedia | Help Center | Sidebar Help Center → /faqs |
/help | FAQ + contact form | indirect | Older variant · signed-out menu only |
/hosting/create | Create listing | indirect | |
/hosting/listings/[id]/edit | Edit listing | indirect | |
/listings/[id] | Public listing detail | indirect |
Four surfaces render navigation. They are not consistent today.
| Surface | Source | What’s in it |
|---|---|---|
| Desktop sidebar | nav-items.tsx → SidebarShell | front (4) + interior (6) + account (3) = 13 items |
| Avatar dropdown (top-right) | account-menu.tsx | Mirrors NAV_GROUPS + Log out · single source ✓ |
| Mobile bottom bar | mobile-nav.tsx (tabs[]) | Explore / Wishlists / Dashboard / Inbox / Menu |
| Mobile slide-up sheet | mobile-nav.tsx (custom block) | Hand-rolled · adds “Invite someone” + “Vouch for a member” not in sidebar |
/faqs. Signed-out account menu Help Center → /help. Mobile sheet → /faqs.Eight concrete problems flagged during the route walk.
/dashboard?tab=network 500s. The route file at /dashboard/network still exists and forwards to the broken target. Nothing in the sidebar surfaces vouch-network management today./dashboard/pending-vouches has no link from any menu surface. Only reachable from notification deep-links or direct URL./invite (5-step), /invite/share (5-step + mode chooser), and VouchModal (component, exists-user vouching). Punchlist item 2 covers this./trips ≈ /dashboard?tab=traveling · /proposals ≈ /dashboard?tab=proposals. Two URLs per concept means two places that can drift./dashboard/traveling and /dashboard/network exist purely to redirect. They imply structure that doesn’t exist./help vs /faqs split. /faqs is the richer TOC-driven encyclopedia. /help is the older variant with FAQ list + contact form. Sidebar → /faqs; signed-out menu → /help.Adopts your first-pass structure. Five groups, divided by horizontal rules. One source of truth in nav-items.tsx that every surface consumes.
Each question got a binding recommendation. Open to override — these are not locks.
/help vs /faqs — revised/help = contact the team. Above the contact form, a FAQ search bar and a “Looking for answers? Browse the FAQs →” link. The form is the main affordance./faqs = standalone, searchable knowledge base. At the bottom of the page, a “Still need help? Contact us →” CTA that links to /help./help. Sidebar “Help Center” entry → /help (the human-help front door; FAQ is one click away)./wishlists → /saved.src/app/(app)/wishlists/ → saved/, update href references in nav-items.tsx, mobile-nav.tsx, account menu, “Add to wishlist” actions on listings. Possibly rename /api/wishlists/* → /api/saved/*.wishlist_listings etc.) — internal vocabulary doesn’t need to change./wishlists → /saved as a safety net for any deep links in the wild.traveling + proposals tabs. Keep Listings as a separate sidebar entry. Keep the tab primitive for future use./dashboard#listings (scroll-anchors to the listings section of the host dashboard). Same URL as Host dashboard, different scroll target.UnifiedDashboard keeps its tab UI scaffolding — we just don’t render multiple tabs today. When Listings grows into its own page (deferred per 5f), promote it then.traveling + proposals tab content from the dashboard. Legacy redirect files (/dashboard/traveling, /dashboard/network) deleted./network as the consolidated network-management surface.Contents (one page, three sections):
PendingVouchesList from /dashboard/pending-vouches. That route then dies or redirects.getNetworkData() already exists — fixing whatever makes the dashboard tab 500 unblocks the page./profile. Account settings + Proposal alerts + Help Center stay as siblings underneath./listings management page is its own build session.Loren’s note: form cards can stay narrow, but the heading + supporting copy + step indicators above them shouldn’t inherit that narrow width. Two separate concerns — outer page band vs. inner card width.
Today: 15 distinct max-w-[...] values across pages. Target: 3 outer tiers (every page picks one) + a <FormCard> primitive for narrow form blocks inside a wider page band.
| Token | Width | Use for |
|---|---|---|
general | max-w-[820px] | Most pages — lists, settings, forms, management. Headings live at this width even when the form is narrow. |
wide | max-w-[1180px] | List + detail with side rail · faqs, profile detail, listing detail, proposal lists |
app-shell | max-w-[1600px] | Dense workspace · inbox, host dashboard |
Plus a separate <FormCard variant="narrow" | "default"> primitive (≈480px / ≈680px). Form pages mount a general PageShell with a FormCard inside — the heading band is wide, the form itself stays narrow.
/invite/share, the “Invite + pre-vouch a friend” display heading + step indicator now sit in the 820 band and read on a single line. The vouch picker card below stays at FormCard-narrow.| Page | Currently | Outer (PageShell) | Inner |
|---|---|---|---|
/invite · /invite/share · /settings/phone | 540 | general | FormCard narrow |
/vouch (chooser) | 640 | general | FormCard narrow |
/settings/notifications · /profile/edit · /proposals/new · /proposals/[id]/edit | 680–720 | general | FormCard default |
/dashboard/pending-vouches (moving to /network) | 720 | general | — (list fills) |
/settings · /alerts · /proposals/[id] · /trips/[bookingId] · /vouch · /help · /settings/hosting · /hosting/create | 780–880 | general | — |
/proposals · /profile/[id] · /hosting/listings/[id]/edit · /faqs · /listings/[id] | 960–1280 | wide | — |
/inbox · /dashboard | 1600 | app-shell | — |
Multi-session workstream. Each session runs autonomously — no mid-flight check-ins. Surface ONE comprehensive review at the end of each session, with side-by-side proofs on key surfaces. M1 + M3 are lowest-risk and go first.
| Session | Scope | Risk |
|---|---|---|
| M1 · Menu IA refactor | Update nav-items.tsx with new groups. Rewire mobile-nav to consume NAV_GROUPS. Rename Wishlists → Saved. Replace Profile row icon with avatar. | low |
M2 · /network page build | Reuse NetworkSection + PendingVouchesList. Add hero + “New invite” CTA. Delete /dashboard/network redirect file. Strip network tab from /dashboard. | medium |
| M3 · Page-shell standardization | Add <PageShell> primitive. Refactor pages per the bucketing table. Includes the pending-invites design pass. | low |
| M4 · Help consolidation | Move HelpContactForm into the canonical page. Redirect the dead route. Update both menu links. | low |
| M5 · Dashboard cleanup | Drop traveling + proposals tabs. Drop legacy redirect files. /dashboard is hosting-only. | medium |