// CASE STUDY // Mobile App // 2026

Elminster

A mobile-first companion for tabletop campaigns

Elminster keeps a long tabletop campaign together on the phone: scenes, chronicle, maps and equipment in one installable Next.js PWA with server-checked turns. A ZERN case study.

PWANext.jsPrivacy
LinksStory, cast, choices
Designed forMobile first
Built asPWA
SCREEN_01 // elminster
// THE CAMPAIGN

Story, characters and decisions in one place

Over a long tabletop campaign, it is easy to lose track of the story, a character change or whose decision comes next. Elminster brings these together in an installable, mobile-first companion: scenes, chronicle, maps and equipment belong to the same campaign. A session plays out in turns: the narrator opens a scene, each player reads it on their phone and submits an intention for their character; once the turn is in, the narrator resolves it and publishes the outcome, which becomes shared chronicle before the next scene opens.

// GAME STATE

An intention is not yet an event

The interface carries a fantasy atmosphere; the underlying behavior stays precise. A submitted player intention is not the same as an event that has happened in the story. The server checks identity, scene and turn eligibility, while narrator processing and its published result have distinct states.

// RELIABILITY

Drafts kept, duplicates prevented

Local drafts preserve unfinished replies, and repeated-submission handling prevents duplicate actions. Campaign access requires authentication. This case study presents the product architecture, not the players' private story.

// BUILD

Technology Stack

  • Next.js 16
  • React 19
  • TypeScript
  • SQLite
  • Better Auth
  • Three.js
  • PWA
// NEXT STEP

Planning a website or app?

Tell us what you want to build and where you are stuck. We will reply with a clear next step.