diff --git a/HISTORY.md b/HISTORY.md index 8853fff..dbbe8fe 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,6 +2,18 @@ ## v0.18 +### Branding +- Replaced the top-navbar dollar-sign placeholder and duplicate text/version brand stack with the selected `/img/logo.png` BillTracker logo. +- The logo now serves as the BillTracker brand in the top navigation while preserving the existing navbar height and route behavior. +- Login now uses the BillTracker logo, shows linked build/version information near the login actions, and uses the authentik icon for OIDC login. +- Admin Authentication Methods now uses subtle authentik branding in the OIDC toggle/configuration/test-login controls. +- Cropped transparent padding from the BillTracker logo asset so it renders larger and more readably in the unchanged-height navbar. +- Promoted the transparent `logo_cut.png` artwork to the served `/img/logo.png` asset and enlarged the login-page logo while keeping the login card layout compact. +- Login logo sizing now follows the login form width so the brand grows and shrinks with the sign-in column instead of rendering too small. +- Legacy `/login.html` now redirects to the modern React `/login` screen so the old static login page is no longer served by stale links. +- Vite now copies only modern React public assets from `client/public`, preventing legacy `public/*.html`, CSS, and JS files from being emitted into `dist`. +- No backend, auth, tracker, bills, categories, settings, status, admin, or navigation-link behavior was changed. + ### Security - **OIDC ID token signature verification** now uses `openid-client@5` for full cryptographic validation via JWKS: signature, issuer, audience, expiry, nonce, and `sub` presence — tokens without a valid signature are rejected - **OIDC client cache** invalidation path added; cache is keyed by issuer/client/redirect so Admin panel credential changes pick up a fresh client diff --git a/client/components/layout/Sidebar.jsx b/client/components/layout/Sidebar.jsx index e1e2385..bf04704 100644 --- a/client/components/layout/Sidebar.jsx +++ b/client/components/layout/Sidebar.jsx @@ -16,7 +16,6 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { APP_VERSION } from '@/lib/version'; const userNavItems = [ { to: '/', icon: LayoutGrid, label: 'Tracker', end: true }, @@ -32,21 +31,21 @@ const adminNavItems = [ function BrandBlock({ adminMode = false }) { return ( - -
- $ -
-
-
- BillTracker - {adminMode && ( - - Admin - - )} -
- v{APP_VERSION} -
+ + BillTracker + {adminMode && ( + + Admin + + )} ); } diff --git a/client/pages/AdminPage.jsx b/client/pages/AdminPage.jsx index 50cab40..323579e 100644 --- a/client/pages/AdminPage.jsx +++ b/client/pages/AdminPage.jsx @@ -23,6 +23,8 @@ import AppNavigation from '@/components/layout/Sidebar'; // ─── Helpers ────────────────────────────────────────────────────────────────── +const AUTHENTIK_ICON_URL = 'https://gate.originalsinners.org/static/dist/assets/icons/icon.png'; + function SectionHeading({ children }) { return

{children}

; } @@ -716,6 +718,12 @@ function AuthMethodsCard() { {/* OIDC / authentik login toggle */}
+ set('oidc_login_enabled', v)} @@ -730,7 +738,15 @@ function AuthMethodsCard() {
-

authentik / OIDC configuration

+
+ + authentik / OIDC configuration +
{ window.location.href = '/api/auth/oidc/login?redirect_to=/admin'; }} > + Test authentik Login )} @@ -205,6 +213,17 @@ export default function LoginPage() { )} + +

+ + Build v{APP_VERSION} + +

diff --git a/client/public/img/logo.png b/client/public/img/logo.png new file mode 100644 index 0000000..6885b04 Binary files /dev/null and b/client/public/img/logo.png differ diff --git a/docker-compose.yml b/docker-compose.yml index eb71efb..447e240 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,18 @@ +version: "3.8" + services: bill-tracker: - build: . - image: bill-tracker:local + image: dream.scheller.ltd/null/billtracker:latest container_name: bill-tracker - environment: - NODE_ENV: production - DB_PATH: /data/db/bills.db - BACKUP_PATH: /data/backups - ports: - - "${PORT:-3000}:3000" - volumes: - - bill-data:/data # persistent DB + backups - restart: unless-stopped -volumes: - bill-data: - driver: local + ports: + - "3030:3000" + + environment: + INIT_ADMIN_USER: admin + INIT_ADMIN_PASS: changeme123 + + volumes: + - /portainer/hosting/bill-tracker/data:/data + + restart: unless-stopped \ No newline at end of file diff --git a/img/Selection_1484.png b/img/Selection_1484.png new file mode 100644 index 0000000..251a53d Binary files /dev/null and b/img/Selection_1484.png differ diff --git a/img/Selection_1485.png b/img/Selection_1485.png new file mode 100644 index 0000000..a08083e Binary files /dev/null and b/img/Selection_1485.png differ diff --git a/img/Selection_1486.png b/img/Selection_1486.png new file mode 100644 index 0000000..341760c Binary files /dev/null and b/img/Selection_1486.png differ diff --git a/img/Selection_1487.png b/img/Selection_1487.png new file mode 100644 index 0000000..ffd5ca9 Binary files /dev/null and b/img/Selection_1487.png differ diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000..6885b04 Binary files /dev/null and b/img/logo.png differ diff --git a/img/logo_cut.png b/img/logo_cut.png new file mode 100644 index 0000000..2c12dca Binary files /dev/null and b/img/logo_cut.png differ diff --git a/index.html b/index.html index 6c8c65e..4694330 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,7 @@ + Bill Tracker diff --git a/public/img/logo.png b/public/img/logo.png new file mode 100644 index 0000000..6885b04 Binary files /dev/null and b/public/img/logo.png differ diff --git a/public/login.html b/public/login.html index 19a9965..d6d423b 100644 --- a/public/login.html +++ b/public/login.html @@ -3,172 +3,13 @@ - Bill Tracker — Sign In - + + BillTracker — Sign In + -
- -

Sign in to your account

-
-
-
- - -
-
- - -
- -
-
- - +

Continue to BillTracker sign in

diff --git a/server.js b/server.js index 3fdf1de..02bf9b1 100644 --- a/server.js +++ b/server.js @@ -61,6 +61,7 @@ app.use('/api/import', requireAuth, requireUser, importLimiter, require(' app.use('/legacy', express.static(path.join(__dirname, 'legacy'))); // ── Modern UI (Vite build) ──────────────────────────────────────────────────── +app.get('/login.html', (req, res) => res.redirect(302, '/login')); app.use(express.static(DIST)); app.get('*', (req, res) => res.sendFile(path.join(DIST, 'index.html'))); diff --git a/vite.config.js b/vite.config.js index 5787b0f..e776262 100644 --- a/vite.config.js +++ b/vite.config.js @@ -7,6 +7,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default defineConfig({ plugins: [react()], + publicDir: 'client/public', resolve: { alias: { '@': path.resolve(__dirname, './client') }, },