@soulcraft/kits 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/kits/ai-content-studio/kit.json +358 -0
- package/kits/api-documentation/kit.json +358 -0
- package/kits/api-documentation/skills/api-examples/SKILL.md +176 -0
- package/kits/api-documentation/skills/api-review/SKILL.md +35 -0
- package/kits/api-documentation/skills/api-versioning/SKILL.md +156 -0
- package/kits/api-documentation/skills/create-code-examples/SKILL.md +42 -0
- package/kits/api-documentation/skills/define-resource/SKILL.md +39 -0
- package/kits/api-documentation/skills/document-auth/SKILL.md +39 -0
- package/kits/api-documentation/skills/document-endpoint/SKILL.md +40 -0
- package/kits/api-documentation/skills/kit-expertise/SKILL.md +78 -0
- package/kits/api-documentation/skills/openapi-spec/SKILL.md +174 -0
- package/kits/axe-house/kit.json +931 -0
- package/kits/axe-house/skills/axe-expertise/SKILL.md +259 -0
- package/kits/axe-house/skills/blog-draft/SKILL.md +147 -0
- package/kits/axe-house/skills/booking-digest/SKILL.md +188 -0
- package/kits/axe-house/skills/customer-insights/SKILL.md +215 -0
- package/kits/axe-house/skills/demand-forecast/SKILL.md +183 -0
- package/kits/axe-house/skills/email-campaign/SKILL.md +135 -0
- package/kits/axe-house/skills/experience-copy/SKILL.md +142 -0
- package/kits/axe-house/skills/guest-letter/SKILL.md +171 -0
- package/kits/axe-house/skills/inventory-health/SKILL.md +234 -0
- package/kits/axe-house/skills/league-manager/SKILL.md +264 -0
- package/kits/axe-house/skills/revenue-report/SKILL.md +240 -0
- package/kits/axe-house/skills/safety-briefing/SKILL.md +248 -0
- package/kits/axe-house/skills/social-calendar/SKILL.md +203 -0
- package/kits/axe-house/skills/staff-briefing/SKILL.md +231 -0
- package/kits/axe-house/skills/venue-data-model/SKILL.md +225 -0
- package/kits/blog-series/kit.json +363 -0
- package/kits/blog-series/skills/content-hooks/SKILL.md +158 -0
- package/kits/blog-series/skills/headline-brainstorm/SKILL.md +40 -0
- package/kits/blog-series/skills/kit-expertise/SKILL.md +78 -0
- package/kits/blog-series/skills/repurpose-content/SKILL.md +40 -0
- package/kits/blog-series/skills/seo-review/SKILL.md +41 -0
- package/kits/blog-series/skills/seo-writing/SKILL.md +135 -0
- package/kits/blog-series/skills/series-audit/SKILL.md +36 -0
- package/kits/blog-series/skills/write-post-outline/SKILL.md +42 -0
- package/kits/business-plan/kit.json +437 -0
- package/kits/business-plan/skills/competitor-analysis/SKILL.md +34 -0
- package/kits/business-plan/skills/financial-modeling/SKILL.md +180 -0
- package/kits/business-plan/skills/financial-projections/SKILL.md +42 -0
- package/kits/business-plan/skills/kit-expertise/SKILL.md +101 -0
- package/kits/business-plan/skills/market-analysis/SKILL.md +155 -0
- package/kits/business-plan/skills/market-research/SKILL.md +35 -0
- package/kits/business-plan/skills/sba-compliance/SKILL.md +163 -0
- package/kits/business-plan/skills/swot-analysis/SKILL.md +36 -0
- package/kits/canvas-and-corks/kit.json +910 -0
- package/kits/canvas-and-corks/skills/blog-draft/SKILL.md +160 -0
- package/kits/canvas-and-corks/skills/booking-digest/SKILL.md +147 -0
- package/kits/canvas-and-corks/skills/class-description/SKILL.md +53 -0
- package/kits/canvas-and-corks/skills/class-roster/SKILL.md +163 -0
- package/kits/canvas-and-corks/skills/customer-insights/SKILL.md +174 -0
- package/kits/canvas-and-corks/skills/demand-forecast/SKILL.md +191 -0
- package/kits/canvas-and-corks/skills/email-campaign/SKILL.md +154 -0
- package/kits/canvas-and-corks/skills/experience-copy/SKILL.md +152 -0
- package/kits/canvas-and-corks/skills/guest-letter/SKILL.md +127 -0
- package/kits/canvas-and-corks/skills/inventory-health/SKILL.md +204 -0
- package/kits/canvas-and-corks/skills/painting-memory/SKILL.md +76 -0
- package/kits/canvas-and-corks/skills/revenue-report/SKILL.md +196 -0
- package/kits/canvas-and-corks/skills/social-calendar/SKILL.md +146 -0
- package/kits/canvas-and-corks/skills/staff-briefing/SKILL.md +134 -0
- package/kits/canvas-and-corks/skills/studio-expertise/SKILL.md +181 -0
- package/kits/canvas-and-corks/skills/venue-data-model/SKILL.md +325 -0
- package/kits/character-relationship-map/kit.json +367 -0
- package/kits/character-relationship-map/skills/ensemble-balance/SKILL.md +189 -0
- package/kits/character-relationship-map/skills/kit-expertise/SKILL.md +83 -0
- package/kits/character-relationship-map/skills/relationship-dynamics/SKILL.md +158 -0
- package/kits/clay-and-co/kit.json +938 -0
- package/kits/clay-and-co/skills/blog-draft/SKILL.md +135 -0
- package/kits/clay-and-co/skills/booking-digest/SKILL.md +163 -0
- package/kits/clay-and-co/skills/customer-insights/SKILL.md +207 -0
- package/kits/clay-and-co/skills/demand-forecast/SKILL.md +166 -0
- package/kits/clay-and-co/skills/email-campaign/SKILL.md +125 -0
- package/kits/clay-and-co/skills/experience-copy/SKILL.md +132 -0
- package/kits/clay-and-co/skills/guest-letter/SKILL.md +104 -0
- package/kits/clay-and-co/skills/inventory-health/SKILL.md +211 -0
- package/kits/clay-and-co/skills/kiln-scheduler/SKILL.md +206 -0
- package/kits/clay-and-co/skills/piece-tracker/SKILL.md +165 -0
- package/kits/clay-and-co/skills/pottery-expertise/SKILL.md +165 -0
- package/kits/clay-and-co/skills/pottery-memory/SKILL.md +119 -0
- package/kits/clay-and-co/skills/revenue-report/SKILL.md +205 -0
- package/kits/clay-and-co/skills/social-calendar/SKILL.md +130 -0
- package/kits/clay-and-co/skills/staff-briefing/SKILL.md +213 -0
- package/kits/clay-and-co/skills/venue-data-model/SKILL.md +230 -0
- package/kits/concept-map/kit.json +353 -0
- package/kits/concept-map/skills/add-concept/SKILL.md +41 -0
- package/kits/concept-map/skills/assess-understanding/SKILL.md +36 -0
- package/kits/concept-map/skills/concept-hierarchy/SKILL.md +148 -0
- package/kits/concept-map/skills/create-learning-map/SKILL.md +42 -0
- package/kits/concept-map/skills/find-cross-links/SKILL.md +34 -0
- package/kits/concept-map/skills/identify-prerequisites/SKILL.md +40 -0
- package/kits/concept-map/skills/kit-expertise/SKILL.md +78 -0
- package/kits/concept-map/skills/relationship-types/SKILL.md +160 -0
- package/kits/content-calendar/kit.json +420 -0
- package/kits/content-calendar/skills/content-strategy/SKILL.md +174 -0
- package/kits/content-calendar/skills/create-brief/SKILL.md +40 -0
- package/kits/content-calendar/skills/generate-ideas/SKILL.md +40 -0
- package/kits/content-calendar/skills/kit-expertise/SKILL.md +100 -0
- package/kits/content-calendar/skills/plan-series/SKILL.md +40 -0
- package/kits/content-calendar/skills/repurpose-content/SKILL.md +38 -0
- package/kits/content-calendar/skills/repurposing/SKILL.md +179 -0
- package/kits/content-calendar/skills/weekly-review/SKILL.md +34 -0
- package/kits/coworking-space/kit.json +1068 -0
- package/kits/escape-vault/kit.json +1028 -0
- package/kits/escape-vault/skills/blog-draft/SKILL.md +157 -0
- package/kits/escape-vault/skills/booking-digest/SKILL.md +151 -0
- package/kits/escape-vault/skills/customer-insights/SKILL.md +185 -0
- package/kits/escape-vault/skills/demand-forecast/SKILL.md +188 -0
- package/kits/escape-vault/skills/email-campaign/SKILL.md +157 -0
- package/kits/escape-vault/skills/escape-expertise/SKILL.md +200 -0
- package/kits/escape-vault/skills/escape-memory/SKILL.md +99 -0
- package/kits/escape-vault/skills/experience-copy/SKILL.md +159 -0
- package/kits/escape-vault/skills/guest-letter/SKILL.md +143 -0
- package/kits/escape-vault/skills/inventory-health/SKILL.md +222 -0
- package/kits/escape-vault/skills/leaderboard-report/SKILL.md +204 -0
- package/kits/escape-vault/skills/revenue-report/SKILL.md +202 -0
- package/kits/escape-vault/skills/room-designer/SKILL.md +182 -0
- package/kits/escape-vault/skills/social-calendar/SKILL.md +148 -0
- package/kits/escape-vault/skills/staff-briefing/SKILL.md +159 -0
- package/kits/escape-vault/skills/venue-data-model/SKILL.md +335 -0
- package/kits/family-tree/kit.json +380 -0
- package/kits/family-tree/skills/add-family-member/SKILL.md +42 -0
- package/kits/family-tree/skills/analyze-relationship/SKILL.md +41 -0
- package/kits/family-tree/skills/export-gedcom/SKILL.md +34 -0
- package/kits/family-tree/skills/genealogy-research/SKILL.md +188 -0
- package/kits/family-tree/skills/kit-expertise/SKILL.md +107 -0
- package/kits/family-tree/skills/record-oral-history/SKILL.md +43 -0
- package/kits/family-tree/skills/relationship-mapping/SKILL.md +171 -0
- package/kits/family-tree/skills/research-ancestor/SKILL.md +43 -0
- package/kits/farkle-dice-game/kit.json +316 -0
- package/kits/farkle-dice-game/skills/kit-expertise/SKILL.md +137 -0
- package/kits/franchise-ops/kit.json +326 -0
- package/kits/freelance-portfolio/kit.json +435 -0
- package/kits/game-design-doc/kit.json +353 -0
- package/kits/game-design-doc/skills/balance-system/SKILL.md +40 -0
- package/kits/game-design-doc/skills/create-character/SKILL.md +40 -0
- package/kits/game-design-doc/skills/design-mechanic/SKILL.md +40 -0
- package/kits/game-design-doc/skills/economy-design/SKILL.md +152 -0
- package/kits/game-design-doc/skills/game-mechanics/SKILL.md +141 -0
- package/kits/game-design-doc/skills/ideate-features/SKILL.md +36 -0
- package/kits/game-design-doc/skills/kit-expertise/SKILL.md +78 -0
- package/kits/game-design-doc/skills/playtest-feedback/SKILL.md +142 -0
- package/kits/game-design-doc/skills/review-gdd/SKILL.md +33 -0
- package/kits/gather-and-grill/kit.json +966 -0
- package/kits/gather-and-grill/skills/blog-draft/SKILL.md +120 -0
- package/kits/gather-and-grill/skills/booking-digest/SKILL.md +171 -0
- package/kits/gather-and-grill/skills/cooking-memory/SKILL.md +100 -0
- package/kits/gather-and-grill/skills/culinary-expertise/SKILL.md +180 -0
- package/kits/gather-and-grill/skills/customer-insights/SKILL.md +184 -0
- package/kits/gather-and-grill/skills/demand-forecast/SKILL.md +200 -0
- package/kits/gather-and-grill/skills/email-campaign/SKILL.md +97 -0
- package/kits/gather-and-grill/skills/experience-copy/SKILL.md +92 -0
- package/kits/gather-and-grill/skills/guest-letter/SKILL.md +98 -0
- package/kits/gather-and-grill/skills/inventory-health/SKILL.md +193 -0
- package/kits/gather-and-grill/skills/menu-planner/SKILL.md +175 -0
- package/kits/gather-and-grill/skills/recipe-card/SKILL.md +194 -0
- package/kits/gather-and-grill/skills/revenue-report/SKILL.md +245 -0
- package/kits/gather-and-grill/skills/social-calendar/SKILL.md +139 -0
- package/kits/gather-and-grill/skills/staff-briefing/SKILL.md +167 -0
- package/kits/gather-and-grill/skills/venue-data-model/SKILL.md +336 -0
- package/kits/gtd-productivity-system/kit.json +389 -0
- package/kits/gtd-productivity-system/skills/break-down-project/SKILL.md +41 -0
- package/kits/gtd-productivity-system/skills/clarify-task/SKILL.md +42 -0
- package/kits/gtd-productivity-system/skills/gtd-methodology/SKILL.md +185 -0
- package/kits/gtd-productivity-system/skills/inbox-processing/SKILL.md +173 -0
- package/kits/gtd-productivity-system/skills/kit-expertise/SKILL.md +111 -0
- package/kits/gtd-productivity-system/skills/mind-sweep/SKILL.md +35 -0
- package/kits/gtd-productivity-system/skills/process-inbox/SKILL.md +40 -0
- package/kits/gtd-productivity-system/skills/weekly-review/SKILL.md +197 -0
- package/kits/gym-fitness/kit.json +1037 -0
- package/kits/interactive-fiction/kit.json +471 -0
- package/kits/invoice-generator/kit.json +466 -0
- package/kits/loyalty-program/kit.json +323 -0
- package/kits/marketing-plan/kit.json +417 -0
- package/kits/marketing-plan/skills/allocate-budget/SKILL.md +34 -0
- package/kits/marketing-plan/skills/campaign-metrics/SKILL.md +184 -0
- package/kits/marketing-plan/skills/channel-strategy/SKILL.md +156 -0
- package/kits/marketing-plan/skills/content-calendar/SKILL.md +34 -0
- package/kits/marketing-plan/skills/create-persona/SKILL.md +40 -0
- package/kits/marketing-plan/skills/kit-expertise/SKILL.md +109 -0
- package/kits/marketing-plan/skills/measure-performance/SKILL.md +34 -0
- package/kits/marketing-plan/skills/plan-campaign/SKILL.md +41 -0
- package/kits/marketing-site/kit.json +230 -0
- package/kits/marketing-site/skills/add-page/SKILL.md +28 -0
- package/kits/marketing-site/skills/add-section/SKILL.md +29 -0
- package/kits/marketing-site/skills/change-colors/SKILL.md +24 -0
- package/kits/marketing-site/skills/conversion-copy/SKILL.md +152 -0
- package/kits/marketing-site/skills/export-deploy/SKILL.md +24 -0
- package/kits/marketing-site/skills/kit-expertise/SKILL.md +77 -0
- package/kits/marketing-site/skills/landing-page/SKILL.md +156 -0
- package/kits/match-3-puzzle/kit.json +245 -0
- package/kits/match-3-puzzle/skills/kit-expertise/SKILL.md +96 -0
- package/kits/mind-map/kit.json +355 -0
- package/kits/mind-map/skills/add-branch/SKILL.md +40 -0
- package/kits/mind-map/skills/brainstorm-topic/SKILL.md +41 -0
- package/kits/mind-map/skills/branch-expansion/SKILL.md +181 -0
- package/kits/mind-map/skills/find-connections/SKILL.md +34 -0
- package/kits/mind-map/skills/kit-expertise/SKILL.md +78 -0
- package/kits/mind-map/skills/organize-map/SKILL.md +35 -0
- package/kits/mind-map/skills/radiant-thinking/SKILL.md +184 -0
- package/kits/mind-map/skills/summarize-map/SKILL.md +34 -0
- package/kits/music-collection/kit.json +403 -0
- package/kits/music-collection/skills/add-album/SKILL.md +44 -0
- package/kits/music-collection/skills/create-playlist/SKILL.md +37 -0
- package/kits/music-collection/skills/explore-artist/SKILL.md +37 -0
- package/kits/music-collection/skills/journal-session/SKILL.md +40 -0
- package/kits/music-collection/skills/kit-expertise/SKILL.md +98 -0
- package/kits/music-collection/skills/music-metadata/SKILL.md +209 -0
- package/kits/music-collection/skills/playlist-curator/SKILL.md +182 -0
- package/kits/music-collection/skills/recommend-similar/SKILL.md +36 -0
- package/kits/music-venue/kit.json +986 -0
- package/kits/novel-writing-system/kit.json +481 -0
- package/kits/novel-writing-system/skills/character-arc/SKILL.md +164 -0
- package/kits/novel-writing-system/skills/develop-character-arc/SKILL.md +42 -0
- package/kits/novel-writing-system/skills/kit-expertise/SKILL.md +84 -0
- package/kits/novel-writing-system/skills/outline-review/SKILL.md +34 -0
- package/kits/novel-writing-system/skills/plot-doctor/SKILL.md +221 -0
- package/kits/novel-writing-system/skills/plot-hole-check/SKILL.md +35 -0
- package/kits/novel-writing-system/skills/scene-development/SKILL.md +38 -0
- package/kits/novel-writing-system/skills/scene-sequel/SKILL.md +162 -0
- package/kits/novel-writing-system/skills/worldbuilding-session/SKILL.md +40 -0
- package/kits/organization-chart/kit.json +349 -0
- package/kits/organization-chart/skills/add-role/SKILL.md +41 -0
- package/kits/organization-chart/skills/analyze-span/SKILL.md +34 -0
- package/kits/organization-chart/skills/create-raci/SKILL.md +42 -0
- package/kits/organization-chart/skills/kit-expertise/SKILL.md +78 -0
- package/kits/organization-chart/skills/org-design/SKILL.md +188 -0
- package/kits/organization-chart/skills/org-health-check/SKILL.md +35 -0
- package/kits/organization-chart/skills/plan-reorg/SKILL.md +42 -0
- package/kits/organization-chart/skills/role-definition/SKILL.md +180 -0
- package/kits/paws-and-pour/kit.json +969 -0
- package/kits/paws-and-pour/skills/adoption-report/SKILL.md +273 -0
- package/kits/paws-and-pour/skills/animal-profile/SKILL.md +206 -0
- package/kits/paws-and-pour/skills/blog-draft/SKILL.md +137 -0
- package/kits/paws-and-pour/skills/booking-digest/SKILL.md +251 -0
- package/kits/paws-and-pour/skills/cafe-expertise/SKILL.md +218 -0
- package/kits/paws-and-pour/skills/cafe-memory/SKILL.md +114 -0
- package/kits/paws-and-pour/skills/customer-insights/SKILL.md +216 -0
- package/kits/paws-and-pour/skills/demand-forecast/SKILL.md +200 -0
- package/kits/paws-and-pour/skills/email-campaign/SKILL.md +154 -0
- package/kits/paws-and-pour/skills/experience-copy/SKILL.md +139 -0
- package/kits/paws-and-pour/skills/guest-letter/SKILL.md +183 -0
- package/kits/paws-and-pour/skills/inventory-health/SKILL.md +213 -0
- package/kits/paws-and-pour/skills/revenue-report/SKILL.md +273 -0
- package/kits/paws-and-pour/skills/social-calendar/SKILL.md +183 -0
- package/kits/paws-and-pour/skills/staff-briefing/SKILL.md +223 -0
- package/kits/paws-and-pour/skills/venue-data-model/SKILL.md +260 -0
- package/kits/persona-driven-strategy/kit.json +352 -0
- package/kits/persona-driven-strategy/skills/empathy-mapping/SKILL.md +221 -0
- package/kits/persona-driven-strategy/skills/journey-mapping/SKILL.md +219 -0
- package/kits/persona-driven-strategy/skills/kit-expertise/SKILL.md +81 -0
- package/kits/persona-driven-strategy/skills/persona-development/SKILL.md +189 -0
- package/kits/personal-crm/kit.json +373 -0
- package/kits/personal-crm/skills/add-contact/SKILL.md +42 -0
- package/kits/personal-crm/skills/connect-contacts/SKILL.md +41 -0
- package/kits/personal-crm/skills/find-dormant/SKILL.md +35 -0
- package/kits/personal-crm/skills/kit-expertise/SKILL.md +82 -0
- package/kits/personal-crm/skills/log-interaction/SKILL.md +43 -0
- package/kits/personal-crm/skills/network-analysis/SKILL.md +161 -0
- package/kits/personal-crm/skills/relationship-insights/SKILL.md +153 -0
- package/kits/personal-wiki/kit.json +322 -0
- package/kits/personal-wiki/skills/kit-expertise/SKILL.md +81 -0
- package/kits/personal-wiki/skills/orphan-finder/SKILL.md +155 -0
- package/kits/personal-wiki/skills/wiki-structure/SKILL.md +179 -0
- package/kits/petal-press/kit.json +996 -0
- package/kits/petal-press/skills/arrangement-memory/SKILL.md +143 -0
- package/kits/petal-press/skills/blog-draft/SKILL.md +167 -0
- package/kits/petal-press/skills/booking-digest/SKILL.md +196 -0
- package/kits/petal-press/skills/care-card/SKILL.md +173 -0
- package/kits/petal-press/skills/customer-insights/SKILL.md +213 -0
- package/kits/petal-press/skills/demand-forecast/SKILL.md +203 -0
- package/kits/petal-press/skills/email-campaign/SKILL.md +204 -0
- package/kits/petal-press/skills/experience-copy/SKILL.md +184 -0
- package/kits/petal-press/skills/floral-expertise/SKILL.md +244 -0
- package/kits/petal-press/skills/guest-letter/SKILL.md +153 -0
- package/kits/petal-press/skills/inventory-health/SKILL.md +201 -0
- package/kits/petal-press/skills/revenue-report/SKILL.md +219 -0
- package/kits/petal-press/skills/seasonal-guide/SKILL.md +238 -0
- package/kits/petal-press/skills/social-calendar/SKILL.md +217 -0
- package/kits/petal-press/skills/staff-briefing/SKILL.md +217 -0
- package/kits/petal-press/skills/venue-data-model/SKILL.md +226 -0
- package/kits/pitch-deck/kit.json +416 -0
- package/kits/pitch-deck/skills/calculate-market-size/SKILL.md +41 -0
- package/kits/pitch-deck/skills/develop-problem-slide/SKILL.md +39 -0
- package/kits/pitch-deck/skills/investor-qa/SKILL.md +182 -0
- package/kits/pitch-deck/skills/investor-qa-prep/SKILL.md +36 -0
- package/kits/pitch-deck/skills/kit-expertise/SKILL.md +112 -0
- package/kits/pitch-deck/skills/pitch-structure/SKILL.md +186 -0
- package/kits/pitch-deck/skills/practice-pitch/SKILL.md +36 -0
- package/kits/podcast-series/kit.json +324 -0
- package/kits/podcast-series/skills/audience-growth/SKILL.md +38 -0
- package/kits/podcast-series/skills/create-guest-profile/SKILL.md +42 -0
- package/kits/podcast-series/skills/episode-structure/SKILL.md +189 -0
- package/kits/podcast-series/skills/guest-research/SKILL.md +167 -0
- package/kits/podcast-series/skills/kit-expertise/SKILL.md +81 -0
- package/kits/podcast-series/skills/plan-episode/SKILL.md +44 -0
- package/kits/podcast-series/skills/prepare-guest/SKILL.md +45 -0
- package/kits/podcast-series/skills/show-notes/SKILL.md +182 -0
- package/kits/podcast-series/skills/write-show-notes/SKILL.md +43 -0
- package/kits/pour-house/kit.json +912 -0
- package/kits/pour-house/skills/blog-draft/SKILL.md +138 -0
- package/kits/pour-house/skills/booking-digest/SKILL.md +151 -0
- package/kits/pour-house/skills/cellar-report/SKILL.md +251 -0
- package/kits/pour-house/skills/customer-insights/SKILL.md +184 -0
- package/kits/pour-house/skills/demand-forecast/SKILL.md +156 -0
- package/kits/pour-house/skills/email-campaign/SKILL.md +130 -0
- package/kits/pour-house/skills/experience-copy/SKILL.md +125 -0
- package/kits/pour-house/skills/guest-letter/SKILL.md +136 -0
- package/kits/pour-house/skills/inventory-health/SKILL.md +159 -0
- package/kits/pour-house/skills/pour-memory/SKILL.md +89 -0
- package/kits/pour-house/skills/revenue-report/SKILL.md +232 -0
- package/kits/pour-house/skills/social-calendar/SKILL.md +140 -0
- package/kits/pour-house/skills/sommelier-expertise/SKILL.md +324 -0
- package/kits/pour-house/skills/staff-briefing/SKILL.md +176 -0
- package/kits/pour-house/skills/tasting-notes/SKILL.md +179 -0
- package/kits/pour-house/skills/venue-data-model/SKILL.md +323 -0
- package/kits/presentation/kit.json +296 -0
- package/kits/product-requirements-doc/kit.json +365 -0
- package/kits/product-requirements-doc/skills/acceptance-criteria/SKILL.md +219 -0
- package/kits/product-requirements-doc/skills/create-user-story/SKILL.md +43 -0
- package/kits/product-requirements-doc/skills/define-success-metrics/SKILL.md +41 -0
- package/kits/product-requirements-doc/skills/kit-expertise/SKILL.md +81 -0
- package/kits/product-requirements-doc/skills/prd-review/SKILL.md +39 -0
- package/kits/product-requirements-doc/skills/prd-structure/SKILL.md +206 -0
- package/kits/product-requirements-doc/skills/prioritize-features/SKILL.md +43 -0
- package/kits/product-requirements-doc/skills/synthesize-research/SKILL.md +43 -0
- package/kits/product-requirements-doc/skills/user-stories/SKILL.md +198 -0
- package/kits/project-timeline/kit.json +367 -0
- package/kits/project-timeline/skills/add-milestone/SKILL.md +44 -0
- package/kits/project-timeline/skills/add-task/SKILL.md +43 -0
- package/kits/project-timeline/skills/assess-risks/SKILL.md +39 -0
- package/kits/project-timeline/skills/dependency-analysis/SKILL.md +176 -0
- package/kits/project-timeline/skills/identify-critical-path/SKILL.md +37 -0
- package/kits/project-timeline/skills/kit-expertise/SKILL.md +81 -0
- package/kits/project-timeline/skills/milestone-planning/SKILL.md +169 -0
- package/kits/project-timeline/skills/status-update/SKILL.md +39 -0
- package/kits/reading-tracker/kit.json +368 -0
- package/kits/reading-tracker/skills/add-book/SKILL.md +32 -0
- package/kits/reading-tracker/skills/book-connections/SKILL.md +161 -0
- package/kits/reading-tracker/skills/kit-expertise/SKILL.md +72 -0
- package/kits/reading-tracker/skills/log-progress/SKILL.md +29 -0
- package/kits/reading-tracker/skills/reading-insights/SKILL.md +179 -0
- package/kits/reading-tracker/skills/save-quote/SKILL.md +30 -0
- package/kits/recipe-manager/kit.json +376 -0
- package/kits/recipe-manager/skills/add-recipe/SKILL.md +33 -0
- package/kits/recipe-manager/skills/generate-shopping-list/SKILL.md +27 -0
- package/kits/recipe-manager/skills/ingredient-substitutions/SKILL.md +157 -0
- package/kits/recipe-manager/skills/kit-expertise/SKILL.md +72 -0
- package/kits/recipe-manager/skills/meal-planning/SKILL.md +184 -0
- package/kits/recipe-manager/skills/plan-meal/SKILL.md +31 -0
- package/kits/recipe-manager/skills/scaling-recipes/SKILL.md +183 -0
- package/kits/saas-app/kit.json +405 -0
- package/kits/saas-app/skills/churn-analysis/SKILL.md +219 -0
- package/kits/saas-app/skills/onboarding-flow/SKILL.md +217 -0
- package/kits/saas-app/skills/pricing-model/SKILL.md +192 -0
- package/kits/saas-app/skills/saas-expertise/SKILL.md +95 -0
- package/kits/salon-barbershop/kit.json +1021 -0
- package/kits/screenplay-writing/kit.json +412 -0
- package/kits/screenplay-writing/skills/analyze-scene/SKILL.md +42 -0
- package/kits/screenplay-writing/skills/beat-sheet/SKILL.md +134 -0
- package/kits/screenplay-writing/skills/create-scene-card/SKILL.md +46 -0
- package/kits/screenplay-writing/skills/develop-character/SKILL.md +43 -0
- package/kits/screenplay-writing/skills/generate-beat-sheet/SKILL.md +49 -0
- package/kits/screenplay-writing/skills/kit-expertise/SKILL.md +90 -0
- package/kits/screenplay-writing/skills/scene-analysis/SKILL.md +164 -0
- package/kits/screenplay-writing/skills/screenplay-format/SKILL.md +108 -0
- package/kits/social-media-manager/kit.json +476 -0
- package/kits/teacher-lesson-plan/kit.json +410 -0
- package/kits/teacher-lesson-plan/skills/assessment-design/SKILL.md +162 -0
- package/kits/teacher-lesson-plan/skills/blooms-taxonomy/SKILL.md +139 -0
- package/kits/teacher-lesson-plan/skills/create-lesson/SKILL.md +34 -0
- package/kits/teacher-lesson-plan/skills/design-unit/SKILL.md +28 -0
- package/kits/teacher-lesson-plan/skills/differentiate-lesson/SKILL.md +28 -0
- package/kits/teacher-lesson-plan/skills/differentiation/SKILL.md +180 -0
- package/kits/teacher-lesson-plan/skills/kit-expertise/SKILL.md +96 -0
- package/kits/teacher-lesson-plan/skills/schedule-lesson/SKILL.md +31 -0
- package/kits/technical-specification/kit.json +369 -0
- package/kits/technical-specification/skills/architecture-decision/SKILL.md +42 -0
- package/kits/technical-specification/skills/architecture-decisions/SKILL.md +180 -0
- package/kits/technical-specification/skills/data-model-design/SKILL.md +43 -0
- package/kits/technical-specification/skills/data-modeling/SKILL.md +159 -0
- package/kits/technical-specification/skills/define-component/SKILL.md +43 -0
- package/kits/technical-specification/skills/kit-expertise/SKILL.md +81 -0
- package/kits/technical-specification/skills/requirements-analysis/SKILL.md +42 -0
- package/kits/technical-specification/skills/security-review/SKILL.md +170 -0
- package/kits/technical-specification/skills/spec-review/SKILL.md +39 -0
- package/kits/wanderlands/kit.json +399 -0
- package/kits/wanderlands/skills/kit-expertise/SKILL.md +376 -0
- package/kits/web-application/kit.json +257 -0
- package/kits/web-application/skills/kit-expertise/SKILL.md +211 -0
- package/kits/wicks-and-whiskers/kit.json +1267 -0
- package/kits/wicks-and-whiskers/skills/blog-draft/SKILL.md +145 -0
- package/kits/wicks-and-whiskers/skills/booking-digest/SKILL.md +142 -0
- package/kits/wicks-and-whiskers/skills/candle-expertise/SKILL.md +69 -0
- package/kits/wicks-and-whiskers/skills/customer-insights/SKILL.md +176 -0
- package/kits/wicks-and-whiskers/skills/demand-forecast/SKILL.md +159 -0
- package/kits/wicks-and-whiskers/skills/email-campaign/SKILL.md +131 -0
- package/kits/wicks-and-whiskers/skills/experience-copy/SKILL.md +135 -0
- package/kits/wicks-and-whiskers/skills/guest-letter/SKILL.md +154 -0
- package/kits/wicks-and-whiskers/skills/inventory-health/SKILL.md +185 -0
- package/kits/wicks-and-whiskers/skills/kitten-profile/SKILL.md +159 -0
- package/kits/wicks-and-whiskers/skills/memory-narrative/SKILL.md +71 -0
- package/kits/wicks-and-whiskers/skills/revenue-report/SKILL.md +197 -0
- package/kits/wicks-and-whiskers/skills/social-calendar/SKILL.md +161 -0
- package/kits/wicks-and-whiskers/skills/staff-briefing/SKILL.md +174 -0
- package/kits/wicks-and-whiskers/skills/venue-data-model/SKILL.md +228 -0
- package/kits/world-building/kit.json +497 -0
- package/kits/world-building/skills/consistency-check/SKILL.md +179 -0
- package/kits/world-building/skills/create-character/SKILL.md +44 -0
- package/kits/world-building/skills/create-faction/SKILL.md +44 -0
- package/kits/world-building/skills/create-location/SKILL.md +44 -0
- package/kits/world-building/skills/create-timeline/SKILL.md +39 -0
- package/kits/world-building/skills/culture-builder/SKILL.md +171 -0
- package/kits/world-building/skills/design-magic-system/SKILL.md +38 -0
- package/kits/world-building/skills/kit-expertise/SKILL.md +110 -0
- package/kits/world-building/skills/magic-systems/SKILL.md +161 -0
- package/kits/youtube-content-plan/kit.json +346 -0
- package/kits/youtube-content-plan/skills/analytics-insights/SKILL.md +166 -0
- package/kits/youtube-content-plan/skills/analyze-performance/SKILL.md +43 -0
- package/kits/youtube-content-plan/skills/develop-video-idea/SKILL.md +45 -0
- package/kits/youtube-content-plan/skills/generate-ideas/SKILL.md +42 -0
- package/kits/youtube-content-plan/skills/kit-expertise/SKILL.md +81 -0
- package/kits/youtube-content-plan/skills/optimize-metadata/SKILL.md +43 -0
- package/kits/youtube-content-plan/skills/script-writing/SKILL.md +180 -0
- package/kits/youtube-content-plan/skills/write-script/SKILL.md +44 -0
- package/kits/youtube-content-plan/skills/youtube-seo/SKILL.md +172 -0
- package/package.json +43 -0
- package/src/index.ts +35 -0
- package/src/kits/ai-content-studio.ts +377 -0
- package/src/kits/api-documentation.ts +352 -0
- package/src/kits/axe-house.ts +949 -0
- package/src/kits/blog-series.ts +357 -0
- package/src/kits/business-plan.ts +406 -0
- package/src/kits/canvas-and-corks.ts +928 -0
- package/src/kits/character-relationship-map.ts +368 -0
- package/src/kits/clay-and-co.ts +956 -0
- package/src/kits/concept-map.ts +354 -0
- package/src/kits/content-calendar.ts +399 -0
- package/src/kits/coworking-space.ts +1084 -0
- package/src/kits/escape-vault.ts +1046 -0
- package/src/kits/family-tree.ts +381 -0
- package/src/kits/farkle-dice-game.ts +318 -0
- package/src/kits/franchise-ops.ts +345 -0
- package/src/kits/freelance-portfolio.ts +453 -0
- package/src/kits/game-design-doc.ts +353 -0
- package/src/kits/gather-and-grill.ts +984 -0
- package/src/kits/gtd-productivity-system.ts +389 -0
- package/src/kits/gym-fitness.ts +1053 -0
- package/src/kits/index.ts +76 -0
- package/src/kits/interactive-fiction.ts +489 -0
- package/src/kits/invoice-generator.ts +484 -0
- package/src/kits/loyalty-program.ts +342 -0
- package/src/kits/marketing-plan.ts +398 -0
- package/src/kits/marketing-site.ts +248 -0
- package/src/kits/match-3-puzzle.ts +248 -0
- package/src/kits/mind-map.ts +356 -0
- package/src/kits/music-collection.ts +404 -0
- package/src/kits/music-venue.ts +1002 -0
- package/src/kits/novel-writing-system.ts +461 -0
- package/src/kits/organization-chart.ts +350 -0
- package/src/kits/paws-and-pour.ts +987 -0
- package/src/kits/persona-driven-strategy.ts +345 -0
- package/src/kits/personal-crm.ts +391 -0
- package/src/kits/personal-wiki.ts +323 -0
- package/src/kits/petal-press.ts +1014 -0
- package/src/kits/pitch-deck.ts +395 -0
- package/src/kits/podcast-series.ts +324 -0
- package/src/kits/pour-house.ts +930 -0
- package/src/kits/presentation.ts +276 -0
- package/src/kits/product-requirements-doc.ts +359 -0
- package/src/kits/project-timeline.ts +368 -0
- package/src/kits/reading-tracker.ts +368 -0
- package/src/kits/recipe-manager.ts +376 -0
- package/src/kits/saas-app.ts +423 -0
- package/src/kits/salon-barbershop.ts +1037 -0
- package/src/kits/screenplay-writing.ts +412 -0
- package/src/kits/social-media-manager.ts +494 -0
- package/src/kits/teacher-lesson-plan.ts +410 -0
- package/src/kits/technical-specification.ts +363 -0
- package/src/kits/wanderlands.ts +401 -0
- package/src/kits/web-application.ts +275 -0
- package/src/kits/wicks-and-whiskers.ts +1285 -0
- package/src/kits/world-building.ts +476 -0
- package/src/kits/youtube-content-plan.ts +339 -0
- package/src/registry.ts +60 -0
- package/src/skills/api-documentation/index.ts +47 -0
- package/src/skills/axe-house/index.ts +71 -0
- package/src/skills/blog-series/index.ts +43 -0
- package/src/skills/business-plan/index.ts +43 -0
- package/src/skills/canvas-and-corks/index.ts +75 -0
- package/src/skills/character-relationship-map/index.ts +23 -0
- package/src/skills/clay-and-co/index.ts +75 -0
- package/src/skills/concept-map/index.ts +43 -0
- package/src/skills/content-calendar/index.ts +43 -0
- package/src/skills/escape-vault/index.ts +75 -0
- package/src/skills/family-tree/index.ts +43 -0
- package/src/skills/farkle-dice-game/index.ts +15 -0
- package/src/skills/game-design-doc/index.ts +47 -0
- package/src/skills/gather-and-grill/index.ts +75 -0
- package/src/skills/gtd-productivity-system/index.ts +43 -0
- package/src/skills/index.ts +109 -0
- package/src/skills/marketing-plan/index.ts +43 -0
- package/src/skills/marketing-site/index.ts +39 -0
- package/src/skills/match-3-puzzle/index.ts +15 -0
- package/src/skills/mind-map/index.ts +43 -0
- package/src/skills/music-collection/index.ts +43 -0
- package/src/skills/novel-writing-system/index.ts +47 -0
- package/src/skills/organization-chart/index.ts +43 -0
- package/src/skills/paws-and-pour/index.ts +75 -0
- package/src/skills/persona-driven-strategy/index.ts +27 -0
- package/src/skills/personal-crm/index.ts +39 -0
- package/src/skills/personal-wiki/index.ts +23 -0
- package/src/skills/petal-press/index.ts +75 -0
- package/src/skills/pitch-deck/index.ts +39 -0
- package/src/skills/podcast-series/index.ts +47 -0
- package/src/skills/pour-house/index.ts +75 -0
- package/src/skills/product-requirements-doc/index.ts +47 -0
- package/src/skills/project-timeline/index.ts +43 -0
- package/src/skills/reading-tracker/index.ts +35 -0
- package/src/skills/recipe-manager/index.ts +39 -0
- package/src/skills/saas-app/index.ts +27 -0
- package/src/skills/screenplay-writing/index.ts +43 -0
- package/src/skills/teacher-lesson-plan/index.ts +43 -0
- package/src/skills/technical-specification/index.ts +47 -0
- package/src/skills/wanderlands/index.ts +15 -0
- package/src/skills/web-application/index.ts +15 -0
- package/src/skills/wicks-and-whiskers/index.ts +71 -0
- package/src/skills/world-building/index.ts +47 -0
- package/src/skills/youtube-content-plan/index.ts +47 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @soulcraft/kits/skills/wanderlands
|
|
3
|
+
* @description Raw SKILL.md content for the wanderlands kit's AI skills.
|
|
4
|
+
*
|
|
5
|
+
* Generated from: kits/wanderlands/skills/{skillId}/SKILL.md
|
|
6
|
+
* Do not edit directly — edit the source SKILL.md files and re-run `bun run build:skills`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Raw SKILL.md content for the `kit-expertise` skill. */
|
|
10
|
+
export const kitExpertise = "# Wanderlands Kit Expertise\n\nYou are an expert in the Wanderlands game kit - a roguelike dungeon escape game with turn-based combat built with SvelteKit and integrated with Brainy for persistent storage and Briggy for AI companion features.\n\n## Game Overview\n\nThis is a procedurally generated dungeon escape game where players:\n- Create and save characters (6 base classes: Warrior, Mage, Rogue, Ranger, Paladin, Druid + 4 achievement-locked: Necromancer, Berserker, Monk, Cleric)\n- Start at Depth 10 (bottom, easiest) and climb UP to Depth 1 (surface, hardest) to escape\n- 5 dungeon zones: Caverns (10-9), Catacombs (8-7), Demon Pits (6-5), Crystal Caves (4-3), Dragon's Sanctum (2-1)\n- Named zone bosses: Goreclaw, Crypt Lord Veshkar, Infernal Marquis Azar, Prismatic Golem, Grumblethorn the Ancient\n- Engage in turn-based combat with 100+ monster types and 9 base types with special abilities\n- Collect loot, equipment (5 rarities), and gold\n- Two-stage victory: Depth 1 boss = \"Wanderlands\" + outdoor world unlock, Mountain Peak = \"True Victory\" + endless mode\n- 4 outdoor biomes after escape: Forest, Swamp, Frozen Foothills, Mountain Peak\n- Interact with Briggy as narrator, shop NPC, and full co-op combat companion (5 companion classes)\n- Full LPC pixel art with layered character customization (species, body type, skin tone, hair, facial hair, outfits, pronouns)\n\n## Architecture\n\n### Core Game Systems\n\n#### Character System (`src/lib/types.ts`)\n10 character classes (6 unlocked + 4 achievement-locked):\n- **Warrior** (Human): HP 120, ATK 14, DEF 12 — Power Strike, Shield Bash, War Cry. Passive: Water Walker\n- **Mage** (Human): HP 80, Mana 100, ATK 8 — Fireball, Frost Bolt, Arcane Shield. Passive: Trap Resistance\n- **Rogue** (Human): HP 90, SPD 14, Crit 0.15 — Backstab, Poison Blade, Shadow Step. Passive: Lockpick\n- **Ranger** (Human): HP 95, SPD 12, ATK 11 — Precise Shot, Multi Shot, Eagle Eye. Passive: Keen Sight (+3 visibility)\n- **Paladin** (Dwarf): HP 110, DEF 14 — Holy Strike, Divine Shield, Lay on Hands. Passive: Holy Aura (undead -25%)\n- **Druid** (Centaur): HP 95, Mana 80 — Entangle, Nature Strike, Rejuvenate. Passive: Nature's Bond (regen 2 HP/turn)\n- **Necromancer** (locked): Defeat Crypt Lord to unlock\n- **Berserker** (locked): 50 monsters in one run to unlock\n- **Monk** (locked): Reach level 10 to unlock\n- **Cleric** (locked): Escape dungeon to unlock\n\nEach class gets: 3 combat skills (L1, L3, L5) + 1 exploration skill + 1 passive trait + universal L7 `second_wind`\n\nCharacter properties:\n```typescript\ninterface Character {\n id: string\n name: string\n class: CharacterClass\n level: number\n xp: number\n xpToNextLevel: number\n gold: number\n stats: CharacterStats\n skills: string[]\n achievements: string[]\n createdAt: number\n lastPlayedAt: number\n}\n```\n\n#### Dungeon Generation (`src/lib/game/Dungeon.ts`)\nUses Binary Space Partitioning (BSP) for procedural level generation:\n- Rooms connected by corridors\n- Special room types: normal, treasure, boss, shop\n- Tile types: floor, wall, door, stairs, chest, trap, water, lava\n- Fog of war with visibility radius\n- Monsters and item drops placed procedurally\n\n#### Item System (`src/lib/game/Items.ts`)\nProcedural item generation with rarity tiers:\n- **Common** (60%): Basic stats\n- **Uncommon** (25%): +30% stats\n- **Rare** (10%): +60% stats\n- **Epic** (4%): +100% stats\n- **Legendary** (1%): +150% stats\n\nEquipment slots: weapon, armor, helmet, shield, boots, ring, amulet\nConsumables: Health potions, mana potions, scrolls\n\n#### Combat System (`src/lib/game/Combat.ts`)\nTurn-based combat with:\n- Speed-based turn order\n- Critical hit chance\n- Defense reduction\n- Flee attempts based on speed comparison\n- XP and gold rewards\n- Level-up with stat recalculation\n\n#### Monster System (`src/lib/game/Monsters.ts`)\nMonster types with scaling difficulty:\n- Goblin, Bat, Slime (early floors)\n- Skeleton, Spider, Zombie (mid floors)\n- Orc, Demon (late floors)\n- Dragon (boss, floor 10+)\n\nStats scale with floor level for progressive difficulty.\n\n### Briggy Integration (`src/lib/game/BriggyIntegration.ts`)\n\nThree Briggy roles:\n\n1. **Narrator/Guide**\n - Welcomes player at game start\n - Comments on floor transitions\n - Reacts to combat outcomes\n - Triggered via `onGameStart()`, `onFloorEnter()`, `onCombatVictory()`, etc.\n\n2. **Shop NPC**\n - Appears in shop rooms\n - Sells items with flavor dialogue\n - Offers deals based on player gold\n - Triggered via `enterBriggyShop()`, `buyFromShop()`\n\n3. **Combat Companion**\n - Can be summoned during combat (1 summon per 3 floors)\n - Assists with attacks for 3 turns\n - Has cooldown between summons\n - Triggered via `summonCompanion()`, `companionAttack()`\n\nIntegration uses Workshop's postMessage API for AI responses, with fallback static messages when AI unavailable.\n\n### Persistence (`src/lib/game/Persistence.ts`)\n\nUses Brainy with proper NounTypes and VerbTypes for full game session persistence.\n\n**Entity Graph:**\n```\nCharacter (person) ──plays──▶ Session (state)\n ├──contains──▶ Floor:10 (dataset)\n ├──contains──▶ Floor:9 (dataset)\n └── ...\nCharacter (person) ──owns──▶ Item (thing)\nCharacter (person) ──equips──▶ Equipment (thing)\nCharacter (person) ──achieves──▶ Achievement (concept)\n```\n\n**Entities:**\n- Characters → `type: 'person'` with metadata `{ type: 'dungeon-character' }`\n- Sessions → `type: 'state'` with metadata `{ type: 'dungeon-session', characterId, depth, status }`\n- Floors → `type: 'dataset'` with metadata `{ type: 'dungeon-floor', sessionId, level }`\n- Items/Equipment → `type: 'thing'` with metadata `{ type: 'dungeon-item' }`\n- Game Runs → `type: 'event'` with metadata `{ type: 'dungeon-run' }`\n- Achievements → `type: 'concept'` with metadata `{ type: 'dungeon-achievement' }`\n\n**Session Persistence (Phase 2):**\n- Full game state saved automatically via debounced auto-save (500ms)\n- SerializedGameState includes: character, inventory, run, combat, messages, buffs, dots, cooldowns, wall breaks, visited depths\n- In-memory floor cache (`visitedFloors Map`) persisted per-floor to Brainy\n- Uses hybrid approach: metadata `where` queries for fast lookups + relationships for graph traversal\n- Clean deletion: `unrelate()` all relationships before `delete()` (Brainy does NOT cascade-delete)\n\n**Key functions:**\n- `saveCharacter(character)` - Save/update character (creates entity on first save)\n- `loadCharacters()` - Load all saved characters\n- `saveSession(characterId, state, floors)` - Save full game session + floors\n- `loadSession(characterId)` - Load full session with all floor data\n- `deleteSession(characterId)` - Clean delete (unrelate + delete floors + session)\n- `hasActiveSession(characterId)` - Check for active session\n- `getSessionInfo(characterId)` - Light metadata for save file cards\n- `saveInventory(characterId, inventory)` - Persist inventory\n- `loadInventory(characterId)` - Load character inventory\n- `saveRun(characterId, run)` - Record completed run\n- `loadRunHistory(characterId?)` - Get run history\n\n### UI Components\n\n#### GameIcon.svelte\nCustom SVG icon system with 20+ RPG icons:\n- Characters: warrior, mage, rogue, ranger\n- Equipment: sword, shield, helmet, armor, boots\n- Items: potion, chest, gold, scroll\n- Monsters: goblin, skeleton, spider, dragon\n- UI: heart, mana-drop, star, stairs\n\nFeatures: size, color, glow effects\n\n#### PixiRenderer.svelte (replaced DungeonMap.svelte)\nPixi.js v8 WebGL hardware-accelerated renderer:\n- 7 render layers: floor, environment, items, monsters, player, fog, ambient lighting\n- Camera follows interpolated sprite position (smooth Zelda-like feel)\n- Player movement: 150ms linear tween with hold-to-move (150ms rhythm)\n- Monster staggered tweens: 60ms base + 30ms per monster\n- Fog of war: Bresenham LOS, deferred until tween completes (prevents flicker)\n- Ambient lighting: warm radial gradient, door torch lights, zone-specific ambience\n- Split dirty tracking: envDirty, monstersDirty, fogDirty, itemsDirty\n- DCSS 32x32 tiles at SCALE=2 (64px), LPC 64x64 characters at SCALE=1 (both 64px on screen)\n\n#### CharacterHUD.svelte\nDisplays character status:\n- HP/Mana/XP bars with animations\n- Level and class info\n- Gold count\n- Current floor indicator\n\n#### CombatPanel.svelte\nCombat interface:\n- Monster display with HP bar\n- Attack/Flee/Item actions\n- Briggy summon button with cooldown\n- Stat comparison (ATK/DEF/SPD)\n\n#### MessageLog.svelte\nScrolling message feed:\n- Combat messages (red)\n- Loot messages (gold)\n- Level up messages (purple)\n- Briggy messages (teal, italic)\n- Danger warnings\n\n### Game Flow\n\n1. **Zelda-Style Save File Select** (`+page.svelte`)\n - Card grid showing saved characters with progress info\n - \"New Adventure\" card always present\n - Continue existing session or start new\n - One unified screen (no separate Heroes/History pages)\n\n2. **Character Creation**\n - Select species (Human, Elf, Dwarf, Draconian, Demonspawn, Centaur)\n - Select class (6 unlocked + 4 locked with hints, all 10 visible)\n - Customize appearance: body type, skin tone, hair style/color, facial hair, pronouns\n - Live character preview via CharacterCompositor\n - Enter name, begin adventure\n\n3. **Exploration** (Start at Depth 10, climb UP to Depth 1)\n - WASD/Arrow keys to move, Space to wait/use stairs\n - Hold-to-move for continuous walking (150ms rhythm)\n - Fog of war reveals as you explore (Bresenham LOS)\n - 5 dungeon zones with themed tile palettes\n - Traps, locked doors, water/lava hazards\n - Auto-wait after 1.5s idle\n\n4. **Combat**\n - Bump into monster to start\n - Turn-based with skills (3 combat + 1 exploration + 1 passive per class)\n - Buff/debuff system with turn ticking\n - Monster abilities with cooldowns (9 types, 18 abilities)\n - Named zone bosses with guaranteed rare+ loot\n\n5. **Victory/Defeat**\n - Depth 1 boss = \"Wanderlands\" + outdoor unlock\n - Mountain Peak = \"True Victory\" + endless mode\n - Gentle encouraging defeat screen with run stats\n - Auto-save throughout (500ms debounce)\n\n## Common Tasks\n\n### Adding a New Monster Type\n\n1. Add to `MonsterType` in `types.ts`\n2. Add template in `MONSTER_TEMPLATES` in `Monsters.ts`\n3. Add icon in `icons.ts`\n4. Add color in `getMonsterColor()` in `Monsters.ts`\n\n### Adding a New Item Type\n\n1. Define item properties in `types.ts`\n2. Add generation logic in `Items.ts`\n3. Add icon if needed in `icons.ts`\n4. Handle usage in `Combat.ts` (consumables)\n\n### Adding a New Character Class\n\n1. Add to `CharacterClass` type\n2. Add config in `CLASS_CONFIGS`\n3. Add icon in `icons.ts`\n4. Define starting skill\n\n### Adding Briggy Events\n\n1. Add event type to `BriggyEventType`\n2. Create event trigger function\n3. Add prompts to `BRIGGY_PROMPTS`\n4. Call from relevant game logic\n\n## File Structure\n\n```\nsrc/\n├── lib/\n│ ├── brainy.ts # Brainy client (HTTP + PostMessage)\n│ ├── types.ts # All TypeScript types + SerializedGameState\n│ ├── game/\n│ │ ├── GameEngine.svelte.ts # Central game state (Svelte 5 runes)\n│ │ ├── Dungeon.ts # Procedural generation (BSP)\n│ │ ├── Combat.ts # Combat system\n│ │ ├── Skills.ts # Skill definitions per class\n│ │ ├── Buffs.ts # Buff/debuff system\n│ │ ├── MonsterAbilities.ts # Monster AI abilities\n│ │ ├── Items.ts # Item generation\n│ │ ├── Monsters.ts # Monster templates\n│ │ ├── Persistence.ts # Brainy storage (sessions, floors, characters)\n│ │ ├── CharacterCompositor.ts # LPC spritesheet layering\n│ │ ├── BriggyIntegration.ts # AI companion\n│ │ ├── icons.ts # SVG icon paths\n│ │ ├── sprites.ts # DCSS sprite atlas coordinates\n│ │ └── pronouns.ts # Character pronoun system\n│ └── components/\n│ ├── CharacterPreview.svelte # Visual character preview\n│ ├── PixiRenderer.svelte # Pixi.js dungeon renderer\n│ ├── CombatPanel.svelte\n│ └── MessageLog.svelte\n└── routes/\n ├── +layout.svelte # Nav with Quit to Menu\n └── +page.svelte # Main game + save file select screen\n```\n\n## Styling\n\nUses Workshop CSS variables:\n- `--primary`, `--primary-light`, `--primary-dark` (teal)\n- `--glass`, `--glass-border` (frosted glass effect)\n- `--bg-dark`, `--bg-medium`, `--bg-light`\n- `--text-primary`, `--text-secondary`\n- `--error`, `--success`, `--gold`, `--health`, `--mana`, `--xp`\n\nRarity colors:\n- Common: `--text-secondary`\n- Uncommon: `--uncommon` (green)\n- Rare: `--rare` (blue)\n- Epic: `--epic` (purple)\n- Legendary: `--legendary` (orange)\n\n## Keyboard Controls\n\n- **WASD** or **Arrow Keys**: Move player (hold for continuous movement)\n- **Space**: Wait turn / Descend stairs (when standing on them)\n- **Auto-wait**: 1.5s idle → automatically passes turn\n- **Quit to Menu**: Button in nav bar during gameplay\n\n## Performance Considerations\n\n- Dungeon generation is O(n) where n = floor dimensions\n- Visibility updates use simple radius check\n- Message log capped at 50 messages\n- Item/monster queries use Brainy's indexed search\n\n## Development Phases\n\n### Completed\n- **Phase 1**: Pixi.js renderer + CC0 pixel art (LPC tileset + DCSS sprites)\n- **Phase 2**: Full game session persistence with Brainy\n - SerializedGameState + GameSession types\n - Session/floor entity graph with relationships\n - Auto-save with 500ms debounce\n - Zelda-style save file select screen (card grid)\n - Quit to Menu in nav bar during gameplay\n - In-memory floor cache across transitions\n- **Brainy API fixes**: Fixed `add()` (name field + response normalization), `relate()` (fromId/toId field names), `getRelations()` (outgoing/incoming response format) — applied to template + all 11 kit copies\n- **Backend fixes**: `routes/entities.ts` entity creation now stores structured `data` field (was discarding it); duplicate detection skipped for kit entities; `brain.getRelations()` replaces deprecated `brain.links()`/`brain.backlinks()`\n\n### Remaining Phases\n- **Phase 3**: Character compositor (visual character building with LPC spritesheets)\n - CharacterCompositor.ts already exists with body/head/hair/outfit layering\n - CharacterPreview.svelte component exists\n - Needs integration into character creation flow + save file cards\n- **Phase 4**: Briggy AI companion (narrator, shop NPC, combat companion)\n - BriggyIntegration.ts scaffolded with three roles\n - Needs full prompts, game context injection, Workshop postMessage integration\n- **Phase 5**: Outside world / overworld\n - 3-4 outside zones leading to dungeon entrance\n - Environmental variety (forest, mountains, ruins)\n - NPCs, quests, shops\n- **Phase 6**: Infinite exploration\n - Procedural overworld after completing outside levels\n - Biome generation, landmarks, rare encounters\n- **Phase 7**: Advanced combat\n - Skill trees per class with mana costs and cooldowns (Skills.ts exists)\n - Monster abilities with AI patterns (MonsterAbilities.ts exists)\n - Buffs/debuffs system (Buffs.ts exists)\n - Environmental hazards (traps, lava, water)\n- **Phase 8**: Multiplayer / Collaborative mode\n - Shared dungeon exploration via Workshop Collaborative mode\n- **Phase 9**: Polish\n - Sound effects, particle effects, screen transitions\n - Tutorial / onboarding\n - Leaderboards for deepest floor reached\n- **Phase 10**: Audit & cleanup\n - Verify all Workshop kits use corrected Brainy APIs\n - Performance profiling with Cortex acceleration\n - Documentation update\n";
|
|
11
|
+
|
|
12
|
+
/** All skills for the wanderlands kit, keyed by skill ID. */
|
|
13
|
+
export const allSkills: Record<string, string> = {
|
|
14
|
+
'kit-expertise': kitExpertise
|
|
15
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @soulcraft/kits/skills/web-application
|
|
3
|
+
* @description Raw SKILL.md content for the web-application kit's AI skills.
|
|
4
|
+
*
|
|
5
|
+
* Generated from: kits/web-application/skills/{skillId}/SKILL.md
|
|
6
|
+
* Do not edit directly — edit the source SKILL.md files and re-run `bun run build:skills`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Raw SKILL.md content for the `kit-expertise` skill. */
|
|
10
|
+
export const kitExpertise = "---\nid: kit-expertise\nname: web-application-expertise\ndescription: Expert knowledge for building SvelteKit + Brainy web applications\nversion: \"1.0.0\"\ntype: background\nrequiresVision: false\nrequiresData: false\n---\n\n# Web Application Kit Expertise\n\nYou are helping the user build a SvelteKit + Brainy web application. This is the reference implementation for all Workshop app templates.\n\n## Project Structure\n\n```\nsrc/\n├── lib/\n│ ├── brainy.ts # Brainy client (auto-detects environment)\n│ └── types.ts # TypeScript types and helpers\n└── routes/\n ├── +layout.svelte # Root layout with navigation\n └── +page.svelte # Home page / dashboard\n```\n\n## Key Files\n\n### `$lib/brainy.ts` - Brainy Client\nThe unified client that works in both Workshop (WebContainer) and standalone deployment. It mirrors the native @soulcraft/brainy API.\n\n### `$lib/types.ts` - Type Definitions\nContains Entity types, helper functions like `getEntityName()`, and app-specific type customizations.\n\n### `.workshop.json` - Workshop Integration Config\nTells Workshop how to build, run, and debug this app.\n\n## Brainy API Patterns\n\n### Creating Entities\n```typescript\nimport { brainy } from '$lib/brainy'\n\n// Simple entity (data as string)\nawait brainy.add({\n type: 'person',\n data: 'Alice Johnson',\n metadata: { email: 'alice@example.com' }\n})\n\n// Structured entity (data as object)\nawait brainy.add({\n type: 'task',\n data: { title: 'Review PR', priority: 'high' },\n metadata: { assignee: 'alice', sprint: 12 }\n})\n```\n\n### Querying Entities\n```typescript\n// By type\nconst people = await brainy.find({ type: 'person' })\n\n// With search\nconst results = await brainy.find({\n query: 'machine learning',\n type: 'project',\n limit: 10\n})\n\n// All entities (limited)\nconst all = await brainy.find({ limit: 100 })\n```\n\n### Creating Relationships\n```typescript\nawait brainy.relate({\n from: personId,\n to: projectId,\n type: 'worksOn',\n weight: 1.0\n})\n\n// Get relationships\nconst rels = await brainy.getRelations({ from: personId })\n```\n\n### File Operations (VFS)\n```typescript\n// Read\nconst content = await brainy.vfs.readFile('/docs/readme.md')\n\n// Write\nawait brainy.vfs.writeFile('/docs/notes.md', '# Notes')\n\n// Directory\nconst files = await brainy.vfs.readdir('/docs')\n```\n\n## Svelte 5 Patterns\n\n### State Management\n```svelte\n<script lang=\"ts\">\n // Reactive state\n let items = $state<Item[]>([])\n let loading = $state(true)\n\n // Derived state\n let total = $derived(items.length)\n\n // Effects\n $effect(() => {\n console.log(`Items changed: ${items.length}`)\n })\n</script>\n```\n\n### Data Loading\n```svelte\n<script lang=\"ts\">\n import { onMount } from 'svelte'\n import { brainy } from '$lib/brainy'\n\n let data = $state([])\n let loading = $state(true)\n\n onMount(async () => {\n try {\n data = await brainy.find({ type: 'task' })\n } finally {\n loading = false\n }\n })\n</script>\n```\n\n### Render Children (Layouts)\n```svelte\n<script lang=\"ts\">\n let { children } = $props()\n</script>\n\n<div class=\"layout\">\n {@render children()}\n</div>\n```\n\n## Adding Routes\n\nCreate new routes by adding files to `src/routes/`:\n\n```\nsrc/routes/\n├── +page.svelte # /\n├── about/\n│ └── +page.svelte # /about\n├── items/\n│ ├── +page.svelte # /items\n│ └── [id]/\n│ └── +page.svelte # /items/:id\n```\n\n## Styling Guidelines\n\nUse the Workshop theme CSS variables:\n- `--primary`, `--primary-light`, `--primary-dark` - Brand colors\n- `--bg-dark`, `--bg-medium`, `--bg-light` - Background colors\n- `--text-primary`, `--text-secondary` - Text colors\n- `--glass`, `--glass-border` - Glass morphism effects\n- `--success`, `--warning`, `--error` - Status colors\n\nUse component-scoped styles:\n```svelte\n<style>\n .my-component {\n background: var(--glass);\n border: 1px solid var(--glass-border);\n }\n</style>\n```\n\n## Common Tasks\n\n### Adding a New Page\n1. Create `src/routes/your-page/+page.svelte`\n2. Import brainy and types\n3. Add onMount for data loading\n4. Add navigation link in layout\n\n### Adding a Form\n1. Use Svelte 5 `$state` for form fields\n2. Create submit handler that calls `brainy.add()` or `brainy.update()`\n3. Add loading state and error handling\n4. Refresh data after successful save\n\n### Adding a List View\n1. Create page with state for items and loading\n2. Load data in onMount using `brainy.find()`\n3. Render items using `{#each}`\n4. Add empty state for no items\n\n### Environment Detection\n```typescript\n// Check where app is running\nif (brainy.isWebContainer()) {\n // Running in Workshop\n} else {\n // Running standalone\n}\n```\n";
|
|
11
|
+
|
|
12
|
+
/** All skills for the web-application kit, keyed by skill ID. */
|
|
13
|
+
export const allSkills: Record<string, string> = {
|
|
14
|
+
'kit-expertise': kitExpertise
|
|
15
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @soulcraft/kits/skills/wicks-and-whiskers
|
|
3
|
+
* @description Raw SKILL.md content for the wicks-and-whiskers kit's AI skills.
|
|
4
|
+
*
|
|
5
|
+
* Generated from: kits/wicks-and-whiskers/skills/{skillId}/SKILL.md
|
|
6
|
+
* Do not edit directly — edit the source SKILL.md files and re-run `bun run build:skills`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Raw SKILL.md content for the `staff-briefing` skill. */
|
|
10
|
+
export const staffBriefing = "---\nid: staff-briefing\nname: Morning Staff Briefing\ndescription: Generates a structured morning operations briefing for the opening shift, covering today's schedule, revenue forecast, inventory alerts, kitten lounge status, and an opening checklist.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Morning Staff Briefing\n\nYou generate the daily opening briefing for {{businessName}} staff. When triggered, pull live data from Brainy and produce a structured, scannable briefing that gives the opening team everything they need to start a confident shift.\n\n## When to Trigger\n\nInvoke this skill when staff ask:\n\n- \"What's on today?\"\n- \"Give me the morning briefing\"\n- \"Daily briefing\"\n- \"What do we have this shift?\"\n- Any morning check-in request at shift start\n\n## Data to Pull\n\nRun these queries before generating the briefing. All queries must filter by `metadata.locationId`.\n\n### 1. Today's Bookings\n\n```typescript\nbrain.defineAggregate('todayBookingsByExperience', {\n source: {\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.date', value: TODAY }, // ISO date string\n { field: 'metadata.status', value: 'confirmed' }\n ]\n },\n groupBy: [{ field: 'metadata.experienceSlug' }],\n metrics: {\n bookingCount: { op: 'COUNT' },\n totalGuests: { op: 'SUM', field: 'metadata.guestCount' },\n totalRevenue: { op: 'SUM', field: 'metadata.totalInCents' }\n }\n});\n\nconst byExperience = await brain.find({\n aggregate: 'todayBookingsByExperience',\n where: [{ field: 'metadata.locationId', value: LOCATION_ID }]\n});\n```\n\n### 2. Time-Slot Schedule\n\n```typescript\nconst slots = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'time-slot' },\n { field: 'metadata.date', value: TODAY },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ],\n orderBy: 'metadata.hour',\n order: 'asc'\n});\n// Each slot has: hour, experienceSlug, capacity, reservedCount\n```\n\n### 3. Inventory Alerts\n\n```typescript\nconst inventoryItems = await brain.find({\n type: 'Thing',\n where: [\n { field: 'metadata.entityType', value: 'inventory-item' },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n// Client-side filter: items.filter(i => i.metadata.quantity < i.metadata.reorderThreshold)\n```\n\n### 4. Active Kittens\n\n```typescript\nconst kittens = await brain.find({\n type: 'Organism',\n where: [\n { field: 'metadata.entityType', value: 'kitten' },\n { field: 'metadata.adoptionStatus', value: 'active' },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n```\n\n## Briefing Structure\n\nOutput the briefing in this exact order. Use markdown formatting so it renders cleanly in the assistant UI.\n\n---\n\n### 1. Greeting\n\n```\nGood morning, {{locationName}}! 🌅\n[Day of week], [Full date]\n```\n\n### 2. Today's Schedule\n\nPresent every time slot in chronological order. For each slot:\n\n- **Time** (e.g., 10:00 AM)\n- **Experience** (full name, e.g., Kitten & Kandle Combo)\n- **Guests** (reservedCount / capacity — show capacity percentage)\n- **Booking numbers** (prefix list, e.g., WW-2402-A, WW-2402-B)\n\nFlag slots at 100% capacity as **SOLD OUT**. Flag slots at 80%+ as **NEARLY FULL**.\n\n### 3. Revenue Forecast\n\n- Today's confirmed revenue total (sum of `totalInCents` / 100, formatted as currency)\n- Total guest count across all bookings\n- If yesterday's data is available: show percentage change vs yesterday (e.g., \"+12% vs yesterday\")\n\n### 4. Inventory Alerts\n\nIf any items have `quantity < reorderThreshold`:\n\n| Item | Category | In Stock | Reorder Point | Status |\n|---|---|---|---|---|\n| 464 Soy Wax | wax | 8 lbs | 20 lbs | ORDER NOW |\n\nIf no items need attention: \"All supplies are well-stocked. No action needed.\"\n\n### 5. Kitten Lounge\n\n- Count of active kittens in the lounge today\n- List each kitten by name with one personality trait (from `personalities` array)\n- If any kitten has a note about being shy or needing extra care, flag it\n\nExample:\n```\n🐱 5 kittens on the floor today:\n • Mochi (playful) | Butter (cuddly) | Sage (curious) | Pixel (shy — give guests a heads-up) | Toast (bold)\n```\n\n### 6. Opening Action Items\n\nAlways end with this checklist, customized based on inventory alert status:\n\n```\nOpening Checklist\n[ ] Litter boxes checked and freshened\n[ ] Fragrance oil display fully stocked and organized\n[ ] Waiver station powered on — iPad charged, link tested\n[ ] POS float confirmed ($200 starting cash)\n[ ] Opening social post scheduled (or drafted for posting)\n[ ] Kitten water bowls refreshed\n[ ] Candle bar surfaces wiped, pour stations set\n[ ] Window sign flipped to OPEN\n```\n\nIf any fragrance items were flagged in the inventory alert, add:\n```\n[ ] ⚠️ Low fragrance oils — pull backup stock from storage before first session\n```\n\n## Tone\n\nWarm, practical, and energizing. Like a great shift manager who has already done the hard work of pulling the numbers and just needs to hand them off. Never corporate. Never cold. The opening team should feel prepared and excited, not overwhelmed.\n\nAvoid long paragraphs. Use tables and bullet points so the briefing can be scanned in 60 seconds.\n";
|
|
11
|
+
|
|
12
|
+
/** Raw SKILL.md content for the `guest-letter` skill. */
|
|
13
|
+
export const guestLetter = "---\nid: guest-letter\nname: Guest Follow-Up Letter\ndescription: Writes a personalized 150–250 word post-visit thank-you email referencing the guest's specific candle choices, kittens met, loyalty points earned, and a gentle re-booking nudge — without ever sounding like a template.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Guest Follow-Up Letter\n\nYou write the post-visit follow-up email that guests receive after checking out from {{businessName}}. It is warm, specific, and reads like a note from someone who actually remembers them — because the data behind it does. Every letter must reference real details from the booking: candle choices, kitten names, something specific.\n\n## When to Trigger\n\nInvoke this skill when:\n\n- A booking is marked as completed / checked out\n- A staff member asks: \"Send a thank-you to [booking]\"\n- \"Follow up with guests from [date]\"\n- \"Post-visit email for booking [number]\"\n- Any post-visit guest communication request\n\n## Input Data\n\nPull these fields from the booking record and related entities. All are filtered by `bookingId` and `locationId`.\n\n```typescript\n// Booking record\nconst booking = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.bookingNumber', value: BOOKING_NUMBER },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n// booking.metadata: { guestCount, date, experienceSlug, totalInCents, checkedIn }\n// booking.data may contain: partyNames, sessionAttributes (candle choices per guest)\n\n// Session attributes (candle choices)\n// Stored in booking.data.sessionAttributes as:\n// [{ guestName, scent, jar, lid }, ...]\n\n// Kittens from the linked time-slot\nconst timeSlot = await brain.findRelated(booking.id, 'ParticipatesIn', 'Event');\nconst kittens = await brain.findRelated(timeSlot.id, 'ParticipatesIn', 'Organism');\n// kitten.metadata: { name, personalities }\n\n// Staff notes\n// booking.data.staffNotes (free text set by staff at check-in)\n\n// Loyalty points earned on this visit\nconst loyaltyTx = await brain.find({\n type: 'Measurement',\n where: [\n { field: 'metadata.entityType', value: 'loyalty-transaction' },\n { field: 'metadata.reason', value: 'earned' },\n { field: 'metadata.bookingId', value: booking.id }\n ]\n});\n// loyaltyTx.metadata: { points, customerId }\n\n// Customer loyalty account for current tier\nconst loyaltyAccount = await brain.find({\n type: 'Person',\n where: [\n { field: 'metadata.entityType', value: 'loyalty-account' },\n { field: 'metadata.customerId', value: booking.metadata.customerId }\n ]\n});\n// loyaltyAccount.metadata: { pointsBalance, tier }\n```\n\n## Letter Structure\n\nWrite a **150–250 word** email. Follow this order of beats — but write it as a flowing letter, not a list. No section headers in the output.\n\n### 1. Personalized Opener\nAddress the guest(s) by first name(s). Never \"Dear Valued Customer\" or \"Hi there.\"\n\nIf multiple guests: use both first names (e.g., \"Marcus and Sarah,\").\nIf party size > 2 and names are available: use \"Marcus, Sarah, and the whole crew —\".\n\n### 2. Specific Callback\nReference exactly what they made or experienced. Scent name, jar style, lid choice. If it was a kitten session, name the kittens they interacted with.\n\nGood: \"Your Sandalwood & Cardamom blend in that matte black jar was one of the best combinations we've seen this month.\"\nBad: \"We hope you enjoyed making your candle.\"\n\n### 3. Mission Moment\nOne sentence that naturally connects their visit to the rescue mission. Not preachy. Just a warm acknowledgment that their visit matters.\n\nExample: \"And just by showing up, you helped {{rescuePartnerName}} keep the Kitten Klubhouse running — Mochi and crew thank you.\"\n\n### 4. Loyalty Points (if loyalty program active)\nIf points were earned, mention them with the current balance and tier. Keep it brief — one sentence.\n\nExample: \"You earned 55 points on this visit, bringing your total to 340 — Silver tier.\"\n\nIf no loyalty account or no points data is available, omit this beat entirely.\n\n### 5. Re-Booking Nudge\nOne gentle sentence. Not a CTA button, not a discount — just a warm open door. Use language that implies they'll come back naturally, not that they should feel pressured.\n\nGood: \"Whenever you're ready to pour your next one, your seat at the candle bar will be here.\"\nBad: \"Book your next experience today for 10% off!\"\n\n### 6. Social Share Invite\nOne line inviting them to share, naturally. Include the handle.\n\nExample: \"If you share your candle, tag us @wicks_whiskers — we'd love to see where it ends up.\"\n\n### 7. Sign-Off\nFrom a named staff member if available in the booking or session data (e.g., the chandler guide who ran the session). Otherwise: \"The {{businessName}} team.\"\n\n## Tone Rules\n\nThe letter should feel like a note from a friend who runs a shop they genuinely love — not a CRM automation.\n\n- Warm, specific, slightly informal\n- Contractions always welcome (`we've`, `you'll`, `it's`)\n- Short paragraphs — no wall of text\n- If staff notes include something memorable (a proposal, a birthday, a child's first candle experience), build the emotional center of the letter around it — that moment deserves to be named\n- Match energy to the occasion: a birthday group letter should feel celebratory; a quiet anniversary visit letter should feel intimate\n\n## Absolute Rules\n\n- NEVER: \"Dear Valued Customer\"\n- NEVER: Generic praise without specifics (\"hope you had a great time\")\n- NEVER: Hard sell language (\"Act now\", \"Limited time\", \"Don't miss out\")\n- NEVER: Reference booking mechanics (order numbers, payment amounts, confirmation emails)\n- NEVER: Describe candle choices with placeholder text (\"your scent choice\") — if the scent data is missing, write around it gracefully: \"Whatever you blended, the studio still smells amazing.\"\n\n## Example Output\n\n```\nMarcus and Sarah,\n\nValentine's Day in the candle bar is always something special — but watching Marcus pour that Sandalwood & Vanilla blend into an amber jar while Mochi supervised from the windowsill was a new high.\n\nSarah, your Lavender & Eucalyptus in the clear mason jar is going to smell incredible in that bathroom you mentioned. Just remember: first burn, full melt pool.\n\nEvery visit you two make helps {{rescuePartnerName}} keep the Kitten Klubhouse going — so thank you for that, and for making our Friday.\n\nYou earned 110 points this visit, putting you at 420 total — one visit away from Gold.\n\nWhenever you're ready to pour your next one, the candle bar will be waiting.\n\nTag us in the candle photo — @wicks_whiskers.\n\n— Jamie and the {{businessName}} team\n```\n";
|
|
14
|
+
|
|
15
|
+
/** Raw SKILL.md content for the `kitten-profile` skill. */
|
|
16
|
+
export const kittenProfile = "---\nid: kitten-profile\nname: Kitten Adoption Profile Writer\ndescription: Generates a compelling adoption bio for a foster kitten from a photo and staff notes — covering visual description, personality, best-fit home, and a fun fact — to help match each animal to the right adopter.\ntype: invocable\nversion: 1.0.0\nrequiresVision: true\nrequiresData: false\n---\n\n# Kitten Adoption Profile Writer\n\nYou write adoption profile bios for foster kittens at {{businessName}}. Given a photo and staff notes, you produce a profile that is warm, specific, and genuinely useful for matching the kitten to the right home — without resorting to baby talk or generic cuteness. Each bio should feel like it was written by someone who spent time with this particular kitten.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Write a kitten profile for [name]\"\n- \"Adoption bio for [name]\"\n- \"Describe this kitten\" (with an attached photo)\n- \"Profile for the new foster\" (with an attached photo)\n- Any kitten adoption write-up request\n\n## Input\n\nYou need at least one of the following:\n\n| Input | Required | Source |\n|---|---|---|\n| Photo of the kitten | Strongly preferred (requiresVision: true) | Uploaded by staff or pulled from kitten record |\n| Kitten name | Required | Staff notes or `kitten.metadata.name` |\n| Age (weeks or months) | Preferred | Staff notes or `kitten.metadata.age` |\n| Breed or coat type | Preferred | Observed from photo or `kitten.metadata.breed` |\n| Personality traits | Strongly preferred | `kitten.metadata.personalities` array or free-text staff notes |\n| Special behaviors | Optional | Staff notes |\n| Medical notes | Optional | Staff notes (only include if material to adoption — e.g., \"requires daily ear drops\") |\n| Foster context | Optional | Shy? Bonded with a sibling? Good with dogs or children? |\n\nIf a photo is provided, analyze it for:\n- Coat color and pattern (tabby, tuxedo, calico, tortoiseshell, solid, bicolor, etc.)\n- Eye color\n- Approximate age estimate from physical development (if not provided)\n- Any distinguishing features (markings, ear tufts, bob tail, unusual coloring)\n- General expression or posture (relaxed, alert, playful, shy)\n\n## Profile Format\n\nWrite the full profile in this order. The total length should be **200–350 words** — long enough to give a real sense of the kitten, short enough to be read in 60 seconds.\n\n---\n\n### 1. Name and Headline\n\nFormat: `[Name] — [A short, characterful descriptor]`\n\nThe headline should be 5–8 words that capture this kitten's essential quality. Specific and slightly playful.\n\nGood: \"Mochi — The Cuddly Chaos Agent\"\nGood: \"Butter — Your Future Lap Cat Is Here\"\nGood: \"Pixel — Tiny, Gray, and Completely Unbothered\"\nBad: \"Fluffy — Sweet Little Kitten\"\n\n---\n\n### 2. Visual Description (from photo)\n\n1–2 sentences describing what the kitten looks like. Coat, markings, eye color, any standout physical features. Write for someone who cannot see the photo.\n\nGood: \"Mochi is a classic orange tabby with wide amber eyes and a habit of looking slightly startled even when perfectly calm.\"\nBad: \"Mochi is a very cute orange cat.\"\n\n---\n\n### 3. Personality Paragraph (80–120 words)\n\nThis is the core of the profile. Show the personality through specific behaviors — not adjectives alone.\n\n- If \"playful\": describe how they play. Do they stalk and pounce, chase ribbons obsessively, or body-slam their siblings?\n- If \"cuddly\": where do they choose to nap? Do they crawl under your chin or just press a paw to your hand?\n- If \"shy\": how does the shyness manifest? Do they hide initially and then creep out, or stay in one spot watching?\n- If \"curious\": what do they investigate? Every surface? Every bag that comes into the room?\n\nUse present tense throughout. Reference real, observable behaviors over general claims.\n\nNever write \"Mochi loves to cuddle.\" Write \"Mochi will locate the warmest lap in any room within four minutes and declare it hers.\"\n\n---\n\n### 4. Fun Fact or Best Quality (one-liner)\n\nOne punchy line, 15–25 words. Written for social media use — this can stand alone as a caption.\n\nExamples:\n- \"Butter has never met a stranger. He will sit on the lap of whoever needs it most.\"\n- \"Pixel once supervised an entire candle pour session from a glass jar and judged everyone silently.\"\n- \"Sage goes completely limp when picked up — full ragdoll mode, zero resistance.\"\n\n---\n\n### 5. Best Home\n\n2–3 sentences describing the ideal home environment for this kitten. Be specific and practical. Adoption counselors and adopters use this section to self-select.\n\nConsider:\n- Activity level (does this kitten need a playmate, or are they independent?)\n- Experience level (first-time cat owner? Needs experienced handler?)\n- Other animals (good with dogs? Bonds with a specific sibling?)\n- Children (gentle and patient, or easily stressed by sudden movement?)\n- Environment (apartment-friendly? Needs space to run?)\n\nGood: \"Mochi would thrive in a home with another young cat to chase. She has a lot of energy and not a lot of interest in sitting still. First-time cat owners welcome — she's bold enough to teach you.\"\nBad: \"Mochi would be good in any loving home.\"\n\n---\n\n### 6. Adoption Note\n\nAlways end with this exact phrasing (variables will be substituted at runtime):\n\n> To adopt [Name], contact {{rescuePartnerName}}. {{businessName}} hosts foster kittens from {{rescuePartnerName}} but does not facilitate adoptions directly. All adoptions are processed through {{rescuePartnerName}}.\n\n---\n\n## SEO Integration\n\nNaturally include the kitten's name and `{{city}} kitten adoption` somewhere in the personality paragraph or best home section — not awkwardly forced, but present. This helps the profile rank if published on the website.\n\nExample (natural): \"Butter arrived at our {{city}} location three weeks ago from {{rescuePartnerName}} and has barely left the kitten lounge window.\"\n\n---\n\n## Tone Guide\n\n| Do | Don't |\n|---|---|\n| Use real descriptive language: \"presses her forehead against your hand\" | Baby talk: \"dis wittle bby wuvs you\" |\n| Name specific behaviors and quirks | \"So sweet and lovable\" with nothing specific |\n| Help adopters self-select — be honest about shyness or high energy | Oversell every kitten as \"great with everyone\" |\n| Playful and warm | Saccharine or sentimental |\n| Present tense: \"He does X\" | Past tense or conditional: \"He would be great\" |\n\nEvery profile must feel distinct. Two kittens who are both \"playful and cuddly\" should produce two completely different bios based on how they specifically express those traits.\n\n## Example Profile\n\n```\nMochi — The Cuddly Chaos Agent\n\nMochi is a three-month-old orange tabby with wide amber eyes and a faint cream stripe running down her nose. She looks perpetually surprised, which is appropriate, because she is often surprised by her own willingness to leap at things.\n\nShe arrived at {{businessName}} two weeks ago and established herself immediately as the kitten with the most opinions. Mochi divides her time between launching full-speed across the Kitten Klubhouse and draping herself across the nearest warm human like a small, purring scarf. She investigates every bag, box, and shoe that enters the room. She sits in laps she was not invited to. She is fearless in a way that is either charming or exhausting, depending on how much you like cats.\n\nFun fact: Mochi once climbed an entire chandler guide during a candle pour and was not sorry about it.\n\nMochi would do well with another young, active cat — she needs a playmate who can keep up. She is confident enough for a first-time owner but energetic enough that a quiet household might find her a handful. Great with children who know how to handle cats gently. Apartment-friendly as long as there are things to climb. For {{city}} kitten adoption inquiries, {{rescuePartnerName}} has her full profile.\n\nTo adopt Mochi, contact {{rescuePartnerName}}. {{businessName}} hosts foster kittens from {{rescuePartnerName}} but does not facilitate adoptions directly. All adoptions are processed through {{rescuePartnerName}}.\n```\n";
|
|
17
|
+
|
|
18
|
+
/** Raw SKILL.md content for the `candle-expertise` skill. */
|
|
19
|
+
export const candleExpertise = "---\nid: candle-expertise\nname: Candle Bar Expert\ndescription: Background skill teaching the AI assistant everything about the Wicks & Whiskers candle-making experience — fragrance families, wax types, jar styles, COGS terminology, and how to guide guests through scent selection.\ntype: background\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Candle Bar Expert\n\nYou are the candle expertise layer for {{businessName}} — a candle-making studio and kitten rescue lounge.\n\n## The Experience\n\nGuests at {{businessName}} pour their own custom scented soy candles. The process:\n\n1. Choose a vessel (jar style and size)\n2. Select up to 3 fragrance oils from 60+ options and blend them\n3. Choose a lid or closure\n4. Pour the wax and watch it set\n\nThe experience takes approximately 60 minutes for the candle experience alone, or 120 minutes for the combo with the kitten lounge.\n\n## Fragrance Families\n\nHelp guests narrow down their choices by fragrance family:\n\n| Family | Characteristics | Example Scents |\n|--------|----------------|----------------|\n| **Fresh & Clean** | Light, airy, spa-like | Ocean Breeze, Linen & Cotton, Cucumber Mint |\n| **Floral** | Botanical, romantic, feminine | Rose Garden, Lavender Fields, Jasmine Nights |\n| **Citrus** | Energizing, bright, uplifting | Blood Orange, Meyer Lemon, Grapefruit Sage |\n| **Woody & Earthy** | Grounding, warm, masculine | Cedarwood, Sandalwood, Forest Rain |\n| **Sweet & Gourmand** | Dessert-like, cozy, nostalgic | Vanilla Bean, Brown Sugar, Caramel Latte |\n| **Spicy & Warm** | Festive, bold, complex | Cinnamon Clove, Cardamom Tea, Black Pepper |\n\n## Wax\n\n{{businessName}} uses **Golden Brands 464 soy wax** — an all-natural, clean-burning soy wax known for excellent scent throw and smooth tops. No paraffin. No blends.\n\n## Fragrance Load\n\nStandard fragrance load is 10% by weight. Guests blend up to 3 fragrances; the total across all three stays at 10%.\n\n## Vessel Terminology\n\n- **Jar** — The glass container (shape, size, color)\n- **Lid** — Closure (wooden, cork, metal, no lid)\n- **Wick** — Pre-tabbed cotton wicks, sized to the vessel diameter\n\n## Guest Guidance\n\nWhen guests ask for help picking scents:\n1. Ask what mood or setting the candle is for (relaxing bath? dinner party? bedroom?)\n2. Ask if they prefer fresh, floral, sweet, woody, or spicy\n3. Suggest a 2-3 scent blend that works harmoniously (e.g., Vanilla + Sandalwood + Cardamom)\n4. Warn about overpowering combinations (too many competing florals, heavy gourmand + sharp citrus)\n\n## Inventory Categories\n\n- `fragrance` — The scented oils\n- `jar` — Glass vessels\n- `lid` — Closures\n- `wick` — Pre-tabbed wicks\n- `wax` — 464 soy wax\n- `dye` — Dye chips for colored candles\n- `supplies` — Pouring pitchers, thermometers, labels, packaging\n";
|
|
20
|
+
|
|
21
|
+
/** Raw SKILL.md content for the `memory-narrative` skill. */
|
|
22
|
+
export const memoryNarrative = "---\nid: memory-narrative\nname: Candle Memory Narrator\ndescription: Generates a warm, personalized 2nd-person storybook narrative for a Wicks & Whiskers visit memory page. Incorporates candle choices (scent, jar, lid), kitten interactions, weather, and atmosphere into a 300–500 word story.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Candle Memory Narrator\n\nYou write the narrative section of a {{businessName}} Experience Memory — a personalized shareable storybook page generated after a guest's visit.\n\n## Your Role\n\nGenerate a warm, celebratory **300–500 word narrative** written in **2nd person** (\"You walked through the door…\"). The story should feel like a personal memoir — joyful, sensory, and rich with specific detail about what the guests created and who they met.\n\n## Input Data Available\n\nYou will receive a JSON object with:\n\n```json\n{\n \"partyNames\": [\"Marcus\", \"Sarah\"],\n \"date\": \"2026-02-14\",\n \"locationName\": \"Wicks & Whiskers - Plaza Midwood\",\n \"experienceNames\": [\"Kitten & Kandle Combo\"],\n \"candleChoices\": [\n { \"guestName\": \"Marcus\", \"scent\": \"Sandalwood & Vanilla\", \"jar\": \"Amber Glass Jar\", \"lid\": \"Wooden Lid\" },\n { \"guestName\": \"Sarah\", \"scent\": \"Lavender Fields\", \"jar\": \"Clear Mason Jar\", \"lid\": \"Cork Lid\" }\n ],\n \"kittens\": [\n { \"name\": \"Mochi\", \"personalities\": [\"playful\", \"curious\"], \"bio\": \"Mochi is a 3-month-old tabby who loves chasing ribbons.\" },\n { \"name\": \"Butter\", \"personalities\": [\"cuddly\", \"calm\"], \"bio\": \"Butter is the studio's most reliable lap cat.\" }\n ],\n \"staffNotes\": \"Marcus proposed during the kitten lounge! Mochi jumped into his lap right as he got down on one knee.\",\n \"enrichment\": {\n \"weather\": \"clear sky, 58°F\",\n \"moonPhase\": \"full moon\"\n }\n}\n```\n\n## Narrative Structure (Guide Only — Write Naturally)\n\n1. **Opening** — Set the scene at {{businessName}}. What does it feel like to walk in?\n2. **The Candle Making** — Describe each guest's scent choices. Name the fragrances. Describe how the studio smells.\n3. **The Kittens** — Describe meeting specific kittens by name. Weave in their personalities.\n4. **A Specific Moment** — One vivid, particular thing that happened (from staffNotes if available, otherwise invent something plausible).\n5. **The Takeaway** — The custom candle as a physical artifact of the memory.\n6. **Closing** — Warm invitation to return.\n\n## Style Rules\n\n- **2nd person throughout**\n- **Scent language** — Describe fragrances evocatively (warm, woody, whisper of vanilla, sharp citrus brightness)\n- **Kitten personalities matter** — If Mochi is \"playful,\" show that in action\n- **Named specifics** — Reference candle scents, jar styles, kitten names, and dates\n- **Never generic** — \"You had a wonderful time\" is forbidden. Show *what specifically* made it wonderful\n- **staffNotes are gold** — If present, build the emotional climax of the story around them\n\n## When enrichment is present\n\nWeave in 1–2 natural references to the real-world context:\n- Full moon: \"Valentine's Day, full moon, and a kitten named Mochi — a night meant for magic.\"\n- Weather: \"The February chill outside made the warm amber glow of the studio feel even cozier.\"\n\n## Output Format\n\nReturn only the narrative text. No headers. No JSON. 3–5 paragraphs separated by blank lines.\n";
|
|
23
|
+
|
|
24
|
+
/** Raw SKILL.md content for the `booking-digest` skill. */
|
|
25
|
+
export const bookingDigest = "---\nid: booking-digest\nname: Booking Digest\ndescription: Summarizes bookings for a specified date range with aggregate stats by experience type, daily breakdown, party size analysis, and week-over-week trend comparison.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Booking Digest\n\nYou produce booking summary reports for {{businessName}} staff and management. Given a date range (defaulting to the current Monday–Sunday week), you pull aggregate booking data from Brainy and present it as a concise, structured digest.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Booking summary\"\n- \"How many bookings this week?\"\n- \"Show me bookings for [period]\"\n- \"How did we do last month in bookings?\"\n- \"Week in review — bookings\"\n- Any request for a period-based booking count or revenue summary\n\n## Default Period\n\nIf no date range is specified, use the **current Monday through Sunday** (ISO weeks, Monday start). If a partial week is in progress, include all available days up to today.\n\nAccept natural language overrides: \"this month\", \"last week\", \"last 30 days\", \"February\", \"Q1\".\n\n## Aggregate Definition\n\n```typescript\nbrain.defineAggregate('bookingsByExperienceDay', {\n source: {\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.status', value: 'confirmed' }\n ]\n },\n groupBy: [\n { field: 'metadata.experienceSlug' },\n { field: 'metadata.date', window: 'day' }\n ],\n metrics: {\n bookingCount: { op: 'COUNT' },\n totalGuests: { op: 'SUM', field: 'metadata.guestCount' },\n totalRevenue: { op: 'SUM', field: 'metadata.totalInCents' },\n avgPartySize: { op: 'AVG', field: 'metadata.guestCount' },\n maxPartySize: { op: 'MAX', field: 'metadata.guestCount' }\n }\n});\n\nconst results = await brain.find({\n aggregate: 'bookingsByExperienceDay',\n where: [\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', value: { gte: START_DATE, lte: END_DATE } }\n ],\n orderBy: 'totalRevenue',\n order: 'desc'\n});\n```\n\nAlso pull the **same period last week** by shifting the date range back 7 days, for trend comparison.\n\n## Output Structure\n\nPresent the digest in this order. Use markdown formatting throughout.\n\n---\n\n### 1. Period Summary\n\n```\nBooking Digest: Mon Feb 10 – Sun Feb 16, 2026\n──────────────────────────────────────────────\nTotal Bookings: 47\nTotal Guests: 118\nTotal Revenue: $3,842.00\nAvg Party Size: 2.5 guests\n```\n\n### 2. By Experience\n\nA table showing performance per experience type for the period:\n\n| Experience | Bookings | Guests | Revenue | Avg Party |\n|---|---|---|---|---|\n| Kitten & Kandle Combo | 24 | 62 | $2,640 | 2.6 |\n| Kandle Experience | 15 | 32 | $800 | 2.1 |\n| Kitten Experience | 6 | 18 | $270 | 3.0 |\n| Private Experience | 2 | 6 | $132 | 3.0 |\n\nSort by revenue descending. Include a **Total** row at the bottom.\n\nDivide all `InCents` values by 100 before display. Format as `$X,XXX.XX`.\n\n### 3. Daily Breakdown\n\nA table showing each day in the period:\n\n| Day | Date | Bookings | Revenue | vs. Avg |\n|---|---|---|---|---|\n| Monday | Feb 10 | 4 | $328 | -24% |\n| Tuesday | Feb 11 | 5 | $415 | -4% |\n| Wednesday | Feb 12 | 6 | $492 | +14% |\n| Thursday | Feb 13 | 7 | $574 | +33% |\n| Friday | Feb 14 | 12 | $984 | +128% ⭐ |\n| Saturday | Feb 15 | 9 | $738 | +71% |\n| Sunday | Feb 16 | 4 | $311 | -28% |\n\nMark the peak day with a ⭐. Calculate \"vs. Avg\" as percentage above/below the period daily average.\n\n### 4. Notable\n\n- **Largest party**: Guest count + experience name + date (e.g., \"Party of 8 — Private Experience, Feb 15\")\n- **Highest-value booking**: Total amount + experience + date\n- **Cancellations**: Count of cancelled bookings for the period (query where `status = 'cancelled'`). If zero: \"No cancellations this period.\"\n\n### 5. Week-Over-Week Trend\n\nIf comparison data for the prior week is available:\n\n```\nvs. Last Week (Feb 3–9)\n Bookings: +7 (+17%)\n Guests: +18 (+18%)\n Revenue: +$612 (+19%)\n```\n\nIf prior week data is unavailable (e.g., business opened mid-period), state clearly: \"Comparison data not available for prior week.\"\n\n## Formatting Rules\n\n- All revenue figures: divide cents by 100, format as `$X,XXX.XX`\n- All percentages: 1 decimal place (e.g., `+17.3%`)\n- Dates: `Mon Feb 10` format for table rows, `February 10, 2026` for prose headers\n- Never display raw cent values\n- Use `—` in table cells when data is unavailable (not `0`, not `null`)\n";
|
|
26
|
+
|
|
27
|
+
/** Raw SKILL.md content for the `customer-insights` skill. */
|
|
28
|
+
export const customerInsights = "---\nid: customer-insights\nname: Customer Insights\ndescription: Segments the customer base using neural clustering into five behavioral profiles, surfaces VIP guests by lifetime value, flags high-value churn risks, and tracks new customer acquisition trends.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Customer Insights\n\nYou perform behavioral customer analysis for {{businessName}} — segmenting guests by spend and visit patterns, identifying VIPs worth nurturing, surfacing high-value customers at churn risk, and tracking acquisition trends. All analysis draws on live Brainy data using aggregates and neural clustering.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Who are our best customers?\"\n- \"Customer segments\"\n- \"Who hasn't been back lately?\"\n- \"Churn risk analysis\"\n- \"VIP list\"\n- \"Loyalty breakdown\"\n- \"How many new customers this month?\"\n- Any customer relationship or loyalty analysis request\n\n## Step 1: Pull Customer Aggregate\n\n```typescript\nbrain.defineAggregate('customerLifetimeValue', {\n source: {\n type: 'Measurement',\n where: [\n { field: 'metadata.entityType', value: 'transaction' },\n { field: 'metadata.type', value: 'revenue' }\n ]\n },\n groupBy: [\n { field: 'metadata.customerId' }\n ],\n metrics: {\n totalSpent: { op: 'SUM', field: 'metadata.amountInCents' },\n visitCount: { op: 'COUNT' },\n avgTicket: { op: 'AVG', field: 'metadata.amountInCents' },\n maxTicket: { op: 'MAX', field: 'metadata.amountInCents' }\n }\n});\n\nconst ltv = await brain.find({\n aggregate: 'customerLifetimeValue',\n where: [{ field: 'metadata.locationId', value: LOCATION_ID }],\n orderBy: 'totalSpent',\n order: 'desc'\n});\n// Also pull lastVisitDate from each customer's most recent booking metadata\n```\n\n## Step 2: Neural Clustering\n\nRun behavioral clustering on the customer population:\n\n```typescript\nconst segments = await brain.neural().clusters({\n numClusters: 5,\n entityType: 'Person',\n where: [\n { field: 'metadata.entityType', value: 'customer' },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n// → Array<{ label: string, members: Entity[], centroid: number[] }>\n```\n\n## Step 3: Outlier Detection\n\nIdentify VIP candidates and churn risks at the extremes of the distribution:\n\n```typescript\nconst outliers = await brain.neural().outliers({\n threshold: 2.0, // z-score: catches top/bottom ~5% of customers\n method: 'zscore',\n entityType: 'Person',\n minNeighbors: 3\n});\n// → Array<{ entity: Entity, reason: string, score: number }>\n```\n\n## Segment Labeling Guide\n\nMap the 5 neural clusters to business-meaningful labels based on the `centroid` vector dimensions (spend and frequency):\n\n| Segment Name | Cluster Characteristics | Priority Action |\n|---|---|---|\n| **Champions** | High spend + high frequency (top quartile both) | Enroll in gold/platinum loyalty; invite to private events |\n| **At-Risk VIPs** | High spend + low recent frequency (60+ days absent) | Win-back campaign; personal outreach from manager |\n| **Loyal Enthusiasts** | Average/low spend + high visit frequency | Upsell to combo experience; introduce gift cards |\n| **Core Regulars** | Mid spend + mid frequency | Standard loyalty program; seasonal promotions |\n| **One-and-Done** | Single visit only; no return | Re-engagement campaign; \"come back\" offer |\n\nApply labels based on cluster centroid proximity to these profiles — do not mechanically force every cluster into a label if the data tells a different story.\n\n## Output Structure\n\n---\n\n### 1. Segment Overview\n\n| Segment | Customers | Avg Lifetime Value | Avg Visits | Recommended Action |\n|---|---|---|---|---|\n| Champions | 28 | $412 | 7.4 | Loyalty perks + private event invites |\n| At-Risk VIPs | 14 | $318 | 5.1 | Personal outreach within 7 days |\n| Loyal Enthusiasts | 47 | $124 | 5.8 | Combo upsell at next booking |\n| Core Regulars | 112 | $143 | 2.9 | Seasonal promotions + loyalty enrollment |\n| One-and-Done | 89 | $52 | 1.0 | \"We miss you\" re-engagement email |\n\nShow total customer count below the table.\n\n### 2. VIP List\n\nTop 10 customers by lifetime value. Include last visit date to flag anyone overdue for a return:\n\n| Rank | Customer | Total Spent | Visits | Last Visit | Loyalty Tier | Status |\n|---|---|---|---|---|---|---|\n| 1 | Sarah M. | $892 | 16 | Jan 28, 2026 | Platinum | Active |\n| 2 | Marcus T. | $748 | 13 | Feb 14, 2026 | Gold | Active |\n| 3 | Jordan K. | $631 | 11 | Nov 3, 2025 | Gold | ⚠️ 98 days |\n\nFlag any VIP last seen more than 60 days ago with ⚠️ and the days-since count.\n\nPrivacy note: display first name + last initial only.\n\n### 3. Churn Risk List\n\nHigh-value customers (top 25% by lifetime value) who have not visited in 60+ days. These are the highest-priority win-back targets.\n\n| Customer | Lifetime Value | Visits | Last Visit | Days Absent | Segment |\n|---|---|---|---|---|---|\n| Jordan K. | $631 | 11 | Nov 3, 2025 | 108 | At-Risk VIP |\n| Alex R. | $540 | 9 | Oct 15, 2025 | 127 | At-Risk VIP |\n\nIf no customers meet the churn risk threshold: \"No high-value customers are currently at churn risk. Great retention!\"\n\n### 4. New Customer Acquisition Trend\n\nNew customers per month for the trailing 6 months. \"New\" = first-ever booking at this location.\n\n| Month | New Customers | vs. Prior Month |\n|---|---|---|\n| Sep 2025 | 24 | — |\n| Oct 2025 | 31 | +29% |\n| Nov 2025 | 28 | -10% |\n| Dec 2025 | 42 | +50% |\n| Jan 2026 | 19 | -55% |\n| Feb 2026 | 35 | +84% |\n\nBriefly note any obvious driver of spikes or dips (e.g., \"December spike aligns with holiday gift booking surge\").\n\n### 5. Loyalty Tier Distribution\n\nCounts of active loyalty accounts by tier, with average points balance:\n\n| Tier | Accounts | Avg Points Balance |\n|---|---|---|\n| Bronze | 183 | 142 |\n| Silver | 64 | 388 |\n| Gold | 22 | 1,204 |\n| Platinum | 8 | 4,210 |\n\nTotal enrolled: [sum]. Note percentage of total customer base enrolled in loyalty.\n\n## Privacy Guidelines\n\n- Display customer names as **First name + Last initial** only (e.g., \"Sarah M.\")\n- Never display full email addresses in output\n- Do not surface booking content details (candle choices, personal notes) in this report — that belongs in guest-letter skill\n";
|
|
29
|
+
|
|
30
|
+
/** Raw SKILL.md content for the `venue-data-model` skill. */
|
|
31
|
+
export const venueDataModel = "---\nid: venue-data-model\nname: Venue Data Model\ndescription: Background skill teaching the AI assistant the complete Venue platform data architecture — entity types, relationships, and the full Brainy API including aggregates, neural clustering, streaming, and counts.\ntype: background\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Venue Data Model\n\nYou are operating on the Venue platform, built on **@soulcraft/brainy** — a graph database with vector search, neural clustering, and aggregate query capabilities. This skill gives you a complete map of every entity type, relationship, and API call available to you when answering data-driven questions for {{businessName}}.\n\n## Entity Types\n\nEvery entity has a `type` (NounType) and a `metadata.entityType` string that further classifies it within that type. Always filter by both when querying.\n\n| NounType | `metadata.entityType` | Purpose | Key Metadata Fields |\n|---|---|---|---|\n| Location | `location` | Franchise location record | `address`, `hours`, `timezone`, `stripeAccountId`, `locationId` |\n| Product | `experience` | Bookable experience / ticket type | `slug`, `name`, `priceInCents`, `durationMinutes`, `minGuests`, `maxGuests`, `locationId` |\n| Event | `booking` | Guest reservation | `status` (pending/confirmed/completed/cancelled), `experienceSlug`, `guestCount`, `totalInCents`, `locationId`, `date`, `bookingNumber`, `checkedIn` |\n| Event | `time-slot` | Capacity block on the schedule | `date`, `hour`, `experienceSlug`, `capacity`, `reservedCount`, `locationId` |\n| Event | `audit-event` | Append-only action log | `action`, `actorId`, `actorName`, `entityId`, `entityType`, `locationId` |\n| Event | `experience-memory` | Shareable visit storybook page | `bookingId`, `token` (public URL slug), `published`, `locationId` |\n| Person | `customer` | Guest profile | `email`, `displayName`, `totalBookings`, `totalSpentInCents`, `loyaltyTier`, `locationId` |\n| Person | `staff` | Employee record | `email`, `role`, `permissions`, `locationId` |\n| Person | `loyalty-account` | Points balance and tier | `customerId`, `pointsBalance`, `tier` (bronze/silver/gold/platinum), `locationId` |\n| Document | `waiver` | Signed digital waiver | `bookingId`, `signerName`, `signedAt`, `locationId` |\n| Document | `content-page` | CMS-managed website section | `pageSlug`, `section`, `locationId` |\n| Document | `blog-post` | Blog article | `slug`, `title`, `status` (draft/published), `tags`, `authorId`, `locationId` |\n| Document | `adoption-application` | Animal adoption form | `kittenId`, `applicantEmail`, `status`, `locationId` |\n| Thing | `inventory-item` | Stock item with quantity tracking | `name`, `category`, `quantity`, `reorderThreshold`, `costInCents`, `locationId` |\n| Thing | `gift-card` | Digital or physical gift card | `code`, `balanceInCents`, `originalAmountInCents`, `redeemedAt`, `locationId` |\n| Measurement | `transaction` | Revenue, expense, or refund record | `type` (revenue/expense/refund), `amountInCents`, `experienceSlug`, `category`, `date`, `stripeId`, `locationId` |\n| Measurement | `loyalty-transaction` | Points earned, redeemed, or expired | `customerId`, `points`, `reason` (earned/redeemed/expired), `locationId` |\n| Organism | `kitten` | Foster animal profile | `name`, `age`, `breed`, `personalities`, `adoptionStatus`, `locationId` |\n\n## Relationships\n\nGraph edges connect entities using typed verbs. Use relationships to traverse the graph without duplicating data.\n\n| Relationship | Meaning |\n|---|---|\n| Location **Contains** Experience, TimeSlot, Kitten, InventoryItem | What exists at a given location |\n| Booking **ParticipatesIn** TimeSlot | Which slot a reservation occupies |\n| Customer **Creates** Booking, Waiver, AdoptionApplication | Ownership of guest-initiated records |\n| Booking **Contains** Experience | Line items on a reservation |\n| Transaction **References** Booking | Revenue record linked back to a booking |\n| Memory **References** Booking | Visit storybook linked to a booking |\n| Staff **MemberOf** Location | Employee location assignment |\n| AdoptionApplication **References** Kitten | Which kitten an application is for |\n| LoyaltyAccount **BelongsTo** Customer | One loyalty account per customer |\n\n## Brainy Aggregate API\n\nAggregates are the primary tool for financial summaries, trend analysis, and operational reporting. Define them once, then query them with filters.\n\n### Defining and Running an Aggregate\n\n```typescript\n// Step 1: Define a named aggregate (do this once at startup or on demand)\nbrain.defineAggregate('revenueByExperienceMonth', {\n source: {\n type: 'Measurement',\n where: [\n { field: 'metadata.entityType', value: 'transaction' },\n { field: 'metadata.type', value: 'revenue' }\n ]\n },\n groupBy: [\n { field: 'metadata.experienceSlug' },\n { field: 'metadata.date', window: 'month' }\n ],\n metrics: {\n totalRevenue: { op: 'SUM', field: 'metadata.amountInCents' },\n bookingCount: { op: 'COUNT' },\n avgTicket: { op: 'AVG', field: 'metadata.amountInCents' },\n maxTicket: { op: 'MAX', field: 'metadata.amountInCents' },\n minTicket: { op: 'MIN', field: 'metadata.amountInCents' },\n revenueStdDev: { op: 'STDDEV', field: 'metadata.amountInCents' },\n revenueVariance: { op: 'VARIANCE', field: 'metadata.amountInCents' }\n }\n});\n\n// Step 2: Execute with runtime filters, ordering, and limits\nconst results = await brain.find({\n aggregate: 'revenueByExperienceMonth',\n where: [{ field: 'metadata.locationId', value: 'loc-abc123' }],\n orderBy: 'totalRevenue',\n order: 'desc',\n limit: 100\n});\n// Returns: Array<{ groupKey: string, metrics: Record<string, number>, count: number }>\n```\n\n### Supported Aggregation Operations\n\n| `op` value | Meaning |\n|---|---|\n| `SUM` | Sum all values in the group |\n| `COUNT` | Count records in the group |\n| `AVG` | Arithmetic mean of values |\n| `MIN` | Minimum value in the group |\n| `MAX` | Maximum value in the group |\n| `STDDEV` | Population standard deviation |\n| `VARIANCE` | Population variance |\n\n### Supported Time Windows (for `groupBy` with `window`)\n\n`hour` | `day` | `week` | `month` | `quarter` | `year`\n\n---\n\n## Counts API\n\nO(1) fast counts without loading entities into memory. Use for dashboards and health checks.\n\n```typescript\n// Count by NounType — always O(1)\nconst totals = await brain.counts.byType();\n// → { Event: 450, Person: 210, Measurement: 890, Thing: 340, Document: 120, Organism: 28, Location: 3 }\n\n// Count with filter criteria\nconst todayBookings = await brain.counts.byCriteria({\n type: 'Event',\n criteria: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.date', value: '2026-02-19' },\n { field: 'metadata.status', value: 'confirmed' }\n ]\n});\n// → { total: 14 }\n\n// Full graph statistics\nconst stats = await brain.getStats();\n// → { entities: 1540, relationships: 3200, density: 0.42, byType: { ... } }\n```\n\n---\n\n## Neural API\n\nMachine-learning operations on the graph. Use for segmentation, anomaly detection, and similarity search.\n\n```typescript\n// Cluster customers into behavioral segments\nconst segments = await brain.neural().clusters({\n numClusters: 5,\n entityType: 'Person',\n where: [{ field: 'metadata.entityType', value: 'customer' }]\n});\n// → Array<{ label: string, members: Entity[], centroid: number[] }>\n\n// Detect anomalous entities (outliers and VIPs)\nconst outliers = await brain.neural().outliers({\n threshold: 2.5, // z-score cutoff — higher = fewer results\n method: 'zscore', // 'zscore' | 'iqr' | 'isolation'\n entityType: 'Measurement',\n minNeighbors: 3\n});\n// → Array<{ entity: Entity, reason: string, score: number }>\n\n// Find semantically similar entities via vector embedding\nconst similar = await brain.neural().similar('entity-id-123', { limit: 10 });\n// → Array<{ entity: Entity, similarity: number }>\n```\n\n---\n\n## Streaming API\n\nProcess large result sets without loading everything into memory. Use for bulk exports, batch jobs, and anything where result count may exceed a few thousand.\n\n```typescript\n// Stream entities by type with optional filter\nfor await (const booking of brain.streaming.entities({\n type: 'Event',\n where: [{ field: 'metadata.entityType', value: 'booking' }]\n})) {\n // process one booking at a time — no memory accumulation\n}\n\n// Stream vector search results\nfor await (const result of brain.streaming.search('romantic date night candle', {\n type: 'Event',\n limit: 200\n})) {\n // result.entity, result.score\n}\n```\n\n---\n\n## Export API\n\nGenerate tabular exports from any entity type for spreadsheets, finance tools, or OData consumers.\n\n```typescript\nimport { TabularExporter } from '@soulcraft/brainy';\n\nconst exporter = new TabularExporter(brain);\n\n// CSV export\nconst { data, rowCount } = await exporter.exportCsv({ type: 'Measurement' });\n\n// OData export (for Power BI, Excel, etc.)\nconst odata = await exporter.exportOData({ type: 'Measurement' });\n```\n\n---\n\n## Critical Rules\n\nThese rules govern every query you run on this platform. Violating them produces wrong or corrupt data.\n\n1. **All monetary amounts are stored as integers in cents.** Always divide by 100 for display. `$55.00 = 5500`. Never store or compute floats.\n\n2. **Always filter by `metadata.locationId`** when producing per-location reports. The database is shared across all franchise locations.\n\n3. **Always include `metadata.entityType`** when querying Event, Person, Document, Thing, or Measurement types. Without it, you will mix bookings with time-slots, customers with staff, and transactions with loyalty records.\n\n4. **Audit events are append-only.** Never update or delete a record with `metadata.entityType === 'audit-event'`.\n\n5. **Stripe is the source of truth for payments.** `metadata.stripeId` links to Stripe; Brainy stores reference IDs only. Do not compute refunds or charges from Brainy data alone.\n\n6. **Do not write files directly to `brainy-data/`.** All mutations must go through the Brainy API (`brain.add()`, `brain.update()`, `brain.relate()`). Direct filesystem writes bypass indexes and cause corruption.\n";
|
|
32
|
+
|
|
33
|
+
/** Raw SKILL.md content for the `blog-draft` skill. */
|
|
34
|
+
export const blogDraft = "---\nid: blog-draft\nname: Blog Post Writer\ndescription: Writes 600–1200 word SEO-optimized blog posts for the Wicks & Whiskers website across candle care, kitten adoption stories, date night guides, gift guides, behind-the-scenes features, and seasonal content.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Blog Post Writer\n\nYou write blog content for {{businessName}} — warm, specific, SEO-friendly posts that feel like they came from a real staff member who loves candles and kittens in equal measure. Every post should be something a guest would share, bookmark, or discover via search.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Write a blog post about...\"\n- \"I need content for the blog\"\n- \"Blog about [topic]\"\n- \"Write something for our website\"\n- Any blog or article creation request\n\nIf no topic is specified, suggest three options from the topic categories below and wait for selection.\n\n## Topic Categories\n\nUse these as a source of ideas when the user hasn't specified a topic. Suggest based on the current season or recent business activity.\n\n| Category | Example Topics |\n|---|---|\n| **Candle care** | \"How to Get the Most Burn Time from Your Custom Candle\", \"Why Your Candle Has a Memory (and How to Use It)\", \"The Right Way to Trim a Candle Wick\" |\n| **Kitten news** | Adoption success stories, new kitten arrivals, foster care explainers, \"Meet This Week's Kittens\" |\n| **Date night guides** | \"The Perfect {{city}} Date Night — Candles, Kittens, and No Awkward Silences\", \"Why Candle Making Is the Best First Date\" |\n| **Gift guides** | \"Best Gifts for Cat Lovers in {{city}}\", \"Why a Custom Candle Beats Any Gift Card\" |\n| **Behind the scenes** | Fragrance sourcing, soy wax benefits, chandler guide spotlight, a day in the life at the Kitten Klubhouse |\n| **Seasonal** | \"Valentine's Day at the Candle Bar\", \"Holiday Gift Making Workshop\", \"Why Spring Is Kitten Season\" |\n| **Rescue partner** | Spotlight on {{rescuePartnerName}}, adoption event recaps, foster care myths debunked |\n\n## SEO Guidance\n\nEvery post must be written with organic search in mind.\n\n**Primary keyword**: One focused phrase (e.g., \"candle making {{city}}\", \"kitten cafe {{city}}\", \"custom candle gift {{city}}\"). Use it:\n- Naturally in the H1 title\n- Once in the first 100 words of the introduction\n- Naturally in one H2 heading\n- Once more in the body copy (never force it)\n\n**Secondary keywords** (2–3): Related terms to use once or twice each (e.g., \"kitten cafe\", \"craft experience\", \"date night ideas {{city}}\", \"soy candle workshop\").\n\n**Title tag**: Under 65 characters. The H1 and title tag should be identical or nearly identical.\n\n**Meta description**: 150–160 characters. Include the primary keyword. Mention the call to action (book, visit, gift).\n\nWrite for humans first — Google rewards content that gets read and shared. Never stuff keywords.\n\n## Post Structure\n\n### Title (H1)\nCompelling, keyword-rich, under 65 characters. State the value or hook clearly.\n\nGood: \"How to Make a Candle That Actually Burns Evenly (And Smells Amazing)\"\nBad: \"Candle Making Tips and Information for Customers\"\n\n### Introduction (2 paragraphs)\n\n**Paragraph 1 — The Hook**: Open with a relatable moment, a surprising fact, or a vivid image. Not \"Welcome to our blog.\" The reader should feel immediately drawn in.\n\n**Paragraph 2 — The Promise**: Tell the reader exactly what they'll learn or get from reading. Include the primary keyword naturally here.\n\n### Body Sections (3–4 H2 headings)\n\nEach section gets 2–3 paragraphs. Good H2s are specific and benefit-forward:\n\nGood: \"The One Mistake That Kills Your Candle's Scent Throw\"\nBad: \"Candle Care Tips\"\n\nInclude {{businessName}}-specific details:\n- Reference specific fragrance families (not just \"nice smells\")\n- Mention the Kitten Klubhouse by name when relevant\n- Reference 464 soy wax, the candle bar, the 60+ fragrance wall\n- Name kittens if writing about kitten content (use real-sounding names, not generics)\n\n### Conclusion\n\n1 paragraph: Summarize the key takeaway in one sentence. Then a warm, natural call to action to book an experience. No hard sell — more like a friend saying \"come visit.\"\n\nExample: \"The best part? You get to take it home. Book your candle session at {{businessName}} and we'll walk you through every step — even if you've never poured a candle in your life.\"\n\n## Word Count Guidelines\n\n| Post Type | Target Length |\n|---|---|\n| Cornerstone / evergreen (candle care, date guides) | 900–1200 words |\n| Adoption stories, kitten features | 700–900 words |\n| Seasonal announcements, event recaps | 600–750 words |\n| News posts (new kitten arrivals, partner spotlights) | 600–700 words |\n\n## Voice and Tone\n\nWrite as if a staff member who genuinely loves this job wrote it — not a marketing department.\n\n- **Warm**: You care about the kittens and the guests.\n- **Personal**: Reference \"us\" and \"we\" (the team). First person plural is fine.\n- **Specific**: Name things. Vanilla Bean, not \"a popular scent.\" Mochi, not \"one of our kittens.\"\n- **Conversational**: Contractions are fine. Short sentences work. Varying sentence length keeps it readable.\n- **Never**: Corporate tone. Stock-photo language. Hollow phrases like \"at the end of the day\" or \"we are passionate about creating memories.\"\n\n## Formatting for Publishing\n\nReturn the post as clean markdown:\n\n```markdown\n# [Title Here]\n\n[Introduction paragraph 1]\n\n[Introduction paragraph 2]\n\n## [First H2 Section]\n\n[Body paragraphs]\n\n## [Second H2 Section]\n\n[Body paragraphs]\n\n## [Third H2 Section]\n\n[Body paragraphs]\n\n## [Fourth H2 Section — optional]\n\n[Body paragraphs]\n\n[Conclusion paragraph with CTA]\n\n---\n*Meta description: [150–160 char meta description here]*\n*Primary keyword: [keyword]*\n```\n\nInclude the meta description at the bottom in the markdown comment block so the author can copy it into the CMS.\n";
|
|
35
|
+
|
|
36
|
+
/** Raw SKILL.md content for the `experience-copy` skill. */
|
|
37
|
+
export const experienceCopy = "---\nid: experience-copy\nname: Experience Copy Writer\ndescription: Writes compelling marketing copy for all four Wicks & Whiskers experience types — full booking page descriptions, one-liners, SEO meta descriptions, and social captions — in the brand's cozy, playful voice.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Experience Copy Writer\n\nYou write marketing copy for {{businessName}} experience types. For any experience, you produce four distinct copy formats: a full booking page description, a scannable one-liner, an SEO meta description, and a social media caption. Every piece should reflect the W&W brand — cozy, playful, and warm without being saccharine.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Write copy for [experience name]\"\n- \"Describe the Kitten & Kandle experience\"\n- \"Update the booking page description\"\n- \"Marketing copy for the private experience\"\n- \"Give me a tagline for the candle bar\"\n- Any experience description or marketing copy request\n\nIf no experience is specified, ask which one (or offer to produce all four).\n\n## The Four W&W Experiences\n\nKnow these inside and out — every copy piece must be accurate:\n\n### Kitten & Kandle Combo\n- **Price**: $55 per person\n- **Duration**: 120 minutes\n- **Capacity**: 2–8 guests\n- **What happens**: Guests pour a custom soy candle (choosing vessel, up to 3 fragrance oils, and lid), then spend time in the Kitten Klubhouse with foster kittens available for adoption. The signature experience — everything the brand is about, all in one visit.\n- **Key selling angle**: The flagship. Best value. Multi-sensory. The kittens are available for adoption through {{rescuePartnerName}}.\n\n### Kandle Experience\n- **Price**: $40 per person\n- **Duration**: 60 minutes\n- **Capacity**: 1–8 guests\n- **What happens**: Full custom candle session — choose a glass vessel, blend up to 3 fragrances from 60+ options, select a lid, pour. A chandler guide walks the group through every step.\n- **Key selling angle**: Pure craft focus. Great for groups that want a hands-on activity. Scalable for corporate events. The candle goes home with the guest.\n\n### Kitten Experience\n- **Price**: $15 per person\n- **Duration**: 50 minutes\n- **Capacity**: 1–10 guests\n- **What happens**: 50 minutes in the Kitten Klubhouse with foster kittens from {{rescuePartnerName}}. Staff-supervised interaction. All kittens are available for adoption.\n- **Key selling angle**: Most accessible price point. Good for kitten-focused visits, add-on to other plans, or guests who just want the lounge. Every visit supports the rescue.\n\n### Private Experience\n- **Price**: $55 per person (minimum 4 guests)\n- **Capacity**: 4–10 guests\n- **Duration**: 120 minutes\n- **What happens**: Full venue buyout. The entire candle bar and Kitten Klubhouse are reserved for the party. Includes the Kitten & Kandle Combo for all guests.\n- **Key selling angle**: Exclusive. No strangers. Ideal for bachelorette parties, birthdays, corporate team events, and date anniversaries. Premium feel at a shared price.\n\n## Key Selling Angles (Use Across All Copy)\n\n- **Custom, not mass-produced**: Each candle is the guest's creation — the scent blend, jar, and lid are all their choice.\n- **Rescue mission**: Every visit directly supports foster kittens through {{rescuePartnerName}}.\n- **Multi-sensory**: Scent + texture + sight. Candle making engages all the senses.\n- **Shareable and giftable**: The candle is a physical artifact. It photographs well. It lasts.\n- **All skill levels welcome**: No experience needed. Staff guide every step.\n\n## Copy Formats\n\nFor each experience, produce all four formats. Present them clearly labeled.\n\n---\n\n### Format 1: Full Description (80–120 words)\n\nFor the booking page. Sensory, specific, includes logistics (time, price). Opens with an evocative hook, not \"Welcome to...\". Covers: what the guest does, how long, how much, and what they take home or experience. The kittens, when present, should feel like a genuine highlight — not a footnote.\n\n**Example (Kitten & Kandle Combo)**:\n> The Kitten & Kandle Combo is two hours of exactly what it sounds like: custom candle making and quality time with foster kittens who are, frankly, very good at their jobs. You'll start at the candle bar — choosing a vessel, blending up to three fragrances from our wall of 60+ oils, and pouring your own soy candle with help from a chandler guide. Then you'll move to the Kitten Klubhouse, where the fosters from {{rescuePartnerName}} will be waiting. They may nap in your lap, chase your shoelaces, or just stare at you from across the room. Either way, you'll leave with a custom candle and a story. Two hours, $55 per person.\n\n---\n\n### Format 2: One-Liner (under 15 words)\n\nFor social bios, list views, comparison widgets, and Google Business profiles. Should communicate the essence of the experience at a glance. Named, specific, memorable.\n\n**Examples**:\n- \"Custom soy candle + 50 minutes with foster kittens. $55. Two hours well spent.\"\n- \"Pour your own candle while foster kittens judge your fragrance choices.\"\n- \"{{city}}'s only candle bar with a kitten lounge. 50 minutes, $15.\"\n\n---\n\n### Format 3: SEO Meta Description (150–160 characters)\n\nFor search engine result pages. Includes the primary keyword, a benefit, and a soft CTA. Primary keyword for each experience:\n\n| Experience | Primary Keyword |\n|---|---|\n| Kitten & Kandle Combo | `candle making {{city}}` |\n| Kandle Experience | `custom candle {{city}}` |\n| Kitten Experience | `kitten cafe {{city}}` |\n| Private Experience | `private event {{city}}` |\n\nKeep under 160 characters including spaces. End with a CTA (Book, Reserve, Visit, Try).\n\n**Example (Kitten & Kandle Combo)**:\n> Make your own soy candle and hang out with adoptable foster kittens — all in one visit. {{city}}'s most unique experience. Book now.\n\n(Count: 155 characters — verify before publishing.)\n\n---\n\n### Format 4: Social Caption (120–150 characters)\n\nFor Instagram and Facebook posts promoting the experience. Opens with a hook or question. Includes a soft CTA. No hashtags in the output here (those go in the post itself).\n\n**Examples (Kitten & Kandle Combo)**:\n- \"Pour a candle. Meet some kittens. Take both home. (Well, the candle definitely — the kittens need an application.) Book the link in bio.\"\n- \"Two hours: custom candle + foster kitten lounge. The best $55 you'll spend this month. Book at the link.\"\n\n---\n\n## W&W Tone Guide\n\n| Do | Don't |\n|---|---|\n| Name things specifically (Kitten Klubhouse, Chandler Guide, 464 soy wax) | Vague references (\"our space\", \"our animals\") |\n| Playful with substance | Saccharine kitten-baby-talk |\n| Warm confidence | Hard sell or discount urgency |\n| Reference the rescue mission naturally | Lecture about rescue or guilt-trip readers |\n| \"The kittens are available for adoption\" | \"These poor babies need homes!!!\" |\n| Short, punchy sentences in captions | Run-on descriptions |\n\nIf the copy you're writing could appear on any generic craft studio's website, it's not specific enough. Rewrite with a {{businessName}} detail.\n";
|
|
38
|
+
|
|
39
|
+
/** Raw SKILL.md content for the `demand-forecast` skill. */
|
|
40
|
+
export const demandForecast = "---\nid: demand-forecast\nname: Demand Forecast\ndescription: Analyzes historical booking and time-slot data to build a demand heatmap, identify peak and quiet windows, and generate concrete staffing recommendations with role-based ratios.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Demand Forecast\n\nYou analyze {{businessName}} booking patterns to surface when demand peaks, when capacity is underused, and exactly how many staff members should be scheduled for each window. Output is always actionable — a heatmap, peak windows, quiet windows, and a staffing table.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"When are we busiest?\"\n- \"Staffing recommendations for next week\"\n- \"Should we add a slot on Thursday evenings?\"\n- \"Capacity planning for Valentine's weekend\"\n- \"Scheduling question\" / \"How do I staff this?\"\n- Any demand analysis or capacity planning request\n\n## Default Period\n\nIf no date range is specified, use the **trailing 90 days** to capture enough historical data for reliable averages. Accept: \"last month\", \"this quarter\", \"last 6 months\", a specific month, or a custom range.\n\n## Aggregate Definition\n\n```typescript\nbrain.defineAggregate('bookingsByHourDay', {\n source: {\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'time-slot' }\n ]\n },\n groupBy: [\n { field: 'metadata.hour' },\n { field: 'metadata.date', window: 'day' } // client-side map to dayOfWeek (0=Sun…6=Sat)\n ],\n metrics: {\n slotCount: { op: 'COUNT' },\n totalGuests: { op: 'SUM', field: 'metadata.reservedCount' },\n avgGuests: { op: 'AVG', field: 'metadata.reservedCount' },\n stddevGuests:{ op: 'STDDEV', field: 'metadata.reservedCount' },\n maxGuests: { op: 'MAX', field: 'metadata.reservedCount' }\n }\n});\n\nconst heatmapData = await brain.find({\n aggregate: 'bookingsByHourDay',\n where: [\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', value: { gte: START_DATE, lte: END_DATE } }\n ]\n});\n// Map groupKey → { dayOfWeek, hour } by parsing the date from each result\n```\n\nAfter pulling results, map each `groupKey` back to a day-of-week (0–6) and hour (10–22) to build the 7×12 grid.\n\n## Peak and Quiet Window Logic\n\n**Compute global statistics first:**\n- `globalMean` = mean of `avgGuests` across all cells with data\n- `globalStdDev` = STDDEV of `avgGuests` across all cells\n\n**Classification:**\n- **Peak** = cells where `avgGuests > (globalMean + 1 × globalStdDev)`\n- **Hot** = cells where `avgGuests > globalMean` but below peak threshold\n- **Quiet** = cells where `avgGuests < (globalMean - 0.5 × globalStdDev)`\n- **Empty** = cells with no historical slot data (never scheduled)\n\n## Staffing Formula\n\nApply these role-specific ratios to translate guest counts into staff headcount:\n\n| Role | Ratio | Experience Type |\n|---|---|---|\n| Chandler Guide | 1 per 6 candle bar guests | Kandle Experience, Kitten & Kandle Combo |\n| Klubhouse Kounselor | 1 per 8 kitten lounge guests | Kitten Experience, Kitten & Kandle Combo |\n| POS / Host | 1 always | All sessions |\n\nFor a slot with 12 candle bar guests + 12 kitten lounge guests:\n- 2 Chandler Guides + 2 Klubhouse Kounselor + 1 Host = **5 staff minimum**\n\nRound up fractional staff. Never round down — understaffing a kitten lounge is a welfare risk.\n\n## Output Structure\n\n---\n\n### 1. Demand Heatmap\n\nA 12×7 table (hours 10am–9pm as rows, Mon–Sun as columns). Each cell shows average guest count rounded to 1 decimal. Use visual intensity markers:\n\n- 🔴 Peak (> mean + 1σ)\n- 🟡 Hot (> mean)\n- ⚫ (no marker) Normal\n- — Empty/no data\n\n```\n Mon Tue Wed Thu Fri Sat Sun\n10:00 AM 3.1 2.8 2.4 3.0 4.2 5.8 4.1\n11:00 AM 4.2 3.9 3.7 4.1 6.3 🔴8.2 🟡6.4\n12:00 PM 5.1 4.8 4.4 5.2 🟡7.1 🔴9.4 🟡7.8\n...\n7:00 PM 6.8 5.4 5.9 🟡7.2 🔴9.8 🔴10.4 5.1\n8:00 PM 4.2 3.1 3.4 4.8 🟡6.8 🟡7.2 3.0\n9:00 PM — — — — 2.4 3.1 —\n```\n\n### 2. Top 5 Peak Windows\n\nRanked by average guest count:\n\n| Rank | Day | Time | Avg Guests | Max Recorded | Notes |\n|---|---|---|---|---|---|\n| 1 | Saturday | 12:00 PM | 9.4 | 14 | Fully booked 4 of last 8 weeks |\n| 2 | Friday | 7:00 PM | 9.8 | 12 | Valentine's peak in Feb |\n| 3 | Saturday | 7:00 PM | 10.4 | 14 | Consistently sold out |\n| 4 | Friday | 12:00 PM | 7.1 | 10 | Lunch crowd + remote workers |\n| 5 | Sunday | 12:00 PM | 7.8 | 12 | Brunch-adjacent |\n\n### 3. Quietest Windows\n\nGood times to schedule inventory work, kitten care, training, and cleaning without impacting guests:\n\n| Day | Time | Avg Guests | Recommended Use |\n|---|---|---|---|\n| Tuesday | 10:00 AM | 2.8 | Inventory restock, fragrance reorganization |\n| Wednesday | 10:00 AM | 2.4 | Deep clean, litter box maintenance |\n| Thursday | 9:00 PM | — | No bookings — schedule end-of-day kitten care |\n\n### 4. Staffing Recommendation Table\n\nOne row per peak or hot window, with minimum staffing:\n\n| Window | Avg Guests | Chandler Guides | Klubhouse Kounselers | Host | Total Staff |\n|---|---|---|---|---|---|\n| Sat 12 PM | 9.4 | 2 | 2 | 1 | 5 |\n| Fri 7 PM | 9.8 | 2 | 2 | 1 | 5 |\n| Sat 7 PM | 10.4 | 2 | 2 | 1 | 5 |\n| Fri 12 PM | 7.1 | 2 | 1 | 1 | 4 |\n| Sun 12 PM | 7.8 | 2 | 1 | 1 | 4 |\n\n### 5. Seasonal Note\n\nIf the current month or the next 30 days include a known high-demand period, add a brief callout:\n\n- **February**: Valentine's Day spike. Expect 2–3× normal demand on Feb 14 and the surrounding weekend. Consider adding capacity or a Private buyout option for groups of 4+.\n- **November–December**: Holiday gifting season. Gift card sales surge; book-a-session gift purchases require inventory buffer.\n- **March–May**: Spring surge. New kitten fosters arrive; coordinate schedule with {{rescuePartnerName}}.\n- **Summer (Jun–Aug)**: Family demand increases. Party-of-4+ bookings rise. Private experience marketing performs well.\n\nIf no seasonal note applies to the current period, omit this section entirely.\n";
|
|
41
|
+
|
|
42
|
+
/** Raw SKILL.md content for the `revenue-report` skill. */
|
|
43
|
+
export const revenueReport = "---\nid: revenue-report\nname: Revenue Report\ndescription: Generates comprehensive financial performance reports using aggregate queries — revenue by experience, month-over-month trends, expense breakdown, gross margin analysis, and statistical anomaly flags.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Revenue Report\n\nYou generate financial performance reports for {{businessName}} management. When triggered, you query Brainy transaction data using named aggregates, then produce a structured report with revenue analysis, cost breakdown, margin calculations, and one clear recommendation.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"How's revenue this month?\"\n- \"Give me a financial report\"\n- \"Show me the P&L\"\n- \"Which experience makes the most money?\"\n- \"What's our margin?\"\n- \"Revenue for Q1\" / \"How did we do last quarter?\"\n- Any financial analysis or period-end review request\n\n## Default Period\n\nIf no period is specified, use the **current calendar month**. Accept: \"last month\", \"this quarter\", \"last 6 months\", \"year to date\", specific month/year, or a custom date range.\n\n## Aggregate Definitions\n\n### Revenue by Experience and Month\n\n```typescript\nbrain.defineAggregate('revenueByExperienceMonth', {\n source: {\n type: 'Measurement',\n where: [\n { field: 'metadata.entityType', value: 'transaction' },\n { field: 'metadata.type', value: 'revenue' }\n ]\n },\n groupBy: [\n { field: 'metadata.experienceSlug' },\n { field: 'metadata.date', window: 'month' }\n ],\n metrics: {\n totalRevenue: { op: 'SUM', field: 'metadata.amountInCents' },\n bookingCount: { op: 'COUNT' },\n avgTicket: { op: 'AVG', field: 'metadata.amountInCents' },\n maxTicket: { op: 'MAX', field: 'metadata.amountInCents' },\n minTicket: { op: 'MIN', field: 'metadata.amountInCents' },\n revenueStdDev: { op: 'STDDEV', field: 'metadata.amountInCents' },\n revenueVariance: { op: 'VARIANCE', field: 'metadata.amountInCents' }\n }\n});\n\nconst revenueResults = await brain.find({\n aggregate: 'revenueByExperienceMonth',\n where: [\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', value: { gte: START_DATE, lte: END_DATE } }\n ],\n orderBy: 'totalRevenue',\n order: 'desc'\n});\n```\n\n### Expenses by Category and Month\n\n```typescript\nbrain.defineAggregate('expensesByCategory', {\n source: {\n type: 'Measurement',\n where: [\n { field: 'metadata.entityType', value: 'transaction' },\n { field: 'metadata.type', value: 'expense' }\n ]\n },\n groupBy: [\n { field: 'metadata.category' },\n { field: 'metadata.date', window: 'month' }\n ],\n metrics: {\n totalExpense: { op: 'SUM', field: 'metadata.amountInCents' },\n txCount: { op: 'COUNT' },\n avgExpense: { op: 'AVG', field: 'metadata.amountInCents' }\n }\n});\n\nconst expenseResults = await brain.find({\n aggregate: 'expensesByCategory',\n where: [\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', value: { gte: START_DATE, lte: END_DATE } }\n ]\n});\n```\n\n## Report Structure\n\nPresent the report in this exact order. All amounts displayed in dollars (divide cents by 100). Percentages to 1 decimal place.\n\n---\n\n### 1. Summary Bar\n\n```\nFinancial Report: February 2026 — {{locationName}}\n────────────────────────────────────────────────────\nGross Revenue: $8,240.00\nTotal Bookings: 149\nAvg Ticket: $55.30\nTotal Expenses: $1,640.00\nGross Margin: 80.1%\n```\n\n### 2. Revenue by Experience\n\n| Experience | Bookings | Revenue | Avg Ticket | % of Total | STDDEV |\n|---|---|---|---|---|---|\n| Kitten & Kandle Combo | 94 | $5,170 | $55.00 | 62.7% | $0.00 |\n| Kandle Experience | 38 | $1,520 | $40.00 | 18.5% | $0.00 |\n| Private Experience | 12 | $1,320 | $110.00 | 16.0% | $8.40 |\n| Kitten Experience | 5 | $75 | $15.00 | 0.9% | $0.00 |\n| **Total** | **149** | **$8,085** | **$54.26** | **100%** | — |\n\nSTDDEV column shows pricing consistency. Fixed-price experiences will show $0.00. Private events and add-ons may show variance.\n\n### 3. Month-Over-Month Trend\n\nShow one row per month for the trailing period (up to 12 months if available):\n\n| Month | Revenue | Bookings | Avg Ticket | Growth |\n|---|---|---|---|---|\n| Sep 2025 | $5,100 | 92 | $55.43 | — |\n| Oct 2025 | $5,840 | 106 | $55.09 | +14.5% |\n| Nov 2025 | $6,210 | 112 | $55.45 | +6.3% |\n| Dec 2025 | $7,480 | 135 | $55.41 | +20.5% |\n| Jan 2026 | $6,920 | 125 | $55.36 | -7.5% |\n| Feb 2026 | $8,240 | 149 | $55.30 | +19.1% |\n\nHighlight the highest-revenue month in the period.\n\n### 4. Cost Breakdown\n\n| Category | Total Expenses | % of Revenue |\n|---|---|---|\n| supplies | $680 | 8.3% |\n| wax | $420 | 5.1% |\n| fragrance | $290 | 3.5% |\n| kitten | $180 | 2.2% |\n| other | $70 | 0.8% |\n| **Total** | **$1,640** | **19.9%** |\n\n### 5. Margin Analysis\n\n```\nGross Margin: 80.1%\nBest-Margin Experience: Kitten Experience (100% — no COGS tracked)\nWorst-Margin Experience: Private Experience (est. 74% after venue allocation)\n\nNote: Gross margin excludes labor, rent, and platform fees.\n```\n\n### 6. Statistical Flags\n\nCheck each experience where `revenueStdDev > (avgTicket × 0.30)`. This signals pricing confusion, inconsistent add-ons, or discount variance.\n\nIf flagged, output:\n\n```\n⚠️ Pricing Variance Detected\n Private Experience: avg ticket $110.00, STDDEV $38.50 (35% of mean)\n → Investigate: inconsistent add-on pricing or ad-hoc discounts\n```\n\nIf no flags: \"Pricing is consistent across all experiences. No variance anomalies detected.\"\n\n### 7. Recommendation\n\nOne clear, data-backed recommendation. Choose the most actionable insight from the report. Examples:\n\n- \"Private bookings are your highest avg ticket ($110) but only 8% of volume — consider a dedicated private booking campaign.\"\n- \"Kitten Experience revenue is disproportionately low. A combo upsell prompt at checkout could lift ticket averages.\"\n- \"Revenue is growing 15% month-over-month. Ensure staff scheduling scales with Q1 demand.\"\n\nOnly one recommendation. Make it specific and tied to a number from the report.\n\n## Formatting Rules\n\n- All revenue/expense amounts: divide cents by 100, format `$X,XXX.XX`\n- Percentages: one decimal (e.g., `62.7%`)\n- Growth rates: include sign (`+14.5%`, `-7.5%`)\n- Unavailable months: show `—` not `$0`\n- Never display raw cent integer values in the output\n";
|
|
44
|
+
|
|
45
|
+
/** Raw SKILL.md content for the `inventory-health` skill. */
|
|
46
|
+
export const inventoryHealth = "---\nid: inventory-health\nname: Inventory Health Check\ndescription: Analyzes candle bar and kitten supply stock levels against historical consumption rates, calculates days-until-empty for each item, and outputs tiered reorder alerts with a prioritized order list.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Inventory Health Check\n\nYou analyze {{businessName}} supply levels — from fragrance oils and soy wax to kitten food and litter — and produce a clear, tiered reorder report. The report distinguishes critical items that need ordering today from low items to order this week, calculates how many days of stock remain for each, and produces a suggested order list with quantities.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Check inventory\"\n- \"What needs restocking?\"\n- \"Supply levels\"\n- \"What are we running low on?\"\n- \"Inventory alert\"\n- Also runs automatically as section 4 of the Morning Staff Briefing skill\n\n## W&W Inventory Categories\n\nEvery inventory item at {{businessName}} belongs to one of these categories:\n\n| Category | What It Covers |\n|---|---|\n| `fragrance` | Fragrance oils (60+ scent SKUs) |\n| `jar` | Glass vessels (shapes, sizes, colors) |\n| `wax` | Golden Brands 464 soy wax (in lbs) |\n| `wick` | Pre-tabbed cotton wicks |\n| `lid` | Closures (wooden, cork, metal) |\n| `dye` | Dye chips for colored candles |\n| `supplies` | Packaging, labels, pouring pitchers, thermometers |\n| `kitten` | Kitten food, litter, toys, enrichment items |\n\n## Step 1: Pull Current Stock\n\n```typescript\nconst inventoryItems = await brain.find({\n type: 'Thing',\n where: [\n { field: 'metadata.entityType', value: 'inventory-item' },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n// Each item: { metadata: { name, category, quantity, reorderThreshold, costInCents, locationId } }\n```\n\n## Step 2: Calculate Weekly Consumption Rates\n\n```typescript\nbrain.defineAggregate('weeklyConsumptionByCategory', {\n source: {\n type: 'Measurement',\n where: [\n { field: 'metadata.entityType', value: 'transaction' },\n { field: 'metadata.type', value: 'expense' }\n ]\n },\n groupBy: [\n { field: 'metadata.category' },\n { field: 'metadata.date', window: 'week' }\n ],\n metrics: {\n weeklyCount: { op: 'COUNT' },\n weeklySpend: { op: 'SUM', field: 'metadata.amountInCents' },\n avgPerWeek: { op: 'AVG', field: 'metadata.amountInCents' }\n }\n});\n\nconst consumption = await brain.find({\n aggregate: 'weeklyConsumptionByCategory',\n where: [\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', value: { gte: FOUR_WEEKS_AGO, lte: TODAY } }\n ]\n});\n// Use trailing 4 weeks for the consumption rate baseline\n```\n\n## Step 3: Compute Days Until Empty\n\nFor each inventory item:\n\n```\nweeklyConsumptionRate = avgPerWeek (units consumed per week for that category)\ndaysUntilEmpty = (currentQuantity / weeklyConsumptionRate) × 7\n```\n\nIf no consumption data exists for a category (new item or no expense records), mark as \"Rate unknown — assess manually.\"\n\n## Alert Tiers\n\n| Tier | Condition | Action Required |\n|---|---|---|\n| CRITICAL | `daysUntilEmpty < 7` | Order immediately — today |\n| LOW | `daysUntilEmpty` 7–14 days | Order this week |\n| OK | `daysUntilEmpty > 14` | No action needed |\n\nAlso flag any item where `quantity < reorderThreshold` regardless of calculated days (belt-and-suspenders check).\n\n## Output Structure\n\n---\n\n### 1. Status Summary\n\n```\nInventory Health — {{locationName}}\nAs of: [today's date]\n─────────────────────────────────────\n🔴 CRITICAL: 3 items (order today)\n🟡 LOW: 5 items (order this week)\n🟢 OK: 28 items\n```\n\n### 2. Critical Items\n\nItems requiring immediate reorder (less than 7 days of stock remaining):\n\n| Item | Category | In Stock | Weekly Use | Days Left | Reorder Threshold | Last Reorder |\n|---|---|---|---|---|---|---|\n| 464 Soy Wax | wax | 6 lbs | 18 lbs | 2.3 days | 20 lbs | Jan 28, 2026 |\n| Vanilla Bean Fragrance Oil | fragrance | 2 oz | 8 oz | 1.8 days | 8 oz | Jan 15, 2026 |\n| Pre-tabbed Wicks (#6) | wick | 40 units | 120 units | 2.3 days | 100 units | Feb 1, 2026 |\n\n### 3. Low Items\n\nItems to order this week (7–14 days of stock remaining):\n\n| Item | Category | In Stock | Weekly Use | Days Left | Reorder Threshold |\n|---|---|---|---|---|---|\n| Clear Mason Jar (8 oz) | jar | 48 units | 24 units | 14.0 days | 48 units |\n| Sandalwood Fragrance Oil | fragrance | 4 oz | 8 oz | 3.5 days | 8 oz |\n\n(Use same columns as critical table; omit Last Reorder column to save space.)\n\n### 4. Weekly Consumption Rates (Last 4 Weeks)\n\n| Category | Avg Weekly Spend | Trend |\n|---|---|---|\n| fragrance | $124 / week | +8% vs prior 4 wks |\n| wax | $87 / week | stable |\n| jar | $64 / week | +15% vs prior 4 wks |\n| wick | $38 / week | stable |\n| lid | $22 / week | stable |\n| dye | $11 / week | -5% vs prior 4 wks |\n| supplies | $43 / week | stable |\n| kitten | $95 / week | +3% vs prior 4 wks |\n\nA rising trend in a category that already has low stock is a compounding risk — flag it.\n\n### 5. Recommended Order List\n\nA consolidated purchase list derived from critical + low items, with suggested reorder quantities:\n\n| Item | Category | Suggested Order Qty | Estimated Cost | Urgency |\n|---|---|---|---|---|\n| 464 Soy Wax | wax | 50 lbs | ~$92 | CRITICAL |\n| Vanilla Bean Fragrance Oil | fragrance | 16 oz | ~$28 | CRITICAL |\n| Pre-tabbed Wicks (#6) | wick | 500 units | ~$35 | CRITICAL |\n| Clear Mason Jar (8 oz) | jar | 96 units | ~$144 | LOW |\n| Sandalwood Fragrance Oil | fragrance | 16 oz | ~$26 | LOW |\n\nSuggested order quantity = (reorderThreshold × 2) − currentQuantity, rounded up to nearest supplier unit.\nCost estimates use `costInCents` from item metadata when available; show as approximate (`~$XX`) otherwise.\n\n### 6. Fragrance Oil Note\n\nIf any `fragrance` category items appear in the critical or low lists, add this advisory:\n\nWhen fragrance oils run low, prioritize restocking the 5 most-used scents first. To identify them, query session attribute data from recent bookings and rank by scent selection frequency. Common top performers at W&W locations:\n\n1. Vanilla Bean\n2. Lavender Fields\n3. Sandalwood\n4. Blood Orange\n5. Cardamom Tea\n\nThese 5 account for approximately 40% of guest selections — running out of any one during peak hours disrupts the full fragrance wall experience.\n";
|
|
47
|
+
|
|
48
|
+
/** Raw SKILL.md content for the `email-campaign` skill. */
|
|
49
|
+
export const emailCampaign = "---\nid: email-campaign\nname: Email Campaign Writer\ndescription: Writes complete marketing email campaigns for Wicks & Whiskers — two A/B subject lines, a preheader, 150–200 word body copy, a CTA button, and an unsubscribe line — for promos, re-engagement, seasonal, loyalty, and new experience campaigns.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Email Campaign Writer\n\nYou write marketing emails for {{businessName}} — concise, warm, and specific enough that recipients feel like the email was written for them, not blasted to a list. Every campaign includes two A/B subject line variants, a preheader, body copy, a CTA button label, and a compliant unsubscribe line.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Write a marketing email\"\n- \"Email campaign for [event/offer]\"\n- \"Re-engagement email for lapsed guests\"\n- \"Loyalty email about [tier upgrade / point expiry]\"\n- \"Announcement email for [new experience]\"\n- Any email marketing or newsletter writing request\n\nIf no campaign type is specified, ask: \"What type of campaign is this — promo, re-engagement, seasonal, loyalty, or new experience announcement?\"\n\n## Campaign Types\n\n| Type | Use Case | Key Angle |\n|---|---|---|\n| **Promo** | Discount or time-limited offer | Specific offer with clear deadline (e.g., \"20% off this weekend only\") |\n| **Re-engagement** | Win back guests absent 60+ days | \"We miss you\" energy + a reason to come back now |\n| **Seasonal** | Holiday, Valentine's Day, birthday month, spring kitten season | Tie to moment in time; urgency is natural |\n| **Loyalty** | Tier upgrade notification, point expiry warning, milestone | Celebrate the guest's progress; make them feel seen |\n| **New experience** | Announce a new experience type, event, or special offering | Lead with what's new; make them feel like insiders |\n\n## Output Format\n\nAlways produce all six components in this order:\n\n---\n\n### Subject A\n35–50 characters. Use a **curiosity or question angle** — make them wonder what's inside.\n\nExamples:\n- \"Your candle is waiting for you, {{firstName}}\"\n- \"Can we ask you something?\"\n- \"We counted — it's been 94 days 😢\"\n\n### Subject B\n35–50 characters. Use a **direct value or offer angle** — lead with what they get.\n\nExamples:\n- \"20% off your next session — this weekend\"\n- \"You just hit Silver tier 🎉\"\n- \"New experience drop: Private Kitten Parties\"\n\n### Preheader\n85–100 characters. This appears in the inbox preview after the subject line. It should extend or complement the subject — never repeat it verbatim.\n\nExamples:\n- \"Join us this Valentine's weekend for a candle pour and some seriously cute kittens.\"\n- \"Your points expire March 31 — here's how to use them before they disappear.\"\n\n### Email Body\n150–200 words. 3–4 short paragraphs. Apply these rules:\n\n**Opening rule**: Never \"Dear Customer\" or \"Hi there.\" Open with the value or the hook, addressed to `{{firstName}}` if personalization is enabled.\n\nGood: \"{{firstName}}, your points don't expire forever — but they do expire March 31.\"\nBad: \"Dear Valued Customer, we wanted to reach out...\"\n\n**Paragraph 2**: The detail — what, when, how much, why it matters. Be specific. Include one concrete W&W detail to make it feel personal (e.g., \"your candle bar seat\", \"the Kitten Klubhouse is at capacity most Saturdays now\", \"we just got six new foster kittens from {{rescuePartnerName}}\").\n\n**Paragraph 3**: The social proof, mission connection, or secondary value (e.g., \"Every session supports {{rescuePartnerName}}'s foster kittens — so date night does actual good.\").\n\n**Paragraph 4 (optional)**: A soft handling of objection or a P.S.-style closer. Not required for short campaigns.\n\nUse contractions. Keep sentences punchy. Aim for a 7th-grade reading level — this email should scan in 20 seconds.\n\n### CTA Button Text\n3–5 words. Action-oriented. Not \"Click here\" or \"Learn more.\"\n\nGood: \"Book My Session\", \"Claim My Offer\", \"See What's New\", \"Use My Points\"\nBad: \"Submit\", \"Go\", \"Click Here\"\n\n### Unsubscribe Line\n```\nYou're receiving this because you visited {{businessName}}. Unsubscribe\n```\n\n---\n\n## W&W-Specific Angles\n\nUse these details to make emails feel specific and real — not like they were written by a template:\n\n- **Kitten adoption mission**: \"Every visit helps {{rescuePartnerName}} place kittens in forever homes.\"\n- **Seasonal scents**: Reference the season's featured fragrances (spring → florals and citrus; fall → spice and wood; winter → pine, cedar, clove).\n- **New jar arrivals**: If announcing new vessels, describe them specifically (\"matte black ceramic with a cork lid — perfect for the dresser\").\n- **Valentine's / galentine's**: Candle making is inherently romantic and social. Lean into both.\n- **Gift card angle**: \"The easiest gift for the person who has everything — except a kitten lounge afternoon.\"\n- **Private events**: \"Your whole team, the whole venue, six foster kittens — just for you.\"\n\n## Tone Rules\n\n- Warm and genuine — not corporate, not overly exclamatory\n- Contractions are expected (`you've`, `we're`, `it's`)\n- ONE specific {{businessName}} detail per email to avoid generic feel\n- Emojis: maximum two per email, only where natural — never in the subject line of Subject A (curiosity variant)\n- Never: \"Don't miss out\", \"Limited time only!!!\", \"Act fast before it's too late\" — urgency is fine; panic-selling is not\n\n## Example Output (Re-engagement Campaign)\n\n**Subject A**: \"It's been a while, {{firstName}}\"\n**Subject B**: \"Come back — and bring a friend for free\"\n**Preheader**: \"We've got 7 new foster kittens, a full fragrance wall refresh, and your name on a candle bar stool.\"\n\n**Body**:\n{{firstName}}, it's been a while since you've been in, and we noticed.\n\nThe candle bar has a few new jar styles you haven't seen yet, and {{rescuePartnerName}} just dropped off a batch of spring foster kittens who are absolutely unbearable to look at (in the best way).\n\nBring a friend on your next visit and we'll waive their session fee — no code needed, just mention this email when you book. Valid through the end of the month.\n\nWe'd love to see you back.\n\n**CTA**: Book My Return Visit\n**Unsubscribe**: You're receiving this because you visited {{businessName}}. Unsubscribe\n";
|
|
50
|
+
|
|
51
|
+
/** Raw SKILL.md content for the `social-calendar` skill. */
|
|
52
|
+
export const socialCalendar = "---\nid: social-calendar\nname: Social Media Calendar\ndescription: Creates a full month of social media content for Instagram, TikTok, and Facebook — 20–30 posts with captions, hashtags, content descriptions, and a posting schedule following W&W's four content pillars.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Social Media Calendar\n\nYou produce a complete month of social content for {{businessName}} — structured, ready-to-execute, and consistent with Wicks & Whiskers' four content pillars. Output includes post-by-post guidance with content descriptions, platform assignments, captions, hashtags, and optional reel or story concepts.\n\n## When to Trigger\n\nInvoke this skill when someone asks:\n\n- \"Social calendar for [month]\"\n- \"Content plan for this month\"\n- \"Instagram content ideas\"\n- \"Give me 30 social posts\"\n- \"Social media plan\"\n- Any social media content calendar request\n\nIf no month is specified, use the current calendar month.\n\n## Content Pillars and Proportions\n\nEvery calendar must follow this mix. In a 20-post month: 8 kitten, 6 candle/craft, 4 community/story, 2 promotional. In a 30-post month: 12 kitten, 9 candle/craft, 6 community/story, 3 promotional.\n\n| Pillar | Target % | What It Covers |\n|---|---|---|\n| **Kitten** | 40% | Individual kitten features, adoption stories, play videos, \"kitten of the week,\" new arrivals, kitten care tips |\n| **Candle / Craft** | 30% | Scent guides, pour process reels, customer creation showcases, fragrance family explainers, wick trimming tips, jar spotlights |\n| **Community / Story** | 20% | Adoption happy tails, staff spotlights, rescue partner features, behind-the-scenes, guest testimonial reposts |\n| **Promotional** | 10% | Booking CTAs, gift card promotions, private party availability — NEVER more than 1 promotional post per 5 posts in the feed |\n\nNever front-load promotional posts. Distribute them evenly through the month.\n\n## Platform Strategy\n\n| Platform | Best Content | Caption Length | Frequency |\n|---|---|---|---|\n| **Instagram** | Reels (kittens playing, candle pours), carousel (scent guides, fragrance families), single photo (product showcases, kitten portraits) | 150–220 chars + hashtags | 5–7×/week |\n| **TikTok** | Short-form video: kitten chaos, ASMR candle pour, \"what your scent says about you\" | 100–150 chars + 3–5 tags | 3–5×/week |\n| **Facebook** | Adoption announcements, event shares, longer community stories, gift card promotions | 200–350 chars | 3–4×/week |\n\nFor a full calendar, assign each post a primary platform. High-performing content should be noted as cross-postable.\n\n## W&W Hashtag Bank\n\nUse 5–7 per Instagram post, 3–5 per TikTok:\n\n```\n#wicksandwhiskers #candlemaking #kittencafe #fostercat\n#rescuekitten #customcandle #datenight #soycandle\n#candlebar #kitten #adoptdontshop #kittensofinstagram\n#chandler #candlepour #{{city}}eats #{{city}}things\n#fosteringkittens #rescuepets #candlelover #kittensofig\n```\n\nAlways include `#wicksandwhiskers` and at least one city-specific tag.\n\n## Post Format\n\nFor every post, output exactly these fields:\n\n```\nPost [N] — [Day, Date]\nPlatform: Instagram / TikTok / Facebook\nPillar: Kitten | Candle/Craft | Community | Promotional\nContent: [What to film or photograph — 1–2 sentences of direction]\nCaption: [Full caption text — within platform character limit]\nHashtags: [5–7 tags for IG; 3–5 for TikTok; none needed for FB]\nReel/Story idea: [Optional — 1 sentence if a reel or story version is a natural extension]\n```\n\n## Monthly Rhythm\n\nStructure the month in three acts:\n\n**Opening week**: Lead with a strong kitten post (new arrivals, adorable video) or a stunning candle pour. Hook the algorithm and set the tone for the month.\n\n**Mid-month**: Maintain the pillar mix. Place the month's promotional content here, sandwiched between community and kitten posts. If the month includes a seasonal moment (Valentine's Day, Mother's Day, back-to-school, etc.), build toward it in the two weeks prior.\n\n**Closing week**: End on warmth. An adoption success story, a guest candle showcase with a heartfelt comment, or a kitten who found a home. Close the month in a way that makes people look forward to following next month.\n\n## Seasonal Awareness\n\nAdjust the calendar's tone and topics based on the month:\n\n| Month | Key Dates and Themes |\n|---|---|\n| January | New year gifting, \"treat yourself\" angle, quiet cozy season |\n| February | Valentine's Day (Feb 14), Galentine's, Kitten adoption awareness month |\n| March | Spring kitten season begins — new foster arrivals from {{rescuePartnerName}} |\n| April | Earth Day (soy wax sustainability), spring scent spotlight |\n| May | Mother's Day — custom candle as gift, family-friendly experiences |\n| June | Summer date night, Pride month (inclusive community content) |\n| July | Summer workshop, behind-the-scenes content during slower weeks |\n| August | Back-to-school gift guide, fragrance highlight: cozy/warm preview |\n| September | Fall scent launch — spice, wood, warm gourmand |\n| October | Seasonal scents, kitten Halloween content (costumes done tastefully), cozy vibes |\n| November | Holiday gifting starts, gift card push begins gently |\n| December | Holiday gift guide, end-of-year adoption stories, year in review |\n\n## Example Posts\n\n### Kitten Pillar Example\n\n```\nPost 1 — Monday, Feb 3\nPlatform: Instagram\nPillar: Kitten\nContent: Portrait of Mochi (tabby) in soft window light. Close-up on face, whiskers sharp.\nCaption: This is Mochi. She arrived last Tuesday and has already decided the candle bar is hers. 🐾 She's available for adoption through @{{rescuePartnerName}} — link in bio.\nHashtags: #wicksandwhiskers #fostercat #rescuekitten #kittensofinstagram #adoptdontshop #{{city}}things #kittencafe\nReel idea: 15-second clip of Mochi discovering the candle bar for the first time — sniff everything, knock nothing (ideally).\n```\n\n### Candle/Craft Pillar Example\n\n```\nPost 4 — Thursday, Feb 6\nPlatform: TikTok\nPillar: Candle/Craft\nContent: Overhead pour video — slow candle wax pour into amber glass jar. ASMR-friendly. Show the wax settling and the slight surface ripple.\nCaption: The most satisfying 30 seconds of your Thursday 🕯️ Come pour yours — link in bio.\nHashtags: #candlepour #candlemaking #asmrcandle #customcandle #{{city}}\n```\n\n### Promotional Pillar Example\n\n```\nPost 10 — Saturday, Feb 15\nPlatform: Instagram + Facebook\nPillar: Promotional\nContent: Flat lay of a gift card on top of a just-poured candle — styled with dried flowers and a small bow.\nCaption: Still looking for a Valentine's gift? A {{businessName}} gift card = custom candle + kitten time. Book any experience, any date. Grab yours at the link in bio.\nHashtags: #wicksandwhiskers #candlemaking #kittencafe #giftcard #valentinesdaygift #{{city}}eats #datenight\n```\n\n## Calendar Output Format\n\nStart with a summary table:\n\n```\nContent Calendar — [Month Year] — {{locationName}}\n────────────────────────────────────────────────────\nTotal Posts: 24\n Kitten: 10 (41%)\n Candle/Craft: 7 (29%)\n Community: 5 (21%)\n Promotional: 2 (9%)\n\nPlatforms: Instagram (16), TikTok (12), Facebook (8)\nNote: 6 posts are cross-platform (counted once in totals)\n```\n\nThen list all posts in chronological order using the post format above.\n";
|
|
53
|
+
|
|
54
|
+
/** All skills for the wicks-and-whiskers kit, keyed by skill ID. */
|
|
55
|
+
export const allSkills: Record<string, string> = {
|
|
56
|
+
'staff-briefing': staffBriefing,
|
|
57
|
+
'guest-letter': guestLetter,
|
|
58
|
+
'kitten-profile': kittenProfile,
|
|
59
|
+
'candle-expertise': candleExpertise,
|
|
60
|
+
'memory-narrative': memoryNarrative,
|
|
61
|
+
'booking-digest': bookingDigest,
|
|
62
|
+
'customer-insights': customerInsights,
|
|
63
|
+
'venue-data-model': venueDataModel,
|
|
64
|
+
'blog-draft': blogDraft,
|
|
65
|
+
'experience-copy': experienceCopy,
|
|
66
|
+
'demand-forecast': demandForecast,
|
|
67
|
+
'revenue-report': revenueReport,
|
|
68
|
+
'inventory-health': inventoryHealth,
|
|
69
|
+
'email-campaign': emailCampaign,
|
|
70
|
+
'social-calendar': socialCalendar
|
|
71
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @soulcraft/kits/skills/world-building
|
|
3
|
+
* @description Raw SKILL.md content for the world-building kit's AI skills.
|
|
4
|
+
*
|
|
5
|
+
* Generated from: kits/world-building/skills/{skillId}/SKILL.md
|
|
6
|
+
* Do not edit directly — edit the source SKILL.md files and re-run `bun run build:skills`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Raw SKILL.md content for the `create-timeline` skill. */
|
|
10
|
+
export const createTimeline = "---\nid: create-timeline\nname: Build Historical Timeline\ndescription: Create the history of your world\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: true\nrequiresData: false\n---\n\n## Build Historical Timeline\n\nCreate the history of your world\n\n### Steps\n\n1. Define the origin point (creation, discovery, etc.)\n2. Identify major eras and their characteristics\n3. Add world-changing events\n4. Connect events to their consequences\n5. Place character births and deaths\n6. Mark faction formations and falls\n7. Note technological/magical developments\n8. Identify cause-effect chains\n9. Use Timeline view to visualize\n10. Check for logical consistency\n\n### Expected Outputs\n\n- Timeline view\n- Era documents\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"create timeline\"\n- \"world history\"\n- \"historical events\"\n- \"when did\"\n";
|
|
11
|
+
|
|
12
|
+
/** Raw SKILL.md content for the `create-faction` skill. */
|
|
13
|
+
export const createFaction = "---\nid: create-faction\nname: Create Faction\ndescription: Design an organization or group\nversion: \"1.0.0\"\ntype: invocable\nparameters: [factionType]\nrequiresVision: false\nrequiresData: false\n---\n\n## Create Faction\n\nDesign an organization or group\n\n### Steps\n\n1. Name and type (guild, nation, cult, etc.)\n2. History: Origins and major events\n3. Goals: What they want\n4. Methods: How they operate\n5. Structure: How they're organized\n6. Culture: Beliefs and practices\n7. Resources: What they control\n8. Allies and enemies\n9. Key members\n10. Link to characters, locations, and other factions\n\n### Inputs Required\n\n- **factionType** (required): Type of organization\n\n### Expected Outputs\n\n- Faction document\n- Graph connections\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"create faction\"\n- \"new faction\"\n- \"add organization\"\n- \"design group\"\n";
|
|
14
|
+
|
|
15
|
+
/** Raw SKILL.md content for the `culture-builder` skill. */
|
|
16
|
+
export const cultureBuilder = "---\nid: culture-builder\nname: culture-builder\ndescription: Create consistent fictional cultures with customs, languages, and social structures\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: true\nrequiresData: false\n---\n\n## Culture Builder Skill\n\nWhen the user invokes `/culture`, help them design consistent, believable fictional cultures for their world.\n\n### Invocation Patterns\n\n- `/culture` - Design new culture\n- `/culture [aspect]` - Focus on specific aspect (religion, language, etc.)\n- `/culture compare` - Compare/contrast cultures in world\n\n### Culture Design Framework\n\n**Environmental Foundation**\n- Geography shapes culture\n- Climate influences lifestyle\n- Resources determine economy\n- Neighbors affect development\n\n### Output Format\n\n```markdown\n## Culture: [Name]\n\n### Overview\n- **Region**: [Geographic location]\n- **Population**: [Size and distribution]\n- **One-sentence description**: [Elevator pitch]\n\n### Environmental Context\n- **Climate**: [Description]\n- **Terrain**: [Description]\n- **Key resources**: [What they have]\n- **Scarcities**: [What they lack]\n\n### Social Structure\n\n#### Hierarchy\n[Describe power structure]\n\n#### Family Structure\n- Unit size: [Nuclear/extended/clan]\n- Lineage: [Patrilineal/matrilineal/bilateral]\n- Marriage customs: [Monogamy/polygamy/other]\n- Inheritance: [How wealth/status passes]\n\n#### Gender Roles\n[Describe expectations and variations]\n\n#### Social Classes\n| Class | Role | Size | Mobility |\n|-------|------|------|----------|\n| [Class 1] | [Role] | [%] | [How to move] |\n\n### Economy\n- **Primary industries**: [Agriculture, trade, etc.]\n- **Currency**: [What they use]\n- **Trade goods**: [What they export/import]\n- **Wealth markers**: [How wealth is displayed]\n\n### Religion/Spirituality\n- **Belief system**: [Monotheism, polytheism, animism, etc.]\n- **Creation myth**: [Brief summary]\n- **Afterlife beliefs**: [What happens after death]\n- **Religious practices**: [Rituals, holidays]\n- **Religious hierarchy**: [Priests, shamans, etc.]\n\n### Values & Taboos\n**Core Values**\n1. [Value 1]: [How it manifests]\n2. [Value 2]: [How it manifests]\n3. [Value 3]: [How it manifests]\n\n**Taboos**\n1. [Taboo 1]: [Consequences]\n2. [Taboo 2]: [Consequences]\n\n### Daily Life\n- **Typical day**: [Routine]\n- **Diet**: [Food staples]\n- **Clothing**: [Style and significance]\n- **Housing**: [Architecture]\n- **Recreation**: [Games, arts, leisure]\n\n### Language & Communication\n- **Language family**: [Relationship to others]\n- **Key phrases**: [Greetings, oaths, etc.]\n- **Naming conventions**: [How names work]\n- **Non-verbal communication**: [Gestures, customs]\n\n### Arts & Culture\n- **Music**: [Instruments, styles]\n- **Visual arts**: [Forms, subjects]\n- **Storytelling**: [Oral tradition, literature]\n- **Architecture**: [Distinctive features]\n\n### Military/Defense\n- **Martial tradition**: [Warrior culture or not]\n- **Weapons**: [Distinctive arms]\n- **Tactics**: [How they fight]\n- **Who serves**: [Conscription, professional, etc.]\n\n### Relationships with Others\n| Culture | Relationship | History |\n|---------|--------------|---------|\n| [Culture A] | [Allied/Hostile/Neutral] | [Brief history] |\n\n### Historical Events\n- [Event 1]: [Impact on culture]\n- [Event 2]: [Impact on culture]\n\n### Internal Variation\n[How does culture vary by region, class, generation?]\n```\n\n### Cultural Elements to Consider\n\n**Identity Markers**\n- How do they see themselves?\n- What makes them \"them\" vs. outsiders?\n- What are they proud of?\n- What do they hide or minimize?\n\n**Rites of Passage**\n- Birth customs\n- Coming of age\n- Marriage\n- Death/funerals\n\n**Conflict Resolution**\n- Legal systems\n- Punishment types\n- Dispute mediation\n- Honor/revenge customs\n\n### Avoiding Stereotypes\n\n**Do**\n- Base on multiple real cultures\n- Include internal diversity\n- Show change over time\n- Have individuals break norms\n\n**Don't**\n- Make one trait define them\n- Copy one real culture exactly\n- Make them uniform\n- Use offensive stereotypes\n\n### Culture Interaction\n\n**Cultural Exchange**\n- Trade routes\n- Intermarriage\n- Shared borders\n- Wars and conquest\n\n**Cultural Tension**\n- Value conflicts\n- Resource competition\n- Historical grievances\n- Misunderstandings\n";
|
|
17
|
+
|
|
18
|
+
/** Raw SKILL.md content for the `create-character` skill. */
|
|
19
|
+
export const createCharacter = "---\nid: create-character\nname: Create Character Profile\ndescription: Develop a detailed character for your world\nversion: \"1.0.0\"\ntype: invocable\nparameters: [characterRole]\nrequiresVision: false\nrequiresData: false\n---\n\n## Create Character Profile\n\nDevelop a detailed character for your world\n\n### Steps\n\n1. Name and physical description\n2. Background: Where they came from\n3. Motivation: What they want and why\n4. Personality: Key traits and flaws\n5. Relationships: Connections to other characters\n6. Skills: What they're good at\n7. Arc: How they might change\n8. Role in story: Their narrative function\n9. Secrets: What they hide\n10. Link to factions, locations, and events\n\n### Inputs Required\n\n- **characterRole** (required): Role in the story\n\n### Expected Outputs\n\n- Character profile document\n- Graph connections\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"create character\"\n- \"new character\"\n- \"add character\"\n- \"character profile\"\n";
|
|
20
|
+
|
|
21
|
+
/** Raw SKILL.md content for the `design-magic-system` skill. */
|
|
22
|
+
export const designMagicSystem = "---\nid: design-magic-system\nname: Design Magic/Tech System\ndescription: Create rules for supernatural or advanced abilities\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Design Magic/Tech System\n\nCreate rules for supernatural or advanced abilities\n\n### Steps\n\n1. Source: Where does it come from?\n2. Access: Who can use it and how?\n3. Costs: What does it require?\n4. Limitations: What can't it do?\n5. Manifestations: How does it appear?\n6. Social impact: How does society view it?\n7. Historical impact: How has it shaped history?\n8. Categories: Types or schools of magic\n9. Progression: How does one grow stronger?\n10. Document in Systems section\n\n### Expected Outputs\n\n- Magic system document\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"design magic\"\n- \"magic system\"\n- \"how magic works\"\n- \"technology rules\"\n";
|
|
23
|
+
|
|
24
|
+
/** Raw SKILL.md content for the `consistency-check` skill. */
|
|
25
|
+
export const consistencyCheck = "---\nid: consistency-check\nname: consistency-check\ndescription: Check worldbuilding for internal consistency and identify contradictions\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Worldbuilding Consistency Check Skill\n\nWhen the user invokes `/consistency`, help them identify contradictions and logical inconsistencies in their worldbuilding.\n\n### Invocation Patterns\n\n- `/consistency` - Full world consistency audit\n- `/consistency [system]` - Check specific system (magic, geography, etc.)\n- `/consistency [event]` - Check historical event implications\n\n### Consistency Check Areas\n\n**Physical World**\n- Geography and climate logic\n- Travel times and distances\n- Day/night cycles, seasons\n- Resource distribution\n\n**Magic/Technology**\n- Rule consistency\n- Power level balance\n- Limitation adherence\n- Social implications\n\n**History**\n- Timeline coherence\n- Cause and effect chains\n- Population changes\n- Technology progression\n\n**Society**\n- Economic viability\n- Political stability\n- Cultural logic\n- Information flow\n\n### Output Format\n\n```markdown\n## Consistency Audit: [World/System Name]\n\n### Summary\n- **Elements reviewed**: [X]\n- **Issues found**: [X]\n- **Critical issues**: [X]\n- **Minor issues**: [X]\n\n### Critical Issues (Story-Breaking)\n\n#### Issue 1: [Title]\n**Category**: [Physical/Magic/History/Society]\n**Contradiction**:\n- [Statement A] conflicts with [Statement B]\n**Location**: [Where in notes/story]\n**Impact**: [How this affects the world]\n**Suggested fixes**:\n1. [Option 1]\n2. [Option 2]\n\n#### Issue 2: [Title]\n[Same format]\n\n### Moderate Issues (Noticeable)\n\n#### Issue 3: [Title]\n**Category**: [Category]\n**Problem**: [Description]\n**Suggested fix**: [Solution]\n\n### Minor Issues (Nitpicks)\n\n- [Minor issue 1]: [Quick fix]\n- [Minor issue 2]: [Quick fix]\n\n### Unexplored Implications\n\nThings established but not fully developed:\n\n1. **[Element]**: If [X] is true, then [Y] should follow\n - Consider: [What to explore]\n\n2. **[Element]**: [Description]\n - Consider: [What to explore]\n\n### Questions to Resolve\n\n1. [Unresolved question 1]\n2. [Unresolved question 2]\n3. [Unresolved question 3]\n\n### Consistency Checklist\n\n#### Physical World\n- [ ] Travel times match distances\n- [ ] Climate matches geography\n- [ ] Resources support population\n- [ ] Ecosystems are viable\n\n#### Magic/Technology\n- [ ] Rules apply consistently\n- [ ] Costs always apply\n- [ ] Limitations are maintained\n- [ ] Social impact addressed\n\n#### History\n- [ ] Events follow logically\n- [ ] Timeline is consistent\n- [ ] Consequences are shown\n- [ ] Records match events\n\n#### Society\n- [ ] Economy functions\n- [ ] Government is stable (or unstably for reason)\n- [ ] Cultures interact logically\n- [ ] Information spreads realistically\n```\n\n### Common Consistency Issues\n\n**Geography**\n- Desert next to rainforest\n- Rivers flowing uphill\n- Impossible travel times\n- Missing trade routes\n\n**Magic**\n- Rules broken when convenient\n- No cost when there should be\n- Power creep without explanation\n- Ignored social implications\n\n**History**\n- Population doesn't match events\n- Technology doesn't progress\n- No consequence from major events\n- Contradicting accounts without reason\n\n**Society**\n- Economy doesn't add up\n- Governments wouldn't survive\n- Information travels too fast/slow\n- Cultures don't interact logically\n\n### Cascading Consistency\n\n**If X, Then Y**\nEvery element implies other elements:\n\n- If magic healing exists → medicine less developed, longer lifespans, different warfare\n- If instant communication exists → different politics, faster news, different spy craft\n- If flying mounts common → different architecture, different borders, different warfare\n\n### Fixing Inconsistencies\n\n**Option 1: Change the contradiction**\n- Modify one element to match the other\n- Usually the simpler fix\n\n**Option 2: Explain the exception**\n- Create in-world reason for apparent contradiction\n- Can add depth if done well\n\n**Option 3: Remove the element**\n- If neither fits, maybe you don't need it\n- Simplicity is valuable\n\n**Option 4: Embrace the mystery**\n- Some things can be unexplained\n- Works better for soft magic/rare events\n";
|
|
26
|
+
|
|
27
|
+
/** Raw SKILL.md content for the `magic-systems` skill. */
|
|
28
|
+
export const magicSystems = "---\nid: magic-systems\nname: magic-systems\ndescription: Design consistent magic systems using Sanderson's Laws and other frameworks\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Magic System Design Skill\n\nWhen the user invokes `/magic`, help them design consistent, compelling magic systems for their fictional worlds.\n\n### Invocation Patterns\n\n- `/magic` - Design new magic system\n- `/magic audit` - Check consistency of existing system\n- `/magic cost` - Develop limitations and costs\n- `/magic scale` - Define power levels\n\n### Sanderson's Laws of Magic\n\n**First Law**: An author's ability to solve conflict with magic is DIRECTLY PROPORTIONAL to how well the reader understands said magic.\n- Hard magic: Clear rules, can solve problems\n- Soft magic: Mysterious, creates wonder, not for problem-solving\n\n**Second Law**: Limitations > Powers\n- What magic CAN'T do is more interesting than what it can\n- Costs create drama and stakes\n- Limitations force creative problem-solving\n\n**Third Law**: Expand what you have before adding something new\n- Explore implications of existing rules\n- Combine abilities in unexpected ways\n- Don't add powers to fix plot holes\n\n### Output Format\n\n```markdown\n## Magic System: [Name]\n\n### Core Concept\n[One-paragraph description of how magic works]\n\n### System Type\n- **Hard/Soft Spectrum**: [1-10, 1=soft, 10=hard]\n- **Source**: [Where magic comes from]\n- **Access**: [Who can use it and why]\n\n### Fundamental Rules\n1. [Rule 1]: [Explanation]\n2. [Rule 2]: [Explanation]\n3. [Rule 3]: [Explanation]\n\n### Costs & Limitations\n\n#### Physical Costs\n- [Cost 1]: [Effect]\n- [Cost 2]: [Effect]\n\n#### Resource Costs\n- [What's consumed]\n- [How it's replenished]\n\n#### Inherent Limitations\n- [What magic cannot do]\n- [Conditions that prevent use]\n\n### Power Levels\n\n| Level | Name | Capabilities | Rarity |\n|-------|------|--------------|--------|\n| 1 | [Name] | [Abilities] | [% of users] |\n| 2 | [Name] | [Abilities] | [% of users] |\n| 3 | [Name] | [Abilities] | [% of users] |\n\n### Types/Schools (if applicable)\n| Type | Focus | Strengths | Weaknesses |\n|------|-------|-----------|------------|\n| [Type 1] | [Focus] | [Strengths] | [Weaknesses] |\n| [Type 2] | [Focus] | [Strengths] | [Weaknesses] |\n\n### Learning/Progression\n- How is magic learned?\n- How long does training take?\n- Can power grow? How?\n- What determines potential?\n\n### Social Implications\n- How do non-magic users view magic?\n- How is magic regulated?\n- Economic impact of magic\n- Military applications\n\n### Known Exceptions\n- [Exception 1]: [Why it exists]\n- [Exception 2]: [Why it exists]\n\n### Story Applications\n**Good for**: [Types of conflicts/stories]\n**Avoid**: [What this system doesn't support well]\n```\n\n### Cost Types\n\n**Physical Costs**\n- Fatigue, exhaustion\n- Pain, injury\n- Aging, life force\n- Hunger, thirst\n\n**Resource Costs**\n- Mana/magical energy\n- Material components\n- Rare substances\n- Environmental conditions\n\n**Time Costs**\n- Casting time\n- Cooldowns\n- Preparation rituals\n- Recovery periods\n\n**Opportunity Costs**\n- Can only learn one school\n- Using ability A prevents B\n- Specialization requirements\n\n**Social/Psychological Costs**\n- Isolation, madness\n- Moral corruption\n- Memory loss\n- Emotional numbness\n\n### Magic Sources\n\n**Internal Sources**\n- Innate ability (bloodline, chosen one)\n- Learned skill (study, practice)\n- Emotional/willpower driven\n\n**External Sources**\n- Divine (gods, spirits)\n- Natural (elements, ley lines)\n- Artifacts (items, tools)\n- Pacts (bargains, contracts)\n\n**Combination Sources**\n- Internal potential + external catalyst\n- Multiple sources with different effects\n\n### Consistency Checklist\n\n- [ ] Rules apply equally to all users\n- [ ] Costs scale with power\n- [ ] Limitations create interesting choices\n- [ ] Exceptions are explained\n- [ ] System serves the story\n- [ ] Consequences are explored\n- [ ] World has adapted to magic's existence\n";
|
|
29
|
+
|
|
30
|
+
/** Raw SKILL.md content for the `kit-expertise` skill. */
|
|
31
|
+
export const kitExpertise = "---\nid: kit-expertise\nname: kit-expertise\ndescription: Domain expertise for World Building Bible - applied automatically when working in this kit\nversion: \"1.0.0\"\ntype: background\nrequiresVision: false\nrequiresData: false\n---\n\n## Your Role\n\nYou are a worldbuilding expert and creative collaborator who has helped design worlds for novels, games, and films. You understand narrative structure, cultural anthropology, and the importance of internal consistency. You help creators build rich, believable worlds while avoiding common pitfalls.\n\n## Your Expertise\n\n- Fantasy and science fiction worldbuilding\n- Magic system design\n- Cultural and societal development\n- Historical timeline creation\n- Character motivation and backstory\n- Geography and climate impact on culture\n- Political and economic systems\n- Mythology and religion design\n- Species and creature design\n- Consistency checking and continuity\n\n## Your Approach\n\nWork alongside the user as a creative partner\n\n## Things to Avoid\n\n- Don't create generic, cliched elements without a twist\n- Don't ignore the consequences of world elements on society\n- Don't let magic or technology solve every problem\n- Don't make cultures one-dimensional stereotypes\n- Don't forget that people are the heart of any world\n\n## Domain Knowledge\n\n### Key Terms\n\n**worldbuilding**\nThe process of creating a fictional world with internal consistency\n\n**magic system**\nRules governing how supernatural abilities work\n\n**hard magic**\nMagic with clearly defined rules and limitations\n\n**soft magic**\nMagic that is mysterious and unexplained\n\n**lore**\nThe background history and mythology of a world\n\n**retcon**\nRetroactive continuity - changing established facts\n\n**canon**\nThe official, accepted facts about a fictional world\n\n**setting bible**\nA reference document containing all world details\n\n**conlang**\nA constructed language created for a fictional world\n\n**cosmology**\nThe structure and nature of the universe\n\n**pantheon**\nThe collection of gods in a fictional religion\n\n**faction**\nA group with shared goals and identity\n\n**artifact**\nA significant item with history or power\n\n**MacGuffin**\nAn object that drives the plot\n\n### Best Practices\n\n- Every world element should serve the story or gameplay\n- Magic/technology should have costs and limitations\n- Cultures should have internal logic and diversity\n- History should shape the present in visible ways\n- Geography influences culture, economy, and conflict\n- Create iceberg worldbuilding - more depth than shown\n- Consistency matters more than complexity\n\n### Common Mistakes to Avoid\n\n- Monocultures where every member of a group is identical\n- Magic that can do anything without cost\n- History that doesn't affect the present\n- Technology that exists without social consequences\n- Species that are just 'humans but with X trait'\n- Villains without understandable motivations\n- Worlds that exist only to serve the protagonist\n\n### Recommended References\n\n- **Sanderson's Laws of Magic**: Brandon Sanderson's principles for magic system design\n- **Wonderbook**: Jeff VanderMeer's guide to imaginative fiction\n- **The World Building Bible**: Comprehensive resource for fiction creators\n";
|
|
32
|
+
|
|
33
|
+
/** Raw SKILL.md content for the `create-location` skill. */
|
|
34
|
+
export const createLocation = "---\nid: create-location\nname: Create Location\ndescription: Design a place in your world\nversion: \"1.0.0\"\ntype: invocable\nparameters: [locationType]\nrequiresVision: false\nrequiresData: false\n---\n\n## Create Location\n\nDesign a place in your world\n\n### Steps\n\n1. Name and type (city, region, landmark)\n2. Geography: Physical characteristics\n3. Climate and environment\n4. History: How it came to be\n5. Culture: Who lives here and how\n6. Economy: How people make a living\n7. Government: How it's ruled\n8. Notable features: What makes it unique\n9. Connections: Relations to other places\n10. Link to region, characters, and factions\n\n### Inputs Required\n\n- **locationType** (required): Type of location\n\n### Expected Outputs\n\n- Location document\n- Graph connections\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"create location\"\n- \"new place\"\n- \"add location\"\n- \"design city\"\n";
|
|
35
|
+
|
|
36
|
+
/** All skills for the world-building kit, keyed by skill ID. */
|
|
37
|
+
export const allSkills: Record<string, string> = {
|
|
38
|
+
'create-timeline': createTimeline,
|
|
39
|
+
'create-faction': createFaction,
|
|
40
|
+
'culture-builder': cultureBuilder,
|
|
41
|
+
'create-character': createCharacter,
|
|
42
|
+
'design-magic-system': designMagicSystem,
|
|
43
|
+
'consistency-check': consistencyCheck,
|
|
44
|
+
'magic-systems': magicSystems,
|
|
45
|
+
'kit-expertise': kitExpertise,
|
|
46
|
+
'create-location': createLocation
|
|
47
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @soulcraft/kits/skills/youtube-content-plan
|
|
3
|
+
* @description Raw SKILL.md content for the youtube-content-plan kit's AI skills.
|
|
4
|
+
*
|
|
5
|
+
* Generated from: kits/youtube-content-plan/skills/{skillId}/SKILL.md
|
|
6
|
+
* Do not edit directly — edit the source SKILL.md files and re-run `bun run build:skills`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Raw SKILL.md content for the `script-writing` skill. */
|
|
10
|
+
export const scriptWriting = "---\nid: script-writing\nname: script-writing\ndescription: Write engaging video scripts with hooks, structure, and retention techniques\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: true\nrequiresData: false\n---\n\n## Script Writing Skill\n\nWhen the user invokes `/script`, help them write engaging video scripts optimized for retention and engagement.\n\n### Invocation Patterns\n\n- `/script` - Write script for planned video\n- `/script outline` - Create script outline\n- `/script hook` - Write opening hook\n- `/script [duration]` - Script for specific length\n\n### Script Structure\n\n**The Hook (0-30 seconds)**\n- Promise value immediately\n- Create curiosity gap\n- Show the end result\n- Challenge an assumption\n\n**Introduction (30 sec - 1 min)**\n- Who you are (brief)\n- What you'll cover\n- Why it matters to them\n- What they'll learn\n\n**Main Content (bulk of video)**\n- Deliver on promise\n- Use pattern interrupts\n- Include visual markers\n- Build momentum\n\n**Conclusion (30 sec - 1 min)**\n- Summarize key points\n- Call to action\n- Tease next content\n- End with energy\n\n### Output Format\n\n```markdown\n## Video Script: [Title]\n\n**Target Duration**: X minutes\n**Target Audience**: [Who]\n**Main Takeaway**: [One sentence]\n\n---\n\n### HOOK (0:00-0:30)\n[Exact words to say]\n\n*[Visual/B-roll notes]*\n\n---\n\n### INTRO (0:30-1:00)\n[Transition and setup]\n\n*[Visual notes]*\n\n---\n\n### SECTION 1: [Topic] (1:00-X:XX)\n\n**Point 1.1**\n[Script content]\n\n*[Visual: Show X]*\n\n**Point 1.2**\n[Script content]\n\n*[Cut to: B-roll of Y]*\n\n**Transition to Section 2**\n[Transition line]\n\n---\n\n### SECTION 2: [Topic] (X:XX-X:XX)\n[Continue format]\n\n---\n\n### CONCLUSION (X:XX-End)\n\n**Summary**\n[Key points recap]\n\n**Call to Action**\n\"If you found this helpful, [specific CTA]\"\n\n**Outro**\n[Sign-off and tease]\n\n---\n\n### THUMBNAIL/TITLE NOTES\n- Thumbnail text: \"[X]\"\n- Title options: [List]\n```\n\n### Hook Formulas\n\n**The Promise Hook**\n\"By the end of this video, you'll know exactly how to [desirable outcome]\"\n\n**The Curiosity Hook**\n\"There's a reason most people fail at [X], and it's not what you think\"\n\n**The Story Hook**\n\"Last week, I [relevant experience], and what I discovered changed everything\"\n\n**The Controversy Hook**\n\"Everything you've been told about [X] is wrong\"\n\n**The Result Hook**\n\"I went from [before state] to [after state] in [time] - here's how\"\n\n### Retention Techniques\n\n**Pattern Interrupts**\n- Change camera angle\n- Cut to B-roll\n- Add graphics/text\n- Change energy/pace\n- \"But wait...\" transitions\n\n**Open Loops**\n- Tease upcoming content\n- \"I'll explain why in a moment\"\n- Save best for later\n- Reference future sections\n\n**Engagement Triggers**\n- Ask questions\n- Request comments\n- Create micro-challenges\n- Share relatable moments\n\n### Word Count by Duration\n\n| Duration | Words | Pages |\n|----------|-------|-------|\n| 3 min | ~450 | ~1.5 |\n| 5 min | ~750 | ~2.5 |\n| 10 min | ~1500 | ~5 |\n| 15 min | ~2250 | ~7.5 |\n| 20 min | ~3000 | ~10 |\n\n### Scripting Tips\n\n**Natural Delivery**\n- Write how you talk\n- Short sentences\n- Read aloud while writing\n- Mark emphasis points\n- Include pause beats\n\n**Visual Integration**\n- Note B-roll moments\n- Mark graphics/text overlays\n- Plan transitions\n- Consider pacing\n\n**Audio Cues**\n- [PAUSE] for dramatic effect\n- [EMPHASIS] key words\n- [SOFTER] for personal moments\n- [ENERGY UP] for excitement\n";
|
|
11
|
+
|
|
12
|
+
/** Raw SKILL.md content for the `generate-ideas` skill. */
|
|
13
|
+
export const generateIdeas = "---\nid: generate-ideas\nname: Generate Video Ideas\ndescription: Brainstorm video ideas based on strategy and trends\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Generate Video Ideas\n\nBrainstorm video ideas based on strategy and trends\n\n### Steps\n\n1. Review channel content pillars\n2. Analyze what's performing well on the channel\n3. Research trending topics in the niche\n4. Check competitor content for inspiration\n5. Generate 10 topic ideas\n6. Rate each by: searchability, passion, uniqueness\n7. Identify top 5 to add to backlog\n8. Prioritize by potential impact\n9. Add to content calendar\n\n### Inputs Required\n\n- **pillar** (optional): Content pillar to focus on\n\n### Expected Outputs\n\n- 10 video ideas with ratings\n- Prioritized top 5\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"video ideas\"\n- \"what should I make\"\n- \"brainstorm content\"\n- \"ideas for videos\"\n";
|
|
14
|
+
|
|
15
|
+
/** Raw SKILL.md content for the `optimize-metadata` skill. */
|
|
16
|
+
export const optimizeMetadata = "---\nid: optimize-metadata\nname: Optimize Video Metadata\ndescription: Optimize title, description, and tags for discovery\nversion: \"1.0.0\"\ntype: invocable\nparameters: [videoTitle, topic]\nrequiresVision: false\nrequiresData: false\n---\n\n## Optimize Video Metadata\n\nOptimize title, description, and tags for discovery\n\n### Steps\n\n1. Research keywords with search volume\n2. Craft title under 60 characters with primary keyword\n3. Write description with keywords in first 2 lines\n4. Add timestamps to description\n5. List resources and links mentioned\n6. Create tag list (primary keyword first)\n7. Write 3 hashtag options\n8. Prepare end screen and cards strategy\n9. Create thumbnail A/B test variants\n\n### Inputs Required\n\n- **videoTitle** (required): Current video title\n- **topic** (required): Video topic\n\n### Expected Outputs\n\n- Optimized metadata package\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"optimize video\"\n- \"SEO for video\"\n- \"improve discoverability\"\n- \"video metadata\"\n";
|
|
17
|
+
|
|
18
|
+
/** Raw SKILL.md content for the `write-script` skill. */
|
|
19
|
+
export const writeScript = "---\nid: write-script\nname: Write Video Script\ndescription: Create a full video script with production notes\nversion: \"1.0.0\"\ntype: invocable\nparameters: [videoTitle]\nrequiresVision: true\nrequiresData: false\n---\n\n## Write Video Script\n\nCreate a full video script with production notes\n\n### Steps\n\n1. Review the video concept and goals\n2. Write the hook (5-second attention grab)\n3. Write the intro (preview the value)\n4. Outline main content sections with key points\n5. Write each section conversationally\n6. Add B-roll notes and visual callouts\n7. Plan pattern interrupts every 30-60 seconds\n8. Write the conclusion and CTA\n9. Add timestamps for editing\n10. Include end screen strategy\n\n### Inputs Required\n\n- **videoTitle** (required): Video title\n- **duration** (optional): Target duration in minutes\n\n### Expected Outputs\n\n- Complete script with production notes\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"write script\"\n- \"script for\"\n- \"create script\"\n- \"script video\"\n";
|
|
20
|
+
|
|
21
|
+
/** Raw SKILL.md content for the `kit-expertise` skill. */
|
|
22
|
+
export const kitExpertise = "---\nid: kit-expertise\nname: kit-expertise\ndescription: Domain expertise for YouTube Channel Content Plan - applied automatically when working in this kit\nversion: \"1.0.0\"\ntype: background\nrequiresVision: false\nrequiresData: false\n---\n\n## Your Role\n\nYouTube Content Strategist helping you plan, create, and optimize video content for growth and engagement\n\n## Your Expertise\n\n- Video content planning and ideation\n- YouTube SEO and discoverability\n- Thumbnail and title optimization\n- Audience retention strategies\n- Content calendars and consistency\n- Analytics interpretation\n- Scripting and storyboarding\n- Community engagement\n\n## Your Approach\n\nWork alongside the user as a creative partner\n\n## Things to Avoid\n\n- Suggesting clickbait without substance\n- Ignoring the creator's niche and voice\n- Recommending trends that don't fit the channel\n- Over-focusing on algorithm at expense of quality\n\n## Domain Knowledge\n\n### Key Terms\n\n**CTR**\nClick-through rate - percentage who click after seeing thumbnail\n\n**AVD**\nAverage view duration - how long viewers watch\n\n**retention graph**\nChart showing when viewers drop off\n\n**end screen**\nInteractive elements in last 20 seconds\n\n**cards**\nInteractive pop-ups during video\n\n**shorts**\nVertical videos under 60 seconds\n\n**community tab**\nChannel's social feed for engagement\n\n**premiere**\nScheduled live video launch with chat\n\n### Best Practices\n\n- Hook viewers in the first 30 seconds\n- Deliver on the promise of title and thumbnail\n- Include pattern interrupts every 30-60 seconds\n- End with clear call-to-action\n- Use end screens and cards strategically\n- Maintain consistent upload schedule\n\n### Common Mistakes to Avoid\n\n- Misleading thumbnails or titles\n- Long intros before value delivery\n- Inconsistent upload schedule\n- Ignoring audience retention data\n- No clear content niche\n- Not responding to comments\n";
|
|
23
|
+
|
|
24
|
+
/** Raw SKILL.md content for the `analyze-performance` skill. */
|
|
25
|
+
export const analyzePerformance = "---\nid: analyze-performance\nname: Analyze Video Performance\ndescription: Review video analytics and generate insights\nversion: \"1.0.0\"\ntype: invocable\nparameters: [videoTitle]\nrequiresVision: false\nrequiresData: false\n---\n\n## Analyze Video Performance\n\nReview video analytics and generate insights\n\n### Steps\n\n1. Review CTR compared to channel average\n2. Analyze retention curve - find drop-off points\n3. Check traffic sources breakdown\n4. Compare suggested video performance\n5. Review comments for feedback themes\n6. Identify what worked well\n7. Identify areas for improvement\n8. Create action items for next video\n9. Update analytics tracking document\n\n### Inputs Required\n\n- **videoTitle** (required): Video to analyze\n\n### Expected Outputs\n\n- Performance analysis\n- Insights and recommendations\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"analyze video\"\n- \"video performance\"\n- \"how did it do\"\n- \"video analytics\"\n";
|
|
26
|
+
|
|
27
|
+
/** Raw SKILL.md content for the `youtube-seo` skill. */
|
|
28
|
+
export const youtubeSeo = "---\nid: youtube-seo\nname: youtube-seo\ndescription: YouTube SEO optimization for titles, tags, thumbnails, and descriptions\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: true\nrequiresData: false\n---\n\n## YouTube SEO Skill\n\nWhen the user invokes `/optimize`, help them optimize their YouTube videos for search and discovery.\n\n### Invocation Patterns\n\n- `/optimize` - Full SEO optimization for video\n- `/optimize title` - Generate optimized titles\n- `/optimize thumbnail` - Thumbnail strategy\n- `/optimize tags` - Tag research and selection\n\n### YouTube Algorithm Factors\n\n**Watch Time**\n- Total minutes viewed\n- Average view duration\n- Percentage watched\n- Session watch time\n\n**Engagement**\n- Likes/dislikes ratio\n- Comments\n- Shares\n- Saves to playlist\n\n**Click-Through Rate (CTR)**\n- Thumbnail effectiveness\n- Title appeal\n- Browse/suggested impressions\n\n**Relevance**\n- Title keywords\n- Description keywords\n- Tags\n- Closed captions\n\n### Output Format\n\n```markdown\n## YouTube SEO Optimization: [Video Topic]\n\n### Keyword Research\n**Primary Keyword**: [keyword]\n- Search volume: [if known]\n- Competition: [High/Medium/Low]\n\n**Secondary Keywords**:\n- [keyword 2]\n- [keyword 3]\n- [keyword 4]\n\n### Title Options (A/B Test)\n1. \"[Primary] - [Hook]\" (X characters)\n2. \"[Number] [Topic] That [Benefit]\" (X characters)\n3. \"[Question format]\" (X characters)\n\n**Recommended**: #[X] because [reason]\n\n### Description (First 150 characters critical)\n```\n[First line with keyword - shows in search]\n\n[Hook/value proposition]\n\n[Timestamps]:\n0:00 Introduction\nX:XX [Chapter 1]\nX:XX [Chapter 2]\n\n[Call to action]\n\n[Links and resources]\n\n[Tags as hashtags: #tag1 #tag2 #tag3]\n```\n\n### Tags (500 character limit)\n**Priority Order**:\n1. [Exact match keywords]\n2. [Phrase variations]\n3. [Broader topic]\n4. [Channel name]\n5. [Common misspellings]\n\n### Thumbnail Strategy\n**Elements to include**:\n- [Text overlay]: \"[KEY WORD]\"\n- [Visual element]: [Description]\n- [Face/emotion]: [If applicable]\n- [Color scheme]: [Contrast with red]\n\n**Avoid**:\n- [What not to do]\n\n### Checklist\n- [ ] Title under 60 characters\n- [ ] Primary keyword in first 3 words\n- [ ] Description starts with hook\n- [ ] Timestamps added\n- [ ] 10-15 relevant tags\n- [ ] Thumbnail is 1280x720\n- [ ] End screen added\n- [ ] Cards added\n- [ ] Playlist assigned\n```\n\n### Title Optimization\n\n**Best Practices**\n- 50-60 characters ideal\n- Front-load keywords\n- Create curiosity gap\n- Use numbers when relevant\n- Avoid clickbait (hurts retention)\n\n**Power Words**\n- How, Why, What\n- Best, Top, Ultimate\n- Secret, Hidden, Proven\n- New, Now, 2024/2025\n\n**Title Formulas**\n- \"[Number] [Topic] to [Benefit]\"\n- \"How to [Result] (Without [Pain])\"\n- \"[Topic] Explained in [Time]\"\n- \"I [Did Thing] for [Time] - Here's What Happened\"\n\n### Thumbnail Principles\n\n**Visual Hierarchy**\n- One clear focal point\n- 3-4 words maximum\n- High contrast colors\n- Face with emotion (when relevant)\n\n**Text Tips**\n- Large, bold fonts\n- Contrasting outline\n- Complement (don't repeat) title\n- Readable at small size\n\n**Common Mistakes**\n- Too much text\n- Low contrast\n- Cluttered design\n- No clear subject\n- Generic stock images\n\n### Tag Strategy\n\n**Tag Categories**\n1. Exact match (main keyword)\n2. Variations (\"how to X\", \"X tutorial\")\n3. Related topics\n4. Channel/brand tags\n5. Broad category\n\n**Don't Waste Tags On**\n- Single words (too broad)\n- Irrelevant trending topics\n- Competitor names (usually)\n- Duplicate variations\n";
|
|
29
|
+
|
|
30
|
+
/** Raw SKILL.md content for the `analytics-insights` skill. */
|
|
31
|
+
export const analyticsInsights = "---\nid: analytics-insights\nname: analytics-insights\ndescription: Interpret YouTube analytics and suggest data-driven improvements\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## YouTube Analytics Insights Skill\n\nWhen the user invokes `/analytics`, help them interpret their YouTube analytics and identify actionable improvements.\n\n### Invocation Patterns\n\n- `/analytics` - Overall channel analysis\n- `/analytics [video]` - Specific video analysis\n- `/analytics retention` - Audience retention deep-dive\n- `/analytics growth` - Growth opportunities\n\n### Key Metrics Overview\n\n**Watch Time**\n- Total hours watched\n- Average view duration\n- Indicates content quality\n- Most important for algorithm\n\n**Views & Traffic**\n- Total views\n- Traffic sources\n- Impression sources\n- Geographic distribution\n\n**Engagement**\n- Likes, comments, shares\n- Subscriber conversion\n- End screen clicks\n- Card clicks\n\n**Revenue (if monetized)**\n- RPM (Revenue per mille)\n- CPM (Cost per mille)\n- Best performing content\n\n### Output Format\n\n```markdown\n## Analytics Insights: [Channel/Video]\n\n### Performance Summary\n| Metric | Value | vs. Average | Trend |\n|--------|-------|-------------|-------|\n| Views | X | +/-X% | 📈/📉 |\n| Watch Time | X hrs | +/-X% | 📈/📉 |\n| Avg View Duration | X:XX | +/-X% | 📈/📉 |\n| CTR | X% | +/-X% | 📈/📉 |\n| Engagement Rate | X% | +/-X% | 📈/📉 |\n\n### Retention Analysis\n```\n[Audience retention graph interpretation]\n\nKey moments:\n- 0:00-0:30: [Hook effectiveness]\n- X:XX: [Drop-off point - why?]\n- X:XX: [Spike - what worked?]\n- End: [Retention at end]\n```\n\n### Traffic Source Breakdown\n| Source | Views | % | Opportunity |\n|--------|-------|---|-------------|\n| Search | X | X% | [Action] |\n| Suggested | X | X% | [Action] |\n| Browse | X | X% | [Action] |\n| External | X | X% | [Action] |\n\n### Top Performing Content\n1. **[Video Title]**\n - Why it worked: [Analysis]\n - Replicate: [What to copy]\n\n2. **[Video Title]**\n - Why it worked: [Analysis]\n\n### Underperforming Content\n1. **[Video Title]**\n - Issue: [What went wrong]\n - Fix: [Recommendation]\n\n### Audience Insights\n- **Peak activity**: [Days/times]\n- **Demographics**: [Age/gender/location]\n- **Returning viewers**: X%\n- **New viewers**: X%\n\n### Actionable Recommendations\n\n#### Immediate Actions\n1. [Specific action with expected impact]\n2. [Specific action with expected impact]\n\n#### Content Strategy\n- [Topic/format to do more of]\n- [Topic/format to stop/reduce]\n- [New opportunity to test]\n\n#### Optimization Opportunities\n- [Thumbnail/title improvements]\n- [SEO optimizations]\n- [Posting schedule adjustments]\n```\n\n### Retention Analysis Guide\n\n**Healthy Retention Curve**\n- First 30 sec: 70%+ staying\n- 50% point: Around middle\n- End: 30%+ for longer videos\n\n**Common Drop-off Causes**\n- 0-30s: Hook didn't deliver\n- Early drop: Intro too long\n- Mid-video: Content gets boring\n- Before CTA: Saw the end coming\n\n**Spikes Indicate**\n- Rewatching valuable content\n- Shared timestamps\n- Controversial moments\n\n### Benchmarks by Category\n\n**Entertainment**\n- CTR: 4-10%\n- Retention: 40-50%\n\n**Education/Tutorial**\n- CTR: 2-5%\n- Retention: 50-70%\n\n**Vlog/Personal**\n- CTR: 5-10%\n- Retention: 30-40%\n\n### Growth Levers\n\n**To Increase Views**\n- Improve CTR (titles/thumbnails)\n- Target better keywords\n- Post more consistently\n- Ride trends\n\n**To Increase Watch Time**\n- Improve retention\n- Make longer content\n- Create binge-worthy series\n- Better hooks\n\n**To Increase Subscribers**\n- Ask for subs (strategic timing)\n- Deliver value consistently\n- Create community\n- End screen optimization\n";
|
|
32
|
+
|
|
33
|
+
/** Raw SKILL.md content for the `develop-video-idea` skill. */
|
|
34
|
+
export const developVideoIdea = "---\nid: develop-video-idea\nname: Develop Video Idea\ndescription: Turn a topic into a structured video concept\nversion: \"1.0.0\"\ntype: invocable\nparameters: [topic]\nrequiresVision: true\nrequiresData: false\n---\n\n## Develop Video Idea\n\nTurn a topic into a structured video concept\n\n### Steps\n\n1. Define the core topic and target viewer\n2. Research what's already ranking for this topic\n3. Identify your unique angle or value-add\n4. Write 5 potential titles (front-load keywords)\n5. Design thumbnail concept (emotion + text + visual)\n6. Write the hook (first 5 seconds)\n7. Outline the main content sections\n8. Plan the call-to-action\n9. Add to content calendar\n\n### Inputs Required\n\n- **topic** (required): Video topic or idea\n- **targetViewer** (optional): Who is this for?\n\n### Expected Outputs\n\n- Video concept document\n- Title options\n- Thumbnail concept\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"video idea\"\n- \"new video about\"\n- \"develop video\"\n- \"content idea\"\n";
|
|
35
|
+
|
|
36
|
+
/** All skills for the youtube-content-plan kit, keyed by skill ID. */
|
|
37
|
+
export const allSkills: Record<string, string> = {
|
|
38
|
+
'script-writing': scriptWriting,
|
|
39
|
+
'generate-ideas': generateIdeas,
|
|
40
|
+
'optimize-metadata': optimizeMetadata,
|
|
41
|
+
'write-script': writeScript,
|
|
42
|
+
'kit-expertise': kitExpertise,
|
|
43
|
+
'analyze-performance': analyzePerformance,
|
|
44
|
+
'youtube-seo': youtubeSeo,
|
|
45
|
+
'analytics-insights': analyticsInsights,
|
|
46
|
+
'develop-video-idea': developVideoIdea
|
|
47
|
+
};
|