Files
owlibou-ttrpg/ROADMAP.md
vikingowl 9aba65dcfc docs: add project roadmap
- Define 6 implementation phases
  - Detail Phase 1 (foundation) and Phase 2 (session notes MVP)
  - Include data model for Phase 2
  - Add milestone tracker

  🤖 Generated with Claude Code
2025-12-16 15:37:21 +01:00

8.5 KiB

Owlibou TTRPG — Roadmap

Collaborative TTRPG platform with session notes, campaign management, and character tools.

Vision

A unified platform for tabletop RPG players and game masters to:

  • Collaborate in real-time during sessions
  • Manage campaign data (characters, NPCs, locations, quests)
  • Create characters with guided workflows
  • Share files and information with granular access control

Architecture

owlibou-ttrpg/
├── api/          # Rust backend (axum + PostgreSQL + MinIO)
└── suite/        # SvelteKit frontend (Tailwind CSS)

Tech Stack

Layer Technology
Backend Rust + axum + tokio
Database PostgreSQL (encrypted at-rest)
Real-time WebSockets
Auth JWT + Argon2 + OAuth2
File Storage MinIO (S3-compatible)
Frontend SvelteKit + Tailwind CSS

Phase 1: Foundation

Goal: Core infrastructure and authentication

API Tasks

  • Database connection pool setup
  • SQLx migrations infrastructure
  • Initial schema (users, campaigns, sessions, notes, files)
  • At-rest encryption with pgcrypto
  • JWT generation and validation
  • Password hashing with Argon2
  • Auth endpoints
    • POST /auth/register
    • POST /auth/login
    • POST /auth/magic-link
    • POST /auth/verify-magic-link
    • POST /auth/refresh
    • POST /auth/logout
  • OAuth2 integration (optional for Phase 1)
    • Google
    • GitHub
    • Discord
  • Error handling middleware
  • Request logging/tracing

Frontend Tasks

  • Auth pages
    • Login page
    • Register page
    • Magic link verification page
  • Auth state management
  • Protected route handling
  • API client with auth headers
  • Basic UI components (Button, Input, Card, Modal)
  • Toast/notification system

Infrastructure

  • Docker Compose for local dev (PostgreSQL, MinIO)
  • Environment configuration
  • CI pipeline (GitHub Actions / Gitea Actions)

Phase 2: Session Notes MVP

Goal: Core session notes functionality — the primary use case

API Tasks

  • Campaign endpoints
    • GET/POST /campaigns
    • GET/PUT/DELETE /campaigns/:id
    • GET /campaigns/:id/members
  • Player invite system
    • POST /campaigns/:id/invite (generate invite token)
    • POST /invites/:token/accept
    • Email sending (optional, can use link-only first)
  • Session endpoints
    • GET/POST /campaigns/:id/sessions
    • GET/PUT/DELETE /sessions/:id
  • Note endpoints
    • GET/POST /sessions/:id/notes
    • GET/PUT/DELETE /notes/:id
    • PUT /notes/:id/visibility
  • Access control
    • Note visibility (private, shared, public)
    • GM can see all player notes
    • Players can only see their own + shared
  • File storage
    • POST /campaigns/:id/files (multipart upload)
    • GET /files/:id
    • GET /files/:id/download
    • DELETE /files/:id
    • Presigned URL generation
  • WebSocket server
    • Connection with JWT auth
    • Session room subscriptions
    • Broadcast: note created/updated/deleted
    • Broadcast: file shared
    • Broadcast: player joined/left

Frontend Tasks

  • Campaign management
    • Campaign list page
    • Create campaign form
    • Campaign settings page
  • Player invites
    • Invite modal (generate link)
    • Accept invite page
    • Member list view
  • Session management
    • Session list within campaign
    • Create session form
    • Session detail page
  • Note editor
    • Rich text editor (Tiptap or similar)
    • Note visibility selector
    • Real-time sync indicator
  • File sharing
    • File upload UI (drag & drop)
    • File list view
    • File preview (images, PDFs)
    • Download button
  • Real-time updates
    • WebSocket connection management
    • Live note updates
    • Player presence indicators
  • GM dashboard
    • Overview of all notes
    • Quick share controls
    • Player activity view

