diff --git a/src/apps/officer-web/Screens/Dashboard/Layout/Dock.tsx b/src/apps/officer-web/Screens/Dashboard/Layout/Dock.tsx index 33ae6cc7..57f255a8 100644 --- a/src/apps/officer-web/Screens/Dashboard/Layout/Dock.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Layout/Dock.tsx @@ -155,6 +155,8 @@ import { Store, Puzzle, Radar, + CalendarDays, + Contact, } from 'lucide-react'; /** @@ -181,6 +183,12 @@ export const CORE_DOCK_ITEMS: DockItem[] = [ { label: 'Monitor', to: '/system-monitor', icon: Activity, color: '#0ea5e9' }, { label: 'Activity', to: '/activity', icon: Radio, color: '#f59e0b' }, { label: 'Dashboards', to: '/dashboards', icon: LayoutGrid, color: '#8b5cf6' }, + // Core since 2026-08-19. These were contributed by the app-store `caldav` entry until calendar and + // contacts became core, and deleting that entry took their tiles with it — the routes kept working + // while the dock and the settings list went silent about them, which is exactly the shape of failure + // this file's comment above warns about, arrived at from the other direction. + { label: 'Calendar', to: '/calendar', icon: CalendarDays, color: '#ef4444' }, + { label: 'Contacts', to: '/contacts', icon: Contact, color: '#8b5cf6' }, // Core because the tailnet is the perimeter — origin checking was removed on the grounds that the // tailnet stands in its place, so administering it cannot be an optional extra. It is `kind: 'admin'`, // and DashboardLayout filters every tile through canVisit(), so a member never sees this one. @@ -237,7 +245,11 @@ export function dockItemsFromPlugins(plugins: PluginManifest[]): DockItem[] { * where Music was never installed. Defaults that reference optional features are how an app ends up * looking subtly wrong on a fresh install for no stated reason. */ -export const DEFAULT_DOCK_PATHS = ['/', '/files', '/terminal', '/dashboards', '/chat']; +// Calendar joined on 2026-08-19, when it stopped being an installable app and became core. The rest of +// this list is what every install has and most people want visible; a calendar is now in that category. +// Contacts is deliberately NOT here — it is core and available in dock settings, but a second tile for +// the same sidecar in everyone's default dock is a crowded default rather than a useful one. +export const DEFAULT_DOCK_PATHS = ['/', '/files', '/terminal', '/dashboards', '/chat', '/calendar']; /** * The same defaults, plus a tile for every installed plugin.