Slash Out is a 2D action game focused on dynamic combat, inspired by Samurai Gunn, developed with Phaser 3 and a robust architecture based on ECS (Entity Component System).
- Engine: Phaser 3 + Matter.js
- Language: TypeScript (Strict Mode)
- Tooling: Vite
- Infrastructure: Monorepo (NPM Workspaces)
- Automation: GitHub Actions, Aider (LLM-assisted development)
The project is organized as a monorepo to isolate game logic from automation infrastructure:
slash-out/
├── packages/
│ ├── client/ # Game logic, ECS, rendering, and assets
│ └── scripts/ # Utilities, Git Hooks, and AI pipelines
├── docs/ # Technical documentation, prompts, and templates
└── README.md
- Node.js:
>=22.13.0 <23 - NPM:
>=10
Clone the repository and install the dependencies.
The git-hooks will be installed automatically for commit validation.
npm installTo start the game client, run:
npm run dev --workspace @slash-out/clientThe project uses Aider to keep technical documentation synchronized with the implementation.
- Install Aider: Follow the official documentation.
- API Key: Configure your API key according to the documentation.
- Using OpenRouter is recommended for model access.
Create a .env file at the root and configure the variables:
OPENROUTER_API_KEY=your_key_here
AIDER_MODEL=openrouter/deepseek/deepseek-chat
AIDER_AUTO_COMMITS=falseCommit the changes made during your task.
To synchronize the documentation, run:
npm run docs:updateNotes:
- This command analyzes the source code and automatically applies the template to the files in
/docs. - It is necessary to commit the changes made so that Aider receives the files to document.
- In cases where many files are modified or included simultaneously, Aider may not be able to document all of them. In such cases, it is recommended to document in stages.
- If you wish to document only files with specific types, you can include the desired types in the
onlyIncludeTypesvariable in the update-docs index file. The allowed types are mapped in theFileTypetype in update-docs types file.
| Command | Description |
|---|---|
npm run lint |
Validates code quality across the entire monorepo |
npm run lint:fix |
Automatically fixes formatting errors |
npm run docs:update |
Synchronizes technical documentation via Aider |
npm run dev --workspace @slash-out/clientnpm run build --workspace @slash-out/clientnpm run lint --workspace @slash-out/clientnpm run lint:fix --workspace @slash-out/client
npm run setup:hooks --workspace @slash-out/scriptsnpm run docs:update --workspace @slash-out/scripts
Use descriptive branches or branch names linked to task IDs:
- Tasks:
feat/007,fix/056,doc/098 - Ad-hoc:
feat/player-dash,fix/input-priority,doc/update-readme
The project uses a git-hook to validate and format commits. Write the commit message in the following format:
<type>: <description>
- Rules:
- All lowercase
- No trailing period
- No emojis or manual prefixes (the hook will add formatting automatically)
- Use types approved by git-hooks
All automated contributions must strictly follow the guidelines in docs/agents.md.