bash — [email protected]
kyle@kgivler:~$ ./list_services.sh --all

Services & Infrastructure

Public applications, classic internet protocols, APIs, event-driven services, and operational tooling running across my Linux VPS and personal workstation.

[INFO] Public services are exposed selectively. Administrative dashboards and internal infrastructure remain private or loopback-only.
— Selected host containers
9 Public apps and protocols
4 Mission Control services
6 Operations and monitoring tools

grep -i
[INFO] No services matched that filter.

kyle@kgivler:~$ ls -la ./public-services/

Random Steam Game Stops library paralysis by choosing a game for you. PUBLIC CHECKING HTTPS
Container joyful-stack-randomsteam-1
Image joyful/randomsteam
Hostname randomsteam.kgivler.com
Protocol HTTPS / JSON API
Observed memory Approximately 163 MB
Container state Static snapshot

A fast random game picker for public Steam libraries. It resolves a Steam account, loads the user's owned games, applies exclusions and filters, and returns a random game without making the visitor wait through a slow picker.

Includes a public website, API endpoints, Steam data caching, rate limiting, and persistent user preferences.

HappyDiscard A modern implementation of the classic Discard protocol. PUBLIC CHECKING TCP :9
Container joyful-stack-happydiscard-1
Image happy-discard
Endpoint discard.kgivler.com:9
Protocol Discard / TCP :9
Observed memory Awaiting live snapshot
Container state Awaiting live snapshot
Live probe Awaiting live snapshot

Accepts data over TCP port 9 and discards every byte without decoding, storing, logging, or echoing it.

Try it:
nc discard.kgivler.com 9
HappyDaytime Connect to receive the current server time. PUBLIC CHECKING TCP :13
Container joyful-stack-happydaytime-1
Port TCP 13
Hostname daytime.kgivler.com
Protocol Daytime (RFC 867)
Observed memory Approximately 20 MB
Container state Awaiting live snapshot
Live probe Awaiting live snapshot

HappyDaytime is a modern implementation of the classic Daytime protocol. Each TCP connection receives a human-readable representation of the server's current date and time, then the connection closes.

Try it:
nc daytime.kgivler.com 13

This is a real TCP Daytime service on its assigned port, not an HTTP endpoint.

HappyEcho A modern implementation of the classic Echo protocol. PUBLIC CHECKING TCP :7
Container joyful-stack-happyecho-1
Port TCP 7
Hostname echo.kgivler.com
Role Classic protocol experiment
Observed memory Approximately 40 MB
Container state Awaiting live snapshot
Live probe Awaiting live snapshot

HappyEcho accepts a TCP connection and sends received data back to the client. The service is intentionally simple: what you send is what you get back.

It exists as a practical networking exercise and as a working example of one of the original small Internet services.

HappyFinger Finger a Steam ID to receive a random game recommendation. PUBLIC CHECKING TCP :79
Container joyful-stack-happyfinger-1
Port TCP 79
Hostname finger.kgivler.com
Protocol Finger
Observed memory Approximately 41 MB
Container state Awaiting live snapshot
Live probe Awaiting live snapshot

HappyFinger is a modern .NET implementation of the classic Finger protocol with a Steam-powered twist. Supply a Steam ID as the Finger username and the service will choose a random game from that public Steam library.

Try it:
finger [email protected]

The Steam profile and owned-games list must be public. This is a real TCP Finger service listening on the protocol's assigned port, not an HTTP simulation.

HappyGopher A real Gopher server for text-first browsing. PUBLIC CHECKING TCP :70
Container joyful-stack-happygopher-1
Port TCP 70
Hostname gopher.kgivler.com
Protocol Gopher
Observed memory Approximately 36 MB
Container state Awaiting live snapshot
Live probe Awaiting live snapshot

HappyGopher serves hierarchical menus and text resources using the Gopher protocol. It is a lightweight alternative view of publishing content without the modern web stack.

The result is closer to navigating a remote text filesystem than browsing a typical website.

HappyGemini A small Gemini protocol server for the text-first web. PUBLIC CHECKING TLS :1965
Container joyful-stack-happygemini-1
Image joyful-stack-happygemini
Endpoint gemini.kgivler.com:1965
Protocol Gemini / TLS :1965
Observed memory Awaiting live snapshot
Container state Awaiting live snapshot

A .NET 10 Gemini server with TLS, virtual hosts, static content, dynamic pages, and external plugin support.

HappyQOTD Classic Quote of the Day over TCP with a matching HTTP API. PUBLIC CHECKING TCP :17
Container joyful-stack-happyqotd-1
Port TCP 17
Hostname qotd.kgivler.com
Protocol QOTD / HTTPS JSON API
Observed memory Approximately 36 MB
Container state Awaiting live snapshot
Live probe Awaiting live snapshot

HappyQOTD serves a single persisted quote for the current UTC day through the classic Quote of the Day protocol on TCP port 17 and through a companion HTTP API.

Try it:
ncat qotd.kgivler.com 17

The TCP service and the API return the same quote of the day, which makes it useful both as a classic protocol demo and as a lightweight integration endpoint.

IT-Tools A public collection of browser-based developer utilities. PUBLIC CHECKING HTTPS
Container it-tools
Origin 127.0.0.1:8080
Hostname tools.kgivler.com
Image ghcr.io/corentinth/it-tools:latest
Exposure Public through Cloudflare Tunnel
Container state Awaiting live snapshot

IT-Tools provides convenient encoders, decoders, converters, formatters, generators, networking helpers, and other small developer utilities from one browser-based interface.

The service is publicly available for now. Access may be restricted later if it attracts abusive traffic or excessive resource usage.


kyle@kgivler:~$ ls -la ./mission-control/

