What problem does it solve? When building CQRS systems, read models often diverge from write models, requiring denormalized views, aggregations, and cross-context joins. This Skill guides the creation of read-side projections — free record classes with no base class and no invariants — that materialize domain views for specific UI and query needs, paired with projectors that drive them from events. ## Core Features & Use Cases - Language dispatch hub: Routes to TypeScript or Go playbooks based on file extension, with per-language registries of patterns and bad practices. - Canonical flow enforcement: Codifies the find → applyEvent → save flow, with method-overloaded create/applyEvent in TypeScript and ApplyX methods in Go. - Modeling decision framework: Helps decide whether a projection is needed, where it lives (domain context vs ui BFF), which archetype applies, and the level of denormalization. - Use Case: When adding a chat sidebar that needs unread counts and last-message timestamps, use this Skill to scaffold a fully denormalized projection plus its repository with canonical findByKey/save/insertIfNew methods and justified atomic ops. ## Quick Start Ask the AI to create a projection for a specific context and name, for example by running the CLI scaffolder with bun cli projection channel Message and then filling in the event union and applyEvent overloads.