Skip to content
@KanterLabs

KanterLabs

KanterLabs: a black English lop rabbit beside the KanterLabs wordmark

Developer tools, self-hosted platforms, and practical software, built with the infrastructure to run them.

Website

Rust Go TypeScript JavaScript Python Svelte
Proxmox k3s Docker Caddy Cloudflare Tailscale GitHub Actions GNOME

Featured · Projects · Infrastructure · How we work

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.

🛠️ Developer tools

Software that makes delivery faster and easier to inspect.

🏗️ Self-hosted platforms

Deployment and operations you own and can understand end to end.

🖥️ Practical apps

Desktop and web software that runs on the platform under real constraints.

Featured: NFL Scores

NFL Scores gamecast: a touchdown replayed on a drawn field, the end zone lights up and a TOUCHDOWN banner pops in

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.

GNOME Shell 48–50 No API key License: MIT

Scoreboard with every live game
Every game at a glance. Live games first, with the clock, down and distance, possession, and red-zone tags. Fresh scores flash for 30 seconds.
Gamecast with the drawn field
A gamecast drawn on the field. Passes and kicks fly in arcs, runs travel the turf, and banners call out touchdowns, turnovers, and sacks as they happen.
Play by play grouped by drive
Play by play. Every play grouped by drive, with colored type tags and yards gained or lost.
Box score
Box score. Points by quarter, scoring plays, team stat comparisons, and the leaders.

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

View NFL Scores on GitHub →

Projects

Desktop

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

Self-hosted platforms

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

Web

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.

Infrastructure

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
Loading

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
Loading

Watching the fleet: ActionView

ActionView dropdown in the GNOME top bar: a running job with live timer and CPU/memory, a queued job flagged slower than p95, trend sparklines, runner capacity, and recent runs

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".

  • Running jobs with live timers, the runner, and CPU and memory.
  • Queued jobs, flagged when they wait longer than that repo's p95.
  • Notifications for failures, stuck queues, and alerts. A failed matrix run is one notification, not six.
  • It is a read-only client of the fleet dashboard, so there are no GitHub or Kubernetes tokens on the desktop.
GNOME notification: a build queued for 7 minutes with no runner picking it up

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.

How we work

  • 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.

Pinned Loading

  1. .github .github Public

Repositories

Showing 10 of 18 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…