phaser-best-practices
Builds and refactors Phaser 3 browser games. Use for creating a new Phaser project, adding scenes, entities, physics, UI, tilemaps, animations, input, audio, camera, or for fixing Phaser-specific bugs and performance problems.
What this skill does
# Building Phaser Games ## When to use this skill Use this skill when the user wants to: - create a new Phaser 3 game or prototype - add or refactor scenes, entities, UI, physics, tilemaps, input, audio, or cameras - debug Phaser-specific behavior such as scene restarts, blurry pixel art, collider bugs, asset loading problems, or animation issues - improve architecture, maintainability, or runtime performance in a Phaser project Do not use this skill for non-Phaser engines unless the user explicitly wants Phaser-style patterns adapted elsewhere. ## How to operate ### 1. Triage the request Classify the task before writing code: - **New project**: scaffolding, folder layout, game config, first scenes - **Feature work**: add gameplay, UI, audio, transitions, tilemaps, enemies, pickups - **Bug fix**: isolate scene lifecycle, asset, physics, input, camera, or rendering failure - **Optimization**: profile bottlenecks, pooling, culling, throttling, asset strategy - **Art / asset pipeline**: spritesheet measurements, animation setup, nine-slice / three-slice UI, tilemap integration ### 2. Inspect first, then decide When a repository already exists, inspect before proposing structure changes: - package.json, bundler config, tsconfig/jsconfig - Phaser version and whether the codebase is JS or TS - game bootstrap, scene list, physics config, scale config - asset folders and naming conventions - current state-sharing approach (scene data, registry, services, globals) - whether the project is pixel art, HD art, desktop-first, mobile-first, or mixed input Prefer adapting to the existing codebase over replacing it with boilerplate. ### 3. Default technical choices Use these defaults unless the task clearly calls for something else: - Prefer the official **Vite + TypeScript** style setup for new projects - Prefer **Arcade Physics** for platformers, shooters, top-down action, simple pickups, and lightweight collision logic - Use **Matter Physics** only when the game needs rotation-driven collisions, compound bodies, constraints, stacking stability, or more realistic simulation - Organize code around **Scenes first**, then entities / systems inside scenes - Keep input **scene-owned**; entities should consume input state, not attach their own listeners - Use **global animations** when multiple sprites share the same animation data - Preload **startup-critical** assets up front; load level-specific assets later when it improves startup time - Use built-in **NineSlice / ThreeSlice** for scalable UI art when the texture layout supports it; only fall back to custom compositing when transparent padding or discontinuous art breaks built-in slicing - Use **FIT** scaling for most games, **RESIZE** for editor-like or UI-heavy layouts, and **NONE** only when manually controlling canvas sizing - For pixel art, enable **pixelArt** mode, favor integer scaling where possible, and avoid sub-pixel camera movement ### 4. Output expectations For **new games**, provide: - the recommended folder structure - a game config - scene list and responsibilities - starter code that runs - notes on why each architectural choice fits the requested genre For **feature work or bug fixes**, provide: - minimal targeted edits - root cause explanation - the patch - validation steps the user can run immediately For **architecture advice**, provide: - the smallest structure that solves the current problem - one recommended path, not a menu of equally-weighted options - explicit tradeoffs when the choice is important (for example Arcade vs Matter) ## Non-negotiable implementation rules - Respect the project's existing JS vs TS choice unless the user asks to migrate - Centralize scene keys, asset keys, collision categories, and balance constants - Keep `update()` orchestration-focused; push detailed logic into entities or systems - Register cleanup for scene shutdown / destroy when you attach listeners, timers, tweens, or long-lived references - Avoid creating new objects inside hot `update()` loops unless profiling proves it is harmless - Do not make every object interactive or physics-enabled by default - Do not assume spritesheet frame dimensions; inspect and verify them - Do not tell the user to use Matter when Arcade already solves the problem cleanly - Do not preload the entire game into one Boot scene just because it is convenient ## Recommended delivery workflow ### New Phaser project 1. Pick the architecture size: - **Small / jam game**: 2-4 scenes, lightweight service modules - **Mid-size game**: scenes + entities + systems + constants - **Large content-heavy game**: data-driven content, scene services, dedicated state layer 2. Define the base config: renderer, scale mode, physics, pixel-art settings 3. Create startup scenes first: Boot, Menu, Game, UI; add Pause / GameOver only if required 4. Add one vertical slice that proves the core loop works 5. Add reference-driven systems next: audio, saveable state, enemy spawning, tilemaps, UI polish ### Adding or refactoring a feature 1. Locate the owning scene and affected systems 2. Identify the smallest correct insertion point 3. Reuse existing helpers, constants, managers, and pools 4. Add cleanup and validation steps with the change 5. Preserve scene restart safety ### Debugging 1. Reproduce the issue from the code and config 2. Identify whether the fault is: - lifecycle / restart - asset dimensions or loader config - physics body setup or collider order - scale / camera / pixel rounding - stale listeners, timers, or pooled object state 3. Patch the root cause, not just the symptom 4. Provide a quick repro or verification checklist ## Reference map Read only the files relevant to the task: - **Setup / bootstrap / config**: [references/setup-and-build.md](references/setup-and-build.md) - **Scenes / shared state / architecture**: [references/scenes-state-architecture.md](references/scenes-state-architecture.md) - **Physics / entities / pooling**: [references/physics-and-entities.md](references/physics-and-entities.md) - **Assets / animations / UI panels**: [references/assets-animation-ui.md](references/assets-animation-ui.md) - **Tilemaps / camera / input / audio**: [references/tilemaps-camera-input-audio.md](references/tilemaps-camera-input-audio.md) - **Performance / debugging / cleanup**: [references/performance-debugging.md](references/performance-debugging.md) - **Code review / architecture checklist**: [references/review-checklist.md](references/review-checklist.md) ## Concrete examples ### Example: "Create a Phaser top-down shooter" Use this skill. Default to: - Vite + TypeScript structure - Arcade Physics - Boot, Menu, Game, UI scenes - scene-owned input mapping - pooled bullets - global animations - camera follow and world bounds - asset keys / scene keys in constants Then deliver runnable starter code plus the first playable loop. ### Example: "My pixel art looks blurry on mobile" Use this skill. Inspect: - `pixelArt` and `roundPixels` settings - camera follow rounding - scale mode and zoom strategy - CSS around the canvas container - whether art is being scaled non-integer Then patch the smallest set of config and camera settings required. ### Example: "Paper UI panels show weird side bars" Use this skill. Inspect the source texture first. Then: - try built-in ThreeSlice / NineSlice if the art is a true 3-slice or 9-slice layout - if frames contain large transparent padding or discontinuous art, use trimmed or composited fallback slices - document the measured frame sizes, spacing, margins, and any overlap used ## Common traps Avoid these unless the user explicitly wants them: - one giant `GameScene` that owns menus, HUD, gameplay, pause, and transitions - state stored on `window`, random module globals, or ad hoc singleton soup - entity-owned keyboard listeners - scene restart bugs caused by forgotten shutdown cleanup - loading every future asset in the first scene
Related in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.