Operational dashboardOpen-source

dashboard-sheets

Streamlit project to read spreadsheets, keep credentials outside the image and publish a multi-arch image via GitHub Actions/GHCR.

StreamlitGoogle Sheets APIDocker multi-archGitHub Actions

Technical reading

Quick case read

Problem

Spreadsheets become manual operations when nobody turns the data into a screen. Deployment also needs to avoid credentials inside the image and run on AMD64/ARM64.

Solution

The dashboard reads Google Sheets through a read-only mounted credential, runs as a non-root user, publishes a multi-arch image and includes a healthcheck without depending on curl.

Stack

Streamlit · Google Sheets API · Docker multi-arch · GitHub Actions

Status

Open-source

Architecture

Spreadsheet becomes a panel without putting secrets in the image

Compose mounts `credentials.json` as read-only and controls resources through env. The image uses a multi-arch Python slim base.

Technical flow

  • Input
  • Processing
  • Storage
  • Output
Flowchart
Rendering flowchart…

Step-by-step flow

01Input
Google SheetsSpreadsheet as data source
02Access
Credentials/APIRead-only credential mounted outside the image
03Processing
StreamlitApp reading and rendering
04Processing
Transformation/cacheTTL cache and visual preparation
05Output
Web dashboardOperational panel
06Operations
Docker/GHCRMulti-arch image ready for deploy
Diagram source (Mermaid)
Paste into any Mermaid renderer
flowchart LR
  sheets["Google Sheets"]
  credentials["Credentials/API"]
  streamlit["Streamlit"]
  transform["Transformation/cache"]
  dashboard["Web dashboard"]
  image["Docker/GHCR"]
  sheets --> credentials
  credentials --> streamlit
  streamlit --> transform
  transform --> dashboard
  dashboard --> image
1. Google Sheets (Input) → Credentials/API. 2. Credentials/API (Access) → Streamlit. 3. Streamlit (Processing) → Transformation/cache. 4. Transformation/cache (Processing) → Web dashboard. 5. Web dashboard (Output) → Docker/GHCR. 6. Docker/GHCR (Operations).

Stack and responsibilities

  • Streamlit

    Fast interface for operational data.

  • Google Sheets API

    External data source.

  • Docker buildx

    Multi-arch AMD64/ARM64 build.

  • GitHub Actions / GHCR

    Automatic image publishing.

Technical decisions

  • No Alpine

    README chooses `python:3.12-slim` to avoid painful native builds for scientific dependencies.

  • Secret outside the image

    `credentials.json` comes through a read-only bind mount, not the build.

  • Lower-privilege container

    Non-root user, read-only filesystem, tmpfs and no-new-privileges documented.

Operations

  • documentedPortainer

    Guide with ready image or Git build stack.

  • documentedHealthcheck

    Health via Python inside the container.

  • documentedGHCR

    Workflow publishes `ghcr.io/gabedsam01/dashboard-sheets:latest`.

Status and next steps

  • Add screen examples when safe public data exists.
  • Document authentication variations by environment.

Contact

Want something similar for your process?

If there is repeated input, a manual step and an expected output, there is probably a system to design.

Talk about a project