← Back to Projects

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 with npm run demo.