{/* summary card for the object */}
{children}
);
}
```
Notes:
- `href`s use placeholders (`{orgId}`, `{niceId}`, `{resourceId}`,
`{clientId}`, `{userId}`, `{domainId}`, `{apiKeyId}`, `{providerId}`,
`{remoteExitNodeId}`) that `HorizontalTabs` fills in from route params. If you
add a new param name, add it to `hydrateHref` in
`src/components/HorizontalTabs.tsx`.
- Use `exact: true` on a tab whose href is a prefix of the other tabs (the index
tab).
- Build tabs conditionally from object state, like the resource layout shows
mode-specific tabs:
`src/app/[orgId]/settings/resources/public/[niceId]/layout.tsx`.
- When there's no index tab, `[id]/page.tsx` just `redirect`s to the first tab
(`.../[niceId]/page.tsx` → `/general`).
- The layout puts the object into a Provider (`OrgProvider`,
`ResourceProvider`, `SiteResourceProvider`, ...). Tab pages are client
components that read it with the matching hook (`useOrgContext`,
`useResourceContext`, `useSiteResourceContext`) and call `updateX(...)` on
the context after saving so the header card stays current.
- `showProfessional` on a `TabItem` marks paid tabs.
- For tabs inside a single page or a Credenza (no routing), use
`