Gila Monster
Gila Monster is my character and monster management service for tabletop RPG content β a home for the player characters, NPCs, and monsters that show up across the campaigns I run, instead of scattering stat blocks across notebooks and chat logs.
Every entity shares a simple PokΓ©mon-inspired six-stat block plus a free-form type, size, and alignment, so it works across genres without forcing a rules system on me. Characters carry named actions and can have multiple images β hand-picked uploads or AI-generated art requested through Harpy Eagle and wired back over Kafka when generation finishes. It’s a small Go service: a ConnectRPC API over PostgreSQL, an optional MinIO upload path, and a CLI. Not a full VTT β the data layer I wanted underneath one.
Gila Monster is my character and monster management service for tabletop RPG content β a home for the player characters, NPCs, and monsters that show up across the campaigns and one-shots I run. I wanted a single structured place to keep stat blocks, descriptions, and artwork instead of scattering them across notebooks, spreadsheets, and chat logs.
Every entity β human, orc, dragon, alien, robot, whatever a scene calls for β shares the same simple, Pokemon-inspired six-stat block (HP, Attack, Defense, Special Attack, Special Defense, Speed) plus a free-form type, size, and alignment, so it works across genres without forcing a rules system on me. Characters can carry a list of named actions/abilities, and each one can have multiple images attached β hand-picked uploads or AI-generated art requested through a companion service, Harpy Eagle, with the result asynchronously wired back in over Kafka once generation finishes.
It’s built as a small Go service: a ConnectRPC/gRPC API backed by PostgreSQL, an optional MinIO-backed upload path for images, and a CLI for scripting CRUD without touching a UI. Nothing here is trying to be a full VTT β it’s the data layer I wanted underneath one, so the characters I create stay structured, queryable, and mine.