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.
/ 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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
app/page.tsxrenders both the marketing landing (capabilities, steps, plans) andLiveView, 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.tshas to special-case/as public while every app route below it is gated,ChromeSwitcherkeeps a parallelMARKETING_PATHSlist that must stay in sync withPUBLIC_PATHSby hand, and the post-login redirect still points at/dashboard, a route deleted in chunk 4 (eaae452).Wanted: every app route moves under an
/appprefix./app— the live map (today'sLiveView)/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,/onboardingare 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 realapp/app/directory or equivalent. The move touches every internalLink, the nav inChromeSwitcher,middleware.ts(the prefix makes the gate a singlestartsWithinstead of a hand-maintained allowlist, which is the real prize), and the login redirect.Separately noted while looking:
/nodesrenders 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.