ExclusionZone is a text-based post-nuclear multiplayer RPG prototype built with Laravel 13, Livewire 4, Flux UI, Tailwind CSS, and Alpine.js. The MVP focuses on a playable city-driven survival loop: travel, perform city actions, gain skill XP, collect loot, and progress your survivor.
This repository implements the MVP described in:
docs/spec.mddocs/implementation-steps.mddocs/testPlan.md
Current MVP highlights:
- Role/task access model (
admin,moderator,premium,user,guest) - Seeded world with 6 countries and 12 cities
- City-specific action menus driven by player location
- Skill progression + inventory rewards from city actions
- Premium cosmetics that are cosmetic-only (no gameplay advantage)
- Moderator mute flow and admin role-change flow with audit logging
- PHP 8.3+
- Composer 2+
- Node.js 20+ and npm
- SQLite (default local setup)
- Clone the repository.
- Install dependencies and bootstrap the app:
composer setupcomposer setup runs:
composer install.envcreation from.env.example(if missing)php artisan key:generatephp artisan migrate --forcenpm installnpm run build
If you prefer manual setup:
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate
npm install
npm run buildcomposer run devThis starts Laravel, queue worker, and Vite concurrently.
- Open the home page and register/login.
- Enter the City Menu dashboard.
- Travel between connected cities.
- Perform city actions to gain XP and loot.
- Equip premium cosmetics (premium users) without stat/resource bonuses.
- Use moderation/admin tools when authenticated with appropriate roles.
Run lint + test suite:
composer testRun formatting checks only:
composer lint:checkBuild frontend assets:
npm run buildPlease report bugs and feature requests using GitHub Issues:
When reporting, include:
- Steps to reproduce
- Expected vs actual behavior
- Environment details (PHP/Node versions, OS)
- Relevant logs or screenshots
Project planning and implementation documents:
docs/spec.mddocs/implementation-steps.mddocs/testPlan.md
MIT (as declared in composer.json).