About

You're on some old computers and Raspberry Pis in my closet. This site runs on a self-hosted Kubernetes cluster — autoscaling GitHub Actions runners (x86 + arm), in-cluster Harbor registry, Rook-Ceph storage, built with Rust (Foster), exposed via Cloudflare Tunnels.

Software engineer at Astranis on the network and payload software team — tools to operate and monitor micro GEO satellites.

Request Trace

Real per-request data — client IP, geo lookup, User-Agent, pod identity.

Cluster

Real cluster telemetry — CPU/mem/disk/pod/node metrics, historical 24h series, Ceph health, network insights, GitOps status, backup Job status, cloudflared tunnel stats, and the Claude audit log, all ported from the real src/components/cluster_stats.rs. Most of this is Prometheus-backed (PROMETHEUS_URL) — GitOps and backup status go through the k8s API directly; network insights, spike config, and the Claude audit log are Postgres-backed.

0
CPU %
0
Mem GB
0
Disk GB
0
Pods
0
Nodes Ready
0
RX Mbps
0
TX Mbps

Nodes

%cpu G mem

Ceph

health
mon quorum/
osd up/
pg clean/

Flux GitOps

Backup Jobs

Network Insights

Mbps

Top Network Pods

tx rx

Cloudflared Tunnel

HA connections
req/s
error rate

Claude Audit Log

Security Audit

deps advisories
Last scan

Visitors

Real Postgres-backed visitor analytics — every request to this site is logged here.

0
total visits (30d)
0
unique IPs
0
countries
world map

Recent visits

Lighthouse

Here is a programmatically generated lighthouse report for every deploy that gets kicked off as part of a k8s job for every new deploy of this site.

Satellites

Real 3D orbital mechanics: the actual CelesTrak "active" TLE group (~16,000 objects), real sgp4 propagation over a real 288-step/5-minute rolling 24h window — ported from the real satellite_calculations.rs/satellite_renderer.rs/ satellite_tracker.rs. The WebGL2 shader/matrix/camera pipeline is a line-for-line port. Propagation itself runs server-side once per tick (shared by every visitor) instead of in-browser WASM — see src/satellites.rs for why — and the client interpolates smoothly between real snapshots.

Your browser does not support canvas
0 satellites tracked
Time: --:-- UTC
Speed:
Filter:

Conjunction Screening

Real screening: Hoots altitude-band pre-filter, true SGP4 propagation, a 288-step/5-minute rolling 24h window scan for local distance minima, ternary-search TCA refinement, rayon-parallelized pair scanning — ported from the real src/components/conjunction.rs. Persisted to the real conjunction_screenings/ conjunction_events tables. Foster only owns the button's idle/started label; the real pass is a background job polled independently (static/conjunction.js).

Status: idle

    Conway's Game of Life

    Plain requestAnimationFrame canvas; Foster owns run/pause/reset.

    Pathfinding Algorithms

    Seven algorithms racing from start (green) to end (amber) on the same random 2048×2048 obstacle grid, each rendered via its own WebGL2 canvas (R8 state texture) — ported line-for-line from the real src/components/path_search.rs. Foster owns run/pause and the reset nonce; zoom/pan/follow and all seven algorithm runners are plain client-side state, same as the real site's own local signals.

    Blind Search

    Explores without knowing the destination location.

    BFS

    DFS

    Corner

    Wall

    Random Walk

    Informed Search

    Uses heuristics toward the destination to guide exploration.

    A*

    Greedy Best-First

    Photography

    Real photos served straight from the CDN.

    No photos returned right now.