From c181ffea541eaf732cf402ea164f35443cc295b3 Mon Sep 17 00:00:00 2001 From: Sandro Date: Fri, 30 Oct 2026 20:19:02 +0100 Subject: [PATCH 1/3] feat(ui): add desktop footer, legal custom link and about dialog --- .env.example | 3 ++ CHANGELOG.md | 4 +++ Doku/architecture.md | 1 + docker-compose.yml | 3 ++ frontend/src/App.tsx | 32 ++++++++++++++++-- frontend/src/components/AppFooter.tsx | 45 ++++++++++++++++++++++++++ frontend/src/components/LegalLinks.tsx | 14 +++++++- frontend/src/lib/types.ts | 2 ++ internal/api/handlers_auth.go | 2 ++ internal/api/server_test.go | 11 +++++-- internal/config/config.go | 36 ++++++++++++++++----- internal/config/config_test.go | 39 ++++++++++++++++++++++ 12 files changed, 179 insertions(+), 13 deletions(-) create mode 100644 frontend/src/components/AppFooter.tsx diff --git a/.env.example b/.env.example index 098f01b..7c9067a 100644 --- a/.env.example +++ b/.env.example @@ -86,6 +86,9 @@ LEGAL_PRIVACY_CONTENT= # Pfad im Container, z. B. /legal/impressum.md LEGAL_IMPRINT_CONTENT_FILE= LEGAL_PRIVACY_CONTENT_FILE= +# Eigener Link im Footer (nur https://) +LEGAL_CUSTOM_LINK_LABEL= +LEGAL_CUSTOM_LINK_URL= # ─── Bilder und Audio in Notizen ─────────────────────────────────────────────────────────────────── # Dateien liegen in data/media/ und sind nur für Personen sichtbar, die die Notiz lesen dürfen. Nicht mehr diff --git a/CHANGELOG.md b/CHANGELOG.md index 20f7969..e79631b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/), die V ## [Unreleased] +### Added +- Globaler Desktop-App-Footer mit Versionsnummer, „Über MindSift“, dynamischen Rechtstexten (Impressum, Datenschutz) sowie optional konfigurierbarem Custom-Link (`LEGAL_CUSTOM_LINK_LABEL`, `LEGAL_CUSTOM_LINK_URL`). +- „Über MindSift“-Dialog und Versionsanzeige im mobilen Profil-Menü (Avatar-Menü oben rechts). + ## [0.10.0] - 2026-10-30 ### Added diff --git a/Doku/architecture.md b/Doku/architecture.md index 46b60f2..54d6f6f 100644 --- a/Doku/architecture.md +++ b/Doku/architecture.md @@ -82,6 +82,7 @@ Das Frontend liegt per `go:embed` im Binary ([cmd/server/main.go](../cmd/server/ | `LEGAL_IMPRINT_URL`, `LEGAL_PRIVACY_URL` | leer | Impressum/Datenschutz als externer Link (nur `http(s)`) | | `LEGAL_IMPRINT_CONTENT`, `LEGAL_PRIVACY_CONTENT` | leer | Impressum/Datenschutz als Markdown, angezeigt in einem Lesefenster | | `LEGAL_IMPRINT_CONTENT_FILE`, `LEGAL_PRIVACY_CONTENT_FILE` | leer | Pfad zu einer Datei im Container mit Markdown-Inhalt für Impressum bzw. Datenschutz. Ohne URL und Text bleibt der Link unsichtbar. | +| `LEGAL_CUSTOM_LINK_LABEL`, `LEGAL_CUSTOM_LINK_URL` | leer | Eigener Link im globalen Desktop-Footer (nur `https://`, sonst ignoriert) | Hinweis: `DATABASE_URL` mit `postgres…` führt dazu, dass der Standardpfad in `DATA_DIR` genutzt wird; Postgres ist nicht implementiert. diff --git a/docker-compose.yml b/docker-compose.yml index e00922c..1674380 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,6 +40,9 @@ services: - LEGAL_PRIVACY_CONTENT=${LEGAL_PRIVACY_CONTENT:-} - LEGAL_IMPRINT_CONTENT_FILE=${LEGAL_IMPRINT_CONTENT_FILE:-} - LEGAL_PRIVACY_CONTENT_FILE=${LEGAL_PRIVACY_CONTENT_FILE:-} + # Eigener Link im Footer (nur https://) + # - LEGAL_CUSTOM_LINK_LABEL=${LEGAL_CUSTOM_LINK_LABEL:-} + # - LEGAL_CUSTOM_LINK_URL=${LEGAL_CUSTOM_LINK_URL:-} # Bilder und Audio in Notizen - MEDIA_MAX_IMAGE_MB=${MEDIA_MAX_IMAGE_MB:-15} - MEDIA_MAX_AUDIO_MB=${MEDIA_MAX_AUDIO_MB:-50} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 5b36801..0a815c4 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -65,6 +65,8 @@ import { useMobileActions } from './context/MobileActionContext'; import { MobileHeaderMenu } from './components/MobileHeaderMenu'; import { UserAvatar } from './components/UserAvatar'; import { CommandPalette } from './components/CommandPalette'; +import { AppFooter } from './components/AppFooter'; +import { AboutModal } from './components/AboutModal'; import { APP_VERSION } from './version'; type ActiveTab = @@ -170,6 +172,7 @@ export const App: React.FC = () => { // Profile Dropdown State const [showProfileMenu, setShowProfileMenu] = useState(false); + const [showAbout, setShowAbout] = useState(false); const dropdownRef = useRef(null); // Mobile Navigation & Quick-Action State @@ -1119,8 +1122,8 @@ export const App: React.FC = () => { {/* Main Container */} {/* The workspace fills the window exactly and scrolls only inside the note, never the page */}
setActiveTab('triage')}> @@ -1202,6 +1205,11 @@ export const App: React.FC = () => {
+ setShowAbout(true)} + /> + {/* MOBILE BOTTOM NAVIGATION BAR (5 equal columns -> + FAB is dead-center) */}