中文

Secure workflow product · Multi-user platform

Echo Archive

A private TRPG operations platform for player communication, character state, GM adjudication, and protected content.

View public portal
Echo Archive product interface
3 daysconcept to production
6–8players supported per campaign
Server-sideauthorization boundary
Product walkthrough
Echo Archive: Player state and active build
Player state and active buildSix-direction capability profile, enabled abilities, equipment, inventory, status, and change history.
Echo Archive: GM adjudication workspace
GM adjudication workspacePending actions, relevant world facts, player-visible knowledge, lock state, result drafting, and audience checks.
Situation

The problem behind the product

A long-running TRPG campaign needed private player records, permissioned chat, GM publishing, adjudication, attachments, and synchronized game state. Chat history and manual spreadsheets could not safely manage the growing number of roles, channels, and hidden facts.

Task

What success required

Create one operational system for players and the GM without leaking private information across parallel storylines, while keeping production setup and ongoing content management practical.

Action

How I built it

01

Modeled the campaign as durable product data

Designed records for players, channels, messages, characters, content, attachments, pending actions, resources, and change history instead of treating the experience as a collection of pages.

02

Built both sides of the workflow

Delivered player chat and action submission alongside GM publishing, adjudication, roster management, player-view previews, permission audits, and protected asset handling.

03

Established a production lifecycle

Added migrations, environment initialization, backups, deployment procedures, and health checks so the system could evolve without losing campaign state.

Decisions

Trade-offs and judgment

Enforce permissions before data leaves the server

Private records are filtered by player, channel, and audience on the server. Unauthorized content is never sent to the browser and merely hidden with CSS.

Use capability-specific storage

D1 holds relational campaign state, while R2 stores protected images and files. This avoided forcing binary assets and transactional records into one storage model.

Separate public proof from private operations

The public portal can explain the experience, but player and GM tools remain behind private access. The portfolio case study therefore demonstrates the system without pretending a visitor can enter a live campaign.

Result

What changed

The platform moved from concept to production in roughly three days with persistent campaign state, multi-role workflows, protected files, auditable changes, and server-enforced authorization. It replaced fragmented chat-and-sheet operations with one controlled system.

Tools & platforms

TypeScriptReact / Next.jsCloudflare WorkersD1 / SQLiteR2Drizzle ORMREST APIsDatabase migrationsRole-based access control