# aex A D&D 5e character sheet and campaign dashboard for a text-based play-by-post game. The UI is in Russian. ## What works today - Campaign header: name, in-game date steppers, session counter - Character sidebar: portrait, names, class, level, XP, hit points with temp HP bar, hit dice, death saves, spell slots - Inventories page (`/inv`): personal and party-common inventories, currency per denomination, item rows with quantity and weight steppers, move between inventories, remove - Bundled 5e.tools item data (~5k items) with fuzzy search components (search is not mounted on a page yet) State is mock data: nothing is persisted, and several buttons and pages are stubs. The phased plan to fix that is in [ROADMAP.md](./ROADMAP.md). ## Tech stack - Rust, edition 2024, nightly toolchain (pinned in `rust-toolchain.toml`) - Leptos 0.8 SSR (actix-web) + client-side hydration - `reactive_stores` for the reactive state model - SCSS (`style/main.scss`), compiled by dart-sass - Playwright for end-to-end tests ## Development Prerequisites: `cargo-leptos`, dart-sass, and the `wasm32-unknown-unknown` target. The nightly toolchain installs itself via `rust-toolchain.toml`. ```sh cargo install cargo-leptos cargo leptos watch # dev server with hot reload # open http://127.0.0.1:3000 ``` Other commands: ```sh cargo leptos build --release # production build cargo leptos serve # dev server without the watcher cargo check --no-default-features --features ssr --bin aex cargo check --no-default-features --features hydrate --lib cargo check --target wasm32-unknown-unknown --no-default-features --features hydrate --lib ``` ## Tests End-to-end smoke tests live in `end2end/` (Playwright). With the dev server running on port 3000: ```sh cd end2end npm install npx playwright test ``` or let cargo-leptos manage the server: `cargo leptos end2end`. ## Project docs - [ARCHITECTURE.md](./ARCHITECTURE.md) — how the code is organized - [ROADMAP.md](./ROADMAP.md) — the phased plan to MVP - [MODERNIZE.md](./MODERNIZE.md) — dependency and idiom cleanup list ## License Public domain (Unlicense), see [LICENSE](./LICENSE).