An interactive pet training game built with Quasar/Capacitor and Rust/Bevy WASM - the modern successor to puppyplay-godot-droid.
App4.Dog Game is designed for real pets (especially dogs) to play on tablets and smartphones. The game features anthropomorphic critters that pets interact with through touch, teaching vocabulary, obedience, and providing entertainment.
- Pet = Real dog/animal player ๐ถ
- Critter = Anthropomorphic game character (bird, bunny, etc.) ๐ฆ๐ฐ
- Interaction = Pet taps, swipes, or holds screen to play with critters
- Quasar CLI - Vue 3 + TypeScript + Vite
- Capacitor - Mobile app deployment (Android/iOS)
- Material Design 3 - UI components
- Rust - Core game logic with Bevy ECS
- WebAssembly (WASM) - Browser/mobile execution
- Bevy Engine - Entity Component System for game objects
- Android - Native APK via Capacitor
- iOS - Native app via Capacitor (future)
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Install Node.js/pnpm
npm install -g pnpm
# Install Quasar CLI
pnpm install -g @quasar/cli# Clone and setup
git clone https://github.com/app4dog/app4dog-game.git
cd app4dog-game
# Install dependencies
pnpm install
# Add Rust WASM target
rustup target add wasm32-unknown-unknown
# Install wasm-pack for WASM builds
cargo install wasm-pack
# Build game engine to WASM
./scripts/build-wasm.sh
# Start development server
pnpm run devVisit http://localhost:9000 to see the game!
The game uses a two-part build system:
- Rust โ WASM:
./scripts/build-wasm.shcompiles the Bevy game engine to WebAssembly - Quasar Build: Standard Vue.js/Quasar build process with WASM integration
# Manual WASM build (done automatically by script)
cd game-engine
wasm-pack build --target web --out-dir pkg --dev
cd ..
# Files are copied to public/game-engine/ for Quasar access
# TypeScript bindings generated in src/types/game-engine.d.ts# Build and run on Android device/emulator
just dev-android
# Or step by step:
just build-wasm
pnpm run build
npx cap sync android
npx cap open android# Build and run on iOS device/simulator
just dev-ios- Chirpy (Bird) - Flies around, responds to taps
- Bouncy (Bunny) - Hops and follows swipe gestures
- Buddy (Dog) - High obedience, great for training
- Whiskers (Cat) - Independent, challenging gameplay
- Tap - Pet paws/nose tap triggers critter responses
- Swipe - Directional movement commands
- Hold - Keeps critters in place
- Basic Commands - Sit, stay, come
- Object Recognition - Toys, food, household items
- People Recognition - Family members, visitors
- Emotion Training - Happy, sad, excited responses
# Core development
just dev # Start Quasar dev server
just build # Build for production
just build-wasm # Compile Rust to WASM
# Mobile development
just dev-android # Android development
just dev-ios # iOS development (future)
# Code quality
just lint # ESLint
just format # Prettier
just test # Run tests
# Deployment
just commit # Stage and commit
just push # Push to GitHub
# Maintenance
just clean # Clean build files
just info # Project informationapp4dog-game/
โโโ src/ # Vue/Quasar frontend
โ โโโ components/ # Game components
โ โ โโโ GameCanvas.vue # Main game canvas
โ โ โโโ CritterSelection.vue
โ โ โโโ GameSettings.vue
โ โโโ pages/
โ โ โโโ GamePage.vue # Game page (/game)
โ โโโ types/ # TypeScript definitions
โโโ game-engine/ # Rust/Bevy game logic
โ โโโ src/
โ โ โโโ lib.rs # WASM entry point
โ โ โโโ game.rs # Game plugin & state
โ โ โโโ components.rs # ECS components
โ โ โโโ systems.rs # Game systems
โ โ โโโ resources.rs # Game resources
โ โโโ Cargo.toml # Rust dependencies
โโโ public/assets/ # Game assets
โ โโโ sprites/ # Critter animations
โ โโโ audio/ # Sound effects
โ โโโ fonts/ # Custom fonts
โโโ scripts/ # Build scripts
โโโ justfile # Development commands
Asset structure ready for critter animations and audio:
public/assets/sprites/- Critter sprite sheets and animationspublic/assets/audio/positive/- Positive feedback soundspublic/assets/fonts/- Custom fonts for game UI
Note: Actual asset files should be added to these directories
- ECS Architecture - Entities, Components, Systems
- WASM Compilation - Via wasm-pack for web deployment
- JavaScript Bridge - Bidirectional communication with Vue
- Asset Loading - Sprites, audio, fonts from public directory
- GameCanvas.vue - Main game container with touch handling
- Touch Events - Converted to game interactions
- State Management - Reactive game state with Vue refs
- Mobile Optimization - Touch-first interface design
- Native APIs - Device vibration, screen wake lock
- Performance - Hardware-accelerated rendering
- Distribution - Google Play Store, Apple App Store
- โ Easier Testing - Web-first development, no Android emulator required
- โ Better Architecture - Clean separation of concerns
- โ Type Safety - Full TypeScript + Rust type safety
- โ Modern Stack - Latest Vue 3, Bevy, and mobile tooling
- โ Debuggability - Better error handling and logging
- Reduced Complexity - Simpler build process
- Faster Iteration - Hot reload in browser
- Better Testing - Unit tests for both Rust and Vue code
- Mobile-First - Designed specifically for tablets
- Project setup and architecture
- Quasar + Vue 3 + TypeScript frontend
- Rust/Bevy game engine with ECS
- WASM compilation and integration
- Touch interaction handling
- Basic game state management
- Build system and scripts
- Asset loading and rendering
- Critter animations and sprites
- Sound system integration
- Score and progression system
- Game canvas rendering
- Vocabulary recognition
- Custom pet profiles
- Training progress tracking
- Achievement system
- Android build optimization
- iOS support
- App store deployment
- Performance optimization
- Live domain
https://gameplay.app4.dogserves the static build stored in the Cloudflare R2 bucketgameplay-live, while the preview channelhttps://next.gameplay.app4.dogmaps to thegameplay-nextbucket (seewrangler.tomlfor bucket bindings). .github/workflows/ci-cd.ymlbuilds the WASM engine + Quasar app on every push, uploads thedist/artifact, and then thedeploy-cloudflarejob pushesdist/spato the correct R2 bucket usingryand56/r2-upload-action@latest.- The sites are plain static assets (HTML/JS/WASM) hosted directly from R2 and fronted by Cloudflare, so deployment is a file sync rather than a server restart.
- For manual deploys or hotfixes you can run
./scripts/r2-sync.sh gameplay-live dist/spa(orgameplay-next) which usesrclone/wranglerto mirror the build output into the corresponding bucket with appropriate content types.
App4.Dog Proprietary License โ see LICENSE for details.
- puppyplay-godot-droid - Original proof of concept
- Bevy Engine - Rust game engine
- Quasar Framework - Vue.js framework
- App4.Dog Ecosystem - Backend infrastructure
Built with โค๏ธ for pets and their humans