Unseen Servant
Ongoing Development
Vue.jsSpring BootMySQLOAuth2 & JWTDockerTTRPG / 5e
About the Project
Unseen Servant is a full-stack campaign tracking and character management application for tabletop RPG groups playing Dungeons & Dragons 5e. Originally built as my graduation thesis project at IT-Högskolan, it is still actively maintained as a hobby project — a Vue frontend on a modular Spring Boot REST API backed by MySQL, self-hosted on a local mini-PC and exposed through a Cloudflare Tunnel.
Key Features
Campaign Management
- Role-based controls for gamemaster and player
- Campaign roster and status tracking
- Import characters into an active campaign
Character Builder & Tracking
- D&D 5e character creation and live sheet updates
- Portrait uploads for custom characters
- Offline guest mode backed by LocalStorage
Architecture & Hosting
Frontend
- Vue with the Composition API
- Pinia for centralised client state
- Tailwind CSS and Vite
- Axios interceptors for JWT handling
Backend
- Spring Boot REST controllers
- Spring Data JPA on MySQL
- Spring Security with OAuth2 and JWT
- Multipart file service for portraits
Deployment
- Docker Compose on a home Ubuntu mini-PC
- Ingress through a Cloudflare Tunnel
- GitHub release → Actions → Docker Hub
Live Access: Production access at unseenservant.se is restricted by an OAuth2 whitelist. For local evaluation without OAuth2 credentials there are two demo paths:
- Guest demo (frontend only): runs entirely in the browser on LocalStorage with seeded mock data.
- Full-stack demo: start the backend with
--spring.profiles.active=demo(in-memory H2 with test accounts) and the frontend withnpm run demo.