@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,386 @@
|
|
|
1
|
+
const millionUserGrowthTest = {
|
|
2
|
+
meta: {
|
|
3
|
+
title: "Million User Growth Test",
|
|
4
|
+
displayTitle: "Test when your product will hit 1M users",
|
|
5
|
+
description: "Enter a product name, current user range, and growth motion to generate a playful million-user prediction card. Results are Tomako AI-style entertainment and not a real forecast.",
|
|
6
|
+
intro: "Give your product a shareable growth verdict: when it might hit 1M users, what founder archetype it carries, why it may get stuck, and a punchline worth posting.",
|
|
7
|
+
category: "Playful growth tools",
|
|
8
|
+
keywords: [
|
|
9
|
+
"million user test",
|
|
10
|
+
"product growth test",
|
|
11
|
+
"startup growth quiz",
|
|
12
|
+
"AI fun test",
|
|
13
|
+
"marketing AI agent",
|
|
14
|
+
],
|
|
15
|
+
inputSignal: "Product name, description, user range, and growth motion",
|
|
16
|
+
outputSignal: "Million-user prediction card + share copy",
|
|
17
|
+
boundarySignal: "Entertainment result only; not a real forecast or Tomako opinion",
|
|
18
|
+
},
|
|
19
|
+
examples: [
|
|
20
|
+
{
|
|
21
|
+
label: "New AI utility",
|
|
22
|
+
input: "Product: PromptBox; users 1-100; content-led growth; shipping founder",
|
|
23
|
+
expectedOutput: "Creates a playful prediction card with a comic ETA, three tailored reasons, and share copy.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
label: "Pivot-heavy SaaS",
|
|
27
|
+
input: "Product: OpsPilot; users 100-1000; community motion; always pivoting",
|
|
28
|
+
expectedOutput: "Leans into the founder-mode joke while keeping the entertainment-only disclaimer visible.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
label: "Paid acquisition product",
|
|
32
|
+
input: "Product: AdMint; users over 10k; ads motion; sales-led founder",
|
|
33
|
+
expectedOutput: "Uses the larger user range and ads motion in the verdict without presenting it as a real forecast.",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
widget: {
|
|
37
|
+
productNameLabel: "Product name",
|
|
38
|
+
productNamePlaceholder: "Example: Tomako",
|
|
39
|
+
productDescriptionLabel: "One-line description",
|
|
40
|
+
productDescriptionPlaceholder: "Example: an AI agent that helps indie teams ship marketing pages",
|
|
41
|
+
currentUsersLabel: "Current user range",
|
|
42
|
+
growthMotionLabel: "Main growth motion",
|
|
43
|
+
founderModeLabel: "Founder mode",
|
|
44
|
+
submit: "Generate verdict",
|
|
45
|
+
localFallbackCredit:
|
|
46
|
+
"Generated by Tomako's local entertainment test: Tomako is a marketing AI agent for content and growth experiments.",
|
|
47
|
+
formFootnote: "Entertainment output for sharing. This is not business advice.",
|
|
48
|
+
previewProduct: "Your product",
|
|
49
|
+
previewTitle: "Result card preview",
|
|
50
|
+
previewSubtitle: "You will get a shareable growth verdict card.",
|
|
51
|
+
previewCardKicker: "1M USER TEST",
|
|
52
|
+
previewEta: "Next life, Q3",
|
|
53
|
+
resultKicker: "Million-user prediction",
|
|
54
|
+
scoreLabel: "Vibes score",
|
|
55
|
+
shareCardLabel: "Share card",
|
|
56
|
+
adviceLabel: "One unserious suggestion",
|
|
57
|
+
shareCopyLabel: "Copyable share text",
|
|
58
|
+
copy: "Copy result",
|
|
59
|
+
copied: "Copied",
|
|
60
|
+
reset: "Test again",
|
|
61
|
+
status: {
|
|
62
|
+
submitting: "Asking Tomako AI...",
|
|
63
|
+
running: "Tomako AI is making the verdict spicy enough. Status: {status}",
|
|
64
|
+
agentResult: "AI result source: Tomako task {taskId}.",
|
|
65
|
+
localFallback:
|
|
66
|
+
"Local entertainment result shown because the AI result was not available in time.",
|
|
67
|
+
},
|
|
68
|
+
errors: {
|
|
69
|
+
productName: "Give the product a name a human can read.",
|
|
70
|
+
productDescription: "Add a clearer description: who it helps and what it does.",
|
|
71
|
+
},
|
|
72
|
+
currentUserOptions: [
|
|
73
|
+
{ value: "zero", label: "0, still waiting for the first stranger" },
|
|
74
|
+
{ value: "under_100", label: "1-100, friends and early users" },
|
|
75
|
+
{ value: "under_1k", label: "100-1k, some real signal" },
|
|
76
|
+
{ value: "under_10k", label: "1k-10k, looking for the next jump" },
|
|
77
|
+
{ value: "over_10k", label: "10k+, no longer imaginary" },
|
|
78
|
+
],
|
|
79
|
+
growthMotionOptions: [
|
|
80
|
+
{ value: "content", label: "Content slowly compounding" },
|
|
81
|
+
{ value: "ads", label: "Ads buying a little certainty" },
|
|
82
|
+
{ value: "community", label: "Community and word of mouth" },
|
|
83
|
+
{ value: "friends", label: "Friends, favors, and reposts" },
|
|
84
|
+
{ value: "partnerships", label: "Partners and channels" },
|
|
85
|
+
{ value: "mysticism", label: "Luck, vibes, and algorithm grace" },
|
|
86
|
+
],
|
|
87
|
+
founderModeOptions: [
|
|
88
|
+
{ value: "shipping", label: "Shipping like crazy" },
|
|
89
|
+
{ value: "logo_tuning", label: "Still tuning the logo" },
|
|
90
|
+
{ value: "pivoting", label: "Always considering a pivot" },
|
|
91
|
+
{ value: "waiting", label: "Waiting for inspiration" },
|
|
92
|
+
{ value: "sales", label: "Doing sales anyway" },
|
|
93
|
+
],
|
|
94
|
+
previewItems: [
|
|
95
|
+
"Predict when 1M users happens",
|
|
96
|
+
"Assign a founder growth archetype",
|
|
97
|
+
"Generate three tailored reasons",
|
|
98
|
+
],
|
|
99
|
+
copyBank: {
|
|
100
|
+
tomakoCredit: "Generated by Tomako AI: a marketing AI agent for content and growth experiments.",
|
|
101
|
+
disclaimer: "For entertainment only. Not a real forecast, business advice, or Tomako opinion.",
|
|
102
|
+
eta: {
|
|
103
|
+
hopeless: [
|
|
104
|
+
"Next life, Q3",
|
|
105
|
+
"Never, unless the positioning survives a week",
|
|
106
|
+
"After the 1,000,001st friendly repost",
|
|
107
|
+
"2039, once ten strangers understand it",
|
|
108
|
+
],
|
|
109
|
+
slow: [
|
|
110
|
+
"A random Tuesday in 2032",
|
|
111
|
+
"After the 47th homepage rewrite",
|
|
112
|
+
"When investors stop asking about growth",
|
|
113
|
+
"Reach 1,000 first, then ask again",
|
|
114
|
+
],
|
|
115
|
+
possible: [
|
|
116
|
+
"2029, thanks to one accidental post",
|
|
117
|
+
"A small breakout three years from now",
|
|
118
|
+
"After the first repeatable channel works",
|
|
119
|
+
"The launch you did not overthink",
|
|
120
|
+
],
|
|
121
|
+
promising: [
|
|
122
|
+
"18 months, if the signal holds",
|
|
123
|
+
"After the next clean growth experiment",
|
|
124
|
+
"Late 2027, if you stop self-sabotaging",
|
|
125
|
+
"Earlier than you fear, later than the deck",
|
|
126
|
+
],
|
|
127
|
+
rocket: [
|
|
128
|
+
"Tonight, but the server goes first",
|
|
129
|
+
"Within 6 months, surprisingly",
|
|
130
|
+
"After the next right story spreads",
|
|
131
|
+
"Already moving, if you reduce friction",
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
archetype: {
|
|
135
|
+
shipping: ["Midnight shipping founder", "Commit-log growth believer", "Builds fast, announces late"],
|
|
136
|
+
logo_tuning: ["Logo-tuning growth lead", "Brand color maximalist", "Visual polish over market clarity"],
|
|
137
|
+
pivoting: ["Strategic pivot sprinter", "Always-on pivot radar", "Weekly positioning rewrite club"],
|
|
138
|
+
waiting: ["Waiting-for-inspiration founder", "Growth astrology observer", "Bookmark-first operator"],
|
|
139
|
+
sales: ["Talking-to-strangers founder", "Sales-led survival mode", "Market friction enjoyer"],
|
|
140
|
+
},
|
|
141
|
+
verdict: {
|
|
142
|
+
hopeless: [
|
|
143
|
+
"{product} does have a future; the future filed for an extension.",
|
|
144
|
+
"After reading {product}, the AI paused to protect your feelings.",
|
|
145
|
+
"The road to 1M users is not blocked. It has not been built yet.",
|
|
146
|
+
],
|
|
147
|
+
slow: [
|
|
148
|
+
"{product} has hope, but it is currently keeping the market in suspense.",
|
|
149
|
+
"This is not slow growth. It is episodic storytelling.",
|
|
150
|
+
"{product} can see the light. It just has not found the door.",
|
|
151
|
+
],
|
|
152
|
+
possible: [
|
|
153
|
+
"{product} has a shot, but it needs one repeatable sharing motion.",
|
|
154
|
+
"It is not unable to break out; it just needs a sharper stranger-friendly angle.",
|
|
155
|
+
"{product} has some signal. Now it has to leave the friend circle.",
|
|
156
|
+
],
|
|
157
|
+
promising: [
|
|
158
|
+
"{product} has something. Just do not turn user education into a thesis defense.",
|
|
159
|
+
"If the value gets clearer, 1M users is not absurd.",
|
|
160
|
+
"{product} has decent growth vibes, but vibes still need discipline.",
|
|
161
|
+
],
|
|
162
|
+
rocket: [
|
|
163
|
+
"{product} is starting to look less like a joke and more like something people share.",
|
|
164
|
+
"This input smells like growth. Scale the server before the ambition.",
|
|
165
|
+
"{product} is not far from 1M users. It is even closer to fewer meetings.",
|
|
166
|
+
],
|
|
167
|
+
},
|
|
168
|
+
reasonByUsers: {
|
|
169
|
+
zero: [
|
|
170
|
+
"The user count is still warming up in the atmosphere; ten strangers matter more than 1M.",
|
|
171
|
+
"Your funnel is extremely clean because almost nobody is in it.",
|
|
172
|
+
"{product} has zero churn, mostly because acquisition has not fully started.",
|
|
173
|
+
],
|
|
174
|
+
under_100: [
|
|
175
|
+
"Early users are sparks, but sparks do not cook a 1M-user dinner.",
|
|
176
|
+
"Friendly support is nice; million-user growth usually needs strangers too.",
|
|
177
|
+
"The signal is enough to test, not enough to write mythology.",
|
|
178
|
+
],
|
|
179
|
+
under_1k: [
|
|
180
|
+
"There is real feedback now. Turn accidental interest into repeatable acquisition.",
|
|
181
|
+
"The 100-1k stage is where founders start thinking they understand the market.",
|
|
182
|
+
"{product} has small-sample signal, but 1M users needs a bigger pipe.",
|
|
183
|
+
],
|
|
184
|
+
under_10k: [
|
|
185
|
+
"You are past zero. The question is which path can scale.",
|
|
186
|
+
"Stop asking only whether users like it; ask whether they would share it.",
|
|
187
|
+
"The user count proves some pull, not yet self-propelled distribution.",
|
|
188
|
+
],
|
|
189
|
+
over_10k: [
|
|
190
|
+
"10k+ means it is not imaginary. Now every vague message compounds.",
|
|
191
|
+
"You have a base. The bottleneck is likely distribution clarity.",
|
|
192
|
+
"{product} has a shot, but every unclear sentence leaks strangers.",
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
reasonByMotion: {
|
|
196
|
+
content: [
|
|
197
|
+
"Content compounds, but only if every post is not written for another version of you.",
|
|
198
|
+
"Content fits {keyword}, but strangers need to care in three seconds.",
|
|
199
|
+
"You are waiting for a breakout post; the post is waiting for a better title.",
|
|
200
|
+
],
|
|
201
|
+
ads: [
|
|
202
|
+
"Ads can bring traffic, but if the message is fuzzy, the budget hits 1M first.",
|
|
203
|
+
"Paid traffic is fine. Landing pages should not read like internal notes.",
|
|
204
|
+
"Ads amplify strengths and also every unclear promise.",
|
|
205
|
+
],
|
|
206
|
+
community: [
|
|
207
|
+
"Community growth needs realness; anything too ad-like gets ignored together.",
|
|
208
|
+
"If {product} can turn user stories into posts, community can beat hard selling.",
|
|
209
|
+
"Community is not a wishing well. Contribute value before asking for reposts.",
|
|
210
|
+
],
|
|
211
|
+
friends: [
|
|
212
|
+
"Friend reposts are a starter, not an engine.",
|
|
213
|
+
"Friends can break the ice, but strangers must understand the product too.",
|
|
214
|
+
"The next test: can someone who does not know you explain {product}?",
|
|
215
|
+
],
|
|
216
|
+
partnerships: [
|
|
217
|
+
"Partners can help, but they need a one-sentence reason to care.",
|
|
218
|
+
"Channels are not magic. They amplify clear value.",
|
|
219
|
+
"If {product} gives partners a clear win, growth gets easier.",
|
|
220
|
+
],
|
|
221
|
+
mysticism: [
|
|
222
|
+
"Luck may help, but the algorithm also has KPIs now.",
|
|
223
|
+
"The growth gods may pass by. Put the value and button in the right place first.",
|
|
224
|
+
"Luck is real, and it usually likes prepared people.",
|
|
225
|
+
],
|
|
226
|
+
},
|
|
227
|
+
reasonByFounder: {
|
|
228
|
+
shipping: [
|
|
229
|
+
"Shipping speed is real, but users do not walk in because the version number changed.",
|
|
230
|
+
"Shipping is a strength. Translate every update into user value.",
|
|
231
|
+
"The build muscle is healthy. Train the distribution muscle too.",
|
|
232
|
+
],
|
|
233
|
+
logo_tuning: [
|
|
234
|
+
"The logo got 3% more polished. User understanding did not automatically rise.",
|
|
235
|
+
"Visuals matter, but the missing part may be one repeatable value sentence.",
|
|
236
|
+
"If brand color created users, you would already be public.",
|
|
237
|
+
],
|
|
238
|
+
pivoting: [
|
|
239
|
+
"The direction refreshes weekly. Users start to understand, then you move.",
|
|
240
|
+
"A pivot can save you; too many pivots erase memory.",
|
|
241
|
+
"Let one positioning idea live for two weeks.",
|
|
242
|
+
],
|
|
243
|
+
waiting: [
|
|
244
|
+
"Inspiration does arrive, but it rarely brings 1M users with it.",
|
|
245
|
+
"Waiting for wind is fine. Install the sail too.",
|
|
246
|
+
"After bookmarking 28 growth ideas, try one.",
|
|
247
|
+
],
|
|
248
|
+
sales: [
|
|
249
|
+
"Being willing to sell already beats endless polishing.",
|
|
250
|
+
"Sales creates real feedback. Every rejection is not a cosmic verdict.",
|
|
251
|
+
"You are closer to growth because you are touching the market.",
|
|
252
|
+
],
|
|
253
|
+
},
|
|
254
|
+
advice: {
|
|
255
|
+
hopeless: [
|
|
256
|
+
"Do not think about 1M yet. This week, get ten strangers to explain {product}.",
|
|
257
|
+
"Shrink the vision and prove someone wants to leave an email for {keyword}.",
|
|
258
|
+
"If this hurts, good news: you still care about growth.",
|
|
259
|
+
],
|
|
260
|
+
slow: [
|
|
261
|
+
"The next move is not another feature. Find one angle you can publish ten times.",
|
|
262
|
+
"Make the one-line positioning so clear a friend can repeat it.",
|
|
263
|
+
"Skip the annual growth plan. Validate one entrance this week.",
|
|
264
|
+
],
|
|
265
|
+
possible: [
|
|
266
|
+
"Take the best current channel, turn it into a checklist, and repeat for two weeks.",
|
|
267
|
+
"Productize the moment users want to screenshot.",
|
|
268
|
+
"Do not average your effort. Find one stranger-friendly use case.",
|
|
269
|
+
],
|
|
270
|
+
promising: [
|
|
271
|
+
"Keep the momentum and make every growth attempt reviewable.",
|
|
272
|
+
"Put the sentence users repeat on the homepage before adding three features.",
|
|
273
|
+
"Be optimistic, but do not let optimism replace channel discipline.",
|
|
274
|
+
],
|
|
275
|
+
rocket: [
|
|
276
|
+
"While the signal is warm, turn the shareable moment into product.",
|
|
277
|
+
"Do not just celebrate growth. Write down where it came from and why.",
|
|
278
|
+
"Reduce friction now; do not make people hunt for the share path.",
|
|
279
|
+
],
|
|
280
|
+
},
|
|
281
|
+
shareTitle: [
|
|
282
|
+
"I tested when {product} hits 1M users: {score}/100 vibes score",
|
|
283
|
+
"Tomako says {product}'s million-user fate is suspiciously dramatic",
|
|
284
|
+
"{product}'s 1M-user prediction is out, and I need a minute",
|
|
285
|
+
],
|
|
286
|
+
shareBody: [
|
|
287
|
+
"Result: {product} might be the most suspenseful product in {keyword}.",
|
|
288
|
+
"Not a business forecast. More like a founder mental-state check.",
|
|
289
|
+
"If you are building a product, test yours too. The advice is funny until it is true.",
|
|
290
|
+
],
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
guide: {
|
|
294
|
+
workspaceHint: "Enter five details and generate a million-user verdict card with a joke, product signal, and disclaimer.",
|
|
295
|
+
workspaceBadge: "For fun",
|
|
296
|
+
valueKicker: "Why people share it",
|
|
297
|
+
valueTitle: "The joke works because it feels personal",
|
|
298
|
+
valueIntro:
|
|
299
|
+
"This test is not trying to forecast growth. It turns product stage, growth motion, and founder mode into a screenshot-friendly card people can laugh at and repost.",
|
|
300
|
+
valueItems: [
|
|
301
|
+
{
|
|
302
|
+
title: "Input-aware",
|
|
303
|
+
body: "The result uses product name, description keyword, user range, and growth motion instead of giving everyone the same line.",
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
title: "A little sharp",
|
|
307
|
+
body: "The copy pokes, but does not shame. Even the harsh results are framed as entertainment.",
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
title: "Light Tomako context",
|
|
311
|
+
body: "The card explains Tomako as a marketing AI agent without turning the result into an ad.",
|
|
312
|
+
},
|
|
313
|
+
],
|
|
314
|
+
standardsKicker: "A good playful test",
|
|
315
|
+
standardsTitle: "Shareability comes from screenshot value",
|
|
316
|
+
standardsIntro:
|
|
317
|
+
"A normal quiz gives a number and ends. A better spreadable result acts like a social badge: it says something about the maker and invites others to try it.",
|
|
318
|
+
standards: [
|
|
319
|
+
{
|
|
320
|
+
title: "Short result",
|
|
321
|
+
body: "One verdict, one archetype, three reasons, and one suggestion fit into a readable card.",
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
title: "Clear boundary",
|
|
325
|
+
body: "The result says it is AI-style entertainment, not a real forecast or actual Tomako opinion.",
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
title: "No hard sell",
|
|
329
|
+
body: "Tomako positioning stays in the card footer and page copy, supporting trust without stealing the joke.",
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
useCasesKicker: "Where it fits",
|
|
333
|
+
useCasesTitle: "Use attention to start a growth conversation",
|
|
334
|
+
useCasesIntro:
|
|
335
|
+
"This is a light growth experiment, not a serious analysis tool. Users should laugh first, then understand that Tomako helps teams ship content and growth experiments.",
|
|
336
|
+
useCases: [
|
|
337
|
+
{
|
|
338
|
+
title: "Community posts",
|
|
339
|
+
body: "Founders can share the result card and open a discussion about stage, channels, and growth struggles.",
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
title: "Launch warmup",
|
|
343
|
+
body: "New products can use the test as a low-friction interaction that makes the name easier to remember.",
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
title: "Tomako sample",
|
|
347
|
+
body: "The page shows how Tomako can turn a marketing idea into a publishable interactive tool.",
|
|
348
|
+
},
|
|
349
|
+
],
|
|
350
|
+
faqKicker: "Boundaries",
|
|
351
|
+
faqTitle: "To be clear: this is not a forecast",
|
|
352
|
+
boundaryKicker: "Disclaimer",
|
|
353
|
+
boundaryTitle: "Results are for entertainment",
|
|
354
|
+
boundaryBody:
|
|
355
|
+
"The test does not read real business data or judge product value. All output is entertainment content and must not be used as advice, promise, evaluation, or investment judgment.",
|
|
356
|
+
faqItems: [
|
|
357
|
+
{
|
|
358
|
+
question: "Is the prediction accurate?",
|
|
359
|
+
answer:
|
|
360
|
+
"No. It is designed to generate a shareable playful result, not to evaluate a product's real growth ceiling.",
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
question: "Why can it say something harsh like 'next life'?",
|
|
364
|
+
answer:
|
|
365
|
+
"That is an exaggerated entertainment line from the result library. The page keeps the entertainment-only disclaimer visible.",
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
question: "What is Tomako here?",
|
|
369
|
+
answer:
|
|
370
|
+
"Tomako is a marketing AI agent for product teams and indie makers. It helps turn ideas into marketing content, tool pages, and growth experiments. This test is a light sample.",
|
|
371
|
+
},
|
|
372
|
+
],
|
|
373
|
+
ctaHint: "Explore more Tomako marketing tools from the tool list.",
|
|
374
|
+
ctaPrimary: "Browse more tools",
|
|
375
|
+
ctaSecondary: "Check a community post",
|
|
376
|
+
visualAlt: {
|
|
377
|
+
hero: "A playful growth prediction card and product marketing materials",
|
|
378
|
+
workspace: "A product brief becoming a shareable prediction card",
|
|
379
|
+
value: "A rough product idea transformed into a polished share result",
|
|
380
|
+
share: "A million-user test result being shared in a social feed",
|
|
381
|
+
boundary: "Entertainment disclaimer and Tomako credit visual",
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
export default millionUserGrowthTest;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
const ogImageGenerator = {
|
|
2
|
+
meta: {
|
|
3
|
+
title: "OG Image Generator for Social Previews",
|
|
4
|
+
description: "Create an Open Graph image from a URL or brief, refine the copy and layout, preview it, then download PNG, JPEG, or WebP for your site or social share.",
|
|
5
|
+
intro: "Create a social-preview image for a product launch, blog post, or shared link. Start with a page URL or brief, review suggested copy and layout, then preview and download the final file.",
|
|
6
|
+
category: "Content marketing tools",
|
|
7
|
+
keywords: [
|
|
8
|
+
"AI og image generator",
|
|
9
|
+
"open graph image",
|
|
10
|
+
"twitter header image",
|
|
11
|
+
"blog featured image",
|
|
12
|
+
],
|
|
13
|
+
inputSignal: "Page URL, brief, title, subtitle, brand name, colors, size, and template",
|
|
14
|
+
outputSignal: "AI directions, OG image, X Header, Blog Featured, PNG/JPEG/WebP",
|
|
15
|
+
boundarySignal: "AI can suggest copy, colors, and layout direction; you review the preview and download the image in your browser",
|
|
16
|
+
},
|
|
17
|
+
guide: {
|
|
18
|
+
heroVisualAlt:
|
|
19
|
+
"AI social image generator visual showing Open Graph images, X headers, blog covers, and export formats.",
|
|
20
|
+
workspaceHeading: "Create an OG image from a URL or brief",
|
|
21
|
+
workspaceHint:
|
|
22
|
+
"Use the left panel for URL metadata, brief, size, and template controls. Preview on the right, then download PNG, JPEG, or WebP.",
|
|
23
|
+
workspaceBadge: "AI + PNG / JPEG / WebP",
|
|
24
|
+
whyEyebrow: "Why Tomako",
|
|
25
|
+
whyHeading: "Why create OG images with Tomako",
|
|
26
|
+
valueVisualAlt: "Social image asset bundle visual with link previews, cover images, and downloadable files.",
|
|
27
|
+
whyItems: [
|
|
28
|
+
{
|
|
29
|
+
title: "Start from real Open Graph metadata",
|
|
30
|
+
body: "Fetch title, description, site name, and existing og image data through the API request before asking AI for directions.",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: "AI suggests direction, Canvas exports reliably",
|
|
34
|
+
body: "AI returns title, subtitle, template, and palette ideas. The final image is rendered locally through Canvas for predictable downloads.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
title: "One brief covers multiple channels",
|
|
38
|
+
body: "Open Graph images, Twitter/X headers, and blog featured images share the same copy and brand system, reducing repetitive design work.",
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
implementationHeading: "How to use generated OG assets",
|
|
42
|
+
implementationIntro:
|
|
43
|
+
"After download, upload the image to your public folder, CMS, or object storage and reference it with an absolute URL. Social platforms cache previews, so refresh their debuggers after deployment.",
|
|
44
|
+
implementationItems: [
|
|
45
|
+
{
|
|
46
|
+
title: "HTML",
|
|
47
|
+
body: "Works for static pages, landing pages, and any server-rendered template.",
|
|
48
|
+
code: `<meta property="og:title" content="Your page title" />
|
|
49
|
+
<meta property="og:description" content="A short preview summary." />
|
|
50
|
+
<meta property="og:image" content="https://example.com/og-image.png" />
|
|
51
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
52
|
+
<meta name="twitter:image" content="https://example.com/og-image.png" />`,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: "Next.js App Router",
|
|
56
|
+
body: "Use the metadata API in Next.js 13+. Prefer absolute image URLs.",
|
|
57
|
+
code: `export const metadata = {
|
|
58
|
+
openGraph: {
|
|
59
|
+
title: "Your page title",
|
|
60
|
+
description: "A short preview summary.",
|
|
61
|
+
images: ["https://example.com/og-image.png"],
|
|
62
|
+
},
|
|
63
|
+
twitter: {
|
|
64
|
+
card: "summary_large_image",
|
|
65
|
+
images: ["https://example.com/og-image.png"],
|
|
66
|
+
},
|
|
67
|
+
};`,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
title: "Nuxt",
|
|
71
|
+
body: "Use Nuxt 3 useSeoMeta from a page or layout.",
|
|
72
|
+
code: `useSeoMeta({
|
|
73
|
+
ogTitle: "Your page title",
|
|
74
|
+
ogDescription: "A short preview summary.",
|
|
75
|
+
ogImage: "https://example.com/og-image.png",
|
|
76
|
+
twitterCard: "summary_large_image",
|
|
77
|
+
twitterImage: "https://example.com/og-image.png",
|
|
78
|
+
});`,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
title: "Vue",
|
|
82
|
+
body: "In a Vue app, use a head manager or render these tags from your server template.",
|
|
83
|
+
code: `useHead({
|
|
84
|
+
meta: [
|
|
85
|
+
{ property: "og:title", content: "Your page title" },
|
|
86
|
+
{ property: "og:image", content: "https://example.com/og-image.png" },
|
|
87
|
+
{ name: "twitter:card", content: "summary_large_image" },
|
|
88
|
+
{ name: "twitter:image", content: "https://example.com/og-image.png" },
|
|
89
|
+
],
|
|
90
|
+
});`,
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
tipsEyebrow: "More Tips",
|
|
94
|
+
tipsHeading: "Check these before publishing",
|
|
95
|
+
sizesVisualAlt: "Supported sizes visual showing Open Graph, X Header, and Blog Featured ratios.",
|
|
96
|
+
tipsItems: [
|
|
97
|
+
{
|
|
98
|
+
title: "Keep key content in the safe center",
|
|
99
|
+
body: "X headers and CMS thumbnails can crop the edges. Keep titles, brand names, and primary shapes away from the border.",
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
title: "Use one message per image",
|
|
103
|
+
body: "A social preview is not a full poster. Shorter titles and clearer contrast usually perform better in link cards.",
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
title: "Use PNG for the final quality check",
|
|
107
|
+
body: "PNG is better for sharp text and UI-like graphics. After checking quality, export JPEG or WebP if your publishing surface needs smaller files.",
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
whatYouGetEyebrow: "Outputs and controls",
|
|
111
|
+
whatYouGetHeading: "What you can review and download",
|
|
112
|
+
whatYouGetItems: [
|
|
113
|
+
{
|
|
114
|
+
title: "Open Graph image",
|
|
115
|
+
body: "A 1200 x 630 link preview for websites, product pages, launch posts, and social sharing cards.",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
title: "Twitter/X header image",
|
|
119
|
+
body: "A 1500 x 500 profile or campaign banner for product launches, seasonal campaigns, and personal brands.",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
title: "Blog featured image",
|
|
123
|
+
body: "A 1600 x 900 article cover for blogs, newsletters, content hubs, and CMS thumbnails.",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
title: "Editable AI suggestions",
|
|
127
|
+
body: "AI returns several title, subtitle, template, and palette directions that you can select and keep editing.",
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
title: "Downloadable files",
|
|
131
|
+
body: "Export PNG, JPEG, or WebP files for public folders, CMS uploads, object storage, or social profile settings.",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: "Clear failure boundaries",
|
|
135
|
+
body: "When URL fetching, OG metadata, or AI writeback fails, the page shows the real state instead of fake output.",
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
faq: "FAQ",
|
|
139
|
+
ctaPrimary: "Create social profile assets",
|
|
140
|
+
ctaSecondary: "Back to all tools",
|
|
141
|
+
ctaHint:
|
|
142
|
+
"After the OG image is ready, use the same visual direction for your avatar, profile banner, bio, and other social profile assets.",
|
|
143
|
+
faqItems: [
|
|
144
|
+
{
|
|
145
|
+
question: "What is an OG image?",
|
|
146
|
+
answer: "An OG image is the preview image that platforms such as Slack, LinkedIn, Facebook, and X may show when someone shares a page URL. Your site still needs an absolute image URL in its Open Graph or Twitter card metadata.",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
question: "What is an X Header image?",
|
|
150
|
+
answer: "An X header image is the wide banner at the top of an X profile. It is separate from the image used in a shared-link preview, so check the selected canvas size before exporting.",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
question: "What is a Blog Featured image?",
|
|
154
|
+
answer: "A blog featured image is a cover image used by a CMS, article listing, or newsletter. It can use the same message as an OG image, but its required crop and placement can differ.",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
question: "What is an AI suggestion?",
|
|
158
|
+
answer: "AI suggestions provide editable direction for copy, color, template, and layout. Treat them as a starting point and check that the final wording, contrast, and brand use are appropriate before publishing.",
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
question: "What is a downloadable file?",
|
|
162
|
+
answer: "You can download PNG, JPEG, or WebP. Upload the chosen file to your CMS, public folder, or image host and reference its public absolute URL in your page metadata.",
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
question: "What is a failure boundary hint?",
|
|
166
|
+
answer: "This tool does not host a permanent public image URL or automatically publish Open Graph tags to your site. URL fetching and AI suggestions can also fail, so check the preview and publish the final asset yourself.",
|
|
167
|
+
},
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
} as const;
|
|
171
|
+
|
|
172
|
+
export default ogImageGenerator;
|