diff --git a/glance-system/glance-kisfenyo.yaml b/glance-system/glance-kisfenyo.yaml
new file mode 100644
index 0000000..59f9af9
--- /dev/null
+++ b/glance-system/glance-kisfenyo.yaml
@@ -0,0 +1,760 @@
+# Glance Dashboard for Kisfenyo
+# Namespace: glance-system
+# Domain: kisfenyo.dooplex.hu
+# Version: v0.8.4
+#
+# Features:
+# - Custom background image
+# - Custom logo
+# - Weather widget (Budapest)
+# - YouTube subscriptions
+# - RSS feeds
+# - To-do list
+# - iFrames for Cal.com, Google Calendar, Outline
+# - Bookmarks/Links to all apps
+# - Calendar widget
+#
+# Authentik Integration:
+# 1. Create Application: "Glance Home"
+# 2. Create Provider: Proxy Provider with external host https://kisfenyo.dooplex.hu
+# 3. Create Outpost: glance-outpost
+# 4. Update auth-url annotation with actual outpost service name
+---
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: glance-system
+ labels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: glance-config-kisfenyo
+ namespace: glance-system
+ labels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+data:
+ glance.yml: |
+ # Glance Configuration
+ # Documentation: https://github.com/glanceapp/glance/blob/main/docs/configuration.md
+
+ server:
+ host: 0.0.0.0
+ port: 8080
+ assets-path: /app/config/assets
+
+ branding:
+ logo-url: https://web.dooplex.hu/static/DooPlex_logo_3.png
+ favicon-url: https://web.dooplex.hu/static/DooPlex_favicon_2.png
+ app-name: "Kisfenyo's Home"
+ app-icon-url: https://web.dooplex.hu/static/DooPlex_favicon_2.png
+ app-background-color: "#132b66"
+ hide-footer: true
+
+ theme:
+ background-color: 280 30 15
+ primary-color: 280 60 70
+ positive-color: 120 50 50
+ negative-color: 0 70 60
+ contrast-multiplier: 1.2
+ text-saturation-multiplier: 0.8
+ custom-css-file: /assets/custom.css
+
+ pages:
+ # ==================== HOME PAGE ====================
+ - name: Home
+ slug: home
+ width: wide
+ columns:
+ # ---------- LEFT COLUMN ----------
+ - size: small
+ widgets:
+ # Weather Widget
+ - type: weather
+ location: Budapest, Hungary
+ units: metric
+ hour-format: 24h
+
+ # Calendar Widget
+ - type: calendar
+ first-day-of-week: monday
+
+ # To-Do List
+ - type: to-do
+ title: Tasks
+
+ # Quick Links - Productivity
+ - type: bookmarks
+ title: Productivity
+ groups:
+ - title: ""
+ links:
+ - title: Nextcloud
+ url: https://nextcloud.dooplex.hu
+ icon: si:nextcloud
+ - title: Outline
+ url: https://outline.dooplex.hu
+ icon: si:outline
+ - title: Paperless
+ url: https://paperless.dooplex.hu
+ icon: si:paperlessngx
+ - title: Vaultwarden
+ url: https://vaultwarden.dooplex.hu
+ icon: si:bitwarden
+ - title: Actual Budget
+ url: https://actualbudget.dooplex.hu
+ icon: si:actualbudget
+ - title: Tandoor
+ url: https://tandoor.dooplex.hu
+ icon: sh:tandoor-recipes
+ - title: Bookstack
+ url: https://bookstack.dooplex.hu
+ icon: si:bookstack
+
+ # Quick Links - File Sharing
+ - type: bookmarks
+ title: File Sharing
+ groups:
+ - title: ""
+ links:
+ - title: Fileshare
+ url: https://fileshare.dooplex.hu
+ icon: si:files
+ - title: Privatebin
+ url: https://privatebin.dooplex.hu
+ icon: sh:privatebin
+ - title: Pastes (OpenGist)
+ url: https://paste.dooplex.hu
+ icon: sh:opengist
+ - title: Zipline
+ url: https://zipline.dooplex.hu
+ icon: sh:zipline
+
+ # ---------- CENTER COLUMN ----------
+ - size: full
+ widgets:
+ # Outline Notes iframe
+ - type: iframe
+ source: https://outline.dooplex.hu/collection/notes-VVby8kTDMn/recent
+ height: 500
+ title: Recent Notes
+
+ # ---------- RIGHT COLUMN ----------
+ - size: small
+ widgets:
+ # RSS Feeds - Add your favorite feeds here
+ - type: rss
+ title: News & Feeds
+ limit: 15
+ collapse-after: 8
+ feeds:
+ - url: https://telex.hu/rss
+ title: telex.hu
+ limit: 3
+ - url: https://444.hu/feed
+ title: 444.hu
+ limit: 3
+ - url: https://444.hu/feed
+ title: 444.hu
+ limit: 3
+ - url: https://hvg.hu/rss
+ title: hvg.hu
+ limit: 3
+
+ # ==================== MEDIA PAGE ====================
+ - name: Media
+ slug: media
+ width: wide
+ columns:
+ - size: small
+ widgets:
+ - type: bookmarks
+ title: Entertainment
+ groups:
+ - links:
+ - title: Plex
+ url: https://plex.dooplex.hu
+ icon: si:plex
+ - title: Immich (Photos)
+ url: https://photos.dooplex.hu
+ icon: si:immich
+ - title: AudioBookshelf
+ url: https://audiobookshelf.dooplex.hu
+ icon: si:audiobookshelf
+ - title: Calibre-Web (eBooks)
+ url: https://books.dooplex.hu
+ icon: si:calibreweb
+ - title: Arcade (Retro Games)
+ url: https://arcade.dooplex.hu
+ icon: si:retroarch
+
+ - type: bookmarks
+ title: Media Management
+ groups:
+ - links:
+ - title: Sonarr (TV Shows)
+ url: https://sonarr.dooplex.hu
+ icon: si:sonarr
+ - title: Radarr (Movies)
+ url: https://radarr.dooplex.hu
+ icon: si:radarr
+ - title: RadarrKids
+ url: https://radarrkids.dooplex.hu
+ icon: si:radarr
+ - title: Prowlarr (Indexers)
+ url: https://prowlarr.dooplex.hu
+ icon: sh:prowlarr
+ - title: Seerr (Requests)
+ url: https://seerr.dooplex.hu
+ icon: sh:overseerr
+
+ - size: full
+ widgets:
+ # YouTube Videos
+ - type: videos
+ title: YouTube
+ channels:
+ - UCir93b_ftqInEaDpsWYbo_g #Practical Psychology - @practicalpsychologytips
+ - UCEwsbtepqts935wXykReKxg #CounsellingTutor - @Counsellingtutor1
+ - UCUdettijNYvLAm4AixZv4RA #SciShow Psych - @SciShowPsych
+ - UClHVl2N3jPEbkNJVx-ItQIQ #HealthyGamerGG - @HealthyGamerGG
+ - UCAvfZQ3r24F-V1JYqn2pfXg #The Psychology Podcast - @ThePsychologyPodcast
+ - UC6Unpcb3T4QijIBs8hPfeyA #Psych Explained - @PsychExplained
+ - UCl8TEoIOnMq_5ntJOYMq-Zg #DrJulie - @DrJulie
+ limit: 12
+ collapse-after: 6
+
+ # Reddit
+ - type: group
+ title: Reddit
+ widgets:
+ - type: reddit
+ subreddit: hungary
+ show-thumbnails: true
+ - type: reddit
+ subreddit: selfhosted
+ show-thumbnails: true
+ - type: reddit
+ subreddit: homeserver
+ show-thumbnails: true
+ - type: reddit
+ subreddit: homelab
+ show-thumbnails: true
+ - type: reddit
+ subreddit: kubernetes
+ show-thumbnails: true
+ - type: reddit
+ subreddit: linux
+ show-thumbnails: true
+ - type: reddit
+ subreddit: sysadmin
+ show-thumbnails: true
+ - type: reddit
+ subreddit: technology
+ show-thumbnails: true
+ - type: reddit
+ subreddit: futurology
+ show-thumbnails: true
+
+ - size: small
+ widgets:
+ - type: bookmarks
+ title: Other Apps
+ groups:
+ - links:
+ - title: AdventureLog
+ url: https://adventures.dooplex.hu
+ icon: sh:adventurelog
+ - title: Wanderer
+ url: https://wanderer.dooplex.hu
+ icon: sh:wanderer
+ - title: Plant-it
+ url: https://plantit.dooplex.hu
+ icon: sh:plant-it
+ - title: Workout (wger)
+ url: https://workout.dooplex.hu
+ icon: sh:wger
+ - title: Fileshare
+ url: https://fileshare.dooplex.hu
+ icon: si:files
+ - title: Privatebin
+ url: https://privatebin.dooplex.hu
+ icon: sh:privatebin
+ - title: Pastes (OpenGist)
+ url: https://paste.dooplex.hu
+ icon: sh:opengist
+ - title: Zipline
+ url: https://zipline.dooplex.hu
+ icon: sh:zipline
+
+ # ==================== NECTCLOUD PAGE ====================
+ - name: NextCloud
+ slug: nextcloud
+ width: wide
+ columns:
+ - size: full
+ widgets:
+ # Nextcloud iframe
+ - type: iframe
+ css-class: iframe-no-tint
+ source: https://nextcloud.dooplex.hu/apps/files/files
+ height: 1200
+ title: NextCloud
+
+ custom.css: |
+ /* Custom CSS for Kisfenyo's Glance Dashboard */
+ /* Dark Blue theme */
+
+ /* ===== Wallpaper visible ===== */
+ html, body { height: 100%; }
+
+ html {
+ background: url("https://web.dooplex.hu/static/wallpaper-2.jpg") center / cover no-repeat fixed !important;
+ }
+
+ /* Glance containers that tend to paint over the wallpaper */
+ body,
+ .page,
+ #page-content,
+ .page-content,
+ .content-bounds,
+ .page-columns,
+ .page-column {
+ background: transparent !important;
+ }
+
+ /* Optional readability veil (Homepage-like) */
+ body::before {
+ content: "";
+ position: fixed;
+ inset: 0;
+ background: rgba(20, 10, 30, 0.25);
+ pointer-events: none;
+ z-index: 0;
+ }
+ body > * { position: relative; z-index: 1; }
+
+ /* ===== Glassy widgets like Homepage ===== */
+ .widget {
+ background: rgba(45, 31, 61, 0.55) !important;
+ border: 1px solid rgba(255,255,255,0.08) !important;
+ border-radius: 10px !important;
+ backdrop-filter: blur(6px) !important;
+ -webkit-backdrop-filter: blur(6px) !important;
+ }
+
+ /* ===== Header + bigger logo ===== */
+ .header-container {
+ background: rgba(45, 31, 61, 0.55) !important;
+ backdrop-filter: blur(10px) !important;
+ -webkit-backdrop-filter: blur(10px) !important;
+ border-bottom: 1px solid rgba(255,255,255,0.08) !important;
+ }
+
+ .header {
+ min-height: 150px !important;
+ align-items: flex-end !important;
+ padding: 16px 18px !important;
+ }
+
+ /* This matches your DOM:
![]()
*/
+ .logo img {
+ max-height: 170px !important;
+ height: auto !important;
+ width: auto !important;
+ object-fit: contain !important;
+ }
+
+ /* ===== iFrame purple tint + visible overlay ===== */
+ .widget.widget-type-iframe {
+ position: relative !important;
+ overflow: hidden !important;
+ border-radius: 12px !important;
+ }
+
+ .widget.widget-type-iframe iframe {
+ border-radius: 12px !important;
+ width: 100% !important;
+ border: 0 !important;
+ filter: sepia(0.25) saturate(3) hue-rotate(250deg) brightness(1.02) !important;
+ position: relative !important;
+ z-index: 1 !important;
+ }
+
+ /* Overlay ON TOP of iframe (you can’t style inside cross-origin iframes) */
+ .widget.widget-type-iframe::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ z-index: 2;
+ pointer-events: none;
+ border-radius: 12px;
+ background: rgba(226, 146, 255, 0.16);
+ }
+
+ /* Widget content area */
+ .widget-content {
+ background-color: transparent !important;
+ }
+
+ /* Header fully transparent */
+ .header-container,
+ .header,
+ .page-header,
+ .nav,
+ .navigation {
+ background-color: transparent !important;
+ background: transparent !important;
+ backdrop-filter: none !important;
+ -webkit-backdrop-filter: none !important;
+ box-shadow: none !important;
+ border: 0 !important;
+ }
+
+ /* --- Header: align tabs to bottom + larger font --- */
+ .header {
+ display: flex !important;
+ align-items: flex-end !important; /* bottom-align children */
+ gap: 18px !important;
+ }
+
+ /* Push the nav to the bottom edge */
+ .header .nav {
+ align-self: flex-end !important;
+ padding-bottom: 10px !important; /* tweak this value if you want it lower/higher */
+ }
+
+ /* Bigger, cleaner tab text */
+ .header .nav .nav-item {
+ font-size: 18px !important; /* increase */
+ line-height: 1.1 !important;
+ padding: 10px 14px !important; /* makes it feel less “floaty” */
+ letter-spacing: 0.2px !important;
+ }
+
+ /* Optional: make current tab underline sit nicely at the bottom */
+ .header .nav .nav-item-current::after,
+ .header .nav .nav-item[aria-current="page"]::after {
+ bottom: -6px !important;
+ }
+
+ .content-bounds,
+ .body-content,
+ .page,
+ #page-content {
+ background: transparent !important;
+ }
+
+ /* Column containers */
+ .page-column, .page-columns {
+ background-color: transparent !important;
+ }
+
+ /* Links styling - purple accent */
+ a {
+ color: #e292ff !important;
+ }
+
+ a:hover {
+ color: #f0b8ff !important;
+ }
+
+ /* Bookmark items */
+ .bookmark-link {
+ background-color: rgba(60, 40, 80, 0.6) !important;
+ border-radius: 8px !important;
+ transition: background-color 0.2s ease !important;
+ }
+
+ .bookmark-link:hover {
+ background-color: rgba(80, 50, 110, 0.8) !important;
+ }
+
+ .widget-type-calendar,
+ .widget-type-weather,
+ .widget-type-to-do {
+ background-color: rgba(45, 31, 61, 0.55) !important;
+ }
+
+ /* RSS feed items */
+ .rss-item, .feed-item {
+ background-color: rgba(60, 40, 80, 0.5) !important;
+ border-radius: 6px !important;
+ margin-bottom: 4px !important;
+ }
+
+ /* Video thumbnails */
+ .video-item, .videos-item {
+ background-color: rgba(60, 40, 80, 0.5) !important;
+ border-radius: 8px !important;
+ }
+
+ /* Widget titles */
+ .widget-header, .widget-title {
+ color: #e292ff !important;
+ font-weight: 600 !important;
+ }
+
+ /* Scrollbar styling */
+ ::-webkit-scrollbar {
+ width: 8px;
+ }
+
+ ::-webkit-scrollbar-track {
+ background: rgba(45, 31, 61, 0.5);
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: rgba(226, 146, 255, 0.5);
+ border-radius: 4px;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: rgba(226, 146, 255, 0.7);
+ }
+
+ /* Fix "Show more" bar background in RSS widget */
+ .widget-type-rss .expand-toggle-button {
+ background: transparent !important;
+ box-shadow: none !important;
+ border: 0 !important;
+ }
+
+ /* Glance often draws that ugly bar via a pseudo-element */
+ .widget-type-rss .expand-toggle-button::before,
+ .widget-type-rss .expand-toggle-button::after,
+ .widget-type-rss .expand-toggle-button-icon::before,
+ .widget-type-rss .expand-toggle-button-icon::after {
+ background: transparent !important;
+ box-shadow: none !important;
+ border: 0 !important;
+ }
+
+ /* Optional: make it feel "intentional" instead of floating */
+ .widget-type-rss .expand-toggle-button {
+ margin-top: 8px !important;
+ padding: 10px 12px !important;
+ border-top: 1px solid rgba(255,255,255,0.08) !important;
+ color: rgba(255,255,255,0.75) !important;
+ }
+ .widget-type-rss .expand-toggle-button:hover {
+ color: rgba(255,255,255,0.95) !important;
+ }
+
+ /* --- Force header nav to sit at the bottom (override utility classes) --- */
+ .header.flex {
+ align-items: flex-end !important;
+ }
+
+ /* Make the nav fill the header height and align its items to the bottom */
+ .header.flex > .nav.flex {
+ height: 100% !important;
+ align-items: flex-end !important;
+ padding-bottom: 14px !important; /* increase/decrease to taste */
+ }
+
+ /* Bigger tab text */
+ .header.flex > .nav.flex > .nav-item {
+ font-size: 20px !important;
+ line-height: 1.1 !important;
+ padding: 10px 14px !important;
+ }
+
+ /* Tabs: bottom-align text inside full-height .nav-item */
+ .header.flex > .nav.flex > .nav-item {
+ display: flex !important;
+ align-items: flex-end !important;
+
+ /* keep them full-height, but move the text down */
+ height: 100% !important;
+ padding: 0 14px 18px 14px !important; /* bottom padding controls “how low” */
+
+ /* kill Glance's vertical centering */
+ line-height: 1 !important;
+
+ font-size: 20px !important;
+ }
+
+ /* Expand buttons: force transparent everywhere (RSS, Reddit, etc) */
+ .expand-toggle-button,
+ .expand-toggle-button.container-expanded {
+ background: transparent !important;
+ background-color: transparent !important;
+ box-shadow: none !important;
+ border: 0 !important;
+ }
+
+ /* Some themes draw the bar via pseudo elements */
+ .expand-toggle-button::before,
+ .expand-toggle-button::after,
+ .expand-toggle-button-icon::before,
+ .expand-toggle-button-icon::after {
+ background: transparent !important;
+ background-color: transparent !important;
+ box-shadow: none !important;
+ }
+
+ /* If the purple comes from a wrapper around the button, kill that too */
+ .widget-content > button.expand-toggle-button,
+ .widget-content > .expand-toggle-button,
+ .widget-content .expand-toggle-button {
+ background: transparent !important;
+ background-color: transparent !important;
+ }
+
+ /* If it’s "sticking" to bottom and picking up background from parent */
+ .expand-toggle-button.container-expanded {
+ backdrop-filter: none !important;
+ -webkit-backdrop-filter: none !important;
+ }
+
+ .widget.iframe-no-tint iframe {
+ filter: none !important;
+ }
+
+ .widget.iframe-no-tint::after {
+ content: none !important;
+ display: none !important;
+ }
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: glance-kisfenyo
+ namespace: glance-system
+ labels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+ app.kubernetes.io/version: "v0.8.4"
+ annotations:
+ reloader.stakater.com/auto: "true"
+spec:
+ replicas: 1
+ strategy:
+ type: Recreate
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+ app.kubernetes.io/version: "v0.8.4"
+ spec:
+ securityContext:
+ runAsUser: 1000
+ runAsGroup: 1000
+ fsGroup: 1000
+ containers:
+ - name: glance
+ image: glanceapp/glance:v0.8.4
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: TZ
+ value: "Europe/Budapest"
+ ports:
+ - name: http
+ containerPort: 8080
+ protocol: TCP
+ livenessProbe:
+ httpGet:
+ path: /
+ port: http
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ timeoutSeconds: 5
+ failureThreshold: 3
+ readinessProbe:
+ httpGet:
+ path: /
+ port: http
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 3
+ resources:
+ requests:
+ cpu: 10m
+ memory: 32Mi
+ limits:
+ cpu: 200m
+ memory: 128Mi
+ volumeMounts:
+ - name: config
+ mountPath: /app/config/glance.yml
+ subPath: glance.yml
+ - name: config
+ mountPath: /app/config/assets/custom.css
+ subPath: custom.css
+ volumes:
+ - name: config
+ configMap:
+ name: glance-config-kisfenyo
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: glance-kisfenyo
+ namespace: glance-system
+ labels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+spec:
+ type: ClusterIP
+ ports:
+ - name: http
+ port: 8080
+ targetPort: http
+ protocol: TCP
+ selector:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+---
+# Ingress WITH Authentik proxy authentication
+# Update the auth-url annotation with your actual outpost service name after creating in Authentik
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: glance-kisfenyo
+ namespace: glance-system
+ labels:
+ app.kubernetes.io/name: glance-kisfenyo
+ app.kubernetes.io/instance: glance-kisfenyo
+ annotations:
+ cert-manager.io/cluster-issuer: letsencrypt-prod
+ external-dns.alpha.kubernetes.io/hostname: kisfenyo.dooplex.hu
+ nginx.ingress.kubernetes.io/ssl-redirect: "true"
+ nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
+ nginx.ingress.kubernetes.io/proxy-buffers-number: "4"
+ nginx.ingress.kubernetes.io/proxy-busy-buffers-size: "32k"
+ # Authentik Forward Auth annotations
+ # TODO: Update 'glance-outpost' with your actual outpost name after creating in Authentik
+ nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-glance-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx
+ nginx.ingress.kubernetes.io/auth-signin: https://kisfenyo.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri
+ nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email
+ nginx.ingress.kubernetes.io/auth-snippet: |
+ proxy_set_header X-Forwarded-Host $http_host;
+spec:
+ ingressClassName: nginx-internal
+ rules:
+ - host: kisfenyo.dooplex.hu
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: glance-kisfenyo
+ port:
+ number: 8080
+ tls:
+ - hosts:
+ - kisfenyo.dooplex.hu
+ secretName: glance-kisfenyo-tls
+---
\ No newline at end of file
diff --git a/glance-system/glance.yaml b/glance-system/glance-orsi.yaml
similarity index 100%
rename from glance-system/glance.yaml
rename to glance-system/glance-orsi.yaml