diff --git a/.env.example b/.env.example
index 8acb284..b39f17d 100644
--- a/.env.example
+++ b/.env.example
@@ -20,6 +20,8 @@ AUTHENTIK_TOKEN=
EDITOR_GROUPS=HI-Admin,HI-Leitung
# Domains, von denen die Kopfleiste geladen werden darf / auf die nach Login zurückgeleitet wird
ALLOWED_DOMAINS=handy-insel.de
+# Apps in neuem Tab öffnen (Standard: true)
+# OPEN_APPS_IN_NEW_TAB=true
# Optional: Kachel-Reihenfolge (Slugs) und ausgeblendete Apps
# APP_ORDER=preisliste,vvl,zeiterfassung,timer,kundenkarte,datenuebertragungen,service,paperless,patch-mon
# HIDDEN_APPS=portal
diff --git a/frontend/index.html b/frontend/index.html
index 4099128..98d0056 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -5,7 +5,7 @@
-
+
Handy-Insel Portal
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 9030cd3..5f15083 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -70,7 +70,7 @@ function Header({ user, links }: { user: User; links: Links }) {
-
+
Handy-Insel
diff --git a/public/favicon.png b/public/favicon.png
index 510966f..8a7aa71 100644
Binary files a/public/favicon.png and b/public/favicon.png differ
diff --git a/public/icon-192.png b/public/icon-192.png
index 3aebbf5..eb454bd 100644
Binary files a/public/icon-192.png and b/public/icon-192.png differ
diff --git a/public/insel-logo.png b/public/insel-logo.png
new file mode 100644
index 0000000..eb454bd
Binary files /dev/null and b/public/insel-logo.png differ
diff --git a/server/src/authentik.ts b/server/src/authentik.ts
index ccd896a..3f26e94 100644
--- a/server/src/authentik.ts
+++ b/server/src/authentik.ts
@@ -90,7 +90,7 @@ export async function appsForUser(user: PortalUser): Promise {
description: app.meta_description || '',
section: app.group || 'Anwendungen',
iconUrl: iconFor(app),
- newTab: app.open_in_new_tab,
+ newTab: config.openAppsInNewTab || app.open_in_new_tab,
})),
);
cache.set(pk, { at: Date.now(), apps });
diff --git a/server/src/config.ts b/server/src/config.ts
index a1dcc3d..d0d4c95 100644
--- a/server/src/config.ts
+++ b/server/src/config.ts
@@ -39,6 +39,8 @@ export const config = {
editorGroups: list('EDITOR_GROUPS', 'HI-Admin,HI-Leitung'),
/** Apps, die nie angezeigt werden (Slugs), z.B. das Portal selbst. */
hiddenApps: list('HIDDEN_APPS', 'portal'),
+ /** Apps immer in neuem Tab öffnen (sonst nur, wenn in Authentik "In neuem Tab öffnen" gesetzt ist). */
+ openAppsInNewTab: env('OPEN_APPS_IN_NEW_TAB', 'true') !== 'false',
/** Reihenfolge der Kacheln (Slugs); nicht genannte Apps folgen alphabetisch. */
appOrder: list(
'APP_ORDER',
diff --git a/topbar/src/topbar.ts b/topbar/src/topbar.ts
index 6d6011c..de17494 100644
--- a/topbar/src/topbar.ts
+++ b/topbar/src/topbar.ts
@@ -208,7 +208,7 @@ class HiTopbar extends HTMLElement {
this.root.innerHTML = `