Mobile-first Magic: The Gathering deck builder with swipe-based navigation.
Status: live on the iOS App Store and Google Play. Deck building is in the app; zwipe.net is the site.
Full-stack Rust:
zwipe-core: shared domain types, validation, business rules, HTTP contracts; the single source of truthcomponents: the Magic UI (card rows and details, oracle text, the changelog, the deck charts) over orangui, the generic Dioxus kit it re-exports; shared by the app and the sitezwipe-client: typed API client over the shared contracts, one call function for every endpoint; used by both the app and the sitezerver: Axum REST API, PostgreSQL, SQLx, JWT auth, Scryfall synczwiper: Dioxus iOS and Android app, swipe gestures, 50 themes, dark modezite: Dioxus site at zwipe.net (guides, changelog, shared deck pages, email verification and password reset)zervice: background jobs (Scryfall sync, session cleanup)
zwiper, zite ──→ zwipe-client ──→ zwipe-core ←── zerver
zwiper, zite ──→ components ────→ zwipe-core (zervice binary)
# prerequisites: rust (https://rustup.rs), macos: xcode-select --install
./zcripts/dev-env/macos/setup.sh # macos setup (postgres, dx, sqlx-cli, database)
./zcripts/dev-env/omarchy/setup.sh # linux setup (arch)
cargo run --bin zerver # backend api
cd zwiper && dx serve # mobile app (web preview)
cargo run --bin zervice # scryfall card sync (run once to seed)Hexagonal architecture with domain-driven design. zwipe-core owns all shared domain types; zerver re-exports them and adds server-specific layers (database adapters, HTTP handlers, service orchestration). See context/architecture/decisions.md for the decisions and why they went that way, and context/README.md for the full documentation tree.
CC BY-NC 4.0. See LICENSE.