Data Model

-- Core tables for Phase 2
users (id, email, password_hash, display_name, avatar_url, email_verified, created_at, updated_at)
campaigns (id, owner_id, name, description, ruleset, created_at, updated_at)
campaign_members (campaign_id, user_id, role, joined_at)
sessions (id, campaign_id, name, description, session_date, created_at, updated_at)
notes (id, session_id, author_id, title, content, visibility, created_at, updated_at)
note_shares (note_id, user_id)  -- for selective sharing
files (id, campaign_id, uploader_id, filename, mime_type, size_bytes, storage_key, created_at)
file_shares (file_id, user_id)
invites (id, campaign_id, token, email, expires_at, used_at)

Phase 3: Campaign Management

Goal: Full campaign data hub functionality

Features

  • Character management
    • Character CRUD
    • Link characters to campaigns
    • Character sheet viewer
  • NPC management
    • NPC CRUD
    • NPC visibility controls
  • Location management
    • Location CRUD
    • Hierarchical locations (region → city → building)
  • Item/equipment catalog
  • Quest/objective tracking
  • Tagging system
    • Tag entities for organization
    • Filter by tags
  • Relationship mapping
    • Link characters to locations, quests, etc.
  • Search functionality
    • Full-text search across entities
  • Import/export
    • JSON export
    • CSV export
    • Bulk import with validation

Phase 4: Character Builder

Goal: Guided character creation with rule validation

Features

  • Ruleset plugin system
    • DSA (Das Schwarze Auge)
    • D&D 5e
    • Generic/freeform
  • Step-by-step wizard
    • Race/species selection
    • Class/profession selection
    • Attribute allocation
    • Skills and abilities
    • Equipment selection
    • Background/history
  • Rule validation
    • Point cost tracking
    • Prerequisite checking
    • Legal build verification
  • Character sheet generation
    • PDF export
    • JSON export
    • Print-friendly view
  • Save to campaign
    • Link created characters to campaigns

Phase 5: TaleSpire Integration

Goal: Bridge between Owlibou and TaleSpire VTT

Features

  • Character sheet companion view
    • Display character stats alongside TaleSpire
    • Quick reference for abilities/spells
  • Stat sync (if Symbiotes API allows)
    • Link character to TaleSpire creature
    • Sync HP, conditions, etc.
  • Overlay mode
    • OBS-friendly overlay
    • Streaming integration
  • Import from TaleSpire
    • Import creature stats

Phase 6: Polish & Production

Goal: Production-ready deployment

Features

  • Self-hosting support
    • Docker image publication
    • Helm chart (optional)
    • Documentation for self-hosting
  • Performance optimization
    • Database query optimization
    • Frontend bundle optimization
    • CDN for static assets
  • Security audit
    • Penetration testing
    • Dependency audit
  • Backup & recovery
    • Automated backups
    • Point-in-time recovery
  • Monitoring & logging
    • Application metrics
    • Error tracking
    • Uptime monitoring

Future Ideas

Features to consider after core platform is stable:

  • Dice roller — Built-in dice rolling with shared results
  • Initiative tracker — Combat turn order management
  • Session scheduling — Calendar integration for planning sessions
  • Voice/video links — Quick links to Discord/Jitsi/etc.
  • Mobile app — React Native or Capacitor wrapper
  • Offline mode — PWA with local storage sync
  • AI integration — NPC dialogue generation, session summaries
  • Marketplace — Share/sell custom rulesets, character templates

Milestones

Milestone Target Description
M1: Hello World API serves health endpoint, frontend loads
M2: Auth Complete Users can register, login, logout
M3: Session Notes Alpha Core notes functionality working
M4: Session Notes Beta Real-time sync, file sharing, invites
M5: Public Beta Deployed, accepting early users
M6: Campaign Hub Full campaign management
M7: Character Builder First ruleset (DSA) complete
M8: v1.0 Production-ready, self-hostable

Contributing

This project is developed by s0wlz x vikingowl.

See LICENSE for licensing information (AGPLv3).