-
-
-
+
v{RELEASE_NOTES.version} · {RELEASE_NOTES.date}
diff --git a/client/components/tracker/OverdueCommandCenter.tsx b/client/components/tracker/OverdueCommandCenter.tsx
index 2b27395..7ac6350 100644
--- a/client/components/tracker/OverdueCommandCenter.tsx
+++ b/client/components/tracker/OverdueCommandCenter.tsx
@@ -2,7 +2,7 @@ import { useState } from 'react';
import { AlertCircle, ChevronDown, ChevronUp, BellOff, SkipForward, CreditCard, EyeOff } from 'lucide-react';
import { toast } from 'sonner';
import { api } from '@/api';
-import { cn, fmt, localDateString } from '@/lib/utils';
+import { fmt, localDateString } from '@/lib/utils';
import { asDollars } from '@/lib/money';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
diff --git a/client/lib/version.ts b/client/lib/version.ts
index 55c18ca..15a05c4 100644
--- a/client/lib/version.ts
+++ b/client/lib/version.ts
@@ -58,7 +58,7 @@ export const RELEASE_NOTES: ReleaseNotes = {
},
],
image: {
- src: '/img/doingmypart.jpg',
- alt: 'Doing my part',
+ src: '/brand/social-preview.svg',
+ alt: 'Bill Tracker brand preview',
},
};
diff --git a/client/pages/AboutPage.tsx b/client/pages/AboutPage.tsx
index 08c17a2..b09cc38 100644
--- a/client/pages/AboutPage.tsx
+++ b/client/pages/AboutPage.tsx
@@ -4,8 +4,11 @@ import { ArrowLeft, ArrowUpCircle, CheckCircle2, Info, Loader2, Sparkles, AlertC
import { api } from '@/api';
import { useAuth } from '@/hooks/useAuth';
import { APP_VERSION } from '@/lib/version';
+import { BRAND } from '@/lib/brand';
+import { BrandMark } from '@/components/brand/Brand';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { PageHeader } from '@/components/ui/app-primitives';
const REPOSITORY_URL = 'https://dream.scheller.ltd/null/BillTracker';
@@ -99,7 +102,7 @@ export default function AboutPage() {
const displayVersion = about?.version ?? APP_VERSION;
return (
-
+
@@ -108,14 +111,20 @@ export default function AboutPage() {
-
+
-
-
+
+
-
{about?.name || 'Bill Tracker'}
+
+
{about?.name || BRAND.name}
- {about?.description || ''}
+ {about?.description || BRAND.tagline}
@@ -141,12 +150,24 @@ export default function AboutPage() {
+
+
+
+
Private, practical, self-hosted
+
+ {BRAND.name} is self-hosted software for personal bill planning and history. It is built around local ownership, readable records, and calm monthly review.
+
+
+
+
+
+
-
Produced with AI assistance
+
{BRAND.tagline}
- Bill Tracker is self-hosted software for personal bill planning and history. This product was produced with the assistance of AI.
+ The brand direction is premium calm: trustworthy, quiet, and focused on reducing household money stress.
diff --git a/client/pages/ReleaseNotesPage.tsx b/client/pages/ReleaseNotesPage.tsx
index eb47f3e..92bb95a 100644
--- a/client/pages/ReleaseNotesPage.tsx
+++ b/client/pages/ReleaseNotesPage.tsx
@@ -6,6 +6,7 @@ import { api } from '@/api';
import { cn, errMessage } from '@/lib/utils';
import { Button } from '@/components/ui/button';
import { MarkdownText } from '@/components/MarkdownText';
+import { EmptyState, PageHeader } from '@/components/ui/app-primitives';
interface ReleaseHistoryData {
history?: string;
@@ -110,27 +111,32 @@ export default function ReleaseNotesPage() {
const history = data?.history || '';
return (
-
+
-
-
-
-
-
- About
-
-
-
Release Notes
-
- {data?.version ? `Current version v${data.version}` : 'Full project changelog'}
- {data?.updated_at ? ` · Updated ${formatDateTime(data.updated_at)}` : ''}
-
-
-
-
- Refresh
+
+
+
+ About
+
-
+
+
+ {data?.version ? `Current version v${data.version}` : 'Full project changelog'}
+ {data?.updated_at ? ` · Updated ${formatDateTime(data.updated_at)}` : ''}
+ >
+ )}
+ glyph="analytics"
+ actions={(
+
+
+ Refresh
+
+ )}
+ />
{loading ? (
@@ -141,14 +147,17 @@ export default function ReleaseNotesPage() {
) : error ? (
-
-
Unable to load release notes.
-
{error}
-
+
) : !history.trim() ? (
-
-
No release notes are available.
-
+
) : (
{history.split('\n').map((line, index) => (
diff --git a/client/public/brand/apple-touch-icon.png b/client/public/brand/apple-touch-icon.png
index 06c79f7..d7969dc 100644
Binary files a/client/public/brand/apple-touch-icon.png and b/client/public/brand/apple-touch-icon.png differ
diff --git a/client/public/brand/pwa-192.png b/client/public/brand/pwa-192.png
index 22a25bc..bbcce15 100644
Binary files a/client/public/brand/pwa-192.png and b/client/public/brand/pwa-192.png differ
diff --git a/client/public/brand/pwa-512.png b/client/public/brand/pwa-512.png
index 68ad5ec..37dae82 100644
Binary files a/client/public/brand/pwa-512.png and b/client/public/brand/pwa-512.png differ