Mission Control Gateway Receives external events and publishes them internally. SYSTEM CHECKING HTTP
Container joyful-stack-gateway-1
Loopback port 127.0.0.1:5190
Role Event ingress
Observed memory Approximately 61 MB
Container state Awaiting live snapshot

The Gateway accepts generic integration events and signed GitHub webhooks. Validated events are wrapped in a common envelope and published to NATS JetStream for downstream processing.

This keeps external HTTP concerns separate from storage, projections, and other event consumers.

Mission Control Archive Maintains a durable SQLite history of integration events. SYSTEM CHECKING SQLITE
Container joyful-stack-archive-1
Loopback port 127.0.0.1:5191
Storage SQLite named volume
Observed memory Approximately 61 MB
Container state Awaiting live snapshot

Archive subscribes to the complete Mission Control event stream and writes each event to SQLite. It provides a durable history independent of specialized consumers.

Specialized projections can change without losing the original integration-event record.

Mission Control GitActivity Turns GitHub push events into a website-friendly feed. SYSTEM CHECKING JSON API
Container joyful-stack-gitactivity-1
Loopback port 127.0.0.1:5192
Consumes github.push.received
Observed memory Approximately 46 MB
Container state Static snapshot

GitActivity consumes GitHub push events, filters them by allowed repositories and branches, and stores a sanitized commit projection in SQLite.

The public website reaches this data through kgivler.api, which keeps the GitActivity service key out of browser code.

NATS JetStream Provides durable event streaming for Mission Control. INTERNAL CHECKING NATS
Container joyful-stack-nats-1
Image nats:2.14.3-alpine
Endpoint nats:4222
Observed memory Awaiting live snapshot
Container state Static snapshot

NATS JetStream is the message broker behind Mission Control. It persists integration events and delivers them to durable consumers so Archive, GitActivity, and future services can process events independently.

Durable streams separate publishers from consumers while preserving events for reliable processing and recovery.


kyle@kgivler:~$ ls -la ./operations/

Mission Control Dashboard A private operations console for monitoring the JoyfulReaper service stack. PRIVATE CHECKING BLAZOR
Container joyful-stack-dashboard-1
Image joyful-stack-dashboard
Hostname dashboard.kgivler.com
Protocol HTTPS / Blazor Server
Observed memory Awaiting live snapshot
Container state Awaiting live snapshot

An authenticated Blazor dashboard for viewing Mission Control events, service status, container health, protocol probes, archive statistics, and detailed event payloads.

The dashboard is authenticated; no administrative action is exposed from this public catalog.

What Should I Work On Today? Surfaces neglected projects and gives me something concrete to work on. PRIVATE CHECKING BLAZOR
Container joyful-stack-wsiwot-1
Image joyful-stack-wsiwot
Loopback endpoint 127.0.0.1:5080
Protocol HTTP / Blazor Server / JSON API
Observed memory Awaiting live snapshot
Container state Awaiting live snapshot

A private work-planning application for tracking projects and todos, recording when work was last performed, and choosing a daily task based on neglect, energy, and effort.

ntfy Delivers push notifications from applications and infrastructure. OPERATIONS CHECKING HTTPS
Container joyful-stack-ntfy-1
Image binwiederhier/ntfy
Hostname ntfy.kgivler.com
Protocol HTTPS / REST API
Observed memory Awaiting live snapshot
Container state Awaiting live snapshot

A self-hosted notification service that accepts simple HTTP requests and delivers real-time push notifications to subscribed devices. It is used for application alerts, monitoring events, and operational notifications.

Beszel Lightweight host and container resource monitoring. PRIVATE CHECKING HTTP :8090
Container beszel
Loopback port 127.0.0.1:8090
Image henrygd/beszel:latest
Observed memory Approximately 18 MB
Container state Awaiting live snapshot

Beszel provides the container list, CPU, memory, network, uptime, and status information used to inspect this stack.

The dashboard is administrative and is not exposed as a public service.

Beszel Agent Collects host and container metrics for Beszel. CHECKING INTERNAL
Container beszel-agent
Image henrygd/beszel-agent:latest
Role Metrics collector
Observed memory Approximately 5 MB
Container state Awaiting live snapshot

The Beszel agent reads host and container statistics and reports them to the private Beszel dashboard.

Uptime Kuma Checks whether public services are actually reachable. PRIVATE CHECKING HTTP :3001
Container uptime-kuma
Loopback port 127.0.0.1:3001
Image louislam/uptime-kuma:2
Observed memory Approximately 144 MB
Container state Static snapshot

Uptime Kuma performs scheduled availability checks against selected websites, APIs, and network services. It provides a clearer answer than container status alone because a running process is not always a working service.


kyle@kgivler:~$ mission-control status --live

Live details and the container table follow the selected node.
[LOADING] Connecting to the Mission Control Agent fleet...
Node: Unavailable Captured: Unavailable Age: Unavailable State: Loading Last refresh: Never Event publish: Loading Publish attempted: Unavailable
Container State Memory Memory % CPU % Restarts
Live snapshot data will appear here when JavaScript can reach Kgivler.Api. The service details above remain usable as a static fallback.

kyle@kgivler:~$ ./show_hosting_provider.sh

VPS hosting

Clanker and ScopeCreep, the two public VPS nodes behind many of the services shown here, run on GreenCloud VPS. I use them for application hosting, Docker services, monitoring, network experiments, and the public infrastructure behind a growing pile of projects.

They've worked well for the kind of small Linux VPS workloads I run, and their pricing has made it practical to keep multiple locations online without spending much on infrastructure.

The GreenCloud link is an affiliate link. I may earn a commission if you sign up through it.


kyle@kgivler:~$ _