Sobre el proyecto

phase.rs es un proyecto de fans sin fines comerciales que implementa un motor de reglas y un cliente de juego de Magic: The Gathering. El motor está escrito en Rust y se compila tanto a código nativo como a WebAssembly, impulsando una aplicación de escritorio Tauri, una PWA de navegador y un servidor multijugador basado en WebSocket. El frontend usa React, TypeScript, Tailwind v4, Zustand, Framer Motion y Vite. Capacidades principales descritas en el README: - Motor de reglas que cubre turnos, prioridad, la pila, combate, acciones basadas en estado, capas, disparadores y efectos de reemplazo. - Datos de cartas analizados desde MTGJSON, con soporte de formatos como Commander, Modern, Pioneer, Standard, Legacy, Vintage y Pauper. - Un oponente de IA que usa lógica de decisión por carta, búsqueda en árbol de juego y heurísticas de evaluación. - Interfaz de juego con campo de batalla, mano, pila, superposiciones de objetivo, pago de maná, animaciones y audio ambiental. - Multijugador mediante un servidor WebSocket Axum con información oculta, sistema de salas y peer-to-peer WebRTC a través de PeerJS. - Fuentes de metajuego extraídas de MTGGoldfish y actualizadas diariamente. - Un constructor de mazos con búsqueda de cartas, construcción visual e importación .dck/.dec. - Objetivos multiplataforma: escritorio Tauri (Windows, macOS, Linux), PWA de navegador, tableta y APKs de Android. - Imágenes de cartas de Scryfall con caché IndexedDB. El espacio de trabajo Rust está dividido en crates: engine (tipos, lógica de juego, analizador, base de datos de cartas), phase-ai (evaluación, acciones legales, búsqueda), engine-wasm (enlaces wasm-bindgen + tsify), server-core (gestión de sesiones), phase-server (servidor WebSocket Axum) y feed-scraper (rastreador de metajuego independiente). El frontend usa una interfaz EngineAdapter independiente del transporte con implementaciones WASM, Tauri IPC, WebSocket y WebRTC host/guest. Los principios de diseño incluyen reductores puros, uniones discriminadas serializadas mediante serde y tsify, y estado inmutable con compartición estructural mediante rpds. La configuración requiere un kit de herramientas Rust, el objetivo wasm32, wasm-bindgen-cli, wasm-opt opcional, Node.js 22+ y pnpm. Un script de configuración obtiene datos, compila WASM e instala dependencias. Un servidor multijugador dedicado está disponible como imagen Docker que expone endpoints de salud y WebSocket, con variables de entorno para puerto, directorio de datos, origen CORS, modo solo sala, registro JSON, directorio de registro y token de administrador bearer. Se proporciona un gráfico Helm para Kubernetes. El audio de escritorio Linux depende de los plugins GStreamer; se discuten los empaquetados AppImage, .deb y Flatpak, con el Flatpak destinado a cubrir brechas de distribución y el comportamiento de CPU inactiva de NVIDIA. Las compilaciones de Android requieren SDK, NDK y objetivos Rust específicos, y los APKs de lanzamiento se firman con secretos configurados. El proyecto tiene doble licencia bajo MIT o Apache 2.0. Declara que no incluye activos de Wizards, obteniendo imágenes de cartas y símbolos de maná de Scryfall en tiempo de ejecución, y no está afiliado con Wizards of the Coast. El README también describe un flujo de trabajo para contribuir con implementaciones de cartas entregando un prompt a un agente LLM.