TypeScript

Sentinel GH Resolver FactoryFlow

The default language for my newer apps, from FactoryFlow's simulation engine to Sentinel's services and dashboard.

Rust

Davey Maps

Backs Davey Maps' terrain generation: Perlin noise and heightmaps served over an Axum + Tokio HTTP API.

PHP

Dashboard PokeVote

Lightweight server-side rendering for this dashboard and PokeVote, including the live server stats endpoint.

Three.js

Davey Maps FactoryFlow

In-browser 3D: procedural terrain in Davey Maps and the interactive factory floor in FactoryFlow.

React

Sentinel GH Resolver

UI for Sentinel's observability dashboard and GH Resolver's profile lookup and cache inspector.

Next.js

Sentinel

Powers the Sentinel dashboard, with server-rendered views over uptime, API health, and incident data.

Vite

GH Resolver FactoryFlow

Fast dev server and production bundler for GH Resolver's frontend and the FactoryFlow static build.

Tailwind CSS

Sentinel

Utility-first styling for the Sentinel dashboard.

Node.js

Sentinel GH Resolver

Runs Sentinel's agent, collector, checker, and API services (gRPC, Express, Socket.IO) and GH Resolver's edge and origin servers.

PostgreSQL

PokeVote Sentinel

Relational storage for PokeVote's votes and rankings and Sentinel's metrics, checks, and incidents.

Prisma

Sentinel

Type-safe database access and migrations shared across Sentinel's services.

Docker

Dashboard PokeVote Davey Maps Sentinel GH Resolver

Runs each app in its own isolated container, so deployments behave the same on every VPS.

Nginx

GH Resolver

Serves GH Resolver's built frontend inside its container.

Apache

Server Dashboard FactoryFlow

The front door for every app: virtual hosts, TLS, and reverse proxying, plus FactoryFlow's static hosting.

Ubuntu

Server

The VPS host OS, with stable Linux tooling for running and operating every service.