@forgespace/branding-mcp 0.32.0 → 0.55.1

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 (196) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +47 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/branding-core/generators/brand-affiliate.d.ts +4 -0
  6. package/dist/lib/branding-core/generators/brand-affiliate.d.ts.map +1 -0
  7. package/dist/lib/branding-core/generators/brand-affiliate.js +249 -0
  8. package/dist/lib/branding-core/generators/brand-affiliate.js.map +1 -0
  9. package/dist/lib/branding-core/generators/brand-analytics.d.ts +3 -0
  10. package/dist/lib/branding-core/generators/brand-analytics.d.ts.map +1 -0
  11. package/dist/lib/branding-core/generators/brand-analytics.js +208 -0
  12. package/dist/lib/branding-core/generators/brand-analytics.js.map +1 -0
  13. package/dist/lib/branding-core/generators/brand-audio.d.ts +4 -0
  14. package/dist/lib/branding-core/generators/brand-audio.d.ts.map +1 -0
  15. package/dist/lib/branding-core/generators/brand-audio.js +200 -0
  16. package/dist/lib/branding-core/generators/brand-audio.js.map +1 -0
  17. package/dist/lib/branding-core/generators/brand-b2b.d.ts +4 -0
  18. package/dist/lib/branding-core/generators/brand-b2b.d.ts.map +1 -0
  19. package/dist/lib/branding-core/generators/brand-b2b.js +236 -0
  20. package/dist/lib/branding-core/generators/brand-b2b.js.map +1 -0
  21. package/dist/lib/branding-core/generators/brand-chatbot.d.ts +4 -0
  22. package/dist/lib/branding-core/generators/brand-chatbot.d.ts.map +1 -0
  23. package/dist/lib/branding-core/generators/brand-chatbot.js +174 -0
  24. package/dist/lib/branding-core/generators/brand-chatbot.js.map +1 -0
  25. package/dist/lib/branding-core/generators/brand-competitive.d.ts +3 -0
  26. package/dist/lib/branding-core/generators/brand-competitive.d.ts.map +1 -0
  27. package/dist/lib/branding-core/generators/brand-competitive.js +274 -0
  28. package/dist/lib/branding-core/generators/brand-competitive.js.map +1 -0
  29. package/dist/lib/branding-core/generators/brand-crisis.d.ts +3 -0
  30. package/dist/lib/branding-core/generators/brand-crisis.d.ts.map +1 -0
  31. package/dist/lib/branding-core/generators/brand-crisis.js +256 -0
  32. package/dist/lib/branding-core/generators/brand-crisis.js.map +1 -0
  33. package/dist/lib/branding-core/generators/brand-customer.d.ts +4 -0
  34. package/dist/lib/branding-core/generators/brand-customer.d.ts.map +1 -0
  35. package/dist/lib/branding-core/generators/brand-customer.js +270 -0
  36. package/dist/lib/branding-core/generators/brand-customer.js.map +1 -0
  37. package/dist/lib/branding-core/generators/brand-ecommerce.d.ts +4 -0
  38. package/dist/lib/branding-core/generators/brand-ecommerce.d.ts.map +1 -0
  39. package/dist/lib/branding-core/generators/brand-ecommerce.js +255 -0
  40. package/dist/lib/branding-core/generators/brand-ecommerce.js.map +1 -0
  41. package/dist/lib/branding-core/generators/brand-fintech.d.ts +3 -0
  42. package/dist/lib/branding-core/generators/brand-fintech.d.ts.map +1 -0
  43. package/dist/lib/branding-core/generators/brand-fintech.js +225 -0
  44. package/dist/lib/branding-core/generators/brand-fintech.js.map +1 -0
  45. package/dist/lib/branding-core/generators/brand-globalisation.d.ts +3 -0
  46. package/dist/lib/branding-core/generators/brand-globalisation.d.ts.map +1 -0
  47. package/dist/lib/branding-core/generators/brand-globalisation.js +222 -0
  48. package/dist/lib/branding-core/generators/brand-globalisation.js.map +1 -0
  49. package/dist/lib/branding-core/generators/brand-influencer.d.ts +4 -0
  50. package/dist/lib/branding-core/generators/brand-influencer.d.ts.map +1 -0
  51. package/dist/lib/branding-core/generators/brand-influencer.js +262 -0
  52. package/dist/lib/branding-core/generators/brand-influencer.js.map +1 -0
  53. package/dist/lib/branding-core/generators/brand-innovation.d.ts +3 -0
  54. package/dist/lib/branding-core/generators/brand-innovation.d.ts.map +1 -0
  55. package/dist/lib/branding-core/generators/brand-innovation.js +229 -0
  56. package/dist/lib/branding-core/generators/brand-innovation.js.map +1 -0
  57. package/dist/lib/branding-core/generators/brand-loyalty.d.ts +4 -0
  58. package/dist/lib/branding-core/generators/brand-loyalty.d.ts.map +1 -0
  59. package/dist/lib/branding-core/generators/brand-loyalty.js +231 -0
  60. package/dist/lib/branding-core/generators/brand-loyalty.js.map +1 -0
  61. package/dist/lib/branding-core/generators/brand-marketplace.d.ts +4 -0
  62. package/dist/lib/branding-core/generators/brand-marketplace.d.ts.map +1 -0
  63. package/dist/lib/branding-core/generators/brand-marketplace.js +251 -0
  64. package/dist/lib/branding-core/generators/brand-marketplace.js.map +1 -0
  65. package/dist/lib/branding-core/generators/brand-newsletter.d.ts +4 -0
  66. package/dist/lib/branding-core/generators/brand-newsletter.d.ts.map +1 -0
  67. package/dist/lib/branding-core/generators/brand-newsletter.js +173 -0
  68. package/dist/lib/branding-core/generators/brand-newsletter.js.map +1 -0
  69. package/dist/lib/branding-core/generators/brand-podcast.d.ts +3 -0
  70. package/dist/lib/branding-core/generators/brand-podcast.d.ts.map +1 -0
  71. package/dist/lib/branding-core/generators/brand-podcast.js +217 -0
  72. package/dist/lib/branding-core/generators/brand-podcast.js.map +1 -0
  73. package/dist/lib/branding-core/generators/brand-saas.d.ts +3 -0
  74. package/dist/lib/branding-core/generators/brand-saas.d.ts.map +1 -0
  75. package/dist/lib/branding-core/generators/brand-saas.js +212 -0
  76. package/dist/lib/branding-core/generators/brand-saas.js.map +1 -0
  77. package/dist/lib/branding-core/generators/brand-seo.d.ts +4 -0
  78. package/dist/lib/branding-core/generators/brand-seo.d.ts.map +1 -0
  79. package/dist/lib/branding-core/generators/brand-seo.js +269 -0
  80. package/dist/lib/branding-core/generators/brand-seo.js.map +1 -0
  81. package/dist/lib/branding-core/generators/brand-subscription.d.ts +4 -0
  82. package/dist/lib/branding-core/generators/brand-subscription.d.ts.map +1 -0
  83. package/dist/lib/branding-core/generators/brand-subscription.js +218 -0
  84. package/dist/lib/branding-core/generators/brand-subscription.js.map +1 -0
  85. package/dist/lib/branding-core/generators/brand-training.d.ts +4 -0
  86. package/dist/lib/branding-core/generators/brand-training.d.ts.map +1 -0
  87. package/dist/lib/branding-core/generators/brand-training.js +261 -0
  88. package/dist/lib/branding-core/generators/brand-training.js.map +1 -0
  89. package/dist/lib/branding-core/generators/brand-video.d.ts +3 -0
  90. package/dist/lib/branding-core/generators/brand-video.d.ts.map +1 -0
  91. package/dist/lib/branding-core/generators/brand-video.js +228 -0
  92. package/dist/lib/branding-core/generators/brand-video.js.map +1 -0
  93. package/dist/lib/branding-core/generators/brand-webinar.d.ts +4 -0
  94. package/dist/lib/branding-core/generators/brand-webinar.d.ts.map +1 -0
  95. package/dist/lib/branding-core/generators/brand-webinar.js +165 -0
  96. package/dist/lib/branding-core/generators/brand-webinar.js.map +1 -0
  97. package/dist/lib/branding-core/index.d.ts +23 -0
  98. package/dist/lib/branding-core/index.d.ts.map +1 -1
  99. package/dist/lib/branding-core/index.js +23 -0
  100. package/dist/lib/branding-core/index.js.map +1 -1
  101. package/dist/lib/types.d.ts +379 -0
  102. package/dist/lib/types.d.ts.map +1 -1
  103. package/dist/tools/generate-brand-affiliate.d.ts +3 -0
  104. package/dist/tools/generate-brand-affiliate.d.ts.map +1 -0
  105. package/dist/tools/generate-brand-affiliate.js +14 -0
  106. package/dist/tools/generate-brand-affiliate.js.map +1 -0
  107. package/dist/tools/generate-brand-analytics.d.ts +3 -0
  108. package/dist/tools/generate-brand-analytics.d.ts.map +1 -0
  109. package/dist/tools/generate-brand-analytics.js +19 -0
  110. package/dist/tools/generate-brand-analytics.js.map +1 -0
  111. package/dist/tools/generate-brand-audio.d.ts +3 -0
  112. package/dist/tools/generate-brand-audio.d.ts.map +1 -0
  113. package/dist/tools/generate-brand-audio.js +14 -0
  114. package/dist/tools/generate-brand-audio.js.map +1 -0
  115. package/dist/tools/generate-brand-b2b.d.ts +3 -0
  116. package/dist/tools/generate-brand-b2b.d.ts.map +1 -0
  117. package/dist/tools/generate-brand-b2b.js +10 -0
  118. package/dist/tools/generate-brand-b2b.js.map +1 -0
  119. package/dist/tools/generate-brand-chatbot.d.ts +3 -0
  120. package/dist/tools/generate-brand-chatbot.d.ts.map +1 -0
  121. package/dist/tools/generate-brand-chatbot.js +10 -0
  122. package/dist/tools/generate-brand-chatbot.js.map +1 -0
  123. package/dist/tools/generate-brand-competitive.d.ts +3 -0
  124. package/dist/tools/generate-brand-competitive.d.ts.map +1 -0
  125. package/dist/tools/generate-brand-competitive.js +14 -0
  126. package/dist/tools/generate-brand-competitive.js.map +1 -0
  127. package/dist/tools/generate-brand-crisis.d.ts +3 -0
  128. package/dist/tools/generate-brand-crisis.d.ts.map +1 -0
  129. package/dist/tools/generate-brand-crisis.js +14 -0
  130. package/dist/tools/generate-brand-crisis.js.map +1 -0
  131. package/dist/tools/generate-brand-customer.d.ts +3 -0
  132. package/dist/tools/generate-brand-customer.d.ts.map +1 -0
  133. package/dist/tools/generate-brand-customer.js +19 -0
  134. package/dist/tools/generate-brand-customer.js.map +1 -0
  135. package/dist/tools/generate-brand-ecommerce.d.ts +3 -0
  136. package/dist/tools/generate-brand-ecommerce.d.ts.map +1 -0
  137. package/dist/tools/generate-brand-ecommerce.js +14 -0
  138. package/dist/tools/generate-brand-ecommerce.js.map +1 -0
  139. package/dist/tools/generate-brand-fintech.d.ts +3 -0
  140. package/dist/tools/generate-brand-fintech.d.ts.map +1 -0
  141. package/dist/tools/generate-brand-fintech.js +14 -0
  142. package/dist/tools/generate-brand-fintech.js.map +1 -0
  143. package/dist/tools/generate-brand-globalisation.d.ts +3 -0
  144. package/dist/tools/generate-brand-globalisation.d.ts.map +1 -0
  145. package/dist/tools/generate-brand-globalisation.js +14 -0
  146. package/dist/tools/generate-brand-globalisation.js.map +1 -0
  147. package/dist/tools/generate-brand-influencer.d.ts +3 -0
  148. package/dist/tools/generate-brand-influencer.d.ts.map +1 -0
  149. package/dist/tools/generate-brand-influencer.js +10 -0
  150. package/dist/tools/generate-brand-influencer.js.map +1 -0
  151. package/dist/tools/generate-brand-innovation.d.ts +3 -0
  152. package/dist/tools/generate-brand-innovation.d.ts.map +1 -0
  153. package/dist/tools/generate-brand-innovation.js +19 -0
  154. package/dist/tools/generate-brand-innovation.js.map +1 -0
  155. package/dist/tools/generate-brand-loyalty.d.ts +3 -0
  156. package/dist/tools/generate-brand-loyalty.d.ts.map +1 -0
  157. package/dist/tools/generate-brand-loyalty.js +14 -0
  158. package/dist/tools/generate-brand-loyalty.js.map +1 -0
  159. package/dist/tools/generate-brand-marketplace.d.ts +3 -0
  160. package/dist/tools/generate-brand-marketplace.d.ts.map +1 -0
  161. package/dist/tools/generate-brand-marketplace.js +14 -0
  162. package/dist/tools/generate-brand-marketplace.js.map +1 -0
  163. package/dist/tools/generate-brand-newsletter.d.ts +3 -0
  164. package/dist/tools/generate-brand-newsletter.d.ts.map +1 -0
  165. package/dist/tools/generate-brand-newsletter.js +14 -0
  166. package/dist/tools/generate-brand-newsletter.js.map +1 -0
  167. package/dist/tools/generate-brand-podcast.d.ts +3 -0
  168. package/dist/tools/generate-brand-podcast.d.ts.map +1 -0
  169. package/dist/tools/generate-brand-podcast.js +10 -0
  170. package/dist/tools/generate-brand-podcast.js.map +1 -0
  171. package/dist/tools/generate-brand-saas.d.ts +3 -0
  172. package/dist/tools/generate-brand-saas.d.ts.map +1 -0
  173. package/dist/tools/generate-brand-saas.js +14 -0
  174. package/dist/tools/generate-brand-saas.js.map +1 -0
  175. package/dist/tools/generate-brand-seo.d.ts +3 -0
  176. package/dist/tools/generate-brand-seo.d.ts.map +1 -0
  177. package/dist/tools/generate-brand-seo.js +14 -0
  178. package/dist/tools/generate-brand-seo.js.map +1 -0
  179. package/dist/tools/generate-brand-subscription.d.ts +3 -0
  180. package/dist/tools/generate-brand-subscription.d.ts.map +1 -0
  181. package/dist/tools/generate-brand-subscription.js +14 -0
  182. package/dist/tools/generate-brand-subscription.js.map +1 -0
  183. package/dist/tools/generate-brand-training.d.ts +3 -0
  184. package/dist/tools/generate-brand-training.d.ts.map +1 -0
  185. package/dist/tools/generate-brand-training.js +14 -0
  186. package/dist/tools/generate-brand-training.js.map +1 -0
  187. package/dist/tools/generate-brand-video.d.ts +3 -0
  188. package/dist/tools/generate-brand-video.d.ts.map +1 -0
  189. package/dist/tools/generate-brand-video.js +14 -0
  190. package/dist/tools/generate-brand-video.js.map +1 -0
  191. package/dist/tools/generate-brand-webinar.d.ts +3 -0
  192. package/dist/tools/generate-brand-webinar.d.ts.map +1 -0
  193. package/dist/tools/generate-brand-webinar.js +10 -0
  194. package/dist/tools/generate-brand-webinar.js.map +1 -0
  195. package/package.json +2 -2
  196. package/server.json +3 -3
