From b9916866b341f3bc87cc6fcb0cf0adf101fe7666 Mon Sep 17 00:00:00 2001 From: dtoro Date: Wed, 15 Apr 2026 22:11:00 +0200 Subject: [PATCH] ui(footer): move "Built with hubris" byline into LeftSidebar Pulled the hubris/Roman-year line out of the TopBar and into a new Footer component rendered below the Settings button in the left sidebar bottom panel, where it reads as a quiet attribution rather than competing with the title plate up top. Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/components/layout/Footer.tsx | 26 +++++++++++++++++++ .../src/components/layout/LeftSidebar.tsx | 4 +++ frontend/src/components/layout/TopBar.tsx | 22 ---------------- 3 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 frontend/src/components/layout/Footer.tsx diff --git a/frontend/src/components/layout/Footer.tsx b/frontend/src/components/layout/Footer.tsx new file mode 100644 index 0000000..4d97525 --- /dev/null +++ b/frontend/src/components/layout/Footer.tsx @@ -0,0 +1,26 @@ +const ROMAN_PAIRS: [number, string][] = [ + [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], + [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], + [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I'], +] + +function toRoman(n: number): string { + let result = '' + for (const [value, symbol] of ROMAN_PAIRS) { + while (n >= value) { + result += symbol + n -= value + } + } + return result +} + +/** Slim end-of-page byline — sits below every section's content as a + * quiet attribution line. */ +export function Footer() { + return ( +
+ Built with hubris · {toRoman(new Date().getFullYear())} +
+ ) +} diff --git a/frontend/src/components/layout/LeftSidebar.tsx b/frontend/src/components/layout/LeftSidebar.tsx index c5ecae7..25e537d 100644 --- a/frontend/src/components/layout/LeftSidebar.tsx +++ b/frontend/src/components/layout/LeftSidebar.tsx @@ -27,6 +27,7 @@ import { Download as DownloadIcon, } from 'lucide-react' import { DateRangePicker } from '../filter/DateRangePicker' +import { Footer } from './Footer' import { cn } from '@/lib/utils' import { sourceFolders, photos as photosApi, downloads, type FolderTreeNode } from '../../services/api' import { useMutation, useQueryClient } from '@tanstack/react-query' @@ -639,6 +640,7 @@ export function LeftSidebar() { const showOnFolders = isSectionHeader && item.id === 'folders' && scanActivity.active const showOnFolderRow = + scanActivity.isScanning && !!item.path && !!scanActivity.currentFolder && scanActivity.currentFolder.startsWith(item.path) @@ -943,6 +945,8 @@ export function LeftSidebar() { Settings )} + +