VagueDustin Enterprises

VagueDustin Enterprises™ logo

Every site on this domain ends the same way: “Created, owned, hosted, and maintained by VagueDustin Enterprises™.” There is no office, no staff, and definitely no revenue — just one person designing, building, deploying, and babysitting an entire product catalog from a homelab. This page is the catalog: every website, app, and game shipped under the banner, what each one does, and how it's built.

Fatenames game board showing the word grid from the Fateweaver perspective

Fatenames

Real-time multiplayer word deduction — in the browser and on Windows

Fatenames is a competitive online party game inspired by Codenames and steeped in Twitch culture. Two teams — Red and Blue — face off across a grid of word cards: each team’s Fateweaver weaves one-word clues to guide their Seekers toward the right cards while dodging the other team’s words and the deadly Disaster card.

It’s a full live-service game built solo: accounts, a 100-level XP progression with unlockable animated cosmetics, a global leaderboard, move-by-move match replays, four themed word packs, an in-game emote system, an original soundtrack distributed to streaming platforms, five-language localization, and a native Windows desktop app with Discord Rich Presence and background auto-updates.

Under the Hood

  • Frontend: One React 19 + TypeScript + Tailwind CSS 4 codebase ships two targets: the web game and a thin Electron desktop wrapper, with auto-updates delivered from Cloudflare R2.
  • Backend: Node.js + Express 5 REST API with Socket.IO driving all real-time gameplay (lobbies, turns, board sync, emotes), Sequelize over PostgreSQL 17, JWT auth, and Sharp for avatar processing.
  • Hosting: Docker Compose on the homelab, published to the internet through Cloudflare Tunnel.
React 19TypeScriptSocket.IOExpress 5PostgreSQL 17ElectronTailwind CSS 4Docker
Fate of Evrima landing page with lobby creation panel over a themed map background

Fate of Evrima

Live companion map for The Isle: Evrima

A free, real-time companion map for the dinosaur survival game The Isle: Evrima. Create a lobby, share its 6-character code, and your whole pack sees each other’s live position pins on an interactive, overlay-rich rendering of the Gateway map — migration zones, sanctuaries, patrol zones, water sources, salt licks, and landmarks included.

Positions can be pasted in manually, or captured automatically by a Windows system-tray companion app that watches the clipboard: click your coordinates in-game and your pin updates for everyone in the lobby, no overlays or game hooks needed.

Under the Hood

  • Frontend: React 18 + Vite + Leaflet SPA with a custom HUD (minimap, telemetry strip, POI cards); map tiles are pre-sliced at build time from the in-game satellite map with Sharp.
  • Backend: Express + Socket.IO stateless in-memory lobby relay — no database at all — with lobby TTLs, player caps, and rate limiting. A shared TypeScript package types every Socket.IO event end-to-end across server, web client, and desktop app.
  • Companion: Electron tray app that polls the clipboard and relays parsed coordinates over the same Socket.IO channel, self-updating from Cloudflare R2.
  • Hosting: Two Docker containers (nginx + Node) behind Cloudflare Tunnel.
React 18LeafletSocket.IOElectronTypeScriptViteDocker
Fated Updates landing page showing a rendered navy and gold go-live card

Fated Updates

Discord go-live alerts for Twitch & Kick

A free Discord notification platform that watches Twitch and Kick streamers and posts a custom-rendered gold-on-navy live card — streamer avatar, stream title, platform badge, IGDB game cover art, custom message, and the role pings you choose — the second they go live.

It also cleans up after streams end (delete the alert, edit it in place, or post an “ended” card with duration and VOD link) and generates scheduled “top clips” leaderboard images daily, weekly, or monthly — per-streamer or ranked game-wide across all broadcasters of a category.

Under the Hood

  • Frontend: Next.js 16 dashboard with Discord OAuth sign-in, per-guild admin verification, and live previews rendered by the exact same card engine that posts to servers.
  • Backend: NestJS 11 API receiving HMAC-verified Twitch EventSub webhooks (Kick via polling or RSA-signed webhooks), queueing jobs over BullMQ to a discord.js worker that renders 1200×630 PNG cards with satori/resvg; Prisma 7 over PostgreSQL with Redis as the queue broker.
  • Hosting: TypeScript monorepo deployed with Docker Compose behind Caddy and Cloudflare Tunnel.
