@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,641 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import type { ToolPackage } from "../package/types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Slogan Generator(direct 车道)。
|
|
7
|
+
* 证据:docs/seo-keyword-briefs/slogan-generator.md(slogan generator 12,100/mo LOW + 竞品拆解)。
|
|
8
|
+
* 反超点(相对 logo.com / ahrefs / shopify / copy.ai / grammarly):
|
|
9
|
+
* 免登录页面内直出;每条候选带风格标签 + why-it-works 理由(ahrefs 只有裸文本);
|
|
10
|
+
* 一次 10 条覆盖多风格;输出附挑选/测试建议;支持可选品牌名生成 name-based slogan。
|
|
11
|
+
* scene "slogan_generator" 需在 168 compose 的 LLM_DIRECT_ALLOWED_SCENES 白名单内。
|
|
12
|
+
*/
|
|
13
|
+
const resultSchema = z.object({
|
|
14
|
+
businessRead: z.string().min(1),
|
|
15
|
+
audienceRead: z.string().min(1),
|
|
16
|
+
corePromise: z.string().min(1),
|
|
17
|
+
slogans: z
|
|
18
|
+
.array(
|
|
19
|
+
z.object({
|
|
20
|
+
slogan: z.string().min(1),
|
|
21
|
+
style: z.string().min(1),
|
|
22
|
+
whyItWorks: z.string().min(1),
|
|
23
|
+
}),
|
|
24
|
+
)
|
|
25
|
+
.min(10)
|
|
26
|
+
.max(12),
|
|
27
|
+
selectionTips: z.array(z.string()).min(3).max(5),
|
|
28
|
+
missingInfo: z.array(z.string()),
|
|
29
|
+
promptVersion: z.string().optional(),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const sloganGeneratorPackage: ToolPackage = {
|
|
33
|
+
meta: {
|
|
34
|
+
slug: "slogan-generator",
|
|
35
|
+
toolType: "generator",
|
|
36
|
+
keywordEvidence: "docs/seo-keyword-briefs/slogan-generator.md",
|
|
37
|
+
seo: {
|
|
38
|
+
updatedAt: "2026-07-04",
|
|
39
|
+
readingTime: "6 min",
|
|
40
|
+
ogImage: "/tools/slogan-generator-hero.webp",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
copy: {
|
|
44
|
+
title: { en: "Slogan Generator", zh: "Slogan 广告语生成器", "zh-tw": "Slogan 廣告語生成器" },
|
|
45
|
+
description: {
|
|
46
|
+
en: "Free AI slogan generator: describe your business and get 10 catchy slogan and tagline ideas across styles from bold and minimal to playful and benefit-driven — each with a style tag and a why-it-works note. No sign-up, results on this page.",
|
|
47
|
+
zh: "免费 AI Slogan 生成器:描述你的业务,一次获得 10 条广告语和 tagline 候选,覆盖大胆、极简、俏皮、利益导向等多种风格,每条附风格标签和入选理由。免注册,结果直接在本页给出。",
|
|
48
|
+
"zh-tw":
|
|
49
|
+
"免費 AI Slogan 生成器:描述你的業務,一次獲得 10 條廣告語和 tagline 候選,覆蓋大膽、極簡、俏皮、利益導向等多種風格,每條附風格標籤和入選理由。免註冊,結果直接在本頁給出。",
|
|
50
|
+
},
|
|
51
|
+
intro: {
|
|
52
|
+
en: "A good slogan is 3-6 words that carry your brand promise. Instead of staring at a blank page or paying an agency, describe what you do and compare structured candidates side by side — with reasons, not just word salad.",
|
|
53
|
+
zh: "好的 slogan 是把品牌承诺装进几个词里。与其对着空白页硬想或者花钱找代理,不如先描述你的业务,然后横向比较一批结构化候选——每条都有理由,而不是一堆词的堆砌。",
|
|
54
|
+
"zh-tw":
|
|
55
|
+
"好的 slogan 是把品牌承諾裝進幾個詞裡。與其對著空白頁硬想或者花錢找代理,不如先描述你的業務,然後橫向比較一批結構化候選——每條都有理由,而不是一堆詞的堆砌。",
|
|
56
|
+
},
|
|
57
|
+
category: {
|
|
58
|
+
en: "Branding tools",
|
|
59
|
+
zh: "品牌工具",
|
|
60
|
+
"zh-tw": "品牌工具",
|
|
61
|
+
},
|
|
62
|
+
keywords: {
|
|
63
|
+
en: ["slogan generator", "slogan creator", "slogan maker", "free slogan generator", "ai slogan generator", "tagline generator", "business slogan generator"],
|
|
64
|
+
zh: ["slogan 生成器", "slogan 制作", "广告语生成器", "品牌口号生成", "tagline 生成器", "免费广告语工具", "AI 广告语"],
|
|
65
|
+
"zh-tw": ["slogan 生成器", "slogan 製作", "廣告語生成器", "品牌口號生成", "tagline 生成器", "免費廣告語工具", "AI 廣告語"],
|
|
66
|
+
},
|
|
67
|
+
inputSignal: {
|
|
68
|
+
en: "One-sentence business description + optional brand name",
|
|
69
|
+
zh: "一句话业务描述 + 可选品牌名",
|
|
70
|
+
"zh-tw": "一句話業務描述 + 可選品牌名",
|
|
71
|
+
},
|
|
72
|
+
outputSignal: {
|
|
73
|
+
en: "10 slogans with style tags and why-it-works notes",
|
|
74
|
+
zh: "10 条候选 + 风格标签 + 入选理由",
|
|
75
|
+
"zh-tw": "10 條候選 + 風格標籤 + 入選理由",
|
|
76
|
+
},
|
|
77
|
+
boundarySignal: {
|
|
78
|
+
en: "Creative drafts to shortlist and test; trademark availability needs your own check",
|
|
79
|
+
zh: "创意草案,需自行测试与商标查重",
|
|
80
|
+
"zh-tw": "創意草案,需自行測試與商標查重",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
form: [
|
|
84
|
+
{
|
|
85
|
+
kind: "textarea",
|
|
86
|
+
id: "businessDescription",
|
|
87
|
+
required: true,
|
|
88
|
+
rows: 4,
|
|
89
|
+
minLength: 12,
|
|
90
|
+
fullWidth: true,
|
|
91
|
+
label: { en: "What does your business do?", zh: "你的业务是做什么的?", "zh-tw": "你的業務是做什麼的?" },
|
|
92
|
+
hint: {
|
|
93
|
+
en: "One or two sentences: who it serves and what it delivers",
|
|
94
|
+
zh: "一两句话:服务谁、提供什么",
|
|
95
|
+
"zh-tw": "一兩句話:服務誰、提供什麼",
|
|
96
|
+
},
|
|
97
|
+
placeholder: {
|
|
98
|
+
en: "e.g. An app that helps freelancers send invoices and get paid twice as fast.",
|
|
99
|
+
zh: "例如:帮自由职业者开发票并更快收到款的应用。",
|
|
100
|
+
"zh-tw": "例如:幫自由職業者開發票並更快收到款的應用。",
|
|
101
|
+
},
|
|
102
|
+
invalidMessage: {
|
|
103
|
+
en: "Describe the business in a real sentence: who it serves and what it delivers. Placeholder text produces generic slogans.",
|
|
104
|
+
zh: "请用完整的话描述业务:服务谁、提供什么。占位文本只会得到空泛的广告语。",
|
|
105
|
+
"zh-tw": "請用完整的話描述業務:服務誰、提供什麼。佔位文字只會得到空泛的廣告語。",
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
kind: "text",
|
|
110
|
+
id: "brandName",
|
|
111
|
+
label: { en: "Brand name (optional)", zh: "品牌名(选填)", "zh-tw": "品牌名(選填)" },
|
|
112
|
+
hint: {
|
|
113
|
+
en: "If provided, some candidates will weave the name in",
|
|
114
|
+
zh: "填写后会生成包含品牌名的候选",
|
|
115
|
+
"zh-tw": "填寫後會生成包含品牌名的候選",
|
|
116
|
+
},
|
|
117
|
+
placeholder: { en: "Tomako", zh: "Tomako", "zh-tw": "Tomako" },
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
kind: "text",
|
|
121
|
+
id: "audience",
|
|
122
|
+
label: { en: "Target audience (optional)", zh: "目标人群(选填)", "zh-tw": "目標人群(選填)" },
|
|
123
|
+
placeholder: {
|
|
124
|
+
en: "e.g. indie developers, busy parents, small agencies",
|
|
125
|
+
zh: "例如:独立开发者、忙碌的父母、小型代理公司",
|
|
126
|
+
"zh-tw": "例如:獨立開發者、忙碌的父母、小型代理公司",
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
kind: "select",
|
|
131
|
+
id: "stylePreference",
|
|
132
|
+
defaultValue: "mixed",
|
|
133
|
+
label: { en: "Style direction", zh: "风格方向", "zh-tw": "風格方向" },
|
|
134
|
+
options: [
|
|
135
|
+
{ value: "mixed", label: { en: "Mixed styles (recommended)", zh: "多风格混合(推荐)", "zh-tw": "多風格混合(推薦)" } },
|
|
136
|
+
{ value: "bold", label: { en: "Bold & confident", zh: "大胆自信", "zh-tw": "大膽自信" } },
|
|
137
|
+
{ value: "minimal", label: { en: "Minimal & clean", zh: "极简干净", "zh-tw": "極簡乾淨" } },
|
|
138
|
+
{ value: "playful", label: { en: "Playful & witty", zh: "俏皮机智", "zh-tw": "俏皮機智" } },
|
|
139
|
+
{ value: "premium", label: { en: "Premium & elegant", zh: "高端优雅", "zh-tw": "高端優雅" } },
|
|
140
|
+
{ value: "benefit", label: { en: "Benefit-driven", zh: "利益导向", "zh-tw": "利益導向" } },
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
kind: "text",
|
|
145
|
+
id: "mustIncludeWords",
|
|
146
|
+
label: { en: "Words to include (optional)", zh: "希望包含的词(选填)", "zh-tw": "希望包含的詞(選填)" },
|
|
147
|
+
placeholder: { en: "e.g. fast, simple", zh: "例如:快、简单", "zh-tw": "例如:快、簡單" },
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
runtime: {
|
|
151
|
+
lane: "direct",
|
|
152
|
+
scene: "slogan_generator",
|
|
153
|
+
system:
|
|
154
|
+
"You are Tomako's brand copywriter. You write short, memorable slogans and taglines grounded in the actual business described, never generic filler that could fit any company. You explain why each line works using copywriting craft (rhythm, contrast, benefit, specificity), and you are honest about gaps in the brief.",
|
|
155
|
+
promptTemplate: `Write slogan candidates from this structured brief:
|
|
156
|
+
|
|
157
|
+
\`\`\`json
|
|
158
|
+
{{briefJson}}
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
Quality requirements:
|
|
162
|
+
- businessRead, audienceRead, and corePromise are plain strings that faithfully restate the brief: what the business does, who it serves (infer if not given), and the single strongest value the slogans should carry.
|
|
163
|
+
- Write exactly 10 slogans. Each 3-6 words (7 only when the rhythm truly needs it). Each must be specific to THIS business — reject any line that would work for a random company.
|
|
164
|
+
- If stylePreference is "mixed", cover at least 4 distinct styles across the set (e.g. benefit-driven, bold, minimal, playful, premium, name-based). Otherwise weight ~7 candidates toward the requested style and use the rest for contrast.
|
|
165
|
+
- If brandName is provided, include 2-3 name-based candidates that weave the name in naturally (rhyme, rhythm, or wordplay). If not provided, do not invent a brand name.
|
|
166
|
+
- If mustIncludeWords is provided, use those words (or close variants) in at least 3 candidates without forcing awkward phrasing.
|
|
167
|
+
- style is a 1-3 word label (e.g. "Benefit-driven", "Bold", "Name-based"), written in the same language as the rest of the response.
|
|
168
|
+
- whyItWorks is one concrete sentence naming the craft: rhythm, rhyme, contrast, specificity, emotional trigger, or benefit clarity. Never write "it is catchy".
|
|
169
|
+
- selectionTips: 3-5 practical next steps for choosing and validating a slogan (e.g. read aloud, test with 5 strangers against the logo, check trademark and domain collisions).
|
|
170
|
+
- If the brief is thin or ambiguous, list what is missing in missingInfo; otherwise return an empty array.
|
|
171
|
+
- Set promptVersion to "direct-v1".`,
|
|
172
|
+
maxTokens: 4000,
|
|
173
|
+
},
|
|
174
|
+
resultSchema,
|
|
175
|
+
resultView: [
|
|
176
|
+
{
|
|
177
|
+
block: "keyValues",
|
|
178
|
+
title: { en: "Brand read", zh: "品牌解读", "zh-tw": "品牌解讀" },
|
|
179
|
+
items: [
|
|
180
|
+
{ label: { en: "Business", zh: "业务", "zh-tw": "業務" }, path: "businessRead" },
|
|
181
|
+
{ label: { en: "Audience", zh: "人群", "zh-tw": "人群" }, path: "audienceRead" },
|
|
182
|
+
{ label: { en: "Core promise", zh: "核心承诺", "zh-tw": "核心承諾" }, path: "corePromise" },
|
|
183
|
+
],
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
block: "cardList",
|
|
187
|
+
title: { en: "Slogan candidates", zh: "Slogan 候选", "zh-tw": "Slogan 候選" },
|
|
188
|
+
path: "slogans",
|
|
189
|
+
layout: "grid",
|
|
190
|
+
card: {
|
|
191
|
+
titleField: "slogan",
|
|
192
|
+
titleCopyable: true,
|
|
193
|
+
metaField: "style",
|
|
194
|
+
body: { field: "whyItWorks", label: { en: "Why it works", zh: "入选理由", "zh-tw": "入選理由" } },
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
block: "bulletList",
|
|
199
|
+
title: { en: "How to pick the winner", zh: "怎么选出最终版", "zh-tw": "怎麼選出最終版" },
|
|
200
|
+
path: "selectionTips",
|
|
201
|
+
tone: "positive",
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
block: "bulletList",
|
|
205
|
+
title: { en: "Missing information", zh: "缺失信息", "zh-tw": "缺失資訊" },
|
|
206
|
+
path: "missingInfo",
|
|
207
|
+
tone: "risk",
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
widget: {
|
|
211
|
+
formTitle: { en: "Describe the brand", zh: "描述你的品牌", "zh-tw": "描述你的品牌" },
|
|
212
|
+
formHint: {
|
|
213
|
+
en: "One clear sentence about what you do is enough. Brand name, audience, and style direction sharpen the candidates.",
|
|
214
|
+
zh: "一句说清业务就够了。品牌名、目标人群和风格方向会让候选更贴合。",
|
|
215
|
+
"zh-tw": "一句說清業務就夠了。品牌名、目標人群和風格方向會讓候選更貼合。",
|
|
216
|
+
},
|
|
217
|
+
submitLabel: { en: "Generate 10 slogans", zh: "生成 10 条 Slogan", "zh-tw": "生成 10 條 Slogan" },
|
|
218
|
+
resultTitle: { en: "Compare your candidates", zh: "横向比较候选", "zh-tw": "橫向比較候選" },
|
|
219
|
+
pendingTitle: { en: "Writing your slogans", zh: "正在生成 Slogan", "zh-tw": "正在生成 Slogan" },
|
|
220
|
+
pendingHint: {
|
|
221
|
+
en: "Usually takes 15-30 seconds. Candidates across multiple styles are being written and annotated.",
|
|
222
|
+
zh: "通常需要 15-30 秒。正在生成多风格候选并为每条写入选理由。",
|
|
223
|
+
"zh-tw": "通常需要 15-30 秒。正在生成多風格候選並為每條寫入選理由。",
|
|
224
|
+
},
|
|
225
|
+
errorOverrides: {
|
|
226
|
+
validation: {
|
|
227
|
+
title: { en: "Describe the business first", zh: "请先描述业务", "zh-tw": "請先描述業務" },
|
|
228
|
+
body: {
|
|
229
|
+
en: "The business description needs a real sentence about who you serve and what you deliver. Test text or a bare keyword produces slogans that fit any company.",
|
|
230
|
+
zh: "业务描述需要写清服务谁、提供什么。测试文本或单个关键词只会得到放之四海皆准的空泛广告语。",
|
|
231
|
+
"zh-tw": "業務描述需要寫清服務誰、提供什麼。測試文字或單一關鍵詞只會得到放之四海皆準的空泛廣告語。",
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
page: {
|
|
237
|
+
workspace: {
|
|
238
|
+
heading: {
|
|
239
|
+
en: "Get 10 slogan candidates worth comparing",
|
|
240
|
+
zh: "一次拿到 10 条值得比较的 Slogan",
|
|
241
|
+
"zh-tw": "一次拿到 10 條值得比較的 Slogan",
|
|
242
|
+
},
|
|
243
|
+
hint: {
|
|
244
|
+
en: "Describe the business in one or two sentences, optionally add the brand name and audience. You get 10 candidates across multiple styles, each with a style tag and a note on why the line works — ready to shortlist, test, and refine.",
|
|
245
|
+
zh: "用一两句话描述业务,可选填品牌名和目标人群。你会得到覆盖多种风格的 10 条候选,每条带风格标签和入选理由——直接进入筛选、测试和打磨。",
|
|
246
|
+
"zh-tw": "用一兩句話描述業務,可選填品牌名和目標人群。你會得到覆蓋多種風格的 10 條候選,每條帶風格標籤和入選理由——直接進入篩選、測試和打磨。",
|
|
247
|
+
},
|
|
248
|
+
badge: { en: "Free, no sign-up", zh: "免费免注册", "zh-tw": "免費免註冊" },
|
|
249
|
+
},
|
|
250
|
+
sections: [
|
|
251
|
+
{
|
|
252
|
+
kind: "cards",
|
|
253
|
+
heading: {
|
|
254
|
+
en: "What this slogan maker gives you",
|
|
255
|
+
zh: "这个广告语生成器会给你什么",
|
|
256
|
+
"zh-tw": "這個廣告語生成器會給你什麼",
|
|
257
|
+
},
|
|
258
|
+
items: [
|
|
259
|
+
{
|
|
260
|
+
title: { en: "10 candidates, multiple styles", zh: "10 条候选,多种风格", "zh-tw": "10 條候選,多種風格" },
|
|
261
|
+
body: {
|
|
262
|
+
en: "Bold, minimal, playful, premium, benefit-driven, and name-based lines side by side, so you compare directions instead of squeezing variations out of a single idea.",
|
|
263
|
+
zh: "大胆、极简、俏皮、高端、利益导向、含品牌名的候选并排给出,比较的是方向,而不是在一个想法里打转。",
|
|
264
|
+
"zh-tw": "大膽、極簡、俏皮、高端、利益導向、含品牌名的候選並排給出,比較的是方向,而不是在一個想法裡打轉。",
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
title: { en: "A why-it-works note per line", zh: "每条都有入选理由", "zh-tw": "每條都有入選理由" },
|
|
269
|
+
body: {
|
|
270
|
+
en: "Each slogan names the craft behind it — rhythm, contrast, specificity, benefit clarity — so you can judge candidates instead of guessing.",
|
|
271
|
+
zh: "每条 slogan 都写明它靠什么成立——节奏、对比、具体性、利益清晰度——你可以有依据地评判,而不是凭感觉猜。",
|
|
272
|
+
"zh-tw": "每條 slogan 都寫明它靠什麼成立——節奏、對比、具體性、利益清晰度——你可以有依據地評判,而不是憑感覺猜。",
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
title: { en: "A brand read you can check", zh: "可核对的品牌解读", "zh-tw": "可核對的品牌解讀" },
|
|
277
|
+
body: {
|
|
278
|
+
en: "The result restates the business, audience, and core promise it wrote from. If the read is off, adjust one line of input and regenerate.",
|
|
279
|
+
zh: "结果会先复述它理解的业务、人群和核心承诺。解读偏了就改一句输入重新生成,不用从头再想。",
|
|
280
|
+
"zh-tw": "結果會先復述它理解的業務、人群和核心承諾。解讀偏了就改一句輸入重新生成,不用從頭再想。",
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
title: { en: "Next steps for choosing", zh: "选定前的行动清单", "zh-tw": "選定前的行動清單" },
|
|
285
|
+
body: {
|
|
286
|
+
en: "Practical selection tips come with the result: read-aloud tests, stranger tests against the logo, trademark and domain checks.",
|
|
287
|
+
zh: "结果附带挑选建议:朗读测试、拿给陌生人配 logo 测试、商标和域名冲突检查。",
|
|
288
|
+
"zh-tw": "結果附帶挑選建議:朗讀測試、拿給陌生人配 logo 測試、商標和網域衝突檢查。",
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
],
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
kind: "bullets",
|
|
295
|
+
heading: {
|
|
296
|
+
en: "When a tagline generator saves the day",
|
|
297
|
+
zh: "什么时候最需要 tagline 生成器",
|
|
298
|
+
"zh-tw": "什麼時候最需要 tagline 生成器",
|
|
299
|
+
},
|
|
300
|
+
image: {
|
|
301
|
+
src: "/tools/slogan-generator-support.webp",
|
|
302
|
+
alt: {
|
|
303
|
+
en: "Illustration of a founder comparing slogan candidate cards while preparing a brand launch.",
|
|
304
|
+
zh: "创始人在筹备品牌上线时比较 slogan 候选卡片的插画。",
|
|
305
|
+
"zh-tw": "創始人在籌備品牌上線時比較 slogan 候選卡片的插畫。",
|
|
306
|
+
},
|
|
307
|
+
side: "right",
|
|
308
|
+
wide: true,
|
|
309
|
+
},
|
|
310
|
+
groups: [
|
|
311
|
+
{
|
|
312
|
+
items: {
|
|
313
|
+
en: [
|
|
314
|
+
"Your landing page hero needs one line under the product name and everything you draft sounds flat.",
|
|
315
|
+
"You are launching on Product Hunt or app stores and the listing needs a memorable one-liner.",
|
|
316
|
+
"A rebrand or new campaign needs a fresh tagline that still matches the existing brand voice.",
|
|
317
|
+
"Ad creatives need several short hooks to A/B test instead of one line used everywhere.",
|
|
318
|
+
"You inherited a literal, descriptive slogan and want options with actual personality.",
|
|
319
|
+
],
|
|
320
|
+
zh: [
|
|
321
|
+
"落地页首屏需要产品名下面那一行字,而你写的每版都很平。",
|
|
322
|
+
"要上 Product Hunt 或应用商店,列表页需要一句让人记住的话。",
|
|
323
|
+
"品牌改版或新 campaign 需要新 tagline,但又要贴合原有品牌语气。",
|
|
324
|
+
"广告素材需要几条短 hook 做 A/B 测试,而不是一句话用到处。",
|
|
325
|
+
"接手了一句纯描述性的旧口号,想要一批真正有性格的备选。",
|
|
326
|
+
],
|
|
327
|
+
"zh-tw": [
|
|
328
|
+
"網站首頁需要產品名下方的那一行字,而你寫的每版都很平。",
|
|
329
|
+
"要上 Product Hunt 或應用程式商店,列表頁需要一句讓人記住的話。",
|
|
330
|
+
"品牌改版或新 campaign 需要新 tagline,但又要貼合原有品牌語氣。",
|
|
331
|
+
"廣告素材需要幾條短 hook 做 A/B 測試,而不是一句話用到處。",
|
|
332
|
+
"接手了一句純描述性的舊口號,想要一批真正有性格的備選。",
|
|
333
|
+
],
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
],
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
kind: "bullets",
|
|
340
|
+
heading: {
|
|
341
|
+
en: "Supported scope and honest limits",
|
|
342
|
+
zh: "支持范围与能力边界",
|
|
343
|
+
"zh-tw": "支援範圍與能力邊界",
|
|
344
|
+
},
|
|
345
|
+
image: {
|
|
346
|
+
src: "/tools/slogan-generator-standard.webp",
|
|
347
|
+
alt: {
|
|
348
|
+
en: "Illustration of slogan drafts passing through checkpoints for memorability, fit, and trademark review.",
|
|
349
|
+
zh: "slogan 草案经过可记忆性、贴合度与商标检查点的插画。",
|
|
350
|
+
"zh-tw": "slogan 草案經過可記憶性、貼合度與商標檢查點的插畫。",
|
|
351
|
+
},
|
|
352
|
+
side: "left",
|
|
353
|
+
wide: true,
|
|
354
|
+
},
|
|
355
|
+
groups: [
|
|
356
|
+
{
|
|
357
|
+
title: { en: "Works well for", zh: "适合", "zh-tw": "適合" },
|
|
358
|
+
items: {
|
|
359
|
+
en: [
|
|
360
|
+
"Businesses, products, apps, campaigns, events, shops, and personal brands — any brief you can describe in a sentence.",
|
|
361
|
+
"English, Chinese, and Traditional Chinese output following the language you are browsing in.",
|
|
362
|
+
"Slogans with or without the brand name woven in; name-based wordplay is generated only when you provide a name.",
|
|
363
|
+
"Regenerating with an adjusted description, audience, or style direction to explore another angle.",
|
|
364
|
+
],
|
|
365
|
+
zh: [
|
|
366
|
+
"公司、产品、App、campaign、活动、店铺、个人项目——凡是能用一句话描述的业务都适用。",
|
|
367
|
+
"输出语言跟随你浏览页面的语言:中文、英文、繁体中文。",
|
|
368
|
+
"候选可含或不含品牌名;只有你填了品牌名,才会生成嵌入名字的文字游戏。",
|
|
369
|
+
"调整描述、人群或风格方向后重新生成,探索另一个角度。",
|
|
370
|
+
],
|
|
371
|
+
"zh-tw": [
|
|
372
|
+
"公司、產品、App、campaign、活動、店鋪、個人專案——凡是能用一句話描述的業務都適用。",
|
|
373
|
+
"輸出語言跟隨你瀏覽頁面的語言:中文、英文、繁體中文。",
|
|
374
|
+
"候選可含或不含品牌名;只有你填了品牌名,才會生成嵌入名字的文字遊戲。",
|
|
375
|
+
"調整描述、人群或風格方向後重新生成,探索另一個角度。",
|
|
376
|
+
],
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
title: { en: "What it will not do", zh: "不承诺的事", "zh-tw": "不承諾的事" },
|
|
381
|
+
items: {
|
|
382
|
+
en: [
|
|
383
|
+
"It does not check trademark, domain, or social handle availability — run those checks before committing.",
|
|
384
|
+
"Candidates are drafts to shortlist and test, not a guaranteed brand asset; the final call is a human judgment.",
|
|
385
|
+
"It will not fabricate awards, statistics, or claims your product cannot back up.",
|
|
386
|
+
"A vague one-word input produces generic lines — the tool flags thin briefs in missing information instead of hiding it.",
|
|
387
|
+
],
|
|
388
|
+
zh: [
|
|
389
|
+
"不做商标、域名、社媒账号占用检查——定稿前请自行查重。",
|
|
390
|
+
"候选是用于筛选和测试的草案,不是保证可用的品牌资产;最终决定仍是人的判断。",
|
|
391
|
+
"不会编造奖项、数据或产品兑现不了的承诺。",
|
|
392
|
+
"输入太空泛只会得到通用句子——工具会在缺失信息里明说,而不是装作没问题。",
|
|
393
|
+
],
|
|
394
|
+
"zh-tw": [
|
|
395
|
+
"不做商標、網域、社群帳號佔用檢查——定稿前請自行查重。",
|
|
396
|
+
"候選是用於篩選和測試的草案,不是保證可用的品牌資產;最終決定仍是人的判斷。",
|
|
397
|
+
"不會編造獎項、數據或產品兌現不了的承諾。",
|
|
398
|
+
"輸入太空泛只會得到通用句子——工具會在缺失資訊裡明說,而不是裝作沒問題。",
|
|
399
|
+
],
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
title: { en: "If generation fails", zh: "生成失败时", "zh-tw": "生成失敗時" },
|
|
404
|
+
items: {
|
|
405
|
+
en: [
|
|
406
|
+
"Your input is kept after an error — refine the description and generate again.",
|
|
407
|
+
"If the result looks generic, the description is usually too thin: add who it serves and what changes for them.",
|
|
408
|
+
"Busy periods can time out; retrying once usually resolves it.",
|
|
409
|
+
],
|
|
410
|
+
zh: [
|
|
411
|
+
"出错后输入会保留——补充描述后再点一次生成即可。",
|
|
412
|
+
"如果结果很空泛,通常是描述太薄:补上服务谁、给他们带来什么变化。",
|
|
413
|
+
"高峰期可能超时,重试一次通常就能解决。",
|
|
414
|
+
],
|
|
415
|
+
"zh-tw": [
|
|
416
|
+
"出錯後輸入會保留——補充描述後再點一次生成即可。",
|
|
417
|
+
"如果結果很空泛,通常是描述太薄:補上服務誰、給他們帶來什麼變化。",
|
|
418
|
+
"高峰期可能逾時,重試一次通常就能解決。",
|
|
419
|
+
],
|
|
420
|
+
},
|
|
421
|
+
},
|
|
422
|
+
],
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
kind: "bullets",
|
|
426
|
+
heading: {
|
|
427
|
+
en: "From candidate list to final slogan",
|
|
428
|
+
zh: "从候选清单到最终定稿",
|
|
429
|
+
"zh-tw": "從候選清單到最終定稿",
|
|
430
|
+
},
|
|
431
|
+
image: {
|
|
432
|
+
src: "/tools/slogan-generator-result-use.webp",
|
|
433
|
+
alt: {
|
|
434
|
+
en: "Illustration of a shortlisted slogan being tested next to a logo and shipped onto a landing page.",
|
|
435
|
+
zh: "入围 slogan 与 logo 搭配测试并最终用于落地页的插画。",
|
|
436
|
+
"zh-tw": "入圍 slogan 與 logo 搭配測試並最終用於網站首頁的插畫。",
|
|
437
|
+
},
|
|
438
|
+
side: "right",
|
|
439
|
+
wide: true,
|
|
440
|
+
},
|
|
441
|
+
groups: [
|
|
442
|
+
{
|
|
443
|
+
items: {
|
|
444
|
+
en: [
|
|
445
|
+
"Shortlist 3 candidates from different styles rather than 3 variations of the same idea.",
|
|
446
|
+
"Read each aloud — the winner survives a single breath and sounds natural in conversation.",
|
|
447
|
+
"Show the shortlist next to your logo to people who do not know the brand; ask which one they remember an hour later.",
|
|
448
|
+
"Search the exact phrase plus your industry for trademark and competitor collisions before committing.",
|
|
449
|
+
"Ship it consistently: landing page hero, social bios, app store listing, and email signature all carry the same line.",
|
|
450
|
+
],
|
|
451
|
+
zh: [
|
|
452
|
+
"从不同风格里挑 3 条入围,而不是同一个想法的 3 个变体。",
|
|
453
|
+
"逐条朗读——能一口气读完、像日常说话的那条更可能是赢家。",
|
|
454
|
+
"把入围候选和 logo 摆在一起给不认识品牌的人看,一小时后问他们还记得哪条。",
|
|
455
|
+
"定稿前搜索“候选原文 + 行业”,排查商标和竞品撞车。",
|
|
456
|
+
"定了就统一用:落地页首屏、社媒简介、应用商店列表、邮件签名都是同一句。",
|
|
457
|
+
],
|
|
458
|
+
"zh-tw": [
|
|
459
|
+
"從不同風格裡挑 3 條入圍,而不是同一個想法的 3 個變體。",
|
|
460
|
+
"逐條朗讀——能一口氣讀完、像日常說話的那條更可能是贏家。",
|
|
461
|
+
"把入圍候選和 logo 擺在一起給不認識品牌的人看,一小時後問他們還記得哪條。",
|
|
462
|
+
"定稿前搜尋「候選原文 + 產業」,排查商標和競品撞車。",
|
|
463
|
+
"定了就統一用:網站首頁、社群簡介、應用程式商店列表、郵件簽名都是同一句。",
|
|
464
|
+
],
|
|
465
|
+
},
|
|
466
|
+
},
|
|
467
|
+
],
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
kind: "cards",
|
|
471
|
+
heading: {
|
|
472
|
+
en: "Why this beats the usual free slogan tools",
|
|
473
|
+
zh: "为什么比常见的免费 slogan 工具好用",
|
|
474
|
+
"zh-tw": "為什麼比常見的免費 slogan 工具好用",
|
|
475
|
+
},
|
|
476
|
+
items: [
|
|
477
|
+
{
|
|
478
|
+
title: { en: "Results on this page, no account", zh: "本页直出,无需注册", "zh-tw": "本頁直出,無需註冊" },
|
|
479
|
+
body: {
|
|
480
|
+
en: "Slogan creators from Shopify, Copy.ai, and Grammarly route you into a sign-up or product funnel before the full result. Here the complete list renders right below the form.",
|
|
481
|
+
zh: "Shopify、Copy.ai、Grammarly 的 slogan 工具在给出完整结果前会把你引进注册或产品漏斗。这里的完整候选就渲染在表单下方。",
|
|
482
|
+
"zh-tw": "Shopify、Copy.ai、Grammarly 的 slogan 工具在給出完整結果前會把你引進註冊或產品漏斗。這裡的完整候選就渲染在表單下方。",
|
|
483
|
+
},
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
title: { en: "Reasons, not word salad", zh: "有理由,不是词的堆砌", "zh-tw": "有理由,不是詞的堆砌" },
|
|
487
|
+
body: {
|
|
488
|
+
en: "Plain generators dump unlabeled lines. Every candidate here carries a style tag and one concrete sentence on the craft that makes it work.",
|
|
489
|
+
zh: "普通生成器只倒出一堆没有标注的句子。这里每条候选都有风格标签,和一句讲清成立原因的说明。",
|
|
490
|
+
"zh-tw": "普通生成器只倒出一堆沒有標註的句子。這裡每條候選都有風格標籤,和一句講清成立原因的說明。",
|
|
491
|
+
},
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
title: { en: "Grounded in your brief", zh: "从你的业务出发", "zh-tw": "從你的業務出發" },
|
|
495
|
+
body: {
|
|
496
|
+
en: "The brand read is shown with the result, so you can verify the slogans were written from your actual business, not a template.",
|
|
497
|
+
zh: "结果会展示品牌解读,你能核对候选确实是从你的业务写出来的,而不是模板换词。",
|
|
498
|
+
"zh-tw": "結果會展示品牌解讀,你能核對候選確實是從你的業務寫出來的,而不是模板換詞。",
|
|
499
|
+
},
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
title: { en: "Built for the next step", zh: "为下一步准备", "zh-tw": "為下一步準備" },
|
|
503
|
+
body: {
|
|
504
|
+
en: "Selection tips and honest missing-info flags turn the list into a decision process, and related Tomako tools carry the brand work forward.",
|
|
505
|
+
zh: "挑选建议和缺失信息提示把清单变成决策流程,Tomako 的相关工具还能接着完成后续品牌工作。",
|
|
506
|
+
"zh-tw": "挑選建議和缺失資訊提示把清單變成決策流程,Tomako 的相關工具還能接著完成後續品牌工作。",
|
|
507
|
+
},
|
|
508
|
+
},
|
|
509
|
+
],
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
kind: "bullets",
|
|
513
|
+
heading: {
|
|
514
|
+
en: "What makes a slogan actually stick",
|
|
515
|
+
zh: "什么样的 slogan 真正记得住",
|
|
516
|
+
"zh-tw": "什麼樣的 slogan 真正記得住",
|
|
517
|
+
},
|
|
518
|
+
image: {
|
|
519
|
+
src: "/tools/slogan-generator-value.webp",
|
|
520
|
+
alt: {
|
|
521
|
+
en: "Illustration of a short punchy slogan standing out among crossed-out wordy drafts.",
|
|
522
|
+
zh: "简短有力的 slogan 从被划掉的冗长草稿中脱颖而出的插画。",
|
|
523
|
+
"zh-tw": "簡短有力的 slogan 從被劃掉的冗長草稿中脫穎而出的插畫。",
|
|
524
|
+
},
|
|
525
|
+
side: "left",
|
|
526
|
+
wide: true,
|
|
527
|
+
},
|
|
528
|
+
groups: [
|
|
529
|
+
{
|
|
530
|
+
items: {
|
|
531
|
+
en: [
|
|
532
|
+
"Short enough to remember like a phone number: most iconic lines are 3-6 words (Just Do It, Think Different, Eat Fresh).",
|
|
533
|
+
"Sound matters as much as meaning — rhythm, rhyme, and repetition are why 'Once you pop, you can't stop' stuck for decades.",
|
|
534
|
+
"One promise per line: a slogan that says two things says nothing.",
|
|
535
|
+
"Specific beats clever: a plain line about the real benefit outperforms wordplay that needs explaining.",
|
|
536
|
+
"It must be honest — a slogan is a promise, and overpromising loses the customer at first contact.",
|
|
537
|
+
],
|
|
538
|
+
zh: [
|
|
539
|
+
"短到像电话号码一样好记:经典口号大多 3-6 个词(Just Do It、Think Different)。",
|
|
540
|
+
"读音和含义同样重要——节奏、押韵和重复是很多经典广告语流传几十年的原因。",
|
|
541
|
+
"一条只讲一个承诺:想同时说两件事的 slogan 等于什么都没说。",
|
|
542
|
+
"具体胜过机灵:老实讲清真实收益的句子,胜过需要解释才懂的文字游戏。",
|
|
543
|
+
"必须诚实——slogan 是承诺,说过头的话会在用户第一次接触产品时就失去信任。",
|
|
544
|
+
],
|
|
545
|
+
"zh-tw": [
|
|
546
|
+
"短到像電話號碼一樣好記:經典口號大多 3-6 個詞(Just Do It、Think Different)。",
|
|
547
|
+
"讀音和含義同樣重要——節奏、押韻和重複是很多經典廣告語流傳幾十年的原因。",
|
|
548
|
+
"一條只講一個承諾:想同時說兩件事的 slogan 等於什麼都沒說。",
|
|
549
|
+
"具體勝過機靈:老實講清真實收益的句子,勝過需要解釋才懂的文字遊戲。",
|
|
550
|
+
"必須誠實——slogan 是承諾,說過頭的話會在用戶第一次接觸產品時就失去信任。",
|
|
551
|
+
],
|
|
552
|
+
},
|
|
553
|
+
},
|
|
554
|
+
],
|
|
555
|
+
},
|
|
556
|
+
],
|
|
557
|
+
faq: [
|
|
558
|
+
{
|
|
559
|
+
question: {
|
|
560
|
+
en: "What is the difference between a slogan and a tagline?",
|
|
561
|
+
zh: "slogan 和 tagline 有什么区别?",
|
|
562
|
+
"zh-tw": "slogan 和 tagline 有什麼區別?",
|
|
563
|
+
},
|
|
564
|
+
answer: {
|
|
565
|
+
en: "A tagline represents the whole brand and stays for years (Nike's Just Do It); a slogan is often tied to one campaign or product and can rotate. This generator writes lines usable as either — pick per candidate based on how broad the promise is.",
|
|
566
|
+
zh: "tagline 代表整个品牌、通常沿用多年(如 Nike 的 Just Do It);slogan 常绑定单次 campaign 或产品,可以轮换。这个工具生成的候选两种用途都可以,按每条承诺的宽窄来分配用途即可。",
|
|
567
|
+
"zh-tw": "tagline 代表整個品牌、通常沿用多年(如 Nike 的 Just Do It);slogan 常綁定單次 campaign 或產品,可以輪換。這個工具生成的候選兩種用途都可以,按每條承諾的寬窄來分配用途即可。",
|
|
568
|
+
},
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
question: {
|
|
572
|
+
en: "Can I use the generated slogans commercially?",
|
|
573
|
+
zh: "生成的 slogan 可以商用吗?",
|
|
574
|
+
"zh-tw": "生成的 slogan 可以商用嗎?",
|
|
575
|
+
},
|
|
576
|
+
answer: {
|
|
577
|
+
en: "Yes, the generated text is yours to use. But short phrases can collide with existing trademarks, so before printing or filing, search the exact phrase in your market and check trademark databases for your industry class.",
|
|
578
|
+
zh: "可以,生成的文本归你使用。但短语可能与现有商标撞车,所以在印刷或注册前,请在目标市场搜索候选原文,并按你的行业类别查询商标库。",
|
|
579
|
+
"zh-tw": "可以,生成的文字歸你使用。但短語可能與現有商標撞車,所以在印刷或註冊前,請在目標市場搜尋候選原文,並按你的產業類別查詢商標庫。",
|
|
580
|
+
},
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
question: {
|
|
584
|
+
en: "How do I write a catchy slogan?",
|
|
585
|
+
zh: "怎么写出一条抓人的 slogan?",
|
|
586
|
+
"zh-tw": "怎麼寫出一條抓人的 slogan?",
|
|
587
|
+
},
|
|
588
|
+
answer: {
|
|
589
|
+
en: "Keep it to 3-6 words, make one specific promise, and let sound do half the work — rhythm, rhyme, or contrast. Whether you need a business slogan for the whole company or a campaign tagline, draft many candidates first, then cut hard: the generator gives you the spread of styles, and the why-it-works notes show which craft each line leans on.",
|
|
590
|
+
zh: "控制在 3-6 个词,只讲一个具体承诺,并让读音帮你——节奏、押韵或对比。无论是公司口号还是 campaign tagline,都先写一批候选再狠心删:生成器给你风格的广度,入选理由则告诉你每条依靠的是哪种手艺。",
|
|
591
|
+
"zh-tw": "控制在 3-6 個詞,只講一個具體承諾,並讓讀音幫你——節奏、押韻或對比。無論是公司口號還是 campaign tagline,都先寫一批候選再狠心刪:生成器給你風格的廣度,入選理由則告訴你每條依靠的是哪種手藝。",
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
question: {
|
|
596
|
+
en: "Will it include my brand name in the slogan?",
|
|
597
|
+
zh: "会把我的品牌名写进 slogan 吗?",
|
|
598
|
+
"zh-tw": "會把我的品牌名寫進 slogan 嗎?",
|
|
599
|
+
},
|
|
600
|
+
answer: {
|
|
601
|
+
en: "Only if you provide one. With a brand name, 2-3 candidates weave it in through rhythm or wordplay, the way America runs on Dunkin' does. Without one, the tool never invents a fake name.",
|
|
602
|
+
zh: "只有你填写了品牌名才会。填写后会有 2-3 条候选用节奏或文字游戏把名字嵌进去(类似 America runs on Dunkin' 的写法);不填则绝不会编造名字。",
|
|
603
|
+
"zh-tw": "只有你填寫了品牌名才會。填寫後會有 2-3 條候選用節奏或文字遊戲把名字嵌進去(類似 America runs on Dunkin' 的寫法);不填則絕不會編造名字。",
|
|
604
|
+
},
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
question: {
|
|
608
|
+
en: "Is this slogan generator really free?",
|
|
609
|
+
zh: "这个 slogan 生成器真的免费吗?",
|
|
610
|
+
"zh-tw": "這個 slogan 生成器真的免費嗎?",
|
|
611
|
+
},
|
|
612
|
+
answer: {
|
|
613
|
+
en: "Yes — no account, no credit card, and the full result renders on this page. Heavy usage is rate-limited per minute to keep the tool fast for everyone.",
|
|
614
|
+
zh: "免费——不需要账号和信用卡,完整结果就在本页显示。为了保证所有人的速度,每分钟的生成次数有上限。",
|
|
615
|
+
"zh-tw": "免費——不需要帳號和信用卡,完整結果就在本頁顯示。為了保證所有人的速度,每分鐘的生成次數有上限。",
|
|
616
|
+
},
|
|
617
|
+
},
|
|
618
|
+
],
|
|
619
|
+
cta: {
|
|
620
|
+
hint: {
|
|
621
|
+
en: "Slogan shortlisted? Continue refining the product name and launch messaging.",
|
|
622
|
+
zh: "Slogan 选好了?接着完善产品命名和上线表达。",
|
|
623
|
+
"zh-tw": "Slogan 選好了?接著完善產品命名和上線表達。",
|
|
624
|
+
},
|
|
625
|
+
primary: {
|
|
626
|
+
href: "/tools/product-name-generator",
|
|
627
|
+
label: { en: "Generate product names", zh: "生成产品命名", "zh-tw": "生成產品命名" },
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
},
|
|
631
|
+
assets: {
|
|
632
|
+
hero: {
|
|
633
|
+
src: "/tools/slogan-generator-hero.webp",
|
|
634
|
+
alt: {
|
|
635
|
+
en: "Illustration of slogan candidate cards in multiple styles arranged around a brand mark.",
|
|
636
|
+
zh: "多种风格的 slogan 候选卡片围绕品牌标识排列的插画。",
|
|
637
|
+
"zh-tw": "多種風格的 slogan 候選卡片圍繞品牌標識排列的插畫。",
|
|
638
|
+
},
|
|
639
|
+
},
|
|
640
|
+
},
|
|
641
|
+
};
|