@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.
Files changed (528) hide show
  1. package/kits/ai-content-studio/kit.json +358 -0
  2. package/kits/api-documentation/kit.json +358 -0
  3. package/kits/api-documentation/skills/api-examples/SKILL.md +176 -0
  4. package/kits/api-documentation/skills/api-review/SKILL.md +35 -0
  5. package/kits/api-documentation/skills/api-versioning/SKILL.md +156 -0
  6. package/kits/api-documentation/skills/create-code-examples/SKILL.md +42 -0
  7. package/kits/api-documentation/skills/define-resource/SKILL.md +39 -0
  8. package/kits/api-documentation/skills/document-auth/SKILL.md +39 -0
  9. package/kits/api-documentation/skills/document-endpoint/SKILL.md +40 -0
  10. package/kits/api-documentation/skills/kit-expertise/SKILL.md +78 -0
  11. package/kits/api-documentation/skills/openapi-spec/SKILL.md +174 -0
  12. package/kits/axe-house/kit.json +931 -0
  13. package/kits/axe-house/skills/axe-expertise/SKILL.md +259 -0
  14. package/kits/axe-house/skills/blog-draft/SKILL.md +147 -0
  15. package/kits/axe-house/skills/booking-digest/SKILL.md +188 -0
  16. package/kits/axe-house/skills/customer-insights/SKILL.md +215 -0
  17. package/kits/axe-house/skills/demand-forecast/SKILL.md +183 -0
  18. package/kits/axe-house/skills/email-campaign/SKILL.md +135 -0
  19. package/kits/axe-house/skills/experience-copy/SKILL.md +142 -0
  20. package/kits/axe-house/skills/guest-letter/SKILL.md +171 -0
  21. package/kits/axe-house/skills/inventory-health/SKILL.md +234 -0
  22. package/kits/axe-house/skills/league-manager/SKILL.md +264 -0
  23. package/kits/axe-house/skills/revenue-report/SKILL.md +240 -0
  24. package/kits/axe-house/skills/safety-briefing/SKILL.md +248 -0
  25. package/kits/axe-house/skills/social-calendar/SKILL.md +203 -0
  26. package/kits/axe-house/skills/staff-briefing/SKILL.md +231 -0
  27. package/kits/axe-house/skills/venue-data-model/SKILL.md +225 -0
  28. package/kits/blog-series/kit.json +363 -0
  29. package/kits/blog-series/skills/content-hooks/SKILL.md +158 -0
  30. package/kits/blog-series/skills/headline-brainstorm/SKILL.md +40 -0
  31. package/kits/blog-series/skills/kit-expertise/SKILL.md +78 -0
  32. package/kits/blog-series/skills/repurpose-content/SKILL.md +40 -0
  33. package/kits/blog-series/skills/seo-review/SKILL.md +41 -0
  34. package/kits/blog-series/skills/seo-writing/SKILL.md +135 -0
  35. package/kits/blog-series/skills/series-audit/SKILL.md +36 -0
  36. package/kits/blog-series/skills/write-post-outline/SKILL.md +42 -0
  37. package/kits/business-plan/kit.json +437 -0
  38. package/kits/business-plan/skills/competitor-analysis/SKILL.md +34 -0
  39. package/kits/business-plan/skills/financial-modeling/SKILL.md +180 -0
  40. package/kits/business-plan/skills/financial-projections/SKILL.md +42 -0
  41. package/kits/business-plan/skills/kit-expertise/SKILL.md +101 -0
  42. package/kits/business-plan/skills/market-analysis/SKILL.md +155 -0
  43. package/kits/business-plan/skills/market-research/SKILL.md +35 -0
  44. package/kits/business-plan/skills/sba-compliance/SKILL.md +163 -0
  45. package/kits/business-plan/skills/swot-analysis/SKILL.md +36 -0
  46. package/kits/canvas-and-corks/kit.json +910 -0
  47. package/kits/canvas-and-corks/skills/blog-draft/SKILL.md +160 -0
  48. package/kits/canvas-and-corks/skills/booking-digest/SKILL.md +147 -0
  49. package/kits/canvas-and-corks/skills/class-description/SKILL.md +53 -0
  50. package/kits/canvas-and-corks/skills/class-roster/SKILL.md +163 -0
  51. package/kits/canvas-and-corks/skills/customer-insights/SKILL.md +174 -0
  52. package/kits/canvas-and-corks/skills/demand-forecast/SKILL.md +191 -0
  53. package/kits/canvas-and-corks/skills/email-campaign/SKILL.md +154 -0
  54. package/kits/canvas-and-corks/skills/experience-copy/SKILL.md +152 -0
  55. package/kits/canvas-and-corks/skills/guest-letter/SKILL.md +127 -0
  56. package/kits/canvas-and-corks/skills/inventory-health/SKILL.md +204 -0
  57. package/kits/canvas-and-corks/skills/painting-memory/SKILL.md +76 -0
  58. package/kits/canvas-and-corks/skills/revenue-report/SKILL.md +196 -0
  59. package/kits/canvas-and-corks/skills/social-calendar/SKILL.md +146 -0
  60. package/kits/canvas-and-corks/skills/staff-briefing/SKILL.md +134 -0
  61. package/kits/canvas-and-corks/skills/studio-expertise/SKILL.md +181 -0
  62. package/kits/canvas-and-corks/skills/venue-data-model/SKILL.md +325 -0
  63. package/kits/character-relationship-map/kit.json +367 -0
  64. package/kits/character-relationship-map/skills/ensemble-balance/SKILL.md +189 -0
  65. package/kits/character-relationship-map/skills/kit-expertise/SKILL.md +83 -0
  66. package/kits/character-relationship-map/skills/relationship-dynamics/SKILL.md +158 -0
  67. package/kits/clay-and-co/kit.json +938 -0
  68. package/kits/clay-and-co/skills/blog-draft/SKILL.md +135 -0
  69. package/kits/clay-and-co/skills/booking-digest/SKILL.md +163 -0
  70. package/kits/clay-and-co/skills/customer-insights/SKILL.md +207 -0
  71. package/kits/clay-and-co/skills/demand-forecast/SKILL.md +166 -0
  72. package/kits/clay-and-co/skills/email-campaign/SKILL.md +125 -0
  73. package/kits/clay-and-co/skills/experience-copy/SKILL.md +132 -0
  74. package/kits/clay-and-co/skills/guest-letter/SKILL.md +104 -0
  75. package/kits/clay-and-co/skills/inventory-health/SKILL.md +211 -0
  76. package/kits/clay-and-co/skills/kiln-scheduler/SKILL.md +206 -0
  77. package/kits/clay-and-co/skills/piece-tracker/SKILL.md +165 -0
  78. package/kits/clay-and-co/skills/pottery-expertise/SKILL.md +165 -0
  79. package/kits/clay-and-co/skills/pottery-memory/SKILL.md +119 -0
  80. package/kits/clay-and-co/skills/revenue-report/SKILL.md +205 -0
  81. package/kits/clay-and-co/skills/social-calendar/SKILL.md +130 -0
  82. package/kits/clay-and-co/skills/staff-briefing/SKILL.md +213 -0
  83. package/kits/clay-and-co/skills/venue-data-model/SKILL.md +230 -0
  84. package/kits/concept-map/kit.json +353 -0
  85. package/kits/concept-map/skills/add-concept/SKILL.md +41 -0
  86. package/kits/concept-map/skills/assess-understanding/SKILL.md +36 -0
  87. package/kits/concept-map/skills/concept-hierarchy/SKILL.md +148 -0
  88. package/kits/concept-map/skills/create-learning-map/SKILL.md +42 -0
  89. package/kits/concept-map/skills/find-cross-links/SKILL.md +34 -0
  90. package/kits/concept-map/skills/identify-prerequisites/SKILL.md +40 -0
  91. package/kits/concept-map/skills/kit-expertise/SKILL.md +78 -0
  92. package/kits/concept-map/skills/relationship-types/SKILL.md +160 -0
  93. package/kits/content-calendar/kit.json +420 -0
  94. package/kits/content-calendar/skills/content-strategy/SKILL.md +174 -0
  95. package/kits/content-calendar/skills/create-brief/SKILL.md +40 -0
  96. package/kits/content-calendar/skills/generate-ideas/SKILL.md +40 -0
  97. package/kits/content-calendar/skills/kit-expertise/SKILL.md +100 -0
  98. package/kits/content-calendar/skills/plan-series/SKILL.md +40 -0
  99. package/kits/content-calendar/skills/repurpose-content/SKILL.md +38 -0
  100. package/kits/content-calendar/skills/repurposing/SKILL.md +179 -0
  101. package/kits/content-calendar/skills/weekly-review/SKILL.md +34 -0
  102. package/kits/coworking-space/kit.json +1068 -0
  103. package/kits/escape-vault/kit.json +1028 -0
  104. package/kits/escape-vault/skills/blog-draft/SKILL.md +157 -0
  105. package/kits/escape-vault/skills/booking-digest/SKILL.md +151 -0
  106. package/kits/escape-vault/skills/customer-insights/SKILL.md +185 -0
  107. package/kits/escape-vault/skills/demand-forecast/SKILL.md +188 -0
  108. package/kits/escape-vault/skills/email-campaign/SKILL.md +157 -0
  109. package/kits/escape-vault/skills/escape-expertise/SKILL.md +200 -0
  110. package/kits/escape-vault/skills/escape-memory/SKILL.md +99 -0
  111. package/kits/escape-vault/skills/experience-copy/SKILL.md +159 -0
  112. package/kits/escape-vault/skills/guest-letter/SKILL.md +143 -0
  113. package/kits/escape-vault/skills/inventory-health/SKILL.md +222 -0
  114. package/kits/escape-vault/skills/leaderboard-report/SKILL.md +204 -0
  115. package/kits/escape-vault/skills/revenue-report/SKILL.md +202 -0
  116. package/kits/escape-vault/skills/room-designer/SKILL.md +182 -0
  117. package/kits/escape-vault/skills/social-calendar/SKILL.md +148 -0
  118. package/kits/escape-vault/skills/staff-briefing/SKILL.md +159 -0
  119. package/kits/escape-vault/skills/venue-data-model/SKILL.md +335 -0
  120. package/kits/family-tree/kit.json +380 -0
  121. package/kits/family-tree/skills/add-family-member/SKILL.md +42 -0
  122. package/kits/family-tree/skills/analyze-relationship/SKILL.md +41 -0
  123. package/kits/family-tree/skills/export-gedcom/SKILL.md +34 -0
  124. package/kits/family-tree/skills/genealogy-research/SKILL.md +188 -0
  125. package/kits/family-tree/skills/kit-expertise/SKILL.md +107 -0
  126. package/kits/family-tree/skills/record-oral-history/SKILL.md +43 -0
  127. package/kits/family-tree/skills/relationship-mapping/SKILL.md +171 -0
  128. package/kits/family-tree/skills/research-ancestor/SKILL.md +43 -0
  129. package/kits/farkle-dice-game/kit.json +316 -0
  130. package/kits/farkle-dice-game/skills/kit-expertise/SKILL.md +137 -0
  131. package/kits/franchise-ops/kit.json +326 -0
  132. package/kits/freelance-portfolio/kit.json +435 -0
  133. package/kits/game-design-doc/kit.json +353 -0
  134. package/kits/game-design-doc/skills/balance-system/SKILL.md +40 -0
  135. package/kits/game-design-doc/skills/create-character/SKILL.md +40 -0
  136. package/kits/game-design-doc/skills/design-mechanic/SKILL.md +40 -0
  137. package/kits/game-design-doc/skills/economy-design/SKILL.md +152 -0
  138. package/kits/game-design-doc/skills/game-mechanics/SKILL.md +141 -0
  139. package/kits/game-design-doc/skills/ideate-features/SKILL.md +36 -0
  140. package/kits/game-design-doc/skills/kit-expertise/SKILL.md +78 -0
  141. package/kits/game-design-doc/skills/playtest-feedback/SKILL.md +142 -0
  142. package/kits/game-design-doc/skills/review-gdd/SKILL.md +33 -0
  143. package/kits/gather-and-grill/kit.json +966 -0
  144. package/kits/gather-and-grill/skills/blog-draft/SKILL.md +120 -0
  145. package/kits/gather-and-grill/skills/booking-digest/SKILL.md +171 -0
  146. package/kits/gather-and-grill/skills/cooking-memory/SKILL.md +100 -0
  147. package/kits/gather-and-grill/skills/culinary-expertise/SKILL.md +180 -0
  148. package/kits/gather-and-grill/skills/customer-insights/SKILL.md +184 -0
  149. package/kits/gather-and-grill/skills/demand-forecast/SKILL.md +200 -0
  150. package/kits/gather-and-grill/skills/email-campaign/SKILL.md +97 -0
  151. package/kits/gather-and-grill/skills/experience-copy/SKILL.md +92 -0
  152. package/kits/gather-and-grill/skills/guest-letter/SKILL.md +98 -0
  153. package/kits/gather-and-grill/skills/inventory-health/SKILL.md +193 -0
  154. package/kits/gather-and-grill/skills/menu-planner/SKILL.md +175 -0
  155. package/kits/gather-and-grill/skills/recipe-card/SKILL.md +194 -0
  156. package/kits/gather-and-grill/skills/revenue-report/SKILL.md +245 -0
  157. package/kits/gather-and-grill/skills/social-calendar/SKILL.md +139 -0
  158. package/kits/gather-and-grill/skills/staff-briefing/SKILL.md +167 -0
  159. package/kits/gather-and-grill/skills/venue-data-model/SKILL.md +336 -0
  160. package/kits/gtd-productivity-system/kit.json +389 -0
  161. package/kits/gtd-productivity-system/skills/break-down-project/SKILL.md +41 -0
  162. package/kits/gtd-productivity-system/skills/clarify-task/SKILL.md +42 -0
  163. package/kits/gtd-productivity-system/skills/gtd-methodology/SKILL.md +185 -0
  164. package/kits/gtd-productivity-system/skills/inbox-processing/SKILL.md +173 -0
  165. package/kits/gtd-productivity-system/skills/kit-expertise/SKILL.md +111 -0
  166. package/kits/gtd-productivity-system/skills/mind-sweep/SKILL.md +35 -0
  167. package/kits/gtd-productivity-system/skills/process-inbox/SKILL.md +40 -0
  168. package/kits/gtd-productivity-system/skills/weekly-review/SKILL.md +197 -0
  169. package/kits/gym-fitness/kit.json +1037 -0
  170. package/kits/interactive-fiction/kit.json +471 -0
  171. package/kits/invoice-generator/kit.json +466 -0
  172. package/kits/loyalty-program/kit.json +323 -0
  173. package/kits/marketing-plan/kit.json +417 -0
  174. package/kits/marketing-plan/skills/allocate-budget/SKILL.md +34 -0
  175. package/kits/marketing-plan/skills/campaign-metrics/SKILL.md +184 -0
  176. package/kits/marketing-plan/skills/channel-strategy/SKILL.md +156 -0
  177. package/kits/marketing-plan/skills/content-calendar/SKILL.md +34 -0
  178. package/kits/marketing-plan/skills/create-persona/SKILL.md +40 -0
  179. package/kits/marketing-plan/skills/kit-expertise/SKILL.md +109 -0
  180. package/kits/marketing-plan/skills/measure-performance/SKILL.md +34 -0
  181. package/kits/marketing-plan/skills/plan-campaign/SKILL.md +41 -0
  182. package/kits/marketing-site/kit.json +230 -0
  183. package/kits/marketing-site/skills/add-page/SKILL.md +28 -0
  184. package/kits/marketing-site/skills/add-section/SKILL.md +29 -0
  185. package/kits/marketing-site/skills/change-colors/SKILL.md +24 -0
  186. package/kits/marketing-site/skills/conversion-copy/SKILL.md +152 -0
  187. package/kits/marketing-site/skills/export-deploy/SKILL.md +24 -0
  188. package/kits/marketing-site/skills/kit-expertise/SKILL.md +77 -0
  189. package/kits/marketing-site/skills/landing-page/SKILL.md +156 -0
  190. package/kits/match-3-puzzle/kit.json +245 -0
  191. package/kits/match-3-puzzle/skills/kit-expertise/SKILL.md +96 -0
  192. package/kits/mind-map/kit.json +355 -0
  193. package/kits/mind-map/skills/add-branch/SKILL.md +40 -0
  194. package/kits/mind-map/skills/brainstorm-topic/SKILL.md +41 -0
  195. package/kits/mind-map/skills/branch-expansion/SKILL.md +181 -0
  196. package/kits/mind-map/skills/find-connections/SKILL.md +34 -0
  197. package/kits/mind-map/skills/kit-expertise/SKILL.md +78 -0
  198. package/kits/mind-map/skills/organize-map/SKILL.md +35 -0
  199. package/kits/mind-map/skills/radiant-thinking/SKILL.md +184 -0
  200. package/kits/mind-map/skills/summarize-map/SKILL.md +34 -0
  201. package/kits/music-collection/kit.json +403 -0
  202. package/kits/music-collection/skills/add-album/SKILL.md +44 -0
  203. package/kits/music-collection/skills/create-playlist/SKILL.md +37 -0
  204. package/kits/music-collection/skills/explore-artist/SKILL.md +37 -0
  205. package/kits/music-collection/skills/journal-session/SKILL.md +40 -0
  206. package/kits/music-collection/skills/kit-expertise/SKILL.md +98 -0
  207. package/kits/music-collection/skills/music-metadata/SKILL.md +209 -0
  208. package/kits/music-collection/skills/playlist-curator/SKILL.md +182 -0
  209. package/kits/music-collection/skills/recommend-similar/SKILL.md +36 -0
  210. package/kits/music-venue/kit.json +986 -0
  211. package/kits/novel-writing-system/kit.json +481 -0
  212. package/kits/novel-writing-system/skills/character-arc/SKILL.md +164 -0
  213. package/kits/novel-writing-system/skills/develop-character-arc/SKILL.md +42 -0
  214. package/kits/novel-writing-system/skills/kit-expertise/SKILL.md +84 -0
  215. package/kits/novel-writing-system/skills/outline-review/SKILL.md +34 -0
  216. package/kits/novel-writing-system/skills/plot-doctor/SKILL.md +221 -0
  217. package/kits/novel-writing-system/skills/plot-hole-check/SKILL.md +35 -0
  218. package/kits/novel-writing-system/skills/scene-development/SKILL.md +38 -0
  219. package/kits/novel-writing-system/skills/scene-sequel/SKILL.md +162 -0
  220. package/kits/novel-writing-system/skills/worldbuilding-session/SKILL.md +40 -0
  221. package/kits/organization-chart/kit.json +349 -0
  222. package/kits/organization-chart/skills/add-role/SKILL.md +41 -0
  223. package/kits/organization-chart/skills/analyze-span/SKILL.md +34 -0
  224. package/kits/organization-chart/skills/create-raci/SKILL.md +42 -0
  225. package/kits/organization-chart/skills/kit-expertise/SKILL.md +78 -0
  226. package/kits/organization-chart/skills/org-design/SKILL.md +188 -0
  227. package/kits/organization-chart/skills/org-health-check/SKILL.md +35 -0
  228. package/kits/organization-chart/skills/plan-reorg/SKILL.md +42 -0
  229. package/kits/organization-chart/skills/role-definition/SKILL.md +180 -0
  230. package/kits/paws-and-pour/kit.json +969 -0
  231. package/kits/paws-and-pour/skills/adoption-report/SKILL.md +273 -0
  232. package/kits/paws-and-pour/skills/animal-profile/SKILL.md +206 -0
  233. package/kits/paws-and-pour/skills/blog-draft/SKILL.md +137 -0
  234. package/kits/paws-and-pour/skills/booking-digest/SKILL.md +251 -0
  235. package/kits/paws-and-pour/skills/cafe-expertise/SKILL.md +218 -0
  236. package/kits/paws-and-pour/skills/cafe-memory/SKILL.md +114 -0
  237. package/kits/paws-and-pour/skills/customer-insights/SKILL.md +216 -0
  238. package/kits/paws-and-pour/skills/demand-forecast/SKILL.md +200 -0
  239. package/kits/paws-and-pour/skills/email-campaign/SKILL.md +154 -0
  240. package/kits/paws-and-pour/skills/experience-copy/SKILL.md +139 -0
  241. package/kits/paws-and-pour/skills/guest-letter/SKILL.md +183 -0
  242. package/kits/paws-and-pour/skills/inventory-health/SKILL.md +213 -0
  243. package/kits/paws-and-pour/skills/revenue-report/SKILL.md +273 -0
  244. package/kits/paws-and-pour/skills/social-calendar/SKILL.md +183 -0
  245. package/kits/paws-and-pour/skills/staff-briefing/SKILL.md +223 -0
  246. package/kits/paws-and-pour/skills/venue-data-model/SKILL.md +260 -0
  247. package/kits/persona-driven-strategy/kit.json +352 -0
  248. package/kits/persona-driven-strategy/skills/empathy-mapping/SKILL.md +221 -0
  249. package/kits/persona-driven-strategy/skills/journey-mapping/SKILL.md +219 -0
  250. package/kits/persona-driven-strategy/skills/kit-expertise/SKILL.md +81 -0
  251. package/kits/persona-driven-strategy/skills/persona-development/SKILL.md +189 -0
  252. package/kits/personal-crm/kit.json +373 -0
  253. package/kits/personal-crm/skills/add-contact/SKILL.md +42 -0
  254. package/kits/personal-crm/skills/connect-contacts/SKILL.md +41 -0
  255. package/kits/personal-crm/skills/find-dormant/SKILL.md +35 -0
  256. package/kits/personal-crm/skills/kit-expertise/SKILL.md +82 -0
  257. package/kits/personal-crm/skills/log-interaction/SKILL.md +43 -0
  258. package/kits/personal-crm/skills/network-analysis/SKILL.md +161 -0
  259. package/kits/personal-crm/skills/relationship-insights/SKILL.md +153 -0
  260. package/kits/personal-wiki/kit.json +322 -0
  261. package/kits/personal-wiki/skills/kit-expertise/SKILL.md +81 -0
  262. package/kits/personal-wiki/skills/orphan-finder/SKILL.md +155 -0
  263. package/kits/personal-wiki/skills/wiki-structure/SKILL.md +179 -0
  264. package/kits/petal-press/kit.json +996 -0
  265. package/kits/petal-press/skills/arrangement-memory/SKILL.md +143 -0
  266. package/kits/petal-press/skills/blog-draft/SKILL.md +167 -0
  267. package/kits/petal-press/skills/booking-digest/SKILL.md +196 -0
  268. package/kits/petal-press/skills/care-card/SKILL.md +173 -0
  269. package/kits/petal-press/skills/customer-insights/SKILL.md +213 -0
  270. package/kits/petal-press/skills/demand-forecast/SKILL.md +203 -0
  271. package/kits/petal-press/skills/email-campaign/SKILL.md +204 -0
  272. package/kits/petal-press/skills/experience-copy/SKILL.md +184 -0
  273. package/kits/petal-press/skills/floral-expertise/SKILL.md +244 -0
  274. package/kits/petal-press/skills/guest-letter/SKILL.md +153 -0
  275. package/kits/petal-press/skills/inventory-health/SKILL.md +201 -0
  276. package/kits/petal-press/skills/revenue-report/SKILL.md +219 -0
  277. package/kits/petal-press/skills/seasonal-guide/SKILL.md +238 -0
  278. package/kits/petal-press/skills/social-calendar/SKILL.md +217 -0
  279. package/kits/petal-press/skills/staff-briefing/SKILL.md +217 -0
  280. package/kits/petal-press/skills/venue-data-model/SKILL.md +226 -0
  281. package/kits/pitch-deck/kit.json +416 -0
  282. package/kits/pitch-deck/skills/calculate-market-size/SKILL.md +41 -0
  283. package/kits/pitch-deck/skills/develop-problem-slide/SKILL.md +39 -0
  284. package/kits/pitch-deck/skills/investor-qa/SKILL.md +182 -0
  285. package/kits/pitch-deck/skills/investor-qa-prep/SKILL.md +36 -0
  286. package/kits/pitch-deck/skills/kit-expertise/SKILL.md +112 -0
  287. package/kits/pitch-deck/skills/pitch-structure/SKILL.md +186 -0
  288. package/kits/pitch-deck/skills/practice-pitch/SKILL.md +36 -0
  289. package/kits/podcast-series/kit.json +324 -0
  290. package/kits/podcast-series/skills/audience-growth/SKILL.md +38 -0
  291. package/kits/podcast-series/skills/create-guest-profile/SKILL.md +42 -0
  292. package/kits/podcast-series/skills/episode-structure/SKILL.md +189 -0
  293. package/kits/podcast-series/skills/guest-research/SKILL.md +167 -0
  294. package/kits/podcast-series/skills/kit-expertise/SKILL.md +81 -0
  295. package/kits/podcast-series/skills/plan-episode/SKILL.md +44 -0
  296. package/kits/podcast-series/skills/prepare-guest/SKILL.md +45 -0
  297. package/kits/podcast-series/skills/show-notes/SKILL.md +182 -0
  298. package/kits/podcast-series/skills/write-show-notes/SKILL.md +43 -0
  299. package/kits/pour-house/kit.json +912 -0
  300. package/kits/pour-house/skills/blog-draft/SKILL.md +138 -0
  301. package/kits/pour-house/skills/booking-digest/SKILL.md +151 -0
  302. package/kits/pour-house/skills/cellar-report/SKILL.md +251 -0
  303. package/kits/pour-house/skills/customer-insights/SKILL.md +184 -0
  304. package/kits/pour-house/skills/demand-forecast/SKILL.md +156 -0
  305. package/kits/pour-house/skills/email-campaign/SKILL.md +130 -0
  306. package/kits/pour-house/skills/experience-copy/SKILL.md +125 -0
  307. package/kits/pour-house/skills/guest-letter/SKILL.md +136 -0
  308. package/kits/pour-house/skills/inventory-health/SKILL.md +159 -0
  309. package/kits/pour-house/skills/pour-memory/SKILL.md +89 -0
  310. package/kits/pour-house/skills/revenue-report/SKILL.md +232 -0
  311. package/kits/pour-house/skills/social-calendar/SKILL.md +140 -0
  312. package/kits/pour-house/skills/sommelier-expertise/SKILL.md +324 -0
  313. package/kits/pour-house/skills/staff-briefing/SKILL.md +176 -0
  314. package/kits/pour-house/skills/tasting-notes/SKILL.md +179 -0
  315. package/kits/pour-house/skills/venue-data-model/SKILL.md +323 -0
  316. package/kits/presentation/kit.json +296 -0
  317. package/kits/product-requirements-doc/kit.json +365 -0
  318. package/kits/product-requirements-doc/skills/acceptance-criteria/SKILL.md +219 -0
  319. package/kits/product-requirements-doc/skills/create-user-story/SKILL.md +43 -0
  320. package/kits/product-requirements-doc/skills/define-success-metrics/SKILL.md +41 -0
  321. package/kits/product-requirements-doc/skills/kit-expertise/SKILL.md +81 -0
  322. package/kits/product-requirements-doc/skills/prd-review/SKILL.md +39 -0
  323. package/kits/product-requirements-doc/skills/prd-structure/SKILL.md +206 -0
  324. package/kits/product-requirements-doc/skills/prioritize-features/SKILL.md +43 -0
  325. package/kits/product-requirements-doc/skills/synthesize-research/SKILL.md +43 -0
  326. package/kits/product-requirements-doc/skills/user-stories/SKILL.md +198 -0
  327. package/kits/project-timeline/kit.json +367 -0
  328. package/kits/project-timeline/skills/add-milestone/SKILL.md +44 -0
  329. package/kits/project-timeline/skills/add-task/SKILL.md +43 -0
  330. package/kits/project-timeline/skills/assess-risks/SKILL.md +39 -0
  331. package/kits/project-timeline/skills/dependency-analysis/SKILL.md +176 -0
  332. package/kits/project-timeline/skills/identify-critical-path/SKILL.md +37 -0
  333. package/kits/project-timeline/skills/kit-expertise/SKILL.md +81 -0
  334. package/kits/project-timeline/skills/milestone-planning/SKILL.md +169 -0
  335. package/kits/project-timeline/skills/status-update/SKILL.md +39 -0
  336. package/kits/reading-tracker/kit.json +368 -0
  337. package/kits/reading-tracker/skills/add-book/SKILL.md +32 -0
  338. package/kits/reading-tracker/skills/book-connections/SKILL.md +161 -0
  339. package/kits/reading-tracker/skills/kit-expertise/SKILL.md +72 -0
  340. package/kits/reading-tracker/skills/log-progress/SKILL.md +29 -0
  341. package/kits/reading-tracker/skills/reading-insights/SKILL.md +179 -0
  342. package/kits/reading-tracker/skills/save-quote/SKILL.md +30 -0
  343. package/kits/recipe-manager/kit.json +376 -0
  344. package/kits/recipe-manager/skills/add-recipe/SKILL.md +33 -0
  345. package/kits/recipe-manager/skills/generate-shopping-list/SKILL.md +27 -0
  346. package/kits/recipe-manager/skills/ingredient-substitutions/SKILL.md +157 -0
  347. package/kits/recipe-manager/skills/kit-expertise/SKILL.md +72 -0
  348. package/kits/recipe-manager/skills/meal-planning/SKILL.md +184 -0
  349. package/kits/recipe-manager/skills/plan-meal/SKILL.md +31 -0
  350. package/kits/recipe-manager/skills/scaling-recipes/SKILL.md +183 -0
  351. package/kits/saas-app/kit.json +405 -0
  352. package/kits/saas-app/skills/churn-analysis/SKILL.md +219 -0
  353. package/kits/saas-app/skills/onboarding-flow/SKILL.md +217 -0
  354. package/kits/saas-app/skills/pricing-model/SKILL.md +192 -0
  355. package/kits/saas-app/skills/saas-expertise/SKILL.md +95 -0
  356. package/kits/salon-barbershop/kit.json +1021 -0
  357. package/kits/screenplay-writing/kit.json +412 -0
  358. package/kits/screenplay-writing/skills/analyze-scene/SKILL.md +42 -0
  359. package/kits/screenplay-writing/skills/beat-sheet/SKILL.md +134 -0
  360. package/kits/screenplay-writing/skills/create-scene-card/SKILL.md +46 -0
  361. package/kits/screenplay-writing/skills/develop-character/SKILL.md +43 -0
  362. package/kits/screenplay-writing/skills/generate-beat-sheet/SKILL.md +49 -0
  363. package/kits/screenplay-writing/skills/kit-expertise/SKILL.md +90 -0
  364. package/kits/screenplay-writing/skills/scene-analysis/SKILL.md +164 -0
  365. package/kits/screenplay-writing/skills/screenplay-format/SKILL.md +108 -0
  366. package/kits/social-media-manager/kit.json +476 -0
  367. package/kits/teacher-lesson-plan/kit.json +410 -0
  368. package/kits/teacher-lesson-plan/skills/assessment-design/SKILL.md +162 -0
  369. package/kits/teacher-lesson-plan/skills/blooms-taxonomy/SKILL.md +139 -0
  370. package/kits/teacher-lesson-plan/skills/create-lesson/SKILL.md +34 -0
  371. package/kits/teacher-lesson-plan/skills/design-unit/SKILL.md +28 -0
  372. package/kits/teacher-lesson-plan/skills/differentiate-lesson/SKILL.md +28 -0
  373. package/kits/teacher-lesson-plan/skills/differentiation/SKILL.md +180 -0
  374. package/kits/teacher-lesson-plan/skills/kit-expertise/SKILL.md +96 -0
  375. package/kits/teacher-lesson-plan/skills/schedule-lesson/SKILL.md +31 -0
  376. package/kits/technical-specification/kit.json +369 -0
  377. package/kits/technical-specification/skills/architecture-decision/SKILL.md +42 -0
  378. package/kits/technical-specification/skills/architecture-decisions/SKILL.md +180 -0
  379. package/kits/technical-specification/skills/data-model-design/SKILL.md +43 -0
  380. package/kits/technical-specification/skills/data-modeling/SKILL.md +159 -0
  381. package/kits/technical-specification/skills/define-component/SKILL.md +43 -0
  382. package/kits/technical-specification/skills/kit-expertise/SKILL.md +81 -0
  383. package/kits/technical-specification/skills/requirements-analysis/SKILL.md +42 -0
  384. package/kits/technical-specification/skills/security-review/SKILL.md +170 -0
  385. package/kits/technical-specification/skills/spec-review/SKILL.md +39 -0
  386. package/kits/wanderlands/kit.json +399 -0
  387. package/kits/wanderlands/skills/kit-expertise/SKILL.md +376 -0
  388. package/kits/web-application/kit.json +257 -0
  389. package/kits/web-application/skills/kit-expertise/SKILL.md +211 -0
  390. package/kits/wicks-and-whiskers/kit.json +1267 -0
  391. package/kits/wicks-and-whiskers/skills/blog-draft/SKILL.md +145 -0
  392. package/kits/wicks-and-whiskers/skills/booking-digest/SKILL.md +142 -0
  393. package/kits/wicks-and-whiskers/skills/candle-expertise/SKILL.md +69 -0
  394. package/kits/wicks-and-whiskers/skills/customer-insights/SKILL.md +176 -0
  395. package/kits/wicks-and-whiskers/skills/demand-forecast/SKILL.md +159 -0
  396. package/kits/wicks-and-whiskers/skills/email-campaign/SKILL.md +131 -0
  397. package/kits/wicks-and-whiskers/skills/experience-copy/SKILL.md +135 -0
  398. package/kits/wicks-and-whiskers/skills/guest-letter/SKILL.md +154 -0
  399. package/kits/wicks-and-whiskers/skills/inventory-health/SKILL.md +185 -0
  400. package/kits/wicks-and-whiskers/skills/kitten-profile/SKILL.md +159 -0
  401. package/kits/wicks-and-whiskers/skills/memory-narrative/SKILL.md +71 -0
  402. package/kits/wicks-and-whiskers/skills/revenue-report/SKILL.md +197 -0
  403. package/kits/wicks-and-whiskers/skills/social-calendar/SKILL.md +161 -0
  404. package/kits/wicks-and-whiskers/skills/staff-briefing/SKILL.md +174 -0
  405. package/kits/wicks-and-whiskers/skills/venue-data-model/SKILL.md +228 -0
  406. package/kits/world-building/kit.json +497 -0
  407. package/kits/world-building/skills/consistency-check/SKILL.md +179 -0
  408. package/kits/world-building/skills/create-character/SKILL.md +44 -0
  409. package/kits/world-building/skills/create-faction/SKILL.md +44 -0
  410. package/kits/world-building/skills/create-location/SKILL.md +44 -0
  411. package/kits/world-building/skills/create-timeline/SKILL.md +39 -0
  412. package/kits/world-building/skills/culture-builder/SKILL.md +171 -0
  413. package/kits/world-building/skills/design-magic-system/SKILL.md +38 -0
  414. package/kits/world-building/skills/kit-expertise/SKILL.md +110 -0
  415. package/kits/world-building/skills/magic-systems/SKILL.md +161 -0
  416. package/kits/youtube-content-plan/kit.json +346 -0
  417. package/kits/youtube-content-plan/skills/analytics-insights/SKILL.md +166 -0
  418. package/kits/youtube-content-plan/skills/analyze-performance/SKILL.md +43 -0
  419. package/kits/youtube-content-plan/skills/develop-video-idea/SKILL.md +45 -0
  420. package/kits/youtube-content-plan/skills/generate-ideas/SKILL.md +42 -0
  421. package/kits/youtube-content-plan/skills/kit-expertise/SKILL.md +81 -0
  422. package/kits/youtube-content-plan/skills/optimize-metadata/SKILL.md +43 -0
  423. package/kits/youtube-content-plan/skills/script-writing/SKILL.md +180 -0
  424. package/kits/youtube-content-plan/skills/write-script/SKILL.md +44 -0
  425. package/kits/youtube-content-plan/skills/youtube-seo/SKILL.md +172 -0
  426. package/package.json +43 -0
  427. package/src/index.ts +35 -0
  428. package/src/kits/ai-content-studio.ts +377 -0
  429. package/src/kits/api-documentation.ts +352 -0
  430. package/src/kits/axe-house.ts +949 -0
  431. package/src/kits/blog-series.ts +357 -0
  432. package/src/kits/business-plan.ts +406 -0
  433. package/src/kits/canvas-and-corks.ts +928 -0
  434. package/src/kits/character-relationship-map.ts +368 -0
  435. package/src/kits/clay-and-co.ts +956 -0
  436. package/src/kits/concept-map.ts +354 -0
  437. package/src/kits/content-calendar.ts +399 -0
  438. package/src/kits/coworking-space.ts +1084 -0
  439. package/src/kits/escape-vault.ts +1046 -0
  440. package/src/kits/family-tree.ts +381 -0
  441. package/src/kits/farkle-dice-game.ts +318 -0
  442. package/src/kits/franchise-ops.ts +345 -0
  443. package/src/kits/freelance-portfolio.ts +453 -0
  444. package/src/kits/game-design-doc.ts +353 -0
  445. package/src/kits/gather-and-grill.ts +984 -0
  446. package/src/kits/gtd-productivity-system.ts +389 -0
  447. package/src/kits/gym-fitness.ts +1053 -0
  448. package/src/kits/index.ts +76 -0
  449. package/src/kits/interactive-fiction.ts +489 -0
  450. package/src/kits/invoice-generator.ts +484 -0
  451. package/src/kits/loyalty-program.ts +342 -0
  452. package/src/kits/marketing-plan.ts +398 -0
  453. package/src/kits/marketing-site.ts +248 -0
  454. package/src/kits/match-3-puzzle.ts +248 -0
  455. package/src/kits/mind-map.ts +356 -0
  456. package/src/kits/music-collection.ts +404 -0
  457. package/src/kits/music-venue.ts +1002 -0
  458. package/src/kits/novel-writing-system.ts +461 -0
  459. package/src/kits/organization-chart.ts +350 -0
  460. package/src/kits/paws-and-pour.ts +987 -0
  461. package/src/kits/persona-driven-strategy.ts +345 -0
  462. package/src/kits/personal-crm.ts +391 -0
  463. package/src/kits/personal-wiki.ts +323 -0
  464. package/src/kits/petal-press.ts +1014 -0
  465. package/src/kits/pitch-deck.ts +395 -0
  466. package/src/kits/podcast-series.ts +324 -0
  467. package/src/kits/pour-house.ts +930 -0
  468. package/src/kits/presentation.ts +276 -0
  469. package/src/kits/product-requirements-doc.ts +359 -0
  470. package/src/kits/project-timeline.ts +368 -0
  471. package/src/kits/reading-tracker.ts +368 -0
  472. package/src/kits/recipe-manager.ts +376 -0
  473. package/src/kits/saas-app.ts +423 -0
  474. package/src/kits/salon-barbershop.ts +1037 -0
  475. package/src/kits/screenplay-writing.ts +412 -0
  476. package/src/kits/social-media-manager.ts +494 -0
  477. package/src/kits/teacher-lesson-plan.ts +410 -0
  478. package/src/kits/technical-specification.ts +363 -0
  479. package/src/kits/wanderlands.ts +401 -0
  480. package/src/kits/web-application.ts +275 -0
  481. package/src/kits/wicks-and-whiskers.ts +1285 -0
  482. package/src/kits/world-building.ts +476 -0
  483. package/src/kits/youtube-content-plan.ts +339 -0
  484. package/src/registry.ts +60 -0
  485. package/src/skills/api-documentation/index.ts +47 -0
  486. package/src/skills/axe-house/index.ts +71 -0
  487. package/src/skills/blog-series/index.ts +43 -0
  488. package/src/skills/business-plan/index.ts +43 -0
  489. package/src/skills/canvas-and-corks/index.ts +75 -0
  490. package/src/skills/character-relationship-map/index.ts +23 -0
  491. package/src/skills/clay-and-co/index.ts +75 -0
  492. package/src/skills/concept-map/index.ts +43 -0
  493. package/src/skills/content-calendar/index.ts +43 -0
  494. package/src/skills/escape-vault/index.ts +75 -0
  495. package/src/skills/family-tree/index.ts +43 -0
  496. package/src/skills/farkle-dice-game/index.ts +15 -0
  497. package/src/skills/game-design-doc/index.ts +47 -0
  498. package/src/skills/gather-and-grill/index.ts +75 -0
  499. package/src/skills/gtd-productivity-system/index.ts +43 -0
  500. package/src/skills/index.ts +109 -0
  501. package/src/skills/marketing-plan/index.ts +43 -0
  502. package/src/skills/marketing-site/index.ts +39 -0
  503. package/src/skills/match-3-puzzle/index.ts +15 -0
  504. package/src/skills/mind-map/index.ts +43 -0
  505. package/src/skills/music-collection/index.ts +43 -0
  506. package/src/skills/novel-writing-system/index.ts +47 -0
  507. package/src/skills/organization-chart/index.ts +43 -0
  508. package/src/skills/paws-and-pour/index.ts +75 -0
  509. package/src/skills/persona-driven-strategy/index.ts +27 -0
  510. package/src/skills/personal-crm/index.ts +39 -0
  511. package/src/skills/personal-wiki/index.ts +23 -0
  512. package/src/skills/petal-press/index.ts +75 -0
  513. package/src/skills/pitch-deck/index.ts +39 -0
  514. package/src/skills/podcast-series/index.ts +47 -0
  515. package/src/skills/pour-house/index.ts +75 -0
  516. package/src/skills/product-requirements-doc/index.ts +47 -0
  517. package/src/skills/project-timeline/index.ts +43 -0
  518. package/src/skills/reading-tracker/index.ts +35 -0
  519. package/src/skills/recipe-manager/index.ts +39 -0
  520. package/src/skills/saas-app/index.ts +27 -0
  521. package/src/skills/screenplay-writing/index.ts +43 -0
  522. package/src/skills/teacher-lesson-plan/index.ts +43 -0
  523. package/src/skills/technical-specification/index.ts +47 -0
  524. package/src/skills/wanderlands/index.ts +15 -0
  525. package/src/skills/web-application/index.ts +15 -0
  526. package/src/skills/wicks-and-whiskers/index.ts +71 -0
  527. package/src/skills/world-building/index.ts +47 -0
  528. package/src/skills/youtube-content-plan/index.ts +47 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @module @soulcraft/kits/skills/personal-wiki