Next.js 16NestJS 11discord.js 14BullMQPrisma 7PostgreSQLRedisDocker
FATE Markdown Viewer app window with drag-and-drop file prompt

FATE — Markdown Viewer

Formatted Article & Text Explorer, free on the Microsoft Store

FATE is a free, open-source (MIT) Markdown viewer for Windows that renders technical documents beautifully — full LaTeX math via KaTeX, syntax-highlighted code blocks, a math-aware table of contents, three themes, live reload when the file changes on disk, and print-to-PDF export. It can register as the system default for .md files so documents open straight from File Explorer.

Its signature feature is a “surgical math auto-repair” engine that detects and heals corrupted LaTeX escapes produced by poorly-escaping Markdown generators before they ever hit the screen.

Under the Hood

  • App: Electron with a React 19 + Vite renderer; rendering pipeline is marked (GFM) → KaTeX → highlight.js → DOMPurify sanitization, with context isolation and a hardened preload bridge.
  • Distribution: NSIS installer with GitHub-Releases auto-updates, plus an AppX package published to the Microsoft Store under VagueDustin Enterprises™.
ElectronReact 19ViteKaTeXhighlight.jselectron-builder
VagueDustin.com homepage with circuit background and glassmorphism cards

VagueDustin.com

This very site

The hub you’re browsing right now — a personal site with live MyAnimeList and Steam integrations that automatically surface what I’m watching and playing, wrapped in a dark glass theme over an interactive circuit-board canvas.

Under the Hood

  • Frontend: Next.js 15 App Router with React 19 and Tailwind CSS 4; the circuit background is a dependency-free canvas that only redraws on pointer movement.
  • Backend: Server-rendered data fetchers with 30-minute ISR against the MyAnimeList and Steam Web APIs, including automatic MAL OAuth token refresh and a resilient multi-CDN fallback chain for Steam game art.
  • Hosting: Multi-stage Docker build (standalone output) self-hosted on the homelab.
Next.js 15React 19Tailwind CSS 4TypeScriptDocker
dustin.network terminal-themed dashboard showing network identity panels

dustin.network

Self-hosted "What is my IP?" with Double-NAT detection

An ad-free, tracker-free IP utility: your public IP, IPv4/IPv6 dual-stack connectivity, location, and ISP at a glance — plus intelligent detection of Double NAT and CGNAT setups that silently break port forwarding and self-hosting. A beginner networking guide and an interactive ports & protocols database round it out.

The clever part: there is no backend at all. nginx alone restores the real visitor IP from Cloudflare Tunnel headers and serves a curl-friendly IP API straight from config (curl dustin.network/ip).

Under the Hood

  • Frontend: Pure static HTML/CSS/JS with no build step — terminal-window chrome, an animated starfield canvas, and a multi-provider fallback chain for geolocation.
  • “Backend”: A hand-written nginx config: Cloudflare real-IP restoration, /ip and /api/ip echo endpoints, strict CSP, and a full security-header suite.
  • Hosting: nginx:alpine in Docker behind Cloudflare Tunnel — no open inbound ports.
nginxVanilla JSCloudflare TunnelDocker
catgirlreligion.com hero with cathedral artwork and site navigation

Catgirl Religion

“Devotion without Irony” — a cathedral of unyielding nekomimi devotion

A deadpan parody religion website that treats devotion to anime catgirls with the full production polish of a real religious institution: Six Core Tenets, a mock-academic Lore & Theology archive, a Saints & Icons canon profiling ~30 catgirl characters, and a Wall of Art gallery.

Visitors can take a once-in-a-lifetime Sacred Vow — written in genuinely committed King James pastiche — that records them permanently on the congregation roll with their country’s flag. Committed to the bit; over-engineered with pride.

