@tomako/tools-runtime 0.1.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 (531) hide show
  1. package/README.md +12 -0
  2. package/package.json +629 -0
  3. package/src/assets/icons/brands/social/bluesky-icon.tsx +9 -0
  4. package/src/assets/icons/brands/social/facebook-icon.tsx +9 -0
  5. package/src/assets/icons/brands/social/index.ts +8 -0
  6. package/src/assets/icons/brands/social/instagram-icon.tsx +9 -0
  7. package/src/assets/icons/brands/social/linkedin-icon.tsx +9 -0
  8. package/src/assets/icons/brands/social/threads-icon.tsx +9 -0
  9. package/src/assets/icons/brands/social/tiktok-icon.tsx +10 -0
  10. package/src/assets/icons/brands/social/x-icon.tsx +9 -0
  11. package/src/assets/icons/brands/social/youtube-icon.tsx +9 -0
  12. package/src/assets/icons/social-profile/facebook-icon.tsx +12 -0
  13. package/src/assets/icons/social-profile/index.ts +29 -0
  14. package/src/assets/icons/social-profile/instagram-icon.tsx +18 -0
  15. package/src/assets/icons/social-profile/linkedin-icon.tsx +12 -0
  16. package/src/assets/icons/social-profile/tiktok-icon.tsx +12 -0
  17. package/src/assets/icons/social-profile/x-icon.tsx +13 -0
  18. package/src/assets/icons/social-profile/youtube-icon.tsx +12 -0
  19. package/src/components/tools/engine/form-builder.tsx +219 -0
  20. package/src/components/tools/engine/package-widget-loader.tsx +38 -0
  21. package/src/components/tools/engine/package-widget-runtime.tsx +409 -0
  22. package/src/components/tools/engine/package-widget.tsx +77 -0
  23. package/src/components/tools/engine/result-view.tsx +596 -0
  24. package/src/components/tools/engine/use-legacy-llm-task.ts +64 -0
  25. package/src/components/tools/engine/use-tool-task.ts +195 -0
  26. package/src/components/tools/market-forecast-report.tsx +1150 -0
  27. package/src/components/tools/registry.ts +13 -0
  28. package/src/components/tools/workspace/index.ts +39 -0
  29. package/src/components/tools/workspace/tool-action-bar.tsx +99 -0
  30. package/src/components/tools/workspace/tool-empty-panel.tsx +32 -0
  31. package/src/components/tools/workspace/tool-error-panel.tsx +40 -0
  32. package/src/components/tools/workspace/tool-field.tsx +124 -0
  33. package/src/components/tools/workspace/tool-file-upload.tsx +112 -0
  34. package/src/components/tools/workspace/tool-form-section.tsx +21 -0
  35. package/src/components/tools/workspace/tool-form-shell.tsx +36 -0
  36. package/src/components/tools/workspace/tool-loading-panel.tsx +269 -0
  37. package/src/components/tools/workspace/tool-option-row.tsx +97 -0
  38. package/src/components/tools/workspace/tool-preview-panel.tsx +31 -0
  39. package/src/components/tools/workspace/tool-result-actions.tsx +67 -0
  40. package/src/components/tools/workspace/tool-result-file-actions.ts +31 -0
  41. package/src/components/tools/workspace/tool-result-header.tsx +39 -0
  42. package/src/components/tools/workspace/tool-status.tsx +13 -0
  43. package/src/components/tools/workspace/tool-workspace-layout.tsx +226 -0
  44. package/src/constants/LKS.ts +29 -0
  45. package/src/constants/related-tools.ts +18 -0
  46. package/src/constants/social-profile-kit.ts +284 -0
  47. package/src/constants/tool-assets.ts +7 -0
  48. package/src/env.d.ts +3 -0
  49. package/src/features/tools/_templates/standard-tool.container.tsx +90 -0
  50. package/src/features/tools/app-icon-resizer/app-icon-resizer.container.tsx +11 -0
  51. package/src/features/tools/app-icon-resizer/app-icon-resizer.spec.ts +15 -0
  52. package/src/features/tools/app-icon-resizer/widget/app-icon-resizer.tsx +444 -0
  53. package/src/features/tools/app-icon-resizer/widget/constants.ts +19 -0
  54. package/src/features/tools/app-icon-resizer/widget/helpers.ts +314 -0
  55. package/src/features/tools/app-icon-resizer/widget/index.ts +7 -0
  56. package/src/features/tools/app-icon-resizer/widget/platform-icons.tsx +59 -0
  57. package/src/features/tools/app-icon-resizer/widget/preview-dialogs.tsx +139 -0
  58. package/src/features/tools/app-icon-resizer/widget/result-shell.tsx +165 -0
  59. package/src/features/tools/app-icon-resizer/widget/types.ts +36 -0
  60. package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.container.tsx +108 -0
  61. package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.spec.ts +14 -0
  62. package/src/features/tools/app-store-screenshot-generator/config.ts +3 -0
  63. package/src/features/tools/app-store-screenshot-generator/widget/app-store-screenshot-generator.tsx +1250 -0
  64. package/src/features/tools/app-store-screenshot-generator/widget/asset-slots.ts +76 -0
  65. package/src/features/tools/app-store-screenshot-generator/widget/constants.ts +43 -0
  66. package/src/features/tools/app-store-screenshot-generator/widget/form-controls.tsx +214 -0
  67. package/src/features/tools/app-store-screenshot-generator/widget/generation.ts +528 -0
  68. package/src/features/tools/app-store-screenshot-generator/widget/index.ts +7 -0
  69. package/src/features/tools/app-store-screenshot-generator/widget/input-media.ts +175 -0
  70. package/src/features/tools/app-store-screenshot-generator/widget/types.ts +60 -0
  71. package/src/features/tools/app-store-screenshot-generator/widget/zip.ts +119 -0
  72. package/src/features/tools/build-in-public-story-generator/build-in-public-story-generator.container.tsx +135 -0
  73. package/src/features/tools/build-in-public-story-generator/build-in-public-story-generator.spec.ts +15 -0
  74. package/src/features/tools/build-in-public-story-generator/widget/build-in-public-story-generator.tsx +314 -0
  75. package/src/features/tools/build-in-public-story-generator/widget/constants.ts +3 -0
  76. package/src/features/tools/build-in-public-story-generator/widget/helpers.ts +25 -0
  77. package/src/features/tools/build-in-public-story-generator/widget/index.ts +7 -0
  78. package/src/features/tools/build-in-public-story-generator/widget/preview-panels.tsx +58 -0
  79. package/src/features/tools/build-in-public-story-generator/widget/result-shell.tsx +164 -0
  80. package/src/features/tools/build-in-public-story-generator/widget/types.ts +6 -0
  81. package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.container.tsx +30 -0
  82. package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.spec.ts +15 -0
  83. package/src/features/tools/cold-start-channel-selector/widget/cold-start-channel-selector.tsx +417 -0
  84. package/src/features/tools/cold-start-channel-selector/widget/constants.ts +46 -0
  85. package/src/features/tools/cold-start-channel-selector/widget/form-controls.tsx +41 -0
  86. package/src/features/tools/cold-start-channel-selector/widget/helpers.ts +75 -0
  87. package/src/features/tools/cold-start-channel-selector/widget/index.ts +7 -0
  88. package/src/features/tools/cold-start-channel-selector/widget/preview-panels.tsx +250 -0
  89. package/src/features/tools/cold-start-channel-selector/widget/result-shell.tsx +199 -0
  90. package/src/features/tools/cold-start-channel-selector/widget/types.ts +21 -0
  91. package/src/features/tools/commercial-bp-generator/commercial-bp-generator.container.tsx +102 -0
  92. package/src/features/tools/commercial-bp-generator/commercial-bp-generator.spec.ts +14 -0
  93. package/src/features/tools/commercial-bp-generator/widget/commercial-bp-generator.tsx +676 -0
  94. package/src/features/tools/commercial-bp-generator/widget/constants.ts +32 -0
  95. package/src/features/tools/commercial-bp-generator/widget/helpers.ts +147 -0
  96. package/src/features/tools/commercial-bp-generator/widget/index.ts +7 -0
  97. package/src/features/tools/commercial-bp-generator/widget/result-shell.tsx +271 -0
  98. package/src/features/tools/commercial-bp-generator/widget/style-option.tsx +54 -0
  99. package/src/features/tools/commercial-bp-generator/widget/types.ts +33 -0
  100. package/src/features/tools/community-feedback-inbox/community-feedback-inbox.container.tsx +126 -0
  101. package/src/features/tools/community-feedback-inbox/community-feedback-inbox.spec.ts +15 -0
  102. package/src/features/tools/community-feedback-inbox/widget/community-feedback-inbox.tsx +271 -0
  103. package/src/features/tools/community-feedback-inbox/widget/constants.ts +3 -0
  104. package/src/features/tools/community-feedback-inbox/widget/helpers.ts +28 -0
  105. package/src/features/tools/community-feedback-inbox/widget/index.ts +7 -0
  106. package/src/features/tools/community-feedback-inbox/widget/preview-panels.tsx +92 -0
  107. package/src/features/tools/community-feedback-inbox/widget/result-shell.tsx +266 -0
  108. package/src/features/tools/community-feedback-inbox/widget/types.ts +6 -0
  109. package/src/features/tools/community-pain-point-extractor/community-pain-point-extractor.container.tsx +124 -0
  110. package/src/features/tools/community-pain-point-extractor/community-pain-point-extractor.spec.ts +15 -0
  111. package/src/features/tools/community-pain-point-extractor/widget/community-pain-point-extractor.tsx +404 -0
  112. package/src/features/tools/community-pain-point-extractor/widget/constants.ts +41 -0
  113. package/src/features/tools/community-pain-point-extractor/widget/helpers.ts +76 -0
  114. package/src/features/tools/community-pain-point-extractor/widget/index.ts +8 -0
  115. package/src/features/tools/community-pain-point-extractor/widget/progress-panels.tsx +251 -0
  116. package/src/features/tools/community-pain-point-extractor/widget/result-shell.tsx +478 -0
  117. package/src/features/tools/community-pain-point-extractor/widget/types.ts +33 -0
  118. package/src/features/tools/community-post-risk-checker/community-post-risk-checker.package.ts +792 -0
  119. package/src/features/tools/competitor-analysis/competitor-analysis.container.tsx +136 -0
  120. package/src/features/tools/competitor-analysis/competitor-analysis.spec.ts +15 -0
  121. package/src/features/tools/competitor-analysis/widget/competitor-analysis.tsx +241 -0
  122. package/src/features/tools/competitor-analysis/widget/constants.ts +9 -0
  123. package/src/features/tools/competitor-analysis/widget/index.ts +7 -0
  124. package/src/features/tools/competitor-analysis/widget/preview-panels.tsx +60 -0
  125. package/src/features/tools/competitor-analysis/widget/result-shell.tsx +418 -0
  126. package/src/features/tools/competitor-analysis/widget/types.ts +13 -0
  127. package/src/features/tools/disclaimer-generator/disclaimer-generator.package.ts +339 -0
  128. package/src/features/tools/email-template-generator/email-template-generator.container.tsx +224 -0
  129. package/src/features/tools/email-template-generator/email-template-generator.spec.ts +14 -0
  130. package/src/features/tools/email-template-generator/widget/email-template-generator.tsx +358 -0
  131. package/src/features/tools/email-template-generator/widget/helpers.ts +39 -0
  132. package/src/features/tools/email-template-generator/widget/index.ts +7 -0
  133. package/src/features/tools/email-template-generator/widget/preview-panel.tsx +311 -0
  134. package/src/features/tools/email-template-generator/widget/result-text-block.tsx +7 -0
  135. package/src/features/tools/email-template-generator/widget/types.ts +24 -0
  136. package/src/features/tools/gtm-readiness-checklist/gtm-readiness-checklist.container.tsx +75 -0
  137. package/src/features/tools/gtm-readiness-checklist/gtm-readiness-checklist.spec.ts +15 -0
  138. package/src/features/tools/gtm-readiness-checklist/widget/gtm-readiness-checklist.tsx +122 -0
  139. package/src/features/tools/gtm-readiness-checklist/widget/index.ts +7 -0
  140. package/src/features/tools/investor-matching-planner/investor-matching-planner.package.ts +869 -0
  141. package/src/features/tools/koko-codex-assistant/koko-codex-assistant.container.tsx +151 -0
  142. package/src/features/tools/koko-codex-assistant/koko-codex-assistant.spec.ts +14 -0
  143. package/src/features/tools/koko-codex-assistant/widget/index.ts +7 -0
  144. package/src/features/tools/koko-codex-assistant/widget/koko-codex-assistant-download.tsx +192 -0
  145. package/src/features/tools/logo-generator/logo-generator.container.tsx +112 -0
  146. package/src/features/tools/logo-generator/logo-generator.spec.ts +15 -0
  147. package/src/features/tools/logo-generator/widget/index.ts +7 -0
  148. package/src/features/tools/logo-generator/widget/logo-generator.tsx +1244 -0
  149. package/src/features/tools/market-forecast-report/market-forecast-report.container.tsx +73 -0
  150. package/src/features/tools/market-forecast-report/market-forecast-report.spec.ts +15 -0
  151. package/src/features/tools/million-user-growth-test/million-user-growth-test.container.tsx +123 -0
  152. package/src/features/tools/million-user-growth-test/million-user-growth-test.spec.ts +14 -0
  153. package/src/features/tools/million-user-growth-test/widget/index.ts +7 -0
  154. package/src/features/tools/million-user-growth-test/widget/million-user-growth-test.tsx +433 -0
  155. package/src/features/tools/module-loader.ts +107 -0
  156. package/src/features/tools/og-image-generator/og-image-generator.container.tsx +86 -0
  157. package/src/features/tools/og-image-generator/og-image-generator.spec.ts +14 -0
  158. package/src/features/tools/og-image-generator/widget/constants.ts +38 -0
  159. package/src/features/tools/og-image-generator/widget/form-fields.tsx +240 -0
  160. package/src/features/tools/og-image-generator/widget/index.ts +7 -0
  161. package/src/features/tools/og-image-generator/widget/og-image-generator.tsx +742 -0
  162. package/src/features/tools/og-image-generator/widget/preview-panel.tsx +305 -0
  163. package/src/features/tools/og-image-generator/widget/types.ts +1 -0
  164. package/src/features/tools/package/direct-models.ts +20 -0
  165. package/src/features/tools/package/form.ts +38 -0
  166. package/src/features/tools/package/l10n.ts +22 -0
  167. package/src/features/tools/package/package-container.tsx +285 -0
  168. package/src/features/tools/package/package-loaders.ts +22 -0
  169. package/src/features/tools/package/package-registry.ts +36 -0
  170. package/src/features/tools/package/result-markdown.ts +142 -0
  171. package/src/features/tools/package/schema.ts +379 -0
  172. package/src/features/tools/package/to-tool-module.ts +20 -0
  173. package/src/features/tools/package/to-tool-spec.ts +52 -0
  174. package/src/features/tools/package/types.ts +381 -0
  175. package/src/features/tools/pitch-deck-generator/pitch-deck-generator.container.tsx +175 -0
  176. package/src/features/tools/pitch-deck-generator/pitch-deck-generator.spec.ts +14 -0
  177. package/src/features/tools/pitch-deck-generator/pitch-deck-library-data.ts +476 -0
  178. package/src/features/tools/pitch-deck-generator/pitch-deck-library.tsx +159 -0
  179. package/src/features/tools/pitch-deck-generator/widget/ceremony-line.tsx +27 -0
  180. package/src/features/tools/pitch-deck-generator/widget/constants.ts +27 -0
  181. package/src/features/tools/pitch-deck-generator/widget/index.ts +7 -0
  182. package/src/features/tools/pitch-deck-generator/widget/pitch-deck-generator.tsx +763 -0
  183. package/src/features/tools/pitch-deck-generator/widget/result-helpers.ts +102 -0
  184. package/src/features/tools/pitch-deck-generator/widget/result-shell.tsx +263 -0
  185. package/src/features/tools/pitch-deck-generator/widget/slide-frame.tsx +106 -0
  186. package/src/features/tools/pitch-deck-generator/widget/slide-lightbox.tsx +149 -0
  187. package/src/features/tools/pitch-deck-generator/widget/style-option.tsx +54 -0
  188. package/src/features/tools/pitch-deck-generator/widget/types.ts +44 -0
  189. package/src/features/tools/product-agreement-generator/product-agreement-generator.container.tsx +137 -0
  190. package/src/features/tools/product-agreement-generator/product-agreement-generator.spec.ts +14 -0
  191. package/src/features/tools/product-agreement-generator/widget/constants.ts +27 -0
  192. package/src/features/tools/product-agreement-generator/widget/form-controls.tsx +218 -0
  193. package/src/features/tools/product-agreement-generator/widget/helpers.ts +68 -0
  194. package/src/features/tools/product-agreement-generator/widget/index.ts +7 -0
  195. package/src/features/tools/product-agreement-generator/widget/product-agreement-generator.tsx +671 -0
  196. package/src/features/tools/product-agreement-generator/widget/result-shell.tsx +473 -0
  197. package/src/features/tools/product-agreement-generator/widget/types.ts +89 -0
  198. package/src/features/tools/product-hunt-launch-planner/product-hunt-launch-planner.container.tsx +122 -0
  199. package/src/features/tools/product-hunt-launch-planner/product-hunt-launch-planner.spec.ts +15 -0
  200. package/src/features/tools/product-hunt-launch-planner/widget/constants.ts +5 -0
  201. package/src/features/tools/product-hunt-launch-planner/widget/helpers.ts +44 -0
  202. package/src/features/tools/product-hunt-launch-planner/widget/index.ts +7 -0
  203. package/src/features/tools/product-hunt-launch-planner/widget/preview-panel.tsx +143 -0
  204. package/src/features/tools/product-hunt-launch-planner/widget/product-hunt-launch-planner.tsx +504 -0
  205. package/src/features/tools/product-hunt-launch-planner/widget/result-shell.tsx +176 -0
  206. package/src/features/tools/product-hunt-launch-planner/widget/types.ts +20 -0
  207. package/src/features/tools/product-name-generator/product-name-generator.container.tsx +14 -0
  208. package/src/features/tools/product-name-generator/product-name-generator.spec.ts +15 -0
  209. package/src/features/tools/product-name-generator/widget/candidate-card.tsx +273 -0
  210. package/src/features/tools/product-name-generator/widget/constants.ts +21 -0
  211. package/src/features/tools/product-name-generator/widget/form-controls.tsx +136 -0
  212. package/src/features/tools/product-name-generator/widget/helpers.ts +41 -0
  213. package/src/features/tools/product-name-generator/widget/index.ts +7 -0
  214. package/src/features/tools/product-name-generator/widget/product-name-generator.tsx +776 -0
  215. package/src/features/tools/product-name-generator/widget/types.ts +36 -0
  216. package/src/features/tools/product-positioning-analyzer/product-positioning-analyzer.package.ts +801 -0
  217. package/src/features/tools/product-poster-generator/product-poster-generator.container.tsx +14 -0
  218. package/src/features/tools/product-poster-generator/product-poster-generator.spec.ts +15 -0
  219. package/src/features/tools/product-poster-generator/widget/constants.ts +125 -0
  220. package/src/features/tools/product-poster-generator/widget/form-controls.tsx +204 -0
  221. package/src/features/tools/product-poster-generator/widget/helpers.ts +155 -0
  222. package/src/features/tools/product-poster-generator/widget/index.ts +7 -0
  223. package/src/features/tools/product-poster-generator/widget/product-poster-generator.tsx +663 -0
  224. package/src/features/tools/product-poster-generator/widget/result-shell.tsx +12 -0
  225. package/src/features/tools/product-poster-generator/widget/types.ts +83 -0
  226. package/src/features/tools/product-ui-generator/product-ui-generator.container.tsx +116 -0
  227. package/src/features/tools/product-ui-generator/product-ui-generator.spec.ts +14 -0
  228. package/src/features/tools/product-ui-generator/widget/constants.ts +18 -0
  229. package/src/features/tools/product-ui-generator/widget/helpers.ts +11 -0
  230. package/src/features/tools/product-ui-generator/widget/index.ts +7 -0
  231. package/src/features/tools/product-ui-generator/widget/preview-panels.tsx +73 -0
  232. package/src/features/tools/product-ui-generator/widget/product-ui-generator.tsx +304 -0
  233. package/src/features/tools/product-ui-generator/widget/result-shell.tsx +118 -0
  234. package/src/features/tools/product-ui-generator/widget/types.ts +9 -0
  235. package/src/features/tools/reddit-pain-point-finder/reddit-pain-point-finder.container.tsx +113 -0
  236. package/src/features/tools/reddit-pain-point-finder/reddit-pain-point-finder.spec.ts +15 -0
  237. package/src/features/tools/reddit-pain-point-finder/widget/constants.ts +5 -0
  238. package/src/features/tools/reddit-pain-point-finder/widget/index.ts +7 -0
  239. package/src/features/tools/reddit-pain-point-finder/widget/preview-panels.tsx +73 -0
  240. package/src/features/tools/reddit-pain-point-finder/widget/reddit-pain-point-finder.tsx +281 -0
  241. package/src/features/tools/reddit-pain-point-finder/widget/result-shell.tsx +203 -0
  242. package/src/features/tools/reddit-pain-point-finder/widget/types.ts +15 -0
  243. package/src/features/tools/registry.ts +288 -0
  244. package/src/features/tools/runtime-registry.ts +186 -0
  245. package/src/features/tools/shared/create-guide-stack-container.tsx +176 -0
  246. package/src/features/tools/shared/create-standard-landing-container.tsx +163 -0
  247. package/src/features/tools/shared/tool-content-sections.tsx +659 -0
  248. package/src/features/tools/shared/tool-cta.tsx +66 -0
  249. package/src/features/tools/shared/tool-draft-view.tsx +53 -0
  250. package/src/features/tools/shared/tool-guide-section.tsx +191 -0
  251. package/src/features/tools/shared/tool-handoff.tsx +38 -0
  252. package/src/features/tools/shared/tool-mcp-badge.tsx +23 -0
  253. package/src/features/tools/shared/tool-message-translator.ts +37 -0
  254. package/src/features/tools/shared/tool-page-shell.tsx +348 -0
  255. package/src/features/tools/shared/tool-standard-generation-steps.tsx +52 -0
  256. package/src/features/tools/shared/tool-standard-landing-sections.tsx +447 -0
  257. package/src/features/tools/shared/tool-ui-registry.ts +237 -0
  258. package/src/features/tools/shared/tool-widget-slot.tsx +29 -0
  259. package/src/features/tools/slogan-generator/slogan-generator.package.ts +641 -0
  260. package/src/features/tools/social-listening-research-report/social-listening-research-report.container.tsx +124 -0
  261. package/src/features/tools/social-listening-research-report/social-listening-research-report.spec.ts +15 -0
  262. package/src/features/tools/social-listening-research-report/widget/constants.ts +4 -0
  263. package/src/features/tools/social-listening-research-report/widget/index.ts +7 -0
  264. package/src/features/tools/social-listening-research-report/widget/preview-panels.tsx +73 -0
  265. package/src/features/tools/social-listening-research-report/widget/result-shell.tsx +216 -0
  266. package/src/features/tools/social-listening-research-report/widget/social-listening-research-report.tsx +303 -0
  267. package/src/features/tools/social-listening-research-report/widget/types.ts +15 -0
  268. package/src/features/tools/social-platform-asset-adapter/social-platform-asset-adapter.container.tsx +123 -0
  269. package/src/features/tools/social-platform-asset-adapter/social-platform-asset-adapter.spec.ts +15 -0
  270. package/src/features/tools/social-platform-asset-adapter/widget/constants.ts +43 -0
  271. package/src/features/tools/social-platform-asset-adapter/widget/helpers.ts +249 -0
  272. package/src/features/tools/social-platform-asset-adapter/widget/index.ts +7 -0
  273. package/src/features/tools/social-platform-asset-adapter/widget/result-shell.tsx +350 -0
  274. package/src/features/tools/social-platform-asset-adapter/widget/section-heading.tsx +18 -0
  275. package/src/features/tools/social-platform-asset-adapter/widget/social-platform-asset-adapter.tsx +641 -0
  276. package/src/features/tools/social-platform-asset-adapter/widget/types.ts +40 -0
  277. package/src/features/tools/social-profile-kit/social-profile-kit.container.tsx +177 -0
  278. package/src/features/tools/social-profile-kit/social-profile-kit.spec.ts +15 -0
  279. package/src/features/tools/social-profile-kit/widget/context-editor.tsx +171 -0
  280. package/src/features/tools/social-profile-kit/widget/generation-runtime.ts +281 -0
  281. package/src/features/tools/social-profile-kit/widget/index.ts +7 -0
  282. package/src/features/tools/social-profile-kit/widget/input-panel.tsx +294 -0
  283. package/src/features/tools/social-profile-kit/widget/platform-dock.tsx +115 -0
  284. package/src/features/tools/social-profile-kit/widget/profile-canvas.tsx +318 -0
  285. package/src/features/tools/social-profile-kit/widget/profile-preview/bluesky-preview.tsx +188 -0
  286. package/src/features/tools/social-profile-kit/widget/profile-preview/facebook-preview.tsx +168 -0
  287. package/src/features/tools/social-profile-kit/widget/profile-preview/index.ts +1 -0
  288. package/src/features/tools/social-profile-kit/widget/profile-preview/instagram-preview.tsx +278 -0
  289. package/src/features/tools/social-profile-kit/widget/profile-preview/linkedin-preview.tsx +358 -0
  290. package/src/features/tools/social-profile-kit/widget/profile-preview/profile-preview.tsx +348 -0
  291. package/src/features/tools/social-profile-kit/widget/profile-preview/shared.tsx +391 -0
  292. package/src/features/tools/social-profile-kit/widget/profile-preview/threads-preview.tsx +148 -0
  293. package/src/features/tools/social-profile-kit/widget/profile-preview/tiktok-preview.tsx +319 -0
  294. package/src/features/tools/social-profile-kit/widget/profile-preview/x-preview.tsx +341 -0
  295. package/src/features/tools/social-profile-kit/widget/profile-preview/youtube-preview.tsx +297 -0
  296. package/src/features/tools/social-profile-kit/widget/social-profile-kit-generator.tsx +1059 -0
  297. package/src/features/tools/social-profile-kit/widget/types.ts +104 -0
  298. package/src/features/tools/spec-registry.ts +158 -0
  299. package/src/features/tools/startup-idea-research/startup-idea-research.container.tsx +111 -0
  300. package/src/features/tools/startup-idea-research/startup-idea-research.spec.ts +15 -0
  301. package/src/features/tools/startup-idea-research/widget/constants.ts +11 -0
  302. package/src/features/tools/startup-idea-research/widget/index.ts +7 -0
  303. package/src/features/tools/startup-idea-research/widget/preview-panels.tsx +67 -0
  304. package/src/features/tools/startup-idea-research/widget/result-shell.tsx +323 -0
  305. package/src/features/tools/startup-idea-research/widget/startup-idea-research.tsx +272 -0
  306. package/src/features/tools/startup-idea-research/widget/types.ts +21 -0
  307. package/src/features/tools/tarot-reading/tarot-reading.container.tsx +412 -0
  308. package/src/features/tools/tarot-reading/tarot-reading.spec.ts +15 -0
  309. package/src/features/tools/tarot-reading/widget/cards.tsx +152 -0
  310. package/src/features/tools/tarot-reading/widget/constants.ts +69 -0
  311. package/src/features/tools/tarot-reading/widget/deck-view.tsx +86 -0
  312. package/src/features/tools/tarot-reading/widget/deck.ts +86 -0
  313. package/src/features/tools/tarot-reading/widget/index.ts +7 -0
  314. package/src/features/tools/tarot-reading/widget/landing-view.tsx +209 -0
  315. package/src/features/tools/tarot-reading/widget/reading-copy.tsx +138 -0
  316. package/src/features/tools/tarot-reading/widget/reading-view.tsx +189 -0
  317. package/src/features/tools/tarot-reading/widget/reveal-view.tsx +50 -0
  318. package/src/features/tools/tarot-reading/widget/ritual-view.tsx +276 -0
  319. package/src/features/tools/tarot-reading/widget/tarot-reading.tsx +262 -0
  320. package/src/features/tools/tarot-reading/widget/types.ts +22 -0
  321. package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.container.tsx +114 -0
  322. package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.spec.ts +14 -0
  323. package/src/features/tools/twitter-gif-downloader/widget/index.ts +7 -0
  324. package/src/features/tools/twitter-gif-downloader/widget/twitter-gif-downloader.tsx +351 -0
  325. package/src/features/tools/types.ts +68 -0
  326. package/src/features/tools/user-interview-guide-generator/user-interview-guide-generator.package.ts +774 -0
  327. package/src/features/tools/user-interview-insight-report-generator/user-interview-insight-report-generator.container.tsx +23 -0
  328. package/src/features/tools/user-interview-insight-report-generator/user-interview-insight-report-generator.spec.ts +14 -0
  329. package/src/features/tools/user-interview-insight-report-generator/widget/constants.ts +8 -0
  330. package/src/features/tools/user-interview-insight-report-generator/widget/helpers.ts +4 -0
  331. package/src/features/tools/user-interview-insight-report-generator/widget/index.ts +7 -0
  332. package/src/features/tools/user-interview-insight-report-generator/widget/preview-panels.tsx +55 -0
  333. package/src/features/tools/user-interview-insight-report-generator/widget/result-shell.tsx +122 -0
  334. package/src/features/tools/user-interview-insight-report-generator/widget/types.ts +16 -0
  335. package/src/features/tools/user-interview-insight-report-generator/widget/user-interview-insight-report-generator.tsx +293 -0
  336. package/src/features/tools/user-interview-record-generator/user-interview-record-generator.container.tsx +18 -0
  337. package/src/features/tools/user-interview-record-generator/user-interview-record-generator.spec.ts +14 -0
  338. package/src/features/tools/user-interview-record-generator/widget/constants.ts +9 -0
  339. package/src/features/tools/user-interview-record-generator/widget/helpers.ts +4 -0
  340. package/src/features/tools/user-interview-record-generator/widget/index.ts +7 -0
  341. package/src/features/tools/user-interview-record-generator/widget/preview-panels.tsx +48 -0
  342. package/src/features/tools/user-interview-record-generator/widget/result-shell.tsx +128 -0
  343. package/src/features/tools/user-interview-record-generator/widget/types.ts +16 -0
  344. package/src/features/tools/user-interview-record-generator/widget/user-interview-record-generator.tsx +305 -0
  345. package/src/features/tools/utm-builder/utm-builder.package.ts +846 -0
  346. package/src/features/tools/widget-registry.ts +73 -0
  347. package/src/generated/mcp-tools-registry.json +17 -0
  348. package/src/host/client-proxy.test.ts +33 -0
  349. package/src/host/client.ts +678 -0
  350. package/src/host/server.ts +119 -0
  351. package/src/i18n/client.ts +11 -0
  352. package/src/i18n/locale-fallback.ts +38 -0
  353. package/src/i18n/locale.ts +18 -0
  354. package/src/i18n/messages/en/page/tools.ts +124 -0
  355. package/src/i18n/messages/en/tools/app-icon-resizer.ts +244 -0
  356. package/src/i18n/messages/en/tools/app-store-screenshot-generator.ts +145 -0
  357. package/src/i18n/messages/en/tools/build-in-public-story-generator.ts +229 -0
  358. package/src/i18n/messages/en/tools/cold-start-channel-selector.ts +423 -0
  359. package/src/i18n/messages/en/tools/commercial-bp-generator.ts +304 -0
  360. package/src/i18n/messages/en/tools/community-feedback-inbox.ts +218 -0
  361. package/src/i18n/messages/en/tools/community-pain-point-extractor.ts +230 -0
  362. package/src/i18n/messages/en/tools/community-post-risk-checker.ts +209 -0
  363. package/src/i18n/messages/en/tools/competitor-analysis.ts +197 -0
  364. package/src/i18n/messages/en/tools/email-template-generator.ts +302 -0
  365. package/src/i18n/messages/en/tools/engine.ts +69 -0
  366. package/src/i18n/messages/en/tools/gtm-readiness-checklist.ts +166 -0
  367. package/src/i18n/messages/en/tools/index.ts +73 -0
  368. package/src/i18n/messages/en/tools/koko-codex-assistant.ts +171 -0
  369. package/src/i18n/messages/en/tools/logo-generator.ts +173 -0
  370. package/src/i18n/messages/en/tools/market-forecast-report.ts +228 -0
  371. package/src/i18n/messages/en/tools/million-user-growth-test.ts +386 -0
  372. package/src/i18n/messages/en/tools/og-image-generator.ts +172 -0
  373. package/src/i18n/messages/en/tools/pitch-deck-generator.ts +358 -0
  374. package/src/i18n/messages/en/tools/product-agreement-generator.ts +411 -0
  375. package/src/i18n/messages/en/tools/product-hunt-launch-planner.ts +272 -0
  376. package/src/i18n/messages/en/tools/product-name-generator.ts +383 -0
  377. package/src/i18n/messages/en/tools/product-poster-generator.ts +294 -0
  378. package/src/i18n/messages/en/tools/product-ui-generator.ts +234 -0
  379. package/src/i18n/messages/en/tools/reddit-pain-point-finder.ts +163 -0
  380. package/src/i18n/messages/en/tools/shared.ts +24 -0
  381. package/src/i18n/messages/en/tools/social-listening-research-report.ts +185 -0
  382. package/src/i18n/messages/en/tools/social-media-profile-generator.ts +22 -0
  383. package/src/i18n/messages/en/tools/social-platform-asset-adapter.ts +287 -0
  384. package/src/i18n/messages/en/tools/social-profile-kit.ts +150 -0
  385. package/src/i18n/messages/en/tools/startup-idea-research.ts +170 -0
  386. package/src/i18n/messages/en/tools/tarot-reading.ts +230 -0
  387. package/src/i18n/messages/en/tools/twitter-gif-downloader.ts +145 -0
  388. package/src/i18n/messages/en/tools/user-interview-insight-report-generator.ts +242 -0
  389. package/src/i18n/messages/en/tools/user-interview-record-generator.ts +244 -0
  390. package/src/i18n/messages/en/tools-ui.ts +704 -0
  391. package/src/i18n/messages/zh/page/tools.ts +124 -0
  392. package/src/i18n/messages/zh/tools/app-icon-resizer.ts +242 -0
  393. package/src/i18n/messages/zh/tools/app-store-screenshot-generator.ts +145 -0
  394. package/src/i18n/messages/zh/tools/build-in-public-story-generator.ts +230 -0
  395. package/src/i18n/messages/zh/tools/cold-start-channel-selector.ts +422 -0
  396. package/src/i18n/messages/zh/tools/commercial-bp-generator.ts +302 -0
  397. package/src/i18n/messages/zh/tools/community-feedback-inbox.ts +217 -0
  398. package/src/i18n/messages/zh/tools/community-pain-point-extractor.ts +230 -0
  399. package/src/i18n/messages/zh/tools/community-post-risk-checker.ts +200 -0
  400. package/src/i18n/messages/zh/tools/competitor-analysis.ts +192 -0
  401. package/src/i18n/messages/zh/tools/email-template-generator.ts +302 -0
  402. package/src/i18n/messages/zh/tools/engine.ts +68 -0
  403. package/src/i18n/messages/zh/tools/gtm-readiness-checklist.ts +166 -0
  404. package/src/i18n/messages/zh/tools/index.ts +73 -0
  405. package/src/i18n/messages/zh/tools/koko-codex-assistant.ts +170 -0
  406. package/src/i18n/messages/zh/tools/logo-generator.ts +172 -0
  407. package/src/i18n/messages/zh/tools/market-forecast-report.ts +228 -0
  408. package/src/i18n/messages/zh/tools/million-user-growth-test.ts +385 -0
  409. package/src/i18n/messages/zh/tools/og-image-generator.ts +173 -0
  410. package/src/i18n/messages/zh/tools/pitch-deck-generator.ts +358 -0
  411. package/src/i18n/messages/zh/tools/product-agreement-generator.ts +401 -0
  412. package/src/i18n/messages/zh/tools/product-hunt-launch-planner.ts +267 -0
  413. package/src/i18n/messages/zh/tools/product-name-generator.ts +383 -0
  414. package/src/i18n/messages/zh/tools/product-poster-generator.ts +282 -0
  415. package/src/i18n/messages/zh/tools/product-ui-generator.ts +234 -0
  416. package/src/i18n/messages/zh/tools/reddit-pain-point-finder.ts +162 -0
  417. package/src/i18n/messages/zh/tools/shared.ts +24 -0
  418. package/src/i18n/messages/zh/tools/social-listening-research-report.ts +181 -0
  419. package/src/i18n/messages/zh/tools/social-media-profile-generator.ts +22 -0
  420. package/src/i18n/messages/zh/tools/social-platform-asset-adapter.ts +284 -0
  421. package/src/i18n/messages/zh/tools/social-profile-kit.ts +150 -0
  422. package/src/i18n/messages/zh/tools/startup-idea-research.ts +165 -0
  423. package/src/i18n/messages/zh/tools/tarot-reading.ts +228 -0
  424. package/src/i18n/messages/zh/tools/twitter-gif-downloader.ts +138 -0
  425. package/src/i18n/messages/zh/tools/user-interview-insight-report-generator.ts +224 -0
  426. package/src/i18n/messages/zh/tools/user-interview-record-generator.ts +226 -0
  427. package/src/i18n/messages/zh/tools-ui.ts +684 -0
  428. package/src/i18n/messages/zh-tw/page/tools.ts +115 -0
  429. package/src/i18n/messages/zh-tw/tools/app-icon-resizer.ts +242 -0
  430. package/src/i18n/messages/zh-tw/tools/app-store-screenshot-generator.ts +145 -0
  431. package/src/i18n/messages/zh-tw/tools/build-in-public-story-generator.ts +230 -0
  432. package/src/i18n/messages/zh-tw/tools/cold-start-channel-selector.ts +440 -0
  433. package/src/i18n/messages/zh-tw/tools/commercial-bp-generator.ts +302 -0
  434. package/src/i18n/messages/zh-tw/tools/community-feedback-inbox.ts +217 -0
  435. package/src/i18n/messages/zh-tw/tools/community-pain-point-extractor.ts +230 -0
  436. package/src/i18n/messages/zh-tw/tools/community-post-risk-checker.ts +200 -0
  437. package/src/i18n/messages/zh-tw/tools/competitor-analysis.ts +192 -0
  438. package/src/i18n/messages/zh-tw/tools/email-template-generator.ts +302 -0
  439. package/src/i18n/messages/zh-tw/tools/engine.ts +68 -0
  440. package/src/i18n/messages/zh-tw/tools/gtm-readiness-checklist.ts +166 -0
  441. package/src/i18n/messages/zh-tw/tools/index.ts +73 -0
  442. package/src/i18n/messages/zh-tw/tools/koko-codex-assistant.ts +170 -0
  443. package/src/i18n/messages/zh-tw/tools/logo-generator.ts +71 -0
  444. package/src/i18n/messages/zh-tw/tools/market-forecast-report.ts +228 -0
  445. package/src/i18n/messages/zh-tw/tools/million-user-growth-test.ts +385 -0
  446. package/src/i18n/messages/zh-tw/tools/og-image-generator.ts +173 -0
  447. package/src/i18n/messages/zh-tw/tools/pitch-deck-generator.ts +358 -0
  448. package/src/i18n/messages/zh-tw/tools/product-agreement-generator.ts +401 -0
  449. package/src/i18n/messages/zh-tw/tools/product-hunt-launch-planner.ts +267 -0
  450. package/src/i18n/messages/zh-tw/tools/product-name-generator.ts +383 -0
  451. package/src/i18n/messages/zh-tw/tools/product-poster-generator.ts +282 -0
  452. package/src/i18n/messages/zh-tw/tools/product-ui-generator.ts +234 -0
  453. package/src/i18n/messages/zh-tw/tools/reddit-pain-point-finder.ts +162 -0
  454. package/src/i18n/messages/zh-tw/tools/shared.ts +24 -0
  455. package/src/i18n/messages/zh-tw/tools/social-listening-research-report.ts +181 -0
  456. package/src/i18n/messages/zh-tw/tools/social-media-profile-generator.ts +22 -0
  457. package/src/i18n/messages/zh-tw/tools/social-platform-asset-adapter.ts +284 -0
  458. package/src/i18n/messages/zh-tw/tools/social-profile-kit.ts +150 -0
  459. package/src/i18n/messages/zh-tw/tools/startup-idea-research.ts +165 -0
  460. package/src/i18n/messages/zh-tw/tools/tarot-reading.ts +228 -0
  461. package/src/i18n/messages/zh-tw/tools/twitter-gif-downloader.ts +138 -0
  462. package/src/i18n/messages/zh-tw/tools/user-interview-insight-report-generator.ts +224 -0
  463. package/src/i18n/messages/zh-tw/tools/user-interview-record-generator.ts +226 -0
  464. package/src/i18n/messages/zh-tw/tools-ui.ts +525 -0
  465. package/src/index.ts +15 -0
  466. package/src/lib/activity-task-handoff.ts +404 -0
  467. package/src/lib/api/errors.ts +39 -0
  468. package/src/lib/app-origin.ts +30 -0
  469. package/src/lib/fact-claim-contract.ts +68 -0
  470. package/src/lib/fake-delay.ts +3 -0
  471. package/src/lib/file/download.ts +10 -0
  472. package/src/lib/routing/locale-paths.ts +27 -0
  473. package/src/lib/seo-meta.ts +3 -0
  474. package/src/lib/tools/app-icon-resizer-schema.ts +191 -0
  475. package/src/lib/tools/app-store-screenshot-generator-schema.ts +185 -0
  476. package/src/lib/tools/build-in-public-story-generator-schema.ts +67 -0
  477. package/src/lib/tools/build-in-public-story-generator.format.ts +507 -0
  478. package/src/lib/tools/cold-start-channel-selector-schema.ts +147 -0
  479. package/src/lib/tools/commercial-bp-generator-schema.ts +222 -0
  480. package/src/lib/tools/community-feedback-inbox-schema.ts +125 -0
  481. package/src/lib/tools/community-feedback-inbox.format.ts +764 -0
  482. package/src/lib/tools/community-pain-point-extractor-schema.ts +166 -0
  483. package/src/lib/tools/community-post-risk-checker-schema.ts +99 -0
  484. package/src/lib/tools/community-post-risk-checker.format.ts +557 -0
  485. package/src/lib/tools/competitor-analysis-schema.ts +144 -0
  486. package/src/lib/tools/draft-preview-access.ts +3 -0
  487. package/src/lib/tools/draft-store.ts +69 -0
  488. package/src/lib/tools/email-template-generator-schema.ts +124 -0
  489. package/src/lib/tools/gtm-checklist-copy.ts +57 -0
  490. package/src/lib/tools/gtm-checklist-structure.ts +37 -0
  491. package/src/lib/tools/image-download.ts +68 -0
  492. package/src/lib/tools/input-quality.ts +97 -0
  493. package/src/lib/tools/logo-generator-schema.ts +224 -0
  494. package/src/lib/tools/market-forecast-report-schema.ts +299 -0
  495. package/src/lib/tools/mcp-registry.ts +16 -0
  496. package/src/lib/tools/mcp-types.ts +18 -0
  497. package/src/lib/tools/million-user-growth-test-schema.ts +49 -0
  498. package/src/lib/tools/million-user-growth-test.ts +181 -0
  499. package/src/lib/tools/og-image-generator-render.ts +448 -0
  500. package/src/lib/tools/og-image-generator-schema.ts +140 -0
  501. package/src/lib/tools/ops-catalog.ts +102 -0
  502. package/src/lib/tools/pitch-deck-generator-schema.ts +182 -0
  503. package/src/lib/tools/pitch-deck-package.ts +0 -0
  504. package/src/lib/tools/product-agreement-generator-schema.ts +168 -0
  505. package/src/lib/tools/product-hunt-launch-planner-schema.ts +136 -0
  506. package/src/lib/tools/product-hunt-launch-planner.format.ts +72 -0
  507. package/src/lib/tools/product-name-generator-schema.ts +563 -0
  508. package/src/lib/tools/product-poster-generator-schema.ts +215 -0
  509. package/src/lib/tools/product-ui-generator-schema.ts +157 -0
  510. package/src/lib/tools/reddit-pain-point-finder-schema.ts +88 -0
  511. package/src/lib/tools/resolve-tool-locale-copy.ts +75 -0
  512. package/src/lib/tools/slug.ts +60 -0
  513. package/src/lib/tools/social-listening-research-report-schema.ts +105 -0
  514. package/src/lib/tools/social-platform-asset-adapter-schema.ts +152 -0
  515. package/src/lib/tools/social-profile-kit.constants.ts +12 -0
  516. package/src/lib/tools/social-profile-kit.generation.ts +257 -0
  517. package/src/lib/tools/social-profile-kit.input.ts +290 -0
  518. package/src/lib/tools/social-profile-kit.manual.ts +481 -0
  519. package/src/lib/tools/social-profile-kit.package.ts +220 -0
  520. package/src/lib/tools/social-profile-kit.schema.ts +328 -0
  521. package/src/lib/tools/startup-idea-research-schema.ts +107 -0
  522. package/src/lib/tools/tarot-imagery.ts +89 -0
  523. package/src/lib/tools/tarot-reading.ts +1044 -0
  524. package/src/lib/tools/tool-message-keys.ts +18 -0
  525. package/src/lib/tools/types.ts +32 -0
  526. package/src/lib/tools/user-interview.format.ts +147 -0
  527. package/src/lib/tools/user-interview.generation.ts +670 -0
  528. package/src/lib/tools/user-interview.schema.ts +192 -0
  529. package/src/lib/zip.ts +106 -0
  530. package/src/services/tools/handlers/gtm-readiness-checklist.ts +71 -0
  531. package/src/services/tools/handlers/types.ts +7 -0
