Developer tools, self-hosted platforms, and practical software, built with the infrastructure to run them.
KanterLabs is an independent product and infrastructure studio founded and operated by Shane Kanterman. The work spans Linux systems, networking, continuous delivery, developer tooling, and user-facing applications, with an emphasis on clear boundaries, repeatable operations, and honest documentation.
|
Software that makes delivery faster and easier to inspect. |
Deployment and operations you own and can understand end to end. |
Desktop and web software that runs on the platform under real constraints. |
NFL Scores: live NFL scores and a drawn-on-the-field gamecast, built right into GNOME Shell.
Press Super + F from anywhere on your desktop. Press it again and it's gone.
Frosted liquid-glass styling, animations drawn with Cairo, and no account, no API key, and no tracking. It only fetches data while the popup is open.
git clone https://github.com/KanterLabs/nfl-scores.git && cd nfl-scores && make install| Project | What it is | Stack |
|---|---|---|
| NFL Scores | Live NFL scores and an animated, drawn-on-the-field gamecast for GNOME Shell. Press Super + F and it's there. | GJS · Cairo |
| ActionView | Our self-hosted GitHub Actions runners, live in the GNOME top bar: running and queued jobs, capacity, and notifications when a run fails or a job is stuck. | GJS · Cairo |
| Pulse | A fast GNOME command center for Spotify on Fedora, with a Rust daemon and optional headless playback. Pre-alpha. | GJS · Rust · D-Bus |
| ncspot | A visually expressive fork of the ncspot terminal Spotify client. | Rust · TUI |
| Project | What it is | Stack |
|---|---|---|
| Hostlet Core | Turn GitHub repositories into live apps on your own Linux server: builds, containers, routing, health checks, and rollback. Pre-1.0 beta. | Rust · Next.js |
| Helm | An open-source project board and roadmap with scoped agent automation, built for you to run on your own server. | Go · Svelte |
| Project | What it is | Stack |
|---|---|---|
| Portfolio | The source and infrastructure case studies behind Shane's portfolio, live at shanekanterman.dev. | TypeScript |
Projects are at different stages of development. Each repository's README is the source of truth for its current status, supported platforms, and usage.
KanterLabs runs a small Proxmox-based Linux platform. Public traffic enters through Cloudflare and a shared Caddy edge before reaching isolated application workloads. Private services use a separate Tailscale path, and management access is not treated as application ingress.
flowchart LR
users(["🌐 Public users"]) --> cf["Cloudflare"]
cf --> edge["Caddy edge"]
edge --> apps["Public app workloads"]
team(["🔒 Private access"]) --> ts["Tailscale"]
ts --> priv["Private services"]
subgraph host["Proxmox Linux platform"]
edge
apps
priv
end
classDef ext fill:#f38020,stroke:#c2600f,color:#fff
classDef edgeC fill:#1f88c0,stroke:#166a96,color:#fff
classDef pub fill:#2e7d32,stroke:#1b5e20,color:#fff
classDef prv fill:#37474f,stroke:#263238,color:#fff
class cf ext
class edge edgeC
class apps pub
class ts,priv prv
GitHub Actions jobs run on a dedicated k3s environment. Actions Runner Controller creates an ephemeral runner pod on demand, the pod handles exactly one job with its own Docker daemon, and the job environment is removed afterward.
sequenceDiagram
autonumber
participant GH as GitHub Actions
participant ARC as ARC on k3s
participant Pod as Ephemeral runner pod
GH->>ARC: Job queued
ARC->>Pod: Create a fresh pod with its own Docker daemon
Pod->>GH: Register and pick up one job
Pod->>Pod: Build, test, and validate the release
Pod-->>GH: Report results
ARC->>Pod: Tear down, nothing persists
|
ActionView puts that runner fleet in the GNOME top bar. A badge shows what's running and queued, and turns red on a failure you haven't seen. When the data is stale or the dashboard is unreachable, it says so instead of showing "all quiet".
Every screenshot is a real render from its CI, which runs a headless gnome-shell against sanitized fleet data. |
The platform is built around a few operating principles:
| Principle | In practice |
|---|---|
| Separate trust boundaries | Public, private, and management paths never share a route. |
| One front door | Application ingress is centralized instead of exposing workloads directly. |
| Disposable CI | Every job gets a clean environment instead of a shared, persistent runner. |
| Config in Git, secrets out | Infrastructure changes are reviewed in Git; credentials live outside it and go only where needed. |
| Explicit over magic | Changes favor visible validation and recovery paths over hidden automation. |
This is intentionally an architecture-level view. Network addresses, internal endpoints, capacity, credentials, and recovery procedures are not public documentation.
- Build product code and the delivery path together.
- Prefer small systems with explicit ownership and failure boundaries.
- Minimize persistent privilege and state in automation.
- Document limitations as carefully as capabilities.
Learn more about the work and its operator at shanekanterman.dev.