# Glance Dashboard for Orsi # Namespace: glance-system # Domain: home.dooplex.hu # Version: v0.8.4 # # Features: # - Custom background image (purple theme matching Homepage) # - 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://home.dooplex.hu # 3. Create Outpost: glance-home-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 app.kubernetes.io/instance: glance-orsi --- apiVersion: v1 kind: ConfigMap metadata: name: glance-config namespace: glance-system labels: app.kubernetes.io/name: glance app.kubernetes.io/instance: glance-orsi 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_orsi_3.png favicon-url: https://web.dooplex.hu/static/dooplex_favicon_orsi.png app-name: "Orsi's Home" app-icon-url: https://web.dooplex.hu/static/dooplex_favicon_orsi.png app-background-color: "#2d1f3d" 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: /app/config/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:paperless-ngx - title: Vaultwarden url: https://vaultwarden.dooplex.hu icon: si:bitwarden - title: Actual Budget url: https://actualbudget.dooplex.hu icon: si:actual-budget - title: Tandoor url: https://tandoor.dooplex.hu icon: si:tandoor-recipes - title: Bookstack url: https://bookstack.dooplex.hu icon: si:bookstack # ---------- CENTER COLUMN ---------- - size: full widgets: # Cal.com Booking iframe - type: iframe source: https://booking.dooplex.hu/bookings/upcoming height: 350 title: Upcoming Bookings # Google Calendar iframe - type: iframe source: https://calendar.google.com/calendar/embed?src=b2884faf3db792ac082a6206057552c79080716efd5f966e169a41fc500e1c1c%40group.calendar.google.com&ctz=Europe%2FBudapest height: 400 title: Calendar # Outline Notes iframe - type: iframe source: https://outline.dooplex.hu/collection/notes-VVby8kTDMn/recent height: 500 title: Recent Notes # ---------- RIGHT COLUMN ---------- - size: small widgets: # YouTube Videos - type: videos title: YouTube channels: # Practical Psychology - @practicalpsychologytips # Channel ID found via NoxInfluencer - UCir93b_ftqInEaDpsWYbo_g # Add more channels here: # - UCxxxxxxxxxxxxxx # Channel Name limit: 6 collapse-after: 3 # RSS Feeds - Add your favorite feeds here - type: rss title: News & Feeds limit: 10 collapse-after: 5 feeds: - url: https://selfh.st/rss/ title: selfh.st limit: 3 - url: https://www.reddit.com/r/selfhosted/.rss title: r/selfhosted limit: 3 # Quick Links - Entertainment - type: bookmarks title: Entertainment groups: - title: "" links: - title: Plex url: https://plex.dooplex.hu icon: si:plex - title: Immich url: https://photos.dooplex.hu icon: si:immich - title: AudioBookshelf url: https://audiobookshelf.dooplex.hu icon: si:audiobookshelf - title: Calibre-Web url: https://books.dooplex.hu icon: si:calibre-web - title: Arcade url: https://arcade.dooplex.hu icon: si:retroarch # Quick Links - Media Management - type: bookmarks title: Media Management groups: - title: "" links: - title: Sonarr url: https://sonarr.dooplex.hu icon: si:sonarr - title: Radarr url: https://radarr.dooplex.hu icon: si:radarr - title: Seerr url: https://seerr.dooplex.hu icon: si:overseerr - title: Prowlarr url: https://prowlarr.dooplex.hu icon: si:prowlarr # ==================== APPLICATIONS PAGE ==================== - name: Applications slug: apps 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:calibre-web - 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: si:prowlarr - title: Seerr (Requests) url: https://seerr.dooplex.hu icon: si:overseerr - size: full widgets: - type: bookmarks title: Productivity groups: - 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:paperless-ngx - title: Bookstack url: https://bookstack.dooplex.hu icon: si:bookstack - title: Actual Budget url: https://actualbudget.dooplex.hu icon: si:actual-budget - title: Tandoor Recipes url: https://tandoor.dooplex.hu icon: si:tandoor-recipes - title: Vaultwarden url: https://vaultwarden.dooplex.hu icon: si:bitwarden - type: bookmarks title: Other Apps groups: - links: - title: AdventureLog url: https://adventures.dooplex.hu icon: si:openstreetmap - title: Wanderer url: https://wanderer.dooplex.hu icon: si:openstreetmap - title: Plant-it url: https://plantit.dooplex.hu icon: si:leaflet - title: Workout (wger) url: https://workout.dooplex.hu icon: si:fitbit - title: Fileshare url: https://fileshare.dooplex.hu icon: si:files - title: Privatebin url: https://privatebin.dooplex.hu icon: si:privatebin - title: Pastes (OpenGist) url: https://paste.dooplex.hu icon: si:github-gist - title: Zipline url: https://zipline.dooplex.hu icon: si:imgur custom.css: | /* Custom CSS for Orsi's Glance Dashboard */ /* Purple theme with background image matching Homepage */ /* Background image */ body { background-image: url('https://web.dooplex.hu/static/wallpaper-orsi.jpg') !important; background-size: cover !important; background-attachment: fixed !important; background-position: center !important; background-repeat: no-repeat !important; } /* Semi-transparent widgets to show background */ .widget { background-color: rgba(45, 31, 61, 0.85) !important; backdrop-filter: blur(12px) !important; -webkit-backdrop-filter: blur(12px) !important; border-radius: 12px !important; border: 1px solid rgba(255, 255, 255, 0.1) !important; } /* Widget content area */ .widget-content { background-color: transparent !important; } /* Page header styling */ .page-header { background-color: rgba(45, 31, 61, 0.7) !important; backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important; } /* Navigation styling */ .nav, .navigation { background-color: rgba(45, 31, 61, 0.8) !important; backdrop-filter: blur(10px) !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; } /* Calendar widget styling */ .widget-type-calendar { background-color: rgba(45, 31, 61, 0.9) !important; } /* Weather widget */ .widget-type-weather { background-color: rgba(45, 31, 61, 0.9) !important; } /* To-do widget */ .widget-type-to-do { background-color: rgba(45, 31, 61, 0.9) !important; } /* iFrame containers - add purple tint overlay effect */ .widget-type-iframe { position: relative; } .widget-type-iframe iframe { border-radius: 8px !important; filter: sepia(0.15) saturate(2.5) hue-rotate(250deg) brightness(1.02) !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; } /* Logo in header - make it larger */ .header-logo img, .logo img, .branding-logo img { max-height: 120px !important; height: auto !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); } --- apiVersion: apps/v1 kind: Deployment metadata: name: glance namespace: glance-system labels: app.kubernetes.io/name: glance app.kubernetes.io/instance: glance-orsi 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 app.kubernetes.io/instance: glance-orsi template: metadata: labels: app.kubernetes.io/name: glance app.kubernetes.io/instance: glance-orsi 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 --- apiVersion: v1 kind: Service metadata: name: glance namespace: glance-system labels: app.kubernetes.io/name: glance app.kubernetes.io/instance: glance-orsi spec: type: ClusterIP ports: - name: http port: 8080 targetPort: http protocol: TCP selector: app.kubernetes.io/name: glance app.kubernetes.io/instance: glance-orsi --- # 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 namespace: glance-system labels: app.kubernetes.io/name: glance app.kubernetes.io/instance: glance-orsi annotations: cert-manager.io/cluster-issuer: letsencrypt-prod external-dns.alpha.kubernetes.io/hostname: home.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-home-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://home.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: home.dooplex.hu http: paths: - path: / pathType: Prefix backend: service: name: glance port: number: 8080 tls: - hosts: - home.dooplex.hu secretName: glance-tls --- # Alternative Ingress WITHOUT Authentik (for testing) # Uncomment this and comment out the above ingress if you want to test without auth first # apiVersion: networking.k8s.io/v1 # kind: Ingress # metadata: # name: glance-noauth # namespace: glance-system # labels: # app.kubernetes.io/name: glance # app.kubernetes.io/instance: glance-orsi # annotations: # cert-manager.io/cluster-issuer: letsencrypt-prod # external-dns.alpha.kubernetes.io/hostname: home.dooplex.hu # nginx.ingress.kubernetes.io/ssl-redirect: "true" # spec: # ingressClassName: nginx-internal # rules: # - host: home.dooplex.hu # http: # paths: # - path: / # pathType: Prefix # backend: # service: # name: glance # port: # number: 8080 # tls: # - hosts: # - home.dooplex.hu # secretName: glance-tls