Ryan arcade builder
Original authored for Ryan's arcade, with AI assistance, from the project's own browser-game workflows. Not a downloaded skill or a claim of personal human authorship. No third-party skill text is imported. This publication does not grant a blanket license to the site's code, art, brands, or other content.
Scope
Use in Ryan's portfolio web project for /arcade.html, /pimp-my-ride.html, and /drive-my-ride.html. These public instructions are reusable; they contain no account IDs or credentials. Discovery, game play, and skill downloads are public; verified accounts are required only for community ride sharing and the showroom.
Procedure
- Read the specific game's HTML, controller, pure simulation module, and corresponding
testsfiles before changing behavior. Keep the physics/model layer separate from account, DOM, persistence, and rendering code. Use the existing localpublic/vendor/three/three.module.jsimport when extending existing renderers; do not introduce a CDN dependency or copy vendor code into skills. - Keep game play independent of account state. Verified Google/GitHub sign-in is required only for community ride sharing and showroom reads; await
accountReady, reject stale asynchronous verification after account changes, and keep the Firestore rules and controller checks. A sign-in failure must not block a default ride, local customization, or a race. - Keep all JavaScript and CSS external for Firebase Hosting's strict CSP. Do not add inline event handlers, inline executable scripts,
eval, or a new remote script origin to make a feature work. - Design for a narrow mobile viewport first, then landscape and desktop. Make canvas sizing follow its container, keep HUD text readable, respect safe areas, and test that controls do not overflow or cover the course. Support keyboard and touch together. Release held input on blur, visibility changes, pointer cancellation, account changes, and leaving play.
- Reuse shared ride data rather than creating a second schema. Read
public/ride-data.jsbefore extending garage or race features. UsenewRide,validateRide,serializeRide, andparseSavedRide; never trust saved gallery data simply because it came from the database. - Preserve model provenance. The cars are detailed GLBs in
public/models/rides/: two original Blender-authored models and one adapted CC BY 4.0 concept car, recorded inprovenance.jsonandcredits.html. Follow theride-customizerskill for creating or replacing vehicle assets,hometown-racerfor racing, andeat-my-facefor the maze game. Any new model needs documented source, author, license, permitted redistribution, attribution, and texture rights. Do not invent permission, claim vehicle-brand endorsement, or publish third-party skill collections. - Prefer deterministic, pure simulation tests before browser checks. From
web, runnode --test tests/arcade.test.js tests/arcade-screen.test.js tests/ride.test.js tests/ride-model.test.js tests/ride-ui.test.js tests/drive.test.js. Run account tests when access changes:node --test tests/account.test.js. Consult existing emulator setup before running Firestore-rule tests; never use production data as test fixtures. - Verify signed-out, unsupported-provider, failed-verification, signed-in, sign-out-during-load, keyboard, touch, and narrow-screen states. Check browser errors, canvas resize, pause/resume, and input cleanup. When working on racing, test AI finish progression, not just a moving car.
Acceptance
Report the behavior changed, targeted test commands/results, viewport checks, and any unverified account/emulator cases. Never imply an emulator test proved live authorization or deploy/bill without explicit authorization.
Install this custom skill
Review and read the raw SKILL.md or download SKILL.md. Create a folder named ryan-arcade-builder in your agent's supported skills directory and save the file there as SKILL.md.
Project-local Copilot example: .github\skills\ryan-arcade-builder\SKILL.md. Personal installation, only if you choose it: .agents\skills\ryan-arcade-builder\SKILL.md under your profile. Copy only this authored file, not any downloaded skill collection. Inspect another project's code before adapting these Ryan-specific workflows.
The instruction file is usable independently of MCP. Local MCP setup is a separate option; no public MCP protocol endpoint is deployed.
Catalog name: ryan-arcade-builder. Source: original-custom. Size: 4054 UTF-8 bytes. JSON catalog and provenance.