# 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, and Save / Load / Clear: download `dashboard.json`, import a file back, wipe to a blank campaign - Undo/redo: header buttons and Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y over edit bursts; Clear and import are undoable too - Character page: player card, prepared spells (free-text slots with level/description) and attunements (3 slots, clearable) - 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 autosaves to localStorage (debounced) and survives reloads; export/ import round-trips through a JSON file. The phased plan 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 tests live in `end2end/` (Playwright): a smoke spec and a persistence spec (reload keeps state; export/import round trip). With the dev server running: ```sh cd end2end npm install npx playwright test --project=chromium ``` 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).