@@ -0,0 +1,272 @@
1
+ const productHuntLaunchPlanner = {
2
+ meta: {
3
+ title: "Product Hunt Launch Planner",
4
+ description: "Enter your product, audience, and launch readiness to create a Product Hunt checklist, launch page asset pack, day-of operations table, and platform-risk review notes.",
5
+ intro: "Turn scattered product notes into an executable Product Hunt launch workflow: what to fix, what to write, who handles launch day, and which asks to avoid.",
6
+ category: "Launch tools",
7
+ keywords: [
8
+ "Product Hunt launch planner",
9
+ "Product Hunt launch checklist",
10
+ "Product Hunt launch template",
11
+ "PH launch assets",
12
+ "startup launch workflow",
13
+ ],
14
+ inputSignal: "Product brief + launch readiness",
15
+ outputSignal: "Checklist + assets + day-of plan",
16
+ boundarySignal: "Review prototype; no auto-posting or vote tasks",
17
+ },
18
+ examples: [
19
+ {
20
+ label: "AI launch material tool",
21
+ input: "Product: a tool that helps indie makers generate launch design assets; audience: makers preparing for Product Hunt or app-store launches; stage: beta.",
22
+ expectedOutput: "A checklist, launch page asset pack, day-of operations plan, reply prep, outreach boundaries, recap actions, and copyable Markdown.",
23
+ },
24
+ ],
25
+ guide: {
26
+ heroVisualAlt:
27
+ "A Product Hunt launch kit with checklist cards, copy assets, and a warm coral launch accent.",
28
+ workspaceHeading: "Build a Product Hunt launch checklist and asset pack",
29
+ workspaceHint:
30
+ "Enter the minimum product context and current readiness. This review version submits an online task and only renders the structured launch checklist, copy drafts, launch-day plan, and review notes after writeback.",
31
+ workspaceBadge: "Review prototype",
32
+ outputs: "What you get from the planner",
33
+ outputItems: [
34
+ {
35
+ title: "Readiness score",
36
+ body: "See whether your account, community, assets, URL, and timing are ready enough to schedule.",
37
+ },
38
+ {
39
+ title: "Execution checklist",
40
+ body: "Get phase-by-phase tasks for account prep, launch assets, launch day, and recap.",
41
+ },
42
+ {
43
+ title: "Launch page assets",
44
+ body: "Draft taglines, a short description, maker comment, topic ideas, gallery brief, and social copy.",
45
+ },
46
+ {
47
+ title: "Rules and review notes",
48
+ body: "Keep vote asks, unsupported claims, and missing product proof visible before you publish.",
49
+ },
50
+ ],
51
+ supportHeading: "Use it when you need a launch plan, not another generic template",
52
+ supportVisualAlt:
53
+ "Messy launch notes turning into a clean Product Hunt asset pack.",
54
+ supportItems: [
55
+ "Works best for indie makers, early SaaS teams, developer tools, apps, open-source brands, and launchable product updates.",
56
+ "Accepts a public URL when you have one, but can also start from a manual product brief for beta or waitlist products.",
57
+ "Focuses on Product Hunt page assets, comment readiness, social outreach boundaries, and day-of operations.",
58
+ "Treats Product Hunt as a manual launch workflow. Final posting still happens on Product Hunt.",
59
+ ],
60
+ boundaryHeading: "The prototype keeps Product Hunt boundaries visible",
61
+ boundaryVisualAlt:
62
+ "A review desk with launch rule markers and a human review checklist.",
63
+ boundaryItems: [
64
+ "It submits an online Agent task for planning, but it does not post to Product Hunt, create maker accounts, submit products, track ranking, or connect to Product Hunt APIs.",
65
+ "It does not create upvote tasks, paid voting plans, fake comments, or coordinated vote instructions.",
66
+ "It writes outreach as trial and feedback invitations, not as upvote requests.",
67
+ "It marks the output as a draft that still needs human review against the live product and Product Hunt rules.",
68
+ ],
69
+ failureHeading: "If the plan looks weak, check these inputs",
70
+ failureItems: [
71
+ "The product description is too generic, so the tagline cannot express a sharp user outcome.",
72
+ "The target audience is too broad, which makes the first comment and outreach copy sound vague.",
73
+ "There is no public URL, demo, waitlist, or proof point to anchor the launch.",
74
+ "The Product Hunt account or launch assets are not ready, so the schedule should move back.",
75
+ ],
76
+ resultUseHeading: "Use the result as a launch-day operating document",
77
+ resultUseVisualAlt:
78
+ "A Product Hunt launch-day operations timeline with reply cards and recap notes.",
79
+ resultUseItems: [
80
+ "Copy the Markdown into your launch doc and assign owners before the launch date.",
81
+ "Paste the tagline, short description, and maker comment into Product Hunt only after human review.",
82
+ "Use the supporter note for warm users, but keep the ask focused on trial, comment, and feedback.",
83
+ "After launch, turn repeated comments into FAQ updates, social follow-ups, and product fixes.",
84
+ ],
85
+ whyTomakoHeading: "Why use Tomako instead of a static PH template",
86
+ whyTomakoItems: [
87
+ {
88
+ title: "It starts from readiness",
89
+ body: "A generic template assumes you are ready. This one exposes whether account, audience, URL, and assets are still blocking you.",
90
+ },
91
+ {
92
+ title: "It separates assets from operations",
93
+ body: "Product Hunt success is not only a tagline. You also need launch-day coverage, replies, and post-launch learning.",
94
+ },
95
+ {
96
+ title: "It keeps platform risk in the workflow",
97
+ body: "Vote manipulation and overpromising are treated as risks to review, not growth hacks to automate.",
98
+ },
99
+ {
100
+ title: "It exports a usable document",
101
+ body: "The result is structured enough to copy into a launch doc, assign owners, and keep editing.",
102
+ },
103
+ ],
104
+ standardHeading: "A good Product Hunt launch planner should be concrete and careful",
105
+ standardVisualAlt:
106
+ "A polished launch planning standard card with Product Hunt assets and review checkpoints.",
107
+ standardItems: [
108
+ "Quality: output should include actual copy, not only advice about writing copy.",
109
+ "Ease of use: the first version should require only product basics, not a full launch PRD.",
110
+ "Trust: the plan should clearly say what it cannot do and what a human must review.",
111
+ "Platform fit: outreach should invite trial and feedback, not encourage coordinated upvotes.",
112
+ "Actionability: every checklist item should have an owner, a status, and a next action.",
113
+ ],
114
+ faq: "FAQ",
115
+ faqItems: [
116
+ {
117
+ question: "Does this publish my product to Product Hunt?",
118
+ answer:
119
+ "No. It creates a draft plan and copy assets. Final submission, scheduling, and account actions must happen manually on Product Hunt.",
120
+ },
121
+ {
122
+ question: "Can I use it without a product URL?",
123
+ answer:
124
+ "Yes, but the output will be less specific. A public website, demo, waitlist, or docs page gives the planner stronger proof and clearer copy.",
125
+ },
126
+ {
127
+ question: "Will it help me get more upvotes?",
128
+ answer:
129
+ "It helps you prepare a clearer launch and better feedback asks. It does not create vote tasks, incentives, or coordinated upvote campaigns.",
130
+ },
131
+ {
132
+ question: "Is this connected to a real Agent yet?",
133
+ answer:
134
+ "This review version submits an online Agent task and waits for a structured Skills-OL writeback. It is still not Product Hunt automation.",
135
+ },
136
+ ],
137
+ ctaHint:
138
+ "Not ready for Product Hunt yet? Check GTM readiness first, or decide whether Product Hunt should be your first launch channel.",
139
+ ctaPrimary: "Check GTM readiness",
140
+ ctaSecondary: "Compare launch channels",
141
+ },
142
+ widget: {
143
+ formTitle: "Launch brief",
144
+ formHint:
145
+ "Use a real product description and audience. Results come only from online structured writeback; the widget does not use a frontend template fallback.",
146
+ productNameLabel: "Product name",
147
+ productNamePlaceholder: "Tomako",
148
+ productUrlLabel: "Product URL",
149
+ productUrlPlaceholder: "https://example.com",
150
+ oneLinerLabel: "What does the product help users do?",
151
+ oneLinerPlaceholder:
152
+ "Helps indie makers turn product context into launch-ready marketing assets and day-of workflows.",
153
+ audienceLabel: "Who is the launch for?",
154
+ audiencePlaceholder:
155
+ "Indie makers and early SaaS teams preparing their first public launch.",
156
+ stageLabel: "Product stage",
157
+ goalLabel: "Launch goal",
158
+ advancedTitle: "Readiness details",
159
+ launchDateLabel: "Target launch date",
160
+ launchDatePlaceholder: "Next Tuesday / 2026-07-14",
161
+ accountLabel: "Product Hunt account",
162
+ communityLabel: "Existing audience",
163
+ assetLabel: "Asset readiness",
164
+ generate: "Generate launch workflow",
165
+ generating: "Generating...",
166
+ status: {
167
+ idle: "Draft preview",
168
+ submitting: "Submitting",
169
+ running: "Generating",
170
+ done: "Plan ready",
171
+ error: "Needs attention",
172
+ },
173
+ previewItems: [
174
+ "Checklist, assets, and launch-day ops",
175
+ "No auto-posting or vote-task automation",
176
+ "Copyable Markdown export",
177
+ ],
178
+ stages: {
179
+ idea: "Idea / validation",
180
+ beta: "Beta or waitlist",
181
+ launched: "Already launched",
182
+ majorUpdate: "Major update or relaunch",
183
+ },
184
+ goals: {
185
+ feedback: "Feedback",
186
+ traffic: "Traffic",
187
+ users: "First users",
188
+ credibility: "Public credibility",
189
+ },
190
+ accountStates: {
191
+ yes: "Ready",
192
+ no: "Not created",
193
+ unsure: "Not sure",
194
+ },
195
+ communityStates: {
196
+ none: "No audience yet",
197
+ small: "Small warm list",
198
+ active: "Active users or community",
199
+ },
200
+ assetStates: {
201
+ rough: "Rough notes only",
202
+ some: "Some copy or visuals",
203
+ ready: "Launch assets ready",
204
+ },
205
+ statusLabels: {
206
+ ready: "Ready",
207
+ needsWork: "Needs work",
208
+ manual: "Manual",
209
+ },
210
+ errors: {
211
+ validation: {
212
+ title: "Add the minimum launch brief",
213
+ body: "Product name, a concrete product outcome, and target audience are required before the planner can create a useful checklist.",
214
+ },
215
+ weakInput: {
216
+ title: "Use a real product description",
217
+ body: "The brief still looks like placeholder or too-short text. Add what the product does, who uses it, and why the launch matters.",
218
+ },
219
+ submitFailed: {
220
+ title: "Online task submission failed",
221
+ body: "The planner could not create a generation task. Try again later or check whether the task gateway is available.",
222
+ },
223
+ taskFailed: {
224
+ title: "Generation task failed",
225
+ body: "The Agent task did not finish. Keep the task ID for logs and confirm the Skills-OL script is deployed and able to write back.",
226
+ },
227
+ resultTimeout: {
228
+ title: "Structured result is not ready",
229
+ body: "The task may still be running, or Skills-OL did not complete the writeback. This page does not use a local template to fake success.",
230
+ },
231
+ wrongResultType: {
232
+ title: "Unexpected result type",
233
+ body: "The writeback was not a Product Hunt launch plan, so the frontend refused to render it.",
234
+ },
235
+ invalidResultSchema: {
236
+ title: "Result shape failed validation",
237
+ body: "The Agent wrote a result, but the fields did not pass schema validation. The Skills-OL output contract needs a fix.",
238
+ },
239
+ resultWritebackMissing: {
240
+ title: "Structured writeback is missing",
241
+ body: "The task completed without a Skill Result. Confirm the writeback script used the correct task ID and HTTPS API URL.",
242
+ },
243
+ },
244
+ resultPendingTitle: "Asking the Agent to build the launch plan",
245
+ resultPendingHint:
246
+ "The page waits for Skills-OL to write back a structured result. It will not show the final plan until resultType and schema validation pass.",
247
+ taskId: "Task ID: {taskId}",
248
+ resultReady: "Generated launch workflow",
249
+ copied: "Copied",
250
+ copy: "Copy Markdown",
251
+ download: "Download",
252
+ reset: "Reset",
253
+ primaryRisk: "Primary risk",
254
+ missingInfo: "Missing information",
255
+ checklist: "Execution checklist",
256
+ assetPack: "Launch page asset pack",
257
+ taglines: "Tagline options",
258
+ topics: "Topic ideas",
259
+ description: "Short description",
260
+ thumbnail: "Thumbnail brief",
261
+ makerComment: "Maker comment",
262
+ gallery: "Gallery brief",
263
+ socialPost: "Social post",
264
+ supporterNote: "Supporter note",
265
+ launchDay: "Launch day plan",
266
+ reviewChecklist: "Human review checklist",
267
+ risks: "Risk notes",
268
+ owner: "Owner: {owner}",
269
+ },
270
+ } as const;
271
+
272
+ export default productHuntLaunchPlanner;
@@ -0,0 +1,383 @@
1
+ const productNameGenerator = {
2
+ meta: {
3
+ title: "AI Product Name Generator for SaaS",
4
+ displayTitle: "Product Name Generator",
5
+ description: "Enter your product idea, users, style, and domain extensions to get 3-5 name candidates, then screen finalists for domain, search, and trademark risks.",
6
+ intro: "Built for early app, web, SaaS, and AI product naming. Start with a small shortlist backed by clear rationale, then run deeper domain, search-noise, and trademark entrypoint checks only for names worth keeping.",
7
+ category: "Brand tools",
8
+ keywords: [
9
+ "product name generator",
10
+ "app name generator",
11
+ "SaaS naming",
12
+ "AI product naming",
13
+ "domain pre-screening",
14
+ "startup name ideas",
15
+ ],
16
+ },
17
+ guide: {
18
+ workspaceHeading: "Product Name Generator",
19
+ workspaceHint:
20
+ "Enter a product idea and get a screened shortlist.",
21
+ workspaceBadge: "3-5 names",
22
+ standard: {
23
+ benefits: {
24
+ title: "What this product name generator gives you",
25
+ cards: [
26
+ {
27
+ title: "A shortlist worth reviewing",
28
+ body: "Start with 3-5 candidate names, each backed by a core idea and basic brand signals, so the naming discussion stays focused.",
29
+ },
30
+ {
31
+ title: "Fewer early naming traps",
32
+ body: "Pronunciation, length, style fit, domain extensions, and search noise are separated so weak directions can be removed early.",
33
+ },
34
+ {
35
+ title: "Clear review boundaries",
36
+ body: "Domain and trademark checks are treated as pre-screening entrypoints and risk notes, not as legal clearance or guaranteed availability.",
37
+ },
38
+ ],
39
+ },
40
+ imageTextSections: [
41
+ {
42
+ id: "name-shortlist",
43
+ title: "Turn a rough product idea into a reviewable name shortlist",
44
+ body: [
45
+ "Early naming work breaks down when you receive dozens of similar words without a reason to choose. This tool starts with a small set of directions shaped by the product idea, audience, and naming vibe.",
46
+ "Each candidate includes the core idea and basic fit notes, making it easier for product, design, growth, and founder teams to decide what deserves another look.",
47
+ ],
48
+ image: {
49
+ src: "/tools/product-name-generator-section-primary-8bit-v2.webp",
50
+ alt: "Pixel-art product name generator visual showing a rough product idea becoming a focused name shortlist.",
51
+ },
52
+ imageFirst: true,
53
+ },
54
+ {
55
+ id: "name-variations",
56
+ title: "Use style, market, and domain preferences to shape the direction",
57
+ body: [
58
+ "The same product can need a clear, technical, friendly, premium, or invented name. The form keeps only the controls that materially change the result.",
59
+ "Target market and preferred extensions influence pronunciation, length, and the next review path, instead of treating every app, SaaS, and AI tool as the same naming problem.",
60
+ ],
61
+ image: {
62
+ src: "/tools/product-name-generator-section-variation-8bit-v2.webp",
63
+ alt: "Pixel-art naming direction visual showing style, market, and domain preferences shaping candidate names.",
64
+ },
65
+ },
66
+ {
67
+ id: "name-review",
68
+ title: "Decide whether a name is worth deeper checks before spending time on it",
69
+ body: [
70
+ "Domain, search, and trademark pre-screening continue only after you expand one candidate. That keeps the first pass faster and avoids spending analysis on names you will discard.",
71
+ "Expanded checks provide search entrypoints, risk notes, and next actions. Final commercial use still needs registrar confirmation and professional trademark review.",
72
+ ],
73
+ image: {
74
+ src: "/tools/product-name-generator-section-support-8bit-v2.webp",
75
+ alt: "Pixel-art candidate review visual showing domain, search, and trademark pre-screening signals.",
76
+ },
77
+ imageFirst: true,
78
+ },
79
+ ],
80
+ generation: {
81
+ title: "How to generate a product name shortlist",
82
+ imageAlt: "Pixel-art product naming workflow visual showing a product brief becoming candidate names and review material.",
83
+ ctaLabel: "Generate names",
84
+ steps: [
85
+ {
86
+ title: "Describe the product idea",
87
+ body: "Explain what the product does, who it serves, and what job it solves. A rough idea is enough, but placeholders are blocked.",
88
+ },
89
+ {
90
+ title: "Set naming constraints",
91
+ body: "Choose audience, naming style, target markets, and domain extensions. Add working names or existing candidates in advanced settings if you have them.",
92
+ },
93
+ {
94
+ title: "Generate the shortlist",
95
+ body: "The tool returns 3-5 candidates with the core idea, basics, screening dimensions, and copy-ready decision material.",
96
+ },
97
+ {
98
+ title: "Expand names for review",
99
+ body: "Open the candidates that feel promising to inspect domain signals, search entrypoints, trademark sources, risks, and next checks.",
100
+ },
101
+ ],
102
+ },
103
+ faqIntro: "Use these answers to understand how to use the shortlist, what needs manual review, and why deeper checks run after the first pass.",
104
+ faqCtaLabel: "View questions",
105
+ },
106
+ outputs: "What you get",
107
+ outputItems: [
108
+ {
109
+ title: "A focused name shortlist",
110
+ body:
111
+ "The first pass returns a small set of candidates, each with a core idea and basic fit notes for team discussion.",
112
+ },
113
+ {
114
+ title: "Basic brand signals",
115
+ body:
116
+ "Pronunciation, length, naming style, and selected domain extensions are screened first so weak directions can be removed early.",
117
+ },
118
+ {
119
+ title: "Per-name deep checks",
120
+ body:
121
+ "Open a candidate to continue with domain signals, search noise, trademark entrypoints, risk notes, and next checks.",
122
+ },
123
+ {
124
+ title: "Copy-ready decision material",
125
+ body:
126
+ "Names, rationale, screening signals, and risk notes can be copied into a naming review with product, design, growth, or legal teammates.",
127
+ },
128
+ ],
129
+ howToUse: "How to use the product name generator",
130
+ howToUseSteps: [
131
+ "Describe the product idea, target users, naming vibe, and any working name.",
132
+ "Choose target markets, domain extensions, and a budget ceiling; the first pass stays lightweight.",
133
+ "Review 3-5 candidates with the core idea, pronunciation fit, and basic background first.",
134
+ "Expand a promising name to trigger a separate domain, SEO, and trademark pre-screen.",
135
+ ],
136
+ capabilityNote:
137
+ "The first pass answers whether there are names worth keeping. Domain price, search noise, and trademark safety are not guaranteed up front; expanded checks are pre-screening only, not registrar confirmation or legal advice.",
138
+ stagedOutput: "Why the output is staged",
139
+ stageLabel: "Stage",
140
+ stagedOutputBullets: [
141
+ "Stage one answers whether there are names worth considering, keeping wait time and unnecessary deep-check cost low.",
142
+ "Stage two analyzes only the candidate the user opens, adding domain, search, trademark entrypoints, and risk notes.",
143
+ "Stage three is for final decisions: compare 2-3 finalists with red/yellow/green verdicts and next actions.",
144
+ ],
145
+ resultGuidance: "How to judge the shortlist",
146
+ resultGuidanceBullets: [
147
+ "Remove names that are hard to say, too generic, too close to competitors, or unclear about the product direction before buying domains.",
148
+ "Read 2-3 candidates to real users or teammates and watch whether they can repeat, spell, and roughly understand the product.",
149
+ "Run expanded checks only for finalists, then review domain price, search noise, trademark entrypoints, and manual review risks.",
150
+ ],
151
+ whyTomako: "Why use this naming tool",
152
+ whyTomakoItems: [
153
+ {
154
+ title: "Shortlist first, not a word dump",
155
+ body:
156
+ "A good naming tool should reduce choice cost. This page starts with 3-5 directions worth judging instead of flooding you with dozens of similar words.",
157
+ },
158
+ {
159
+ title: "Screened around your product context",
160
+ body:
161
+ "Candidates use your product idea, audience, naming style, working names, and target markets instead of treating every app, SaaS, and AI tool the same.",
162
+ },
163
+ {
164
+ title: "Judge the name before paying for deeper checks",
165
+ body:
166
+ "Domain, search, and trademark pre-screening are triggered per expanded candidate, which fits early naming work while positioning is still moving.",
167
+ },
168
+ {
169
+ title: "Clear boundaries for review",
170
+ body:
171
+ "Domain states, trademark entrypoints, and legal boundaries are separated clearly, so each name becomes a decision starting point rather than a false clearance claim.",
172
+ },
173
+ ],
174
+ strongName: "What makes a strong product name",
175
+ strongNameBullets: [
176
+ "Sayable: teammates, users, and investors can repeat it after hearing it once.",
177
+ "Expandable: it is not trapped inside today's narrow feature scope.",
178
+ "Findable: brand search, app stores, GitHub, social handles, and domains still have room.",
179
+ "Explainable: the metaphor connects naturally to positioning, user context, or brand voice.",
180
+ "Distinct: spelling and pronunciation do not blur into nearby software, AI tools, or category leaders.",
181
+ ],
182
+ mistakes: "Common naming mistakes",
183
+ mistakeBullets: [
184
+ "Treating `.com` availability as the only signal while ignoring market fit and memory.",
185
+ "Generating dozens of attractive names without staged domain, SEO, trademark, and category checks.",
186
+ "Chasing abstract premium vibes so early that users cannot tell what the product does.",
187
+ "Forcing keywords into the name until it becomes too long to remember, say, or share.",
188
+ ],
189
+ useCases: "Use cases",
190
+ useCaseBullets: [
191
+ "Indie builders naming a new app, web tool, plugin, or AI side product.",
192
+ "Early teams that need expandable name directions while positioning is still moving.",
193
+ "Founders with 2-5 candidates who need to decide which one deserves domain spend.",
194
+ "Global products balancing English readability, Chinese perception, and search noise.",
195
+ "Product, design, and growth teams preparing a naming workshop with a shared shortlist and criteria.",
196
+ ],
197
+ faq: "FAQ",
198
+ faqItems: [
199
+ {
200
+ question: "Why not return every domain and trademark check at once?",
201
+ answer:
202
+ "Most early names will be discarded. A lightweight first pass followed by per-name expansion lowers wait time and unnecessary analysis cost.",
203
+ },
204
+ {
205
+ question: "Do I need a complete product positioning brief?",
206
+ answer:
207
+ "No. Describe what the product does, who it serves, and the feeling it should create. A rough idea is enough for a first direction, and the shortlist can help you refine positioning.",
208
+ },
209
+ {
210
+ question: "Does the tool guarantee that a domain is buyable?",
211
+ answer:
212
+ "No. Domain status comes from fast RDAP/DNS signals. Final availability and price must be confirmed at a registrar, especially for premium domains.",
213
+ },
214
+ {
215
+ question: "Can trademark pre-screening replace legal review?",
216
+ answer:
217
+ "No. The tool provides official database entrypoints, search queries, and risk notes. It cannot provide legal clearance. Run professional clearance before investing heavily in a brand.",
218
+ },
219
+ {
220
+ question: "Can I analyze names I already have?",
221
+ answer:
222
+ "Yes. Add your candidates line by line. The tool will include them in the first screen and can generate nearby variants from the product positioning.",
223
+ },
224
+ {
225
+ question: "How is my product idea used?",
226
+ answer:
227
+ "The form content is used as context for name generation and expanded checks. Do not submit confidential source code, unreleased trade secrets, customer data, or sensitive personal information.",
228
+ },
229
+ {
230
+ question: "Can I use the generated names commercially?",
231
+ answer:
232
+ "Use the names as starting points. Before commercial use, confirm domains, app stores, social handles, trademark similarity, and target-market meaning, with professional trademark review when needed.",
233
+ },
234
+ ],
235
+ ctaPrimary: "Continue to GTM checklist",
236
+ ctaSecondary: "Back to all tools",
237
+ ctaHint:
238
+ "Once you have a shortlist, check whether positioning, channels, assets, and launch metrics are ready.",
239
+ visualAlt: {
240
+ hero: "Product name generator hero showing rough ideas becoming candidate directions and check signals.",
241
+ value: "Focused shortlist visual showing scattered naming thoughts reduced into a few high-quality directions.",
242
+ checks: "Candidate pre-screen visual showing domain, search, and review entrypoints.",
243
+ decision: "Naming decision packet visual showing keep, check, and decide markers for finalists.",
244
+ },
245
+ },
246
+ widget: {
247
+ formTitle: "Generate product name candidates",
248
+ formHint:
249
+ "Generate reviewable candidates first; deeper checks run after expansion.",
250
+ workingNameLabel: "Existing product or working name",
251
+ workingNamePlaceholder: "e.g. Kitepath, optional",
252
+ descriptionLabel: "Product idea",
253
+ descriptionPlaceholder:
254
+ "Describe what the product does, who it serves, and the job it solves. Example: an AI workspace that helps indie founders create launch assets and channel plans.",
255
+ targetUsersLabel: "Target users",
256
+ targetUsersPlaceholder: "e.g. indie developers, SaaS founders, outbound product teams",
257
+ desiredVibeLabel: "Desired vibe",
258
+ desiredVibePlaceholder: "e.g. clear, trustworthy, technical, lighter than enterprise",
259
+ styleLabel: "Naming style",
260
+ marketLabel: "Target market / language",
261
+ marketPlaceholder: "Choose markets",
262
+ domainLabel: "Domain extensions to prioritize",
263
+ domainPlaceholder: "Choose extensions",
264
+ maxPriceLabel: "Max acceptable price (USD)",
265
+ countLabel: "Result count",
266
+ advancedLabel: "More screening settings",
267
+ fallbackLabel: "Allow backup domain patterns",
268
+ fallbackHint: "Examples: get + name, try + name, name + app, name + hq.",
269
+ candidateNamesLabel: "Existing candidates",
270
+ candidateNamesPlaceholder: "One per line, or comma-separated. Example:\nKitepath\nNimbly\nAuralis",
271
+ optional: "Optional",
272
+ generateAgent: "Generate names",
273
+ generatingAgent: "Generating names",
274
+ retryAgent: "Regenerate names",
275
+ reset: "Reset",
276
+ emptyTitle: "Ready for name candidates",
277
+ emptyHint:
278
+ "The first pass reveals names one by one. Each card starts with the core idea and basics; domain, SEO, and trademark pre-screening runs only after expansion.",
279
+ emptyBullets: ["3-5 candidate names", "Core idea and basic fit", "On-demand second-stage checks"],
280
+ workspaceVisualAlt:
281
+ "Workspace side visual showing rough naming inputs becoming three candidate directions and domain-extension signals.",
282
+ loadingTitle: "Generating and screening",
283
+ loadingStatus: "Preparing the name shortlist",
284
+ loadingCountdown: "about 1 min",
285
+ loadingHint:
286
+ "Generating name candidates from your product idea and running basic pronunciation, length, and domain-extension screening. The first pass does not perform full trademark clearance.",
287
+ loadingSteps: [
288
+ "Build naming strategy and candidates",
289
+ "Run pronunciation, length, and brand-fit screening",
290
+ "Check only selected domain extensions",
291
+ "Prepare expandable detail paths",
292
+ ],
293
+ errorTitle: "No naming result yet",
294
+ agentResult: "Name shortlist",
295
+ resultTitle: "First-pass shortlist",
296
+ copyAll: "Copy all candidates",
297
+ copyName: "Copy name",
298
+ copied: "Copied",
299
+ expandDetail: "Expand details",
300
+ detailLoading: "Checking",
301
+ detailRunning: "Preparing expanded checks",
302
+ detailAwaiting: "The deeper check finished its first pass and is preparing displayable results.",
303
+ score: "Score",
304
+ coreIdea: "Core idea",
305
+ basics: "Basics",
306
+ domains: "Domain snapshot",
307
+ checks: "Screening checks",
308
+ seoDetail: "SEO / search pre-screen",
309
+ trademarkDetail: "Trademark pre-screen",
310
+ risks: "Risk notes",
311
+ nextChecks: "Next checks",
312
+ openLink: "Open link",
313
+ taskIdLabel: "Task ID",
314
+ styles: {
315
+ clear: "Clear",
316
+ technical: "Technical",
317
+ friendly: "Friendly",
318
+ premium: "Premium",
319
+ invented: "Invented",
320
+ },
321
+ markets: {
322
+ globalEnglish: "Global English",
323
+ mainlandChina: "Mainland China",
324
+ us: "United States",
325
+ eu: "Europe",
326
+ japan: "Japan",
327
+ sea: "Southeast Asia",
328
+ },
329
+ tlds: {
330
+ ai: ".ai",
331
+ com: ".com",
332
+ io: ".io",
333
+ app: ".app",
334
+ dev: ".dev",
335
+ co: ".co",
336
+ so: ".so",
337
+ studio: ".studio",
338
+ },
339
+ verdicts: {
340
+ green: "Green",
341
+ light_yellow: "Light yellow",
342
+ yellow: "Yellow",
343
+ orange: "Orange",
344
+ red: "Red",
345
+ unknown: "Unknown",
346
+ manual_required: "Manual check",
347
+ },
348
+ stages: {
349
+ unchecked_idea: "Unchecked idea",
350
+ fast_screened: "Fast-screened",
351
+ domain_checked: "Domain-checked",
352
+ deep_researched: "Deep-researched",
353
+ },
354
+ errors: {
355
+ required: "Enter the product idea and choose at least one market and domain extension.",
356
+ fixFields: "Fix the highlighted fields before generating names.",
357
+ descriptionRequired: "Enter the product idea first.",
358
+ descriptionShort: "Add a little more to the product idea. Use at least 4 characters.",
359
+ descriptionMeaningful: "Enter a real product idea, not only numbers or placeholder text.",
360
+ market: "Choose at least one target market or language.",
361
+ domain: "Choose at least one domain extension to prioritize.",
362
+ maxPrice: "Max acceptable price must be a number from 0 to 50000.",
363
+ candidateNames: "Existing candidates are too long. Keep them under 500 characters.",
364
+ copy: "This browser could not copy the text. Try again later.",
365
+ agent:
366
+ "Name generation failed to submit or complete. Retry shortly; there is no displayable naming result yet.",
367
+ gateway:
368
+ "The online task service is temporarily unavailable, so the task was not created. This is not a form-selection issue. Retry shortly.",
369
+ noResult:
370
+ "The naming flow ended without a displayable structured result. Retry shortly.",
371
+ invalidResult:
372
+ "The returned result structure or content does not meet this tool's requirements. Regenerate.",
373
+ demoFallbackResult:
374
+ "The returned names look like example or default candidates, so the page refused to display them. Regenerate, or confirm the remote naming flow has been updated.",
375
+ noDetail:
376
+ "The detail task ended without a displayable result. Retry.",
377
+ invalidDetailResult:
378
+ "The detail result does not match the structure required by this tool. Retry.",
379
+ },
380
+ },
381
+ } as const;
382
+
383
+ export default productNameGenerator;