Mobile-first Magic: The Gathering deck builder with swipe-based navigation.
Status: live on the iOS App Store and Google Play; web client at zwipe.net.
Full-stack Rust:
- zwipe-core: shared domain types, validation, business rules, HTTP contracts; the single source of truth
- zwipe-components: shared Dioxus UI components and CSS (themes, changelog, card details) consumed by the app, the site, and the owner's portfolio
- zerver: Axum REST API, PostgreSQL, SQLx, JWT auth, Scryfall sync
- zwiper: Dioxus iOS and Android app, swipe gestures, 31 themes, dark mode
- zite: Dioxus web client at zwipe.net
- zervice: background jobs (Scryfall sync, session cleanup)
zwiper ──→ zwipe-core ←── zerver
│ ↑ (zervice binary)
└──→ zwipe-components ←── zite ──→ zwipe-core
# 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/fedora/setup.sh # linux setup
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 key decisions and context/README.md
for the full documentation tree.
CC BY-NC 4.0. See LICENSE.