Back to Articles
Open Source

Build a Daily Tech Command Center with Glance

Serdarcan Buyukdereli
Jan 2, 2026
6 min read
1178 words

Docker Compose + Glance YAML + Nginx + glance.theinfinity.dev

Most mornings, the internet isn’t an “ocean of knowledge.” It’s a soup of notifications. Glance takes that soup, pours it into a single bowl, and helps you keep the signal without drowning in the noise.

In this article, we’ll:

  • Run Glance with Docker Compose
  • Design a single “Tech” dashboard (GitHub Trends + Releases + Reddit + HN + Lobsters + Monitor)
  • Publish it behind Nginx on glance.theinfinity.dev
  • Bonus: how to leverage Glance’s community-widgets ecosystem like plug-ins

  • TL;DR

  • Docker Compose setup in minutes ✅
  • A curated dashboard via glance.yml ✅
  • GitHub trends + release radar ✅
  • Reddit + HN + Lobsters for real-world pulse ✅
  • Nginx reverse proxy + SSL + (optional) basic auth ✅
  • Community widgets + $include to keep configs clean ✅

  • 1) Setup: Docker Compose

    Folder layout:

    ~/glance/
      docker-compose.yml
      config/
        glance.yml

    docker-compose.yml:

    services:
      glance:
        container_name: glance
        image: glanceapp/glance
        restart: unless-stopped
        volumes:
          - ./config:/app/config
        ports:
          - 8081:8080

    Start it:

    cd ~/glance
    docker compose up -d
    docker logs -f glance

    At this point, Glance should be reachable internally at http://SERVER_IP:8081. We’ll put it behind Nginx next.


    2) Dashboard philosophy: what this page is actually for

    This dashboard is not built to “show everything.”

    It’s built to answer a few questions fast:

  • GitHub: what’s trending today, and what just shipped (releases)?
  • Discussions: what are people arguing about (and learning from) on Reddit / HN / Lobsters?
  • Ops: is TheInfinity.dev alive and responding?
  • My Commentary: Done right, Glance becomes a daily briefing, not another time-sink.
    "

    3) Full config/glance.yml

    Save the file below as config/glance.yml.

    Note: since we’re placing Glance behind a reverse proxy (Nginx), I’m adding server.proxied: true so Glance can properly interpret forwarded headers.
    "
    theme:
      background-color: 50 1 6
      primary-color: 24 97 58
      negative-color: 209 88 54
    
    
    pages:
    
    
      - name: "Tech"
        columns:
    
          - size: small
            widgets:
              - type: group
                style: clean
                widgets:
    
                  - type: custom-api
                    title: "🔥 Github Trends"
                    cache: 24h
                    url: 'https://api.ossinsight.io/v1/trends/repos/?period=past_24_hours&language=All'
                    template: |
                        <ul class="list list-gap-10 collapsible-container" data-collapse-after="10">
                          {{ range .JSON.Array "data.rows"}}
                            <li>
                              <a class="color-primary-if-not-visited" href="https://github.com/{{ .String "repo_name" }}">{{ .String "repo_name" }}</a>
                              <ul class="list-horizontal-text">
                                  <li class="color-highlight"> {{.String "primary_language"}} </li>
    
                                  <li style="display: flex; align-items: center;gap: 4px;">
                                    {{ .Int "stars" }}
                                    <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="currentColor" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
                                      <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/>
                                    </svg>
                                  </li>
    
                                  <li style="display: flex; align-items: center;gap: 4px;">
                                    {{ .Int "forks" }}
                                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
                                      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
                                      <circle cx="12" cy="18" r="2" />
                                      <circle cx="7" cy="6" r="2" />
                                      <circle cx="17" cy="6" r="2" />
                                      <path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" />
                                      <path d="M12 12l0 4" />
                                    </svg>
                                  </li>
    
                                  <li style="display: flex; align-items: center;gap: 4px;">
                                    {{ .Int "pull_requests" }}
                                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
                                      <circle cx="6" cy="6" r="3"></circle>
                                      <circle cx="18" cy="18" r="3"></circle>
                                      <path d="M13 6h3a2 2 0 0 1 2 2v7"></path>
                                      <line x1="6" y1="9" x2="6" y2="21"></line>
                                    </svg>
                                  </li>
    
                              </ul>
                              <ul class="list collapsible-container">
                                <li style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;" class="color-subdue">
                                  Contributors: {{ .String "contributor_logins"}}
                                </li>
                                <li>
                                  {{ .String "description" }}
                                </li>
                              </ul>
                            </li>
                          {{ end }}
                        </ul>
    
    
                  - type: rss
                    title: "🔥 Product Hunt"
                    style: clean
                    feeds:
                      - url: https://www.producthunt.com/feed
                    collapse-after: 15
    
                  - type: monitor
                    cache: 1m
                    title: Services
                    sites:
                      - title: Website
                        url: https://theinfinity.dev
                        icon: https://www.theinfinity.dev/logo.svg
    
          - size: full
            widgets:
    
              - type: rss
                title: "🧠 Tech & Dev Feeds"
                style: detailed-list
                cache: 12h
                feeds:
                  - url: https://www.lastweekinaws.com/newsletter/feed/
                    title: Last Week in AWS
                  - url: https://newsletter.systemdesign.one/feed
                    title: System Design Newsletter
                  - url: https://blog.bytebytego.com/feed
                    title: ByteByteGo
                  - url: https://newsletter.memesmotivations.com/feed
                    title: The M&Ms Newsletter
                  - url: https://nuvemmag.substack.com/feed
                    title: Nuvem Mag
                  - url: https://newsletter.francofernando.com/feed
                    title: Franco Fernando
                  - url: https://rss.beehiiv.com/feeds/xgTKUmMmUm.xml
                    title: TLDRSec
                  - url: https://rss.beehiiv.com/feeds/ypr2bi0H9m.xml
                    title: Hungry Minds
                  - url: https://blog.alexewerlof.com/feed
                    title: Alex Ewerlöf
                  - url: https://hellointerview.substack.com/feed
                    title: Hello Interview
                  - url: https://seattledataguy.substack.com/feed
                    title: Seattle Data Guy
                  - url: https://newsletter.systemdesigncodex.com/feed
                    title: System Design Codex
                  - url: https://blog.algomaster.io/feed
                    title: Algomaster
                  - url: https://dribbble.com/shots/popular.rss
                    title: Dribbble Inspiration
    
              - type: group
                title: "💬 Reddit Discussions"
                style: cards
                widgets:
                  - type: reddit
                    subreddit: technology
                    show-thumbnails: true
                  - type: reddit
                    subreddit: selfhosted
                    show-thumbnails: true
                  - type: reddit
                    subreddit: devops
                    show-thumbnails: true
                  - type: reddit
                    subreddit: kubernetes
                    show-thumbnails: true
                  - type: reddit
                    subreddit: n8n
                    show-thumbnails: true
                  - type: reddit
                    subreddit: automation
                    show-thumbnails: true
                  - type: reddit
                    subreddit: notebooklm
                    show-thumbnails: true
                  - type: reddit
                    subreddit: aicuriosity
                    show-thumbnails: true
                  - type: reddit
                    subreddit: GeminiNanoBanana
                    show-thumbnails: true
                  - type: reddit
                    subreddit: AgentsOfAI
                    show-thumbnails: true
                  - type: reddit
                    subreddit: OpenAI
                    show-thumbnails: true
                  - type: reddit
                    subreddit: ChatgptArtist
                    show-thumbnails: true
                  - type: reddit
                    subreddit: artificial
                    show-thumbnails: true
                  - type: reddit
                    subreddit: PromptEngineering
                    show-thumbnails: true
                  - type: reddit
                    subreddit: WritingPrompts
                    show-thumbnails: true
    
    
          - size: small
            widgets:
              - type: group
                style: clean
                widgets:
                  - type: hacker-news
                    title: "🔥 Hacker News"
                    style: clean
                    collapse-after: 10
    
                  - type: lobsters
                    title: "🦞 Lobsters"
                    style: clean
                    collapse-after: 10
    

    Restart after changes:

    docker compose restart

    4) Community Widgets: from copy-paste to “include” level

    Glance has a community-widgets repository: a shared pool of community-made widgets.

    Small widgets: you can paste them directly into glance.yml.

    Large widgets: split them into separate files to avoid YAML indentation pain, then include them.

    Example structure:

  • config/widgets/immich-stats.yml
  • # community widget content (could be long)

    Then in your main glance.yml:

    widgets:
      - $include: widgets/immich-stats.yml

    This keeps the main config readable and makes experimentation stupidly easy.


    5) “Glance loads a bit slowly” (and why that can be normal)

    Glance may cache and fetch data for multiple widgets on startup. If you keep stacking heavy sources, you may notice a few seconds of initial load time.

    Practical fixes:

  • Split into pages (Tech / AI)
  • Keep cache durations sane (e.g., GitHub releases at 12h is perfect)

  • 6) Publishing: glance.theinfinity.dev behind Nginx

    6.1 DNS

    Create an A record:

  • glance.theinfinity.dev → your VPS IP
  • 6.2 Nginx reverse proxy

    Create:

    /etc/nginx/sites-available/glance.theinfinity.dev

    server {
      listen 80;
      server_name glance.theinfinity.dev;
    
      location / {
        proxy_pass http://127.0.0.1:8081;
    
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    
        proxy_http_version 1.1;
        proxy_read_timeout 60s;
      }
    }

    Enable + reload:

    sudo ln -s /etc/nginx/sites-available/glance.theinfinity.dev /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl reload nginx

    6.3 SSL (Let’s Encrypt)

    sudo apt update
    sudo apt install -y certbot python3-certbot-nginx
    sudo certbot --nginx -d glance.theinfinity.dev

    7) If you expose it publicly: the simplest shield (Nginx Basic Auth)

    This panel is your personal command center. It doesn’t have to be a public monument.

    sudo apt install -y apache2-utils
    sudo htpasswd -c /etc/nginx/.htpasswd glanceadmin

    Update your Nginx config:

    location / {
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/.htpasswd;
    
      proxy_pass http://127.0.0.1:8081;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }

    Final thoughts

    The power here isn’t “I installed Glance.”

    The power is the combo:

  • GitHub Trends for daily open-source signals
  • Releases Radar to catch changes before they surprise production
  • Reddit + HN + Lobsters to track real discussion and pain points
  • Community widgets to grow your dashboard like Lego blocks
  • Subdomain + Nginx for clean publishing
  • server.proxied: true so it behaves correctly behind a reverse proxy
  • glance.theinfinity.dev fits perfectly into the TheInfinity.dev ecosystem as a behind-the-scenes operations panel for discovery and content flow.

    Found this article helpful?

    Share it with your network!

    Written by Serdarcan Buyukdereli

    Published on Jan 2, 2026

    More Articles

    The Infinity

    Weekly tech insights, programming tutorials, and the latest in software development. Join our community of developers and tech enthusiasts.

    Quick Links

    Connect With Us

    Daily.dev

    Follow us for the latest tech insights and updates

    © 2026 The Infinity. All rights reserved.