Backend and systems-focused .NET developer building self-hosted applications, network services, developer tools, and performance-oriented game mods.
I design, deploy, and operate the systems shown on this site.
kyle@kgivler:~$
./show_flagship_projects.sh
These are the systems that best represent how I design, build, deploy, and operate software.
[OPERATIONS PLATFORM]
Mission Control
A self-hosted .NET operations and event-processing platform for the applications, hosts, containers, and protocol services I operate.
Problem:
My self-hosted services needed durable event history and useful diagnostics without turning every private backend into a public API.
Built:
An authenticated ASP.NET Core gateway for integration events and signed GitHub webhooks, a bounded NATS JetStream stream with durable Archive and GitActivity consumers, SQLite projections, a protocol-aware Agent, an authenticated Blazor dashboard, and a Windows/Android .NET MAUI client.
Decisions:
Kept broker transport behind messaging contracts; used explicit ACK, delayed NAK, permanent TERM, and message-ID deduplication; shared contracts, clients, and UI; and kept private service credentials and URLs behind a bearer-authenticated proxy API.
Stack:
.NET 10
ASP.NET Core
NATS JetStream
SQLite
Blazor
.NET MAUI
Docker
Result:
Full event envelopes are archived while GitHub activity and host, Docker, and protocol status are projected into authenticated web and installed clients. The current Mission Control codebase also includes daily work picks, work-item listing, quick Todo creation, and GreenCloud usage and rate projections.
A production web utility that breaks decision paralysis by choosing a game from a public Steam library.
Problem:
Large libraries make choosing difficult, while uncached Steam lookups and ambiguous identifiers can make a simple random choice slower and less reliable than it should be.
Built:
A Blazor Interactive Auto UI and ASP.NET Core API that normalize SteamID and vanity input, select from cached library data, filter unplayed or locally blocked titles, show playtime, export CSV, and open Steam launch URIs.
Decisions:
Used SQLite-backed distributed caching with coalesced cache misses, made library refresh deliberate, persisted Data Protection keys across deployments, kept readiness focused on local dependencies, and made identity-free Mission Control telemetry best-effort.
Stack:
.NET 10
Blazor
ASP.NET Core
SQLite
Steam API
Docker
Mission Control
Result:
The live application delivers random picks with unplayed filtering, browser-local exclusions, playtime, CSV export, and direct Steam launch support—without presenting cookie preferences as account-backed profiles. Docker publishing is gated by the automated test suite.
Modern .NET implementations of classic and small-web Internet protocols, from deliberately tiny TCP daemons to extensible Gopher and Gemini servers.
Problem:
Seven protocol servers should not duplicate listener, concurrency, timeout, shutdown, and telemetry infrastructure, while richer protocols still need room to grow without becoming one everything-daemon.
Built:
Echo :7, Discard :9, Daytime :13, QOTD :17, Gopher :70, Finger :79, and TLS Gemini :1965. The small services share JoyfulReaperLib.TcpServer; Gopher and Gemini add static content, dynamic pages, and manifest-loaded plugins.
Decisions:
Used canonical ports, bounded connection lifecycles, graceful shutdown, Docker, and best-effort Mission Control telemetry. Echo, Daytime, QOTD, and Finger use Native AOT; Gopher and Gemini instead use explicit extensibility contracts and isolated plugin loading and are not described as AOT.
Stack:
.NET 10
TCP/IP
Native AOT
Docker
Gopher
Gemini
Mission Control
Result:
The family spans intentionally small RFC-style services through plugin-extensible Gopher and Gemini application servers. HappyGopher and HappyGemini are live at gopher://gopher.kgivler.com and gemini://gemini.kgivler.com.
Live data and interactive tools backed by services running on my workstation and Linux VPS.
[AVAILABILITY] Some components are self-hosted, so individual tools may be temporarily unavailable during maintenance or when a host is offline.
./live_host/
Current workstation telemetry and public Steam presence.
kyle@kgivler:~$
./show_status.sh
[NOTICE] This website runs on my personal workstation via a Cloudflare tunnel.
Unexpected downtime may occur during host maintenance or if the workstation is off.
Establishing connection to host...
kyle@kgivler:~$
./show_steam.sh
Status:
Steam presence check
Description:
Shows my current Steam presence when available.
Description:
A preview of public applications, classic internet protocols, APIs, and backend infrastructure running across my workstation and Linux VPS.
[PUBLIC]Random Steam Game—Picks a random game from a public Steam library.
[PUBLIC]HappyFinger—A modern .NET Finger protocol server running on TCP port 79.
[PUBLIC]HappyGopher—An old-school Gopher server running on TCP port 70.
[SYSTEM]Mission Control—Processes integration events and GitHub activity through NATS JetStream.