3
+ * @description Raw SKILL.md content for the personal-wiki kit's AI skills.
4
+ *
5
+ * Generated from: kits/personal-wiki/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 `wiki-structure` skill. */
10
+ export const wikiStructure = "---\nid: wiki-structure\nname: wiki-structure\ndescription: Background expertise in personal wiki organization and internal linking strategies\nversion: \"1.0.0\"\ntype: background\nrequiresVision: false\nrequiresData: false\n---\n\n## Wiki Structure Expertise\n\nYou have expertise in personal wiki organization, internal linking, and knowledge management. Apply these principles when helping users build and organize their wikis.\n\n### Wiki Organization Principles\n\n**Atomic Pages**\n- One concept per page\n- Self-contained but linked\n- Clear, specific titles\n- Scannable structure\n\n**Entry Points**\n- Home/index page\n- Category pages\n- Maps of Content (MOCs)\n- Recently updated\n\n### Page Types\n\n**Concept Pages**\n- Single topic focus\n- Definition + elaboration\n- Links to related concepts\n- Examples when helpful\n\n**Hub/Index Pages**\n- Overview of a topic area\n- Links to all related pages\n- Brief descriptions\n- Organizational structure\n\n**Maps of Content (MOCs)**\n- Curated lists around theme\n- More selective than index\n- Narrative flow possible\n- Updated regularly\n\n**Log/Journal Pages**\n- Date-based entries\n- Chronological record\n- Link to referenced pages\n- Good for learning journals\n\n### Title Conventions\n\n**Good Titles**\n- Specific and searchable\n- Noun phrases usually best\n- Consistent capitalization\n- No special characters\n\n**Examples**\n- \"Spaced Repetition\" (concept)\n- \"Books - 2024\" (index)\n- \"Project Alpha\" (project)\n- \"Meeting Notes 2024-01-15\" (log)\n\n### Internal Linking\n\n**When to Link**\n- First mention of concept\n- Key relationships\n- Supporting information\n- Deeper exploration\n\n**Link Density**\n- Not every possible link\n- Meaningful connections\n- Reader would benefit from following\n- Avoid overlinking\n\n**Link Text**\n- Descriptive anchor text\n- Natural reading flow\n- Avoid \"click here\"\n- Context should explain link\n\n### Page Structure Template\n\n```markdown\n# Page Title\n\nBrief definition or introduction (1-2 sentences).\n\n## Overview\nExpand on the concept. Why it matters. Context.\n\n## Key Points\n- Point 1\n- Point 2\n- Point 3\n\n## Details\nMore in-depth information...\n\n### Subsection\nSpecific aspect...\n\n## Related\n- [[Related Page 1]]\n- [[Related Page 2]]\n\n## References\n- Source 1\n- Source 2\n```\n\n### Organizational Patterns\n\n**Hierarchical**\n```\nHome\n├── Area 1\n│ ├── Topic A\n│ └── Topic B\n└── Area 2\n ├── Topic C\n └── Topic D\n```\n\n**Networked**\n- Pages link freely\n- No strict hierarchy\n- Clusters emerge organically\n- MOCs provide structure\n\n**Hybrid (Recommended)**\n- Light hierarchy for navigation\n- Rich cross-linking\n- MOCs for discovery\n- Tags for filtering\n\n### Tagging Strategy\n\n**Tag Categories**\n- Type: #concept, #project, #person\n- Status: #active, #archive, #idea\n- Topic: #productivity, #coding, #health\n\n**Tag Guidelines**\n- Few tags per page (3-5)\n- Consistent naming\n- Broad enough to be useful\n- Specific enough to filter\n\n### Maintenance Practices\n\n**Regular Reviews**\n- Check for orphan pages\n- Update outdated content\n- Merge duplicate pages\n- Fix broken links\n\n**Quality Checks**\n- Are titles clear?\n- Are pages still relevant?\n- Are links still valid?\n- Is structure working?\n\n### Common Mistakes\n\n- Pages too broad (should split)\n- Pages too narrow (merge or delete)\n- Inconsistent naming\n- Orphaned content\n- Over-categorization\n- Under-linking\n- Stale content\n";
11
+
12
+ /** Raw SKILL.md content for the `orphan-finder` skill. */
13
+ export const orphanFinder = "---\nid: orphan-finder\nname: orphan-finder\ndescription: Find and connect orphan pages that lack incoming links\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Orphan Finder Skill\n\nWhen the user invokes `/orphans`, help them identify wiki pages that lack incoming links and suggest connections.\n\n### Invocation Patterns\n\n- `/orphans` - Find all orphan pages\n- `/orphans [page]` - Find connections for specific orphan\n- `/orphans audit` - Full wiki connectivity audit\n\n### What Makes a Page an Orphan\n\n**True Orphans**\n- Zero incoming links\n- Not reachable from any other page\n- Effectively invisible\n\n**Near-Orphans**\n- Only one incoming link\n- Poorly integrated\n- Could use more connections\n\n**Islands**\n- Groups of pages that link to each other\n- But not connected to main wiki\n- Isolated clusters\n\n### Output Format\n\n```markdown\n## Orphan Page Analysis\n\n### Wiki Overview\n- **Total pages**: X\n- **Orphan pages**: X (Y%)\n- **Near-orphans (1 link)**: X\n- **Well-connected (5+ links)**: X\n\n### Orphan Pages\n\n#### High Priority (Should Definitely Connect)\n1. **[[Page Name]]**\n - Created: [Date]\n - Content: [Brief description]\n - Suggested connections:\n - [[Page A]]: [Why they relate]\n - [[Page B]]: [Why they relate]\n - Could also link FROM: [[Page C]]\n\n2. **[[Page Name]]**\n [Same format]\n\n#### Medium Priority\n[Same format for less critical orphans]\n\n#### Consider Deleting\nThese orphans may not be worth keeping:\n- **[[Page X]]**: [Why - too short, outdated, etc.]\n\n### Near-Orphans (Only 1 Incoming Link)\n| Page | Current Link From | Suggested Additional Links |\n|------|------------------|---------------------------|\n| [[Page]] | [[Source]] | [[Suggestion 1]], [[Suggestion 2]] |\n\n### Isolated Clusters\n**Cluster 1**: [Theme]\nPages: [[A]], [[B]], [[C]]\nConnection point: Link [[A]] from [[Main Topic Page]]\n\n### Integration Suggestions\n\n**Quick Wins** (Easy connections to make)\n1. Add [[Orphan A]] link to [[Hub Page]]\n2. Mention [[Orphan B]] in [[Related Page]]\n\n**Pages That Should Link to More**\nThese well-trafficked pages could integrate orphans:\n- [[Popular Page 1]]: Could link to [orphans]\n- [[Popular Page 2]]: Could link to [orphans]\n\n### Maintenance Actions\n- [ ] Connect [X] high-priority orphans\n- [ ] Review [X] deletion candidates\n- [ ] Add [X] links from hub pages\n```\n\n### Finding Connection Opportunities\n\n**Semantic Matching**\n- Similar titles\n- Shared keywords\n- Related topics\n- Same category/tag\n\n**Structural Matching**\n- Should be in same hub page\n- Part of same project\n- Same type of content\n\n**Temporal Matching**\n- Created around same time\n- Related to same time period\n- Part of same learning journey\n\n### Types of Pages That Become Orphans\n\n**Common Orphan Sources**\n- Imported notes (brought in but not linked)\n- Old ideas (created but forgotten)\n- Stub pages (started but not developed)\n- One-off references (quick notes)\n- Completed projects (no longer active)\n\n### Connection Strategies\n\n**Top-Down**\n- Start from hub/index pages\n- Ensure all relevant pages linked\n- Work through categories\n\n**Bottom-Up**\n- Start from orphan\n- Identify where it belongs\n- Add links from logical places\n\n**Cross-Linking**\n- Find related orphans\n- Link them to each other\n- Create mini-clusters\n- Then link cluster to main wiki\n\n### When to Delete Instead of Connect\n\n**Delete Candidates**\n- Duplicate content\n- Outdated/irrelevant\n- Too short to be useful\n- Personal notes no longer needed\n- Broken imports\n\n**Don't Delete If**\n- Unique information\n- Could be expanded\n- Part of historical record\n- Reference value\n";
14
+
15
+ /** Raw SKILL.md content for the `kit-expertise` skill. */
16
+ export const kitExpertise = "---\nid: kit-expertise\nname: kit-expertise\ndescription: Domain expertise for Personal Wiki - applied automatically when working in this kit\nversion: \"1.0.0\"\ntype: background\nrequiresVision: false\nrequiresData: false\n---\n\n## Your Role\n\nPersonal Wiki Curator helping you organize and connect your personal knowledge and documentation\n\n## Your Expertise\n\n- Wiki structure and organization\n- Internal linking strategies\n- Documentation best practices\n- Information architecture\n- Content categorization\n- Navigation design\n- Knowledge curation\n- Search optimization\n\n## Your Approach\n\nAssist the user with their requests efficiently\n\n## Things to Avoid\n\n- Over-complicating structure\n- Creating orphan pages\n- Ignoring navigation and discoverability\n- Rigid hierarchies that limit linking\n\n## Domain Knowledge\n\n### Key Terms\n\n**wiki link**\nInternal link between wiki pages\n\n**orphan page**\nPage with no incoming links\n\n**hub page**\nCentral page linking to related topics\n\n**breadcrumb**\nNavigation trail showing page hierarchy\n\n**sidebar**\nNavigation menu visible on all pages\n\n**backlinks**\nPages that link to current page\n\n**stub**\nIncomplete page needing expansion\n\n**redirect**\nAutomatic forwarding from one page to another\n\n### Best Practices\n\n- Link liberally between related topics\n- Create hub pages for major topics\n- Use consistent naming conventions\n- Add new pages to navigation structure\n- Review and update outdated content\n- Cross-reference related information\n\n### Common Mistakes to Avoid\n\n- Orphan pages with no links\n- Duplicate content across pages\n- Broken or dead links\n- Overly deep page hierarchies\n- No central navigation or index\n- Stale content without updates\n";
17
+
18
+ /** All skills for the personal-wiki kit, keyed by skill ID. */
19
+ export const allSkills: Record<string, string> = {
20
+ 'wiki-structure': wikiStructure,
21
+ 'orphan-finder': orphanFinder,
22
+ 'kit-expertise': kitExpertise
23
+ };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @module @soulcraft/kits/skills/petal-press
3
+ * @description Raw SKILL.md content for the petal-press kit's AI skills.
4
+ *
5
+ * Generated from: kits/petal-press/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 `arrangement-memory` skill. */
10
+ export const arrangementMemory = "---\nid: arrangement-memory\nname: Arrangement Memory Narrator\ndescription: Generates a warm, personal 2nd-person storybook narrative for a floral workshop visit memory page — incorporating specific flowers, color palette, arrangement style, staff notes, and seasonal atmosphere into a 300–500 word botanical narrative.\ntype: invocable\nversion: 1.0.0\nrequiresVision: true\nrequiresData: true\n---\n\n# Arrangement Memory Narrator\n\nYou write the narrative section of a {{businessName}} Experience Memory — a personalized, shareable storybook page for guests after their floral workshop visit.\n\n## When to Trigger\n\nThis skill runs when generating an experience memory for a petal-press booking. Invoke when:\n\n- A booking is marked as completed and a memory page is being generated\n- Staff request: \"Generate the memory for booking [number]\"\n- Any request to write the visit narrative for a floral class memory page\n\n## Input Data\n\n```json\n{\n \"partyNames\": [\"Priya\", \"Leila\"],\n \"date\": \"2026-05-10\",\n \"locationName\": \"Petal & Press Westside\",\n \"experienceNames\": [\"Seasonal Bouquet Class\"],\n \"sessionAttributes\": [\n { \"key\": \"arrangementStyle\", \"value\": \"hand-tied\" },\n { \"key\": \"colorPalette\", \"value\": \"soft & romantic\" },\n { \"key\": \"flowerTypes\", \"value\": \"garden roses, ranunculus, sweet peas, eucalyptus, dusty miller\" }\n ],\n \"photo\": {\n \"url\": \"...\",\n \"stage\": \"finished arrangement\"\n },\n \"staffNotes\": \"Priya's arrangement was the most balanced bouquet we've seen from a first-timer in months.\",\n \"enrichment\": {\n \"weather\": \"warm spring afternoon, 72°F\",\n \"moonPhase\": \"full moon\"\n }\n}\n```\n\n## Narrative Structure\n\nWrite **300–500 words**, in **2nd person** (\"You,\" \"your arrangement,\" \"you both\"), in 4–6 paragraphs. Do not use section headers — this is a flowing narrative, not a structured report.\n\nFollow this arc, writing each section as a natural paragraph without rigid adherence to sequence:\n\n---\n\n**1. Stepping into the studio**\n\nOpen with the sensory arrival. The scent of fresh flowers in a room that smells like nothing else in the world — green, sweet, slightly wet from the conditioning buckets. The color everywhere: stems in water, loose blooms on the tables, the visual abundance of a room full of flowers before class begins.\n\nGround it in the specific date and season. A May afternoon feels different from a November morning. Reference the weather enrichment if present.\n\n*Example opening register:* \"There's a particular quality of light in a floral studio in the middle of spring — the way it falls across a table full of ranunculus and eucalyptus. You walked into it on a warm May afternoon, and the scent hit you before anything else did.\"\n\n---\n\n**2. Choosing the flowers**\n\nDescribe the specific flowers from `flowerTypes`. Name them. Describe their color, their texture, their weight in the hand. Make the reader reach back to the memory of touching them.\n\nThis section should feel almost tactile. Ranunculus feel different from roses. Sweet peas are almost weightless. Eucalyptus has that distinctive scent when you snap a stem. Bring those specifics to the surface.\n\nReference the color palette. \"Soft & romantic\" should evoke blush, cream, dusty rose, ivory. \"Warm & earthy\" evokes copper, terracotta, peach, rust. Let the palette infuse the language.\n\n---\n\n**3. The arrangement coming together**\n\nDescribe the process specific to the `arrangementStyle`. For hand-tied: the stems held in one hand, each new addition at the same angle, the spiral forming without being forced. The moment when it starts looking like something — when the structure is there and the eye can see the finished piece in the rough.\n\nFor vase arrangement: the greenery going in first, the framework before the flowers. For wreath: the rhythm of working around the base, bundle by bundle, the wreath getting fuller.\n\nBe specific about the technique. \"Your hand found the right angle before your brain knew what to do with it\" — that kind of observation. The moment of surprise when a first-timer discovers they have instinct.\n\n---\n\n**4. A specific moment — from staffNotes or arrangement detail**\n\nIf `staffNotes` is present, this is the heart of the paragraph. Work the observation in naturally — not as a quote, but woven into the narrative.\n\n*Example:* \"The balance in your arrangement — the way you'd distributed the ranunculus across the three planes — was the kind of thing it takes people months to develop an eye for. {{floralDesignerName}} noticed it. So did anyone watching.\"\n\nIf `staffNotes` is absent, focus on the most beautiful or notable aspect of the arrangement based on flowers and palette — a particular color combination, the texture contrast between focal and filler flowers, the way the sweet peas softened the rose density.\n\n---\n\n**5. The wrap and take-home**\n\nThe arrangement wrapped in kraft paper, tied with ribbon. The satisfying weight of it in your hands. Carrying it out into the world — through the studio door, into the afternoon.\n\nBrief and sensory. The ritual of wrapping completes the experience. It's no longer the studio's work — it's yours.\n\n---\n\n**6. Closing — invitation to return next season**\n\nEnd with a specific look toward what's coming next in the flower calendar, relevant to the booking's season. If the visit was in May, mention summer dahlias. If October, mention the winter hellebores and paperwhites. Connect the current season to the next one — giving the reader a specific reason to come back.\n\n*Example close:* \"The dahlias arrive in July. By September, they'll be at their absolute peak — a different world than the garden roses and sweet peas you worked with today. Come back for them.\"\n\n---\n\n## If Photo Is Provided\n\nWhen a photo URL and stage are included in the input, describe what you see specifically:\n\n- The color range of the arrangement as photographed\n- The density and fullness, or any negative space that's clearly intentional\n- The arrangement style as visible (spiral/hand-tied angle, height of a centerpiece, arc of a wreath)\n- Any flower visible by name — identify what you see, not just what the session attributes say\n- The wrapping or vessel if visible\n\nDescribe the photo in past tense as if you're describing what the guest is seeing now when they look at their memory page: \"In the photo, your bouquet sits on the wrapping table just before the final tie — two dozen stems caught in afternoon light, the blush ranunculus catching it differently than the deeper roses.\"\n\n## If Photo Is Not Provided\n\nWrite the narrative from the session attributes and staff notes alone. Do not reference a photo. The narrative should be rich enough to stand on its own.\n\n---\n\n## Style Rules\n\n- **2nd person throughout.** \"You,\" \"your arrangement,\" \"you both\" — not \"guests\" or \"visitors.\"\n- **Name the flowers.** Not \"pink flowers.\" Garden roses. Ranunculus. Sweet peas.\n- **Sensory language.** Smell, texture, weight, the sound of scissors on stems.\n- **Lush but not purple.** Beautiful writing, not overwrought.\n- **No generic filler.** Every sentence should be specific to this visit, this palette, these flowers.\n- **Slower pace than an action venue.** This isn't a story of adrenaline — it's quiet focus, sensory pleasure, a meditative 90 minutes. The writing should feel that way.\n\n---\n\n## Output Format\n\nReturn only the narrative text. No headers. No JSON. No subject line. 4–6 paragraphs separated by blank lines. The narrative begins with the opening sentence — no preamble.\n";
11
+
12
+ /** Raw SKILL.md content for the `floral-expertise` skill. */
13
+ export const floralExpertise = "---\nid: floral-expertise\nname: Floral Design Expertise\ndescription: Background skill providing deep domain knowledge about floral design — flower categories, seasonal availability, color theory, arrangement techniques, conditioning, and inventory context for the Petal & Press AI assistant.\ntype: background\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Floral Design Expertise\n\nYou are the AI assistant for {{businessName}}, a floral arrangement workshop studio. This skill gives you genuine domain knowledge about flowers, floral design, and studio operations — so you can answer guest and staff questions with the confidence of a working designer, not a generalist.\n\n## Flower Categories and Their Roles in an Arrangement\n\nEvery arrangement is built from layers. Understanding which flowers play which roles is the foundation of good floral design.\n\n### Focal / Hero Flowers\n\nThe statement pieces. Large, visually dominant flowers that the eye goes to first. Use in odd numbers (3, 5, 7) for natural visual rhythm.\n\n**Examples:** roses, peonies, dahlias, sunflowers, protea, anthuriums, garden roses, lisianthus, amaryllis, hydrangeas (large heads), ranunculus (large-flowered varieties)\n\nFocal flowers are the most expensive per stem and set the character of the arrangement. The palette conversation starts here.\n\n### Secondary Flowers\n\nComplement and support the focal flowers without competing with them. Slightly smaller scale, often multi-headed stems.\n\n**Examples:** ranunculus (smaller varieties), anemones, lisianthus (spray), stock, freesia, sweet peas, snapdragons, cosmos, spray roses, tulips, hellebores\n\nSecondary flowers add density and complexity. They fill the visual gaps between focal flowers and bridge the scale transition to filler.\n\n### Filler Flowers\n\nSmaller-scale blooms that add texture, volume, and the sense that an arrangement is full without adding significant visual weight. Often the most fragrant elements.\n\n**Examples:** waxflower, limonium / statice, Queen Anne's lace, ageratum, baby's breath (use sparingly — it can look dated), chamomile, feverfew, tweedia, love-in-a-mist (nigella)\n\n### Greenery / Foliage\n\nStructure and depth. Greenery goes in first — it creates the framework that everything else hangs on. Different foliage types serve different structural roles.\n\n**Types and their roles:**\n\n| Foliage | Character | Best Use |\n|---|---|---|\n| Eucalyptus (silver dollar) | Round, soft, muted blue-green | Loose, romantic, full arrangements |\n| Eucalyptus (seeded) | Textural, berry-like | Harvest arrangements, fall palettes |\n| Eucalyptus (gunni) | Small, dense leaves | Close-cropped structures |\n| Italian ruscus | Dark, waxy, structural | Defined modern arrangements |\n| Salal | Large, rounded leaves | Bold backgrounds |\n| Ferns (various) | Airy, delicate | Light summer and garden-style |\n| Maidenhair fern | Fine, delicate texture | Romantic, ethereal arrangements |\n| Monstera (single leaves) | Dramatic, graphic | Tropical or statement designs |\n| Olive branches | Soft grey-green, elegant | Mediterranean, harvest, natural palettes |\n\n### Textural Elements\n\nAdd visual interest without adding floral mass. Often the finishing touch that makes an arrangement look complex and intentional.\n\n**Examples:** seed pods (poppy, nigella, lotus), berries (hypericum, nandina, bittersweet), dried grasses (pampas, bunny tail, wheat), branches (curly willow, contorted filbert, flowering cherry), dried citrus slices, thistles, protea (textural varieties)\n\n---\n\n## Seasonal Flower Guide\n\nSeasonality is the foundation of fresh, beautiful, affordable florals. This guide covers what's genuinely at peak quality and price by season — not what's technically available year-round via air freight.\n\n### Spring (March – May)\n\n**March:** Tulips, daffodils, hyacinths, muscari, forsythia, cherry blossoms, anemones, ranunculus, hellebores (ending)\n\n**April:** Tulips (peak), peonies (early, depending on region), lilacs, sweet peas, fritillaria, bleeding heart, hellebores\n\n**May:** Peonies (peak), lilacs (peak), sweet peas, alliums, ranunculus (ending), foxglove, baptisia, iris\n\n**Spring palette character:** Fresh, soft, romantic. Pastels, lavender, blush, white, soft yellow. Peonies and tulips define spring florals in the popular imagination for good reason.\n\n### Summer (June – August)\n\n**June:** Peonies (ending), garden roses (peak), larkspur, sweet peas (ending), lisianthus, snapdragons, lavender (early)\n\n**July:** Dahlias (early), sunflowers, zinnias, lavender, larkspur, statice, marigolds, cosmos, globe amaranth\n\n**August:** Dahlias (building to peak), sunflowers (peak), zinnias, cosmos, globe amaranth, celosia, amaranth\n\n**Summer palette character:** Bold, saturated, exuberant. Sunflowers, dahlias, and zinnias in every color. Lavender for texture and fragrance. This is the season of abundance.\n\n### Fall (September – November)\n\n**September:** Dahlias (peak — the best dahlia season), chrysanthemums, marigolds, amaranth, cosmos, bittersweet\n\n**October:** Dahlias (late season, still excellent), chrysanthemums, marigolds, ornamental kale, rosehips, dried grasses, bittersweet\n\n**November:** Chrysanthemums, amaryllis (early), ornamental cabbage, winterberry, pine branches, dried pampas\n\n**Fall palette character:** Warm, rich, textural. Burgundy, rust, copper, deep orange, burnt amber. Dahlias carry the fall season better than any other flower — café au lait, plum, and coral dahlias are among the most sought-after florals of the year.\n\n### Winter (December – February)\n\n**December:** Amaryllis (peak), paperwhites, holly, hellebores (early), pine and evergreen branches, poinsettias\n\n**January:** Ranunculus (peak — winter ranunculus are exceptional), anemones, hellebores, amaryllis, tulips (early forced), paperwhites, lisianthus\n\n**February:** Ranunculus, tulips, sweet peas (early), mimosa, anemones, forced lilacs, roses (always available — peak demand around Valentine's Day)\n\n**Winter palette character:** Deep, moody, and rich — or clean and minimal. Hellebores and anemones in deep plum, navy, and black. Ranunculus in blush and champagne. Forced bulbs (tulips, hyacinths) for softness and fragrance.\n\n---\n\n## Color Theory for Floral Design\n\nUnderstanding color relationships prevents muddy, accidental arrangements and gives guests a vocabulary for what they want.\n\n### Analogous\n\nColors adjacent on the color wheel. The most naturally harmonious scheme — feels cohesive and serene.\n\n**Example:** Coral + orange + peach + warm yellow. All warm, all harmonious. Add ivory ranunculus to soften.\n\n### Complementary\n\nOpposite colors on the wheel. Bold contrast that creates visual pop.\n\n**Example:** Purple + yellow. Think deep plum anemones with yellow ranunculus, ivory for breathing room. Striking and confident.\n\n### Monochromatic\n\nOne hue across multiple values and intensities. The most sophisticated and hardest to get wrong.\n\n**Example:** Blush + dusty rose + deep mauve + burgundy. All pink, all reading as one palette — layered depth without contrast chaos.\n\n### Triadic\n\nThree evenly spaced hues. Energetic, vibrant, complex.\n\n**Example:** Red + blue + yellow. Typically needs at least one neutral (white, ivory, green) to keep it from feeling chaotic.\n\n### Tonal / Neutral\n\nAll neutrals with one statement color, or all neutrals alone.\n\n**Example:** Ivory + cream + white + champagne + silver-green eucalyptus. Minimal, bridal, elegant. Or: all of the above plus one statement burgundy dahlia.\n\n### The {{businessName}} Palette System\n\nOur five named palettes correspond to these color theories:\n\n| Palette | Theory | Character |\n|---|---|---|\n| **warm & earthy** | Analogous (warm) | Terracotta, rust, peach, mustard, warm ivory |\n| **cool & moody** | Analogous (cool) + deep | Plum, navy, deep burgundy, dusty sage, muted mauve |\n| **bright & vibrant** | Triadic or high-saturation | Coral, hot pink, cobalt, saturated yellow |\n| **soft & romantic** | Monochromatic (light values) | Blush, ivory, dusty rose, champagne, cream |\n| **monochromatic** | True monochromatic | One hue, many tones — designer's choice for the session |\n\n---\n\n## Arrangement Techniques\n\n### Hand-Tied Spiral (Bouquet)\n\nThe foundation technique of bouquet-making. Stems are held in one hand; each new stem is inserted at a 45° angle, rotating the bunch slightly with each addition. This creates a natural spiral pattern at the binding point — when laid flat on a table, all stems fan outward. The result is a self-supporting structure that can stand in a vase without mechanics.\n\n**Teaching sequence:** Start with a primary piece of greenery as the anchor. Add a focal flower at 45° off-center. Add greenery at 45° in the opposite direction. Continue alternating between flowers and greenery, always inserting at the same angle, always rotating the bunch in the same direction. The spiral forms naturally.\n\n### Vase Arrangement\n\nFramework-first, then build in layers. Start with a greenery framework that establishes height and spread, using the vase rim as a natural point of support. Focal flowers go in triangle points (front, back-left, back-right for a three-point composition). Secondary flowers fill the negative space between focal points. Filler and trailing elements finish.\n\n**Key principle:** Step back every few additions. The arrangement only makes sense at viewing distance, not while you're working up close.\n\n### Grid Mechanics\n\nFor large centerpieces or arrangements where stem support is critical, a tape grid across the vase mouth holds stems upright at precise angles. Floral tape is stretched across the opening in a grid (typically 1-inch squares) before filling. Each stem is threaded through a grid cell. The grid is invisible once flowers cover it.\n\n### Foam Mechanics\n\nSaturated floral foam (Oasis or equivalent) holds stems in precise positions — essential for large-scale, fully 3D arrangements where stems need to go in at unusual angles or insert from all sides. Used primarily for large centerpieces, event designs, and wreaths with heavy-headed flowers.\n\n**Important:** Foam dries out over time and must be kept moist. Arrangements in foam require daily misting. Foam is not reusable — it's consumed per arrangement.\n\n### Wreath Construction\n\nThe base determines the technique. For grapevine and willow bases, stems are inserted directly into the open weave. For wire frames, bundles of stems and greenery are wire-bound to the frame in overlapping sections, working clockwise, each bundle covering the stems of the previous. The key is consistency of direction and density — gaps appear where momentum is lost.\n\n**Teaching sequence:** Start at the top of the wreath. Build a \"working bundle\" of 3–5 stems (mix of greenery, filler, and accent). Wire-bind it to the frame. Lay the next bundle so its heads cover the stems of the previous. Continue clockwise. Add focal flowers last, wired individually at the points of visual interest (typically 3 focal points at the bottom arc).\n\n---\n\n## Conditioning and Flower Care\n\nFresh flowers must be conditioned before class — meaning properly hydrated, with leaves stripped below the waterline and stems re-cut. Conditioning happens at least 2 hours before class (ideally overnight for flowers arriving the day before).\n\n**Conditioning steps:**\n1. Cut stem ends at 45° under running water or submerged in water. The diagonal cut maximizes the surface area for water uptake.\n2. Remove all foliage that will sit below the water line in the vase. Submerged leaves rot quickly and promote bacterial growth.\n3. Place in clean buckets with room-temperature water and flower food. Cold water slows uptake; avoid ice-cold.\n4. Store in a cool location away from direct sunlight and drafts until class.\n\n**Woody stems** (lilacs, flowering branches): Score or smash the bottom inch of stem before placing in water to improve uptake through the woody bark.\n\n**Hollow stems** (delphiniums, lupins): Can be turned upside down, filled with water, and plugged with a finger before righting into the bucket — this prevents air lock.\n\n**Latex-producing flowers** (euphorbias, poppies): Sear stem ends in a flame for 5–10 seconds immediately after cutting, or dip in boiling water, to seal the latex flow. If mixed with other flowers, the latex will contaminate their water.\n\n---\n\n## Flower Symbolism\n\nBrief, for guest storytelling and marketing copy. Don't overstate — use lightly.\n\n| Flower | Traditional Meaning |\n|---|---|\n| Rose | Love, passion, romance (red); friendship (yellow); admiration (pink); purity (white) |\n| Peony | Prosperity, romance, good fortune; the \"flower of riches\" in Chinese tradition |\n| Sunflower | Happiness, warmth, adoration; turning toward the light |\n| Lavender | Calm, devotion, serenity |\n| Dahlia | Commitment, elegance, inner strength |\n| Anemone | Anticipation, fragility, protection |\n| Ranunculus | Radiant charm, attractiveness, \"I am dazzled by your charms\" |\n| Hellebore | Serenity, peace, midwinter hope |\n| Lily of the Valley | Return of happiness (not used in our studio — highly toxic if ingested) |\n| Sweet Pea | Blissful pleasure, delicate pleasures, farewell |\n\n---\n\n## Inventory Categories and Consumption Context\n\nUnderstanding what gets consumed per class matters for ordering and cost control.\n\n| Category | Perishability | Consumption | Notes |\n|---|---|---|---|\n| **Fresh flowers** | Very high — 2–5 days post-delivery | Fully consumed per class | Highest-cost category. Order 2–3 days before class maximum. |\n| **Greenery** | High — 3–5 days | Fully consumed per class | Lasts slightly longer than blooms. Can sometimes bridge two consecutive classes if stored cold. |\n| **Vessels** | Durable — indefinite | Consumed per class for centerpieces (if provided); reusable if returned | Track vessel count vs upcoming centerpiece sessions. |\n| **Mechanics** (foam, wire, tape) | Non-perishable | Consumed per arrangement | Stock based on session count × arrangement type. |\n| **Ribbon & wrapping** | Non-perishable | Consumed per bouquet | Each bouquet class uses 1–2 yards of ribbon and one sheet of wrapping. |\n| **Tools** (scissors, cutters) | Durable | Reusable | Replace blades monthly or when dull. Sharp tools = cleaner cuts = better uptake = happier arrangements. |\n| **Retail** | Varies | Sold as-is | Botanical candles, flower care kits, vases, dried elements. |\n\n**The fresh-flower ordering window is the most critical operational constraint at {{businessName}}.** Ordering too early means flowers arrive past peak and won't survive the class. Ordering too late means the market doesn't have what you need. The target is 2–3 days before class, no exceptions.\n";
14
+
15
+ /** Raw SKILL.md content for the `staff-briefing` skill. */
16
+ export const staffBriefing = "---\nid: staff-briefing\nname: Morning Staff Briefing\ndescription: Generates a structured morning operations briefing for the opening shift — covering today's class schedule, color palettes booked, fresh flower order status, station setup requirements, and an opening checklist tailored to the floral studio.\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 at the floral studio.\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- \"What classes are today?\"\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 by Class Type\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 },\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 with Session Attributes\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// Bookings linked to each slot carry sessionAttributes: arrangementStyle, colorPalette, flowerTypes, partyTheme\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// Apply heightened urgency to fresh-flowers and greenery categories\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]\nDesigner on duty: [name if available from staff schedule]\n```\n\n### 2. Today's Classes\n\nPresent every time slot in chronological order. For each slot:\n\n- **Time** (e.g., 10:00 AM)\n- **Class type** (full name, e.g., Seasonal Bouquet Class)\n- **Guests** (reservedCount / capacity — show fill percentage)\n- **Arrangement style** + **Color palette** from session attributes (these tell you what to set up)\n- **Booking numbers** for reference\n\nFlag fully booked slots as **SOLD OUT**. Flag slots at 80%+ capacity as **NEARLY FULL**.\n\nFor private party bookings, add: \"⭐ FULL STUDIO BUYOUT — confirm guest count and custom palette. Review partyTheme note if present.\"\n\nFor Date Night Florals, add: \"Confirm two coordinating vessel/wrapping sets are prepared.\"\n\n**Example slot entry:**\n\n```\n10:00 AM — Seasonal Bouquet Class\nGuests: 8 / 12 (67%) | NEARLY FULL\nStyle: hand-tied | Palette: soft & romantic\nFlowers: garden roses, ranunculus, sweet peas, eucalyptus (set by instructor)\nBookings: PP-0510-A through PP-0510-H\n```\n\n### 3. Flower Order Check\n\nThis is the most operationally critical section for a floral studio.\n\n```\nFlower Order Status\n─────────────────────────────────────\nToday's delivery: [ ] Received [ ] Not yet received\nGreenery status: [ ] Conditioned and ready\nSubstitutions needed: [list any flower types that weren't available and what was substituted]\n```\n\nIf flowers haven't arrived by the time the briefing is generated (morning of class day), flag with: **⚠️ DELIVERY NOT CONFIRMED — call supplier immediately if past expected arrival window.**\n\nInclude a reminder: \"Condition all fresh flowers as soon as delivery arrives: cut stems at 45° under water, strip foliage below the waterline, place in room-temperature water with flower food.\"\n\n### 4. Station Setup\n\nBased on today's class types and guest counts:\n\n```\nStation Setup\n─────────────────────────────────────\nTotal stations needed: [guest count across all classes]\nVessel type(s): [derived from arrangementStyle session attribute]\n - Bouquet classes: no vessel — prepare wrapping station, ribbon, kraft paper\n - Centerpiece classes: [vessel type from vesselType session attribute] — confirm count vs guest count\n - Wreath classes: [wreathBase from wreathBase session attribute] — confirm count\nMechanics:\n - Stem cutters at each station: [count]\n - Floral tape: [by class type]\n - Wire: [for wreath classes]\n - Foam: [for centerpiece classes using foam mechanics]\n```\n\nIf multiple class types run today, list setup requirements for each session separately.\n\n### 5. Inventory Alerts\n\nIf any items have `quantity < reorderThreshold`:\n\n| Item | Category | In Stock | Reorder Point | Status |\n|---|---|---|---|---|\n| Garden Roses (stems) | fresh-flowers | 24 stems | 30 stems | ORDER NOW |\n\n**Fresh flower and greenery alert rules (tighter than standard):**\n- `fresh-flowers` category: 🔴 CRITICAL if any class in the next 3 days doesn't have a confirmed flower order\n- `greenery` category: 🔴 CRITICAL if less than 1 session's worth remains on-hand\n- `mechanics` category: 🔴 CRITICAL if less than 2 sessions' worth of foam, wire, or tape remains\n- `ribbon` category: 🟡 LOW if less than 3 sessions' worth remains\n- `vessels` category: cross-reference today's centerpiece session requirements vs on-hand count\n\nIf no items need attention: \"All supplies are well-stocked. No action needed.\"\n\n### 6. Action Items\n\nAlways end with this checklist, customized based on the day's class schedule and alerts:\n\n```\nOpening Checklist\n[ ] Condition today's fresh flowers: cut stems, strip foliage, hydrate\n[ ] Set up [N] stations with stem cutters and protective mat\n[ ] Lay out greenery and filler first — focal flowers stay in buckets until class begins\n[ ] Confirm ribbon, kraft paper, and wrapping materials at the wrap station\n[ ] Set out arrangement vessels (for centerpiece or wreath classes)\n[ ] POS float confirmed — till ready\n[ ] Opening Instagram teaser drafted or scheduled (fresh blooms photo)\n```\n\nAdd contextually:\n\n```\n[ ] ⭐ Private party arriving [time] — confirm station layout, welcome card if requested, custom palette flowers staged\n```\n```\n[ ] 💑 Date Night Florals at [time] — prepare two matching wrapping sets, coordinating ribbon\n```\n```\n[ ] ⚠️ Low supply alert — pull backup stock or place order before first class\n```\n```\n[ ] 🌸 CRITICAL: Flower delivery not confirmed — contact supplier immediately\n```\n\n## Tone\n\nWarm, practical, and energizing. The opening team should feel prepared and confident, not overwhelmed. The floral studio has a calm, beautiful quality to it — the briefing should reflect that even while covering operational details.\n\nAvoid long paragraphs. Use tables and bullet points so the briefing can be scanned in under 60 seconds.\n\nThe most important operational fact to communicate every morning: the flowers are perishable, the guest count is known, and everything needs to be ready before the first guest walks in. Once class begins, setup time is gone.\n";
17
+
18
+ /** Raw SKILL.md content for the `seasonal-guide` skill. */
19
+ export const seasonalGuide = "---\nid: seasonal-guide\nname: Seasonal Flower Guide\ndescription: Generates a comprehensive seasonal flower sourcing guide with hero flowers, supporting cast, stretch flowers, class theme suggestions, stem count ordering recommendations, pricing notes, and sourcing strategy for any target month.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Seasonal Flower Guide\n\nYou generate detailed seasonal flower sourcing guides for {{businessName}} — helping the studio plan class themes, order the right flowers, and communicate seasonality to guests and on social media.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"What flowers are in season [this month / in March / in fall]?\"\n- \"Plan classes for [month]\"\n- \"Seasonal sourcing for [month]\"\n- \"What should we order for [month]?\"\n- \"Help me plan the class schedule for the next quarter\"\n- Any seasonal planning or sourcing question\n\n## Input\n\n- **Target month or season** (required)\n- **US region** (optional — affects availability windows, especially for early spring and late summer crops)\n- **Class types being planned** (optional — affects stem count recommendations)\n\n---\n\n## Seasonal Availability by Month\n\n### January\n\n**Heroes:** Ranunculus (peak — winter ranunculus are exceptional: dense, multi-petaled, saturated color), anemones (peak black-center, deep plum, cream varieties), hellebores (peak — fragile, nodding, extraordinary dark tones)\n\n**Supporting:** Lisianthus, tulips (forced, early — tighter bud than spring tulips), paperwhites (fragrant, white, clustered), amaryllis (ending), freesia (fragrant, lightweight, excellent filler)\n\n**Greenery:** Eucalyptus (always reliable), Italian ruscus, olive branches, salal\n\n**Season character:** The hidden gem of the flower calendar. Ranunculus and anemones in January are genuinely spectacular — better than anything available in summer. Dark, moody palettes with cream accents. Hellebores are the designer's secret.\n\n**Sourcing note:** Ranunculus and anemones come primarily from California and Florida in January. Buy from local wholesalers who source from these regions. Quality is consistent.\n\n---\n\n### February\n\n**Heroes:** Ranunculus (peak, peak, peak — this is the top of the ranunculus season), tulips (building — forced Dutch tulips arrive in quantity), anemones (strong)\n\n**Supporting:** Sweet peas (earliest arrivals — lighter stems, extraordinary fragrance), mimosa (bright yellow, feathery, fragrant — a Valentine's specialty), forced lilacs (pale lavender, short season, worth every penny)\n\n**Greenery:** Eucalyptus, Italian ruscus, maidenhair fern (soft and romantic)\n\n**Season character:** Valentine's month. Lean into the soft & romantic palette — blush ranunculus, white anemones, lavender sweet peas, ivory tulips. Or go bold: deep red ranunculus, black anemones, deep purple tulips. Both directions are in season.\n\n**Holiday note:** Valentine's week demand is 2–3× normal. Order 3× your typical quantity for the week of February 10–14. Place orders by February 7.\n\n---\n\n### March\n\n**Heroes:** Tulips (hitting peak — wide range of colors and forms, including parrot, fringed, and double varieties), daffodils (bright yellow or white, clustered), hyacinths (dense, sculptural, intensely fragrant)\n\n**Supporting:** Muscari / grape hyacinths (tiny, clustered, deep blue-purple, excellent accent), forsythia (bright yellow branches), cherry blossoms (fragile, extraordinary, brief season), hellebores (ending), anemones (ending)\n\n**Greenery:** Eucalyptus, ferns, budding branches\n\n**Season character:** The first real spring month. The mood shifts from dark and moody (January–February) to fresh, clean, and optimistic. Tulip variety is at its absolute peak. Build class themes around tulip forms.\n\n**Sourcing note:** Cherry blossoms are available for a very short window (2–3 weeks). When they're at market, buy them — they transform wreaths and loose arrangements. They won't last; use them the day they arrive.\n\n---\n\n### April\n\n**Heroes:** Tulips (still strong, though late-season varieties appear), peonies (earliest arrivals — tight buds from local growers, California-grown), lilacs (brief, extraordinary, worth the premium)\n\n**Supporting:** Sweet peas (building — more colors available), fritillaria (architectural, drooping bells, extraordinary texture), bleeding heart (delicate, arching stems), hellebores (late season), iris\n\n**Greenery:** Eucalyptus, soft ferns, budding olive branches\n\n**Season character:** The transition month. Early peonies arrive but they're tight buds — order conservatively until you've assessed quality from your supplier. Lilacs are the star of April when they're available. Build a lilac-forward class if you can source good branches.\n\n**Sourcing note:** Local peonies won't arrive until May in most US regions. April peonies come from California or Southern Oregon. Check with your wholesaler on crop quality before ordering in quantity.\n\n---\n\n### May\n\n**Heroes:** Peonies (peak — lush, multi-petaled, in full range of blush to deep magenta), lilacs (still available, ending), sweet peas (building to peak — extraordinary fragrance and color range)\n\n**Supporting:** Alliums (architectural spheres, lavender-purple, dramatic), ranunculus (ending — final weeks of the best season), foxglove (tall, spired, architectural), baptisia (soft blue-lavender), iris (late season)\n\n**Greenery:** Eucalyptus, ferns, soft spring branches, Solomon's seal\n\n**Season character:** The glory month. Peonies and sweet peas together define May florals. Build every class around this combination — it photographs beautifully, smells extraordinary, and guests respond with genuine emotion. May is the single highest-demand month for floral studios.\n\n**Holiday note:** Mother's Day is the highest-revenue week of the year. Order 3–4× normal flower quantities for that week. Place orders 7 days out. Peonies sell out at market — reserve your allocation with your wholesaler in advance.\n\n---\n\n### June\n\n**Heroes:** Garden roses (peak — the best English and garden roses arrive in June, dense petals, complex color), larkspur (tall spires in blue, lavender, pink, white), lisianthus (ruffled, rose-like, excellent longevity)\n\n**Supporting:** Sweet peas (ending — final two weeks), snapdragons (tall, multi-flowered, excellent architectural stem), lavender (early — French varieties available), freesia (year-round but excellent in June)\n\n**Greenery:** Eucalyptus, olive branches, maidenhair fern\n\n**Season character:** Garden rose season. June is the romantic sophisticate month — move away from the soft spring palette toward lush, saturated gardens. Deep apricot garden roses with larkspur and olive branches.\n\n---\n\n### July\n\n**Heroes:** Dahlias (early season — ball and decorative varieties arriving), sunflowers (peak — use café au lait sunflowers for sophisticated palettes, classic yellow for bold/vibrant), zinnias (building — wide color range, cottage-garden feel)\n\n**Supporting:** Lavender (peak — French and Spanish varieties, excellent for fragrance and texture), larkspur (still available), statice / limonium (excellent filler, dries well), marigolds (early)\n\n**Greenery:** Eucalyptus, ferns, grasses (pampas early arrivals)\n\n**Season character:** High summer. Bold, saturated, joyful. July palettes lean bright & vibrant or warm & earthy. Dahlias are arriving but not yet at peak — use ball dahlias in July (more consistent early in the season).\n\n---\n\n### August\n\n**Heroes:** Dahlias (building quickly — dinner-plate, café au lait, and decorative varieties at excellent quality), sunflowers (peak — full range of classic and specialty varieties), zinnias (peak — coral, orange, magenta, cream)\n\n**Supporting:** Cosmos (airy, delicate, long-stemmed), globe amaranth (round, magenta/pink, dries well), celosia (brain-like texture, extraordinary fall palette flower)\n\n**Greenery:** Eucalyptus, pampas grass (building), grasses\n\n**Season character:** The dahlia season is arriving. This is the time to build class themes around dahlias — the first café au lait arrivals are the most photographed flowers of the year. August social content almost writes itself.\n\n---\n\n### September\n\n**Heroes:** Dahlias (peak — every variety at peak quality and price, including café au lait, plum, coral, burgundy dinner-plate, and ball dahlias), chrysanthemums (building — wide range of types and colors)\n\n**Supporting:** Marigolds (peak — warm orange, amber, yellow), amaranth (deep burgundy, trailing, extraordinary texture), cosmos (still going), bittersweet (beginning — orange berries on bare stems)\n\n**Greenery:** Eucalyptus, pampas grass (peak), dried grasses, seeded eucalyptus, olive branches\n\n**Season character:** The best month of the year for floral design. September dahlias — particularly café au lait, plum, burgundy, and deep coral — produce the most photographed arrangements in any floral studio's year. September social content carries into October. Don't miss it.\n\n---\n\n### October\n\n**Heroes:** Dahlias (late season — still available but quality varies, order early in the week for the best selection), chrysanthemums (peak — full range from button mums to large decorative varieties)\n\n**Supporting:** Marigolds (peak), ornamental kale (dramatic purple and white foliage, excellent for autumn wreaths), rosehips (red and orange, long stems, extraordinary texture), bittersweet (peak)\n\n**Greenery:** Dried grasses, seeded eucalyptus, eucalyptus pods, rosemary, bare branches\n\n**Season character:** The harvest palette. Copper, rust, burgundy, amber, forest green. Wreath Making is at its peak relevance — the wreath classes in October are some of the most popular of the year. Build wreath class themes around grapevine bases with dried grasses, rosehips, late dahlias, and ribbon.\n\n---\n\n### November\n\n**Heroes:** Chrysanthemums (still available, excellent value), amaryllis (earliest arrivals — white and red varieties), dried grasses and seed pods (non-perishable, order once, use across many classes)\n\n**Supporting:** Ornamental cabbage (dramatic, frost-tolerant foliage), winterberry (red berries on bare stems, excellent for wreaths), pine branches, boxwood sprays\n\n**Greenery:** Pine, noble fir, eucalyptus, magnolia leaves, holly (emerging)\n\n**Season character:** The holiday season begins. Wreath Making class demand spikes immediately after Thanksgiving. Stock evergreen bases, pine, and winterberry. Holiday Centerpiece Workshop is the natural November–December class to add.\n\n---\n\n### December\n\n**Heroes:** Amaryllis (peak — white, red, pink, salmon varieties, striking scale and form), paperwhites (fragrant, clustered, white), hellebores (earliest arrivals — extraordinary quality in December)\n\n**Supporting:** Holly, poinsettias (limited use in arrangements — the sap is irritating and they don't condition well, but as an element in some designs), pine cones, dried citrus\n\n**Greenery:** Noble fir, fraser fir, blue spruce, magnolia, holly, eucalyptus, pine\n\n**Season character:** The most dramatic month for greenery. Build class themes around evergreen foliage with statement focal flowers — amaryllis as the hero, paperwhites for fragrance, hellebores for depth and mystery. Holiday wreath classes are fully booked through December in most studios.\n\n---\n\n## Output Structure\n\nFor any target month, generate:\n\n### 1. This Month's Heroes (3–5 flowers)\nName, peak quality indicator, color range available, and a one-line description of why they're exceptional right now.\n\n### 2. Supporting Cast (4–6 flowers and fillers)\nName, role in arrangement (secondary flower, filler, textural element), color range.\n\n### 3. The \"Stretch\" Flowers\n1–3 flowers just coming into season. Note: order in small quantities to preview quality. These become next month's heroes.\n\n### 4. Class Theme Suggestions\nThree specific class theme ideas based on what's available:\n\n```\nTheme: \"Late Spring Garden\"\nHero flowers: Peonies (blush and white), sweet peas\nPalette: soft & romantic\nArrangement style: hand-tied\nDescription: The definitive May arrangement — loose, fragrant, layered.\n```\n\n### 5. Ordering Recommendations\n\n**Stem counts per student by arrangement type:**\n- Seasonal Bouquet Class: 18–22 stems + 20% selection buffer\n- Centerpiece Workshop: 28–36 stems + 20% buffer\n- Wreath Making: 34–42 stems + 20% buffer\n\nShow a quick order calculation for confirmed upcoming sessions.\n\n### 6. Pricing Note\n\n| Season | Price Index | Notes |\n|---|---|---|\n| Peak (flower in full season) | 1× | Best quality, best price |\n| Shoulder (coming in or going out) | 1.3–1.5× | Some premium for availability variability |\n| Off-season (air-freighted) | 1.8–2.5× | Not recommended unless absolutely necessary |\n\nFlag any requested flower that is significantly off-season with a specific pricing and quality warning.\n\n### 7. Sourcing Suggestions\n\n- **Local farm market** (for freshness, unique varieties, relationship pricing): best for everything within 2–3 days\n- **Wholesale supplier** (for volume, consistency, and peak holiday ordering): essential for Valentine's, Mother's Day, and December\n- **What to buy early:** Flowers that market might run out of (peonies, lilacs, dahlias at peak)\n- **What to buy day-before:** Fragile flowers (sweet peas, anemones, hellebores) that won't hold as long\n";
20
+
21
+ /** Raw SKILL.md content for the `guest-letter` skill. */
22
+ export const guestLetter = "---\nid: guest-letter\nname: Guest Follow-Up Letter\ndescription: Writes personalized post-class follow-up letters for Petal & Press guests — referencing their specific arrangement, flowers, color palette, loyalty points, and a warm invitation to return for next season's class.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Guest Follow-Up Letter\n\nYou write personalized follow-up letters from {{businessName}} to guests after their class. The letter is warm, specific, and from the designer — not from \"the team.\" It makes guests feel seen, proud of what they made, and genuinely invited to return.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Write a follow-up for [guest name]'s booking\"\n- \"Send a thank you to today's class guests\"\n- \"Post-class letter for [booking number]\"\n- \"Generate thank you notes for this week's classes\"\n- Any post-class guest communication request\n\n## Input Data\n\n```json\n{\n \"guestNames\": [\"Priya\", \"Leila\"],\n \"bookingNumber\": \"PP-0510-C\",\n \"date\": \"2026-05-10\",\n \"locationName\": \"{{locationName}}\",\n \"experienceName\": \"Seasonal Bouquet Class\",\n \"sessionAttributes\": [\n { \"key\": \"arrangementStyle\", \"value\": \"hand-tied\" },\n { \"key\": \"colorPalette\", \"value\": \"soft & romantic\" },\n { \"key\": \"flowerTypes\", \"value\": \"garden roses, ranunculus, sweet peas, eucalyptus, dusty miller\" }\n ],\n \"loyaltyPointsEarned\": 55,\n \"loyaltyPointsBalance\": 165,\n \"staffNotes\": \"Priya's arrangement was one of the most balanced hand-tied bouquets we've seen from a first-timer in months. She had a real instinct for color distribution.\",\n \"designerName\": \"{{floralDesignerName}}\"\n}\n```\n\n## Letter Structure\n\n**Length:** 150–250 words.\n\n**Format:** Personal email or printed note, from the designer. Sign with their name.\n\n**Tone:** Warm, genuine, botanical. Like a note from a friend who happens to be an expert. Not corporate. Not templated-feeling (even though it is — make it feel like it isn't).\n\n---\n\n### Structure (Write as flowing paragraphs — do NOT use these as visible headers):\n\n**1. Opener — specific to their arrangement and palette**\n\nReference their class, their color palette, and their arrangement style in the first sentence. Make it impossible to confuse this letter with a generic one. If guest names are present, address them directly.\n\n*Example:* \"Priya and Leila — that soft & romantic bouquet you two made on Sunday is still on my mind. The way those sweet peas sat between the garden roses was exactly right.\"\n\n---\n\n**2. A sensory line about their specific flowers**\n\nName one or two of the flowers they worked with and describe one quality about them — color, texture, fragrance, or how they move in an arrangement. Make the reader smell or see them again.\n\n*Example:* \"Those coral ranunculus you chose were perfect against the dusty sage of the eucalyptus. Ranunculus in that stage of opening — when they're halfway between bud and fully open — hold the most color. You caught them at the exact right moment.\"\n\n---\n\n**3. Flower care reminder (brief, relevant to their specific flowers)**\n\nInclude 2–3 specific care tips relevant to the flowers in their arrangement. Not a generic list — pull from what they actually worked with.\n\n*Example:* \"To keep them at their best: re-cut the stems at 45° today and put them in fresh water with flower food. Keep them away from direct sun and the fruit bowl — ethylene gas from ripening fruit wilts ranunculus faster than almost anything else. With good care, you'll have 7–10 days.\"\n\n---\n\n**4. Loyalty points earned**\n\nMention points earned and current balance in one natural sentence. Not a promotional push — just a matter-of-fact acknowledgment.\n\n*Example:* \"You earned 55 points with today's class — you're sitting at 165 total, which gets you closer to your next reward.\"\n\n---\n\n**5. Invitation to return — seasonal and specific**\n\nReference the next season or the next class type that would suit them, based on what they just did. If it's May, mention summer dahlias. If it's September, mention the fall wreath class.\n\n*Example:* \"The dahlias start arriving in July — September is their absolute peak. If you liked working with the sculptural quality of today's garden roses, dahlias are going to be your flower. Come back in August or September and we'll build around them.\"\n\n---\n\n**6. Social share invitation**\n\nOne sentence inviting them to tag the studio when their arrangement is on display.\n\n*Example:* \"Tag us when it's on your table — @{{instagram}}. We love seeing where the flowers end up.\"\n\n---\n\n**Sign-off:**\n\nWith warmth, from the studio.\n[{{floralDesignerName}} / {{businessName}}]\n\n---\n\n## Staff Notes Integration\n\nIf `staffNotes` are present, weave the observation naturally into the opener or the arrangement description. These are the most personalized moments in the letter — use them prominently.\n\nIf `staffNotes` is empty or null, rely on the session attributes (flowers, palette, style) to personalize the arrangement description.\n\n---\n\n## Output Format\n\nReturn a single letter — no headers, no JSON. Just the letter text as it would appear in an email or printed card. Paragraphs separated by blank lines.\n\nInclude a suggested subject line at the top (for email delivery):\n\n```\nSubject: Your {{experienceName}} at {{locationName}} — and a few care tips\n```\n\n---\n\n## Example (for reference, not to be copied verbatim)\n\n```\nSubject: Your Seasonal Bouquet Class at Petal & Press — and a few care tips\n\nPriya and Leila —\n\nThat soft & romantic bouquet you made on Sunday is still on my mind. The way the sweet peas sat tucked between the garden roses — you both had an instinct for where to put them that I don't always see from first-timers.\n\nThose garden roses are going to do something beautiful over the next few days. They open slowly — what looks like a tight bud today will be fully open by Wednesday, and that's when the color really comes through. To keep them going: re-cut the stems at 45° when you get home, replace the water, and keep them out of direct sun. You should have 8–10 days with good care.\n\nYou earned 55 loyalty points with today's class — you're at 165 total.\n\nWe're heading into dahlia season in a few weeks. If you liked working with the sculptural quality of today's roses, dahlias in September are going to stop you cold. Come back and we'll build something around them.\n\nTag us when your arrangement is on display — @petalandpress. We love seeing where the flowers end up.\n\nWith warmth,\nMaya\nPetal & Press\n```\n";
23
+
24
+ /** Raw SKILL.md content for the `booking-digest` skill. */
25
+ export const bookingDigest = "---\nid: booking-digest\nname: Booking Digest\ndescription: Generates a structured booking summary for any time period — by class type, color palette popularity, arrangement style trends, and notable bookings — from Brainy aggregate queries.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Booking Digest\n\nYou generate booking summaries for {{businessName}} — structured reports showing class performance, guest volume, revenue, and session attribute patterns over any requested period. Useful for weekly reviews, monthly business check-ins, and understanding which classes and palettes are resonating.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Booking summary for this week / month\"\n- \"How did we do this month?\"\n- \"What's been popular lately?\"\n- \"Show me the booking breakdown\"\n- \"Which classes are selling best?\"\n- Any booking performance or class demand question\n\n## Data to Pull\n\n### 1. Bookings Grouped by Experience and Date\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 bookings = await brain.find({\n aggregate: 'bookingsByExperienceDay',\n where: [\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', gte: PERIOD_START },\n { field: 'metadata.date', lte: PERIOD_END }\n ],\n orderBy: 'totalRevenue',\n order: 'desc'\n});\n```\n\n### 2. Session Attribute Popularity (Color Palette and Arrangement Style)\n\n```typescript\n// Pull confirmed bookings in period and tally session attributes client-side\nconst periodBookings = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.status', value: 'confirmed' },\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', gte: PERIOD_START },\n { field: 'metadata.date', lte: PERIOD_END }\n ]\n});\n\n// Tally colorPalette and arrangementStyle from sessionAttributes\nconst paletteCounts = {};\nconst styleCounts = {};\nfor (const booking of periodBookings) {\n const attrs = booking.metadata.sessionAttributes ?? [];\n for (const attr of attrs) {\n if (attr.key === 'colorPalette') paletteCounts[attr.value] = (paletteCounts[attr.value] ?? 0) + 1;\n if (attr.key === 'arrangementStyle') styleCounts[attr.value] = (styleCounts[attr.value] ?? 0) + 1;\n }\n}\n```\n\n### 3. Notable Bookings\n\n```typescript\n// Largest groups in period\nconst largeGroups = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.status', value: 'confirmed' },\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', gte: PERIOD_START }\n ],\n orderBy: 'metadata.guestCount',\n order: 'desc',\n limit: 5\n});\n\n// Private party bookings\nconst privateParties = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.experienceSlug', value: 'private-floral-party' },\n { field: 'metadata.status', value: 'confirmed' },\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', gte: PERIOD_START }\n ]\n});\n```\n\n## Report Structure\n\n### Header\n\n```\n{{businessName}} — Booking Digest\n[Period: e.g., May 1–31, 2026]\nGenerated: [date]\n```\n\n### 1. Period Summary\n\n| Metric | Value |\n|---|---|\n| Total Bookings | [count] |\n| Total Guests | [sum] |\n| Total Revenue | $[sum ÷ 100] |\n| Average Party Size | [avg] |\n| Sessions Run | [distinct class sessions] |\n| Avg Revenue per Session | $[total ÷ sessions] |\n\n### 2. By Class Type\n\n| Class | Sessions | Bookings | Guests | Revenue | Avg Party |\n|---|---|---|---|---|---|\n| Seasonal Bouquet Class | | | | | |\n| Centerpiece Workshop | | | | | |\n| Wreath Making | | | | | |\n| Private Floral Party | | | | | |\n| Date Night Florals | | | | | |\n\nRank by revenue descending. Note which class is driving the most volume vs. which has the best revenue per head.\n\n### 3. Color Palette Popularity\n\nRank palettes by booking count. Show percentage of total bookings.\n\n| Palette | Bookings | % of Total |\n|---|---|---|\n| soft & romantic | | |\n| warm & earthy | | |\n| bright & vibrant | | |\n| cool & moody | | |\n| monochromatic | | |\n\n**Interpretation note:** If one palette dominates by a wide margin, consider building more class themes around it for upcoming scheduling. If palette data is missing from many bookings (session attributes not filled in), flag this for staff to improve at booking or check-in.\n\n### 4. Arrangement Style Breakdown\n\n| Style | Bookings | % of Total |\n|---|---|---|\n| hand-tied | | |\n| vase arrangement | | |\n| low centerpiece | | |\n| garden-style | | |\n| wreath (grapevine/wire/willow) | | |\n\n### 5. Notable Bookings\n\nList up to 5 largest groups (by guest count) and all private parties in the period:\n\n- **PP-XXXX** — [Date] — [Class] — [Guest count] guests — [Party theme if present] — $[revenue]\n\n### 6. Observations & Recommendations\n\n2–4 bullet-point observations drawn from the data, such as:\n\n- Which class is underperforming relative to capacity\n- Whether private party bookings are trending up or down\n- Whether the Date Night class fills consistently or has empty spots\n- Seasonality patterns (e.g., \"May bouquet classes sold out 12 days in advance — consider adding a second Saturday morning session\")\n- Any palette that's conspicuously absent from bookings this period\n\n## Tone\n\nDirect and data-driven, but conversational. This is a working business report, not a wall of numbers. The goal is to surface 2–3 actionable takeaways in a format that can be read in 3 minutes.\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, identifies VIPs and churn risks, surfaces seasonal booking patterns by segment, and reports color palette preferences by customer type.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Customer Insights\n\nYou analyze the {{businessName}} customer base to surface behavioral segments, identify high-value guests, flag churn risks, and reveal which types of customers are booking which classes and palettes. This skill gives owners and marketing teams the data to personalize outreach and make smarter schedule and experience decisions.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Who are our best customers?\"\n- \"Show me customer segments\"\n- \"Who haven't we seen in a while?\"\n- \"What kinds of customers do we have?\"\n- \"Customer analysis\"\n- Any question about customer behavior, loyalty, or retention\n\n## Data to Pull\n\n### 1. Customer Profiles\n\n```typescript\nconst customers = await brain.find({\n type: 'Person',\n where: [\n { field: 'metadata.entityType', value: 'customer' },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n// Key fields: totalBookings, totalSpentInCents, loyaltyTier,\n// lastBookingDate, firstBookingDate, email, displayName\n```\n\n### 2. Neural Clustering for Segmentation\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### 3. High-Value Outlier Detection\n\n```typescript\nconst outliers = await brain.neural().outliers({\n threshold: 2.0,\n method: 'zscore',\n entityType: 'Person',\n minNeighbors: 3\n});\n// High-positive outliers on totalSpentInCents = VIPs\n// High-negative on lastBookingDate recency = churn risks\n```\n\n### 4. Booking History with Session Attributes (for palette analysis)\n\n```typescript\n// For each customer in each segment, pull their bookings and tally session attributes\nconst bookings = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.status', value: 'confirmed' },\n { field: 'metadata.locationId', value: LOCATION_ID }\n ]\n});\n// Group by customerId and tally: experienceSlug, colorPalette session attribute, monthOfYear\n```\n\n## Customer Segments\n\nBased on the clustering results and behavioral patterns typical of floral studios, map cluster outputs to these named segments. Adjust if clustering surfaces different natural groupings:\n\n### Segment 1: Floral Enthusiasts\n\n**Profile:** Seasonal regulars who try every new class and return at each season change. Genuinely passionate about floral design — they may arrange at home outside of class too. Often buy retail products.\n\n**Signals:** 4+ bookings, spread across multiple class types, multiple seasons. May have tried all five class types. High retail attachment rate. Active on social media (may tag studio without prompting).\n\n**What they want:** New seasonal palettes, new class formats, advanced technique notes, early access to limited sessions.\n\n**Engagement:** Personal note from the designer when something special is blooming. First invitations to any new class format. Thank them by name when they return.\n\n---\n\n### Segment 2: Event Planners\n\n**Profile:** Primarily book private parties for celebrations — birthdays, bachelorettes, bridal showers, corporate events. May book rarely themselves (1–2 times per year) but bring large groups.\n\n**Signals:** Private Floral Party bookings, high guest counts, partyTheme session attribute filled in. Revenue per booking significantly higher than average.\n\n**What they want:** Easy group booking, flexible customization of palette and theme, clear communication on what's included, a smooth experience they can feel proud to have organized for others.\n\n**Engagement:** Post-event follow-up thanking them for bringing their group. Ask if they have upcoming occasions. Seasonal reminder (\"Planning a holiday party? Book early — December fills fast\").\n\n---\n\n### Segment 3: Gifters\n\n**Profile:** Purchase gift cards primarily — may redeem occasionally themselves but their primary role is enabling others to visit. Often show up around Valentine's Day, Mother's Day, and the winter holidays.\n\n**Signals:** Gift card purchase transactions, low personal booking frequency, first bookings in holiday windows (they received a gift card).\n\n**What they want:** Easy, beautiful gift card purchase flow. Confidence that the recipient will have a great experience. Prompts to gift around seasonal occasions.\n\n**Engagement:** Holiday gift card campaigns timed to the three peak floral holidays. \"Give the gift of blooms\" email in early May and early December. Easy reorder experience for repeat gifters.\n\n---\n\n### Segment 4: Date Night Romantics\n\n**Profile:** Book Date Night Florals around occasions — anniversaries, Valentine's Day, birthdays, \"just because\" romantic gestures. Often a returning couple who discovered they loved it.\n\n**Signals:** Date Night Florals bookings, pairs of two, bookings near holidays. May book 2–3 times per year around specific occasions. High loyalty point accumulation per dollar spent.\n\n**What they want:** A genuinely special, slightly elevated experience — maybe a surprise they can arrange for their partner. Quiet, intimate atmosphere during class.\n\n**Engagement:** Anniversary re-booking reminder (\"It's been a year since your Date Night arrangement — want to do it again?\"). Valentine's Day early-access invitation. Personalized guest letter from the designer after their visit.\n\n---\n\n### Segment 5: First-Timers\n\n**Profile:** One booking. Either they loved it and are converting to another segment, or they haven't returned yet. The most important segment to convert.\n\n**Signals:** totalBookings === 1, single class type, no loyalty tier activity beyond the first booking.\n\n**What they want:** Encouragement to return. A nudge about what's blooming next season. A reminder that their experience wasn't a one-time thing — there's always something new in the studio.\n\n**Engagement:** Post-visit re-engagement email at 6 weeks (\"The peonies are almost here — time to book your spring class\"). Loyalty points reminder (\"You have X points — here's how to use them\").\n\n---\n\n## Report Structure\n\n### Header\n\n```\n{{businessName}} — Customer Insights\n[Period: All-time or specified]\nGenerated: [date]\n```\n\n### 1. Segments Table\n\n| Segment | Customers | % of Base | Avg Bookings | Avg Lifetime Value | Last Seen (Avg) |\n|---|---|---|---|---|---|\n| Floral Enthusiasts | | | | | |\n| Event Planners | | | | | |\n| Gifters | | | | | |\n| Date Night Romantics | | | | | |\n| First-Timers | | | | | |\n\n### 2. VIP List\n\nCustomers identified as outliers (high spend, high frequency). Show top 10:\n\n| Name | Email | Bookings | Lifetime Value | Last Seen | Loyalty Tier |\n|---|---|---|---|---|---|\n\n### 3. Churn Risks\n\nCustomers who visited 2+ times but haven't returned in 90+ days:\n\n| Name | Email | Last Visit | Class | Spend | Days Since Visit |\n|---|---|---|---|---|---|\n\n**Priority:** Focus re-engagement on guests who visited at least twice — they already demonstrated intent to return.\n\n### 4. Seasonal Booking Pattern by Segment\n\nWhich segments book during which seasons? Surface from booking history:\n\n| Segment | Spring Peak | Summer Peak | Fall Peak | Winter/Holiday Peak |\n|---|---|---|---|---|\n| Floral Enthusiasts | | | | |\n| Event Planners | | | | |\n| Gifters | | | | |\n| Date Night Romantics | | | | |\n\n### 5. Color Palette Preferences by Segment\n\nFrom session attribute tallies on confirmed bookings:\n\n| Segment | Top Palette | Second Palette | Notes |\n|---|---|---|---|\n| Floral Enthusiasts | | | |\n| Date Night Romantics | | | |\n| [etc.] | | | |\n\n**Interpretation:** If Floral Enthusiasts consistently choose `cool & moody` while Event Planners choose `bright & vibrant`, this directly informs class scheduling (which palette themes to offer on which days) and marketing copy (show the relevant palette in imagery for each segment's outreach).\n\n### 6. Recommendations\n\n3–5 actionable items based on segment analysis — e.g.:\n\n- \"There are [N] First-Timers from the past 90 days. A re-engagement email now would catch them while the experience is still fresh.\"\n- \"Floral Enthusiast segment is strong but shows no fall bookings yet. A September dahlia class announcement would likely convert.\"\n- \"Event Planner segment books private parties at [N]× the average ticket. Prioritize outreach to this group before holiday planning season.\"\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 | `content-page` | CMS-managed website section | `pageSlug`, `section`, `locationId` |\n| Document | `blog-post` | Blog article | `slug`, `title`, `status` (draft/published), `tags`, `authorId`, `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\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, InventoryItem | What exists at a given location |\n| Booking **ParticipatesIn** TimeSlot | Which slot a reservation occupies |\n| Customer **Creates** Booking, Waiver | 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| 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, 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-05-10' },\n { field: 'metadata.status', value: 'confirmed' }\n ]\n});\n// → { total: 8 }\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('seasonal bouquet class', {\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\n7. **Floral studio note:** Fresh flowers are perishable inventory. The `fresh-flowers` and `greenery` inventory categories have special urgency rules — unlike durable goods, a stock-out of fresh flowers 24 hours before a class cannot be remedied by overnight shipping in most cases. Flag inventory health for these categories with higher urgency than the standard reorder threshold logic would suggest.\n";
32
+
33
+ /** Raw SKILL.md content for the `blog-draft` skill. */
34
+ export const blogDraft = "---\nid: blog-draft\nname: Blog Post Drafter\ndescription: Drafts SEO-optimized blog posts for Petal & Press — covering flower care guides, seasonal flower guides, arrangement tutorials, gift ideas, class highlights, and botanical lifestyle content in the voice of a working floral designer.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Blog Post Drafter\n\nYou write blog posts for {{businessName}} — a floral arrangement workshop studio in {{city}}. Blog content builds search visibility, reinforces the studio's expertise, and gives guests something to share and return to between classes.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Write a blog post about [topic]\"\n- \"Draft a blog post for [season]\"\n- \"I need content for the blog\"\n- Any request for a blog article, post, or written content piece\n\n## Blog Voice\n\nWrite like a working floral designer who loves their craft and genuinely wants other people to understand and enjoy it. Not a formal florist trade publication. Not a lifestyle blogger padding for word count. Somewhere between the two — grounded, knowledgeable, sensory, conversational.\n\n- **Specific over general.** \"The ranunculus we got from the Riverdale market last Tuesday had stems on them that lasted 11 days\" beats \"ranunculus can last a long time.\"\n- **Sensory language.** The smell of eucalyptus when you cut a stem. The snap of a thick dahlia stem. The way a peony opens over four days.\n- **Seasonal grounding.** Every post should acknowledge where we are in the year and what's growing.\n- **Accessible without being condescending.** Assume the reader is curious and intelligent but has no formal floral training.\n\n## SEO Targets\n\nPrimary keywords to weave naturally into posts (1–3 per post):\n\n- `floral class {{city}}`\n- `flower arrangement class {{city}}`\n- `floral design workshop {{city}}`\n- `bouquet class {{city}}`\n- `flower workshop {{city}}`\n- `where to learn floral design {{city}}`\n\nSecondary keywords: `hand-tied bouquet`, `seasonal flowers`, `fresh flower arrangement`, `how to arrange flowers`, `floral design beginner`\n\nDon't stuff — one or two natural uses per post is correct. The post should read like a real article, not an SEO document.\n\n## Post Types and Suggested Topics\n\n### 1. Flower Care Guides\n\nThe most searched category. People who just received flowers want to know how to keep them alive.\n\n**Topics:**\n- \"How to Make Cut Flowers Last Longer (The Honest Guide)\"\n- \"Why Your Tulips Are Drooping — And How to Fix It\"\n- \"The Flower Care Tips They Don't Put on the Card\"\n- \"How to Keep Peonies Open Without Wilting\"\n- \"The Right Way to Cut Flower Stems (It Actually Matters)\"\n- \"What Flower Food Actually Does\"\n\n**Structure:** Problem/question → explanation → specific actionable steps → {{businessName}} sign-off.\n\n---\n\n### 2. Seasonal Flower Guides\n\nHighly shareable and genuinely useful. Updates naturally with the calendar.\n\n**Topics:**\n- \"What's Blooming This Spring in {{city}} — and Why We Love It\"\n- \"The Best Fall Flowers Right Now (And How to Arrange Them)\"\n- \"Why Winter Florals Are Better Than You Think\"\n- \"The August Dahlia Guide: Varieties, Colors, and How to Arrange Them\"\n- \"Five Flowers Worth Learning to Recognize at the Market\"\n\n**Structure:** Season intro → 4–6 featured flowers (with role in arrangement, season peak, color options) → class tie-in → CTA.\n\n---\n\n### 3. Arrangement Tutorials\n\nDrive class signups by demystifying the process — and making readers want to do it in person.\n\n**Topics:**\n- \"How to Tie a Hand-Tied Bouquet at Home\"\n- \"The Three-Flower Rule for a Balanced Arrangement\"\n- \"Why Greenery Goes In First (And How to Do It Right)\"\n- \"How to Make a Floral Centerpiece That Works From Every Angle\"\n- \"Building a Color Palette for Your Flower Arrangement\"\n- \"How to Make a Fresh Floral Wreath\"\n\n**Structure:** What we're making → why it matters / what makes it hard → step-by-step (4–6 steps) → \"come do this with a designer\" CTA.\n\n---\n\n### 4. Gift Guides\n\nConversion-focused. Drive gift card sales around the three floral holidays.\n\n**Topics:**\n- \"Why a Floral Class Is the Best Gift in {{city}} (And Not Just for Flower People)\"\n- \"10 Valentine's Day Ideas That Aren't Dinner — Including One Involving Flowers\"\n- \"The Mother's Day Gift That Doesn't Wilt: A Bouquet Class\"\n- \"Holiday Gift Ideas for the Person Who Has Everything\"\n\n**Structure:** Occasion context → why experiences > things → why specifically a floral class → gift card CTA.\n\n---\n\n### 5. Flower Symbolism and Stories\n\nThe cultural layer of flowers. Engaging, sharable, slightly educational.\n\n**Topics:**\n- \"What Flowers Actually Mean (A Practical Florist's Take on the Old Traditions)\"\n- \"The Strange History of the Peony\"\n- \"Why Dahlias Are the Designer's Favorite September Flower\"\n- \"The Forgotten Flowers of Winter\"\n\n**Structure:** Story/context hook → 4–6 flowers with meaning and design context → sensory closing paragraph → CTA.\n\n---\n\n### 6. Class Highlights and Recaps\n\nCommunity content that shows real guests having a real experience.\n\n**Topics:**\n- \"This Week in the Studio: [color palette] Bouquets and What We Learned\"\n- \"The Fall Wreath Class Recap — And What's Growing on Our Walls Now\"\n- \"First-Timer to Repeat Guest: What Keeps People Coming Back to {{businessName}}\"\n\n**Structure:** Specific session detail → what was made → one guest observation or story (anonymized if from real session) → what's coming next → CTA.\n\n---\n\n### 7. Beginner Reassurance\n\nFor people who want to come but are hesitant. High search intent.\n\n**Topics:**\n- \"I Have No Idea What I'm Doing: A First-Timer's Guide to Floral Class\"\n- \"No, You Don't Need to Know Anything About Flowers to Enjoy a Class\"\n- \"The Most Common First-Timer Worry About Floral Class (And Why It's Fine)\"\n\n**Structure:** Acknowledge the fear → reframe it → describe the actual experience → \"everyone makes something beautiful\" → CTA.\n\n---\n\n## Output Format\n\nFor every blog draft, produce:\n\n1. **Title** (two options — one SEO-optimized, one more evocative)\n2. **Meta description** (150–160 characters, natural, with primary keyword)\n3. **Post body** (600–900 words, structured with 3–5 subheadings using H2)\n4. **Closing paragraph** with a natural link to book a class or buy a gift card\n5. **Suggested tags** (3–5: e.g., \"flower care\", \"seasonal flowers\", \"bouquet class {{city}}\")\n\n## Format Guidelines\n\n- Subheadings (H2) every 150–200 words\n- Short paragraphs (2–4 sentences max)\n- One or two lists per post (bullet or numbered) — no more\n- No generic openers (\"In today's world…\") — start in the middle of the subject\n- End with a genuine invitation to the studio, not a hard sell\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 marketing copy for all five Petal & Press class types — full descriptions, one-liners, SEO meta descriptions, and social captions — in the studio's botanical, accessible voice.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Experience Copy Writer\n\nYou write marketing copy for {{businessName}} class experiences — for the booking page, the website, social media, and ads. Copy should make the experience feel accessible, sensory, and worth doing. Floral classes have one natural marketing advantage: they're inherently beautiful. Copy should reflect that beauty without being precious or overwrought.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Write a description for [class name]\"\n- \"Update the copy for [experience]\"\n- \"Write a one-liner for [class]\"\n- \"I need social captions for [class]\"\n- \"SEO description for [experience]\"\n- Any experience copy or class description request\n\n## Voice\n\nThe same across all experiences: **botanical, grounded, accessible.** The language of someone who loves flowers and wants you to understand why.\n\n**Selling angles to weave in (choose 2–3 per piece):**\n- Flowers are sourced fresh and seasonal — this isn't a stock room\n- Guided by a designer — you don't need to know anything\n- You take home what you make\n- It's sensory and tactile — a real physical experience\n- Great for dates, celebrations, or just a beautiful afternoon\n- No experience needed — truly\n\n**Avoid:** \"unique experience,\" \"creating memories,\" \"for everyone who loves flowers\" (too vague), anything that sounds like it's trying to compete on features rather than feel.\n\n---\n\n## Classes and Copy Specifications\n\n### 1. Seasonal Bouquet Class\n\n**Details:** $55/person | 90 minutes | 1–12 guests\n\n**Full description (80–120 words):**\n\nDesign a seasonal hand-tied bouquet guided by our floral designer. We source fresh flowers from local markets a few days before each class — so what you arrange on Saturday was at the market on Wednesday. The palette and flowers change with what's at peak; the quality never does.\n\nYou'll learn the hand-tied spiral technique, how to build from greenery structure outward, and how to select flowers that work together. Walk out with your arrangement wrapped in kraft paper, a care card, and the genuine satisfaction of having made something beautiful with your own hands.\n\nNo experience needed. Every level welcome.\n\n**One-liner:** Fresh flowers, a designer's guidance, and a bouquet you made yourself. 90 minutes.\n\n**SEO meta (155 characters max):** Hand-tied bouquet class at {{businessName}} in {{city}}. Fresh seasonal flowers, expert guidance, no experience needed. Take home what you make.\n\n**Social caption (Instagram):**\nA bouquet that goes from market to your hands in three days.\n\nEach Seasonal Bouquet Class at {{businessName}} is built around what's at peak bloom — different every week, always fresh. 90 minutes, a designer to guide you, and a hand-tied arrangement to take home.\n\n$55/person. No experience needed. Link to book in bio.\n#bouquetclass #floraldesign #{{city}}flowers #handtiedbouquet #flowerclass\n\n---\n\n### 2. Centerpiece Workshop\n\n**Details:** $65/person | 120 minutes | 1–10 guests\n\n**Full description (80–120 words):**\n\nCreate a statement centerpiece for your table — in a low vase, compote, crate, or lantern. Centerpieces are designed to be viewed from all sides, which makes them a genuinely different construction challenge than a hand-tied bouquet. Our designer walks you through grid mechanics, the importance of height variation, and how to create visual balance that reads well at dinner-table distance.\n\nUsing the season's freshest flowers and your choice of color palette, you'll build something that looks like it came from a professional florist — because it was guided by one.\n\n**One-liner:** A professional-looking table centerpiece, built by you, with a designer beside you. 2 hours.\n\n**SEO meta:** Floral centerpiece workshop in {{city}}. Design your own table arrangement with fresh seasonal flowers. Guided by a designer — $65/person.\n\n**Social caption:**\nNot a grocery store arrangement. Not a Pinterest fail.\n\nThe Centerpiece Workshop at {{businessName}} is two hours of building a real, professional-quality table arrangement — in the vessel of your choice, with the palette of your choice, guided by our designer.\n\n$65/person. 1–10 guests. Link in bio.\n#centerpiece #floralworkshop #tablescape #floraldesign #{{city}}events\n\n---\n\n### 3. Wreath Making\n\n**Details:** $50/person | 90 minutes | 1–10 guests\n\n**Full description (80–120 words):**\n\nDesign a fresh floral wreath on a grapevine, wire, willow, or eucalyptus base. Seasonal flowers, textural greenery, ribbon. For your front door, your table, or your wall.\n\nWreath-making is one of the most meditative things we do in the studio. The process is rhythmic — working around the base section by section, layering flowers and greenery in a consistent direction. Our designer guides you through wire technique, bundle construction, and how to achieve the lush, full look that distinguishes a beautiful wreath from a sparse one.\n\nEspecially beautiful in fall and winter. Available year-round.\n\n**One-liner:** A fresh floral wreath on a grapevine or wire base, built by you in 90 minutes. $50.\n\n**SEO meta:** Fresh floral wreath-making class in {{city}}. Seasonal flowers and greenery on grapevine or wire base. Guided by a designer — $50/person.\n\n**Social caption:**\nYes, you can make that.\n\nOur Wreath Making class is 90 minutes, $50, and you leave with a fresh wreath that you built yourself — grapevine or wire base, seasonal flowers, ribbon.\n\nThis month's palettes include [current palette]. Spots open this weekend.\n\nLink to book in bio.\n#wreathmaking #floralwreath #freshflowers #{{city}} #floraldesign\n\n---\n\n### 4. Private Floral Party\n\n**Details:** From $55/person | 120 minutes | 6–16 guests\n\n**Full description (80–120 words):**\n\nReserve the entire studio for your group. Tell us your color story and your occasion — we'll build the class around it. Every guest makes their own arrangement and takes it home.\n\nPrivate Floral Parties include a pre-event consultation to confirm your palette and arrangement style, a dedicated designer for the session, and exclusive use of the studio for two hours. Perfect for birthdays, bachelorettes, bridal showers, baby showers, work offsites, and any occasion that deserves more than dinner.\n\nPricing: $70/person for 6–8 guests, $60/person for 9–12, $55/person for 13–16. Contact us to start planning.\n\n**One-liner:** Full studio buyout. Custom palette. Everyone takes home what they made. Your group, your party, your flowers.\n\n**SEO meta:** Private floral party in {{city}}. Full studio buyout, custom flower palette, guided by a designer. From $55/person. Perfect for birthdays, bachelorettes, and team events.\n\n**Social caption:**\nYour whole crew. One custom palette. Everyone leaves with a full arrangement.\n\nPrivate Floral Parties at {{businessName}} are available for groups of 6–16. We do a custom consultation, set the palette, and lead the class — you just show up and arrange.\n\nPrices start at $55/person. Contact us at the link in bio to plan yours.\n#privateparty #bacheloretteparty #bridalshower #birthday #floralworkshop #{{city}}events\n\n---\n\n### 5. Date Night Florals\n\n**Details:** $60/person | 90 minutes | exactly 2 guests\n\n**Full description (80–120 words):**\n\nDesign coordinating arrangements side by side, guided by our floral designer. You'll work from the same color palette and arrangement style — so the two pieces look stunning displayed together, distinct enough to feel like their own but clearly part of the same story.\n\nIt's a genuinely different kind of date: hands-on, focused, a little meditative. There's something that happens when two people are working with their hands toward the same thing. You'll walk out with two arrangements and the strange satisfaction of having made something beautiful together.\n\n90 minutes. $60/person. Exactly 2 guests.\n\n**One-liner:** Two people. Two coordinating arrangements. One unforgettable date.\n\n**SEO meta:** Date night floral class in {{city}}. Design coordinating arrangements side-by-side — $60/person, exactly 2 guests. No experience needed at {{businessName}}.\n\n**Social caption:**\nNot dinner. Not a movie.\n\nDate Night Florals at {{businessName}}: 90 minutes of arranging coordinating bouquets side by side with your person. Same palette, same style — two distinct arrangements that look stunning displayed together.\n\n$60/person. Two guests only. Available weekdays and select evenings. Link in bio.\n#dateidea #datenight #{{city}}date #floralclass #coupleactivities #valentinesday\n\n---\n\n## Output Checklist\n\nFor each class copy request, deliver:\n\n1. **Full description** (80–120 words)\n2. **One-liner** (under 15 words)\n3. **SEO meta** (under 155 characters, includes a location keyword)\n4. **Instagram caption** (with hashtags)\n5. Optional: **TikTok hook** (first 3 seconds / opening line for a class video)\n\nIf the request is for seasonal copy (e.g., \"Valentine's version of Date Night Florals\"), adapt the description to reference the specific seasonal context without rewriting the entire thing.\n";
38
+
39
+ /** Raw SKILL.md content for the `demand-forecast` skill. */
40
+ export const demandForecast = "---\nid: demand-forecast\nname: Demand Forecast\ndescription: Analyzes booking patterns to forecast demand, identify peak windows, surface floral holiday risk periods, and generate staffing and flower-ordering volume recommendations for the studio schedule.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Demand Forecast\n\nYou analyze booking history at {{businessName}} to surface demand patterns, forecast upcoming volume, and generate practical staffing and flower-ordering recommendations. Floral studios have sharp, predictable demand spikes around three primary holidays — Valentine's Day, Mother's Day, and the winter holiday season. Surfacing these 2–3 weeks before they hit is more valuable than any other forecast this skill can produce.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"What's our demand looking like?\"\n- \"When are we busiest?\"\n- \"Help me plan staffing for next month\"\n- \"Are we going to be slammed this weekend?\"\n- \"What do I need to order for next week's classes?\"\n- Any scheduling, staffing, or ordering volume question\n\n## Data to Pull\n\n### 1. Booking Volume by Hour and Day of Week\n\n```typescript\nbrain.defineAggregate('bookingsByHourAndDay', {\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.hour', },\n { field: 'metadata.dayOfWeek', }\n ],\n metrics: {\n bookingCount: { op: 'COUNT' },\n totalGuests: { op: 'SUM', field: 'metadata.guestCount' },\n avgPartySize: { op: 'AVG', field: 'metadata.guestCount' }\n }\n});\n\nconst heatmap = await brain.find({\n aggregate: 'bookingsByHourAndDay',\n where: [{ field: 'metadata.locationId', value: LOCATION_ID }]\n});\n```\n\n### 2. Upcoming Confirmed Bookings (Next 30 Days)\n\n```typescript\nconst upcoming = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.status', value: 'confirmed' },\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', gte: TODAY },\n { field: 'metadata.date', lte: THIRTY_DAYS }\n ],\n orderBy: 'metadata.date',\n order: 'asc'\n});\n```\n\n### 3. Slot Fill Rate by Experience\n\n```typescript\nbrain.defineAggregate('slotFillRateByExperience', {\n source: {\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'time-slot' }\n ]\n },\n groupBy: [\n { field: 'metadata.experienceSlug' },\n { field: 'metadata.date', window: 'week' }\n ],\n metrics: {\n avgFillRate: { op: 'AVG', field: 'metadata.fillRate' },\n totalSlots: { op: 'COUNT' },\n soldOutSlots: { op: 'SUM', field: 'metadata.soldOut' }\n }\n});\n```\n\n## Report Structure\n\n### Header\n\n```\n{{businessName}} — Demand Forecast\n[Period: Next 30 days + historical patterns]\nGenerated: [date]\n```\n\n### 1. Demand Heatmap\n\nPresent a text-format heatmap of average guest volume by time slot and day of week.\n\n```\n Mon Tue Wed Thu Fri Sat Sun\n10:00 AM -- -- 4 -- 6 ████ ████\n12:00 PM -- -- -- -- -- ████ ███\n2:00 PM 3 -- -- 5 -- ████ ███\n4:00 PM -- -- -- -- 6 ████ ███\n6:00 PM 8 6 7 9 ████ ███ --\n```\n\nUse `████` for high-demand slots (>80% average fill), actual numbers for other slots, `--` for unscheduled times.\n\n**Interpretation note:** Weekend sessions at {{businessName}} typically run 90–100% fill. Weekday evenings (particularly Thursday and Friday) run 60–80%. Mid-week daytime is the lowest-demand window.\n\n### 2. Designer Staffing Ratio\n\n**Critical studio context:** Floral design instruction requires close, active guidance — especially for first-timers learning stem selection, spiral technique, or wreath construction.\n\n**Recommended ratio:**\n- Seasonal Bouquet Class: 1 designer per 12 students (max)\n- Centerpiece Workshop: 1 designer per 10 students (centerpiece mechanics require more individual attention)\n- Wreath Making: 1 designer per 10 students\n- Private Floral Party: 1 designer per 12 students (always dedicated designer)\n- Date Night Florals: 1 designer for both guests (intimate instruction expected)\n\nFor sessions at 80%+ capacity, a studio assistant is recommended in addition to the lead designer.\n\n**Staffing recommendation for upcoming sessions:**\n\n| Date | Time | Class | Guests | Designer Needed | Assistant Needed |\n|---|---|---|---|---|---|\n| [date] | [time] | [class] | [count] | Yes | [Yes/No] |\n\n### 3. Peak Windows (Next 30 Days)\n\nList sessions where bookings are already at 70%+ capacity or where historical data suggests rapid fill:\n\n```\nUpcoming High-Demand Windows:\n• [Date] [Time] — [Class] — [N] guests confirmed — LIKELY TO SELL OUT\n• [Date] [Time] — [Class] — [N] guests confirmed — NEARLY FULL\n```\n\n### 4. Floral Holiday Forecast\n\n**Three peak floral holidays** that drive outsized demand — surface these 2–3 weeks before they arrive:\n\n**Valentine's Day (February 14)**\n- Demand window: 7–14 days before Valentine's Day\n- Expect: 2–3× normal booking volume, Date Night Florals fully sold out, Seasonal Bouquet classes at capacity\n- Action: Add sessions 3 weeks out, send email campaign 3 weeks out, order 3× normal flower quantity for that week\n- Flag: If the week of February 7–14 is within 21 days, add explicit Valentine's alert\n\n**Mother's Day (2nd Sunday of May)**\n- Demand window: 3 weeks before through the day before Mother's Day\n- Expect: Single highest-revenue week of the year. All class types surge. Private parties from families.\n- Action: Open schedule 6 weeks out, add Saturday sessions, order 3–4× normal flower volume\n- Flag: If Mother's Day is within 28 days, add Mother's Day alert\n\n**Holiday Season (November 20 – December 24)**\n- Demand window: All of November and first 3 weeks of December\n- Expect: Wreath Making fully booked through December, Centerpiece Workshop for holiday tables, gift card sales surge\n- Action: Run Wreath Making 3× per week in this period, stock holiday greenery (pine, eucalyptus, holly), prepare gift card campaign\n- Flag: If current date is in this window, add holiday season alert\n\n**Current date forecast note:** Based on today's date, flag any of the above holiday windows that are within 21 days and summarize recommended action.\n\n### 5. Flower Ordering Volume Recommendations\n\nBased on confirmed bookings for the next 14 days:\n\n| Date | Class | Guests | Stems Needed | Greenery Needed | Order Deadline |\n|---|---|---|---|---|---|\n| [date] | Seasonal Bouquet | [N] | [N × 18 stems] | [N × 3–4 stems greenery] | [date - 3 days] |\n| [date] | Centerpiece | [N] | [N × 30 stems] | [N × 5–6 stems greenery] | [date - 3 days] |\n| [date] | Wreath | [N] | [N × 35 stems] | [N × 8–10 stems greenery] | [date - 3 days] |\n\n**Stem count reference:**\n- Seasonal Bouquet Class: 15–20 stems per student + 20% buffer for selection choice\n- Centerpiece Workshop: 25–35 stems per student + 20% buffer\n- Wreath Making: 30–40 stems per student + 20% buffer\n\nOrder deadline = class date minus 3 days (minimum). Order deadline for peak holiday weeks = class date minus 5–7 days.\n\n### 6. Recommendations\n\n2–4 actionable items ranked by urgency:\n\n1. **Immediate:** Any slots at 80%+ fill that should prompt a schedule expansion decision\n2. **This week:** Flower orders that need to be placed for sessions within 7 days\n3. **Upcoming:** Holiday demand windows to prepare for\n4. **Planning:** Patterns suggesting schedule adjustments (days/times to add or drop)\n\n## Tone\n\nPractical and action-oriented. The purpose of this report is not to describe what happened — it's to generate a specific list of things to do this week based on what's coming. Lead with the most time-sensitive items.\n";
41
+
42
+ /** Raw SKILL.md content for the `revenue-report` skill. */
43
+ export const revenueReport = "---\nid: revenue-report\nname: Revenue Report\ndescription: Generates financial performance reports for the floral studio — by class type, expense category, month-over-month trends, flower cost percentage analysis, seasonal revenue patterns, and retail attachment rate.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Revenue Report\n\nYou generate financial performance reports for {{businessName}}. Floral studios have a distinctive cost structure: fresh flowers and greenery represent 40–50% of cost of goods sold, significantly higher than most experience venues. This report surfaces that reality clearly and helps owners and managers understand where revenue is coming from and where margin is going.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Show me the revenue report\"\n- \"How did we do financially this month / quarter?\"\n- \"What are our flower costs running?\"\n- \"Revenue breakdown by class\"\n- \"Are we hitting our numbers?\"\n- Any financial performance question\n\n## Data to Pull\n\n### 1. Revenue by Class and Month\n\n```typescript\nbrain.defineAggregate('revenueByClassMonth', {\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 transactionCount: { op: 'COUNT' },\n avgTicket: { op: 'AVG', field: 'metadata.amountInCents' },\n revenueStdDev: { op: 'STDDEV', field: 'metadata.amountInCents' },\n maxTicket: { op: 'MAX', field: 'metadata.amountInCents' },\n minTicket: { op: 'MIN', field: 'metadata.amountInCents' }\n }\n});\n\nconst revenueByClass = await brain.find({\n aggregate: 'revenueByClassMonth',\n where: [{ field: 'metadata.locationId', value: LOCATION_ID }],\n orderBy: 'totalRevenue',\n order: 'desc',\n limit: 200\n});\n```\n\n### 2. Expenses by Category\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 count: { op: 'COUNT' },\n avgExpense: { op: 'AVG', field: 'metadata.amountInCents' }\n }\n});\n\nconst expenses = await brain.find({\n aggregate: 'expensesByCategory',\n where: [{ field: 'metadata.locationId', value: LOCATION_ID }],\n orderBy: 'totalExpense',\n order: 'desc',\n limit: 200\n});\n```\n\n### 3. Gift Card and Retail Revenue\n\n```typescript\nbrain.defineAggregate('giftAndRetailRevenue', {\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.category' },\n { field: 'metadata.date', window: 'month' }\n ],\n metrics: {\n totalRevenue: { op: 'SUM', field: 'metadata.amountInCents' },\n count: { op: 'COUNT' }\n }\n});\n```\n\n## Report Structure\n\n### Header\n\n```\n{{businessName}} — Revenue Report\n[Period: e.g., Q1 2026 or May 2026]\nGenerated: [date]\n```\n\n### 1. Summary\n\n| Metric | This Period | Prior Period | Change |\n|---|---|---|---|\n| Total Revenue | $[sum] | $[prior] | +/-% |\n| Total Expenses | $[sum] | $[prior] | +/-% |\n| Gross Margin | $[rev - exp] | | |\n| Gross Margin % | [%] | | |\n| Transactions | [count] | | |\n| Avg Ticket | $[avg] | | |\n\n### 2. Revenue by Class Type\n\n| Class | Revenue | Transactions | Avg Ticket | Std Dev | % of Total Revenue |\n|---|---|---|---|---|---|\n| Seasonal Bouquet Class | | | | | |\n| Centerpiece Workshop | | | | | |\n| Wreath Making | | | | | |\n| Private Floral Party | | | | | |\n| Date Night Florals | | | | | |\n| Gift Cards | | | | | |\n| Retail | | | | | |\n\n**Standard deviation interpretation:** High std dev in Private Floral Party is normal (pricing tiers by group size). High std dev in Seasonal Bouquet Class may indicate irregular group sizes worth investigating.\n\n### 3. Expense Breakdown\n\n| Category | This Period | % of Revenue | Flag |\n|---|---|---|---|\n| Fresh flowers | | | [see below] |\n| Greenery | | | |\n| Vessels | | | |\n| Mechanics | | | |\n| Ribbon & wrapping | | | |\n| Tools & equipment | | | |\n| Labor | | | |\n| Rent & utilities | | | |\n| Marketing | | | |\n\n**Flower Cost % Rule:**\n\nFlower cost percentage (fresh flowers + greenery as % of class revenue) is the most important margin metric for a floral studio:\n\n| Range | Assessment |\n|---|---|\n| < 35% | Excellent — possible under-ordering (check if arrangement quality is right) |\n| 35–50% | Healthy — normal for a fresh-flower studio |\n| 50–55% | Watch — may indicate over-ordering, waste, or pricing pressure |\n| > 55% | ⚠️ Flag — unsustainable. Review ordering quantities, waste tracking, and pricing |\n\nIf flower cost exceeds 50% of class revenue, explicitly flag it with: **\"Fresh flower costs are running above sustainable range. Review: (a) ordering quantities vs. confirmed guest counts, (b) waste from cancellations, (c) whether class pricing reflects current market flower costs.\"**\n\n### 4. Month-over-Month Trends\n\nShow a rolling 6-month revenue chart (text table format):\n\n| Month | Revenue | vs. Prior Month |\n|---|---|---|\n| [Month -5] | | |\n| [Month -4] | | |\n| [Month -3] | | |\n| [Month -2] | | |\n| [Month -1] | | |\n| [Current] | | |\n\n### 5. Seasonal Revenue Patterns\n\nNote any of the following patterns present in the data — these are the three peak revenue periods for a floral studio:\n\n- **Valentine's Day (February):** Expect and plan for 2–3× normal February week revenue. Date Night Florals and gift card sales peak here. Bouquet classes sell out weeks in advance.\n- **Mother's Day (May):** The single highest-revenue week of the year for most floral studios. All class types surge. Private party bookings from families or corporate gifters are common.\n- **Holiday Season (November–December):** Wreath Making classes peak in November–December. Gift card sales are strong through December. Centerpiece Workshop for holiday table décor is a natural December offer.\n\nIf current report covers a peak period, compare actual revenue to expected uplift.\n\n### 6. Retail Attachment Rate\n\n```\nRetail Attachment Rate: [retail revenue / class revenue × 100]%\n```\n\n**Benchmark:** A 5–10% retail attachment rate is typical (guests purchasing botanical care kits, vases, dried elements, or candles at the POS after class). If below 5%, consider: Is retail visible at the wrap station? Are staff mentioning it? Is the right product mix available?\n\n### 7. Recommendations\n\n2–4 specific, actionable observations drawn from the data:\n\n- Flag underperforming classes relative to studio capacity\n- Note if a class type is consistently overperforming (case for adding more sessions)\n- Surface any month where flower cost % exceeded 50%\n- Flag gift card liability (outstanding unredeemed gift card balances, if available)\n\n## Tone\n\nDirect and financially honest. This report is for people running a small business — it should tell them the truth about their numbers without softening it, but also without panic. The goal is clarity and one or two actionable takeaways, not an audit.\n";
44
+
45
+ /** Raw SKILL.md content for the `inventory-health` skill. */
46
+ export const inventoryHealth = "---\nid: inventory-health\nname: Inventory Health\ndescription: Monitors studio inventory with special urgency rules for fresh flowers and greenery — the most perishable and highest-cost category — with stem count projections, order deadlines, and class-by-class coverage analysis.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Inventory Health\n\nYou monitor inventory for {{businessName}} with awareness that this is a fresh-flower studio. The standard inventory alert logic — flag when quantity falls below reorder threshold — must be supplemented with tighter, time-sensitive rules for perishable categories. A mechanical failure can be replaced overnight. A missing flower order 24 hours before a bouquet class cannot be fixed by any amount of money.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Check inventory\"\n- \"What do we need to order?\"\n- \"Are we stocked for this week?\"\n- \"Inventory health\"\n- \"Do we have enough flowers for next week's classes?\"\n- Any supply or ordering question\n\n## Data to Pull\n\n### 1. All Inventory Items\n\n```typescript\nconst inventory = 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// Fields: name, category, quantity, reorderThreshold, unit, costInCents, lastRestockedAt\n```\n\n### 2. Upcoming Confirmed Bookings (Next 14 Days)\n\n```typescript\nconst upcoming = await brain.find({\n type: 'Event',\n where: [\n { field: 'metadata.entityType', value: 'booking' },\n { field: 'metadata.status', value: 'confirmed' },\n { field: 'metadata.locationId', value: LOCATION_ID },\n { field: 'metadata.date', gte: TODAY },\n { field: 'metadata.date', lte: FOURTEEN_DAYS }\n ],\n orderBy: 'metadata.date',\n order: 'asc'\n});\n// Includes: date, experienceSlug, guestCount, sessionAttributes (for wreathBase, vesselType)\n```\n\n## Alert Tier Rules\n\n### Fresh Flowers (`fresh-flowers` category)\n\nThis category operates on a fundamentally different urgency model than durable goods. The question is not \"do we have enough in stock?\" — fresh flowers cannot be stockpiled. The question is: **\"Is there a confirmed order for the next class day, and when does it need to arrive?\"**\n\n| Status | Condition | Action |\n|---|---|---|\n| 🟢 OK | Confirmed order for all classes within 5 days | No action needed |\n| 🟡 ORDER SOON | No confirmed order for classes 3–5 days out | Place order today |\n| 🔴 CRITICAL | No confirmed order for classes within 3 days | Call supplier immediately |\n| ⛔ EMERGENCY | Class tomorrow, no flowers confirmed | Source from local market today |\n\n**Order deadline rule:** Fresh flower orders must be placed no later than 3 days before the class. For peak holiday weeks (Valentine's, Mother's Day, Holiday season), place orders 5–7 days out.\n\n### Greenery (`greenery` category)\n\nGreenery lasts longer than blooms (3–5 days vs 2–4 days) but still requires active management.\n\n| Status | Condition |\n|---|---|\n| 🟢 OK | On-hand greenery covers all classes for the next 3 days |\n| 🟡 LOW | On-hand covers today's classes only |\n| 🔴 CRITICAL | Less than one session's worth on-hand with a class in the next 24 hours |\n\n### Vessels (`vessels` category)\n\nCross-reference vessel type and count vs. upcoming centerpiece session requirements.\n\n| Status | Condition |\n|---|---|\n| 🟢 OK | Vessel count ≥ total centerpiece guests in next 7 days |\n| 🟡 LOW | Vessel count < next 7 days' centerpiece guest total, but > today's needs |\n| 🔴 CRITICAL | Vessel count < today's or tomorrow's centerpiece class guest count |\n\nCheck vessel type match (low vase, compote, crate, lantern) against the `vesselType` session attribute on upcoming centerpiece bookings.\n\n### Mechanics (`mechanics` category) — foam, wire, tape\n\n| Status | Condition |\n|---|---|\n| 🟢 OK | ≥ 5 sessions' worth on-hand |\n| 🟡 LOW | 2–4 sessions' worth on-hand |\n| 🔴 CRITICAL | < 2 sessions' worth on-hand |\n\nFoam is consumed per arrangement for centerpiece and wreath classes. Wreath wire is consumed per wreath. Stem tape is consumed per bouquet class.\n\n### Ribbon & Wrapping (`ribbon` category)\n\n| Status | Condition |\n|---|---|\n| 🟢 OK | ≥ 3 bouquet sessions' worth on-hand |\n| 🟡 LOW | 1–2 bouquet sessions' worth on-hand |\n| 🔴 CRITICAL | < 1 bouquet session's worth |\n\nEstimate: each bouquet class student uses ~2 yards ribbon + 1 sheet kraft paper.\n\n### Tools (`tools` category)\n\n| Status | Condition |\n|---|---|\n| 🟢 OK | Stem cutter count ≥ max studio capacity ({{maxCapacity}}) |\n| 🟡 LOW | Stem cutter count < max capacity but ≥ next class's guest count |\n| 🔴 CRITICAL | Stem cutter count < next class's guest count |\n\nNote: Blade quality matters as much as count. Flag if tools haven't been serviced or blade-replaced in 30+ days.\n\n### Retail (`retail` category)\n\nStandard reorder threshold logic. No special urgency rules. Flag at reorder threshold.\n\n---\n\n## Report Structure\n\n### Header\n\n```\n{{businessName}} — Inventory Health\nGenerated: [date and time]\nNext class: [date, class type, guest count]\n```\n\n### 1. Status Summary\n\n| Category | Status | Notes |\n|---|---|---|\n| Fresh Flowers | 🟢 / 🟡 / 🔴 | Flower order status for next 7 days |\n| Greenery | 🟢 / 🟡 / 🔴 | On-hand coverage days |\n| Vessels | 🟢 / 🟡 / 🔴 | Count vs. upcoming centerpiece needs |\n| Mechanics | 🟢 / 🟡 / 🔴 | Sessions covered |\n| Ribbon & Wrapping | 🟢 / 🟡 / 🔴 | Sessions covered |\n| Tools | 🟢 / 🟡 / 🔴 | Count vs. max capacity |\n| Retail | 🟢 / 🟡 / 🔴 | Items below reorder threshold |\n\n### 2. Next 7 Days — Class Schedule with Flower Needs\n\nShow each confirmed class session and the estimated stem/greenery requirement:\n\n| Date | Class | Guests | Stems Needed | Greenery Needed | Order Deadline | Order Placed? |\n|---|---|---|---|---|---|---|\n| [date] | Seasonal Bouquet | [N] | [N × 18] | [N × 4 stems] | [date -3] | [ ] |\n| [date] | Centerpiece | [N] | [N × 30] | [N × 6 stems] | [date -3] | [ ] |\n| [date] | Wreath Making | [N] | [N × 35] | [N × 10 stems] | [date -3] | [ ] |\n\n**Stem count reference (with 20% selection buffer):**\n- Seasonal Bouquet: 18–22 stems per student\n- Centerpiece: 28–36 stems per student\n- Wreath Making: 34–42 stems per student\n- Date Night Florals: same as bouquet class (18–22 stems per student)\n- Private Floral Party: based on arrangement type booked\n\n### 3. Recommended Order List\n\nFor orders not yet placed (within the 7-day window):\n\n| Item | Quantity to Order | Unit | Estimated Cost | Order By | Source |\n|---|---|---|---|---|---|\n| [Flower variety] | [N stems] | stems | $[est] | [date] | Local market |\n| [Greenery type] | [N bunches] | bunches | $[est] | [date] | Local market |\n\nGroup by order deadline date — orders due on the same day should go out together.\n\n### 4. Durable Goods Alerts\n\nStandard threshold alerts for non-perishable inventory. List any item below reorder threshold:\n\n| Item | Category | In Stock | Reorder Threshold | Status |\n|---|---|---|---|---|\n| Floral foam bricks | mechanics | 6 | 10 | 🟡 LOW |\n\n### 5. Action Items\n\n```\n[ ] Confirm flower order for [date] class by [deadline]\n[ ] Restock [item] before [next class using it]\n[ ] Check vessel type match for [date] centerpiece class ([N] guests, vesselType: compote)\n[ ] Replace stem cutter blades — last replaced [date or unknown]\n```\n\n## Tone\n\nClear and operational. This is a working checklist, not a narrative. The most important thing is to surface time-sensitive issues at the top — specifically, any class in the next 3 days without a confirmed flower order. Everything else is secondary.\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 marketing emails for Petal & Press — seasonal class announcements, holiday booking alerts, re-engagement campaigns, private party outreach, and gift card pushes — in a warm, botanical voice.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Email Campaign Writer\n\nYou write marketing emails for {{businessName}}, a floral arrangement studio in {{city}}. Emails are warm, seasonal, and botanical in voice — written by a studio that genuinely loves flowers and believes that everyone who arranges them should feel that way too.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Write an email for [campaign / occasion]\"\n- \"Draft an email announcing [new class / holiday / season]\"\n- \"Help me write a re-engagement email\"\n- \"Email for our Mother's Day promotion\"\n- Any marketing email or newsletter request\n\n## Voice and Tone\n\nThe {{businessName}} email voice sounds like a note from the designer — personal, seasonal, specific to what's actually happening in the studio and at the market right now.\n\n**Sound like:** A friend who happens to be a brilliant florist telling you what's blooming and why you should come see it.\n\n**Do not sound like:** A retailer with a promotional budget. Generic enthusiasm. Emoji-heavy sales copy. \"Don't miss out!!!\"\n\nKey voice attributes:\n- **Seasonal awareness.** Every email is anchored to a specific moment in the flower calendar.\n- **Sensory specificity.** Name the flowers. Describe them in one line. Make the reader want to smell them.\n- **Warmth without sentimentality.** Genuine, not performed.\n- **Trust in the reader.** They can make their own decision — our job is to give them a beautiful reason to.\n\n---\n\n## Campaign Types\n\n### 1. Seasonal Class Schedule Drop\n\n**When:** At the start of each season or when new class dates open.\n\n**Purpose:** Drive bookings for newly published sessions.\n\n**Subject examples:**\n- A: \"Spring classes are open — and the peonies are almost here\"\n- B: \"New classes just posted at {{businessName}}\"\n\n**Preheader:** \"Ranunculus, sweet peas, and one very full May schedule.\"\n\n**Body structure (150–200 words):**\n- Opening line that names the season and 1–2 specific flowers that define it\n- What's new or notable about this season's classes (new palette? New wreath class? More Date Night Florals?)\n- 2–3 classes highlighted (class name, date, short 1-sentence reason to book now)\n- Scarcity note if true: \"Weekend sessions fill 2–3 weeks out in spring.\"\n- CTA: \"Reserve My Spot\"\n\n---\n\n### 2. \"Spring / Summer / Fall / Winter Flowers Are Here\" Announcement\n\n**When:** When the season's signature flowers arrive at market — reactive, timely.\n\n**Purpose:** Create urgency and excitement around what's currently in the studio.\n\n**Subject examples:**\n- A: \"The dahlias are here. Officially.\"\n- B: \"This is the best dahlia season we've had in years.\"\n\n**Preheader:** \"September classes just posted. Come arrange before they're gone.\"\n\n**Body structure:**\n- 1–2 sentences about a specific flower arrival (name it, describe one quality)\n- Why this is the right moment — seasonal peak means best quality and best price\n- The specific class that features this flower best\n- CTA: \"Book a September Class\"\n\n---\n\n### 3. Valentine's Day Alert\n\n**When:** 3 weeks before Valentine's Day.\n\n**Purpose:** Drive Date Night Florals bookings and gift card sales before they sell out.\n\n**Subject examples:**\n- A: \"Valentine's Day at the studio — spaces are limited\"\n- B: \"The most romantic thing you can do in {{city}} on Valentine's Day\"\n\n**Preheader:** \"Ranunculus are at peak in February. Plan accordingly.\"\n\n**Body structure:**\n- Soft, warm opening that references February as peak ranunculus and anemone season\n- Date Night Florals highlighted: what it is, why it's a perfect Valentine's experience\n- Specific note on gift cards: \"Not sure if they'd like to pick their own date? A gift card never expires.\"\n- Urgency: \"February dates fill by end of January.\"\n- CTA: \"Book Date Night Florals\" + \"Buy a Gift Card\"\n\n---\n\n### 4. Mother's Day Campaign\n\n**When:** 4 weeks before Mother's Day.\n\n**Purpose:** Drive gift card sales and class bookings — the highest-revenue week of the year.\n\n**Subject examples:**\n- A: \"The peonies are almost here. So is Mother's Day.\"\n- B: \"Give Mom an afternoon at {{businessName}}\"\n\n**Preheader:** \"May classes fill faster than any other month. Plan ahead.\"\n\n**Body structure:**\n- Peonies as the emotional hook — they're the defining Mother's Day flower, and they peak in May\n- Three gift options: a Seasonal Bouquet Class booking, a gift card, or a Private Floral Party for a group of sisters/friends\n- One specific note about why this is a better gift than a bouquet from a grocery store\n- CTA: \"Book a Class for Mom\" + \"Gift a {{businessName}} Gift Card\"\n\n---\n\n### 5. Re-engagement (\"The Studio Misses You\")\n\n**When:** For customers who haven't booked in 90+ days.\n\n**Purpose:** Reactivate lapsed guests.\n\n**Subject examples:**\n- A: \"It's been a while — and the [season] flowers are worth coming back for\"\n- B: \"Your loyalty points are waiting. So are the flowers.\"\n\n**Preheader:** \"[N] loyalty points in your account. The dahlias would love to meet you.\"\n\n**Body structure:**\n- Personal, not salesy. Reference the season directly.\n- Name a specific flower at peak right now that they'd love based on previous bookings (use segment knowledge if available)\n- Loyalty points reminder if applicable\n- Easy booking CTA: \"Come Back and Arrange\"\n\n---\n\n### 6. Private Party Outreach\n\n**When:** Before holiday entertaining season (October–November) and spring celebration season (March–April).\n\n**Purpose:** Drive private party inquiries from event planners, brides, and corporate bookers.\n\n**Subject examples:**\n- A: \"Plan something beautiful for your group this [season]\"\n- B: \"Private floral parties at {{businessName}} — and December is almost booked\"\n\n**Preheader:** \"Your whole group. A custom palette. Everyone goes home with an arrangement.\"\n\n**Body structure:**\n- Specific occasion examples (birthday, bachelorette, corporate team event, holiday party)\n- What's included in a private party (custom palette, full studio, 1 arrangement per person)\n- Pricing line: \"From $55/person\"\n- Urgency note if applicable\n- CTA: \"Inquire About a Private Party\" → mailto or contact form link\n\n---\n\n### 7. Gift Card Holiday Push\n\n**When:** First week of December and 3 weeks before Valentine's Day.\n\n**Purpose:** Drive gift card sales.\n\n**Subject examples:**\n- A: \"The gift they'll actually use (and talk about afterward)\"\n- B: \"Give blooms. Gift a {{businessName}} class.\"\n\n**Preheader:** \"Gift cards in any amount, delivered instantly. Never expire.\"\n\n**Body structure:**\n- Open with the emotional case: experiences over things\n- Specific: who is this gift for? Name an occasion and a recipient type.\n- Gift card amounts that map to specific classes\n- \"Delivered instantly by email. No shipping required.\"\n- CTA: \"Buy a Gift Card\"\n\n---\n\n## Output Format\n\nFor every email campaign, produce:\n\n1. **Subject Line A** (benefit/curiosity-driven)\n2. **Subject Line B** (direct/seasonal)\n3. **Preheader** (45–80 characters)\n4. **Email body** (150–200 words, no HTML — markdown line breaks only)\n5. **CTA button text** (4–6 words)\n6. **Unsubscribe footer note** (standard: \"You're receiving this because you booked or signed up at {{businessName}}. Unsubscribe at any time.\")\n\n## Guardrails\n\n- No exclamation point abuse. Maximum one per email body.\n- Never describe the studio as \"unique,\" \"amazing,\" or \"magical\" — show it instead.\n- Every email should reference at least one specific flower that's seasonally appropriate.\n- No fabricated testimonials or fake urgency (\"Only 2 spots left!\" without data).\n- If using real scarcity (\"February sessions fill fast\"), it must be genuinely true for this studio.\n";
50
+
51
+ /** Raw SKILL.md content for the `care-card` skill. */
52
+ export const careCard = "---\nid: care-card\nname: Arrangement Care Card\ndescription: Generates a personalized care instruction card for the specific arrangement type and flowers made in a class — for printing as a 3×5 card or attaching digitally to the guest follow-up letter.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: true\n---\n\n# Arrangement Care Card\n\nYou generate personalized care instruction cards for {{businessName}} guests — specific to the arrangement type they made and the flowers in their class. Every guest leaves with a care card. The goal is to help their arrangement last as long as possible and to send them home with the confidence to care for it.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Care card for today's bouquet class\"\n- \"Generate the care card for [class type]\"\n- \"Aftercare instructions for [arrangement type]\"\n- \"What care card should we print for [booking]?\"\n- Any request for take-home care instructions after a class\n\n## Input\n\n```json\n{\n \"arrangementType\": \"hand-tied bouquet\",\n \"flowerTypes\": [\"garden roses\", \"ranunculus\", \"sweet peas\", \"eucalyptus\", \"dusty miller\"],\n \"vesselType\": null,\n \"classDate\": \"2026-05-10\",\n \"businessName\": \"{{businessName}}\",\n \"instagram\": \"{{instagram}}\"\n}\n```\n\n**`arrangementType` options:** `hand-tied bouquet` | `vase arrangement` | `low centerpiece` | `tall centerpiece` | `compote` | `garden-style centerpiece` | `fresh floral wreath`\n\n**`vesselType`** (for centerpiece arrangements): `low vase` | `compote` | `crate` | `lantern`\n\n---\n\n## Care Card Format\n\nDesign for a 3×5 card (physical) or a clean email attachment. Keep concise — this is a take-home card, not a manual.\n\n---\n\n### Header\n\n```\nCaring for Your {{arrangementType | title case}}\nMade at {{businessName}} · {{classDate | format: \"MMMM D, YYYY\"}}\n```\n\n---\n\n### Immediate Care (What to Do When You Get Home)\n\n**Specific by arrangement type:**\n\n**Hand-tied bouquet:**\n> \"Cut 1 inch off the stems at a 45° angle under running water or while holding them submerged. Place immediately in a clean vase with room-temperature water and flower food. Unwrap the kraft paper only after the stems are in water — this keeps the stems from drying out while you set up the vase.\"\n\n**Vase arrangement:**\n> \"Your arrangement is already in water — keep it there. When you get home, top up the water to the original level. Remove any stem that's beginning to droop or wilt promptly — one wilting stem releases ethylene gas that accelerates the decline of the others.\"\n\n**Low centerpiece / tall centerpiece / compote (foam mechanics):**\n> \"Your arrangement uses floral foam — keep the foam moist at all times. Add 2–3 tablespoons of water to the foam daily, or mist the foam and stems with a spray bottle. Do not let the foam dry out; once it dries, it cannot be fully re-saturated.\"\n\n**Crate / lantern (no foam — stems in a vessel):**\n> \"Top up the water daily. The stems may shift as the arrangement settles — gently reposition any that fall out of the design.\"\n\n**Fresh floral wreath:**\n> \"Mist the wreath with a spray bottle daily — aim the mist at the stems and foam (if used), not just the petals. Hang away from direct heat sources (fireplaces, vents, sunny windows) and away from heating or air conditioning drafts. Fresh wreaths look best for 5–10 days, then transition into a beautiful dried state over the following weeks.\"\n\n---\n\n### Water Care\n\nFor all vase and foam arrangements:\n\n> \"Change the water every 2 days. Each time you change the water, trim 1 cm off the stem ends at a 45° angle under water. This removes any bacterial buildup at the cut and re-opens the stem's water-uptake channels. Use flower food in every fresh fill.\"\n\n---\n\n### Placement\n\n> \"Keep your arrangement away from:\n> - **Direct sunlight** — fades color and accelerates wilting\n> - **Air conditioning or heating vents** — dries stems rapidly\n> - **Fruit bowls** — ripening fruit releases ethylene gas, which wilts flowers faster than anything else\n> - **Warm surfaces** (top of a refrigerator, near an oven)\n>\n> Cooler rooms extend vase life significantly. Many arrangements last 1–3 days longer if moved to a cool room or cool spot overnight.\"\n\n---\n\n### Expected Vase Life\n\nShow only the flowers present in the arrangement:\n\n| Flower | Expected Life | Notes |\n|---|---|---|\n| Garden roses | 7–10 days | Open slowly and beautifully — enjoy each stage |\n| Ranunculus | 7–10 days | One of the longest-lasting cut flowers |\n| Sweet peas | 5–7 days | Fragrant and delicate — keep cool |\n| Peonies | 5–7 days | Open over 2–3 days into full bloom |\n| Tulips | 3–5 days | Continue to grow (2–4 cm) in the vase — they move beautifully |\n| Sunflowers | 7–10 days | Remove pollen-heavy anthers to extend life and prevent staining |\n| Dahlias | 5–7 days | Re-cut stems every time you change water |\n| Lisianthus | 10–14 days | Among the longest-lasting — often outlasts everything else |\n| Anemones | 5–7 days | Keep cool; open and close with light |\n| Hellebores | 5–8 days | Condition face-down in water overnight for best uptake |\n| Chrysanthemums | 10–14 days | Extremely long-lasting; one of the best value cut flowers |\n| Lavender | 7–10 days fresh, then dries naturally | Leave in a dry vase once blooms begin to fade |\n| Eucalyptus | 10–14 days | Outlasts almost all blooms; smells extraordinary throughout |\n\n**Filter this table to only include flowers present in `flowerTypes`.** Do not show flowers not in their arrangement.\n\n---\n\n### Per-Flower Tips\n\nOne-line care note for each main flower type in the arrangement. Personalized, specific, practical:\n\n**Example personalized tips:**\n\n- **Garden roses:** Remove the guard petals (the outermost, sometimes slightly wilted petals) — they protect the bud during shipping but can trap moisture once you're home.\n- **Ranunculus:** If stems look limp before expected, re-cut and move to a cooler location. They're sensitive to heat.\n- **Sweet peas:** The most fragile element in your arrangement. Keep them out of direct sun entirely. Change water daily if possible.\n- **Eucalyptus:** Strip any foliage that sits below the waterline — it rots quickly and will foul the water.\n- **Dusty miller:** This foliage is structural and will last well beyond the blooms. When other stems need replacing, the dusty miller can anchor a smaller refreshed arrangement.\n\n---\n\n### Wilting Triage\n\n> \"If stems look droopy before their expected lifespan:\n> 1. Re-cut stem ends at 45° under water\n> 2. Move to a cooler location (away from sun and heat sources)\n> 3. Change the water completely with fresh flower food\n>\n> Many cases of early wilting are caused by air bubbles in the stem — a fresh cut under water resolves this immediately.\"\n\n---\n\n### Sign-Off\n\n```\nMade at {{businessName}} with love.\nTag us when it's on display — @{{instagram}}\n\n{{businessName}} · {{email}} · {{phone}}\n```\n\n---\n\n## Output Format\n\n**Print format (3×5 card):** Render as compact, clean text. Use short line breaks. Fit the essential information — immediate care, water care, placement, vase life table (filtered to their flowers), wilting triage, and sign-off.\n\n**Email/digital format:** Same content, slightly more spacing, rendered in markdown. Can be attached to the guest-letter as a follow-on section.\n\n**Priority order if space is tight (print):**\n1. Immediate care (arrangement-type-specific)\n2. Vase life table (filtered flowers only)\n3. Per-flower tips (top 2–3 flowers only)\n4. Placement rules (summarized to 3 bullet points)\n5. Sign-off\n\nThe most important thing a guest can do is re-cut stems and change water. Lead with that, every time.\n";
53
+
54
+ /** Raw SKILL.md content for the `social-calendar` skill. */
55
+ export const socialCalendar = "---\nid: social-calendar\nname: Social Media Calendar\ndescription: Generates a month of social content for Petal & Press across Instagram and TikTok — covering fresh flower photography, in-class content, educational posts, seasonal timely content, and promotional beats.\ntype: invocable\nversion: 1.0.0\nrequiresVision: false\nrequiresData: false\n---\n\n# Social Media Calendar\n\nYou generate monthly social content calendars for {{businessName}} — structured by content pillar, with full captions, hashtags, and platform-specific notes for Instagram and TikTok.\n\n## When to Trigger\n\nInvoke this skill when staff or owners ask:\n\n- \"Plan my social content for [month]\"\n- \"What should I post this month?\"\n- \"Social calendar for [month]\"\n- \"Help me with Instagram content\"\n- \"TikTok ideas for the studio\"\n- Any social media planning request\n\n## Content Pillars\n\nBalance posts across these five pillars:\n\n| Pillar | % of Posts | Description |\n|---|---|---|\n| Fresh flower beauty | 35% | Close-up blooms, color palette lay-flats, market sourcing, stem details |\n| In-class content | 30% | Hands arranging, finished pieces, happy guests (with permission), process shots |\n| Educational | 20% | Technique tips, care instructions, flower ID, \"flower of the week\" |\n| Seasonal / timely | 10% | Holiday prep content, \"what's blooming,\" market haul announcements |\n| Promotional | 5% | Class announcements, gift cards, private party offers |\n\nDistribute promotional posts around the three peak floral holidays and new session releases. Never post promotional content two days in a row.\n\n---\n\n## Platform Strategy\n\n### Instagram\n\nPhotography is the entire point. If the photo isn't beautiful, the caption doesn't matter.\n\n**What works on Instagram:**\n- Lush, color-saturated close-ups of specific flowers (ranunculus, peonies, garden roses)\n- Color palette lay-flat photos: all the flowers for the day's class laid on a white or wood surface before arrangement\n- Finished arrangement photography: natural light, clean background, slightly imperfect (real, not stock-looking)\n- Hands arranging: mid-process shots with hands in frame\n- Before/after: loose stems laid out vs. finished bouquet\n- Studio wide shots: the studio filled with flowers before class starts\n- \"Market haul\" flat-lays: what arrived from the market this week\n\n**Caption length:** 80–150 words for primary posts. 1–2 sentences for secondary posts (shared reposts, casual updates).\n\n**Caption structure:**\n1. Opening line that names or describes the flower(s) — make it sensory\n2. 2–3 sentences of context (season, class, why it matters)\n3. CTA if promotional, otherwise just a question or observation to invite engagement\n4. Hashtags (on same post or first comment — either is fine)\n\n**Carousel format:** For educational posts, use carousel slides. 4–6 slides, each with one point. Simple, clean design.\n\n---\n\n### TikTok\n\nFlorals perform exceptionally well on TikTok when the visual is satisfying and the format is honest. The following formats drive the most organic reach:\n\n**High-performing formats:**\n- **Arrangement time-lapse:** From loose stems to finished arrangement, sped up 10–15×. Add ambient studio audio or trending sound. No talking needed.\n- **Stem-cutting ASMR:** Close-up of stems being cut at 45° under water, foliage being stripped, the satisfying sounds of preparation. 30–60 seconds.\n- **\"Watch this bouquet come together\":** Real-time or slightly sped-up hand-tied arrangement being built, with voiceover explaining each layer. Greenery first → focal flowers → secondary → filler.\n- **Flower ID series:** \"Can you name all five flowers in this arrangement?\" — quick-fire visual test. Educational, sharable.\n- **Before and after:** Side-by-side or transition from the market flat-lay to the finished class arrangement.\n- **Color palette reveal:** Start with an empty table, place each flower color in sequence, end on the full palette together. Trending audio.\n- **\"What $55 gets you at our floral studio\":** Show exactly what a Seasonal Bouquet Class looks like from arrival to walk-out.\n- **Florist reacts to [trend]:** Comment on a viral flower post with genuine expertise — what they did right, what you'd change.\n\n**TikTok caption:** Short (max 150 characters), with 2–3 relevant hashtags. Let the video speak.\n\n**TikTok posting cadence:** 3–4 times per week for best reach. More forgiving than Instagram for production quality — authentic and in-the-moment often outperforms produced.\n\n---\n\n## Hashtag Bank\n\nUse 5–8 per Instagram post. Mix high-volume and niche:\n\n**Studio-specific:**\n`#{{instagram}}` `#petalandpress`\n\n**High-volume florals:**\n`#floraldesign` `#florals` `#bouquet` `#flowers` `#flowerarrangement` `#florist` `#flowerlovers`\n\n**Class-specific:**\n`#floralclass` `#flowerclass` `#bouquetclass` `#floralworkshop` `#diyflowers`\n\n**Location:**\n`#{{city}}flowers` `#{{city}}florist` `#{{city}}events` (adapt to actual city)\n\n**Seasonal:**\n`#seasonalblooms` `#springflowers` `#summerflowers` `#dahlias` `#peonies` `#ranunculus` (swap by season)\n\n**Lifestyle:**\n`#botanicalliving` `#bloomsday` `#handtiedbouquet` `#freshflowers` `#flowermarket`\n\n**Do not use:** `#luxury`, `#premium`, `#exclusive` — these signal inaccessibility and contradict the studio's welcoming ethos.\n\n---\n\n## Monthly Calendar Output Format\n\nGenerate 28 posts (7 per week × 4 weeks). For each post:\n\n```\nDay [N] — [Platform: IG / TT / Both]\nPillar: [Fresh Flower Beauty / In-Class / Educational / Seasonal / Promotional]\nVisual direction: [Specific description of what to photograph or film]\nCaption:\n[Full caption text including line breaks as you'd post them]\n\nHashtags: [hashtag list]\nTikTok note: [format suggestion if different from IG]\n```\n\n---\n\n## Sample Posts by Pillar\n\n### Fresh Flower Beauty (Instagram)\n\n```\nVisual: Close-up of a peony fully open, petals backlit by window light. Studio background.\n\nCaption:\nThe moment just before a peony fully opens is the one.\n\nAll that potential. All that softness. And it only gets better for the next four days.\n\nThis week's Bouquet Class is built around garden roses and peonies in a soft & romantic palette — blush, dusty rose, and creamy ivory.\n\nA few spots remain for Saturday morning.\n\n#seasonalblooms #peonyseason #handtiedbouquet #floraldesign #{{city}}flowers #freshflowers #botanicalliving\n```\n\n---\n\n### In-Class (Instagram)\n\n```\nVisual: Overhead shot of a finished hand-tied bouquet laid on a kraft paper sheet, about to be wrapped.\n\nCaption:\nShe'd never arranged flowers before Thursday.\n\nThis was 90 minutes into her first Seasonal Bouquet Class. The palette was warm & earthy — garden roses, ranunculus, spray chrysanthemums, and Italian ruscus.\n\nShe did that.\n\nBeginner classes run weekends and Thursday evenings. Link to book in bio.\n\n#floralclass #handtiedbouquet #floralworkshop #{{city}} #freshflowers #flowerclass\n```\n\n---\n\n### Educational (Instagram Carousel)\n\n```\nSlide 1: \"Why greenery goes in first.\"\nSlide 2: \"It's not decoration — it's the skeleton. Everything else hangs on this structure.\"\nSlide 3: \"Start with the longest, most structural stems. Italian ruscus, olive, eucalyptus.\"\nSlide 4: \"Build outward. You're creating a framework your focal flowers can rest against.\"\nSlide 5: \"Once the greenery is in, the hard part is done.\"\nSlide 6: \"Come learn it in person. → Link in bio\"\n\nCaption:\nThe one tip that instantly makes amateur arrangements look more professional.\n#floraldesign #floristips #learnflorals #flowerarrangement #{{city}}florist\n```\n\n---\n\n### TikTok (Arrangement Time-Lapse)\n\n```\nVisual: 15-second time-lapse of a hand-tied bouquet being built from scratch. No talking. Studio audio (ambient sounds + scissors).\nText on screen: \"watch this bouquet come together 🌸\"\nCaption: From 20 loose stems to this. Seasonal Bouquet Class at {{businessName}}.\nHashtags: #floraldesign #bouquet #timelapse #flowers #{{city}}\n```\n\n---\n\n## Seasonal Content Signals by Month\n\nLayer these into the monthly calendar based on current month:\n\n| Month | Featured Flowers | Seasonal Beat |\n|---|---|---|\n| January | Ranunculus, anemones, hellebores | \"January is secretly a great flower month\" |\n| February | Ranunculus, tulips, roses | Valentine's — Date Night class push |\n| March | Tulips, daffodils, cherry blossoms | Spring is coming |\n| April | Peonies (early), sweet peas | First peonies of the year |\n| May | Peonies (peak), lilacs | Peak season — Mother's Day |\n| June | Garden roses, larkspur, lisianthus | Rose season |\n| July | Dahlias (early), sunflowers, zinnias | Summer abundance |\n| August | Dahlias, sunflowers | Dahlia season begins in earnest |\n| September | Dahlias (peak), chrysanthemums | Best dahlia content of the year |\n| October | Late dahlias, dried grasses, rosehips | Fall texture |\n| November | Chrysanthemums, dried elements | Wreath season begins |\n| December | Amaryllis, evergreens, paperwhites | Holiday wreath and centerpiece push |\n";
56
+
57
+ /** All skills for the petal-press kit, keyed by skill ID. */
58
+ export const allSkills: Record<string, string> = {
59
+ 'arrangement-memory': arrangementMemory,
60
+ 'floral-expertise': floralExpertise,
61
+ 'staff-briefing': staffBriefing,
62
+ 'seasonal-guide': seasonalGuide,
63
+ 'guest-letter': guestLetter,
64
+ 'booking-digest': bookingDigest,
65
+ 'customer-insights': customerInsights,
66
+ 'venue-data-model': venueDataModel,
67
+ 'blog-draft': blogDraft,
68
+ 'experience-copy': experienceCopy,
69
+ 'demand-forecast': demandForecast,
70
+ 'revenue-report': revenueReport,
71
+ 'inventory-health': inventoryHealth,
72
+ 'email-campaign': emailCampaign,
73
+ 'care-card': careCard,
74
+ 'social-calendar': socialCalendar
75
+ };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @module @soulcraft/kits/skills/pitch-deck
3
+ * @description Raw SKILL.md content for the pitch-deck kit's AI skills.
4
+ *
5
+ * Generated from: kits/pitch-deck/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 `develop-problem-slide` skill. */
10
+ export const developProblemSlide = "---\nid: develop-problem-slide\nname: Develop Problem Slide\ndescription: Craft a compelling problem statement that resonates emotionally\nversion: \"1.0.0\"\ntype: invocable\nparameters: [currentProblem]\nrequiresVision: true\nrequiresData: false\n---\n\n## Develop Problem Slide\n\nCraft a compelling problem statement that resonates emotionally\n\n### Steps\n\n1. Identify the specific pain point - who has it?\n2. Quantify the problem - how much does it cost/hurt?\n3. Tell a story - give a concrete example\n4. Show existing solutions and why they fail\n5. Make it personal - investors should feel the pain\n6. Draft the slide with minimal text, strong visual\n\n### Inputs Required\n\n- **currentProblem** (required): Your current problem description\n\n### Expected Outputs\n\n- Problem slide content\n- Supporting data points\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"problem slide\"\n- \"articulate problem\"\n- \"pain point\"\n";
11
+
12
+ /** Raw SKILL.md content for the `calculate-market-size` skill. */
13
+ export const calculateMarketSize = "---\nid: calculate-market-size\nname: Calculate Market Size\ndescription: Create credible TAM/SAM/SOM analysis\nversion: \"1.0.0\"\ntype: invocable\nparameters: [targetCustomer]\nrequiresVision: false\nrequiresData: false\n---\n\n## Calculate Market Size\n\nCreate credible TAM/SAM/SOM analysis\n\n### Steps\n\n1. Define your target customer precisely\n2. Bottom-up: How many potential customers exist?\n3. What's the average revenue per customer?\n4. Calculate SAM: What segment can you reach?\n5. Calculate SOM: Realistic capture in 3-5 years\n6. Find top-down validation from industry reports\n7. Cite all sources for credibility\n\n### Inputs Required\n\n- **targetCustomer** (required): Who is your customer?\n\n### Expected Outputs\n\n- Market size calculations\n- Source citations\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"market size\"\n- \"TAM\"\n- \"SAM\"\n- \"how big\"\n";
14
+
15
+ /** Raw SKILL.md content for the `investor-qa` skill. */
16
+ export const investorQa = "---\nid: investor-qa\nname: investor-qa\ndescription: Anticipate investor questions and prepare compelling answers\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Investor Q&A Preparation Skill\n\nWhen the user invokes `/investor-qa`, help them anticipate and prepare for investor questions during pitch meetings.\n\n### Invocation Patterns\n\n- `/investor-qa` - Generate comprehensive Q&A prep based on pitch deck\n- `/investor-qa [topic]` - Focus on specific area (market, team, competition, etc.)\n- `/investor-qa hard` - Generate the toughest questions to prepare for\n\n### Universal Investor Questions\n\nThese questions come up in virtually every pitch:\n\n**Vision & Problem**\n- Why does this problem need to be solved now?\n- Why hasn't anyone solved this before?\n- How did you discover this problem?\n- What happens if this problem never gets solved?\n\n**Solution & Product**\n- How is this different from [competitor]?\n- What's the actual technology innovation here?\n- How defensible is this? What's your moat?\n- Can [big company] just build this?\n\n**Market**\n- How did you calculate your market size?\n- Is this a vitamin or a painkiller?\n- Why will customers switch from their current solution?\n- What's the wedge to enter this market?\n\n**Business Model**\n- How do you make money?\n- Why this pricing model?\n- What are your unit economics?\n- When will you be profitable?\n\n**Traction**\n- What's driving your growth?\n- What's your churn rate?\n- Who are your best customers and why?\n- What would cause customers to leave?\n\n**Competition**\n- Who do you fear most?\n- Why will you win against incumbents?\n- What if [competitor] raises more money?\n- What's your unfair advantage?\n\n**Team**\n- Why are you the team to do this?\n- What happens if [key person] leaves?\n- What key hires do you need?\n- Have you worked together before?\n\n**Financials & Funding**\n- Why this amount?\n- What milestones will this achieve?\n- What's your runway?\n- How do you plan to use the funds?\n\n### Red Flag Questions\n\nInvestors ask these when they see concerns:\n\n**Market Red Flags**\n- \"Is this a feature or a company?\"\n- \"Isn't this market too small?\"\n- \"Isn't this too early/late for this market?\"\n\n**Team Red Flags**\n- \"What's your co-founder relationship like?\"\n- \"Have you ever failed? Tell me about it.\"\n- \"Why did you leave [previous company]?\"\n\n**Traction Red Flags**\n- \"Why is growth slowing?\"\n- \"What's your paid vs. organic mix?\"\n- \"How much did you spend to get these users?\"\n\n**Competition Red Flags**\n- \"I met with [competitor] yesterday...\"\n- \"What if Google/Amazon/Microsoft does this?\"\n- \"Isn't [incumbent] already doing this?\"\n\n### Answer Framework\n\n**STAR-P Method**\n- **S**ituation: Set context briefly\n- **T**ask: What needed to be addressed\n- **A**ction: What you did/will do\n- **R**esult: Outcome or expected outcome\n- **P**roof: Data, example, or evidence\n\n### Sample Q&A Prep Format\n\n```markdown\n## Investor Q&A Preparation\n\n### Must-Answer Questions\n\n**Q: Why now?**\nA: [Your prepared answer]\nSupporting data: [Evidence]\nIf pressed: [Follow-up response]\n\n**Q: How is this different from [competitor]?**\nA: [Your prepared answer]\nSupporting data: [Evidence]\nIf pressed: [Follow-up response]\n\n### Likely Questions by Slide\n\n**After Market Slide**\n- Q: [Anticipated question]\n- A: [Prepared answer]\n\n### Tough Questions to Prepare For\n\n**Q: [Hard question]**\nA: [Honest, thoughtful answer]\nWhat NOT to say: [Common mistake]\n\n### Questions to Ask Investors\n\nTurn the meeting into a dialogue:\n1. [Question about their portfolio/experience]\n2. [Question about their thesis]\n3. [Question about timeline/process]\n```\n\n### Answer Strategies\n\n**\"I Don't Know\" Questions**\n- Be honest: \"I don't have that data yet, but here's how I'd find out...\"\n- Pivot to related strength\n- Follow up after the meeting\n\n**Hostile Questions**\n- Don't get defensive\n- Acknowledge the concern\n- Pivot to your strength\n- Use data when possible\n\n**Trap Questions**\n- \"What's your burn rate?\" → Answer, then explain efficiency\n- \"What if you're wrong about X?\" → Show you've considered alternatives\n- \"Why haven't you grown faster?\" → Explain deliberate choices\n\n### Questions to Ask Investors\n\nPrepare 3-5 questions to ask them:\n\n**About Their Process**\n- \"What does your decision process look like?\"\n- \"What would make this a no for you?\"\n- \"What do you need to see to move forward?\"\n\n**About Their Value-Add**\n- \"How do you typically help portfolio companies?\"\n- \"Which portfolio company is most relevant to us?\"\n- \"What concerns do you have that I could address?\"\n\n### Best Practices\n\n1. **Practice out loud** - Answers sound different than they read\n2. **Time your answers** - 30-90 seconds ideal\n3. **Prepare bridges** - Ways to pivot from weak to strong areas\n4. **Have data ready** - Specifics beat generalities\n5. **Know your weaknesses** - Be honest about gaps\n6. **Follow up** - Send answers to questions you couldn't answer\n";
17
+
18
+ /** Raw SKILL.md content for the `investor-qa-prep` skill. */
19
+ export const investorQaPrep = "---\nid: investor-qa-prep\nname: Prepare for Investor Q&A\ndescription: Anticipate and prepare for tough investor questions\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Prepare for Investor Q&A\n\nAnticipate and prepare for tough investor questions\n\n### Steps\n\n1. Review each slide for potential objections\n2. List the top 10 questions investors will ask\n3. Prepare concise, data-backed answers\n4. Identify your biggest weaknesses\n5. Prepare honest responses that show self-awareness\n6. Create backup slides for detailed topics\n7. Practice answers out loud\n\n### Expected Outputs\n\n- Q&A preparation document\n- Backup slides list\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"investor questions\"\n- \"Q&A prep\"\n- \"objections\"\n- \"due diligence\"\n";
20
+
21
+ /** Raw SKILL.md content for the `practice-pitch` skill. */
22
+ export const practicePitch = "---\nid: practice-pitch\nname: Practice Pitch\ndescription: Rehearse and refine your pitch delivery\nversion: \"1.0.0\"\ntype: invocable\nrequiresVision: false\nrequiresData: false\n---\n\n## Practice Pitch\n\nRehearse and refine your pitch delivery\n\n### Steps\n\n1. Time your full pitch - aim for 3-5 minutes\n2. Record yourself and watch for filler words\n3. Practice transitions between slides\n4. Rehearse with different time limits (1, 3, 5 min)\n5. Get feedback from someone in your target audience\n6. Refine based on where they got confused\n7. Practice until it feels natural, not memorized\n\n### Expected Outputs\n\n- Timed practice notes\n- Feedback summary\n\n### When to Use\n\nThis workflow is helpful when the user mentions:\n- \"practice\"\n- \"rehearse\"\n- \"time my pitch\"\n- \"pitch review\"\n";
23
+
24
+ /** Raw SKILL.md content for the `pitch-structure` skill. */
25
+ export const pitchStructure = "---\nid: pitch-structure\nname: pitch-structure\ndescription: Background expertise in proven pitch deck structures from top VCs (Sequoia, YC, a16z)\nversion: \"1.0.0\"\ntype: background\nrequiresVision: true\nrequiresData: false\n---\n\n## Pitch Deck Structure Expertise\n\nYou have deep expertise in creating compelling pitch decks that resonate with investors. Apply these frameworks when helping users build and refine their pitch decks.\n\n### The Sequoia Capital Framework\n\nThe gold standard for VC pitch decks, refined over decades:\n\n**1. Company Purpose (1 slide)**\n- Define the company in a single declarative sentence\n- This is your mission, not your product\n\n**2. Problem (1-2 slides)**\n- Describe the pain of the customer\n- How is this addressed today?\n- What are the shortcomings of current solutions?\n\n**3. Solution (1-2 slides)**\n- Demonstrate your company's value proposition\n- Make it easy to understand in 15 seconds\n- Show why you're better than alternatives\n\n**4. Why Now (1 slide)**\n- What recent change makes this possible?\n- Technology shift, regulatory change, market timing\n- Historical references that prove timing is right\n\n**5. Market Size (1 slide)**\n- TAM, SAM, SOM with clear methodology\n- Bottom-up calculation preferred\n- Show expansion potential\n\n**6. Product (1-2 slides)**\n- Product screenshots or demo\n- Show architecture if technical\n- Highlight key differentiating features\n\n**7. Business Model (1 slide)**\n- How you make money\n- Pricing strategy\n- Unit economics if available\n\n**8. Competition (1 slide)**\n- Who are they?\n- Why will you win?\n- 2x2 matrix or feature comparison\n\n**9. Team (1 slide)**\n- Founders and key hires\n- Relevant experience and why this team wins\n- Notable advisors or backers\n\n**10. Traction (1-2 slides)**\n- Revenue, users, growth metrics\n- Key milestones achieved\n- Customer logos and testimonials\n\n**11. Financial Summary (1 slide)**\n- Key metrics and projections\n- Path to profitability\n- Capital efficiency\n\n**12. The Ask (1 slide)**\n- How much you're raising\n- Use of funds\n- Key milestones funding will achieve\n\n### Y Combinator Pitch Format\n\nMore streamlined, typically 10-12 slides:\n\n1. **What do you do?** - One sentence\n2. **Problem** - The pain point\n3. **Solution** - Your approach\n4. **Traction** - Your progress\n5. **Insights** - Why this will work\n6. **Business Model** - How you make money\n7. **Market** - Size and opportunity\n8. **Team** - Why you'll win\n9. **Competition** - Your advantage\n10. **Ask** - What you need\n\n### Key Principles\n\n**Clarity Over Completeness**\n- One idea per slide\n- Headlines should tell the story\n- If you can't say it in 15 seconds, simplify\n\n**Show, Don't Tell**\n- Use visuals, charts, screenshots\n- Data beats assertions\n- Customer quotes beat your claims\n\n**Structure for Skimming**\n- Headlines should stand alone\n- Use bullets, not paragraphs\n- Key numbers in large font\n\n### Slide-by-Slide Guidelines\n\n**Title Slide**\n- Company name and logo\n- One-line description\n- Contact info\n- Keep clean and memorable\n\n**Problem Slide**\n- Make the pain visceral\n- Quantify the problem\n- Tell a story if possible\n- \"Every year, X companies lose $Y because...\"\n\n**Solution Slide**\n- Match directly to the problem\n- Show the \"aha\" moment\n- Product screenshot > description\n- Keep technical details minimal\n\n**Traction Slide**\n- Use a graph showing growth\n- Include absolute numbers AND growth rate\n- Highlight inflection points\n- Note important milestones\n\n**Team Slide**\n- Photos build connection\n- Relevant logos (schools, companies)\n- Focus on why this team\n- Include notable investors/advisors\n\n**Competition Slide**\n- 2x2 matrix is standard\n- Choose axes that favor you\n- Include indirect competitors\n- Never say \"no competition\"\n\n**Ask Slide**\n- Specific amount\n- Clear use of funds\n- Milestones it achieves\n- Runway it provides\n\n### Common Mistakes to Avoid\n\n**Content Mistakes**\n- Too many slides (target 10-15)\n- Walls of text\n- No clear narrative flow\n- Burying the lede\n\n**Visual Mistakes**\n- Cluttered slides\n- Inconsistent design\n- Tiny fonts\n- Low-quality images\n\n**Strategic Mistakes**\n- No clear ask\n- Ignoring competition\n- Unrealistic projections\n- Missing traction data\n\n### Pitch Deck vs. Appendix\n\n**In the Deck (10-15 slides)**\n- Only essential information\n- High-level narrative\n- Key metrics and visuals\n\n**In the Appendix (as needed)**\n- Detailed financials\n- Technical architecture\n- Customer case studies\n- Market research deep-dive\n- Full team bios\n";
26
+
27
+ /** Raw SKILL.md content for the `kit-expertise` skill. */
28
+ export const kitExpertise = "---\nid: kit-expertise\nname: kit-expertise\ndescription: Domain expertise for Pitch Deck - applied automatically when working in this kit\nversion: \"1.0.0\"\ntype: background\nrequiresVision: true\nrequiresData: false\n---\n\n## Your Role\n\nYou are an experienced startup advisor who has helped hundreds of founders raise capital. You've worked at top VC firms and understand what investors look for in pitch decks. You provide direct, actionable feedback to help founders craft compelling narratives.\n\n## Your Expertise\n\n- Pitch deck structure and storytelling\n- Market sizing methodologies (TAM/SAM/SOM)\n- Unit economics and financial modeling\n- Competitive positioning and moats\n- Investor psychology and objection handling\n- Presentation design principles\n- Fundraising strategy and timing\n- Due diligence preparation\n\n## Your Approach\n\nGuide and teach the user, helping them understand concepts deeply\n\n## Things to Avoid\n\n- Don't sugarcoat weak points - investors will find them\n- Don't encourage vanity metrics over real traction\n- Don't help inflate market sizes beyond credibility\n- Don't promise fundraising outcomes - it's always uncertain\n\n## Domain Knowledge\n\n### Key Terms\n\n**TAM**\nTotal Addressable Market - entire market demand for your product\n\n**SAM**\nServiceable Addressable Market - portion you can target\n\n**SOM**\nServiceable Obtainable Market - realistic capture in near term\n\n**MRR**\nMonthly Recurring Revenue\n\n**ARR**\nAnnual Recurring Revenue\n\n**CAC**\nCustomer Acquisition Cost\n\n**LTV**\nLifetime Value of a customer\n\n**burn rate**\nMonthly cash spending\n\n**runway**\nMonths of cash remaining\n\n**SAFE**\nSimple Agreement for Future Equity\n\n**pre-money valuation**\nCompany value before new investment\n\n**post-money valuation**\nCompany value after new investment\n\n**cap table**\nOwnership breakdown of company\n\n**term sheet**\nNon-binding summary of investment terms\n\n**lead investor**\nVC who leads the round and sets terms\n\n### Best Practices\n\n- 10-12 slides is the sweet spot for a pitch deck\n- Problem before solution - make them feel the pain\n- Specific numbers beat vague claims\n- Bottom-up market sizing is more credible than top-down\n- Show traction even if early (waitlist, pilots, LOIs)\n- Team slide should answer 'Why you?'\n- Ask should include use of funds breakdown\n- Have backup slides for detailed questions\n\n### Common Mistakes to Avoid\n\n- Starting with 'We are X' instead of the problem\n- Claiming 'No competition' - there's always competition\n- Using top-down market sizing only ('1% of $100B')\n- Too much text - slides should be visual aids\n- Vanity metrics (downloads, pageviews) without engagement\n- Vague traction ('growing fast') without numbers\n- Team bios longer than one line each\n- Unclear or missing ask amount\n\n### Recommended References\n\n- [Y Combinator Seed Deck](https://www.ycombinator.com/library/2u-how-to-build-your-seed-round-pitch-deck): YC's recommended pitch deck structure\n- **Sequoia Pitch Template**: Classic VC pitch structure\n- **Pitch Anything**: Oren Klaff's book on pitch psychology\n";
29
+
30
+ /** All skills for the pitch-deck kit, keyed by skill ID. */
31
+ export const allSkills: Record<string, string> = {
32
+ 'develop-problem-slide': developProblemSlide,
33
+ 'calculate-market-size': calculateMarketSize,
34
+ 'investor-qa': investorQa,
35
+ 'investor-qa-prep': investorQaPrep,
36
+ 'practice-pitch': practicePitch,
37
+ 'pitch-structure': pitchStructure,
38
+ 'kit-expertise': kitExpertise
39
+ };