diff --git a/components/shared/nav-bar.tsx b/components/shared/nav-bar.tsx
index d56cf99..d6dba25 100644
--- a/components/shared/nav-bar.tsx
+++ b/components/shared/nav-bar.tsx
@@ -17,6 +17,7 @@ import {
import { AppIcon } from '@/components/shared/app-icon'
import { UserMenu } from '@/components/shared/user-menu'
import { NotificationsBell } from '@/components/shared/notifications-bell'
+import { SoloNavStatusIndicators } from '@/components/solo/nav-status-indicators'
import { cn } from '@/lib/utils'
import { setActiveProductAction } from '@/actions/active-product'
@@ -180,8 +181,9 @@ export function NavBar({
)}
- {/* Rechts: notifications + account-menu */}
+ {/* Rechts: solo-status + notifications + account-menu */}
+
diff --git a/components/solo/nav-status-indicators.tsx b/components/solo/nav-status-indicators.tsx
new file mode 100644
index 0000000..7ee614e
--- /dev/null
+++ b/components/solo/nav-status-indicators.tsx
@@ -0,0 +1,69 @@
+'use client'
+
+import { usePathname } from 'next/navigation'
+import { useSoloStore } from '@/stores/solo-store'
+import type { RealtimeStatus } from '@/stores/solo-store'
+import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'
+import { cn } from '@/lib/utils'
+
+const SOLO_PATH_RE = /^\/products\/[^/]+\/solo$/
+
+function RealtimeIndicator({
+ status,
+ showConnectingIndicator,
+}: {
+ status: RealtimeStatus
+ showConnectingIndicator: boolean
+}) {
+ let color = 'bg-status-done'
+ let label = 'Live'
+ if (showConnectingIndicator) {
+ if (status === 'disconnected') {
+ color = 'bg-priority-critical'
+ label = 'Verbroken — opnieuw proberen…'
+ } else {
+ color = 'bg-muted-foreground'
+ label = 'Verbinden…'
+ }
+ }
+ return (
+
+
+
+ }
+ />
+ {label}
+
+
+ )
+}
+
+export function SoloNavStatusIndicators() {
+ const pathname = usePathname()
+ const realtimeStatus = useSoloStore((s) => s.realtimeStatus)
+ const showConnectingIndicator = useSoloStore((s) => s.showConnectingIndicator)
+ const connectedWorkers = useSoloStore((s) => s.connectedWorkers)
+
+ if (!pathname || !SOLO_PATH_RE.test(pathname)) return null
+
+ return (
+
+
+
+ 0 ? 'bg-status-done' : 'bg-muted-foreground/40'
+ )} />
+ {connectedWorkers > 0 ? 'Agent verbonden' : 'Geen agent'}
+
+
+ )
+}
diff --git a/components/solo/solo-board.tsx b/components/solo/solo-board.tsx
index c332d92..6e7e08d 100644
--- a/components/solo/solo-board.tsx
+++ b/components/solo/solo-board.tsx
@@ -7,55 +7,13 @@ import {
} from '@dnd-kit/core'
import { toast } from 'sonner'
import { useSoloStore } from '@/stores/solo-store'
-import type { RealtimeStatus } from '@/stores/solo-store'
import { taskStatusToApi } from '@/lib/task-status'
-import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'
-import { cn } from '@/lib/utils'
import { SplitPane } from '@/components/split-pane/split-pane'
import { SoloColumn, type ColumnStatus } from './solo-column'
import { SoloTaskCardOverlay } from './solo-task-card'
import { TaskDetailDialog } from './task-detail-dialog'
import { UnassignedStoriesSheet, type UnassignedStory } from './unassigned-stories-sheet'
-// ST-805: kleine status-dot in de header — groen wanneer SSE-stream open
-// is, grijs/rood pas zichtbaar als de connectie >4s niet open is (animatie B
-// zit in useSoloRealtime). Default groen tijdens de eerste 4s zodat micro-
-// disconnects geen flikker geven.
-function RealtimeIndicator({
- status,
- showConnectingIndicator,
-}: {
- status: RealtimeStatus
- showConnectingIndicator: boolean
-}) {
- let color = 'bg-status-done'
- let label = 'Live'
- if (showConnectingIndicator) {
- if (status === 'disconnected') {
- color = 'bg-priority-critical'
- label = 'Verbroken — opnieuw proberen…'
- } else {
- color = 'bg-muted-foreground'
- label = 'Verbinden…'
- }
- }
- return (
-
-
-
- }
- />
- {label}
-
-
- )
-}
-
export interface SoloTask {
id: string
title: string
@@ -91,9 +49,6 @@ export function SoloBoard({
productId, productName, sprintGoal, tasks: initialTasks, unassignedStories: initialUnassigned, isDemo,
}: SoloBoardProps) {
const { tasks, initTasks, optimisticMove, rollback, markPending, clearPending } = useSoloStore()
- const realtimeStatus = useSoloStore((s) => s.realtimeStatus)
- const showConnectingIndicator = useSoloStore((s) => s.showConnectingIndicator)
- const connectedWorkers = useSoloStore((s) => s.connectedWorkers)
const [activeDragId, setActiveDragId] = useState(null)
const [selectedTask, setSelectedTask] = useState(null)
const [sheetOpen, setSheetOpen] = useState(false)
@@ -174,20 +129,7 @@ export function SoloBoard({
-
-
{productName}
-
-
- 0 ? 'bg-status-done' : 'bg-muted-foreground/40'
- )} />
- {connectedWorkers > 0 ? 'Agent verbonden' : 'Geen agent'}
-
-
+
{productName}
{sprintGoal && (
{sprintGoal}
)}