Monorepo para una suite de herramientas de gestión de partidas de Dungeons & Dragons. El sistema está compuesto por una app de escritorio para el Dungeon Master y una app móvil para los jugadores, comunicadas en tiempo real mediante WebSockets.
dnd_the_game_tracker/
│
├── Cargo.toml ← Workspace raíz de Rust
│
├── dnd-desktop/ ← App de escritorio para el DM (Rust + Dioxus)
│ ├── src/
│ │ ├── main.rs
│ │ ├── backend/ ← Servidor Axum embebido + WebSocket
│ │ ├── states/ ← Estado global de la app
│ │ └── ui/
│ │ ├── components/
│ │ ├── layouts/
│ │ └── screens/ ← main_menu, new_campain, load_campain, lore, options
│ ├── assets/ ← Tailwind CSS
│ └── Dioxus.toml
│
├── dnd-movile/ ← App Android para jugadores (Kotlin + Jetpack Compose)
│ └── app/src/main/
│ ├── AndroidManifest.xml
│ └── java/io/github/gasparkral/dnd_movile/
│ ├── MainActivity.kt
│ └── ui/theme/
│
└── shared/ ← Crate Rust con tipos compartidos (DTOs, modelos)
└── src/
├── models/ ← Character, Attributes, Dice, Damage, Inventory, Items...
└── traits/
| Capa | Tecnología |
|---|---|
| App desktop | Rust + Dioxus (modo desktop) |
| Servidor embebido | Axum (corre dentro del proceso desktop) |
| WebSockets | Axum WS + futures-util |
| App móvil | Kotlin + Jetpack Compose (Android) |
| Tipos compartidos | Crate shared (Rust) con serde |
| Estilos | Tailwind CSS |
| Lore / vault | Integración con Obsidian (Markdown + frontmatter via gray_matter + pulldown-cmark) |
El DM ejecuta la app de escritorio, que levanta internamente un servidor Axum con WebSockets. Los jugadores se conectan desde sus dispositivos Android a ese servidor a través de la red local (o un túnel Cloudflare para juego remoto). El crate shared define los modelos y DTOs que ambos extremos usan, garantizando consistencia de tipos.
┌─────────────────────────────────┐
│ dnd-desktop (DM) │
│ ┌─────────────┐ ┌──────────┐ │
│ │ Dioxus UI │ │ Axum + │ │
│ │ (pantallas)│ │ WS API │ │
│ └─────────────┘ └────┬─────┘ │
└───────────────────────┼─────────┘
│ WebSocket / HTTP
┌──────────┴──────────┐
│ │
┌───────┴──────┐ ┌────────┴─────┐
│ dnd-movile │ │ dnd-movile │
│ (jugador 1) │ │ (jugador 2) │
└──────────────┘ └──────────────┘
- Rust (stable)
- Dioxus CLI:
cargo install dioxus-cli - Bun (para Tailwind)
- Android Studio (para la app móvil)
cd dnd-desktop
# Instalar dependencias de Tailwind
bun install
# Modo desarrollo
dx serve --platform desktop
# Build de producción
dx build --platform desktop --releaseAbrir la carpeta dnd-movile/ con Android Studio y ejecutar en un dispositivo o emulador.
Si los jugadores no están en la misma red local:
cloudflared tunnel --url http://localhost:<puerto>Contiene todos los tipos de dominio usados tanto por el backend como por la UI:
models/character.rs— structCharactery campos de personajemodels/attributes.rs— atributos D&D (STR, DEX, CON, INT, WIS, CHA)models/dice.rs— tipos de dados y tiradasmodels/damage.rs— tipos y cálculo de dañomodels/inventory.rs— inventario del personajemodels/items/— definición de objetosmodels/builders/— builders para construcción de entidadesmodels/defaults/— valores por defecto de las entidades
MIT — Gaspar Gómez Kral