Skip to content

Commit ca78042

Browse files
mariuspruvotclaude
andcommitted
feat(web): breadcrumb nav + settings link on installation history
- InstallationDetail: top breadcrumb (installations · history) + Settings button - SettingsView: symmetric breadcrumb (installations · history · settings) Makes installation sub-pages navigable without round-tripping through the list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent a843293 commit ca78042

2 files changed

Lines changed: 32 additions & 5 deletions

File tree

apps/web/src/features/dashboard/InstallationDetail.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { useState, useEffect, useCallback } from 'react'
7-
import { useParams, useNavigate } from 'react-router'
7+
import { Link, useParams, useNavigate } from 'react-router'
88
import { deleteSession, fetchInstallationSessions } from './dashboardApi'
99
import type { PaginatedSessionsResponse } from './dashboardApi'
1010
import { formatDuration, formatRelativeTime } from './formatters'
@@ -104,10 +104,27 @@ export default function InstallationDetail() {
104104
return (
105105
<>
106106
<div className="flex flex-col h-full">
107+
{/* Breadcrumb + settings — pinned to the very top */}
108+
<div className="shrink-0 flex items-center justify-between gap-3 mb-3">
109+
<Overline>
110+
<Link to="/installations" className="hover:text-ink2 transition-colors">installations</Link>
111+
{' '}{'\u00b7'}{' '}
112+
<span className="text-ink2">history</span>
113+
{' '}{'\u00b7'}{' '}
114+
{total} total
115+
</Overline>
116+
<Link
117+
to={`/installations/${installationId}/settings`}
118+
className="font-mono text-[11px] lg:text-[12px] font-medium px-2.5 py-1 lg:px-3 lg:py-1.5 rounded-[6px] border border-rule-str bg-card text-ink hover:bg-card-hi transition-colors inline-flex items-center gap-1.5"
119+
>
120+
<span aria-hidden="true" className="text-dim">{'\u2699'}</span>
121+
Settings
122+
</Link>
123+
</div>
124+
107125
{/* Header + filters — wraps on small screens */}
108126
<div className="shrink-0 flex flex-col lg:flex-row lg:justify-between lg:items-end gap-3 mb-4">
109127
<div className="min-w-0">
110-
<Overline className="mb-1">{'\u25b8'} SESSIONS {'\u00b7'} {total} TOTAL</Overline>
111128
<h1 className="font-mono text-xl lg:text-2xl font-bold tracking-[-0.02em]">Session History</h1>
112129
<p className="font-mono text-[13px] text-dim mt-0.5">// every time Claude ran against one of your PRs</p>
113130
</div>

apps/web/src/features/installation/SettingsView.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useState, useEffect, useCallback } from 'react'
2-
import { useParams } from 'react-router'
2+
import { Link, useParams } from 'react-router'
33
import { apiFetch } from '../../shared/api/client'
44
import { Button, Card, Chip, Dot, Overline } from '../../shared/components'
55

@@ -196,10 +196,20 @@ export default function SettingsView() {
196196
}
197197

198198
return (
199-
<div className="max-w-2xl mx-auto py-8">
199+
<div className="max-w-2xl mx-auto py-8 w-full">
200+
{/* Breadcrumb */}
201+
<div className="mb-3 flex items-center justify-between gap-3">
202+
<Overline>
203+
<Link to="/installations" className="hover:text-ink2 transition-colors">installations</Link>
204+
{' '}{'\u00b7'}{' '}
205+
<Link to={`/installations/${installationId}`} className="hover:text-ink2 transition-colors">history</Link>
206+
{' '}{'\u00b7'}{' '}
207+
<span className="text-ink2">settings</span>
208+
</Overline>
209+
</div>
210+
200211
{/* Header */}
201212
<div className="mb-8">
202-
<Overline className="mb-2">{'\u25b8'} SETTINGS</Overline>
203213
<h1 className="font-mono text-2xl font-bold text-ink">Installation Settings</h1>
204214
<p className="text-dim text-sm mt-1 font-sans">
205215
{installation.account_login} {'\u00b7'} {installation.account_type}

0 commit comments

Comments
 (0)