@@ -0,0 +1,173 @@
1
+ const VALID_STYLES = new Set([
2
+ 'minimal',
3
+ 'bold',
4
+ 'elegant',
5
+ 'playful',
6
+ 'corporate',
7
+ 'tech',
8
+ 'organic',
9
+ 'retro',
10
+ ]);
11
+ const STYLE_APPROACH = {
12
+ minimal: 'Clean, curated digest — less is more, every edition earns its send',
13
+ bold: 'High-energy flagship publication with strong opinions and striking visuals',
14
+ elegant: 'Premium editorial letter — polished prose, exclusive insights, high production',
15
+ playful: 'Fun, personality-packed bulletin with surprises and interactive elements',
16
+ corporate: 'Professional intelligence briefing — authority, reliability, decision-relevant content',
17
+ tech: 'Developer-first technical dispatch — code, tools, deep dives, and community updates',
18
+ organic: 'Values-driven community letter — impact stories, provenance, and seasonal connection',
19
+ retro: 'Vintage-flavoured gazette — nostalgic design, timeless wisdom, archival depth',
20
+ };
21
+ const STYLE_FORMAT = {
22
+ minimal: ['Single-topic deep dive', 'Curated link round-up', 'One insight + one action'],
23
+ bold: [
24
+ 'Feature story + quick hits',
25
+ 'Opinion column + reader debate',
26
+ 'Visual-first with short copy',
27
+ ],
28
+ elegant: ['Long-form essay', "Editor's letter + curated picks", 'Exclusive interview transcript'],
29
+ playful: [
30
+ 'Quiz + fun facts',
31
+ 'Story-driven narrative with illustrations',
32
+ 'Interactive polls + results',
33
+ ],
34
+ corporate: [
35
+ 'Executive briefing format',
36
+ 'Market intelligence digest',
37
+ 'Trend analysis + implications',
38
+ ],
39
+ tech: [
40
+ 'Tutorial + code snippet',
41
+ 'Tool roundup + benchmarks',
42
+ 'Open-source spotlight + changelog',
43
+ ],
44
+ organic: ['Seasonal story', 'Impact report snippet', 'Producer profile + recipe/tip'],
45
+ retro: [
46
+ 'Feature column + classifieds',
47
+ 'Photo essay + captions',
48
+ 'Historical throwback + modern parallel',
49
+ ],
50
+ };
51
+ const STYLE_CADENCE = {
52
+ minimal: 'Bi-weekly — quality over quantity',
53
+ bold: 'Weekly — maintain momentum and anticipation',
54
+ elegant: 'Monthly — premium feel, subscribers look forward to each edition',
55
+ playful: 'Weekly — frequent enough to sustain delight and habit',
56
+ corporate: 'Weekly or bi-weekly — aligned with business news cycles',
57
+ tech: 'Weekly — fast-moving ecosystem demands regular updates',
58
+ organic: 'Monthly or seasonal — aligned with nature and harvest cycles',
59
+ retro: 'Bi-weekly — measured pace evokes the magazine era',
60
+ };
61
+ const STYLE_SUBJECT_LINE_FORMULA = {
62
+ minimal: 'Direct + specific: "The one thing worth reading this week"',
63
+ bold: 'Provocative + numbered: "5 truths the industry won\'t tell you"',
64
+ elegant: 'Intriguing + exclusive: "An editor\'s note on [topic] — for subscribers only"',
65
+ playful: 'Emoji + curiosity: "🎉 We tried 47 [thing] so you don\'t have to"',
66
+ corporate: 'Data-led + authoritative: "[Stat] — what it means for your business"',
67
+ tech: 'Technical + actionable: "How to [achieve X] with [framework/tool]"',
68
+ organic: 'Story-first + seasonal: "This month from [region/producer]: [story hook]"',
69
+ retro: 'Nostalgic + timeless: "From the archive: the [era] guide to [topic]"',
70
+ };
71
+ const STYLE_PERSONALISATION = {
72
+ minimal: ['First-name greeting', 'Curated section relevant to reader interest'],
73
+ bold: ['Dynamic hero image by segment', 'Personalised CTA based on last click'],
74
+ elegant: ['Handwritten-style signature', 'Exclusive member tier section'],
75
+ playful: ['Personalised quiz results', 'Name in subject line + fun fact'],
76
+ corporate: ['Industry-specific insights block', 'Role-based recommended content'],
77
+ tech: ['Stack-based code snippets', 'Contributor shout-out by username'],
78
+ organic: ['Nearest producer/farm recommendation', 'Seasonal tip by location'],
79
+ retro: ['Reader spotlight feature', "Archival reference to reader's year of joining"],
80
+ };
81
+ function buildSections(brand, safeStyle) {
82
+ const base = [
83
+ 'Hero header with brand logo and edition number',
84
+ "Editor's note / personal message (3-5 sentences)",
85
+ 'Feature content block (primary story or insight)',
86
+ 'Secondary content block (2-3 shorter items)',
87
+ 'Call-to-action section with single primary CTA',
88
+ 'Footer with unsubscribe, social links, and legal text',
89
+ ];
90
+ if (safeStyle === 'tech') {
91
+ base.splice(3, 0, 'Code snippet or tool spotlight block');
92
+ base.splice(5, 0, 'Community contributions / open-source picks');
93
+ }
94
+ else if (safeStyle === 'corporate') {
95
+ base.splice(3, 0, 'Market data or statistic callout block');
96
+ base.splice(5, 0, 'Upcoming events or webinar promotion');
97
+ }
98
+ else if (safeStyle === 'playful') {
99
+ base.splice(3, 0, 'Fun fact or trivia section');
100
+ base.splice(6, 0, 'Meme, gif, or illustrated moment');
101
+ }
102
+ else if (safeStyle === 'elegant') {
103
+ base.splice(3, 0, 'Exclusive subscriber-only section');
104
+ base.splice(5, 0, 'Recommended reading / curated picks');
105
+ }
106
+ return base;
107
+ }
108
+ function buildDeliverabilityChecklist(brand) {
109
+ return [
110
+ `Sender name is recognisable as ${brand.name} — not a generic address`,
111
+ 'From address uses a custom domain (not @gmail.com / @yahoo.com)',
112
+ 'SPF, DKIM, and DMARC DNS records verified and passing',
113
+ 'Unsubscribe link present in every edition (CAN-SPAM / GDPR)',
114
+ 'Text-to-image ratio maintained above 60:40 to avoid spam filters',
115
+ 'No spam trigger words in subject line or preview text',
116
+ 'List hygiene: hard bounces removed within 24 hours',
117
+ 'Soft bounces monitored and suppressed after 3 attempts',
118
+ 'Re-engagement campaign triggered at 90 days of inactivity',
119
+ 'Plain-text version included alongside HTML version',
120
+ ];
121
+ }
122
+ function buildAccessibilityGuidelines() {
123
+ return [
124
+ 'Minimum 16px body font size — 14px for supplementary text only',
125
+ 'Line height 1.5x or greater for body copy',
126
+ 'Colour contrast ratio 4.5:1 for body text, 3:1 for large text (WCAG AA)',
127
+ "Alt text on all images — descriptive, not 'image001.jpg'",
128
+ 'Avoid relying on colour alone to convey information',
129
+ 'Logical heading hierarchy: H1 for subject, H2 for sections',
130
+ 'CTA buttons minimum 44x44px touch target, clear label text',
131
+ ];
132
+ }
133
+ function buildSuccessMetrics(safeStyle) {
134
+ const base = {
135
+ open_rate: 'Target 35-45% (industry avg 21%)',
136
+ click_to_open_rate: 'Target 15-25%',
137
+ unsubscribe_rate: 'Keep below 0.2% per send',
138
+ spam_complaint_rate: 'Keep below 0.08%',
139
+ list_growth_rate: 'Target 5-10% monthly net growth',
140
+ revenue_per_subscriber: 'Track for monetised newsletters',
141
+ };
142
+ if (safeStyle === 'tech') {
143
+ base['github_clicks'] = 'Track developer-specific CTA engagement';
144
+ base['code_copy_events'] = 'If hosted/interactive newsletter';
145
+ }
146
+ if (safeStyle === 'corporate') {
147
+ base['qualified_lead_attribution'] = 'UTM-tagged newsletter conversion to pipeline';
148
+ base['content_download_rate'] = 'Gated asset downloads from newsletter clicks';
149
+ }
150
+ return base;
151
+ }
152
+ function buildNewsletterBriefSummary(brand, safeStyle) {
153
+ const taglinePart = brand.tagline ? ` — "${brand.tagline}"` : '';
154
+ const approach = STYLE_APPROACH[safeStyle];
155
+ const cadence = STYLE_CADENCE[safeStyle];
156
+ return `${brand.name}${taglinePart} newsletter strategy: ${approach}. ${cadence}. Subject line formula: ${STYLE_SUBJECT_LINE_FORMULA[safeStyle].split(':')[0]}.`;
157
+ }
158
+ export function generateBrandNewsletter(brand) {
159
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
160
+ return {
161
+ newsletterApproach: STYLE_APPROACH[safeStyle],
162
+ recommendedFormats: STYLE_FORMAT[safeStyle],
163
+ publishingCadence: STYLE_CADENCE[safeStyle],
164
+ subjectLineFormula: STYLE_SUBJECT_LINE_FORMULA[safeStyle],
165
+ personalisationStrategy: STYLE_PERSONALISATION[safeStyle],
166
+ newsletterSections: buildSections(brand, safeStyle),
167
+ deliverabilityChecklist: buildDeliverabilityChecklist(brand),
168
+ accessibilityGuidelines: buildAccessibilityGuidelines(),
169
+ successMetrics: buildSuccessMetrics(safeStyle),
170
+ newsletterBriefSummary: buildNewsletterBriefSummary(brand, safeStyle),
171
+ };
172
+ }
173
+ //# sourceMappingURL=brand-newsletter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-newsletter.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-newsletter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrandIdentity, BrandPodcastOutput } from '../../types.js';
2
+ export declare function generateBrandPodcast(brand: BrandIdentity): BrandPodcastOutput;
3
+ //# sourceMappingURL=brand-podcast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-podcast.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-podcast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAc,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAyNpF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,kBAAkB,CAgB7E"}
@@ -0,0 +1,217 @@
1
+ const VALID_STYLES = new Set([
2
+ 'minimal',
3
+ 'bold',
4
+ 'elegant',
5
+ 'playful',
6
+ 'corporate',
7
+ 'tech',
8
+ 'organic',
9
+ 'retro',
10
+ ]);
11
+ const STYLE_SHOW_CONCEPT = {
12
+ minimal: "A focused, signal-over-noise show with concise episodes that respect the listener's time",
13
+ bold: 'A high-energy show with strong opinions, memorable moments, and an unapologetic point of view',
14
+ elegant: 'A refined, curated conversation series that attracts discerning listeners seeking depth',
15
+ playful: 'A fun, energetic show packed with personality, humour, and listener interaction',
16
+ corporate: 'A professional thought-leadership series that builds credibility and drives enterprise trust',
17
+ tech: 'A technically rich show for builders and innovators—detailed, precise, and community-driven',
18
+ organic: 'A values-led show exploring sustainability, purpose, and authentic living',
19
+ retro: 'A nostalgic, story-driven show celebrating heritage, craft, and timeless ideas',
20
+ };
21
+ const STYLE_FORMAT = {
22
+ minimal: [
23
+ 'Solo deep-dive (15–20 min)',
24
+ 'Focused Q&A (20–25 min)',
25
+ 'Weekly curated round-up (10–15 min)',
26
+ ],
27
+ bold: [
28
+ 'Debate format (30–45 min)',
29
+ 'Unfiltered hot-takes (20–30 min)',
30
+ 'Live audience Q&A (45–60 min)',
31
+ ],
32
+ elegant: [
33
+ 'Long-form interview (45–60 min)',
34
+ 'Narrative documentary (30–40 min)',
35
+ 'Curated panel (40–50 min)',
36
+ ],
37
+ playful: [
38
+ 'Comedy chat (25–35 min)',
39
+ 'Listener story submissions (20–30 min)',
40
+ 'Games and challenges (30–40 min)',
41
+ ],
42
+ corporate: [
43
+ 'Executive interview (30–40 min)',
44
+ 'Industry trend briefing (20–30 min)',
45
+ 'Case study deep-dive (35–45 min)',
46
+ ],
47
+ tech: [
48
+ 'Technical tutorial (25–35 min)',
49
+ 'Code review / live build (40–60 min)',
50
+ 'Open-source spotlight (20–30 min)',
51
+ ],
52
+ organic: [
53
+ 'Farm-to-table story (30–40 min)',
54
+ 'Founder impact interview (35–50 min)',
55
+ 'Community voices (25–35 min)',
56
+ ],
57
+ retro: [
58
+ 'Archive dive (30–45 min)',
59
+ 'Oral history interview (40–55 min)',
60
+ 'Listener nostalgia segment (20–30 min)',
61
+ ],
62
+ };
63
+ const STYLE_CADENCE = {
64
+ minimal: 'Weekly — one tight episode, published Monday',
65
+ bold: 'Twice weekly — Tuesday for main episode, Thursday for bonus clip',
66
+ elegant: 'Bi-weekly — alternating Wednesdays for long-form quality',
67
+ playful: 'Weekly — Friday release to kick off the weekend',
68
+ corporate: 'Bi-weekly — alternating Tuesdays aligned with business news cycle',
69
+ tech: 'Weekly — Wednesday release timed with developer news cycles',
70
+ organic: 'Weekly — Sunday release to complement a mindful start to the week',
71
+ retro: 'Bi-weekly — Saturday morning release for leisurely listening',
72
+ };
73
+ const STYLE_HOST_PERSONA = {
74
+ minimal: 'Thoughtful curator — asks sharp questions, stays out of the way',
75
+ bold: 'Energetic provocateur — takes positions, challenges guests, creates moments',
76
+ elegant: 'Gracious interviewer — creates space for nuance and reflection',
77
+ playful: 'Enthusiastic companion — laughs easily, brings the fun',
78
+ corporate: 'Credible authority — well-prepared, data-literate, professionally warm',
79
+ tech: 'Curious builder — digs into implementation, respects technical depth',
80
+ organic: 'Empathetic storyteller — listens deeply, centres human impact',
81
+ retro: 'Nostalgic historian — delights in detail, honours the past',
82
+ };
83
+ const STYLE_GUEST_CRITERIA = {
84
+ minimal: [
85
+ 'Practitioner with specific, actionable insight',
86
+ 'Avoids over-promotion',
87
+ 'Communicates concisely',
88
+ ],
89
+ bold: [
90
+ 'Strong opinion and willingness to debate',
91
+ 'Audience draw or cultural relevance',
92
+ 'Authentic and unscripted',
93
+ ],
94
+ elegant: [
95
+ 'Accomplished in their field',
96
+ 'Articulate and reflective',
97
+ 'Comfortable with long-form conversation',
98
+ ],
99
+ playful: ['Personality-forward', 'Able to improvise and laugh', 'Relatable to core audience'],
100
+ corporate: [
101
+ 'C-suite or recognised industry leader',
102
+ 'Data-backed perspectives',
103
+ 'Willing to share proprietary insight',
104
+ ],
105
+ tech: [
106
+ 'Active practitioner or open-source contributor',
107
+ 'Technical depth without jargon overload',
108
+ 'Community respected',
109
+ ],
110
+ organic: ['Mission-aligned values', 'Authentic impact story', 'Not primarily sales-motivated'],
111
+ retro: [
112
+ 'Deep domain knowledge or lived experience',
113
+ 'Archival or historical access',
114
+ 'Passionate storyteller',
115
+ ],
116
+ };
117
+ const STYLE_DISTRIBUTION = {
118
+ minimal: ['Apple Podcasts', 'Spotify', 'RSS'],
119
+ bold: ['Spotify', 'YouTube', 'Apple Podcasts', 'TikTok clips'],
120
+ elegant: ['Apple Podcasts', 'Spotify', 'Dedicated website player'],
121
+ playful: ['Spotify', 'YouTube', 'TikTok clips', 'Instagram Reels'],
122
+ corporate: ['Apple Podcasts', 'Spotify', 'LinkedIn Audio', 'Company intranet'],
123
+ tech: ['Spotify', 'Apple Podcasts', 'YouTube', 'Dev.to embeds', 'RSS'],
124
+ organic: ['Apple Podcasts', 'Spotify', 'Community newsletter embed'],
125
+ retro: ['Apple Podcasts', 'Spotify', 'Dedicated archive website'],
126
+ };
127
+ const STYLE_MONETISATION = {
128
+ minimal: [
129
+ 'Branded sponsorship (single mid-roll)',
130
+ 'Premium ad-free tier',
131
+ 'Listener support (Patreon)',
132
+ ],
133
+ bold: ['Dynamic ad insertion', 'Merchandise', 'Live event tickets', 'Premium bonus content'],
134
+ elegant: ['Single luxury brand sponsorship', 'Private member feed', 'Paid premium series'],
135
+ playful: ['Listener support community', 'Merchandise', 'Live shows'],
136
+ corporate: ['B2B sponsored segments', 'Paid executive access episodes', 'Lead-gen integrations'],
137
+ tech: ['Developer tool sponsorships', 'Paid workshop extensions', 'Affiliate developer products'],
138
+ organic: ['Mission-aligned brand sponsorships', 'Community membership', 'Digital course upsell'],
139
+ retro: ['Heritage brand sponsorships', 'Archival content membership', 'Listener donations'],
140
+ };
141
+ function buildProductionChecklist(brand) {
142
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
143
+ const base = [
144
+ 'Condenser or dynamic XLR microphone (budget: £100–400)',
145
+ 'Acoustic treatment: foam panels or reflection filter',
146
+ 'Audio interface (e.g. Focusrite Scarlett Solo)',
147
+ 'DAW: Adobe Audition, GarageBand, or Descript',
148
+ 'Consistent intro/outro music licensed for podcast use',
149
+ `Episode template: intro (60s) → main content → CTA → outro (30s)`,
150
+ 'Show notes with timestamped highlights and guest links',
151
+ 'Transcripts for SEO and accessibility',
152
+ ];
153
+ if (safeStyle === 'tech') {
154
+ base.push('Screen-share recording for tutorial segments (OBS or Loom)');
155
+ base.push('Chapter markers in mp3 ID3 tags for developer-friendly navigation');
156
+ }
157
+ if (safeStyle === 'bold') {
158
+ base.push('Video recording setup for YouTube and clip repurposing');
159
+ base.push('Live recording capability for audience episodes');
160
+ }
161
+ if (safeStyle === 'elegant') {
162
+ base.push('Professional sound mastering before publish');
163
+ base.push('Custom composer for original theme music');
164
+ }
165
+ return base;
166
+ }
167
+ function buildGrowthStrategy(safeStyle) {
168
+ const base = [
169
+ 'Submit to Apple Podcasts, Spotify, Google Podcasts, and Amazon Music on day 1',
170
+ 'Launch with 3 episodes to reduce new-listener drop-off',
171
+ 'Swap guest appearances on complementary shows (cross-pollination)',
172
+ 'Repurpose audiograms and quote cards for social media',
173
+ 'Email newsletter episode round-up each publish day',
174
+ 'Request reviews from early listeners in episodes 1–5',
175
+ ];
176
+ if (safeStyle === 'tech')
177
+ base.push('Share episodes in relevant Discord servers, subreddits, and Hacker News');
178
+ if (safeStyle === 'corporate')
179
+ base.push('Submit to industry press and analyst briefing distribution lists');
180
+ if (safeStyle === 'organic')
181
+ base.push('Partner with aligned NGOs and impact organisations for co-promotion');
182
+ return base;
183
+ }
184
+ function buildAccessibilityNotes() {
185
+ return [
186
+ 'Full episode transcripts published alongside every episode (WCAG 1.2.1)',
187
+ 'Auto-generated captions on all YouTube versions — reviewed for accuracy',
188
+ 'Show notes include all links spoken in the episode in accessible anchor text',
189
+ 'Avoid relying solely on audio cues for meaning — reinforce in show notes',
190
+ 'Ensure website podcast player is keyboard-navigable and screen-reader compatible',
191
+ 'Audio levels normalised to -16 LUFS for consistent listening across devices',
192
+ 'Background music mixed below dialogue (minimum 20 dB below voice)',
193
+ ];
194
+ }
195
+ function buildPodcastBriefSummary(brand, safeStyle) {
196
+ const taglinePart = brand.tagline ? ` — "${brand.tagline}"` : '';
197
+ const concept = STYLE_SHOW_CONCEPT[safeStyle];
198
+ const cadence = STYLE_CADENCE[safeStyle];
199
+ return `${brand.name}${taglinePart} podcast: ${concept}. ${cadence}.`;
200
+ }
201
+ export function generateBrandPodcast(brand) {
202
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
203
+ return {
204
+ showConcept: STYLE_SHOW_CONCEPT[safeStyle],
205
+ recommendedFormats: STYLE_FORMAT[safeStyle],
206
+ publishingCadence: STYLE_CADENCE[safeStyle],
207
+ hostPersona: STYLE_HOST_PERSONA[safeStyle],
208
+ guestSelectionCriteria: STYLE_GUEST_CRITERIA[safeStyle],
209
+ distributionChannels: STYLE_DISTRIBUTION[safeStyle],
210
+ monetisationStrategy: STYLE_MONETISATION[safeStyle],
211
+ productionChecklist: buildProductionChecklist(brand),
212
+ growthStrategy: buildGrowthStrategy(safeStyle),
213
+ accessibilityNotes: buildAccessibilityNotes(),
214
+ podcastBriefSummary: buildPodcastBriefSummary(brand, safeStyle),
215
+ };
216
+ }
217
+ //# sourceMappingURL=brand-podcast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-podcast.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-podcast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrandIdentity, BrandSaasOutput } from '../../types.js';
2
+ export declare function generateBrandSaas(brand: BrandIdentity): BrandSaasOutput;
3
+ //# sourceMappingURL=brand-saas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-saas.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-saas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAc,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAiNjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAevE"}
@@ -0,0 +1,212 @@
1
+ const VALID_STYLES = new Set([
2
+ 'minimal',
3
+ 'bold',
4
+ 'elegant',
5
+ 'playful',
6
+ 'corporate',
7
+ 'tech',
8
+ 'organic',
9
+ 'retro',
10
+ ]);
11
+ const STYLE_POSITIONING = {
12
+ minimal: 'Simple, focused software that removes complexity and gets out of the way.',
13
+ bold: 'Powerful, high-energy platform that drives measurable results fast.',
14
+ elegant: 'Premium, beautifully crafted software for discerning professionals.',
15
+ playful: 'Delightfully fun tool that makes work feel less like work.',
16
+ corporate: 'Enterprise-grade solution built for scale, compliance, and governance.',
17
+ tech: 'Developer-first platform with powerful APIs, extensibility, and open-source DNA.',
18
+ organic: 'Purposeful software that respects your data, values, and the planet.',
19
+ retro: 'Thoughtfully nostalgic tool with timeless UX and proven reliability.',
20
+ };
21
+ const STYLE_PRICING_MODEL = {
22
+ minimal: ['Flat-rate simplicity', 'One plan, all features', 'No per-seat surprises'],
23
+ bold: ['Usage-based pricing', 'Scales with your growth', 'No artificial limits'],
24
+ elegant: [
25
+ 'Bespoke pricing on request',
26
+ 'White-glove onboarding included',
27
+ 'Annual contracts preferred',
28
+ ],
29
+ playful: ['Freemium with generous free tier', 'Pay as you play', 'Team plans with fun perks'],
30
+ corporate: [
31
+ 'Volume licensing',
32
+ 'ELA (Enterprise License Agreement) option',
33
+ 'Dedicated CSM from 500 seats',
34
+ ],
35
+ tech: [
36
+ 'Free tier for individuals',
37
+ 'Developer Pro tier',
38
+ 'Team and Enterprise tiers',
39
+ 'OSS sponsors discount',
40
+ ],
41
+ organic: ['Fair pricing, no hidden fees', 'Non-profit discount 50%', 'B Corp pricing programme'],
42
+ retro: [
43
+ 'Perpetual licence option',
44
+ 'Subscription with annual discount',
45
+ 'Lifetime deal for early adopters',
46
+ ],
47
+ };
48
+ const STYLE_ONBOARDING = {
49
+ minimal: ['Zero-config setup', 'Import in 60 seconds', 'Interactive quick-start guide'],
50
+ bold: [
51
+ 'Guided activation wizard',
52
+ 'Video walkthroughs for each feature',
53
+ 'Live chat onboarding support',
54
+ ],
55
+ elegant: [
56
+ 'Dedicated onboarding consultant',
57
+ 'White-label welcome portal',
58
+ 'Customised training sessions',
59
+ ],
60
+ playful: [
61
+ 'Gamified onboarding checklist',
62
+ 'Confetti rewards on milestones',
63
+ 'Buddy system pairing',
64
+ ],
65
+ corporate: [
66
+ 'Implementation project manager',
67
+ 'Change management playbook',
68
+ 'Admin console training',
69
+ 'SSO and directory sync setup',
70
+ ],
71
+ tech: [
72
+ 'API quickstart docs',
73
+ 'SDK scaffolding CLI',
74
+ 'GitHub integration in 5 min',
75
+ 'Developer sandbox environment',
76
+ ],
77
+ organic: [
78
+ 'Self-paced learning library',
79
+ 'Community-led onboarding webinars',
80
+ 'Eco impact dashboard tour',
81
+ ],
82
+ retro: ['Printable getting-started guide', 'Video tutorial library', 'Vintage help-desk chat'],
83
+ };
84
+ const STYLE_RETENTION_TACTICS = {
85
+ minimal: [
86
+ 'Weekly digest of key metrics',
87
+ 'Frictionless renewal flow',
88
+ 'Pause instead of cancel option',
89
+ ],
90
+ bold: ['Power user of the month spotlight', 'Feature unlock milestones', 'ROI calculator in-app'],
91
+ elegant: [
92
+ 'Quarterly executive business reviews',
93
+ 'Exclusive product roadmap previews',
94
+ 'Concierge renewal process',
95
+ ],
96
+ playful: [
97
+ 'Streak rewards and badges',
98
+ 'Seasonal challenges',
99
+ 'Referral programme with gift cards',
100
+ ],
101
+ corporate: [
102
+ 'Dedicated customer success manager',
103
+ 'Quarterly health-check reports',
104
+ 'Executive sponsor programme',
105
+ 'Annual user conference invitation',
106
+ ],
107
+ tech: [
108
+ 'Developer changelog digest',
109
+ 'Beta tester programme',
110
+ 'Open-source contribution credits',
111
+ 'API usage dashboards',
112
+ ],
113
+ organic: [
114
+ 'Impact report showing environmental savings',
115
+ 'Community forum engagement score',
116
+ 'Values-aligned renewal messaging',
117
+ ],
118
+ retro: ['Loyalty anniversary perks', 'Print newsletter for power users', 'Vintage reward badges'],
119
+ };
120
+ const STYLE_INTEGRATIONS = {
121
+ minimal: ['Zapier', 'Webhooks', 'CSV import/export'],
122
+ bold: ['Salesforce', 'HubSpot', 'Slack', 'Microsoft Teams', 'Zapier'],
123
+ elegant: ['Salesforce', 'Microsoft 365', 'SAP', 'Custom API', 'White-label SSO'],
124
+ playful: ['Slack', 'Notion', 'Figma', 'Zapier', 'Discord'],
125
+ corporate: ['SAP', 'Workday', 'Salesforce', 'ServiceNow', 'LDAP/SCIM', 'Okta'],
126
+ tech: ['GitHub', 'GitLab', 'Jira', 'CI/CD pipelines', 'Terraform', 'REST & GraphQL APIs', 'SDKs'],
127
+ organic: ['Google Workspace', 'Mailchimp', 'Stripe', 'Carbon footprint APIs'],
128
+ retro: ['Email import', 'CSV/Excel', 'Zapier', 'Browser extension'],
129
+ };
130
+ const STYLE_SUPPORT_MODEL = {
131
+ minimal: 'Self-serve knowledge base with community forum and email support.',
132
+ bold: 'Live chat during business hours, dedicated Slack channel for paying customers.',
133
+ elegant: 'Named account manager, priority phone support, and SLA-backed response times.',
134
+ playful: 'In-app chat support with friendly tone, community Discord, and live office hours.',
135
+ corporate: '24/7 enterprise support with P1 hotline, dedicated CSM, and SLA guarantees.',
136
+ tech: 'GitHub Issues for OSS, developer forum, Slack community, and Pro email support.',
137
+ organic: 'Community-first support via forum, async email, and volunteer-run live sessions.',
138
+ retro: 'Email support with 24-hour response pledge and a curated FAQ library.',
139
+ };
140
+ function buildTrialStrategy(brand, safeStyle) {
141
+ const trialMap = {
142
+ minimal: '14-day free trial, no credit card required.',
143
+ bold: '7-day trial with full access and a personalised kick-off call.',
144
+ elegant: '30-day pilot programme with a dedicated success consultant.',
145
+ playful: 'Free tier forever; upgrade when you need more.',
146
+ corporate: 'Proof-of-concept engagement for 30 days with enterprise-tier access.',
147
+ tech: 'Free tier with API access; unlimited dev sandboxes for 30 days.',
148
+ organic: '30-day trial with full transparency on data usage and exit portability.',
149
+ retro: '21-day free trial; lifetime licence option for committed users.',
150
+ };
151
+ return trialMap[safeStyle];
152
+ }
153
+ function buildChurnSignals(safeStyle) {
154
+ const base = [
155
+ 'Login frequency drops below once per week',
156
+ 'Feature adoption rate under 30% of core workflows',
157
+ 'Support ticket volume spike with negative sentiment',
158
+ 'Invoice payment delay or failed renewal',
159
+ 'Key champion changes role or leaves company',
160
+ ];
161
+ if (safeStyle === 'tech') {
162
+ base.push('API call volume drops > 50% week-over-week');
163
+ base.push('GitHub integration disconnected');
164
+ }
165
+ if (safeStyle === 'corporate' || safeStyle === 'elegant') {
166
+ base.push('Executive sponsor disengagement from QBRs');
167
+ base.push('Procurement team requests data export');
168
+ }
169
+ return base;
170
+ }
171
+ function buildComplianceCertifications(safeStyle) {
172
+ const base = [
173
+ 'SOC 2 Type II',
174
+ 'GDPR compliant',
175
+ 'CCPA compliant',
176
+ 'Data Processing Agreement (DPA) available',
177
+ ];
178
+ if (safeStyle === 'corporate' || safeStyle === 'elegant') {
179
+ base.push('ISO 27001 certified', 'HIPAA BAA available', 'FedRAMP ready');
180
+ }
181
+ if (safeStyle === 'tech') {
182
+ base.push('SLSA Level 2 supply chain security', 'Bug bounty programme (HackerOne)');
183
+ }
184
+ if (safeStyle === 'organic') {
185
+ base.push('Privacy-first architecture (no third-party ad tracking)', 'B Corp certified');
186
+ }
187
+ return base;
188
+ }
189
+ function buildSaasBriefSummary(brand, safeStyle) {
190
+ const pricing = (STYLE_PRICING_MODEL[safeStyle] ?? STYLE_PRICING_MODEL.minimal)[0];
191
+ const integration = (STYLE_INTEGRATIONS[safeStyle] ?? STYLE_INTEGRATIONS.minimal)
192
+ .slice(0, 2)
193
+ .join(' and ');
194
+ const taglinePart = brand.tagline ? ` \u2014 "${brand.tagline}"` : '';
195
+ return `${brand.name}${taglinePart} is a ${brand.industry} SaaS platform. Positioning: ${STYLE_POSITIONING[safeStyle]} Pricing approach: ${pricing}. Key integrations: ${integration}. Support: ${STYLE_SUPPORT_MODEL[safeStyle]}`;
196
+ }
197
+ export function generateBrandSaas(brand) {
198
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
199
+ return {
200
+ positioning: STYLE_POSITIONING[safeStyle],
201
+ pricingModel: STYLE_PRICING_MODEL[safeStyle] ?? STYLE_PRICING_MODEL.minimal,
202
+ trialStrategy: buildTrialStrategy(brand, safeStyle),
203
+ onboardingFlow: STYLE_ONBOARDING[safeStyle] ?? STYLE_ONBOARDING.minimal,
204
+ retentionTactics: STYLE_RETENTION_TACTICS[safeStyle] ?? STYLE_RETENTION_TACTICS.minimal,
205
+ keyIntegrations: STYLE_INTEGRATIONS[safeStyle] ?? STYLE_INTEGRATIONS.minimal,
206
+ supportModel: STYLE_SUPPORT_MODEL[safeStyle],
207
+ churnWarningSignals: buildChurnSignals(safeStyle),
208
+ complianceCertifications: buildComplianceCertifications(safeStyle),
209
+ saasBriefSummary: buildSaasBriefSummary(brand, safeStyle),
210
+ };
211
+ }
212
+ //# sourceMappingURL=brand-saas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-saas.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-saas.ts"],"names":[],"mappings":"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"}