Marketing landing and the Live map both claim / — move the app under /app #19

Open
opened 2026-08-19 23:26:50 -04:00 by logan · 0 comments
Owner

app/page.tsx renders both the marketing landing (capabilities, steps, plans) and LiveView, picking between them at runtime. Two different products are fighting for the same route: the signed-out sales page and the signed-in map.

That conflict is the root of several smaller oddities — middleware.ts has to special-case / as public while every app route below it is gated, ChromeSwitcher keeps a parallel MARKETING_PATHS list that must stay in sync with PUBLIC_PATHS by hand, and the post-login redirect still points at /dashboard, a route deleted in chunk 4 (eaae452).

Wanted: every app route moves under an /app prefix.

  • /app — the live map (today's LiveView)
  • /app/nodes, /app/incidents, /app/calls, /app/systems, /app/alerts, /app/settings/*, /app/admin, /app/profile, /app/tokens, /app/trips
  • / goes back to being the marketing landing only, alongside /features, /pricing, /faq, /terms, /privacy, /waitlist
  • /login, /signup, /onboarding are a judgement call — they are neither marketing nor app. Decide deliberately rather than by default.

A Next.js route group (app/(app)/...) does not produce the URL prefix; this needs a real app/app/ directory or equivalent. The move touches every internal Link, the nav in ChromeSwitcher, middleware.ts (the prefix makes the gate a single startsWith instead of a hand-maintained allowlist, which is the real prize), and the login redirect.

Separately noted while looking: /nodes renders blank. Unclear yet whether that is the org scoping, the data, or the page — check before assuming the route move fixes it.

Raised 2026-08-19. Deliberately deferred — not to be done now.

`app/page.tsx` renders both the marketing landing (capabilities, steps, plans) and `LiveView`, picking between them at runtime. Two different products are fighting for the same route: the signed-out sales page and the signed-in map. That conflict is the root of several smaller oddities — `middleware.ts` has to special-case `/` as public while every app route below it is gated, `ChromeSwitcher` keeps a parallel `MARKETING_PATHS` list that must stay in sync with `PUBLIC_PATHS` by hand, and the post-login redirect still points at `/dashboard`, a route deleted in chunk 4 (`eaae452`). **Wanted:** every app route moves under an `/app` prefix. - `/app` — the live map (today's `LiveView`) - `/app/nodes`, `/app/incidents`, `/app/calls`, `/app/systems`, `/app/alerts`, `/app/settings/*`, `/app/admin`, `/app/profile`, `/app/tokens`, `/app/trips` - `/` goes back to being the marketing landing only, alongside `/features`, `/pricing`, `/faq`, `/terms`, `/privacy`, `/waitlist` - `/login`, `/signup`, `/onboarding` are a judgement call — they are neither marketing nor app. Decide deliberately rather than by default. A Next.js route group (`app/(app)/...`) does not produce the URL prefix; this needs a real `app/app/` directory or equivalent. The move touches every internal `Link`, the nav in `ChromeSwitcher`, `middleware.ts` (the prefix makes the gate a single `startsWith` instead of a hand-maintained allowlist, which is the real prize), and the login redirect. Separately noted while looking: `/nodes` renders blank. Unclear yet whether that is the org scoping, the data, or the page — check before assuming the route move fixes it. Raised 2026-08-19. Deliberately deferred — not to be done now.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: logan/server-26#19