@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.
- package/README.md +12 -0
- package/package.json +629 -0
- package/src/assets/icons/brands/social/bluesky-icon.tsx +9 -0
- package/src/assets/icons/brands/social/facebook-icon.tsx +9 -0
- package/src/assets/icons/brands/social/index.ts +8 -0
- package/src/assets/icons/brands/social/instagram-icon.tsx +9 -0
- package/src/assets/icons/brands/social/linkedin-icon.tsx +9 -0
- package/src/assets/icons/brands/social/threads-icon.tsx +9 -0
- package/src/assets/icons/brands/social/tiktok-icon.tsx +10 -0
- package/src/assets/icons/brands/social/x-icon.tsx +9 -0
- package/src/assets/icons/brands/social/youtube-icon.tsx +9 -0
- package/src/assets/icons/social-profile/facebook-icon.tsx +12 -0
- package/src/assets/icons/social-profile/index.ts +29 -0
- package/src/assets/icons/social-profile/instagram-icon.tsx +18 -0
- package/src/assets/icons/social-profile/linkedin-icon.tsx +12 -0
- package/src/assets/icons/social-profile/tiktok-icon.tsx +12 -0
- package/src/assets/icons/social-profile/x-icon.tsx +13 -0
- package/src/assets/icons/social-profile/youtube-icon.tsx +12 -0
- package/src/components/tools/engine/form-builder.tsx +219 -0
- package/src/components/tools/engine/package-widget-loader.tsx +38 -0
- package/src/components/tools/engine/package-widget-runtime.tsx +409 -0
- package/src/components/tools/engine/package-widget.tsx +77 -0
- package/src/components/tools/engine/result-view.tsx +596 -0
- package/src/components/tools/engine/use-legacy-llm-task.ts +64 -0
- package/src/components/tools/engine/use-tool-task.ts +195 -0
- package/src/components/tools/market-forecast-report.tsx +1150 -0
- package/src/components/tools/registry.ts +13 -0
- package/src/components/tools/workspace/index.ts +39 -0
- package/src/components/tools/workspace/tool-action-bar.tsx +99 -0
- package/src/components/tools/workspace/tool-empty-panel.tsx +32 -0
- package/src/components/tools/workspace/tool-error-panel.tsx +40 -0
- package/src/components/tools/workspace/tool-field.tsx +124 -0
- package/src/components/tools/workspace/tool-file-upload.tsx +112 -0
- package/src/components/tools/workspace/tool-form-section.tsx +21 -0
- package/src/components/tools/workspace/tool-form-shell.tsx +36 -0
- package/src/components/tools/workspace/tool-loading-panel.tsx +269 -0
- package/src/components/tools/workspace/tool-option-row.tsx +97 -0
- package/src/components/tools/workspace/tool-preview-panel.tsx +31 -0
- package/src/components/tools/workspace/tool-result-actions.tsx +67 -0
- package/src/components/tools/workspace/tool-result-file-actions.ts +31 -0
- package/src/components/tools/workspace/tool-result-header.tsx +39 -0
- package/src/components/tools/workspace/tool-status.tsx +13 -0
- package/src/components/tools/workspace/tool-workspace-layout.tsx +226 -0
- package/src/constants/LKS.ts +29 -0
- package/src/constants/related-tools.ts +18 -0
- package/src/constants/social-profile-kit.ts +284 -0
- package/src/constants/tool-assets.ts +7 -0
- package/src/env.d.ts +3 -0
- package/src/features/tools/_templates/standard-tool.container.tsx +90 -0
- package/src/features/tools/app-icon-resizer/app-icon-resizer.container.tsx +11 -0
- package/src/features/tools/app-icon-resizer/app-icon-resizer.spec.ts +15 -0
- package/src/features/tools/app-icon-resizer/widget/app-icon-resizer.tsx +444 -0
- package/src/features/tools/app-icon-resizer/widget/constants.ts +19 -0
- package/src/features/tools/app-icon-resizer/widget/helpers.ts +314 -0
- package/src/features/tools/app-icon-resizer/widget/index.ts +7 -0
- package/src/features/tools/app-icon-resizer/widget/platform-icons.tsx +59 -0
- package/src/features/tools/app-icon-resizer/widget/preview-dialogs.tsx +139 -0
- package/src/features/tools/app-icon-resizer/widget/result-shell.tsx +165 -0
- package/src/features/tools/app-icon-resizer/widget/types.ts +36 -0
- package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.container.tsx +108 -0
- package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.spec.ts +14 -0
- package/src/features/tools/app-store-screenshot-generator/config.ts +3 -0
- package/src/features/tools/app-store-screenshot-generator/widget/app-store-screenshot-generator.tsx +1250 -0
- package/src/features/tools/app-store-screenshot-generator/widget/asset-slots.ts +76 -0
- package/src/features/tools/app-store-screenshot-generator/widget/constants.ts +43 -0
- package/src/features/tools/app-store-screenshot-generator/widget/form-controls.tsx +214 -0
- package/src/features/tools/app-store-screenshot-generator/widget/generation.ts +528 -0
- package/src/features/tools/app-store-screenshot-generator/widget/index.ts +7 -0
- package/src/features/tools/app-store-screenshot-generator/widget/input-media.ts +175 -0
- package/src/features/tools/app-store-screenshot-generator/widget/types.ts +60 -0
- package/src/features/tools/app-store-screenshot-generator/widget/zip.ts +119 -0
- package/src/features/tools/build-in-public-story-generator/build-in-public-story-generator.container.tsx +135 -0
- package/src/features/tools/build-in-public-story-generator/build-in-public-story-generator.spec.ts +15 -0
- package/src/features/tools/build-in-public-story-generator/widget/build-in-public-story-generator.tsx +314 -0
- package/src/features/tools/build-in-public-story-generator/widget/constants.ts +3 -0
- package/src/features/tools/build-in-public-story-generator/widget/helpers.ts +25 -0
- package/src/features/tools/build-in-public-story-generator/widget/index.ts +7 -0
- package/src/features/tools/build-in-public-story-generator/widget/preview-panels.tsx +58 -0
- package/src/features/tools/build-in-public-story-generator/widget/result-shell.tsx +164 -0
- package/src/features/tools/build-in-public-story-generator/widget/types.ts +6 -0
- package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.container.tsx +30 -0
- package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.spec.ts +15 -0
- package/src/features/tools/cold-start-channel-selector/widget/cold-start-channel-selector.tsx +417 -0
- package/src/features/tools/cold-start-channel-selector/widget/constants.ts +46 -0
- package/src/features/tools/cold-start-channel-selector/widget/form-controls.tsx +41 -0
- package/src/features/tools/cold-start-channel-selector/widget/helpers.ts +75 -0
- package/src/features/tools/cold-start-channel-selector/widget/index.ts +7 -0
- package/src/features/tools/cold-start-channel-selector/widget/preview-panels.tsx +250 -0
- package/src/features/tools/cold-start-channel-selector/widget/result-shell.tsx +199 -0
- package/src/features/tools/cold-start-channel-selector/widget/types.ts +21 -0
- package/src/features/tools/commercial-bp-generator/commercial-bp-generator.container.tsx +102 -0
- package/src/features/tools/commercial-bp-generator/commercial-bp-generator.spec.ts +14 -0
- package/src/features/tools/commercial-bp-generator/widget/commercial-bp-generator.tsx +676 -0
- package/src/features/tools/commercial-bp-generator/widget/constants.ts +32 -0
- package/src/features/tools/commercial-bp-generator/widget/helpers.ts +147 -0
- package/src/features/tools/commercial-bp-generator/widget/index.ts +7 -0
- package/src/features/tools/commercial-bp-generator/widget/result-shell.tsx +271 -0
- package/src/features/tools/commercial-bp-generator/widget/style-option.tsx +54 -0
- package/src/features/tools/commercial-bp-generator/widget/types.ts +33 -0
- package/src/features/tools/community-feedback-inbox/community-feedback-inbox.container.tsx +126 -0
- package/src/features/tools/community-feedback-inbox/community-feedback-inbox.spec.ts +15 -0
- package/src/features/tools/community-feedback-inbox/widget/community-feedback-inbox.tsx +271 -0
- package/src/features/tools/community-feedback-inbox/widget/constants.ts +3 -0
- package/src/features/tools/community-feedback-inbox/widget/helpers.ts +28 -0
- package/src/features/tools/community-feedback-inbox/widget/index.ts +7 -0
- package/src/features/tools/community-feedback-inbox/widget/preview-panels.tsx +92 -0
- package/src/features/tools/community-feedback-inbox/widget/result-shell.tsx +266 -0
- package/src/features/tools/community-feedback-inbox/widget/types.ts +6 -0
- package/src/features/tools/community-pain-point-extractor/community-pain-point-extractor.container.tsx +124 -0
- package/src/features/tools/community-pain-point-extractor/community-pain-point-extractor.spec.ts +15 -0
- package/src/features/tools/community-pain-point-extractor/widget/community-pain-point-extractor.tsx +404 -0
- package/src/features/tools/community-pain-point-extractor/widget/constants.ts +41 -0
- package/src/features/tools/community-pain-point-extractor/widget/helpers.ts +76 -0
- package/src/features/tools/community-pain-point-extractor/widget/index.ts +8 -0
- package/src/features/tools/community-pain-point-extractor/widget/progress-panels.tsx +251 -0
- package/src/features/tools/community-pain-point-extractor/widget/result-shell.tsx +478 -0
- package/src/features/tools/community-pain-point-extractor/widget/types.ts +33 -0
- package/src/features/tools/community-post-risk-checker/community-post-risk-checker.package.ts +792 -0
- package/src/features/tools/competitor-analysis/competitor-analysis.container.tsx +136 -0
- package/src/features/tools/competitor-analysis/competitor-analysis.spec.ts +15 -0
- package/src/features/tools/competitor-analysis/widget/competitor-analysis.tsx +241 -0
- package/src/features/tools/competitor-analysis/widget/constants.ts +9 -0
- package/src/features/tools/competitor-analysis/widget/index.ts +7 -0
- package/src/features/tools/competitor-analysis/widget/preview-panels.tsx +60 -0
- package/src/features/tools/competitor-analysis/widget/result-shell.tsx +418 -0
- package/src/features/tools/competitor-analysis/widget/types.ts +13 -0
- package/src/features/tools/disclaimer-generator/disclaimer-generator.package.ts +339 -0
- package/src/features/tools/email-template-generator/email-template-generator.container.tsx +224 -0
- package/src/features/tools/email-template-generator/email-template-generator.spec.ts +14 -0
- package/src/features/tools/email-template-generator/widget/email-template-generator.tsx +358 -0
- package/src/features/tools/email-template-generator/widget/helpers.ts +39 -0
- package/src/features/tools/email-template-generator/widget/index.ts +7 -0
- package/src/features/tools/email-template-generator/widget/preview-panel.tsx +311 -0
- package/src/features/tools/email-template-generator/widget/result-text-block.tsx +7 -0
- package/src/features/tools/email-template-generator/widget/types.ts +24 -0
- package/src/features/tools/gtm-readiness-checklist/gtm-readiness-checklist.container.tsx +75 -0
- package/src/features/tools/gtm-readiness-checklist/gtm-readiness-checklist.spec.ts +15 -0
- package/src/features/tools/gtm-readiness-checklist/widget/gtm-readiness-checklist.tsx +122 -0
- package/src/features/tools/gtm-readiness-checklist/widget/index.ts +7 -0
- package/src/features/tools/investor-matching-planner/investor-matching-planner.package.ts +869 -0
- package/src/features/tools/koko-codex-assistant/koko-codex-assistant.container.tsx +151 -0
- package/src/features/tools/koko-codex-assistant/koko-codex-assistant.spec.ts +14 -0
- package/src/features/tools/koko-codex-assistant/widget/index.ts +7 -0
- package/src/features/tools/koko-codex-assistant/widget/koko-codex-assistant-download.tsx +192 -0
- package/src/features/tools/logo-generator/logo-generator.container.tsx +112 -0
- package/src/features/tools/logo-generator/logo-generator.spec.ts +15 -0
- package/src/features/tools/logo-generator/widget/index.ts +7 -0
- package/src/features/tools/logo-generator/widget/logo-generator.tsx +1244 -0
- package/src/features/tools/market-forecast-report/market-forecast-report.container.tsx +73 -0
- package/src/features/tools/market-forecast-report/market-forecast-report.spec.ts +15 -0
- package/src/features/tools/million-user-growth-test/million-user-growth-test.container.tsx +123 -0
- package/src/features/tools/million-user-growth-test/million-user-growth-test.spec.ts +14 -0
- package/src/features/tools/million-user-growth-test/widget/index.ts +7 -0
- package/src/features/tools/million-user-growth-test/widget/million-user-growth-test.tsx +433 -0
- package/src/features/tools/module-loader.ts +107 -0
- package/src/features/tools/og-image-generator/og-image-generator.container.tsx +86 -0
- package/src/features/tools/og-image-generator/og-image-generator.spec.ts +14 -0
- package/src/features/tools/og-image-generator/widget/constants.ts +38 -0
- package/src/features/tools/og-image-generator/widget/form-fields.tsx +240 -0
- package/src/features/tools/og-image-generator/widget/index.ts +7 -0
- package/src/features/tools/og-image-generator/widget/og-image-generator.tsx +742 -0
- package/src/features/tools/og-image-generator/widget/preview-panel.tsx +305 -0
- package/src/features/tools/og-image-generator/widget/types.ts +1 -0
- package/src/features/tools/package/direct-models.ts +20 -0
- package/src/features/tools/package/form.ts +38 -0
- package/src/features/tools/package/l10n.ts +22 -0
- package/src/features/tools/package/package-container.tsx +285 -0
- package/src/features/tools/package/package-loaders.ts +22 -0
- package/src/features/tools/package/package-registry.ts +36 -0
- package/src/features/tools/package/result-markdown.ts +142 -0
- package/src/features/tools/package/schema.ts +379 -0
- package/src/features/tools/package/to-tool-module.ts +20 -0
- package/src/features/tools/package/to-tool-spec.ts +52 -0
- package/src/features/tools/package/types.ts +381 -0
- package/src/features/tools/pitch-deck-generator/pitch-deck-generator.container.tsx +175 -0
- package/src/features/tools/pitch-deck-generator/pitch-deck-generator.spec.ts +14 -0
- package/src/features/tools/pitch-deck-generator/pitch-deck-library-data.ts +476 -0
- package/src/features/tools/pitch-deck-generator/pitch-deck-library.tsx +159 -0
- package/src/features/tools/pitch-deck-generator/widget/ceremony-line.tsx +27 -0
- package/src/features/tools/pitch-deck-generator/widget/constants.ts +27 -0
- package/src/features/tools/pitch-deck-generator/widget/index.ts +7 -0
- package/src/features/tools/pitch-deck-generator/widget/pitch-deck-generator.tsx +763 -0
- package/src/features/tools/pitch-deck-generator/widget/result-helpers.ts +102 -0
- package/src/features/tools/pitch-deck-generator/widget/result-shell.tsx +263 -0
- package/src/features/tools/pitch-deck-generator/widget/slide-frame.tsx +106 -0
- package/src/features/tools/pitch-deck-generator/widget/slide-lightbox.tsx +149 -0
- package/src/features/tools/pitch-deck-generator/widget/style-option.tsx +54 -0
- package/src/features/tools/pitch-deck-generator/widget/types.ts +44 -0
- package/src/features/tools/product-agreement-generator/product-agreement-generator.container.tsx +137 -0
- package/src/features/tools/product-agreement-generator/product-agreement-generator.spec.ts +14 -0
- package/src/features/tools/product-agreement-generator/widget/constants.ts +27 -0
- package/src/features/tools/product-agreement-generator/widget/form-controls.tsx +218 -0
- package/src/features/tools/product-agreement-generator/widget/helpers.ts +68 -0
- package/src/features/tools/product-agreement-generator/widget/index.ts +7 -0
- package/src/features/tools/product-agreement-generator/widget/product-agreement-generator.tsx +671 -0
- package/src/features/tools/product-agreement-generator/widget/result-shell.tsx +473 -0
- package/src/features/tools/product-agreement-generator/widget/types.ts +89 -0
- package/src/features/tools/product-hunt-launch-planner/product-hunt-launch-planner.container.tsx +122 -0
- package/src/features/tools/product-hunt-launch-planner/product-hunt-launch-planner.spec.ts +15 -0
- package/src/features/tools/product-hunt-launch-planner/widget/constants.ts +5 -0
- package/src/features/tools/product-hunt-launch-planner/widget/helpers.ts +44 -0
- package/src/features/tools/product-hunt-launch-planner/widget/index.ts +7 -0
- package/src/features/tools/product-hunt-launch-planner/widget/preview-panel.tsx +143 -0
- package/src/features/tools/product-hunt-launch-planner/widget/product-hunt-launch-planner.tsx +504 -0
- package/src/features/tools/product-hunt-launch-planner/widget/result-shell.tsx +176 -0
- package/src/features/tools/product-hunt-launch-planner/widget/types.ts +20 -0
- package/src/features/tools/product-name-generator/product-name-generator.container.tsx +14 -0
- package/src/features/tools/product-name-generator/product-name-generator.spec.ts +15 -0
- package/src/features/tools/product-name-generator/widget/candidate-card.tsx +273 -0
- package/src/features/tools/product-name-generator/widget/constants.ts +21 -0
- package/src/features/tools/product-name-generator/widget/form-controls.tsx +136 -0
- package/src/features/tools/product-name-generator/widget/helpers.ts +41 -0
- package/src/features/tools/product-name-generator/widget/index.ts +7 -0
- package/src/features/tools/product-name-generator/widget/product-name-generator.tsx +776 -0
- package/src/features/tools/product-name-generator/widget/types.ts +36 -0
- package/src/features/tools/product-positioning-analyzer/product-positioning-analyzer.package.ts +801 -0
- package/src/features/tools/product-poster-generator/product-poster-generator.container.tsx +14 -0
- package/src/features/tools/product-poster-generator/product-poster-generator.spec.ts +15 -0
- package/src/features/tools/product-poster-generator/widget/constants.ts +125 -0
- package/src/features/tools/product-poster-generator/widget/form-controls.tsx +204 -0
- package/src/features/tools/product-poster-generator/widget/helpers.ts +155 -0
- package/src/features/tools/product-poster-generator/widget/index.ts +7 -0
- package/src/features/tools/product-poster-generator/widget/product-poster-generator.tsx +663 -0
- package/src/features/tools/product-poster-generator/widget/result-shell.tsx +12 -0
- package/src/features/tools/product-poster-generator/widget/types.ts +83 -0
- package/src/features/tools/product-ui-generator/product-ui-generator.container.tsx +116 -0
- package/src/features/tools/product-ui-generator/product-ui-generator.spec.ts +14 -0
- package/src/features/tools/product-ui-generator/widget/constants.ts +18 -0
- package/src/features/tools/product-ui-generator/widget/helpers.ts +11 -0
- package/src/features/tools/product-ui-generator/widget/index.ts +7 -0
- package/src/features/tools/product-ui-generator/widget/preview-panels.tsx +73 -0
- package/src/features/tools/product-ui-generator/widget/product-ui-generator.tsx +304 -0
- package/src/features/tools/product-ui-generator/widget/result-shell.tsx +118 -0
- package/src/features/tools/product-ui-generator/widget/types.ts +9 -0
- package/src/features/tools/reddit-pain-point-finder/reddit-pain-point-finder.container.tsx +113 -0
- package/src/features/tools/reddit-pain-point-finder/reddit-pain-point-finder.spec.ts +15 -0
- package/src/features/tools/reddit-pain-point-finder/widget/constants.ts +5 -0
- package/src/features/tools/reddit-pain-point-finder/widget/index.ts +7 -0
- package/src/features/tools/reddit-pain-point-finder/widget/preview-panels.tsx +73 -0
- package/src/features/tools/reddit-pain-point-finder/widget/reddit-pain-point-finder.tsx +281 -0
- package/src/features/tools/reddit-pain-point-finder/widget/result-shell.tsx +203 -0
- package/src/features/tools/reddit-pain-point-finder/widget/types.ts +15 -0
- package/src/features/tools/registry.ts +288 -0
- package/src/features/tools/runtime-registry.ts +186 -0
- package/src/features/tools/shared/create-guide-stack-container.tsx +176 -0
- package/src/features/tools/shared/create-standard-landing-container.tsx +163 -0
- package/src/features/tools/shared/tool-content-sections.tsx +659 -0
- package/src/features/tools/shared/tool-cta.tsx +66 -0
- package/src/features/tools/shared/tool-draft-view.tsx +53 -0
- package/src/features/tools/shared/tool-guide-section.tsx +191 -0
- package/src/features/tools/shared/tool-handoff.tsx +38 -0
- package/src/features/tools/shared/tool-mcp-badge.tsx +23 -0
- package/src/features/tools/shared/tool-message-translator.ts +37 -0
- package/src/features/tools/shared/tool-page-shell.tsx +348 -0
- package/src/features/tools/shared/tool-standard-generation-steps.tsx +52 -0
- package/src/features/tools/shared/tool-standard-landing-sections.tsx +447 -0
- package/src/features/tools/shared/tool-ui-registry.ts +237 -0
- package/src/features/tools/shared/tool-widget-slot.tsx +29 -0
- package/src/features/tools/slogan-generator/slogan-generator.package.ts +641 -0
- package/src/features/tools/social-listening-research-report/social-listening-research-report.container.tsx +124 -0
- package/src/features/tools/social-listening-research-report/social-listening-research-report.spec.ts +15 -0
- package/src/features/tools/social-listening-research-report/widget/constants.ts +4 -0
- package/src/features/tools/social-listening-research-report/widget/index.ts +7 -0
- package/src/features/tools/social-listening-research-report/widget/preview-panels.tsx +73 -0
- package/src/features/tools/social-listening-research-report/widget/result-shell.tsx +216 -0
- package/src/features/tools/social-listening-research-report/widget/social-listening-research-report.tsx +303 -0
- package/src/features/tools/social-listening-research-report/widget/types.ts +15 -0
- package/src/features/tools/social-platform-asset-adapter/social-platform-asset-adapter.container.tsx +123 -0
- package/src/features/tools/social-platform-asset-adapter/social-platform-asset-adapter.spec.ts +15 -0
- package/src/features/tools/social-platform-asset-adapter/widget/constants.ts +43 -0
- package/src/features/tools/social-platform-asset-adapter/widget/helpers.ts +249 -0
- package/src/features/tools/social-platform-asset-adapter/widget/index.ts +7 -0
- package/src/features/tools/social-platform-asset-adapter/widget/result-shell.tsx +350 -0
- package/src/features/tools/social-platform-asset-adapter/widget/section-heading.tsx +18 -0
- package/src/features/tools/social-platform-asset-adapter/widget/social-platform-asset-adapter.tsx +641 -0
- package/src/features/tools/social-platform-asset-adapter/widget/types.ts +40 -0
- package/src/features/tools/social-profile-kit/social-profile-kit.container.tsx +177 -0
- package/src/features/tools/social-profile-kit/social-profile-kit.spec.ts +15 -0
- package/src/features/tools/social-profile-kit/widget/context-editor.tsx +171 -0
- package/src/features/tools/social-profile-kit/widget/generation-runtime.ts +281 -0
- package/src/features/tools/social-profile-kit/widget/index.ts +7 -0
- package/src/features/tools/social-profile-kit/widget/input-panel.tsx +294 -0
- package/src/features/tools/social-profile-kit/widget/platform-dock.tsx +115 -0
- package/src/features/tools/social-profile-kit/widget/profile-canvas.tsx +318 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/bluesky-preview.tsx +188 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/facebook-preview.tsx +168 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/index.ts +1 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/instagram-preview.tsx +278 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/linkedin-preview.tsx +358 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/profile-preview.tsx +348 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/shared.tsx +391 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/threads-preview.tsx +148 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/tiktok-preview.tsx +319 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/x-preview.tsx +341 -0
- package/src/features/tools/social-profile-kit/widget/profile-preview/youtube-preview.tsx +297 -0
- package/src/features/tools/social-profile-kit/widget/social-profile-kit-generator.tsx +1059 -0
- package/src/features/tools/social-profile-kit/widget/types.ts +104 -0
- package/src/features/tools/spec-registry.ts +158 -0
- package/src/features/tools/startup-idea-research/startup-idea-research.container.tsx +111 -0
- package/src/features/tools/startup-idea-research/startup-idea-research.spec.ts +15 -0
- package/src/features/tools/startup-idea-research/widget/constants.ts +11 -0
- package/src/features/tools/startup-idea-research/widget/index.ts +7 -0
- package/src/features/tools/startup-idea-research/widget/preview-panels.tsx +67 -0
- package/src/features/tools/startup-idea-research/widget/result-shell.tsx +323 -0
- package/src/features/tools/startup-idea-research/widget/startup-idea-research.tsx +272 -0
- package/src/features/tools/startup-idea-research/widget/types.ts +21 -0
- package/src/features/tools/tarot-reading/tarot-reading.container.tsx +412 -0
- package/src/features/tools/tarot-reading/tarot-reading.spec.ts +15 -0
- package/src/features/tools/tarot-reading/widget/cards.tsx +152 -0
- package/src/features/tools/tarot-reading/widget/constants.ts +69 -0
- package/src/features/tools/tarot-reading/widget/deck-view.tsx +86 -0
- package/src/features/tools/tarot-reading/widget/deck.ts +86 -0
- package/src/features/tools/tarot-reading/widget/index.ts +7 -0
- package/src/features/tools/tarot-reading/widget/landing-view.tsx +209 -0
- package/src/features/tools/tarot-reading/widget/reading-copy.tsx +138 -0
- package/src/features/tools/tarot-reading/widget/reading-view.tsx +189 -0
- package/src/features/tools/tarot-reading/widget/reveal-view.tsx +50 -0
- package/src/features/tools/tarot-reading/widget/ritual-view.tsx +276 -0
- package/src/features/tools/tarot-reading/widget/tarot-reading.tsx +262 -0
- package/src/features/tools/tarot-reading/widget/types.ts +22 -0
- package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.container.tsx +114 -0
- package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.spec.ts +14 -0
- package/src/features/tools/twitter-gif-downloader/widget/index.ts +7 -0
- package/src/features/tools/twitter-gif-downloader/widget/twitter-gif-downloader.tsx +351 -0
- package/src/features/tools/types.ts +68 -0
- package/src/features/tools/user-interview-guide-generator/user-interview-guide-generator.package.ts +774 -0
- package/src/features/tools/user-interview-insight-report-generator/user-interview-insight-report-generator.container.tsx +23 -0
- package/src/features/tools/user-interview-insight-report-generator/user-interview-insight-report-generator.spec.ts +14 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/constants.ts +8 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/helpers.ts +4 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/index.ts +7 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/preview-panels.tsx +55 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/result-shell.tsx +122 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/types.ts +16 -0
- package/src/features/tools/user-interview-insight-report-generator/widget/user-interview-insight-report-generator.tsx +293 -0
- package/src/features/tools/user-interview-record-generator/user-interview-record-generator.container.tsx +18 -0
- package/src/features/tools/user-interview-record-generator/user-interview-record-generator.spec.ts +14 -0
- package/src/features/tools/user-interview-record-generator/widget/constants.ts +9 -0
- package/src/features/tools/user-interview-record-generator/widget/helpers.ts +4 -0
- package/src/features/tools/user-interview-record-generator/widget/index.ts +7 -0
- package/src/features/tools/user-interview-record-generator/widget/preview-panels.tsx +48 -0
- package/src/features/tools/user-interview-record-generator/widget/result-shell.tsx +128 -0
- package/src/features/tools/user-interview-record-generator/widget/types.ts +16 -0
- package/src/features/tools/user-interview-record-generator/widget/user-interview-record-generator.tsx +305 -0
- package/src/features/tools/utm-builder/utm-builder.package.ts +846 -0
- package/src/features/tools/widget-registry.ts +73 -0
- package/src/generated/mcp-tools-registry.json +17 -0
- package/src/host/client-proxy.test.ts +33 -0
- package/src/host/client.ts +678 -0
- package/src/host/server.ts +119 -0
- package/src/i18n/client.ts +11 -0
- package/src/i18n/locale-fallback.ts +38 -0
- package/src/i18n/locale.ts +18 -0
- package/src/i18n/messages/en/page/tools.ts +124 -0
- package/src/i18n/messages/en/tools/app-icon-resizer.ts +244 -0
- package/src/i18n/messages/en/tools/app-store-screenshot-generator.ts +145 -0
- package/src/i18n/messages/en/tools/build-in-public-story-generator.ts +229 -0
- package/src/i18n/messages/en/tools/cold-start-channel-selector.ts +423 -0
- package/src/i18n/messages/en/tools/commercial-bp-generator.ts +304 -0
- package/src/i18n/messages/en/tools/community-feedback-inbox.ts +218 -0
- package/src/i18n/messages/en/tools/community-pain-point-extractor.ts +230 -0
- package/src/i18n/messages/en/tools/community-post-risk-checker.ts +209 -0
- package/src/i18n/messages/en/tools/competitor-analysis.ts +197 -0
- package/src/i18n/messages/en/tools/email-template-generator.ts +302 -0
- package/src/i18n/messages/en/tools/engine.ts +69 -0
- package/src/i18n/messages/en/tools/gtm-readiness-checklist.ts +166 -0
- package/src/i18n/messages/en/tools/index.ts +73 -0
- package/src/i18n/messages/en/tools/koko-codex-assistant.ts +171 -0
- package/src/i18n/messages/en/tools/logo-generator.ts +173 -0
- package/src/i18n/messages/en/tools/market-forecast-report.ts +228 -0
- package/src/i18n/messages/en/tools/million-user-growth-test.ts +386 -0
- package/src/i18n/messages/en/tools/og-image-generator.ts +172 -0
- package/src/i18n/messages/en/tools/pitch-deck-generator.ts +358 -0
- package/src/i18n/messages/en/tools/product-agreement-generator.ts +411 -0
- package/src/i18n/messages/en/tools/product-hunt-launch-planner.ts +272 -0
- package/src/i18n/messages/en/tools/product-name-generator.ts +383 -0
- package/src/i18n/messages/en/tools/product-poster-generator.ts +294 -0
- package/src/i18n/messages/en/tools/product-ui-generator.ts +234 -0
- package/src/i18n/messages/en/tools/reddit-pain-point-finder.ts +163 -0
- package/src/i18n/messages/en/tools/shared.ts +24 -0
- package/src/i18n/messages/en/tools/social-listening-research-report.ts +185 -0
- package/src/i18n/messages/en/tools/social-media-profile-generator.ts +22 -0
- package/src/i18n/messages/en/tools/social-platform-asset-adapter.ts +287 -0
- package/src/i18n/messages/en/tools/social-profile-kit.ts +150 -0
- package/src/i18n/messages/en/tools/startup-idea-research.ts +170 -0
- package/src/i18n/messages/en/tools/tarot-reading.ts +230 -0
- package/src/i18n/messages/en/tools/twitter-gif-downloader.ts +145 -0
- package/src/i18n/messages/en/tools/user-interview-insight-report-generator.ts +242 -0
- package/src/i18n/messages/en/tools/user-interview-record-generator.ts +244 -0
- package/src/i18n/messages/en/tools-ui.ts +704 -0
- package/src/i18n/messages/zh/page/tools.ts +124 -0
- package/src/i18n/messages/zh/tools/app-icon-resizer.ts +242 -0
- package/src/i18n/messages/zh/tools/app-store-screenshot-generator.ts +145 -0
- package/src/i18n/messages/zh/tools/build-in-public-story-generator.ts +230 -0
- package/src/i18n/messages/zh/tools/cold-start-channel-selector.ts +422 -0
- package/src/i18n/messages/zh/tools/commercial-bp-generator.ts +302 -0
- package/src/i18n/messages/zh/tools/community-feedback-inbox.ts +217 -0
- package/src/i18n/messages/zh/tools/community-pain-point-extractor.ts +230 -0
- package/src/i18n/messages/zh/tools/community-post-risk-checker.ts +200 -0
- package/src/i18n/messages/zh/tools/competitor-analysis.ts +192 -0
- package/src/i18n/messages/zh/tools/email-template-generator.ts +302 -0
- package/src/i18n/messages/zh/tools/engine.ts +68 -0
- package/src/i18n/messages/zh/tools/gtm-readiness-checklist.ts +166 -0
- package/src/i18n/messages/zh/tools/index.ts +73 -0
- package/src/i18n/messages/zh/tools/koko-codex-assistant.ts +170 -0
- package/src/i18n/messages/zh/tools/logo-generator.ts +172 -0
- package/src/i18n/messages/zh/tools/market-forecast-report.ts +228 -0
- package/src/i18n/messages/zh/tools/million-user-growth-test.ts +385 -0
- package/src/i18n/messages/zh/tools/og-image-generator.ts +173 -0
- package/src/i18n/messages/zh/tools/pitch-deck-generator.ts +358 -0
- package/src/i18n/messages/zh/tools/product-agreement-generator.ts +401 -0
- package/src/i18n/messages/zh/tools/product-hunt-launch-planner.ts +267 -0
- package/src/i18n/messages/zh/tools/product-name-generator.ts +383 -0
- package/src/i18n/messages/zh/tools/product-poster-generator.ts +282 -0
- package/src/i18n/messages/zh/tools/product-ui-generator.ts +234 -0
- package/src/i18n/messages/zh/tools/reddit-pain-point-finder.ts +162 -0
- package/src/i18n/messages/zh/tools/shared.ts +24 -0
- package/src/i18n/messages/zh/tools/social-listening-research-report.ts +181 -0
- package/src/i18n/messages/zh/tools/social-media-profile-generator.ts +22 -0
- package/src/i18n/messages/zh/tools/social-platform-asset-adapter.ts +284 -0
- package/src/i18n/messages/zh/tools/social-profile-kit.ts +150 -0
- package/src/i18n/messages/zh/tools/startup-idea-research.ts +165 -0
- package/src/i18n/messages/zh/tools/tarot-reading.ts +228 -0
- package/src/i18n/messages/zh/tools/twitter-gif-downloader.ts +138 -0
- package/src/i18n/messages/zh/tools/user-interview-insight-report-generator.ts +224 -0
- package/src/i18n/messages/zh/tools/user-interview-record-generator.ts +226 -0
- package/src/i18n/messages/zh/tools-ui.ts +684 -0
- package/src/i18n/messages/zh-tw/page/tools.ts +115 -0
- package/src/i18n/messages/zh-tw/tools/app-icon-resizer.ts +242 -0
- package/src/i18n/messages/zh-tw/tools/app-store-screenshot-generator.ts +145 -0
- package/src/i18n/messages/zh-tw/tools/build-in-public-story-generator.ts +230 -0
- package/src/i18n/messages/zh-tw/tools/cold-start-channel-selector.ts +440 -0
- package/src/i18n/messages/zh-tw/tools/commercial-bp-generator.ts +302 -0
- package/src/i18n/messages/zh-tw/tools/community-feedback-inbox.ts +217 -0
- package/src/i18n/messages/zh-tw/tools/community-pain-point-extractor.ts +230 -0
- package/src/i18n/messages/zh-tw/tools/community-post-risk-checker.ts +200 -0
- package/src/i18n/messages/zh-tw/tools/competitor-analysis.ts +192 -0
- package/src/i18n/messages/zh-tw/tools/email-template-generator.ts +302 -0
- package/src/i18n/messages/zh-tw/tools/engine.ts +68 -0
- package/src/i18n/messages/zh-tw/tools/gtm-readiness-checklist.ts +166 -0
- package/src/i18n/messages/zh-tw/tools/index.ts +73 -0
- package/src/i18n/messages/zh-tw/tools/koko-codex-assistant.ts +170 -0
- package/src/i18n/messages/zh-tw/tools/logo-generator.ts +71 -0
- package/src/i18n/messages/zh-tw/tools/market-forecast-report.ts +228 -0
- package/src/i18n/messages/zh-tw/tools/million-user-growth-test.ts +385 -0
- package/src/i18n/messages/zh-tw/tools/og-image-generator.ts +173 -0
- package/src/i18n/messages/zh-tw/tools/pitch-deck-generator.ts +358 -0
- package/src/i18n/messages/zh-tw/tools/product-agreement-generator.ts +401 -0
- package/src/i18n/messages/zh-tw/tools/product-hunt-launch-planner.ts +267 -0
- package/src/i18n/messages/zh-tw/tools/product-name-generator.ts +383 -0
- package/src/i18n/messages/zh-tw/tools/product-poster-generator.ts +282 -0
- package/src/i18n/messages/zh-tw/tools/product-ui-generator.ts +234 -0
- package/src/i18n/messages/zh-tw/tools/reddit-pain-point-finder.ts +162 -0
- package/src/i18n/messages/zh-tw/tools/shared.ts +24 -0
- package/src/i18n/messages/zh-tw/tools/social-listening-research-report.ts +181 -0
- package/src/i18n/messages/zh-tw/tools/social-media-profile-generator.ts +22 -0
- package/src/i18n/messages/zh-tw/tools/social-platform-asset-adapter.ts +284 -0
- package/src/i18n/messages/zh-tw/tools/social-profile-kit.ts +150 -0
- package/src/i18n/messages/zh-tw/tools/startup-idea-research.ts +165 -0
- package/src/i18n/messages/zh-tw/tools/tarot-reading.ts +228 -0
- package/src/i18n/messages/zh-tw/tools/twitter-gif-downloader.ts +138 -0
- package/src/i18n/messages/zh-tw/tools/user-interview-insight-report-generator.ts +224 -0
- package/src/i18n/messages/zh-tw/tools/user-interview-record-generator.ts +226 -0
- package/src/i18n/messages/zh-tw/tools-ui.ts +525 -0
- package/src/index.ts +15 -0
- package/src/lib/activity-task-handoff.ts +404 -0
- package/src/lib/api/errors.ts +39 -0
- package/src/lib/app-origin.ts +30 -0
- package/src/lib/fact-claim-contract.ts +68 -0
- package/src/lib/fake-delay.ts +3 -0
- package/src/lib/file/download.ts +10 -0
- package/src/lib/routing/locale-paths.ts +27 -0
- package/src/lib/seo-meta.ts +3 -0
- package/src/lib/tools/app-icon-resizer-schema.ts +191 -0
- package/src/lib/tools/app-store-screenshot-generator-schema.ts +185 -0
- package/src/lib/tools/build-in-public-story-generator-schema.ts +67 -0
- package/src/lib/tools/build-in-public-story-generator.format.ts +507 -0
- package/src/lib/tools/cold-start-channel-selector-schema.ts +147 -0
- package/src/lib/tools/commercial-bp-generator-schema.ts +222 -0
- package/src/lib/tools/community-feedback-inbox-schema.ts +125 -0
- package/src/lib/tools/community-feedback-inbox.format.ts +764 -0
- package/src/lib/tools/community-pain-point-extractor-schema.ts +166 -0
- package/src/lib/tools/community-post-risk-checker-schema.ts +99 -0
- package/src/lib/tools/community-post-risk-checker.format.ts +557 -0
- package/src/lib/tools/competitor-analysis-schema.ts +144 -0
- package/src/lib/tools/draft-preview-access.ts +3 -0
- package/src/lib/tools/draft-store.ts +69 -0
- package/src/lib/tools/email-template-generator-schema.ts +124 -0
- package/src/lib/tools/gtm-checklist-copy.ts +57 -0
- package/src/lib/tools/gtm-checklist-structure.ts +37 -0
- package/src/lib/tools/image-download.ts +68 -0
- package/src/lib/tools/input-quality.ts +97 -0
- package/src/lib/tools/logo-generator-schema.ts +224 -0
- package/src/lib/tools/market-forecast-report-schema.ts +299 -0
- package/src/lib/tools/mcp-registry.ts +16 -0
- package/src/lib/tools/mcp-types.ts +18 -0
- package/src/lib/tools/million-user-growth-test-schema.ts +49 -0
- package/src/lib/tools/million-user-growth-test.ts +181 -0
- package/src/lib/tools/og-image-generator-render.ts +448 -0
- package/src/lib/tools/og-image-generator-schema.ts +140 -0
- package/src/lib/tools/ops-catalog.ts +102 -0
- package/src/lib/tools/pitch-deck-generator-schema.ts +182 -0
- package/src/lib/tools/pitch-deck-package.ts +0 -0
- package/src/lib/tools/product-agreement-generator-schema.ts +168 -0
- package/src/lib/tools/product-hunt-launch-planner-schema.ts +136 -0
- package/src/lib/tools/product-hunt-launch-planner.format.ts +72 -0
- package/src/lib/tools/product-name-generator-schema.ts +563 -0
- package/src/lib/tools/product-poster-generator-schema.ts +215 -0
- package/src/lib/tools/product-ui-generator-schema.ts +157 -0
- package/src/lib/tools/reddit-pain-point-finder-schema.ts +88 -0
- package/src/lib/tools/resolve-tool-locale-copy.ts +75 -0
- package/src/lib/tools/slug.ts +60 -0
- package/src/lib/tools/social-listening-research-report-schema.ts +105 -0
- package/src/lib/tools/social-platform-asset-adapter-schema.ts +152 -0
- package/src/lib/tools/social-profile-kit.constants.ts +12 -0
- package/src/lib/tools/social-profile-kit.generation.ts +257 -0
- package/src/lib/tools/social-profile-kit.input.ts +290 -0
- package/src/lib/tools/social-profile-kit.manual.ts +481 -0
- package/src/lib/tools/social-profile-kit.package.ts +220 -0
- package/src/lib/tools/social-profile-kit.schema.ts +328 -0
- package/src/lib/tools/startup-idea-research-schema.ts +107 -0
- package/src/lib/tools/tarot-imagery.ts +89 -0
- package/src/lib/tools/tarot-reading.ts +1044 -0
- package/src/lib/tools/tool-message-keys.ts +18 -0
- package/src/lib/tools/types.ts +32 -0
- package/src/lib/tools/user-interview.format.ts +147 -0
- package/src/lib/tools/user-interview.generation.ts +670 -0
- package/src/lib/tools/user-interview.schema.ts +192 -0
- package/src/lib/zip.ts +106 -0
- package/src/services/tools/handlers/gtm-readiness-checklist.ts +71 -0
- package/src/services/tools/handlers/types.ts +7 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
const coldStartChannelSelector = {
|
|
2
|
+
meta: {
|
|
3
|
+
title: "Growth Channel Strategy Generator",
|
|
4
|
+
description: "Build a growth channel strategy for an early product. Add your product, audience, time, and budget to choose the first channel to test and the signal that guides the next step.",
|
|
5
|
+
intro: "Choose the first growth channel to test, then use real signals to decide what comes next.",
|
|
6
|
+
category: "Growth strategy tools",
|
|
7
|
+
keywords: [
|
|
8
|
+
"customer acquisition channels",
|
|
9
|
+
"growth channel strategy",
|
|
10
|
+
"customer acquisition channels for startups",
|
|
11
|
+
"how to choose customer acquisition channels",
|
|
12
|
+
"early-stage growth marketing strategy",
|
|
13
|
+
],
|
|
14
|
+
inputSignal: "Product URL or product description",
|
|
15
|
+
outputSignal: "Growth channel strategy + first validation plan",
|
|
16
|
+
boundarySignal: "Decision support based on public context and your inputs; review before spending budget or committing long term",
|
|
17
|
+
},
|
|
18
|
+
examples: [
|
|
19
|
+
{
|
|
20
|
+
label: "Newly launched web SaaS",
|
|
21
|
+
input: "Product URL https://example.com, North America, 3-7 hours/week, under $500 budget",
|
|
22
|
+
expectedOutput: "Ranks 3-5 channels with fit reasons, first actions, validation metrics, avoid-for-now channels, and a 7-day plan.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: "App without a website",
|
|
26
|
+
input: "Manual description for a Chinese productivity app in private beta, no budget, 8-15 hours/week",
|
|
27
|
+
expectedOutput: "Uses the description, lowers confidence for missing public signals, and lists missing info instead of inventing evidence.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
label: "Developer tool",
|
|
31
|
+
input: "Product URL for an open-source API developer tool with a GitHub repo and global market",
|
|
32
|
+
expectedOutput: "Prioritizes developer communities, documentation-led content, GitHub/Show HN paths, and explains why broad ads or social may wait.",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
guide: {
|
|
36
|
+
workspaceTitle: "Growth Channel Strategy",
|
|
37
|
+
workspaceHint:
|
|
38
|
+
"Add your product, customer, time, and budget. Get a growth channel strategy to test, why it fits, and the signal that tells you what to do next.",
|
|
39
|
+
workspaceBadge: "Early-stage growth channel strategy",
|
|
40
|
+
standard: {
|
|
41
|
+
benefits: {
|
|
42
|
+
title: "Choose a first channel you can act on",
|
|
43
|
+
cards: [
|
|
44
|
+
{
|
|
45
|
+
title: "Start with one practical option",
|
|
46
|
+
body: "Get 3–5 customer acquisition channels ranked for your audience, stage, market, time, and budget—then focus your first effort on one.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: "See why it fits now",
|
|
50
|
+
body: "Understand why a channel matches your current situation, what the smallest first action is, and why other options should wait.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
title: "Know what would change the decision",
|
|
54
|
+
body: "Use a small test and a clear signal—such as replies, trials, signups, or interviews—to continue, adjust, or move on.",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
reportPreview: {
|
|
59
|
+
eyebrow: "Illustrative channel strategy",
|
|
60
|
+
title: "What your growth channel strategy will help you decide",
|
|
61
|
+
intro:
|
|
62
|
+
"Based on your product, customer, stage, and resources, you will see which channel to test first, why it is worth starting there, what to do, and which signal should earn the next investment.",
|
|
63
|
+
inputLabel: "Illustrative situation",
|
|
64
|
+
input:
|
|
65
|
+
"A B2B SaaS in private beta for small sales teams; North America; 3–7 hours per week; under $500 to test.",
|
|
66
|
+
outputLabel: "Your channel strategy",
|
|
67
|
+
fields: [
|
|
68
|
+
{
|
|
69
|
+
label: "What to test first",
|
|
70
|
+
body: "The customer acquisition channel most worth testing first with the time, budget, and evidence you have now.",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: "Why it fits now",
|
|
74
|
+
body: "Why the channel matches your customer and stage, plus the smallest practical first action.",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: "What to do first",
|
|
78
|
+
body: "The smallest action you can take to reach the right customer and learn quickly.",
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: "What signal earns the next step",
|
|
82
|
+
body: "The evidence that tells you to continue, adjust the experiment, or try the next customer acquisition channel.",
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
imageTextSections: [
|
|
87
|
+
{
|
|
88
|
+
id: "channel-priority",
|
|
89
|
+
title: "What are the best growth channels for an early-stage startup?",
|
|
90
|
+
body: [
|
|
91
|
+
"There is no single best growth channel for every startup. For an early team, the best place to start is usually where potential customers already pay attention, where your product can earn trust, and where you can show up consistently.",
|
|
92
|
+
"SEO and content, founder-led outreach, communities, partnerships, launch platforms, referrals, and paid acquisition can all work. Add a public product URL or a specific pre-launch brief and the tool will rank 3–5 options for your situation, not a generic list.",
|
|
93
|
+
],
|
|
94
|
+
image: {
|
|
95
|
+
src: "/tools/cold-start-channel-selector-section-priority-8bit-v3.webp",
|
|
96
|
+
alt: "A product brief becoming a focused first-channel strategy",
|
|
97
|
+
},
|
|
98
|
+
imageFirst: true,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: "channel-tradeoffs",
|
|
102
|
+
title: "How should a startup choose its first growth channel?",
|
|
103
|
+
body: [
|
|
104
|
+
"Choose a customer you can realistically reach and one small test you can repeat. Compare customer fit, product stage, required assets, speed to feedback, cost, and the smallest action likely to produce replies, trials, signups, or interviews.",
|
|
105
|
+
"The best first channel is not necessarily the largest one. It is the channel that can give you a useful learning signal with the product, proof, time, and budget you have now.",
|
|
106
|
+
],
|
|
107
|
+
image: {
|
|
108
|
+
src: "/tools/cold-start-channel-selector-section-tradeoffs-8bit-v2.webp",
|
|
109
|
+
alt: "A balanced decision between a channel to test now and a channel to defer",
|
|
110
|
+
},
|
|
111
|
+
background: "muted",
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: "channel-validation",
|
|
115
|
+
title: "Should an early-stage startup start with organic or paid acquisition?",
|
|
116
|
+
body: [
|
|
117
|
+
"When you still need customer language and product feedback, organic and founder-led channels are often the better first test. They let you learn from conversations, communities, content, and direct outreach before scaling spend.",
|
|
118
|
+
"Paid acquisition becomes more useful when the audience, conversion path, tracking, economics, and test budget are clear. The strategy makes this trade-off visible instead of treating ads as the default answer.",
|
|
119
|
+
],
|
|
120
|
+
image: {
|
|
121
|
+
src: "/tools/cold-start-channel-selector-section-validation-8bit-v2.webp",
|
|
122
|
+
alt: "A small outreach experiment receiving a reply and an early validation signal",
|
|
123
|
+
},
|
|
124
|
+
imageFirst: true,
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
narrativeSections: [
|
|
128
|
+
{
|
|
129
|
+
id: "channel-validation",
|
|
130
|
+
title: "How do you test whether a growth channel is working?",
|
|
131
|
+
body: [
|
|
132
|
+
"Test one channel with one audience, one concrete action, and one observable signal before spending more. A useful signal might be qualified replies, trials, signups, interviews, or another outcome that shows the right people are responding.",
|
|
133
|
+
"Treat the result as a hypothesis. Run the suggested first action, watch the stated signal, then continue, change the test, or move on before committing more budget.",
|
|
134
|
+
],
|
|
135
|
+
background: "muted",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: "growth-strategy-context",
|
|
139
|
+
title: "How does a growth channel strategy fit into a growth marketing strategy?",
|
|
140
|
+
body: [
|
|
141
|
+
"A growth channel strategy answers one early decision: where should you look for the first customers and learning signals? A broader growth marketing strategy also covers positioning, the conversion path, activation, retention, measurement, and a portfolio of experiments.",
|
|
142
|
+
"Use this first channel test to learn what resonates, then use that evidence to decide the next channel, message, or experiment. It is the first move in a growth marketing strategy, not a substitute for the whole strategy.",
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
generation: {
|
|
147
|
+
title: "Turn your first channel test into the next growth decision",
|
|
148
|
+
ctaLabel: "Get my channel strategy",
|
|
149
|
+
steps: [
|
|
150
|
+
{
|
|
151
|
+
title: "Describe your product and customer",
|
|
152
|
+
body: "Add a public URL or briefly describe the customer, problem, product, and current stage. A manual brief works for private beta and pre-launch products too.",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
title: "Set the limits you can work with",
|
|
156
|
+
body: "Choose your market, stage, weekly capacity, and test budget so the strategy reflects what you can actually execute now.",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
title: "Get a growth channel strategy you can test",
|
|
160
|
+
body: "See which customer acquisition channels are most worth testing now, why they fit, what to do first, and which alternatives should wait.",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
title: "Use the result to decide what comes next",
|
|
164
|
+
body: "Use replies, signups, trials, saves, or interviews to decide whether to continue, revise, or move on—then build the next experiment from what you learned.",
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
},
|
|
168
|
+
faqIntro: "Answers to the questions you may have before you choose, test, and revisit a customer acquisition channel.",
|
|
169
|
+
faqCtaLabel: "Get my channel strategy",
|
|
170
|
+
},
|
|
171
|
+
valueKicker: "What you get",
|
|
172
|
+
valueTitle: "Turn too many channel ideas into the few worth testing first",
|
|
173
|
+
valueIntro:
|
|
174
|
+
"Cold start growth is usually constrained by time, trust, and proof. This selector weighs product type, market, stage, budget, and weekly effort before it recommends channels.",
|
|
175
|
+
valueItems: [
|
|
176
|
+
{
|
|
177
|
+
title: "Ranked channels",
|
|
178
|
+
body: "Get 3-5 priority channels with a clear reason for why they fit the current moment.",
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
title: "Avoid-for-now list",
|
|
182
|
+
body: "See which tempting channels should wait, whether that is ads, broad social, SEO, or launch platforms.",
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
title: "First action",
|
|
186
|
+
body: "Each channel includes the first concrete action so the report does not stop at strategy.",
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
title: "Simple 7-day plan",
|
|
190
|
+
body: "Use a lightweight execution plan to test whether the first signal is real.",
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
standardsKicker: "Why Tomako",
|
|
194
|
+
standardsTitle: "A useful selector removes noise before adding tactics",
|
|
195
|
+
standardsIntro:
|
|
196
|
+
"Most templates say Product Hunt, Reddit, SEO, ads, and newsletters can all work. A useful selector explains why this channel, why now, and why not the others.",
|
|
197
|
+
standards: [
|
|
198
|
+
{
|
|
199
|
+
title: "Product fit",
|
|
200
|
+
body: "Developer tools, consumer apps, B2B SaaS, and content products should not get the same channel stack.",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
title: "Resource realism",
|
|
204
|
+
body: "Three hours a week and fifteen hours a week should lead to different recommendations.",
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
title: "Disproof signals",
|
|
208
|
+
body: "Each recommendation should say what would make you pause, change, or drop the channel.",
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
title: "Uncertainty kept visible",
|
|
212
|
+
body: "When inputs are thin, the report should list missing information instead of inventing confidence.",
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
resultKicker: "How to use it",
|
|
216
|
+
resultTitle: "Treat the report as a validation loop, not a final growth strategy",
|
|
217
|
+
resultGuidanceItems: [
|
|
218
|
+
"Start with the first-priority channel until you can judge whether the signal is real.",
|
|
219
|
+
"If the report lists missing information, fill that in before you commit to a longer plan.",
|
|
220
|
+
"Do not turn low-confidence advice into a long-term strategy. Use the 7-day plan to test replies, signups, saves, trials, or interviews.",
|
|
221
|
+
"Copy the first actions into your Launch or Growth board, then adjust from real feedback.",
|
|
222
|
+
],
|
|
223
|
+
useCasesKicker: "Use cases",
|
|
224
|
+
useCasesTitle: "For teams ready to start growth without trying everything at once",
|
|
225
|
+
useCasesIntro:
|
|
226
|
+
"It does not replace a growth lead. It gives your first channel hypothesis a sharper shape.",
|
|
227
|
+
useCases: [
|
|
228
|
+
"An indie maker just launched a web SaaS and needs to choose between SEO, community, and launch platforms.",
|
|
229
|
+
"A mobile app has no full website yet, so the team needs a channel read from a manual product brief.",
|
|
230
|
+
"A developer tool already has docs or GitHub activity and needs to decide between content, communities, and launch submissions.",
|
|
231
|
+
],
|
|
232
|
+
faqKicker: "FAQ",
|
|
233
|
+
faqTitle: "Customer Acquisition Channel Selector FAQs",
|
|
234
|
+
faqItems: [
|
|
235
|
+
{
|
|
236
|
+
question: "What is a growth channel strategy generator?",
|
|
237
|
+
answer:
|
|
238
|
+
"A growth channel strategy generator is a customer-acquisition decision tool that helps you choose which channels to test first. Tomako compares your product, customer, stage, market, time, and budget, then returns a ranked strategy instead of a generic list of marketing channels.",
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
question: "How do I use the growth channel strategy generator?",
|
|
242
|
+
answer:
|
|
243
|
+
"Enter a public product URL or a specific product brief, then choose the product type, market, stage, weekly time, and test budget. The growth channel strategy generator uses those constraints to build a first-channel strategy; adding your audience, existing assets, and channels already tried can make the comparison more specific.",
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
question: "What is included in a customer acquisition channel report?",
|
|
247
|
+
answer:
|
|
248
|
+
"The customer acquisition channel report includes 3–5 priority channels, why each fits now, a first action, required assets, validation metrics, risks, channels to defer, a short execution plan, missing information, and a confidence boundary.",
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
question: "Can SaaS or pre-launch products use the customer acquisition channel selector?",
|
|
252
|
+
answer:
|
|
253
|
+
"Yes. A public website is helpful but not required: SaaS, private beta, and pre-launch teams can provide a manual brief that explains the customer, problem, product, and stage. With less public evidence, the customer acquisition channel selector may return a lower-confidence report and more missing information to review.",
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
question: "Can a customer acquisition channel selector guarantee growth?",
|
|
257
|
+
answer:
|
|
258
|
+
"No. A customer acquisition channel selector produces a ranked hypothesis, not guaranteed customers or revenue. Validate the recommendation with real replies, signups, trials, retention, or interviews before committing long-term budget or treating it as a complete customer acquisition strategy.",
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
boundaryTitle: "Scope and limits",
|
|
262
|
+
boundaryItems: [
|
|
263
|
+
"Supports product URLs, app/tool descriptions, market, stage, budget, and time constraints.",
|
|
264
|
+
"Does not process authenticated pages, private data, paid databases, or unavailable pages.",
|
|
265
|
+
"Does not guarantee growth, platform acceptance, ad performance, or revenue.",
|
|
266
|
+
"Results are decision support based on public information and the context you provide. Review the report before committing budget or a long-term channel plan.",
|
|
267
|
+
],
|
|
268
|
+
ctaHint: "Want to check launch foundations next? Use the GTM readiness checklist.",
|
|
269
|
+
ctaPrimary: "Check GTM readiness",
|
|
270
|
+
ctaSecondary: "Browse all tools",
|
|
271
|
+
visualAlt: {
|
|
272
|
+
hero: "A product brief becoming a focused first-channel strategy",
|
|
273
|
+
standards: "A balanced decision between a channel to test now and a channel to defer",
|
|
274
|
+
result: "A small customer-acquisition experiment producing an early signal",
|
|
275
|
+
useCases: "A product brief, practical limits, and a reviewable channel recommendation",
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
widget: {
|
|
279
|
+
productUrlLabel: "Product URL",
|
|
280
|
+
productUrlPlaceholder: "https://your-product.com",
|
|
281
|
+
descriptionLabel: "Product description",
|
|
282
|
+
descriptionHint: "Use this for private beta or pre-launch products",
|
|
283
|
+
descriptionPlaceholder:
|
|
284
|
+
"In 2-4 sentences, describe the problem, audience, product, and current stage.",
|
|
285
|
+
productFormLabel: "Product form",
|
|
286
|
+
marketLabel: "Target market",
|
|
287
|
+
stageLabel: "Current stage",
|
|
288
|
+
hoursLabel: "Weekly time",
|
|
289
|
+
budgetLabel: "Budget",
|
|
290
|
+
audienceLabel: "Target audience",
|
|
291
|
+
audiencePlaceholder: "Indie hackers, ecommerce operators, B2B sales teams...",
|
|
292
|
+
assetsLabel: "Existing assets",
|
|
293
|
+
assetsPlaceholder: "Website, docs, GitHub, email list, community, case studies, content...",
|
|
294
|
+
triedLabel: "Channels already tried",
|
|
295
|
+
triedPlaceholder: "Product Hunt, SEO articles, Reddit, LinkedIn, Xiaohongshu...",
|
|
296
|
+
constraintsLabel: "Constraints or preferences",
|
|
297
|
+
constraintsPlaceholder: "No ads, no public customer stories, solo founder, compliance limits...",
|
|
298
|
+
showAdvanced: "Add advanced context",
|
|
299
|
+
hideAdvanced: "Hide advanced context",
|
|
300
|
+
submit: "Get a channel strategy",
|
|
301
|
+
submitting: "Preparing your channel strategy",
|
|
302
|
+
running: "Building your channel strategy",
|
|
303
|
+
inputHint:
|
|
304
|
+
"Use public product context only. If no URL is available, add a specific product description and audience; the report is a hypothesis to validate, not a promise of growth.",
|
|
305
|
+
previewTitle: "Get your channel strategy in three steps",
|
|
306
|
+
previewSubtitle: "Tell us what you are building and the resources you can use. We will turn that context into a channel test you can start now.",
|
|
307
|
+
previewSteps: [
|
|
308
|
+
"Describe your product and target customer",
|
|
309
|
+
"Add your market, stage, time, and budget",
|
|
310
|
+
"Get a channel strategy to test",
|
|
311
|
+
],
|
|
312
|
+
rightPanelHint: "Your channel strategy and first validation plan will appear here after you submit.",
|
|
313
|
+
previewItems: [
|
|
314
|
+
"The 3-5 channels most worth validating now.",
|
|
315
|
+
"Channels to avoid for the moment, with reasons.",
|
|
316
|
+
"First actions, validation metrics, and risks for each channel.",
|
|
317
|
+
"A simple 7-day execution plan.",
|
|
318
|
+
],
|
|
319
|
+
runningTitle: "Building your channel strategy",
|
|
320
|
+
runningHint:
|
|
321
|
+
"We are comparing your product context and constraints to build your first-channel strategy. This can take a minute or two.",
|
|
322
|
+
loadingSteps: [
|
|
323
|
+
{ status: "complete", title: "Reading product context", countdown: "" },
|
|
324
|
+
{ status: "active", title: "Comparing channel options", countdown: "" },
|
|
325
|
+
{ status: "pending", title: "Preparing the first test", countdown: "" },
|
|
326
|
+
],
|
|
327
|
+
loadingTip:
|
|
328
|
+
"Cold-start channels usually work better when one low-cost community, content, or partner path is validated before heavier ads or long-term SEO.",
|
|
329
|
+
runningStatusLabel: "Generating your channel strategy",
|
|
330
|
+
runningTipLabel: "Tip",
|
|
331
|
+
reportTitle: "Customer acquisition channel strategy",
|
|
332
|
+
copyReport: "Copy report",
|
|
333
|
+
copiedReport: "Copied",
|
|
334
|
+
analyzeAnother: "Analyze another",
|
|
335
|
+
retry: "Retry",
|
|
336
|
+
errorTitle: "We could not build the channel strategy",
|
|
337
|
+
sections: {
|
|
338
|
+
priority: "Priority channels",
|
|
339
|
+
plan: "Simple execution plan",
|
|
340
|
+
avoid: "Avoid for now",
|
|
341
|
+
boundary: "Confidence boundary",
|
|
342
|
+
},
|
|
343
|
+
labels: {
|
|
344
|
+
whyNow: "Why now",
|
|
345
|
+
firstAction: "First action",
|
|
346
|
+
assets: "Assets needed",
|
|
347
|
+
metrics: "Validation metrics",
|
|
348
|
+
risks: "Risks",
|
|
349
|
+
actions: "Actions",
|
|
350
|
+
expectedSignal: "Expected signal",
|
|
351
|
+
missingInfo: "Missing information",
|
|
352
|
+
},
|
|
353
|
+
priority: {
|
|
354
|
+
first: "First priority",
|
|
355
|
+
second: "Second priority",
|
|
356
|
+
third: "Third priority",
|
|
357
|
+
later: "Later",
|
|
358
|
+
},
|
|
359
|
+
confidence: {
|
|
360
|
+
high: "High confidence",
|
|
361
|
+
medium: "Medium confidence",
|
|
362
|
+
low: "Low confidence",
|
|
363
|
+
},
|
|
364
|
+
status: {
|
|
365
|
+
PENDING: "Starting analysis",
|
|
366
|
+
STREAMING: "Analyzing",
|
|
367
|
+
AWAITING_INPUT: "Preparing your report",
|
|
368
|
+
SUCCEEDED: "Reading your report",
|
|
369
|
+
default: "Processing",
|
|
370
|
+
},
|
|
371
|
+
errors: {
|
|
372
|
+
missingInput: "Enter a product URL, or add a specific product description.",
|
|
373
|
+
invalidUrl: "Enter a valid public product URL, or remove it and use a product description instead.",
|
|
374
|
+
weakDescription: "The description is too short. Add audience, problem, and current stage.",
|
|
375
|
+
validation: "Fix the input before generating the report.",
|
|
376
|
+
submit: "We could not start the analysis. Please retry in a moment.",
|
|
377
|
+
task: "The analysis did not finish, so there is no channel strategy to show. Please retry.",
|
|
378
|
+
timeout: "The analysis is taking longer than expected. Please retry in a moment.",
|
|
379
|
+
schema: "The report could not be read safely. Please retry the analysis.",
|
|
380
|
+
},
|
|
381
|
+
productFormOptions: [
|
|
382
|
+
{ value: "unknown", label: "Not sure" },
|
|
383
|
+
{ value: "web_app", label: "Web / SaaS" },
|
|
384
|
+
{ value: "mobile_app", label: "Mobile app" },
|
|
385
|
+
{ value: "browser_extension", label: "Browser extension" },
|
|
386
|
+
{ value: "api_devtool", label: "API / developer tool" },
|
|
387
|
+
{ value: "open_source", label: "Open source" },
|
|
388
|
+
{ value: "content_product", label: "Content / knowledge product" },
|
|
389
|
+
{ value: "other", label: "Other" },
|
|
390
|
+
],
|
|
391
|
+
marketOptions: [
|
|
392
|
+
{ value: "unknown", label: "Not sure" },
|
|
393
|
+
{ value: "global", label: "Global" },
|
|
394
|
+
{ value: "china", label: "China" },
|
|
395
|
+
{ value: "north_america", label: "North America" },
|
|
396
|
+
{ value: "europe", label: "Europe" },
|
|
397
|
+
{ value: "japan_korea", label: "Japan / Korea" },
|
|
398
|
+
{ value: "southeast_asia", label: "Southeast Asia" },
|
|
399
|
+
{ value: "other", label: "Other" },
|
|
400
|
+
],
|
|
401
|
+
stageOptions: [
|
|
402
|
+
{ value: "idea", label: "Idea" },
|
|
403
|
+
{ value: "prototype", label: "Prototype" },
|
|
404
|
+
{ value: "private_beta", label: "Private beta" },
|
|
405
|
+
{ value: "launched", label: "Newly launched" },
|
|
406
|
+
{ value: "early_traction", label: "Early traction" },
|
|
407
|
+
],
|
|
408
|
+
weeklyHoursOptions: [
|
|
409
|
+
{ value: "under_3", label: "Under 3 hours" },
|
|
410
|
+
{ value: "3_7", label: "3-7 hours" },
|
|
411
|
+
{ value: "8_15", label: "8-15 hours" },
|
|
412
|
+
{ value: "16_plus", label: "16+ hours" },
|
|
413
|
+
],
|
|
414
|
+
budgetOptions: [
|
|
415
|
+
{ value: "none", label: "No budget" },
|
|
416
|
+
{ value: "under_500", label: "Under $500" },
|
|
417
|
+
{ value: "500_2000", label: "$500-$2,000" },
|
|
418
|
+
{ value: "2000_plus", label: "$2,000+" },
|
|
419
|
+
],
|
|
420
|
+
},
|
|
421
|
+
} as const;
|
|
422
|
+
|
|
423
|
+
export default coldStartChannelSelector;
|