Foxpile

Platform

Architecture

Foxpile is composed of three cooperating applications.

Companion

A Windows tray application watches Foxhole save files. It uploads only supported changed files, signs every request, links the local user to Discord, reports its installed version, and handles application updates.

API

The NestJS API validates uploads, parses save data, enriches map and faction information, stores relational MariaDB data, serves OAuth resources, records quantity history, and publishes filtered SSE events.

Discord bot

The bot consumes the trusted SSE stream, applies guild access and route filters, buffers each event type for 25 seconds, then sends grouped notifications with PinMaps and paginated details.

Data flow

Foxhole save
  -> Companion hash + HMAC upload
  -> API validation and parsing
  -> transactional MariaDB merge + history
  -> committed SSE event
  -> Discord buffer, filters, PinMaps and notification

Read and write ordering

Stockpile updates are serialized per map and aggregate updates execute in InnoDB transactions. The current state and its history entries commit together, so readers only observe complete updates.