diff --git a/content/projects/_index.md b/content/projects/_index.md index 57b2aa0..392a4ca 100644 --- a/content/projects/_index.md +++ b/content/projects/_index.md @@ -3,3 +3,7 @@ title = "Projects" template = "projects.html" sort_by = "title" +++ + +All three applications are built with Elixir/Phoenix and run on a self-managed Kubernetes cluster hosted on my WISP's network infrastructure. Talos Linux nodes run as VMs on Proxmox VE hypervisors, managing the full stack from physical hardware through container orchestration. Workloads are deployed via Kubernetes manifests with Phoenix releases built as Docker images, using PostgreSQL operators with TimescaleDB and PostGIS extensions for per-app database isolation. + +Monitoring is handled with Grafana, Telegraf, Loki, and UptimeRobot. Kubernetes secrets are stored in 1Password vaults, daily PostgreSQL backups run to an offsite NAS, and services are exposed through Cloudflare Tunnels via cloudflared. diff --git a/content/projects/aprs.md b/content/projects/aprs.md new file mode 100644 index 0000000..ecdd431 --- /dev/null +++ b/content/projects/aprs.md @@ -0,0 +1,9 @@ ++++ +title = "APRS.me" +description = "Real-time APRS packet tracking and visualization, built with Elixir/Phoenix, and PostGIS." + +[extra] +url = "https://aprs.me" ++++ + +APRS.me is a real-time tracking and visualization platform for the Amateur Radio Automatic Packet Reporting System (APRS) network. Built with Elixir/Phoenix and backed by PostgreSQL with PostGIS for spatial queries. diff --git a/content/projects/gridmap.md b/content/projects/gridmap.md index ec23bc5..80a5f3a 100644 --- a/content/projects/gridmap.md +++ b/content/projects/gridmap.md @@ -1,7 +1,11 @@ +++ title = "GridMap" -description = "GridMap" +description = "Maidenhead grid square mapping tool for amateur radio operators, built with Elixir/Phoenix." [extra] url = "https://gridmap.org" +++ + +GridMap is a mapping tool for amateur radio operators that visualizes Maidenhead grid squares. Built with Elixir/Phoenix and backed by PostgreSQL with PostGIS for spatial queries. + +Parses NASA SRTM elevation data to generate elevation profiles along a path, useful for evaluating line-of-sight between stations. diff --git a/content/projects/towerops.md b/content/projects/towerops.md index 8a1f82a..431c92e 100644 --- a/content/projects/towerops.md +++ b/content/projects/towerops.md @@ -1,7 +1,11 @@ +++ title = "TowerOps" -description = "TowerOps" +description = "Network monitoring and management platform for WISPs, built with Elixir/Phoenix." [extra] url = "https://towerops.net" +++ + +TowerOps is a network monitoring and management platform built specifically for wireless internet service providers. It monitors the entire Verona Networks infrastructure alongside LibreNMS, Icinga2, and PagerDuty. + +A remote agent written in Go runs in Docker Compose within customer networks, letting TowerOps poll internal network devices without exposing them to the internet. The agent connects back to towerops.net over a WebSocket using protobufs. diff --git a/content/projects/verona-networks.md b/content/projects/verona-networks.md new file mode 100644 index 0000000..2180e10 --- /dev/null +++ b/content/projects/verona-networks.md @@ -0,0 +1,9 @@ ++++ +title = "Verona Networks" +description = "Rural wireless internet service provider serving the Princeton, Texas area." + +[extra] +url = "https://vntx.net" ++++ + +Verona Networks is a wireless internet service provider I founded in 2006 to bring quality high-speed internet to rural areas around Princeton, Texas.