---
id: w5/m5/t003
title: Service-scoped nav chrome (Overview / Logs)
worker: worker5
status: done
estimate: 30m
depends_on: [w5/m5/t002]
---

## Objective

Add a service-scoped nav (Overview / Logs) mirroring Render's service sidebar structure, hosted by a shared service-detail layout route. Logs is a labeled placeholder nav item until m6.

## Context

- TanStack Router file-based routes under `src/routes/`.
- A shared service-detail layout route (`services.$serviceId.tsx`) can host the service nav + `<Outlet/>`.
- Render's service nav is a **left sidebar** with grouped sections (ungrouped Events/Settings, then MONITOR {Logs, Metrics}, MANAGE {…}) — see the milestone README's "Render reference". bex's subset for m5: Overview (bex landing) + a Monitor-style group with Logs. Whether bex renders this as a left sub-nav or a tab strip is an implementation choice, but the grouped structure should read as Render's.

## Steps

1. Add a `services.$serviceId` layout route rendering the overview header + service nav + `<Outlet/>`.
2. Nest the overview (index) route under it.
3. Add a Logs nav item that routes to a labeled "coming soon" placeholder (content in m6).
4. Localize nav labels (`services.*`).

## Files

- `src/routes/services.$serviceId.tsx` (new layout route)
- `src/routes/services.$serviceId.index.tsx`
- `src/features/services/components/` (service-nav component)
- `src/features/services/locales/{en,zh}.ts`

## Acceptance criteria

- [x] The service page shows an Overview / Logs service nav mirroring Render's grouped sidebar.
- [x] The Logs item is a labeled placeholder, not a broken route.

## Out of scope

- Logs content (m6).
- Metrics / Events / Settings / Environment nav items (later milestones).
