@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,230 @@
|
|
|
1
|
+
const communityPainPointExtractor = {
|
|
2
|
+
meta: {
|
|
3
|
+
title: "Community Pain Point Extractor",
|
|
4
|
+
displayTitle: "Community Pain Point Extractor",
|
|
5
|
+
description: "Find public Reddit, X, and Hacker News complaints, quotes, paid-intent clues, and a landing-page test for your product direction. Evidence gaps stay visible.",
|
|
6
|
+
intro: "Turn a rough product direction into a reviewable community pain report. Find public discussions and repeated complaints first, then extract quotes, paid-intent signals, small feature bets, and landing page angles.",
|
|
7
|
+
category: "User research tools",
|
|
8
|
+
keywords: [
|
|
9
|
+
"community pain point extractor",
|
|
10
|
+
"reddit pain point finder",
|
|
11
|
+
"user pain point research",
|
|
12
|
+
"hacker news user research",
|
|
13
|
+
"landing page angle",
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
examples: [
|
|
17
|
+
{
|
|
18
|
+
label: "Shopify support direction",
|
|
19
|
+
input: "AI customer support tool for Shopify sellers",
|
|
20
|
+
expectedOutput: "Relevant Reddit/X/HN communities, repeated order and logistics complaints, user quotes, willingness to pay, small widget entry points, and landing page angles.",
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
widget: {
|
|
24
|
+
directionLabel: "Product direction",
|
|
25
|
+
directionPlaceholder: "Example: AI customer support tool for Shopify sellers",
|
|
26
|
+
targetUsersLabel: "Target users (optional)",
|
|
27
|
+
targetUsersPlaceholder: "Shopify indie sellers, support leads",
|
|
28
|
+
marketLabel: "Market / language (optional)",
|
|
29
|
+
marketPlaceholder: "US, English-speaking market",
|
|
30
|
+
platformLabel: "Priority platform",
|
|
31
|
+
platform: {
|
|
32
|
+
all: "Reddit + X + Hacker News",
|
|
33
|
+
reddit: "Reddit",
|
|
34
|
+
x: "X",
|
|
35
|
+
hackernews: "Hacker News",
|
|
36
|
+
other: "Other public source",
|
|
37
|
+
},
|
|
38
|
+
focusLabel: "Focus (optional)",
|
|
39
|
+
focusPlaceholder: "Willingness to pay, entry feature, landing page copy",
|
|
40
|
+
inputHint:
|
|
41
|
+
"A direction is enough for the first pass. The tool uses public information only; private communities, logged-in content, and unverifiable quotes are treated as missing evidence.",
|
|
42
|
+
submit: "Extract community pains",
|
|
43
|
+
submitting: "Submitting…",
|
|
44
|
+
running: "Researching…",
|
|
45
|
+
emptyTitle: "The community pain report will appear here",
|
|
46
|
+
emptyHint:
|
|
47
|
+
"The agent will inspect public Reddit, X, and Hacker News discussions, then summarize repeated complaints, user quotes, paid-intent signals, and landing page angles.",
|
|
48
|
+
runningTitle: "Researching public community signals",
|
|
49
|
+
runningHint:
|
|
50
|
+
"The tool first collects public evidence in parallel, then clusters it into a pain report. Most directions should finish faster than manual community digging.",
|
|
51
|
+
partialTitle: "The report has started",
|
|
52
|
+
partialHint: "Completed modules appear first. Communities, pain clusters, and page angles will keep filling in.",
|
|
53
|
+
progressTitle: "Recent progress",
|
|
54
|
+
progressSteps: [
|
|
55
|
+
"Direction received. Turning it into searchable user-research questions.",
|
|
56
|
+
"Collecting Reddit, X, Hacker News, and public web signals in parallel.",
|
|
57
|
+
"Filtering repeated complaints, user quotes, and current workarounds from the evidence pack.",
|
|
58
|
+
"Estimating frequency, pain severity, and willingness-to-pay signals.",
|
|
59
|
+
"Preparing entry features, landing page angles, and validation experiments.",
|
|
60
|
+
],
|
|
61
|
+
progressResultReady: "Structured report has been written back. Reading and validating the result.",
|
|
62
|
+
status: {
|
|
63
|
+
default: "Researching",
|
|
64
|
+
PENDING: "Queued",
|
|
65
|
+
STREAMING: "Researching",
|
|
66
|
+
AWAITING_INPUT: "Analyzing",
|
|
67
|
+
AWAITING_RESULT: "Compiling result",
|
|
68
|
+
PARTIAL_RESULT: "Still generating",
|
|
69
|
+
SUCCEEDED: "Finishing",
|
|
70
|
+
},
|
|
71
|
+
retry: "Retry",
|
|
72
|
+
errors: {
|
|
73
|
+
invalid: "Describe a real product direction in at least 10 characters and avoid test/demo placeholders.",
|
|
74
|
+
submit: "Submit failed. Check your network and try again.",
|
|
75
|
+
task: "The community research task failed. Please try again later.",
|
|
76
|
+
timeout: "The research timed out. Public information may be hard to access.",
|
|
77
|
+
schema: "The returned result format was invalid. Please retry.",
|
|
78
|
+
},
|
|
79
|
+
taskId: "Task",
|
|
80
|
+
partialTaskFallback: "in progress",
|
|
81
|
+
partialReportTitle: "Community pain report in progress",
|
|
82
|
+
partialBadge: "Partial result, still generating",
|
|
83
|
+
moduleLoading: {
|
|
84
|
+
currentPrefix: "Currently processing",
|
|
85
|
+
stepLabel: "Step",
|
|
86
|
+
estimatePrefix: "Est. remaining",
|
|
87
|
+
elapsedPrefix: "Elapsed",
|
|
88
|
+
seconds: "s",
|
|
89
|
+
overTime: "Still working",
|
|
90
|
+
generatedPrefix: "Generated",
|
|
91
|
+
painClusterUnit: "pain clusters",
|
|
92
|
+
progressAria: "Report module generation progress",
|
|
93
|
+
overallProgressAria: "Overall report generation progress",
|
|
94
|
+
modules: {
|
|
95
|
+
summary: {
|
|
96
|
+
title: "Task summary",
|
|
97
|
+
hint: "Turning the direction into a report title and top-level read.",
|
|
98
|
+
},
|
|
99
|
+
communities: {
|
|
100
|
+
title: "Relevant communities",
|
|
101
|
+
hint: "Filtering the most relevant Reddit, X, Hacker News, and public discussion sources.",
|
|
102
|
+
},
|
|
103
|
+
paidIntent: {
|
|
104
|
+
title: "Willingness to pay",
|
|
105
|
+
hint: "Separating budget signals, pricing friction, alternatives, and buying language.",
|
|
106
|
+
},
|
|
107
|
+
entryFeatures: {
|
|
108
|
+
title: "Entry features",
|
|
109
|
+
hint: "Compressing the pain into a small feature wedge that can be validated first.",
|
|
110
|
+
},
|
|
111
|
+
painClusters: {
|
|
112
|
+
title: "Repeated pain clusters",
|
|
113
|
+
hint: "Adding the next pain card with user language and an actionable angle.",
|
|
114
|
+
},
|
|
115
|
+
landing: {
|
|
116
|
+
title: "Landing page angles",
|
|
117
|
+
hint: "Turning the strongest pains into hero promises, target segments, and CTAs.",
|
|
118
|
+
},
|
|
119
|
+
experiments: {
|
|
120
|
+
title: "Validation experiments",
|
|
121
|
+
hint: "Preparing low-cost channels, methods, and metrics for the next test.",
|
|
122
|
+
},
|
|
123
|
+
sources: {
|
|
124
|
+
title: "Public sources",
|
|
125
|
+
hint: "Collecting source links, missing evidence, and public-information boundaries.",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
copyReport: "Copy report",
|
|
130
|
+
analyzeAnother: "Analyze another direction",
|
|
131
|
+
visit: "View source",
|
|
132
|
+
emptyList: "No clear public signal yet",
|
|
133
|
+
paidIntentSignal: "Paid-intent signal",
|
|
134
|
+
paidIntentObjection: "Payment objection",
|
|
135
|
+
frequencyLabel: "Frequency",
|
|
136
|
+
severityLabel: "Severity",
|
|
137
|
+
userQuotes: "User quotes",
|
|
138
|
+
microFeature: "Entry micro-feature",
|
|
139
|
+
landingAngle: "Landing page angle",
|
|
140
|
+
paySignal: "Willingness-to-pay read",
|
|
141
|
+
missingEvidence: "Missing evidence",
|
|
142
|
+
disclaimerFallback:
|
|
143
|
+
"This is an assistant research report from public information, not a market-size, revenue, or success promise. Validate with interviews, landing page tests, and actual payment signals.",
|
|
144
|
+
frequency: { low: "Low", medium: "Medium", high: "High" },
|
|
145
|
+
severity: { low: "Low", medium: "Medium", high: "High" },
|
|
146
|
+
confidence: { low: "Low confidence", medium: "Medium confidence", high: "High confidence" },
|
|
147
|
+
sections: {
|
|
148
|
+
communities: "Relevant communities",
|
|
149
|
+
paidIntent: "Willingness to pay",
|
|
150
|
+
entryFeatures: "Entry features",
|
|
151
|
+
painClusters: "Repeated pain clusters",
|
|
152
|
+
landing: "Landing page angles",
|
|
153
|
+
experiments: "Validation experiments",
|
|
154
|
+
sources: "Public sources",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
guide: {
|
|
158
|
+
workspaceHeading: "Find customer pain points people repeat in public",
|
|
159
|
+
workspaceHint: "Start with a product direction to surface public discussions, source-backed patterns, paid-intent clues, and one small test to run next.",
|
|
160
|
+
workspaceBadge: "Community pain point research",
|
|
161
|
+
visualAlt: {
|
|
162
|
+
hero: "Community discussion signals flowing into a pain point report bundle",
|
|
163
|
+
workspace: "Rough product direction transformed into pain, quote, and angle cards",
|
|
164
|
+
value: "Community complaints clustered into an opportunity map",
|
|
165
|
+
boundary: "Public sources, user quotes, and confidence boundaries",
|
|
166
|
+
useCase: "Pain report transformed into micro-features and landing page tests",
|
|
167
|
+
},
|
|
168
|
+
valueKicker: "What you get",
|
|
169
|
+
valueTitle: "Not “users need better UX”: evidence you can actually inspect",
|
|
170
|
+
valueItems: [
|
|
171
|
+
"Relevant community map: which subreddits, X discussions, and HN threads are worth reading first.",
|
|
172
|
+
"Repeated complaints and quotes: grouped by frequency, severity, and source so you can hear how users describe the pain.",
|
|
173
|
+
"Willingness-to-pay read: separates budget clues, alternatives, pricing complaints, and buying language from general noise.",
|
|
174
|
+
"Entry feature and page angles: turns pains into a small widget, hero promise, CTA, and next validation experiment.",
|
|
175
|
+
],
|
|
176
|
+
standardKicker: "Good-tool standard",
|
|
177
|
+
standardTitle: "A good pain finder proves the complaint repeats",
|
|
178
|
+
standardItems: [
|
|
179
|
+
"Specific sources: the report should point to communities, posts, or public search evidence instead of vague summaries.",
|
|
180
|
+
"Reviewable quotes: short quotes need source labels and links when possible; unverifiable material stays as an evidence note.",
|
|
181
|
+
"Frequency tiers: separate one-off venting from recurring complaints and high-emotion pain.",
|
|
182
|
+
"Actionable output: the final report should lead to an entry feature, landing page angle, and validation test.",
|
|
183
|
+
],
|
|
184
|
+
boundaryKicker: "Support and boundaries",
|
|
185
|
+
boundaryTitle: "Public signals only, with missing evidence called out",
|
|
186
|
+
boundaryItems: [
|
|
187
|
+
"Supports Reddit, X, Hacker News, and public web search signals; platform access can affect completeness.",
|
|
188
|
+
"Does not access private, logged-in, deleted, paywalled, or restricted content. You remain responsible for platform rules and user privacy.",
|
|
189
|
+
"Frequency is a research read, not an exact count. The report uses low / medium / high to express relative strength.",
|
|
190
|
+
"When public quotes are insufficient, the tool lists missing evidence and next interview questions instead of inventing clean conclusions.",
|
|
191
|
+
],
|
|
192
|
+
resultKicker: "Result guidance",
|
|
193
|
+
resultTitle: "Use the report for the smallest entry and page test",
|
|
194
|
+
resultGuidanceItems: [
|
|
195
|
+
"Pick one high-frequency, high-severity cluster that can be solved with a small feature, not every complaint at once.",
|
|
196
|
+
"Turn user language into a landing page hero promise, then support it with source context and a concrete scenario.",
|
|
197
|
+
"If paid intent is weak, test interviews, a waitlist, or concierge delivery before building the full SaaS.",
|
|
198
|
+
"If one community repeats the same complaint, test a focused widget, Chrome extension, or plugin before expanding scope.",
|
|
199
|
+
],
|
|
200
|
+
faqKicker: "FAQ",
|
|
201
|
+
faqTitle: "Community pain point research FAQs",
|
|
202
|
+
faqItems: [
|
|
203
|
+
{
|
|
204
|
+
question: "Does this crawl all of Reddit, X, and Hacker News?",
|
|
205
|
+
answer:
|
|
206
|
+
"No full-crawl promise. It researches public searchable communities, posts, and web signals, then marks gaps when sources are thin.",
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
question: "Are the user quotes real direct quotes?",
|
|
210
|
+
answer:
|
|
211
|
+
"The report is instructed to show direct quotes only when they are verifiable and to include source labels or links when available. Unverified material should be written as an evidence note.",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
question: "How reliable is the willingness-to-pay read?",
|
|
215
|
+
answer:
|
|
216
|
+
"It is directional. The agent looks for budget language, alternatives, pricing complaints, and existing paid tools. You still need landing pages, interviews, or actual payment tests.",
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
question: "Can I paste the result into a landing page?",
|
|
220
|
+
answer:
|
|
221
|
+
"Use it as a starting point for hero angles, feature bets, and CTAs. Keep human review in the loop before publishing quotes, quantities, or platform-specific claims as facts.",
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
ctaHint: "If the pain looks strong, validate the full startup idea or prepare interview questions next.",
|
|
225
|
+
ctaPrimary: "Validate a startup idea",
|
|
226
|
+
ctaSecondary: "Generate an interview guide",
|
|
227
|
+
},
|
|
228
|
+
} as const;
|
|
229
|
+
|
|
230
|
+
export default communityPainPointExtractor;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
const communityPostRiskChecker = {
|
|
2
|
+
meta: {
|
|
3
|
+
title: "Community Post Risk Checker",
|
|
4
|
+
description: "Paste a Reddit, r/SaaS, r/indiehackers, or Indie Hackers draft and check whether the title, CTA, process evidence, self-promotion paragraphs, and community tone feel too promotional.",
|
|
5
|
+
intro: "Run a pre-post risk review before publishing: see which paragraphs feel like ads, whether the CTA belongs in the body, comments, or nowhere, and what real process evidence is missing.",
|
|
6
|
+
category: "Community growth tools",
|
|
7
|
+
keywords: [
|
|
8
|
+
"community post risk checker",
|
|
9
|
+
"Reddit self promotion checker",
|
|
10
|
+
"r/SaaS post review tool",
|
|
11
|
+
"indie hackers post checker",
|
|
12
|
+
"startup community post review",
|
|
13
|
+
],
|
|
14
|
+
inputSignal: "Community post title + body draft + target community + CTA plan",
|
|
15
|
+
outputSignal: "Risk score + paragraph flags + CTA placement + revision checklist",
|
|
16
|
+
boundarySignal: "Public heuristic checker; reduces promotional risk, does not guarantee moderation outcomes",
|
|
17
|
+
},
|
|
18
|
+
examples: [
|
|
19
|
+
{
|
|
20
|
+
label: "r/SaaS feedback draft",
|
|
21
|
+
input: "Title: We launched an AI tool that helps SaaS founders get more users. The body includes product benefits, a signup link, and a feedback ask.",
|
|
22
|
+
expectedOutput: "Flags the title as promotional, detects early CTA risk, identifies missing process evidence, and recommends a comment-only or ask-only CTA.",
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
guide: {
|
|
26
|
+
heroVisualAlt:
|
|
27
|
+
"Community post draft with title, CTA, and self-promotion risk highlights",
|
|
28
|
+
workspaceBadge: "Public SEO tool",
|
|
29
|
+
workspaceHeading: "Check whether a community post reads like an ad",
|
|
30
|
+
workspaceHint:
|
|
31
|
+
"Paste a draft from any generator or your own notes. The checker scores promotion risk, flags risky paragraphs, and recommends where the CTA belongs before you post.",
|
|
32
|
+
workspaceVisualAlt:
|
|
33
|
+
"Workspace view showing a post draft and moderation risk annotations",
|
|
34
|
+
outputs: "What the checker returns",
|
|
35
|
+
outputItems: [
|
|
36
|
+
{
|
|
37
|
+
title: "Promotion risk score",
|
|
38
|
+
body: "A 0-100 risk score across title hype, CTA timing, process evidence, tone, self-promotion, and disclosure.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
title: "Paragraph flags",
|
|
42
|
+
body: "Specific body sections that look like self-promotion, early CTA, or product marketing to community readers.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: "CTA placement",
|
|
46
|
+
body: "A recommendation to keep the CTA out, move it to comments, place it late, or share it only if asked.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: "Revision plan",
|
|
50
|
+
body: "Concrete edits that make the post feel more like a real founder story and less like an announcement.",
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
useCaseHeading: "Use it before Reddit and Indie Hackers posts",
|
|
54
|
+
useCaseVisualAlt:
|
|
55
|
+
"Founder community post workflow with safer CTA placement and process evidence",
|
|
56
|
+
useCaseItems: [
|
|
57
|
+
"Review drafts for r/SaaS, r/indiehackers, Indie Hackers, founder forums, and small niche communities.",
|
|
58
|
+
"Catch the common failure mode: the post is useful in your head, but reads like a launch announcement to everyone else.",
|
|
59
|
+
"Turn the post back toward a real process: what you tried, what failed, what changed, and what you are asking.",
|
|
60
|
+
"Decide whether the link belongs in the body, first comment, a reply thread, or nowhere.",
|
|
61
|
+
],
|
|
62
|
+
boundaryHeading: "It reduces risk; it does not guarantee approval",
|
|
63
|
+
boundaryVisualAlt:
|
|
64
|
+
"Decision flow from draft review to revision with platform moderation boundaries",
|
|
65
|
+
boundaryItems: [
|
|
66
|
+
"The checker is a heuristic pre-post review, not a Reddit or Indie Hackers moderation engine.",
|
|
67
|
+
"It should not be framed as a way to bypass platform rules or hide commercial intent.",
|
|
68
|
+
"The safest internal Tomako workflow is still automatic: generated posts should pass this kind of check before the user sees them.",
|
|
69
|
+
"The public tool exists for external drafts, competitor copy, and founders who already wrote something elsewhere.",
|
|
70
|
+
],
|
|
71
|
+
seoHeading: "Why this works as an acquisition page",
|
|
72
|
+
seoVisualAlt:
|
|
73
|
+
"Risk analysis report showing title, CTA, process, tone, and transparency checks",
|
|
74
|
+
seoItems: [
|
|
75
|
+
"Search intent is problem-aware: users already fear that a post may look like self-promotion.",
|
|
76
|
+
"The tool gives immediate value without requiring users to understand Tomako's full workspace first.",
|
|
77
|
+
"It creates a natural bridge from public SEO traffic into Tomako's community post and build-in-public workflows.",
|
|
78
|
+
"It is more defensible than auto-posting because it helps users respect community norms instead of mass publishing.",
|
|
79
|
+
],
|
|
80
|
+
whyTomakoHeading: "Why Tomako should own this",
|
|
81
|
+
whyTomakoItems: [
|
|
82
|
+
{
|
|
83
|
+
title: "Distribution realism",
|
|
84
|
+
body: "North American founder communities do not fail because people cannot write; they fail because the writing feels extractive.",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
title: "Internal quality gate",
|
|
88
|
+
body: "The same rubric can become a hidden generation gate so Tomako outputs safer drafts by default.",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
title: "Public trust",
|
|
92
|
+
body: "A checker teaches the market that Tomako understands community etiquette before asking users to generate posts.",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: "SEO surface",
|
|
96
|
+
body: "Queries around Reddit self-promotion, post review, and community posting have direct founder intent.",
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
standardHeading: "Review standard",
|
|
100
|
+
standardVisualAlt:
|
|
101
|
+
"Checklist report for promotional title, early CTA, missing process, and disclosure",
|
|
102
|
+
standardItems: [
|
|
103
|
+
"A good post is useful even if the product name and link are removed.",
|
|
104
|
+
"A safe CTA appears only after context, or in comments, or only when someone asks.",
|
|
105
|
+
"A credible founder post includes uncertainty, process, constraints, and one specific question.",
|
|
106
|
+
"A transparent post states the builder or affiliation relationship before asking for attention.",
|
|
107
|
+
],
|
|
108
|
+
faq: "FAQ",
|
|
109
|
+
faqItems: [
|
|
110
|
+
{
|
|
111
|
+
question: "Can this guarantee that Reddit will not remove my post?",
|
|
112
|
+
answer:
|
|
113
|
+
"No. It is a pre-post risk review based on common community signals. Subreddit rules and moderator judgment still decide the outcome.",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
question: "Should this be inside Tomako's post generator too?",
|
|
117
|
+
answer:
|
|
118
|
+
"Yes. The public tool is for external drafts and SEO acquisition; Tomako-generated posts should pass a similar gate before final output.",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
question: "Why check CTA placement separately?",
|
|
122
|
+
answer:
|
|
123
|
+
"A useful founder story can become self-promotion the moment a signup link appears too early. Placement changes the perceived intent.",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
question: "Does it support Chinese drafts?",
|
|
127
|
+
answer:
|
|
128
|
+
"Yes. The interface follows your current locale and the heuristic checks include Chinese and English promotional signals.",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
ctaHint:
|
|
132
|
+
"Use the checker for an existing draft, then generate a safer build-in-public story when you know what needs to change.",
|
|
133
|
+
ctaPrimary: "Generate build-in-public story",
|
|
134
|
+
ctaSecondary: "Organize community feedback",
|
|
135
|
+
},
|
|
136
|
+
widget: {
|
|
137
|
+
formTitle: "Pre-post risk review",
|
|
138
|
+
formHint:
|
|
139
|
+
"The checker looks for title hype, early CTA, missing process, Reddit-style self-promotion signals, and unclear disclosure.",
|
|
140
|
+
titleLabel: "Post title",
|
|
141
|
+
titlePlaceholder: "Example: I built an AI tool for SaaS founders, feedback?",
|
|
142
|
+
communityLabel: "Target community",
|
|
143
|
+
goalLabel: "Post goal",
|
|
144
|
+
ctaLabel: "CTA plan",
|
|
145
|
+
bodyLabel: "Post body",
|
|
146
|
+
bodyPlaceholder:
|
|
147
|
+
"Paste the full community post draft here. Include links, asks, product context, and the ending exactly as you plan to publish it.",
|
|
148
|
+
checkButton: "Check risk",
|
|
149
|
+
resetButton: "Reset",
|
|
150
|
+
copyButton: "Copy report",
|
|
151
|
+
copiedButton: "Copied",
|
|
152
|
+
downloadButton: "Download",
|
|
153
|
+
emptyTitle: "Your risk report will appear here",
|
|
154
|
+
emptyBody:
|
|
155
|
+
"Paste a real draft with enough context. Short samples and placeholder text are intentionally rejected.",
|
|
156
|
+
flaggedHeading: "Paragraphs that may read as self-promotion",
|
|
157
|
+
noFlags:
|
|
158
|
+
"No paragraph crossed the risk threshold in this pass. Still review the target community rules before posting.",
|
|
159
|
+
ctaAdviceHeading: "CTA recommendation",
|
|
160
|
+
revisionHeading: "Revision plan",
|
|
161
|
+
paragraphLabel: "Paragraph {index}",
|
|
162
|
+
status: {
|
|
163
|
+
idle: "Waiting for draft",
|
|
164
|
+
error: "Needs real draft",
|
|
165
|
+
done: "Risk checked",
|
|
166
|
+
},
|
|
167
|
+
errors: {
|
|
168
|
+
validation:
|
|
169
|
+
"Add a real title and body before checking. The body should be long enough to judge context and CTA placement.",
|
|
170
|
+
weakInput:
|
|
171
|
+
"This looks too short or placeholder-like. Paste the actual post draft you would publish.",
|
|
172
|
+
},
|
|
173
|
+
preview: [
|
|
174
|
+
"Risk",
|
|
175
|
+
"Flags",
|
|
176
|
+
"Paras",
|
|
177
|
+
"CTA placement appears here",
|
|
178
|
+
"Primary fix appears here after analysis.",
|
|
179
|
+
"The tool reviews promotional risk, not platform approval.",
|
|
180
|
+
],
|
|
181
|
+
riskLevels: {
|
|
182
|
+
low: "Low risk",
|
|
183
|
+
medium: "Medium risk",
|
|
184
|
+
high: "High risk",
|
|
185
|
+
},
|
|
186
|
+
communities: {
|
|
187
|
+
redditSaas: "r/SaaS",
|
|
188
|
+
redditIndieHackers: "r/indiehackers",
|
|
189
|
+
indieHackers: "Indie Hackers",
|
|
190
|
+
other: "Other community",
|
|
191
|
+
},
|
|
192
|
+
goals: {
|
|
193
|
+
askFeedback: "Ask for feedback",
|
|
194
|
+
shareLearning: "Share learning",
|
|
195
|
+
launchUpdate: "Launch update",
|
|
196
|
+
findBeta: "Find beta users",
|
|
197
|
+
askAdvice: "Ask advice",
|
|
198
|
+
},
|
|
199
|
+
ctaPlans: {
|
|
200
|
+
none: "No CTA",
|
|
201
|
+
body: "CTA in body",
|
|
202
|
+
comment: "CTA in comment",
|
|
203
|
+
onlyIfAsked: "Only if asked",
|
|
204
|
+
unsure: "Not sure",
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
} as const;
|
|
208
|
+
|
|
209
|
+
export default communityPostRiskChecker;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
const competitorAnalysis = {
|
|
2
|
+
meta: {
|
|
3
|
+
title: "Competitor Analysis Tool",
|
|
4
|
+
description: "Enter a competitor's URL and a cloud agent researches public signals into a structured profile: overview, traffic and growth, business scale, team, and funding — with sources and confidence.",
|
|
5
|
+
intro: "Turn a single competitor URL into a one-page profile. Built from public web and search signals, every dimension shows its confidence so you can act on positioning, growth, and competitive decisions.",
|
|
6
|
+
category: "Market research tools",
|
|
7
|
+
keywords: [
|
|
8
|
+
"competitor analysis tool",
|
|
9
|
+
"competitor analysis",
|
|
10
|
+
"competitor research",
|
|
11
|
+
"competitor website traffic",
|
|
12
|
+
"competitor funding lookup",
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
examples: [
|
|
16
|
+
{
|
|
17
|
+
label: "Live SaaS competitor",
|
|
18
|
+
input: "Competitor URL https://linear.app",
|
|
19
|
+
expectedOutput: "Overview, traffic estimate and trend, pricing and scale estimates, founders, funding rounds, source links, and per-dimension confidence.",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
label: "Competitor with a focus",
|
|
23
|
+
input: "Competitor URL https://www.notion.so, notes focus on pricing and team size",
|
|
24
|
+
expectedOutput: "Emphasizes pricing and team size, and lowers confidence for missing data instead of inventing numbers.",
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
widget: {
|
|
28
|
+
urlLabel: "Competitor URL",
|
|
29
|
+
urlPlaceholder: "https://competitor.com",
|
|
30
|
+
nameLabel: "Competitor name (optional)",
|
|
31
|
+
namePlaceholder: "e.g. Linear",
|
|
32
|
+
notesLabel: "Focus (optional)",
|
|
33
|
+
notesPlaceholder: "What matters most? e.g. pricing, team size, growth channels.",
|
|
34
|
+
inputHint: "Research uses public information only — paste the competitor's public website.",
|
|
35
|
+
submit: "Analyze",
|
|
36
|
+
submitting: "Submitting…",
|
|
37
|
+
running: "Researching…",
|
|
38
|
+
emptyTitle: "The competitor profile will appear here",
|
|
39
|
+
emptyHint:
|
|
40
|
+
"Enter a competitor URL and a cloud agent researches public signals into a structured profile.",
|
|
41
|
+
runningTitle: "Researching this competitor",
|
|
42
|
+
runningHint:
|
|
43
|
+
"The agent is reading the site and searching public signals for traffic, scale, team, and funding. This usually takes 1-3 minutes.",
|
|
44
|
+
status: {
|
|
45
|
+
default: "Researching",
|
|
46
|
+
PENDING: "Queued",
|
|
47
|
+
STREAMING: "Researching",
|
|
48
|
+
AWAITING_INPUT: "Analyzing",
|
|
49
|
+
AWAITING_RESULT: "Compiling results",
|
|
50
|
+
SUCCEEDED: "Finishing up",
|
|
51
|
+
},
|
|
52
|
+
retry: "Try again",
|
|
53
|
+
errors: {
|
|
54
|
+
invalidUrl: "Enter a valid competitor URL (including https://).",
|
|
55
|
+
submit: "Submission failed. Check your connection and try again.",
|
|
56
|
+
task: "The research task failed. Please try again later.",
|
|
57
|
+
timeout: "Research timed out — this competitor may be hard to find. Try again later.",
|
|
58
|
+
schema: "The result came back malformed. Please try again.",
|
|
59
|
+
generic: "Something went wrong. Please try again.",
|
|
60
|
+
},
|
|
61
|
+
noData: "No public data",
|
|
62
|
+
unknownCompetitor: "Unidentified competitor",
|
|
63
|
+
visitSite: "Visit site",
|
|
64
|
+
analyzeAnother: "Analyze another",
|
|
65
|
+
disclaimerFallback:
|
|
66
|
+
"Estimates from public information — may be incomplete or outdated, not official real-time data. Cross-check before acting.",
|
|
67
|
+
confidence: {
|
|
68
|
+
label: "Confidence",
|
|
69
|
+
low: "Low",
|
|
70
|
+
medium: "Medium",
|
|
71
|
+
high: "High",
|
|
72
|
+
},
|
|
73
|
+
sections: {
|
|
74
|
+
overview: "Overview",
|
|
75
|
+
traffic: "Traffic & growth",
|
|
76
|
+
businessScale: "Business scale",
|
|
77
|
+
team: "Team",
|
|
78
|
+
funding: "Funding",
|
|
79
|
+
positioning: "Positioning & openings",
|
|
80
|
+
sources: "Sources",
|
|
81
|
+
},
|
|
82
|
+
overview: {
|
|
83
|
+
category: "Category",
|
|
84
|
+
businessModel: "Business model",
|
|
85
|
+
founded: "Founded",
|
|
86
|
+
hq: "Headquarters",
|
|
87
|
+
},
|
|
88
|
+
traffic: {
|
|
89
|
+
monthlyVisits: "Monthly visits (est.)",
|
|
90
|
+
trend: "Growth trend",
|
|
91
|
+
trendTitle: "Recent traffic trend",
|
|
92
|
+
channels: "Traffic channels",
|
|
93
|
+
geographies: "Top geographies",
|
|
94
|
+
trendLabels: {
|
|
95
|
+
growing: "Growing",
|
|
96
|
+
flat: "Flat",
|
|
97
|
+
declining: "Declining",
|
|
98
|
+
unknown: "Unknown",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
businessScale: {
|
|
102
|
+
pricing: "Pricing model",
|
|
103
|
+
priceRange: "Price range",
|
|
104
|
+
revenue: "Revenue (est.)",
|
|
105
|
+
employees: "Headcount",
|
|
106
|
+
segments: "Target customers",
|
|
107
|
+
customers: "Notable customers",
|
|
108
|
+
},
|
|
109
|
+
team: {
|
|
110
|
+
teamSize: "Team size",
|
|
111
|
+
founders: "Founders",
|
|
112
|
+
keyPeople: "Key people",
|
|
113
|
+
},
|
|
114
|
+
funding: {
|
|
115
|
+
totalRaised: "Total raised",
|
|
116
|
+
stage: "Latest round",
|
|
117
|
+
amount: "Amount",
|
|
118
|
+
date: "Date",
|
|
119
|
+
leadInvestors: "Lead investors",
|
|
120
|
+
investors: "Investors",
|
|
121
|
+
},
|
|
122
|
+
positioning: {
|
|
123
|
+
strengths: "Strengths",
|
|
124
|
+
weaknesses: "Weaknesses",
|
|
125
|
+
opportunities: "Your openings",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
guide: {
|
|
129
|
+
visualAlt: {
|
|
130
|
+
hero: "Competitor profile report preview (visual pending)",
|
|
131
|
+
howToUse: "Competitor analysis workflow illustration (visual pending)",
|
|
132
|
+
result: "Competitor profile result guidance illustration (visual pending)",
|
|
133
|
+
},
|
|
134
|
+
howToUseKicker: "How it works",
|
|
135
|
+
howToUse: "How to analyze a competitor",
|
|
136
|
+
howToUseSteps: [
|
|
137
|
+
"Paste the competitor's public website URL; optionally add a name and the dimensions you care about.",
|
|
138
|
+
"A cloud agent reads the site and searches public signals for traffic, scale, team, and funding.",
|
|
139
|
+
"Results come back as a structured profile — each dimension shows confidence and degrades instead of inventing data.",
|
|
140
|
+
"Start with the overview and traffic trend, then turn “Positioning & openings” into your own positioning, pricing, or channel hypotheses.",
|
|
141
|
+
],
|
|
142
|
+
runtimeNote:
|
|
143
|
+
"Research runs on a cloud agent using public web and search only. The page renders the structured result only — no local template fallback.",
|
|
144
|
+
resultKicker: "Result guidance",
|
|
145
|
+
resultGuidance: "How to read the profile",
|
|
146
|
+
guidanceBullets: [
|
|
147
|
+
"Confidence sets the weight: low is a lead only, medium is a reference, high is decision-grade.",
|
|
148
|
+
"The traffic trend matters more than the absolute number — growing means mindshare, declining can be an opening.",
|
|
149
|
+
"Business scale and funding show how much resource the competitor has, and where you can compete off-axis on a niche.",
|
|
150
|
+
"“Your openings” are action items: turn them into homepage positioning, pricing, a key feature, or a launch channel.",
|
|
151
|
+
],
|
|
152
|
+
useCasesKicker: "Use cases",
|
|
153
|
+
useCases: "When to use it",
|
|
154
|
+
useCasesIntro:
|
|
155
|
+
"Turn one competitor URL into actionable competitive intel, not a pile of scattered search results.",
|
|
156
|
+
useCaseBullets: [
|
|
157
|
+
"Before entering a new space, quickly size up a leading competitor's scale, resources, and momentum.",
|
|
158
|
+
"Before rewriting your homepage, pricing, or cold-start copy, see how a rival positions and who they target.",
|
|
159
|
+
"Before building a competitor, alternative, or vs page, confirm the real comparison and the actual differences.",
|
|
160
|
+
],
|
|
161
|
+
faqKicker: "FAQ",
|
|
162
|
+
faq: "Frequently asked questions",
|
|
163
|
+
faqItems: [
|
|
164
|
+
{
|
|
165
|
+
question: "Is the data real?",
|
|
166
|
+
answer:
|
|
167
|
+
"It's an estimate from public web and search, not official real-time data. Traffic, revenue, and funding may be outdated or missing, so every dimension shows a confidence level.",
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
question: "What do I need to enter?",
|
|
171
|
+
answer:
|
|
172
|
+
"Just the competitor's public website URL. Optionally add a name and the dimensions you care about to focus the result.",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
question: "Does it access private or logged-in pages?",
|
|
176
|
+
answer:
|
|
177
|
+
"No. The agent reads public pages and public search results only — it does not crawl private, authenticated, or paywalled content.",
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
question: "What should I do with the result?",
|
|
181
|
+
answer:
|
|
182
|
+
"Use the items in “Your openings” to adjust positioning, pricing, a key feature, or a launch channel — and cross-check high-impact decisions against multiple sources.",
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
faqBoundaryTitle: "Capability boundaries",
|
|
186
|
+
faqBoundaryBullets: [
|
|
187
|
+
"Estimates from public info only — not official real-time data.",
|
|
188
|
+
"For obscure or low-footprint competitors, some dimensions may be empty.",
|
|
189
|
+
"Cross-check high-impact decisions with multiple sources and human review.",
|
|
190
|
+
],
|
|
191
|
+
ctaHint: "Got the profile? Turn it into your own go-to-market readiness.",
|
|
192
|
+
ctaPrimary: "Run the GTM readiness checklist",
|
|
193
|
+
ctaSecondary: "Browse all tools",
|
|
194
|
+
},
|
|
195
|
+
} as const;
|
|
196
|
+
|
|
197
|
+
export default competitorAnalysis;
|