Under the Hood

  • Frontend: Next.js 14 App Router + Tailwind with a custom “liquid glass” design system (SVG-distorted backdrop blur) and a black/pink/gold cathedral palette.
  • Backend: Flat-file API routes (no database) handling the vow roll with geolocated country flags; a companion Docker microservice watches an uploads folder and auto-converts gallery art to WebP.
  • Hosting: Docker Compose behind Cloudflare.
Next.js 14TypeScriptTailwind CSSSharpDocker
MeepMoves about page with neon green theming

MeepMoves

Official hub for streamer MeepMoves

A fan-facing site built for streamer MeepMoves. Its signature trick is a Kick/Twitch toggle that swaps the live player, the chat embed, and the entire site’s color theme between Kick green and Twitch purple — remembered across visits with a flash-free, cookie-based pre-render.

Beyond the live viewer: a categorized reference of ~100 chat commands, a complete dual-PC stream gear rundown, support links, and animated page transitions throughout.

Under the Hood

  • Frontend: React 19 + Vite SPA with React Router 7 and Framer Motion 12 page transitions; stream and chat delivered via official Kick/Twitch embeds.
  • Hosting: Multi-stage Docker build — node builds the bundle, nginx:alpine serves it with SPA fallback.
React 19ViteReact Router 7Framer MotionnginxDocker
MAL Webhook dashboard with configuration panel and live logs

MAL Webhook

Private · Homelab Only

MyAnimeList → Discord, automatically

A self-hosted background service that watches my MyAnimeList profile and announces every anime or manga I finish to Discord as a rich embed — cover art, my score, episode counts, studio, and genres — color-coded by rating on a WoW-style rarity scale. A 10/10 posts in Legendary orange.

A glassmorphism dashboard manages everything: config, live logs, post history with one-click re-triggers, and a test button that fires a sample embed. LAN-only by design.

Under the Hood

  • Backend: A single-file Express server with exactly one npm dependency — native fetch polls the MAL v2 API every minute, with flat-file JSON persistence and dedup history.
  • Frontend: Hand-rolled vanilla HTML/CSS/JS dashboard, no framework, no build step.
  • Hosting: A tiny node:alpine Docker container on the homelab.
Node.jsExpressVanilla JSDocker
Gallery of generated weekly release schedule graphics

Sonarr Discord Schedule Generator

Private · Homelab Only

Weekly TV release schedules, rendered as art and posted to Discord

An automation service that turns my Sonarr calendar feed into a polished weekly TV release schedule graphic and posts it to Discord — automatically, every week. Each show is enriched with poster art and community ratings from a five-source metadata waterfall (MyAnimeList, Jikan, TVDB, Trakt, TVMaze), with rating badges color-coded on the same WoW-style rarity scale.

The schedule image itself is a styled webpage screenshotted by headless Chrome, which makes the design trivially easy to iterate. Every generated graphic is archived in a browsable history gallery.

Under the Hood

  • Backend: Node.js + Express with timezone-aware node-cron scheduling; node-ical parses the Sonarr feed and Puppeteer renders the HTML template to a crisp 2x PNG posted via Discord webhook.
  • Frontend: Vanilla JS glassmorphism dashboard for config, manual triggers, and the schedule history gallery.
  • Hosting: Single Docker container built on the official Puppeteer image, self-hosted on the homelab.
Node.jsExpressPuppeteernode-cronnode-icalDocker
Discord Birthday Announcer dashboard with add-birthday form and upcoming list

Discord Birthday Announcer

Private · Homelab Only

Never let the server forget a birthday

A full-stack app that automatically announces birthdays in my Discord server. Add a person (name, date, optional Discord ID) through the web UI, and a timezone-aware daily job posts “Happy Birthday!” at the configured time — with a real @-mention when a Discord user ID is on file.

Everything is managed from the browser: the birthday list, webhook, announcement time, timezone (with a live clock), and per-person test buttons that fire an instant trial message.

Under the Hood

  • Frontend: React 19 + Vite single-page app with add/edit/delete flows and a live timezone clock.
  • Backend: Express 5 REST API over SQLite (two tables, self-initializing schema) with a hot-restarting node-cron job for the daily announcement.
  • Hosting: Multi-stage Docker image (Vite build → production server) on the homelab.
React 19ViteExpress 5SQLitenode-cronDocker