From 0eff22dc0d86e6bfaf0cd8fc23e87b6f9263d1b2 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Wed, 19 Aug 2026 09:34:26 -0300 Subject: [PATCH] Remove the post-templates feature (#296) * Remove the post-templates feature Removes the browsable post-templates catalog end to end: routes (app.post-templates.index/apply), controller, form requests, resource, Registry/PostTemplateData/TemplateNotFoundException services, the templates:report console command, the templates/ catalog (36 files across en/es/pt-BR), the templates Index.vue page, the template card on the post Create.vue choice screen, and its i18n keys across all 16 locales. Also removes TemplateContextResolver, which fed catalog examples into PostContentGenerator's AI prompt. The "examples" block (with its heading) is removed from generator.blade.php rather than left empty; AI generation no longer references the templates catalog. The AI content-template system under app/Ai/Templates (image/tweet card templates for the AI post wizard) and TemplateImageGenerator are unrelated and untouched. * Update FormRequest naming examples after the post-templates removal CLAUDE.md and the Cursor rules cited ApplyPostTemplateRequest and IndexPostTemplateRequest as naming examples. Both classes were deleted with the feature, so the guidance pointed at files that no longer exist. * Share the AiTemplate type between the create screen and the AI wizard Create.vue and AiPostWizard.vue each declared their own AiTemplate interface, and they had drifted: the wizard's carried applies_brand_visuals, the create screen's did not. TypeScript treated them as unrelated types with the same name, which surfaced as a TS2719 error where the templates prop is passed between them. The backend sends seven fields (PostController::create), so the shared declaration follows the payload rather than the union of the two copies. --- .cursor/rules/laravel-patterns.mdc | 2 +- CLAUDE.md | 2 +- app/Ai/Agents/PostContentGenerator.php | 16 - app/Console/Commands/PostTemplates/Report.php | 101 ---- .../App/PostTemplateController.php | 137 ----- .../PostTemplate/ApplyPostTemplateRequest.php | 26 - .../PostTemplate/IndexPostTemplateRequest.php | 27 - .../Resources/App/PostTemplateResource.php | 31 -- app/Providers/AppServiceProvider.php | 3 - app/Services/Ai/TemplateContextResolver.php | 28 - .../PostTemplate/PostTemplateData.php | 58 -- app/Services/PostTemplate/Registry.php | 166 ------ .../TemplateNotFoundException.php | 15 - lang/ar/posts.php | 27 - lang/de/posts.php | 27 - lang/el/posts.php | 27 - lang/en/posts.php | 27 - lang/es/posts.php | 27 - lang/fr/posts.php | 27 - lang/it/posts.php | 27 - lang/ja/posts.php | 27 - lang/ko/posts.php | 27 - lang/nl/posts.php | 27 - lang/pl/posts.php | 27 - lang/pt-BR/posts.php | 27 - lang/ru/posts.php | 27 - lang/tr/posts.php | 27 - lang/uk/posts.php | 27 - lang/zh/posts.php | 27 - .../components/posts/create/AiPostWizard.vue | 11 +- resources/js/pages/posts/Create.vue | 32 +- resources/js/pages/posts/templates/Index.vue | 317 ----------- resources/js/types/index.d.ts | 15 + .../prompts/post_content/generator.blade.php | 19 - routes/app.php | 5 - templates/en/bluesky_post.php | 316 ----------- templates/en/facebook_post.php | 322 ----------- templates/en/facebook_story.php | 326 ----------- templates/en/instagram_carousel.php | 523 ------------------ templates/en/instagram_feed.php | 362 ------------ templates/en/instagram_story.php | 362 ------------ templates/en/linkedin_page_post.php | 342 ------------ templates/en/linkedin_post.php | 322 ----------- templates/en/mastodon_post.php | 322 ----------- templates/en/pinterest_pin.php | 306 ---------- templates/en/threads_post.php | 322 ----------- templates/en/x_post.php | 342 ------------ templates/es/bluesky_post.php | 316 ----------- templates/es/facebook_post.php | 322 ----------- templates/es/facebook_story.php | 326 ----------- templates/es/instagram_carousel.php | 523 ------------------ templates/es/instagram_feed.php | 362 ------------ templates/es/instagram_story.php | 362 ------------ templates/es/linkedin_page_post.php | 342 ------------ templates/es/linkedin_post.php | 322 ----------- templates/es/mastodon_post.php | 322 ----------- templates/es/pinterest_pin.php | 306 ---------- templates/es/threads_post.php | 322 ----------- templates/es/x_post.php | 342 ------------ templates/pt-BR/bluesky_post.php | 316 ----------- templates/pt-BR/facebook_post.php | 322 ----------- templates/pt-BR/facebook_story.php | 326 ----------- templates/pt-BR/instagram_carousel.php | 523 ------------------ templates/pt-BR/instagram_feed.php | 362 ------------ templates/pt-BR/instagram_story.php | 362 ------------ templates/pt-BR/linkedin_page_post.php | 342 ------------ templates/pt-BR/linkedin_post.php | 322 ----------- templates/pt-BR/mastodon_post.php | 322 ----------- templates/pt-BR/pinterest_pin.php | 306 ---------- templates/pt-BR/threads_post.php | 322 ----------- templates/pt-BR/x_post.php | 342 ------------ tests/Feature/PostTemplateControllerTest.php | 179 ------ .../Ai/Agents/PostContentGeneratorTest.php | 27 - tests/Unit/PostTemplates/IntegrityTest.php | 184 ------ tests/Unit/PostTemplates/RegistryTest.php | 102 ---- .../Ai/TemplateContextResolverTest.php | 35 -- 76 files changed, 22 insertions(+), 14449 deletions(-) delete mode 100644 app/Console/Commands/PostTemplates/Report.php delete mode 100644 app/Http/Controllers/App/PostTemplateController.php delete mode 100644 app/Http/Requests/App/PostTemplate/ApplyPostTemplateRequest.php delete mode 100644 app/Http/Requests/App/PostTemplate/IndexPostTemplateRequest.php delete mode 100644 app/Http/Resources/App/PostTemplateResource.php delete mode 100644 app/Services/Ai/TemplateContextResolver.php delete mode 100644 app/Services/PostTemplate/PostTemplateData.php delete mode 100644 app/Services/PostTemplate/Registry.php delete mode 100644 app/Services/PostTemplate/TemplateNotFoundException.php delete mode 100644 resources/js/pages/posts/templates/Index.vue delete mode 100644 templates/en/bluesky_post.php delete mode 100644 templates/en/facebook_post.php delete mode 100644 templates/en/facebook_story.php delete mode 100644 templates/en/instagram_carousel.php delete mode 100644 templates/en/instagram_feed.php delete mode 100644 templates/en/instagram_story.php delete mode 100644 templates/en/linkedin_page_post.php delete mode 100644 templates/en/linkedin_post.php delete mode 100644 templates/en/mastodon_post.php delete mode 100644 templates/en/pinterest_pin.php delete mode 100644 templates/en/threads_post.php delete mode 100644 templates/en/x_post.php delete mode 100644 templates/es/bluesky_post.php delete mode 100644 templates/es/facebook_post.php delete mode 100644 templates/es/facebook_story.php delete mode 100644 templates/es/instagram_carousel.php delete mode 100644 templates/es/instagram_feed.php delete mode 100644 templates/es/instagram_story.php delete mode 100644 templates/es/linkedin_page_post.php delete mode 100644 templates/es/linkedin_post.php delete mode 100644 templates/es/mastodon_post.php delete mode 100644 templates/es/pinterest_pin.php delete mode 100644 templates/es/threads_post.php delete mode 100644 templates/es/x_post.php delete mode 100644 templates/pt-BR/bluesky_post.php delete mode 100644 templates/pt-BR/facebook_post.php delete mode 100644 templates/pt-BR/facebook_story.php delete mode 100644 templates/pt-BR/instagram_carousel.php delete mode 100644 templates/pt-BR/instagram_feed.php delete mode 100644 templates/pt-BR/instagram_story.php delete mode 100644 templates/pt-BR/linkedin_page_post.php delete mode 100644 templates/pt-BR/linkedin_post.php delete mode 100644 templates/pt-BR/mastodon_post.php delete mode 100644 templates/pt-BR/pinterest_pin.php delete mode 100644 templates/pt-BR/threads_post.php delete mode 100644 templates/pt-BR/x_post.php delete mode 100644 tests/Feature/PostTemplateControllerTest.php delete mode 100644 tests/Unit/PostTemplates/IntegrityTest.php delete mode 100644 tests/Unit/PostTemplates/RegistryTest.php delete mode 100644 tests/Unit/Services/Ai/TemplateContextResolverTest.php diff --git a/.cursor/rules/laravel-patterns.mdc b/.cursor/rules/laravel-patterns.mdc index 4c975c05..7ab09bc2 100644 --- a/.cursor/rules/laravel-patterns.mdc +++ b/.cursor/rules/laravel-patterns.mdc @@ -30,7 +30,7 @@ Validation rules always live in a dedicated `Illuminate\Foundation\Http\FormRequ NEVER call `$request->validate([...])` inline in the controller. -Naming: `Request.php` — `StorePostRequest`, `ApplyPostTemplateRequest`, `IndexPostTemplateRequest`. +Naming: `Request.php` — `StorePostRequest`, `UpdatePostRequest`, `LinkPreviewRequest`. ```php // BAD diff --git a/CLAUDE.md b/CLAUDE.md index c2123195..0279f606 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -278,7 +278,7 @@ ## Form Validation ## Backend Validation - Validation rules always live in a dedicated `Illuminate\Foundation\Http\FormRequest` subclass under `app/Http/Requests/App//`. Controller actions must type-hint the FormRequest as the parameter — NEVER call `$request->validate([...])` inline in the controller. -- Naming: `Request.php` (e.g. `StorePostRequest`, `ApplyPostTemplateRequest`, `IndexPostTemplateRequest`). +- Naming: `Request.php` (e.g. `StorePostRequest`, `UpdatePostRequest`, `LinkPreviewRequest`). ## Per-Platform Post Meta (`PostPlatform.meta`) diff --git a/app/Ai/Agents/PostContentGenerator.php b/app/Ai/Agents/PostContentGenerator.php index 008922f3..cef49f97 100644 --- a/app/Ai/Agents/PostContentGenerator.php +++ b/app/Ai/Agents/PostContentGenerator.php @@ -9,7 +9,6 @@ use App\Ai\Templates\TemplateContext; use App\Enums\Ai\GeneratorFormat; use App\Models\Workspace; -use App\Services\Ai\TemplateContextResolver; use Illuminate\Contracts\JsonSchema\JsonSchema; use Laravel\Ai\Attributes\Temperature; use Laravel\Ai\Contracts\Agent; @@ -35,20 +34,6 @@ public function __construct( public function instructions(): string { - $examples = []; - - if ($this->platformContext !== null) { - $resolver = app(TemplateContextResolver::class); - $examples = $resolver->relevantFor($this->platformContext, 2) - ->map(fn ($t) => [ - 'name' => $t->name, - 'description' => $t->description, - 'content' => $t->content, - 'slides' => $t->slides, - ]) - ->all(); - } - $budget = $this->platformCopyBudget($this->platformContext); if ($this->template?->style()->isTweetCard()) { @@ -68,7 +53,6 @@ public function instructions(): string 'current_content' => $this->currentContent, 'format' => $this->format->value, 'slide_count' => $this->slideCount, - 'examples' => $examples, 'hard_max_chars' => data_get($budget, 'hard_max_chars'), 'target_chars' => data_get($budget, 'target_chars'), 'platform_label' => data_get($budget, 'platform_label'), diff --git a/app/Console/Commands/PostTemplates/Report.php b/app/Console/Commands/PostTemplates/Report.php deleted file mode 100644 index d98a084a..00000000 --- a/app/Console/Commands/PostTemplates/Report.php +++ /dev/null @@ -1,101 +0,0 @@ -allLocales()->all(); - $platforms = $registry->allPlatforms()->all(); - $defaultLocale = Registry::DEFAULT_LOCALE; - - if (! in_array($defaultLocale, $locales, true)) { - $this->error("Default locale '{$defaultLocale}' folder not found at templates/{$defaultLocale}/"); - - return self::FAILURE; - } - - $this->info('Post Template Status'); - $this->line('Locales: '.implode(', ', $locales)); - $this->line('Source: '.$defaultLocale); - $this->newLine(); - - $totalTemplates = 0; - $totalDrift = 0; - - foreach ($platforms as $platform) { - $this->line("Platform: {$platform}"); - - $sourceTemplates = $this->loadFile($defaultLocale, $platform); - $sourceCount = count($sourceTemplates); - $sourceSlugs = collect($sourceTemplates)->pluck('slug')->all(); - $totalTemplates += $sourceCount; - - foreach ($locales as $locale) { - $rows = $this->loadFile($locale, $platform); - $count = count($rows); - $localeSlugs = collect($rows)->pluck('slug')->all(); - $missing = array_diff($sourceSlugs, $localeSlugs); - $extra = array_diff($localeSlugs, $sourceSlugs); - - if ($locale === $defaultLocale) { - $this->line(" {$locale}: {$count} templates"); - - continue; - } - - if ($count === $sourceCount && empty($missing) && empty($extra)) { - $this->line(" {$locale}: {$count} templates "); - - continue; - } - - $this->line(" {$locale}: {$count} templates "); - - if ($missing) { - $totalDrift += count($missing); - $this->line(' missing: '.implode(', ', $missing)); - } - - if ($extra) { - $totalDrift += count($extra); - $this->line(' extra (not in source): '.implode(', ', $extra)); - } - } - - $this->newLine(); - } - - $this->info("Total source templates: {$totalTemplates} across ".count($platforms).' platforms × '.count($locales).' locales'); - - if ($totalDrift > 0) { - $this->warn("{$totalDrift} translation gaps found. Run `php artisan test --filter=PostTemplates/Integrity` for full diagnosis."); - - return self::SUCCESS; - } - - $this->info('All locales are in sync with the source.'); - - return self::SUCCESS; - } - - /** - * @return array> - */ - private function loadFile(string $locale, string $platform): array - { - $path = base_path("templates/{$locale}/{$platform}.php"); - - return is_file($path) ? require $path : []; - } -} diff --git a/app/Http/Controllers/App/PostTemplateController.php b/app/Http/Controllers/App/PostTemplateController.php deleted file mode 100644 index 18ce4cdc..00000000 --- a/app/Http/Controllers/App/PostTemplateController.php +++ /dev/null @@ -1,137 +0,0 @@ -registry->paginate( - locale: app()->getLocale(), - platform: $request->input('platform'), - search: $request->input('search'), - perPage: (int) config('app.pagination.default'), - page: (int) $request->input('page', 1), - path: $request->url(), - query: $request->query(), - ); - - return Inertia::render('posts/templates/Index', [ - 'templates' => Inertia::scroll(fn () => PostTemplateResource::collection($paginator)), - 'filters' => [ - 'search' => $request->input('search', ''), - 'platform' => $request->input('platform', ''), - ], - 'date' => $request->input('date'), - ]); - } - - public function apply(ApplyPostTemplateRequest $request, string $slug, TemplateImageGenerator $generator): JsonResponse - { - $workspace = $request->user()->currentWorkspace; - - $this->authorize('createPost', $workspace); - - $template = $this->registry->find($slug, app()->getLocale()); - - $socialAccountId = $request->input('social_account_id'); - $socialAccount = null; - - if ($socialAccountId) { - $socialAccount = SocialAccount::where('id', $socialAccountId) - ->where('workspace_id', $workspace->id) - ->first(); - - abort_if($socialAccount === null, Response::HTTP_FORBIDDEN); - } - - $content = $this->interpolate($template->content, $workspace); - - $media = []; - - if ($socialAccount && $template->slides) { - foreach ($template->slides as $slide) { - $rendered = $generator->render( - workspace: $workspace, - socialAccount: $socialAccount, - title: $this->interpolate(data_get($slide, 'title', ''), $workspace), - body: $this->interpolate(data_get($slide, 'body', ''), $workspace), - imageKeywords: data_get($slide, 'image_keywords', []), - ); - - if ($rendered) { - $mediaItem = $this->createMediaItem($workspace, $rendered['path']); - $media[] = $mediaItem; - } - } - } - - $post = CreatePost::execute($workspace, $request->user(), [ - 'content' => $content, - 'media' => $media, - 'date' => $request->input('date'), - 'created_via' => CreatedVia::Web, - ]); - - return response()->json([ - 'post_id' => $post->id, - 'redirect_url' => route('app.posts.edit', $post), - ]); - } - - private function interpolate(string $text, Workspace $workspace): string - { - return strtr($text, [ - '{{brand_name}}' => $workspace->name ?? '', - '{{brand_description}}' => $workspace->brand_description ?? '', - ]); - } - - /** - * Create a Media record for a generated image and return it as an array. - * - * @return array - */ - private function createMediaItem(Workspace $workspace, string $path): array - { - // Use the relationship (not `mediable_type = Workspace::class`) so - // the morph map alias `'workspace'` is persisted instead of the FQCN. - $media = $workspace->media()->create([ - 'collection' => 'ai-generated', - 'type' => MediaType::Image, - 'path' => $path, - 'original_filename' => basename($path), - 'mime_type' => 'image/webp', - 'size' => Storage::size($path), - 'order' => 0, - ]); - - return [ - 'id' => $media->id, - 'path' => $media->path, - 'url' => $media->url, - 'type' => 'image', - 'mime_type' => 'image/webp', - ]; - } -} diff --git a/app/Http/Requests/App/PostTemplate/ApplyPostTemplateRequest.php b/app/Http/Requests/App/PostTemplate/ApplyPostTemplateRequest.php deleted file mode 100644 index 31542e73..00000000 --- a/app/Http/Requests/App/PostTemplate/ApplyPostTemplateRequest.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ - public function rules(): array - { - return [ - 'social_account_id' => ['nullable', 'uuid'], - 'date' => ['nullable', 'date_format:Y-m-d'], - ]; - } -} diff --git a/app/Http/Requests/App/PostTemplate/IndexPostTemplateRequest.php b/app/Http/Requests/App/PostTemplate/IndexPostTemplateRequest.php deleted file mode 100644 index 8a24cd39..00000000 --- a/app/Http/Requests/App/PostTemplate/IndexPostTemplateRequest.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - public function rules(): array - { - return [ - 'platform' => ['nullable', 'string'], - 'search' => ['nullable', 'string', 'max:120'], - 'date' => ['nullable', 'date_format:Y-m-d'], - ]; - } -} diff --git a/app/Http/Resources/App/PostTemplateResource.php b/app/Http/Resources/App/PostTemplateResource.php deleted file mode 100644 index 7d88940f..00000000 --- a/app/Http/Resources/App/PostTemplateResource.php +++ /dev/null @@ -1,31 +0,0 @@ - */ - public function toArray(Request $request): array - { - /** @var PostTemplateData $template */ - $template = $this->resource; - - return [ - 'slug' => $template->slug, - 'name' => $template->name, - 'description' => $template->description, - 'category' => $template->category, - 'platform' => $template->platform, - 'content' => $template->content, - 'slides' => $template->slides, - 'image_count' => $template->imageCount, - 'image_keywords' => $template->imageKeywords, - ]; - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 2f18e906..12719148 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -30,7 +30,6 @@ use App\Models\WorkspaceLabel; use App\Models\WorkspaceSignature; use App\Services\PostHogService; -use App\Services\PostTemplate\Registry as PostTemplateRegistry; use App\Socialite\DiscordProvider; use App\Socialite\InstagramProvider; use App\Socialite\LinkedInPageExtendSocialite; @@ -69,8 +68,6 @@ class AppServiceProvider extends ServiceProvider */ public function register(): void { - $this->app->singleton(PostTemplateRegistry::class); - if ($this->app->environment('local') && class_exists(\Laravel\Telescope\TelescopeServiceProvider::class)) { $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class); $this->app->register(TelescopeServiceProvider::class); diff --git a/app/Services/Ai/TemplateContextResolver.php b/app/Services/Ai/TemplateContextResolver.php deleted file mode 100644 index 18a60c6a..00000000 --- a/app/Services/Ai/TemplateContextResolver.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - public function relevantFor(?string $platform, int $limit = 3): Collection - { - return $this->registry - ->all(Registry::DEFAULT_LOCALE, $platform) - ->shuffle() - ->take($limit) - ->values(); - } -} diff --git a/app/Services/PostTemplate/PostTemplateData.php b/app/Services/PostTemplate/PostTemplateData.php deleted file mode 100644 index a910b0a5..00000000 --- a/app/Services/PostTemplate/PostTemplateData.php +++ /dev/null @@ -1,58 +0,0 @@ -|null $imageKeywords - * @param array}>|null $slides - */ - public function __construct( - public string $slug, - public string $platform, - public string $category, - public string $name, - public ?string $description, - public string $content, - public int $imageCount, - public ?array $imageKeywords, - public ?array $slides, - ) {} - - /** - * @param array $data - */ - public static function fromArray(array $data, string $platform): self - { - return new self( - slug: (string) data_get($data, 'slug'), - platform: $platform, - category: (string) data_get($data, 'category'), - name: (string) data_get($data, 'name'), - description: data_get($data, 'description'), - content: (string) data_get($data, 'content'), - imageCount: (int) data_get($data, 'image_count', 0), - imageKeywords: data_get($data, 'image_keywords'), - slides: data_get($data, 'slides'), - ); - } - - /** @return array */ - public function toArray(): array - { - return [ - 'slug' => $this->slug, - 'platform' => $this->platform, - 'category' => $this->category, - 'name' => $this->name, - 'description' => $this->description, - 'content' => $this->content, - 'image_count' => $this->imageCount, - 'image_keywords' => $this->imageKeywords, - 'slides' => $this->slides, - ]; - } -} diff --git a/app/Services/PostTemplate/Registry.php b/app/Services/PostTemplate/Registry.php deleted file mode 100644 index d94719f7..00000000 --- a/app/Services/PostTemplate/Registry.php +++ /dev/null @@ -1,166 +0,0 @@ -> */ - private array $cache = []; - - /** - * Load every template for the given locale, optionally filtered by platform. - * Falls back to the default locale when the requested locale folder or file - * is missing — guarantees the templates page always renders something. - * - * @return Collection - */ - public function all(string $locale, ?string $platform = null): Collection - { - $key = "{$locale}:".($platform ?? '*'); - - return $this->cache[$key] ??= $this->loadFromDisk($locale, $platform); - } - - /** - * Find a template by slug in the given locale, falling back to the default - * locale when the slug exists in EN but not in the requested locale. - */ - public function find(string $slug, string $locale): PostTemplateData - { - $template = $this->all($locale)->firstWhere('slug', $slug); - - if ($template === null && $locale !== self::DEFAULT_LOCALE) { - $template = $this->all(self::DEFAULT_LOCALE)->firstWhere('slug', $slug); - } - - return $template ?? throw new TemplateNotFoundException($slug); - } - - /** - * @param array $query - */ - public function paginate( - string $locale, - ?string $platform = null, - ?string $search = null, - int $perPage = 20, - int $page = 1, - ?string $path = null, - array $query = [], - ): LengthAwarePaginator { - $templates = $this->all($locale, $platform) - ->when($search, fn (Collection $c) => $c->filter( - fn (PostTemplateData $t) => str_contains(mb_strtolower($t->name), mb_strtolower($search)) - || str_contains(mb_strtolower($t->description ?? ''), mb_strtolower($search)) - )) - ->values(); - - return new LengthAwarePaginator( - $templates->forPage($page, $perPage)->values(), - $templates->count(), - $perPage, - $page, - array_filter([ - 'path' => $path, - 'query' => $query !== [] ? $query : null, - ]), - ); - } - - /** - * @return Collection - */ - public function allSlugs(): Collection - { - return $this->all(self::DEFAULT_LOCALE) - ->pluck('slug') - ->unique() - ->values(); - } - - /** - * Filenames (without `.php`) under the default locale folder. - * - * @return Collection - */ - public function allPlatforms(): Collection - { - $files = glob($this->localePath(self::DEFAULT_LOCALE).'/*.php') ?: []; - - return collect($files) - ->map(fn (string $f) => basename($f, '.php')) - ->values(); - } - - /** - * Subdirectory names under templates/. - * - * @return Collection - */ - public function allLocales(): Collection - { - $dirs = glob(base_path('templates').'/*', GLOB_ONLYDIR) ?: []; - - return collect($dirs) - ->map(fn (string $d) => basename($d)) - ->values(); - } - - /** - * Forget the in-memory cache. Used by tests; not needed at runtime. - */ - public function flush(): void - { - $this->cache = []; - } - - /** - * @return Collection - */ - private function loadFromDisk(string $locale, ?string $platform): Collection - { - $localePath = $this->localePath($locale); - - if (! is_dir($localePath)) { - return $locale === self::DEFAULT_LOCALE - ? collect() - : $this->loadFromDisk(self::DEFAULT_LOCALE, $platform); - } - - $files = $platform !== null - ? array_filter([$localePath."/{$platform}.php"], 'is_file') - : (glob($localePath.'/*.php') ?: []); - - if (empty($files) && $locale !== self::DEFAULT_LOCALE) { - return $this->loadFromDisk(self::DEFAULT_LOCALE, $platform); - } - - return collect($files) - ->flatMap(function (string $file): array { - $platformName = basename($file, '.php'); - $rows = require $file; - - if (! is_array($rows)) { - return []; - } - - return array_map( - fn (array $row) => PostTemplateData::fromArray($row, $platformName), - $rows, - ); - }) - ->values(); - } - - private function localePath(string $locale): string - { - return base_path("templates/{$locale}"); - } -} diff --git a/app/Services/PostTemplate/TemplateNotFoundException.php b/app/Services/PostTemplate/TemplateNotFoundException.php deleted file mode 100644 index b68afcb7..00000000 --- a/app/Services/PostTemplate/TemplateNotFoundException.php +++ /dev/null @@ -1,15 +0,0 @@ - 'صِف ما تريده وينشئ الذكاء الاصطناعي المحتوى من أجلك.', 'ai_configure_description' => 'اختر تنسيقًا وصِف المنشور الذي تريد إنشاءه.', 'ai_pick_template_description' => 'اختر نمطًا لمنشورك المُنشأ بالذكاء الاصطناعي.', - 'template_title' => 'استخدام قالب', - 'template_description' => 'اختر من قوالبنا المنسّقة وخصّصها.', 'coming_soon' => 'قريبًا', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'اختر قالبًا', - 'browser_description' => 'ابدأ من قالب منسّق وكيّفه.', - 'search_placeholder' => 'البحث في القوالب…', - 'no_search_results' => 'لا توجد قوالب مطابقة لبحثك', - 'try_different_search' => 'جرّب كلمة مختلفة أو امسح البحث.', - 'slides_count' => '{count} شرائح|{count} شريحة|{count} شريحتان|{count} شرائح|{count} شريحة|{count} شريحة', - 'all_platforms' => 'جميع المنصات', - 'platform_search_placeholder' => 'البحث عن منصة…', - 'no_platform_match' => 'لا توجد منصة مطابقة.', - 'use_this' => 'استخدام هذا القالب', - 'no_templates' => 'لا توجد قوالب متاحة.', - 'applying' => 'جارٍ تطبيق القالب…', - 'category' => [ - 'product_launch' => 'إطلاق منتج', - 'promotion' => 'ترويج', - 'educational' => 'تعليمي', - 'behind_the_scenes' => 'خلف الكواليس', - 'testimonial' => 'شهادة', - 'industry_tip' => 'نصيحة في المجال', - 'event' => 'فعالية', - 'engagement' => 'تفاعل', - ], - ], ]; diff --git a/lang/de/posts.php b/lang/de/posts.php index bd79bfa3..a082a28d 100644 --- a/lang/de/posts.php +++ b/lang/de/posts.php @@ -602,8 +602,6 @@ 'ai_description' => 'Beschreibe, was du möchtest, und die KI generiert den Inhalt für dich.', 'ai_configure_description' => 'Wähle ein Format und beschreibe den Beitrag, den du erstellen möchtest.', 'ai_pick_template_description' => 'Wähle einen Stil für deinen KI-generierten Beitrag.', - 'template_title' => 'Vorlage verwenden', - 'template_description' => 'Wähle aus unseren kuratierten Vorlagen und passe sie an.', 'coming_soon' => 'Demnächst verfügbar', 'preview' => [ @@ -671,29 +669,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Wähle eine Vorlage', - 'browser_description' => 'Beginne mit einer kuratierten Vorlage und passe sie an.', - 'search_placeholder' => 'Vorlagen suchen…', - 'no_search_results' => 'Keine Vorlagen passen zu deiner Suche', - 'try_different_search' => 'Versuche ein anderes Stichwort oder setze die Suche zurück.', - 'slides_count' => '{count} Slide|{count} Slides', - 'all_platforms' => 'Alle Plattformen', - 'platform_search_placeholder' => 'Plattform suchen…', - 'no_platform_match' => 'Keine passende Plattform.', - 'use_this' => 'Diese Vorlage verwenden', - 'no_templates' => 'Keine Vorlagen verfügbar.', - 'applying' => 'Vorlage wird angewendet…', - 'category' => [ - 'product_launch' => 'Produkteinführung', - 'promotion' => 'Aktion', - 'educational' => 'Lehrreich', - 'behind_the_scenes' => 'Hinter den Kulissen', - 'testimonial' => 'Kundenstimme', - 'industry_tip' => 'Branchentipp', - 'event' => 'Event', - 'engagement' => 'Engagement', - ], - ], ]; diff --git a/lang/el/posts.php b/lang/el/posts.php index 04d8992e..a4592be2 100644 --- a/lang/el/posts.php +++ b/lang/el/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Περιγράψτε τι θέλετε και το AI δημιουργεί το περιεχόμενο για εσάς.', 'ai_configure_description' => 'Επιλέξτε μια μορφή και περιγράψτε τη δημοσίευση που θέλετε να δημιουργήσετε.', 'ai_pick_template_description' => 'Επιλέξτε ένα στυλ για τη δημοσίευσή σας που δημιουργείται από AI.', - 'template_title' => 'Χρήση προτύπου', - 'template_description' => 'Επιλέξτε από τα επιμελημένα πρότυπά μας και προσαρμόστε.', 'coming_soon' => 'Έρχεται σύντομα', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Επιλέξτε ένα πρότυπο', - 'browser_description' => 'Ξεκινήστε από ένα επιμελημένο πρότυπο και προσαρμόστε το.', - 'search_placeholder' => 'Αναζήτηση προτύπων…', - 'no_search_results' => 'Κανένα πρότυπο δεν ταιριάζει με την αναζήτησή σας', - 'try_different_search' => 'Δοκιμάστε διαφορετική λέξη-κλειδί ή καθαρίστε την αναζήτηση.', - 'slides_count' => '{count} slide|{count} slides', - 'all_platforms' => 'Όλες οι πλατφόρμες', - 'platform_search_placeholder' => 'Αναζήτηση πλατφόρμας…', - 'no_platform_match' => 'Καμία πλατφόρμα δεν ταιριάζει.', - 'use_this' => 'Χρήση αυτού του προτύπου', - 'no_templates' => 'Δεν υπάρχουν διαθέσιμα πρότυπα.', - 'applying' => 'Εφαρμογή προτύπου…', - 'category' => [ - 'product_launch' => 'Κυκλοφορία προϊόντος', - 'promotion' => 'Προώθηση', - 'educational' => 'Εκπαιδευτικό', - 'behind_the_scenes' => 'Παρασκήνια', - 'testimonial' => 'Μαρτυρία', - 'industry_tip' => 'Συμβουλή του κλάδου', - 'event' => 'Εκδήλωση', - 'engagement' => 'Αλληλεπίδραση', - ], - ], ]; diff --git a/lang/en/posts.php b/lang/en/posts.php index 4ce09e42..ffdf6cec 100644 --- a/lang/en/posts.php +++ b/lang/en/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Describe what you want and AI generates the content for you.', 'ai_configure_description' => 'Pick a format and describe the post you want to create.', 'ai_pick_template_description' => 'Choose a style for your AI-generated post.', - 'template_title' => 'Use a template', - 'template_description' => 'Pick from our curated templates and customize.', 'coming_soon' => 'Coming soon', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Choose a template', - 'browser_description' => 'Start from a curated template and adapt it.', - 'search_placeholder' => 'Search templates…', - 'no_search_results' => 'No templates match your search', - 'try_different_search' => 'Try a different keyword or clear the search.', - 'slides_count' => '{count} slide|{count} slides', - 'all_platforms' => 'All platforms', - 'platform_search_placeholder' => 'Search platform…', - 'no_platform_match' => 'No platform matches.', - 'use_this' => 'Use this template', - 'no_templates' => 'No templates available.', - 'applying' => 'Applying template…', - 'category' => [ - 'product_launch' => 'Product launch', - 'promotion' => 'Promotion', - 'educational' => 'Educational', - 'behind_the_scenes' => 'Behind the scenes', - 'testimonial' => 'Testimonial', - 'industry_tip' => 'Industry tip', - 'event' => 'Event', - 'engagement' => 'Engagement', - ], - ], ]; diff --git a/lang/es/posts.php b/lang/es/posts.php index 957d4d1a..566e78ec 100644 --- a/lang/es/posts.php +++ b/lang/es/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Describe lo que quieres y la IA genera el contenido por ti.', 'ai_configure_description' => 'Elige un formato y describe el post que quieres crear.', 'ai_pick_template_description' => 'Elige un estilo para tu post generado por IA.', - 'template_title' => 'Usar una plantilla', - 'template_description' => 'Elige una de nuestras plantillas y personalízala.', 'preview' => [ 'image_title' => 'Título de la imagen', @@ -670,29 +668,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Elige una plantilla', - 'browser_description' => 'Comienza con una plantilla curada y adáptala.', - 'search_placeholder' => 'Buscar plantillas…', - 'no_search_results' => 'Ninguna plantilla coincide con tu búsqueda', - 'try_different_search' => 'Prueba otra palabra clave o limpia la búsqueda.', - 'slides_count' => '{count} slide|{count} slides', - 'all_platforms' => 'Todas las plataformas', - 'platform_search_placeholder' => 'Buscar plataforma…', - 'no_platform_match' => 'Ninguna plataforma coincide.', - 'use_this' => 'Usar esta plantilla', - 'no_templates' => 'No hay plantillas disponibles.', - 'applying' => 'Aplicando plantilla…', - 'category' => [ - 'product_launch' => 'Lanzamiento de producto', - 'promotion' => 'Promoción', - 'educational' => 'Educativo', - 'behind_the_scenes' => 'Detrás de cámaras', - 'testimonial' => 'Testimonio', - 'industry_tip' => 'Consejo del sector', - 'event' => 'Evento', - 'engagement' => 'Interacción', - ], - ], ]; diff --git a/lang/fr/posts.php b/lang/fr/posts.php index 1983643a..b246551f 100644 --- a/lang/fr/posts.php +++ b/lang/fr/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Décrivez ce que vous voulez et l\'IA génère le contenu pour vous.', 'ai_configure_description' => 'Choisissez un format et décrivez la publication que vous souhaitez créer.', 'ai_pick_template_description' => 'Choisissez un style pour votre publication générée par l\'IA.', - 'template_title' => 'Utiliser un modèle', - 'template_description' => 'Choisissez parmi nos modèles sélectionnés et personnalisez.', 'coming_soon' => 'Bientôt disponible', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Choisissez un modèle', - 'browser_description' => 'Partez d\'un modèle sélectionné et adaptez-le.', - 'search_placeholder' => 'Rechercher des modèles…', - 'no_search_results' => 'Aucun modèle ne correspond à votre recherche', - 'try_different_search' => 'Essayez un autre mot-clé ou effacez la recherche.', - 'slides_count' => '{count} diapositive|{count} diapositives', - 'all_platforms' => 'Toutes les plateformes', - 'platform_search_placeholder' => 'Rechercher une plateforme…', - 'no_platform_match' => 'Aucune plateforme ne correspond.', - 'use_this' => 'Utiliser ce modèle', - 'no_templates' => 'Aucun modèle disponible.', - 'applying' => 'Application du modèle…', - 'category' => [ - 'product_launch' => 'Lancement de produit', - 'promotion' => 'Promotion', - 'educational' => 'Éducatif', - 'behind_the_scenes' => 'Coulisses', - 'testimonial' => 'Témoignage', - 'industry_tip' => 'Astuce du secteur', - 'event' => 'Événement', - 'engagement' => 'Engagement', - ], - ], ]; diff --git a/lang/it/posts.php b/lang/it/posts.php index 6460e6cb..8bb0645e 100644 --- a/lang/it/posts.php +++ b/lang/it/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Descrivi ciò che vuoi e l\'IA genera il contenuto per te.', 'ai_configure_description' => 'Scegli un formato e descrivi il post che vuoi creare.', 'ai_pick_template_description' => 'Scegli uno stile per il tuo post generato dall\'IA.', - 'template_title' => 'Usa un modello', - 'template_description' => 'Scegli tra i nostri modelli curati e personalizza.', 'coming_soon' => 'Prossimamente', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Scegli un modello', - 'browser_description' => 'Parti da un modello curato e adattalo.', - 'search_placeholder' => 'Cerca modelli…', - 'no_search_results' => 'Nessun modello corrisponde alla ricerca', - 'try_different_search' => 'Prova con un\'altra parola chiave o cancella la ricerca.', - 'slides_count' => '{count} slide|{count} slide', - 'all_platforms' => 'Tutte le piattaforme', - 'platform_search_placeholder' => 'Cerca piattaforma…', - 'no_platform_match' => 'Nessuna piattaforma corrisponde.', - 'use_this' => 'Usa questo modello', - 'no_templates' => 'Nessun modello disponibile.', - 'applying' => 'Applicazione del modello…', - 'category' => [ - 'product_launch' => 'Lancio prodotto', - 'promotion' => 'Promozione', - 'educational' => 'Educativo', - 'behind_the_scenes' => 'Dietro le quinte', - 'testimonial' => 'Testimonianza', - 'industry_tip' => 'Consiglio di settore', - 'event' => 'Evento', - 'engagement' => 'Coinvolgimento', - ], - ], ]; diff --git a/lang/ja/posts.php b/lang/ja/posts.php index cdae132c..f0092fb3 100644 --- a/lang/ja/posts.php +++ b/lang/ja/posts.php @@ -600,8 +600,6 @@ 'ai_description' => '作りたい内容を説明すると、AI がコンテンツを生成します。', 'ai_configure_description' => '形式を選んで、作成したい投稿を説明してください。', 'ai_pick_template_description' => 'AI が生成する投稿のスタイルを選んでください。', - 'template_title' => 'テンプレートを使用', - 'template_description' => '厳選されたテンプレートから選んでカスタマイズします。', 'coming_soon' => '近日公開', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'テンプレートを選択', - 'browser_description' => '厳選されたテンプレートから始めてアレンジしましょう。', - 'search_placeholder' => 'テンプレートを検索…', - 'no_search_results' => '検索に一致するテンプレートがありません', - 'try_different_search' => '別のキーワードを試すか、検索をクリアしてください。', - 'slides_count' => '{count} 枚のスライド|{count} 枚のスライド', - 'all_platforms' => 'すべてのプラットフォーム', - 'platform_search_placeholder' => 'プラットフォームを検索…', - 'no_platform_match' => '一致するプラットフォームがありません。', - 'use_this' => 'このテンプレートを使用', - 'no_templates' => '利用できるテンプレートがありません。', - 'applying' => 'テンプレートを適用中…', - 'category' => [ - 'product_launch' => '製品ローンチ', - 'promotion' => 'プロモーション', - 'educational' => '教育', - 'behind_the_scenes' => '舞台裏', - 'testimonial' => 'お客様の声', - 'industry_tip' => '業界のヒント', - 'event' => 'イベント', - 'engagement' => 'エンゲージメント', - ], - ], ]; diff --git a/lang/ko/posts.php b/lang/ko/posts.php index ee4a20fa..2ec32c9a 100644 --- a/lang/ko/posts.php +++ b/lang/ko/posts.php @@ -600,8 +600,6 @@ 'ai_description' => '원하는 것을 설명하면 AI가 콘텐츠를 생성해 드립니다.', 'ai_configure_description' => '형식을 선택하고 만들고 싶은 게시물을 설명하세요.', 'ai_pick_template_description' => 'AI가 생성할 게시물의 스타일을 선택하세요.', - 'template_title' => '템플릿 사용', - 'template_description' => '엄선된 템플릿에서 선택하고 맞춤 설정하세요.', 'coming_soon' => '곧 제공 예정', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => '템플릿 선택', - 'browser_description' => '엄선된 템플릿에서 시작하여 맞춤 설정하세요.', - 'search_placeholder' => '템플릿 검색…', - 'no_search_results' => '검색과 일치하는 템플릿이 없습니다', - 'try_different_search' => '다른 키워드로 시도하거나 검색을 지우세요.', - 'slides_count' => '슬라이드 {count}장|슬라이드 {count}장', - 'all_platforms' => '모든 플랫폼', - 'platform_search_placeholder' => '플랫폼 검색…', - 'no_platform_match' => '일치하는 플랫폼이 없습니다.', - 'use_this' => '이 템플릿 사용', - 'no_templates' => '사용 가능한 템플릿이 없습니다.', - 'applying' => '템플릿을 적용하는 중…', - 'category' => [ - 'product_launch' => '제품 출시', - 'promotion' => '프로모션', - 'educational' => '교육', - 'behind_the_scenes' => '비하인드', - 'testimonial' => '고객 후기', - 'industry_tip' => '업계 팁', - 'event' => '이벤트', - 'engagement' => '참여', - ], - ], ]; diff --git a/lang/nl/posts.php b/lang/nl/posts.php index d9ef7962..2e06df70 100644 --- a/lang/nl/posts.php +++ b/lang/nl/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Beschrijf wat je wilt en AI genereert de inhoud voor je.', 'ai_configure_description' => 'Kies een formaat en beschrijf de post die je wilt maken.', 'ai_pick_template_description' => 'Kies een stijl voor je AI-gegenereerde post.', - 'template_title' => 'Een sjabloon gebruiken', - 'template_description' => 'Kies uit onze samengestelde sjablonen en pas ze aan.', 'coming_soon' => 'Binnenkort beschikbaar', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Kies een sjabloon', - 'browser_description' => 'Begin met een samengesteld sjabloon en pas het aan.', - 'search_placeholder' => 'Sjablonen zoeken…', - 'no_search_results' => 'Geen sjablonen komen overeen met je zoekopdracht', - 'try_different_search' => 'Probeer een ander zoekwoord of wis de zoekopdracht.', - 'slides_count' => '{count} slide|{count} slides', - 'all_platforms' => 'Alle platforms', - 'platform_search_placeholder' => 'Platform zoeken…', - 'no_platform_match' => 'Geen platform komt overeen.', - 'use_this' => 'Gebruik dit sjabloon', - 'no_templates' => 'Geen sjablonen beschikbaar.', - 'applying' => 'Sjabloon toepassen…', - 'category' => [ - 'product_launch' => 'Productlancering', - 'promotion' => 'Promotie', - 'educational' => 'Educatief', - 'behind_the_scenes' => 'Achter de schermen', - 'testimonial' => 'Getuigenis', - 'industry_tip' => 'Brancheadvies', - 'event' => 'Evenement', - 'engagement' => 'Betrokkenheid', - ], - ], ]; diff --git a/lang/pl/posts.php b/lang/pl/posts.php index 3f9732a8..d47721c0 100644 --- a/lang/pl/posts.php +++ b/lang/pl/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Opisz, czego chcesz, a AI wygeneruje treść za Ciebie.', 'ai_configure_description' => 'Wybierz format i opisz post, który chcesz utworzyć.', 'ai_pick_template_description' => 'Wybierz styl dla swojego posta wygenerowanego przez AI.', - 'template_title' => 'Użyj szablonu', - 'template_description' => 'Wybierz jeden z naszych wyselekcjonowanych szablonów i dostosuj go.', 'coming_soon' => 'Wkrótce', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Wybierz szablon', - 'browser_description' => 'Zacznij od wyselekcjonowanego szablonu i dostosuj go.', - 'search_placeholder' => 'Szukaj szablonów…', - 'no_search_results' => 'Brak szablonów pasujących do wyszukiwania', - 'try_different_search' => 'Spróbuj innego słowa kluczowego lub wyczyść wyszukiwanie.', - 'slides_count' => '{count} slajd|{count} slajdy|{count} slajdów', - 'all_platforms' => 'Wszystkie platformy', - 'platform_search_placeholder' => 'Szukaj platformy…', - 'no_platform_match' => 'Brak pasujących platform.', - 'use_this' => 'Użyj tego szablonu', - 'no_templates' => 'Brak dostępnych szablonów.', - 'applying' => 'Stosowanie szablonu…', - 'category' => [ - 'product_launch' => 'Premiera produktu', - 'promotion' => 'Promocja', - 'educational' => 'Edukacyjny', - 'behind_the_scenes' => 'Za kulisami', - 'testimonial' => 'Opinia klienta', - 'industry_tip' => 'Wskazówka branżowa', - 'event' => 'Wydarzenie', - 'engagement' => 'Zaangażowanie', - ], - ], ]; diff --git a/lang/pt-BR/posts.php b/lang/pt-BR/posts.php index a13828d3..3e4c0a0e 100644 --- a/lang/pt-BR/posts.php +++ b/lang/pt-BR/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Descreva o que quer e a IA gera o conteúdo pra você.', 'ai_configure_description' => 'Escolha o formato e descreva o post que quer criar.', 'ai_pick_template_description' => 'Escolha um estilo para o seu post gerado por IA.', - 'template_title' => 'Usar um template', - 'template_description' => 'Escolha um dos nossos templates e personalize.', 'coming_soon' => 'Em breve', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Escolha um template', - 'browser_description' => 'Comece com um template pronto e adapte ao seu jeito.', - 'all_platforms' => 'Todas as plataformas', - 'platform_search_placeholder' => 'Buscar plataforma…', - 'no_platform_match' => 'Nenhuma plataforma corresponde.', - 'use_this' => 'Usar este template', - 'no_templates' => 'Nenhum template disponível.', - 'applying' => 'Aplicando template…', - 'search_placeholder' => 'Buscar templates…', - 'no_search_results' => 'Nenhum template encontrado', - 'try_different_search' => 'Tente outra palavra-chave ou limpe a busca.', - 'slides_count' => '{count} slide|{count} slides', - 'category' => [ - 'product_launch' => 'Lançamento de produto', - 'promotion' => 'Promoção', - 'educational' => 'Educacional', - 'behind_the_scenes' => 'Bastidores', - 'testimonial' => 'Depoimento', - 'industry_tip' => 'Dica do setor', - 'event' => 'Evento', - 'engagement' => 'Engajamento', - ], - ], ]; diff --git a/lang/ru/posts.php b/lang/ru/posts.php index 9787313b..19439375 100644 --- a/lang/ru/posts.php +++ b/lang/ru/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Опишите, что хотите, и ИИ сгенерирует контент за вас.', 'ai_configure_description' => 'Выберите формат и опишите пост, который хотите создать.', 'ai_pick_template_description' => 'Выберите стиль для вашего ИИ-поста.', - 'template_title' => 'Использовать шаблон', - 'template_description' => 'Выберите из наших готовых шаблонов и настройте.', 'coming_soon' => 'Скоро', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Выберите шаблон', - 'browser_description' => 'Начните с готового шаблона и адаптируйте его.', - 'search_placeholder' => 'Поиск шаблонов…', - 'no_search_results' => 'Нет шаблонов по вашему запросу', - 'try_different_search' => 'Попробуйте другое ключевое слово или очистите поиск.', - 'slides_count' => '{count} слайд|{count} слайда|{count} слайдов', - 'all_platforms' => 'Все платформы', - 'platform_search_placeholder' => 'Поиск платформы…', - 'no_platform_match' => 'Нет подходящих платформ.', - 'use_this' => 'Использовать этот шаблон', - 'no_templates' => 'Нет доступных шаблонов.', - 'applying' => 'Применяем шаблон…', - 'category' => [ - 'product_launch' => 'Запуск продукта', - 'promotion' => 'Акция', - 'educational' => 'Обучающее', - 'behind_the_scenes' => 'За кулисами', - 'testimonial' => 'Отзыв', - 'industry_tip' => 'Отраслевой совет', - 'event' => 'Событие', - 'engagement' => 'Вовлечённость', - ], - ], ]; diff --git a/lang/tr/posts.php b/lang/tr/posts.php index 5cb220c5..f19d6c8a 100644 --- a/lang/tr/posts.php +++ b/lang/tr/posts.php @@ -602,8 +602,6 @@ 'ai_description' => 'İstediğinizi açıklayın, AI içeriği sizin için oluştursun.', 'ai_configure_description' => 'Bir format seçin ve oluşturmak istediğiniz gönderiyi açıklayın.', 'ai_pick_template_description' => 'AI ile oluşturulan gönderiniz için bir stil seçin.', - 'template_title' => 'Bir şablon kullan', - 'template_description' => 'Özenle seçilmiş şablonlarımızdan birini seçin ve özelleştirin.', 'coming_soon' => 'Yakında', 'preview' => [ @@ -671,29 +669,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Bir şablon seçin', - 'browser_description' => 'Özenle seçilmiş bir şablondan başlayın ve uyarlayın.', - 'search_placeholder' => 'Şablon ara…', - 'no_search_results' => 'Aramanızla eşleşen şablon yok', - 'try_different_search' => 'Farklı bir anahtar kelime deneyin veya aramayı temizleyin.', - 'slides_count' => '{count} slayt|{count} slayt', - 'all_platforms' => 'Tüm platformlar', - 'platform_search_placeholder' => 'Platform ara…', - 'no_platform_match' => 'Eşleşen platform yok.', - 'use_this' => 'Bu şablonu kullan', - 'no_templates' => 'Kullanılabilir şablon yok.', - 'applying' => 'Şablon uygulanıyor…', - 'category' => [ - 'product_launch' => 'Ürün lansmanı', - 'promotion' => 'Promosyon', - 'educational' => 'Eğitici', - 'behind_the_scenes' => 'Kamera arkası', - 'testimonial' => 'Müşteri görüşü', - 'industry_tip' => 'Sektör ipucu', - 'event' => 'Etkinlik', - 'engagement' => 'Etkileşim', - ], - ], ]; diff --git a/lang/uk/posts.php b/lang/uk/posts.php index 8dc88b8c..bcd9b250 100644 --- a/lang/uk/posts.php +++ b/lang/uk/posts.php @@ -600,8 +600,6 @@ 'ai_description' => 'Опишіть, що хочете, і AI згенерує вміст за вас.', 'ai_configure_description' => 'Виберіть формат і опишіть пост, який хочете створити.', 'ai_pick_template_description' => 'Виберіть стиль для вашого AI-поста.', - 'template_title' => 'Використати шаблон', - 'template_description' => 'Виберіть із наших готових шаблонів і налаштуйте.', 'coming_soon' => 'Незабаром', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => 'Виберіть шаблон', - 'browser_description' => 'Почніть із готового шаблону та адаптуйте його.', - 'search_placeholder' => 'Пошук шаблонів…', - 'no_search_results' => 'Жоден шаблон не відповідає вашому пошуку', - 'try_different_search' => 'Спробуйте інше ключове слово або очистіть пошук.', - 'slides_count' => '{count} слайд|{count} слайди|{count} слайдів', - 'all_platforms' => 'Усі платформи', - 'platform_search_placeholder' => 'Пошук платформи…', - 'no_platform_match' => 'Жодна платформа не відповідає.', - 'use_this' => 'Використати цей шаблон', - 'no_templates' => 'Немає доступних шаблонів.', - 'applying' => 'Застосовуємо шаблон…', - 'category' => [ - 'product_launch' => 'Запуск продукту', - 'promotion' => 'Акція', - 'educational' => 'Навчальне', - 'behind_the_scenes' => 'За кулісами', - 'testimonial' => 'Відгук', - 'industry_tip' => 'Галузева порада', - 'event' => 'Подія', - 'engagement' => 'Залучення', - ], - ], ]; diff --git a/lang/zh/posts.php b/lang/zh/posts.php index 449ed49e..af5dc275 100644 --- a/lang/zh/posts.php +++ b/lang/zh/posts.php @@ -600,8 +600,6 @@ 'ai_description' => '描述你想要的内容,由 AI 为你生成。', 'ai_configure_description' => '选择一种格式,并描述你想创建的帖子。', 'ai_pick_template_description' => '为你的 AI 生成帖子选择一种风格。', - 'template_title' => '使用模板', - 'template_description' => '从我们精选的模板中挑选并自定义。', 'coming_soon' => '敬请期待', 'preview' => [ @@ -669,29 +667,4 @@ ], ], ], - - 'templates' => [ - 'browser_title' => '选择一个模板', - 'browser_description' => '从精选模板开始,并进行调整。', - 'search_placeholder' => '搜索模板…', - 'no_search_results' => '没有与搜索匹配的模板', - 'try_different_search' => '换一个关键词,或清除搜索。', - 'slides_count' => '{count} 张幻灯片|{count} 张幻灯片', - 'all_platforms' => '所有平台', - 'platform_search_placeholder' => '搜索平台…', - 'no_platform_match' => '没有匹配的平台。', - 'use_this' => '使用此模板', - 'no_templates' => '暂无可用模板。', - 'applying' => '正在应用模板…', - 'category' => [ - 'product_launch' => '产品发布', - 'promotion' => '促销', - 'educational' => '知识科普', - 'behind_the_scenes' => '幕后花絮', - 'testimonial' => '用户好评', - 'industry_tip' => '行业贴士', - 'event' => '活动', - 'engagement' => '互动', - ], - ], ]; diff --git a/resources/js/components/posts/create/AiPostWizard.vue b/resources/js/components/posts/create/AiPostWizard.vue index 1bad3f04..03b101a5 100644 --- a/resources/js/components/posts/create/AiPostWizard.vue +++ b/resources/js/components/posts/create/AiPostWizard.vue @@ -15,6 +15,7 @@ import { Switch } from '@/components/ui/switch'; import { Textarea } from '@/components/ui/textarea'; import { getPlatformLogo } from '@/composables/usePlatformLogo'; import { loading as loadingRoute } from '@/routes/app/posts/ai'; +import type { AiTemplate } from '@/types'; import { ContentType, type ContentTypeValue } from '@/types/content-type'; interface SocialAccount { @@ -26,16 +27,6 @@ interface SocialAccount { avatar_url: string | null; } -interface AiTemplate { - key: string; - name: string; - description: string; - preview: string; - needs_account: boolean; - supported_formats: string[]; - applies_brand_visuals: boolean; -} - interface Props { socialAccounts: SocialAccount[]; templates: AiTemplate[]; diff --git a/resources/js/pages/posts/Create.vue b/resources/js/pages/posts/Create.vue index 8368da42..927b165a 100644 --- a/resources/js/pages/posts/Create.vue +++ b/resources/js/pages/posts/Create.vue @@ -1,14 +1,14 @@ - - diff --git a/resources/js/types/index.d.ts b/resources/js/types/index.d.ts index ed6719b8..7deced72 100644 --- a/resources/js/types/index.d.ts +++ b/resources/js/types/index.d.ts @@ -135,3 +135,18 @@ export interface ContentLanguageOption { englishName?: string; } +/** + * An AI content template, as serialized by PostController::create from an + * AiContentTemplate. Shared by the post-creation screen and the AI wizard — + * declaring it in both places is what let them drift apart before. + */ +export interface AiTemplate { + key: string; + name: string; + description: string; + preview: string; + needs_account: boolean; + supported_formats: string[]; + applies_brand_visuals: boolean; +} + diff --git a/resources/views/prompts/post_content/generator.blade.php b/resources/views/prompts/post_content/generator.blade.php index ec709199..29254fca 100644 --- a/resources/views/prompts/post_content/generator.blade.php +++ b/resources/views/prompts/post_content/generator.blade.php @@ -35,25 +35,6 @@ @endif @endif -@if(!empty($examples)) - -Here are example posts from our curated library that match this platform — use them as inspiration for tone and structure (do NOT copy verbatim): - -@foreach($examples as $i => $example) -Example {{ $i + 1 }} — {{ $example['name'] }} -{{ $example['content'] }} -@if(!empty($example['slides'])) -Slides: -@foreach($example['slides'] as $j => $slide) - Slide {{ $j + 1 }}: {{ $slide['title'] ?? '' }} | {{ $slide['body'] ?? '' }} -@endforeach -@endif - -@endforeach - -Use these as a stylistic reference. Generate something different (about the user's actual topic) but with similar structural quality. -@endif - @if(($format ?? 'single') === 'carousel') Output format: a JSON object with `caption` (the Instagram caption text) and a `slides` array. diff --git a/routes/app.php b/routes/app.php index 779d4770..e2eb4d4d 100644 --- a/routes/app.php +++ b/routes/app.php @@ -19,7 +19,6 @@ use App\Http\Controllers\App\PostAiReviewController; use App\Http\Controllers\App\PostCommentController; use App\Http\Controllers\App\PostController; -use App\Http\Controllers\App\PostTemplateController; use App\Http\Controllers\App\PresenceController; use App\Http\Controllers\App\Settings\AccountController; use App\Http\Controllers\App\Settings\AuthenticationController; @@ -206,10 +205,6 @@ ->middleware('throttle:30,1') ->name('app.posts.link-preview'); - // Post Templates - Route::get('post-templates', [PostTemplateController::class, 'index'])->name('app.post-templates.index'); - Route::post('post-templates/{slug}/apply', [PostTemplateController::class, 'apply'])->name('app.post-templates.apply'); - // Post AI Route::post('posts/{post}/ai/generate', [PostAiGenerateController::class, 'generate'])->name('app.posts.ai.generate'); Route::post('posts/{post}/media/{mediaId}/ai/regenerate', [PostAiRegenerateMediaController::class, 'regenerate'])->name('app.posts.ai.regenerate-media'); diff --git a/templates/en/bluesky_post.php b/templates/en/bluesky_post.php deleted file mode 100644 index 6df9a8ae..00000000 --- a/templates/en/bluesky_post.php +++ /dev/null @@ -1,316 +0,0 @@ - 'bluesky_now_live', - 'category' => 'product_launch', - 'name' => 'Now live', - 'description' => 'Announce a launch in the open, decentralized vibe of Bluesky.', - 'content' => "Now live: [feature/product] from {{brand_name}}.\n\nWhat changed: [one-line summary].\n\nWho it's for: [who benefits].\n\nLink → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_thought', - 'category' => 'industry_tip', - 'name' => 'Short thought', - 'description' => 'A concise observation that reads naturally on Bluesky.', - 'content' => "[Observation about your industry, told in one or two sentences.]\n\nSimple, but worth saying out loud.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_invite', - 'category' => 'engagement', - 'name' => 'Community invite', - 'description' => 'Invite the community into a topic or conversation.', - 'content' => "If you care about [topic], we'd love to hear from you.\n\nWhat's on your mind lately?\n\n- team {{brand_name}}", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_changelog_drop', - 'category' => 'product_launch', - 'name' => 'Changelog drop', - 'description' => 'Plain changelog post for a release.', - 'content' => "v[version] is out.\n\n• [change 1]\n• [change 2]\n• [bug fix]\n\nNo migrations needed. Full notes: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_open_beta', - 'category' => 'product_launch', - 'name' => 'Open beta', - 'description' => 'Invite users into a public beta.', - 'content' => "Open beta: [feature] is live for anyone who wants to try it.\n\nIt is rough in places. That is the point. Bug reports welcome.\n\nSign up: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_api_release', - 'category' => 'product_launch', - 'name' => 'API release', - 'description' => 'Announce a new API or developer feature.', - 'content' => "New: [endpoint/SDK] from {{brand_name}}.\n\nDocs: [link]\nExample repo: [link]\n\nIf the docs are missing something, tell us. We will fix it faster than you expect.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_discount', - 'category' => 'promotion', - 'name' => 'Discount window', - 'description' => 'Time-bound promo, plainly stated.', - 'content' => "[X]% off [plan/product] until [date].\n\nNo email gate. No popup. Just the code: [CODE]\n\n[link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_lifetime', - 'category' => 'promotion', - 'name' => 'Lifetime deal', - 'description' => 'Lifetime/early-bird offer aimed at builders.', - 'content' => "Lifetime deal on {{brand_name}}: [price] once, no subscription.\n\nLimited to [number] seats. After that we go back to monthly.\n\nGrab one: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_referral', - 'category' => 'promotion', - 'name' => 'Referral perk', - 'description' => 'Plain referral offer.', - 'content' => "Refer a friend to {{brand_name}}, both of you get [reward].\n\nNo tiers. No leaderboard. Just send your link: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_one_thing', - 'category' => 'educational', - 'name' => 'One thing I learned', - 'description' => 'Single concrete lesson, told plainly.', - 'content' => "One thing I learned working on [topic]:\n\n[concrete lesson, one or two sentences].\n\nObvious in hindsight. Not obvious before.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_misconception', - 'category' => 'educational', - 'name' => 'Common misconception', - 'description' => 'Correct a widespread misconception in your space.', - 'content' => "Common belief: [misconception about your field].\n\nWhat is actually true: [correction].\n\nThe difference matters when [specific scenario].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_quick_how', - 'category' => 'educational', - 'name' => 'Quick how-to', - 'description' => 'Short how-to on one specific task.', - 'content' => "How to [specific task] in [tool]:\n\n1. [step]\n2. [step]\n3. [step]\n\nThat is the whole thing. No hidden config.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_tradeoff', - 'category' => 'educational', - 'name' => 'Tradeoff explainer', - 'description' => 'Walk through a real tradeoff in your domain.', - 'content' => "[Option A] vs [Option B] is mostly a tradeoff between [thing 1] and [thing 2].\n\nIf you care more about [thing 1], pick A. If [thing 2], pick B. Most teams pick A and regret it later.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_stack', - 'category' => 'behind_the_scenes', - 'name' => 'Our stack', - 'description' => 'Honest stack note from inside the team.', - 'content' => "Our stack at {{brand_name}}: [tech 1], [tech 2], [tech 3].\n\nWe picked [tech 1] for [reason]. We regret picking [tech] for [reason]. Will probably swap it next quarter.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Mini postmortem', - 'description' => 'Short, transparent incident note.', - 'content' => "[Service/feature] was down for [duration] today.\n\nCause: [plain explanation].\nFix: [what we did].\n\nWe added [safeguard] so the same thing does not happen the same way again.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Why we picked X', - 'description' => 'Explain a recent design or product decision.', - 'content' => "Why we picked [decision] over [alternative]:\n\n[reason in one sentence].\n\nIt is not the popular choice. It fits how our users actually work.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_numbers', - 'category' => 'behind_the_scenes', - 'name' => 'Numbers we watch', - 'description' => 'Share a real metric and what it means.', - 'content' => "A number we actually watch at {{brand_name}}: [metric].\n\nLast month it was [value]. The week before, [value].\n\nIt is the metric that tells us whether [outcome] is real.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_quote', - 'category' => 'testimonial', - 'name' => 'Quote from a user', - 'description' => 'A short user quote, no fluff.', - 'content' => "From a user this week:\n\n\"[short, specific quote about the product].\"\n\n- [first name], [role]\n\nThis is the kind of feedback that keeps us building.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_workflow', - 'category' => 'testimonial', - 'name' => 'How a customer uses it', - 'description' => 'Specific user workflow story.', - 'content' => "[Customer/team] uses {{brand_name}} to [specific job].\n\nBefore: [old way].\nNow: [new way].\n\nNot dramatic. Just less friction every day.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_result', - 'category' => 'testimonial', - 'name' => 'Concrete result', - 'description' => 'A specific, measurable outcome from a customer.', - 'content' => "[Customer] cut [task] from [old time] to [new time] using {{brand_name}}.\n\nOne workflow change. No new hires.\n\nFull writeup: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_take', - 'category' => 'industry_tip', - 'name' => 'Hot-ish take', - 'description' => 'A real opinion on a thing in your industry.', - 'content' => "Mild take: [opinion about your industry].\n\nI know this is unpopular. I have changed my mind on it twice. Right now I think it holds up.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_pattern', - 'category' => 'industry_tip', - 'name' => 'Pattern I keep seeing', - 'description' => 'Pattern observed across teams or projects.', - 'content' => "A pattern I keep seeing in [industry/role]:\n\n[pattern in one sentence].\n\nUsually it works for the first [milestone] and then quietly stops.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_anti_advice', - 'category' => 'industry_tip', - 'name' => 'Advice I would skip', - 'description' => 'Anti-advice: common advice that does not hold up.', - 'content' => "Advice you hear a lot: [common advice].\n\nIn practice this falls apart when [scenario]. The version that actually works is [revised advice].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_link_share', - 'category' => 'industry_tip', - 'name' => 'Link with context', - 'description' => 'Share a link with a real reason to read it.', - 'content' => "Worth reading: [title of article/post].\n\nWhy: [one specific thing the piece nails].\n\n[link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_announce', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Announce an upcoming event or talk.', - 'content' => "[Event name] on [date] at [time/timezone].\n\nTopic: [what we will cover].\nFormat: [talk / Q&A / demo].\n\nFree, no signup gate: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_speaking', - 'category' => 'event', - 'name' => 'Speaking somewhere', - 'description' => 'Tell people you are speaking at a conference.', - 'content' => "I am speaking at [event] on [date].\n\nTalk: [talk title or topic in plain words].\n\nIf you are around, say hi. Especially if you disagree with the talk.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Short recap after an event or meetup.', - 'content' => "Quick recap of [event]:\n\n• [what worked]\n• [what surprised us]\n• [what we will do differently next time]\n\nThanks to everyone who showed up.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_office_hours', - 'category' => 'event', - 'name' => 'Office hours', - 'description' => 'Open office hours or AMA invite.', - 'content' => "Open office hours this [day] at [time/timezone].\n\nBring real questions about [topic]. I would rather answer hard ones than soft ones.\n\nLink to join: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_question', - 'category' => 'engagement', - 'name' => 'Real question', - 'description' => 'A genuine question, not engagement bait.', - 'content' => "Genuine question for people working on [topic]:\n\n[specific question].\n\nNot rhetorical. I am stuck on this and curious how others handle it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_poll_lite', - 'category' => 'engagement', - 'name' => 'Two camps', - 'description' => 'Lightweight either/or to spark replies.', - 'content' => "Two camps on [topic]:\n\nA: [option A]\nB: [option B]\n\nWhich one do you actually use day to day, and what made you pick it?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_show_us', - 'category' => 'engagement', - 'name' => 'Show us your setup', - 'description' => 'Invite users to share their setup or workflow.', - 'content' => "Show us your [setup / workflow / config] for [task].\n\nReply with a screenshot or a one-liner. We are collecting good patterns to share back.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/en/facebook_post.php b/templates/en/facebook_post.php deleted file mode 100644 index 804be2d6..00000000 --- a/templates/en/facebook_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'facebook_special_offer', - 'category' => 'promotion', - 'name' => 'Special offer', - 'description' => 'Promote a special offer on Facebook with a clear call to action.', - 'content' => "🎉 Special offer from {{brand_name}}.\n\n[Offer summary], only available through [date].\n\nClick the link to claim yours: [link]\n\nQuestions? Drop them in the comments, we read every one.", - 'image_count' => 1, - 'image_keywords' => ['offer', 'sale', 'promotion'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_community_story', - 'category' => 'behind_the_scenes', - 'name' => 'Community story', - 'description' => 'Share a story about a customer or team moment to build connection.', - 'content' => "Meet [name].\n\n[Short story, 2 to 4 sentences, about how they use {{brand_name}} or what they bring to our community.]\n\nThis is why we do what we do. ❤️", - 'image_count' => 1, - 'image_keywords' => ['people', 'story', 'community'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_event_invite', - 'category' => 'event', - 'name' => 'Event invite', - 'description' => 'Invite your followers to an upcoming event or webinar.', - 'content' => "📅 Save the date.\n\n{{brand_name}} is hosting [event name] on [date] at [time].\n\nWe'll cover:\n• [Topic 1]\n• [Topic 2]\n• [Topic 3]\n\nFree to attend. Save your spot → [link]", - 'image_count' => 1, - 'image_keywords' => ['event', 'calendar', 'invitation'], - 'slides' => null, - ], - - // Product launch (4) - [ - 'slug' => 'facebook_new_product_reveal', - 'category' => 'product_launch', - 'name' => 'New product reveal', - 'description' => 'Announce a brand new product to your Facebook community.', - 'content' => "After [number] months of work, we can finally talk about it.\n\nMeet [product name], the [short description] we built because [reason]. Our team kept hearing the same thing from people in this community: [common request]. So we made it.\n\n{{brand_name}} is shipping the first batch on [date]. The link is in the first comment.\n\nWhat do you want to know about it? Drop your questions below and we'll answer every single one this week.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_product_restock', - 'category' => 'product_launch', - 'name' => 'Product restock announcement', - 'description' => 'Tell followers a sold-out product is back in stock.', - 'content' => "It's back.\n\n[Product name] sold out in [time period] last time, and a lot of you were on the waitlist. We restocked this morning with [quantity] units.\n\nIf you missed it before, this is your reminder: [link]\n\nFor anyone who already has one, what would you tell someone thinking about ordering?", - 'image_count' => 1, - 'image_keywords' => ['product', 'restock', 'shelf'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_feature_release', - 'category' => 'product_launch', - 'name' => 'New feature release', - 'description' => 'Announce a new feature added to an existing product.', - 'content' => "Small update, big difference.\n\n{{brand_name}} just rolled out [feature name]. You asked for it in the comments more times than we can count, so here it is: [one-sentence explanation of what it does].\n\nIt's live for everyone starting today. No upgrade needed.\n\nIf you try it this week, tell us what you think. We're already taking notes for what to build next.", - 'image_count' => 1, - 'image_keywords' => ['feature', 'update', 'screen'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_preorder_open', - 'category' => 'product_launch', - 'name' => 'Pre-order announcement', - 'description' => 'Open pre-orders for an upcoming product release.', - 'content' => "Pre-orders are open.\n\n[Product name] ships on [date], and we're letting this community order first. Pre-order pricing is [price] until [deadline], and there are only [quantity] spots in the first run.\n\nHere's the link: [link]\n\nIf you have questions about [common concern: shipping / sizing / specs], ask in the comments. We'll be here all afternoon.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product', 'package'], - 'slides' => null, - ], - - // Promotion (3) - [ - 'slug' => 'facebook_flash_sale', - 'category' => 'promotion', - 'name' => 'Flash sale alert', - 'description' => 'Announce a short-term flash sale with urgency.', - 'content' => "Flash sale, today only.\n\n[Discount] off [product/category] until midnight. Use code [CODE] at checkout.\n\nThis is the lowest price we'll offer this season, and we're not running it again until [next date].\n\nLink in the first comment. Tag a friend who's been eyeing this.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_holiday_promo', - 'category' => 'promotion', - 'name' => 'Holiday promotion', - 'description' => 'Run a holiday-themed promotion with a friendly tone.', - 'content' => "Happy [holiday name] from everyone at {{brand_name}}.\n\nTo say thank you for being part of this year, we're taking [discount] off [product/category] from [start date] through [end date]. Use code [CODE].\n\nWhatever you're celebrating this week, we hope it's a good one. Tell us how you're spending the holiday in the comments.", - 'image_count' => 1, - 'image_keywords' => ['holiday', 'celebration', 'gift'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_bundle_deal', - 'category' => 'promotion', - 'name' => 'Bundle deal promotion', - 'description' => 'Promote a product bundle with savings.', - 'content' => "Two of our favorites, better together.\n\n[Product A] + [Product B] is now a bundle, and the bundle saves you [amount] vs. buying them separately. We put them together because customers kept ordering them in the same cart.\n\nGrab one here: [link]\n\nIf you already own one of these, the other is the missing piece. Trust us on that.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'products', 'package'], - 'slides' => null, - ], - - // Educational (4) - [ - 'slug' => 'facebook_how_to_guide', - 'category' => 'educational', - 'name' => 'How-to guide', - 'description' => 'Teach your audience how to do something useful.', - 'content' => "Here's how to [task] in under [time].\n\n1. [Step 1 with a real detail, not a vague instruction]\n2. [Step 2]\n3. [Step 3]\n4. [Step 4]\n\nThe part most people skip is [step number]. If you only do one thing, do that one.\n\nWhat's the [topic] question you keep meaning to look up? Ask below and we'll cover it next week.", - 'image_count' => 1, - 'image_keywords' => ['tutorial', 'guide', 'how to'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_myth_buster', - 'category' => 'educational', - 'name' => 'Myth vs. fact', - 'description' => 'Bust a common myth in your industry.', - 'content' => "There's a myth about [topic] that won't go away.\n\nThe myth: [common belief].\n\nWhat actually happens: [accurate explanation, 2-3 sentences with a specific example or number].\n\nWe've heard this one for years. If you've believed it too, you're in good company, most people have. Now you know.\n\nWhat other [industry] myths drive you crazy?", - 'image_count' => 1, - 'image_keywords' => ['fact check', 'information', 'thinking'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_quick_tip', - 'category' => 'educational', - 'name' => 'Quick tip', - 'description' => 'Share one bite-sized tip your audience can use today.', - 'content' => "Quick tip you can use today.\n\nIf you [common situation], try [specific action] instead of [usual approach]. The reason: [one-sentence explanation of why it works].\n\nWe started doing this with [example] and it changed how we [outcome]. Small change, real difference.\n\nGive it a shot this week and tell us how it goes.", - 'image_count' => 1, - 'image_keywords' => ['tip', 'lightbulb', 'idea'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_common_mistake', - 'category' => 'educational', - 'name' => 'Common mistake to avoid', - 'description' => 'Help readers avoid a typical mistake in your field.', - 'content' => "The most common mistake we see with [topic]: [specific mistake].\n\nIt usually happens when [context]. The result is [consequence], and by the time you notice, [downside].\n\nWhat to do instead: [clear alternative]. It takes [time/effort] more up front and saves you [benefit] later.\n\nIf you've made this one before, you're not alone. We've made it too. What's a mistake you wish someone had warned you about?", - 'image_count' => 1, - 'image_keywords' => ['mistake', 'warning', 'lesson'], - 'slides' => null, - ], - - // Behind the scenes (4) - [ - 'slug' => 'facebook_team_intro', - 'category' => 'behind_the_scenes', - 'name' => 'Team member intro', - 'description' => 'Introduce a team member to the community.', - 'content' => "Say hi to [name].\n\n[Name] is our [role] and has been with {{brand_name}} for [time]. They're the reason [specific thing they own or improved], and if you've ever emailed support, there's a good chance they're the person who wrote back.\n\nFun fact: [one human detail, hobby, weird skill, favorite snack].\n\nDrop a wave in the comments and say hello.", - 'image_count' => 1, - 'image_keywords' => ['team', 'portrait', 'workplace'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_workspace_tour', - 'category' => 'behind_the_scenes', - 'name' => 'Workspace tour', - 'description' => 'Show followers around your workspace or studio.', - 'content' => "A peek inside where the work happens.\n\nThis is [room/space name] at {{brand_name}}. [One specific detail about it, the lighting, the mess, the corner everyone fights over]. We spend most of our day here, and it shows.\n\n[Second detail, something visible in the photo that has a story behind it].\n\nWhat does your workspace look like right now? Honest answers only, coffee cups and all.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'office', 'studio'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_making_of', - 'category' => 'behind_the_scenes', - 'name' => 'Making-of post', - 'description' => 'Show how a product or piece of work gets made.', - 'content' => "Ever wonder how [product/service] actually gets made?\n\nIt starts with [first step] and ends with [last step]. In between there's a lot of [honest description, testing, redoing, second-guessing]. The version you eventually buy is usually the [number] attempt.\n\nHere's a snapshot from this week's batch. The [specific detail] is the part nobody sees but everyone notices when it's done right.\n\nQuestions about the process? Ask away.", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'process', 'craft'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_milestone_celebration', - 'category' => 'behind_the_scenes', - 'name' => 'Milestone celebration', - 'description' => 'Celebrate a meaningful milestone with the community.', - 'content' => "Today is [milestone, anniversary, customer count, anything real].\n\nWe started {{brand_name}} [time ago] with [honest origin detail, a kitchen table, one customer, a borrowed laptop]. The plan was simple and a little naive: [original goal].\n\n[Milestone] later, we're still here, mostly because of the people in this community who kept showing up. Thank you. Genuinely.\n\nTell us in the comments, when did you first find us?", - 'image_count' => 1, - 'image_keywords' => ['celebration', 'milestone', 'anniversary'], - 'slides' => null, - ], - - // Testimonial (3) - [ - 'slug' => 'facebook_customer_quote', - 'category' => 'testimonial', - 'name' => 'Customer quote', - 'description' => 'Share a customer testimonial in their own words.', - 'content' => "\"[Direct customer quote, keep it specific, in their voice, with a real result or feeling.]\"\n\n- [Customer name], [city or role]\n\nWe got this message last [time] and asked if we could share it. [Customer first name] said yes. We're grateful for words like these and for everyone who takes a minute to send them.\n\nIf {{brand_name}} has been part of your story too, we'd love to hear it in the comments.", - 'image_count' => 1, - 'image_keywords' => ['testimonial', 'happy customer', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_before_after_story', - 'category' => 'testimonial', - 'name' => 'Before and after story', - 'description' => 'Tell a customer transformation story.', - 'content' => "Before: [Customer's situation when they found {{brand_name}}, describe in 2-3 honest sentences].\n\nAfter: [What changed, with a specific outcome and timeframe].\n\n[Customer name] sent us this update last month, and it's the kind of thing that makes everyone in the office quiet for a second. We didn't do the work, they did. We just helped where we could.\n\nIf you've been on the fence about [common hesitation], stories like this might be why to start.", - 'image_count' => 1, - 'image_keywords' => ['transformation', 'progress', 'result'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_review_highlight', - 'category' => 'testimonial', - 'name' => 'Review highlight', - 'description' => 'Highlight a recent review with context.', - 'content' => "5-star review from [customer name] this week:\n\n\"[Pull a real, specific line from the review, not the generic praise, the part with the actual detail.]\"\n\nWe save reviews like this and re-read them on the hard days. Thank you, [first name].\n\nIf you've got a few minutes and {{brand_name}} has helped you, leaving a review here is the kindest thing you can do for us: [link]", - 'image_count' => 1, - 'image_keywords' => ['review', 'stars', 'feedback'], - 'slides' => null, - ], - - // Industry tip (3) - [ - 'slug' => 'facebook_industry_insight', - 'category' => 'industry_tip', - 'name' => 'Industry insight', - 'description' => 'Share a useful insight from your industry.', - 'content' => "Something we noticed working in [industry] this year:\n\n[Specific observation, a shift, a pattern, a counterintuitive finding. 2-3 sentences with a number or example.]\n\nWe don't think this is going to reverse anytime soon, and the businesses who plan for it now will have an easier time than the ones who wait.\n\nAre you seeing the same thing? Curious what your experience has been.", - 'image_count' => 1, - 'image_keywords' => ['insight', 'industry', 'analysis'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_pro_tip', - 'category' => 'industry_tip', - 'name' => 'Pro tip from experience', - 'description' => 'Share a tip earned through experience.', - 'content' => "A pro tip we learned the hard way:\n\nWhen you [common scenario], always [specific action]. We used to skip this step because it felt like extra work, until [story, what went wrong].\n\nNow it's the first thing we do, every time. Takes [time] and prevents [problem].\n\nWhat's a tip you'd give someone just starting out in [field]?", - 'image_count' => 1, - 'image_keywords' => ['expertise', 'professional', 'advice'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_industry_trend', - 'category' => 'industry_tip', - 'name' => 'Industry trend explainer', - 'description' => 'Explain a trend in plain language.', - 'content' => "Everyone in [industry] is talking about [trend]. Here's what it actually means in plain English.\n\n[2-3 sentence explanation without jargon, with one concrete example.]\n\nWhether it lives up to the hype is another question. Our take: [honest opinion, what to take seriously, what to ignore].\n\nWhere do you stand on this one? Genuinely curious where the community lands.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry', 'explainer'], - 'slides' => null, - ], - - // Event (3) - [ - 'slug' => 'facebook_event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Share a recap after an event ends.', - 'content' => "[Event name] just wrapped, and we're still recovering.\n\n[Number] of you showed up, asked good questions, and stayed late. Highlights: [moment 1], [moment 2], and the part where [specific funny or memorable thing].\n\nA huge thank you to everyone who came. If you missed it, we recorded the main session and the link is in the first comment.\n\nWhat was your favorite moment from the day? Tag someone you met there.", - 'image_count' => 1, - 'image_keywords' => ['event', 'recap', 'crowd'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_event_countdown', - 'category' => 'event', - 'name' => 'Event countdown', - 'description' => 'Build anticipation as an event approaches.', - 'content' => "[Number] days until [event name].\n\nIf you haven't grabbed your spot, now is the time. We've got [number] seats left, and they tend to go fast in the last week.\n\nWhat to expect on [date]: [one real detail], [another real detail], and time to actually talk to people instead of just watching slides.\n\nGet your ticket here: [link]\n\nWho's coming? Drop a comment so we know who to look for.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'event', 'tickets'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_workshop_announcement', - 'category' => 'event', - 'name' => 'Workshop announcement', - 'description' => 'Announce a hands-on workshop.', - 'content' => "We're running a workshop on [topic].\n\n[Date] at [time]. Limited to [number] people because it's hands-on, not a webinar. You'll leave with [specific outcome, a finished thing, a working setup, a written plan].\n\nWho it's for: [audience]. Who it's not for: [honest disclaimer].\n\nDetails and signup: [link]\n\nQuestions about whether it's right for you? Ask in the comments.", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'learning', 'hands on'], - 'slides' => null, - ], - - // Engagement (3) - [ - 'slug' => 'facebook_question_prompt', - 'category' => 'engagement', - 'name' => 'Community question', - 'description' => 'Ask the community a thoughtful question.', - 'content' => "Genuine question for the community.\n\nWhen you [common situation related to {{brand_name}}], how do you usually [specific decision]? We're asking because we keep seeing the same thing come up in DMs, and we have a hunch our answer isn't the only good one.\n\nNo wrong answers. We read every comment.", - 'image_count' => 1, - 'image_keywords' => ['question', 'conversation', 'people talking'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_this_or_that', - 'category' => 'engagement', - 'name' => 'This or that poll', - 'description' => 'Run a fun this-or-that style post.', - 'content' => "Settle a debate we've been having all week.\n\n[Option A] or [Option B]?\n\nNo overthinking it. First instinct, in the comments.\n\nFor what it's worth, the team is split [number] to [number]. We'll share the winning side on Friday.", - 'image_count' => 1, - 'image_keywords' => ['choice', 'comparison', 'options'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_fill_in_blank', - 'category' => 'engagement', - 'name' => 'Fill in the blank', - 'description' => 'Invite followers to complete a sentence.', - 'content' => "Fill in the blank:\n\nThe one thing I wish I'd known before [topic] is __________.\n\nWe'll go first: [your honest answer, with a real story attached].\n\nYour turn. The best answers we've gotten on prompts like this end up helping someone else who reads them later, so don't hold back.", - 'image_count' => 1, - 'image_keywords' => ['conversation', 'thinking', 'community'], - 'slides' => null, - ], -]; diff --git a/templates/en/facebook_story.php b/templates/en/facebook_story.php deleted file mode 100644 index d1aca59a..00000000 --- a/templates/en/facebook_story.php +++ /dev/null @@ -1,326 +0,0 @@ - 'fb_story_announcement', - 'category' => 'product_launch', - 'name' => 'Quick announcement', - 'description' => 'Drive attention to an update with a 24-hour Facebook story.', - 'content' => "Heads up from {{brand_name}}.\n\n[One-line highlight]\n\nLink in profile.", - 'image_count' => 1, - 'image_keywords' => ['announcement', 'launch'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_promo', - 'category' => 'promotion', - 'name' => 'Flash promo', - 'description' => 'Time-sensitive offer in story format.', - 'content' => "Today only.\n\n[Discount]% off at {{brand_name}}.\n\nTap to shop.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'urgency'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_question', - 'category' => 'engagement', - 'name' => 'Quick question', - 'description' => 'Ask followers a question to drive replies and reactions.', - 'content' => "Quick one.\n\n[Question for your audience]\n\nReply to this story.", - 'image_count' => 1, - 'image_keywords' => ['question', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_new_drop', - 'category' => 'product_launch', - 'name' => 'New drop', - 'description' => 'Tease a fresh product with a quick visual cue.', - 'content' => "It is here.\n\n[Product name] from {{brand_name}}.\n\nTap to see it.", - 'image_count' => 1, - 'image_keywords' => ['new product', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_preorder', - 'category' => 'product_launch', - 'name' => 'Preorder open', - 'description' => 'Open preorders with a short story prompt.', - 'content' => "Preorders open.\n\n[Product] ships [date].\n\nLink in bio.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_launch_day', - 'category' => 'product_launch', - 'name' => 'Launch day', - 'description' => 'Mark the live launch with a single tap CTA.', - 'content' => "Live now.\n\n[Product] is shipping today.\n\nTap to grab yours.", - 'image_count' => 1, - 'image_keywords' => ['launch', 'product reveal'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_back_in_stock', - 'category' => 'product_launch', - 'name' => 'Back in stock', - 'description' => 'Alert followers that a sold-out item is back.', - 'content' => "Back in stock.\n\n[Product] at {{brand_name}}.\n\nGoes fast. Tap to check.", - 'image_count' => 1, - 'image_keywords' => ['restock', 'available'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bogo', - 'category' => 'promotion', - 'name' => 'Buy one get one', - 'description' => 'Push a BOGO offer in story format.', - 'content' => "Buy 1, get 1.\n\nThis week at {{brand_name}}.\n\nTap to shop.", - 'image_count' => 1, - 'image_keywords' => ['bogo', 'sale'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_free_shipping', - 'category' => 'promotion', - 'name' => 'Free shipping', - 'description' => 'Promote a free shipping window.', - 'content' => "Free shipping.\n\n48 hours only at {{brand_name}}.\n\nUse code [CODE].", - 'image_count' => 1, - 'image_keywords' => ['shipping', 'delivery box'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_last_chance', - 'category' => 'promotion', - 'name' => 'Last chance sale', - 'description' => 'Final call for an ending discount.', - 'content' => "Last chance.\n\n[Discount]% off ends tonight.\n\nTap to shop {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'sale ending'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_coupon_drop', - 'category' => 'promotion', - 'name' => 'Coupon drop', - 'description' => 'Drop a coupon code in a 24h story.', - 'content' => "Code [CODE].\n\n[Discount]% off at {{brand_name}}.\n\nGone in 24h.", - 'image_count' => 1, - 'image_keywords' => ['coupon', 'promo code'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_quick_tip', - 'category' => 'educational', - 'name' => 'Quick tip', - 'description' => 'Share a single useful tip.', - 'content' => "Quick tip.\n\n[One actionable tip].\n\nSave this story.", - 'image_count' => 1, - 'image_keywords' => ['tip', 'advice'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_did_you_know', - 'category' => 'educational', - 'name' => 'Did you know', - 'description' => 'Surprise followers with a quick fact.', - 'content' => "Did you know?\n\n[Surprising fact].\n\nMore on the {{brand_name}} blog.", - 'image_count' => 1, - 'image_keywords' => ['fact', 'lightbulb'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_myth_buster', - 'category' => 'educational', - 'name' => 'Myth buster', - 'description' => 'Bust a common myth in a single hit.', - 'content' => "Myth: [common belief].\n\nReality: [truth].\n\nTap for the why.", - 'image_count' => 1, - 'image_keywords' => ['myth', 'truth'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_one_minute_lesson', - 'category' => 'educational', - 'name' => 'One minute lesson', - 'description' => 'A bite-sized lesson with a tap CTA.', - 'content' => "60-second lesson.\n\n[Topic] from {{brand_name}}.\n\nTap to watch.", - 'image_count' => 1, - 'image_keywords' => ['lesson', 'teaching'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_workspace', - 'category' => 'behind_the_scenes', - 'name' => 'Workspace BTS', - 'description' => 'Show the workspace where things happen.', - 'content' => "Today at {{brand_name}}.\n\n[What is happening right now].\n\nTap for more.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'office'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_team', - 'category' => 'behind_the_scenes', - 'name' => 'Meet the team', - 'description' => 'Introduce a team member quickly.', - 'content' => "Meet [name].\n\n[Role at {{brand_name}}].\n\nTap to say hi.", - 'image_count' => 1, - 'image_keywords' => ['team', 'employee'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_process', - 'category' => 'behind_the_scenes', - 'name' => 'How it is made', - 'description' => 'Quick peek at how something gets made.', - 'content' => "How [product] is made.\n\nStep [n] at {{brand_name}}.\n\nTap for the full clip.", - 'image_count' => 1, - 'image_keywords' => ['production', 'process'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_packing', - 'category' => 'behind_the_scenes', - 'name' => 'Packing orders', - 'description' => 'Show orders going out the door.', - 'content' => "Packing orders.\n\n[Number] going out today.\n\nThank you for the support.", - 'image_count' => 1, - 'image_keywords' => ['packing', 'shipping'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_customer_quote', - 'category' => 'testimonial', - 'name' => 'Customer quote', - 'description' => 'Showcase a short customer quote.', - 'content' => "\"[Customer quote].\"\n\n- [name]\n\nTap to read more.", - 'image_count' => 1, - 'image_keywords' => ['quote', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_five_star', - 'category' => 'testimonial', - 'name' => 'Five star review', - 'description' => 'Highlight a five star review.', - 'content' => "5 stars.\n\n\"[Short review]\", [name]\n\nMore at {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['five stars', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_before_after', - 'category' => 'testimonial', - 'name' => 'Before and after', - 'description' => 'Show a before/after with a single CTA.', - 'content' => "Before. After.\n\n[Customer name] using {{brand_name}}.\n\nTap for the story.", - 'image_count' => 1, - 'image_keywords' => ['before after', 'transformation'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_industry_trend', - 'category' => 'industry_tip', - 'name' => 'Industry trend', - 'description' => 'Drop a quick trend insight.', - 'content' => "Trend watch.\n\n[Industry trend in one line].\n\nTap for the take.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_pro_hack', - 'category' => 'industry_tip', - 'name' => 'Pro hack', - 'description' => 'Share a quick pro hack.', - 'content' => "Pro hack.\n\n[One-line hack].\n\nMore tips at {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['hack', 'shortcut'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_mistake_to_avoid', - 'category' => 'industry_tip', - 'name' => 'Mistake to avoid', - 'description' => 'Warn about a common mistake.', - 'content' => "Stop doing this.\n\n[Common mistake].\n\nTap for the fix.", - 'image_count' => 1, - 'image_keywords' => ['warning', 'mistake'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_save_date', - 'category' => 'event', - 'name' => 'Save the date', - 'description' => 'Plant a save-the-date in a 24h story.', - 'content' => "Save the date.\n\n[Event] on [date].\n\nRSVP in bio.", - 'image_count' => 1, - 'image_keywords' => ['calendar', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_today', - 'category' => 'event', - 'name' => 'Event today', - 'description' => 'Same-day event reminder.', - 'content' => "Today.\n\n[Event] at [time].\n\nTap for the link.", - 'image_count' => 1, - 'image_keywords' => ['event', 'live'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_live_starting', - 'category' => 'event', - 'name' => 'Going live', - 'description' => 'Push followers into a live stream.', - 'content' => "Going live.\n\n[Topic] in [minutes] minutes.\n\nTap to join {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['live stream', 'broadcast'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'A quick day-after recap.', - 'content' => "That was [event].\n\nThanks for showing up.\n\nFull recap on the page.", - 'image_count' => 1, - 'image_keywords' => ['event recap', 'crowd'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_poll_this_or_that', - 'category' => 'engagement', - 'name' => 'This or that', - 'description' => 'Poll-style story with two options.', - 'content' => "[Option A] or [Option B]?\n\nReply with your pick.\n\nWe read every one.", - 'image_count' => 1, - 'image_keywords' => ['poll', 'choice'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_dm_us', - 'category' => 'engagement', - 'name' => 'DM us', - 'description' => 'Invite followers to send a message.', - 'content' => "DM us.\n\n[Reason to message {{brand_name}}].\n\nWe reply fast.", - 'image_count' => 1, - 'image_keywords' => ['message', 'chat'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_caption_this', - 'category' => 'engagement', - 'name' => 'Caption this', - 'description' => 'Open-ended caption prompt.', - 'content' => "Caption this.\n\n[Image context].\n\nReply with your best.", - 'image_count' => 1, - 'image_keywords' => ['fun', 'reaction'], - 'slides' => null, - ], -]; diff --git a/templates/en/instagram_carousel.php b/templates/en/instagram_carousel.php deleted file mode 100644 index 37e25b08..00000000 --- a/templates/en/instagram_carousel.php +++ /dev/null @@ -1,523 +0,0 @@ - 'feature_launch_carousel', - 'category' => 'product_launch', - 'name' => 'Feature launch', - 'description' => 'Announce a new product feature with a 5-slide story.', - 'content' => "{{brand_name}} just launched something we're excited about. Swipe to see what's new.", - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => "What's new", 'body' => 'A quick look at the latest update.', 'image_keywords' => ['product', 'launch']], - ['title' => 'How it works', 'body' => 'Three steps and you are running.', 'image_keywords' => ['workflow']], - ['title' => 'Why it matters', 'body' => 'Faster, simpler, fewer clicks.', 'image_keywords' => ['speed']], - ['title' => 'Who is it for', 'body' => 'Built for teams who ship.', 'image_keywords' => ['team']], - ['title' => 'Try it now', 'body' => 'Available today. Link in bio.', 'image_keywords' => ['phone', 'app']], - ], - ], - [ - 'slug' => 'five_tips_carousel', - 'category' => 'educational', - 'name' => '5 tips carousel', - 'description' => 'Share five actionable tips in a swipeable carousel.', - 'content' => '5 things I wish I knew about [topic] sooner. Save this for later. 👇', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Tip #1', 'body' => '[First tip, be specific and actionable.]', 'image_keywords' => ['idea', 'lightbulb']], - ['title' => 'Tip #2', 'body' => '[Second tip, use a real example if you can.]', 'image_keywords' => ['notebook']], - ['title' => 'Tip #3', 'body' => '[Third tip, keep it short.]', 'image_keywords' => ['focus']], - ['title' => 'Tip #4', 'body' => '[Fourth tip, something surprising or counterintuitive.]', 'image_keywords' => ['surprise']], - ['title' => 'Tip #5', 'body' => '[Fifth tip, finish strong with a takeaway.]', 'image_keywords' => ['success']], - ], - ], - [ - 'slug' => 'process_reveal_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Process reveal', - 'description' => 'Walk followers through how you create your product or service.', - 'content' => 'Ever wondered how [product/service] is made? Swipe to see every step. ✨', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'It starts with research', 'body' => 'Every project begins with understanding the problem deeply.', 'image_keywords' => ['research', 'desk']], - ['title' => 'Design & iteration', 'body' => 'We prototype fast and test often.', 'image_keywords' => ['design', 'sketch']], - ['title' => 'Building the real thing', 'body' => 'Craft and precision in every detail.', 'image_keywords' => ['craft', 'build']], - ['title' => 'The final result', 'body' => 'Quality you can feel the moment you use it.', 'image_keywords' => ['product', 'final']], - ], - ], - [ - 'slug' => 'quick_stat_carousel', - 'category' => 'industry_tip', - 'name' => 'Quick stat carousel', - 'description' => 'Present industry stats in a visual carousel format.', - 'content' => "The [industry] numbers that should be on every marketer's radar this year. 📊", - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Stat #1', 'body' => '[X]% of [audience] say [finding]. Source: [source]', 'image_keywords' => ['chart', 'data']], - ['title' => 'Stat #2', 'body' => '[Y]% increase in [metric] year over year.', 'image_keywords' => ['growth', 'graph']], - ['title' => 'Stat #3', 'body' => 'By [year], [projection].', 'image_keywords' => ['future', 'trend']], - ['title' => 'What this means for you', 'body' => '[Actionable takeaway based on the stats above.]', 'image_keywords' => ['action', 'plan']], - ], - ], - [ - 'slug' => 'event_recap_carousel', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Recap highlights from a recent event or conference.', - 'content' => 'We just wrapped [Event Name] and it was incredible. Here are the highlights. 🙌', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'It all started with…', 'body' => '[Opening moment or keynote highlight.]', 'image_keywords' => ['conference', 'stage']], - ['title' => 'The session everyone talked about', 'body' => '[Key insight from the standout talk.]', 'image_keywords' => ['presentation', 'crowd']], - ['title' => 'Connecting with the community', 'body' => '[Highlight networking or attendee moments.]', 'image_keywords' => ['networking', 'people']], - ['title' => 'See you next time', 'body' => 'Follow {{brand_name}} for updates on our next event.', 'image_keywords' => ['celebration']], - ], - ], - [ - 'slug' => 'product_lineup_carousel', - 'category' => 'product_launch', - 'name' => 'Product lineup reveal', - 'description' => 'Reveal a full product lineup one item per slide.', - 'content' => "We made [number] new things. Here's the full lineup from {{brand_name}}.", - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'meet the lineup', 'body' => '[Number] new pieces, designed together. Each one solves a specific problem.', 'image_keywords' => ['products', 'lineup']], - ['title' => 'piece one', 'body' => '[Product 1 name]. Best for [use case].', 'image_keywords' => ['product', 'studio']], - ['title' => 'piece two', 'body' => '[Product 2 name]. Pairs well with piece one if you want [benefit].', 'image_keywords' => ['object', 'detail']], - ['title' => 'piece three', 'body' => '[Product 3 name]. The one we kept iterating on until it felt right.', 'image_keywords' => ['craft', 'closeup']], - ['title' => 'shop the drop', 'body' => 'Available [date]. Link in bio.', 'image_keywords' => ['shop', 'phone']], - ], - ], - [ - 'slug' => 'before_after_launch_carousel', - 'category' => 'product_launch', - 'name' => 'Before and after launch', - 'description' => 'Show the upgrade from old version to new version.', - 'content' => "Same idea, rebuilt. Here's what changed in the new {{brand_name}} [product].", - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'before', 'body' => '[The old version. What it did well, where it fell short.]', 'image_keywords' => ['old', 'product']], - ['title' => 'after', 'body' => '[The new version. One sentence on the biggest change.]', 'image_keywords' => ['new', 'product']], - ['title' => 'what we fixed', 'body' => '[Specific issue customers told us about, and how we addressed it.]', 'image_keywords' => ['detail', 'redesign']], - ['title' => 'available now', 'body' => 'Find it in the shop. Link in bio.', 'image_keywords' => ['store', 'phone']], - ], - ], - [ - 'slug' => 'spec_breakdown_carousel', - 'category' => 'product_launch', - 'name' => 'Spec breakdown carousel', - 'description' => 'Break down product specs across multiple slides.', - 'content' => "The full spec sheet for [product]. Everything that's inside, on one swipe.", - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'meet [product]', 'body' => 'Built for [use case]. Available [date].', 'image_keywords' => ['product', 'reveal']], - ['title' => 'materials', 'body' => '[Material details. Where it is sourced. Why it matters for the final feel.]', 'image_keywords' => ['materials', 'texture']], - ['title' => 'dimensions', 'body' => '[Size, weight, fit notes. Numbers people will actually want before buying.]', 'image_keywords' => ['measurement', 'detail']], - ['title' => 'how it performs', 'body' => '[Key performance number. Battery life, run time, hold strength, whatever fits.]', 'image_keywords' => ['performance', 'test']], - ['title' => "what's in the box", 'body' => '[List items: product, accessories, manual, etc.]', 'image_keywords' => ['unboxing', 'box']], - ['title' => 'order yours', 'body' => 'Link in bio. Ships [timeframe].', 'image_keywords' => ['shipping', 'parcel']], - ], - ], - [ - 'slug' => 'flash_sale_carousel', - 'category' => 'promotion', - 'name' => 'Flash sale', - 'description' => 'Promote a limited-time sale across slides.', - 'content' => "[Discount]% off for the next [hours] hours at {{brand_name}}. Read every slide so you don't miss it.", - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'flash sale is on', 'body' => '[Discount]% off until [end date and time]. No code needed.', 'image_keywords' => ['sale', 'tag']], - ['title' => "what's included", 'body' => '[Categories on sale, exclusions if any. Be honest about what is not included.]', 'image_keywords' => ['products', 'shop']], - ['title' => 'most loved picks', 'body' => '[Two or three bestsellers people grab first when sales drop.]', 'image_keywords' => ['favorites', 'shelf']], - ['title' => 'shop before it ends', 'body' => 'Link in bio. Once stock is out, it is out.', 'image_keywords' => ['phone', 'cart']], - ], - ], - [ - 'slug' => 'bundle_deal_carousel', - 'category' => 'promotion', - 'name' => 'Bundle deal carousel', - 'description' => 'Explain a bundle offer slide by slide.', - 'content' => 'Three things, one price. Save [amount] when you buy them together at {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'the bundle', 'body' => '[Brief description of what is in the bundle and the total savings.]', 'image_keywords' => ['bundle', 'box']], - ['title' => 'item one', 'body' => '[First item in the bundle and what it does on its own.]', 'image_keywords' => ['product', 'one']], - ['title' => 'item two', 'body' => '[Second item and why it pairs with the first.]', 'image_keywords' => ['product', 'two']], - ['title' => 'item three', 'body' => '[Third item. The one that ties the bundle together.]', 'image_keywords' => ['product', 'three']], - ['title' => 'grab the bundle', 'body' => 'Save [amount]. Available while stock lasts.', 'image_keywords' => ['bag', 'shopping']], - ], - ], - [ - 'slug' => 'first_order_discount_carousel', - 'category' => 'promotion', - 'name' => 'First order discount', - 'description' => 'Welcome new customers with a first-order discount.', - 'content' => 'New here? Use code [CODE] for [discount]% off your first order at {{brand_name}}.', - 'image_count' => 3, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'welcome offer', 'body' => '[Discount]% off your first order. Code: [CODE]. Good for [duration].', 'image_keywords' => ['welcome', 'gift']], - ['title' => 'what people start with', 'body' => '[One or two products that are good entry points for new customers.]', 'image_keywords' => ['bestseller', 'product']], - ['title' => 'how to use it', 'body' => 'Add to cart, paste [CODE] at checkout. Link in bio.', 'image_keywords' => ['checkout', 'phone']], - ], - ], - [ - 'slug' => 'free_shipping_carousel', - 'category' => 'promotion', - 'name' => 'Free shipping weekend', - 'description' => 'Promote a limited free shipping window.', - 'content' => 'Free shipping at {{brand_name}} this weekend only. No minimum.', - 'image_count' => 3, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'free shipping weekend', 'body' => 'From [Friday] to [Sunday]. No code needed, no order minimum.', 'image_keywords' => ['shipping', 'box']], - ['title' => 'where we ship', 'body' => '[Regions or countries included. Note any exclusions clearly.]', 'image_keywords' => ['map', 'globe']], - ['title' => 'shop the weekend', 'body' => 'Tap the link in bio before [Sunday] midnight [timezone].', 'image_keywords' => ['cart', 'phone']], - ], - ], - [ - 'slug' => 'beginner_guide_carousel', - 'category' => 'educational', - 'name' => 'Beginner guide carousel', - 'description' => 'Teach a topic from zero to first usable result.', - 'content' => '[Topic] for absolute beginners. Save this for later. 👇', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'start here', 'body' => 'If [topic] feels overwhelming, this is the version that helped me when I was new.', 'image_keywords' => ['beginner', 'notes']], - ['title' => 'what it actually is', 'body' => '[Plain definition. Skip jargon. One sentence is enough.]', 'image_keywords' => ['concept', 'sketch']], - ['title' => 'why people care', 'body' => '[The concrete reason a beginner would bother learning this.]', 'image_keywords' => ['question', 'curious']], - ['title' => 'first thing to try', 'body' => '[A small, specific action they can take in under 10 minutes.]', 'image_keywords' => ['hands', 'desk']], - ['title' => 'common mistake', 'body' => '[The one trap most beginners fall into. Be specific.]', 'image_keywords' => ['mistake', 'fix']], - ['title' => 'where to go next', 'body' => '[A book, channel, or {{brand_name}} resource for the next step.]', 'image_keywords' => ['library', 'resource']], - ], - ], - [ - 'slug' => 'common_mistakes_carousel', - 'category' => 'educational', - 'name' => 'Common mistakes', - 'description' => 'Highlight common mistakes and how to fix them.', - 'content' => '5 mistakes I see all the time with [topic]. Number 3 is the one I had to learn the hard way.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'the mistakes', 'body' => 'Five things people get wrong with [topic], and what to do instead.', 'image_keywords' => ['mistake', 'pen']], - ['title' => 'mistake 1', 'body' => '[First mistake. Then the fix in one sentence.]', 'image_keywords' => ['error', 'paper']], - ['title' => 'mistake 2', 'body' => '[Second mistake and the fix.]', 'image_keywords' => ['confused', 'desk']], - ['title' => 'mistake 3', 'body' => '[Third mistake. The one that surprises people.]', 'image_keywords' => ['surprised', 'thought']], - ['title' => 'mistake 4', 'body' => '[Fourth mistake and the fix.]', 'image_keywords' => ['process', 'workspace']], - ['title' => 'mistake 5', 'body' => '[Final mistake. End with what you would do instead.]', 'image_keywords' => ['solution', 'check']], - ], - ], - [ - 'slug' => 'glossary_carousel', - 'category' => 'educational', - 'name' => 'Glossary carousel', - 'description' => 'Define five terms from your industry in plain language.', - 'content' => '5 [industry] terms explained without the jargon. Save this for later.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'jargon, decoded', 'body' => 'Five [industry] words people use as if everyone already knows them.', 'image_keywords' => ['dictionary', 'book']], - ['title' => '[term 1]', 'body' => '[Plain definition. One example sentence.]', 'image_keywords' => ['letters', 'text']], - ['title' => '[term 2]', 'body' => '[Plain definition. One example sentence.]', 'image_keywords' => ['letters', 'paper']], - ['title' => '[term 3]', 'body' => '[Plain definition. One example sentence.]', 'image_keywords' => ['note', 'pen']], - ['title' => '[term 4]', 'body' => '[Plain definition. One example sentence.]', 'image_keywords' => ['definition', 'page']], - ['title' => '[term 5]', 'body' => '[Plain definition. One example sentence.]', 'image_keywords' => ['glossary', 'open book']], - ], - ], - [ - 'slug' => 'step_by_step_tutorial_carousel', - 'category' => 'educational', - 'name' => 'Step by step tutorial', - 'description' => 'Walk through a small how-to in clear steps.', - 'content' => 'How to [task] in [number] steps. Save it so you have it next time.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'what you need', 'body' => '[List the tools or supplies. Keep it short.]', 'image_keywords' => ['tools', 'supplies']], - ['title' => 'step 1', 'body' => '[First step. Specific action, not a goal.]', 'image_keywords' => ['hands', 'work']], - ['title' => 'step 2', 'body' => '[Second step. What it should look like before moving on.]', 'image_keywords' => ['progress', 'desk']], - ['title' => 'step 3', 'body' => '[Third step. Mention the most common slip-up here.]', 'image_keywords' => ['focus', 'detail']], - ['title' => 'done', 'body' => '[What the finished result should look like. One photo idea.]', 'image_keywords' => ['finished', 'result']], - ], - ], - [ - 'slug' => 'team_intro_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Meet the team', - 'description' => 'Introduce team members one slide at a time.', - 'content' => 'The faces behind {{brand_name}}. Swipe to meet the people who make it work.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'the team', 'body' => "We're [number] people across [locations]. Here's who does what.", 'image_keywords' => ['team', 'office']], - ['title' => '[name 1]', 'body' => '[Role. One thing they own and one thing they like outside work.]', 'image_keywords' => ['portrait', 'work']], - ['title' => '[name 2]', 'body' => '[Role. One detail that shows their personality, not just their job title.]', 'image_keywords' => ['portrait', 'desk']], - ['title' => '[name 3]', 'body' => '[Role. Something specific they did this month.]', 'image_keywords' => ['portrait', 'studio']], - ['title' => 'say hi', 'body' => 'DMs are open. We answer them ourselves.', 'image_keywords' => ['phone', 'chat']], - ], - ], - [ - 'slug' => 'workspace_tour_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Workspace tour', - 'description' => 'Tour your studio, kitchen, or office across slides.', - 'content' => 'A tour of where {{brand_name}} actually gets made. Less polished than you think.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'where it happens', 'body' => '[Location, size, what kind of space it is in one sentence.]', 'image_keywords' => ['studio', 'workshop']], - ['title' => 'the workbench', 'body' => '[What lives on the main bench or desk most days.]', 'image_keywords' => ['workbench', 'tools']], - ['title' => 'the corner nobody sees', 'body' => '[Honest detail: a messy shelf, a wall of sticky notes, the coffee station.]', 'image_keywords' => ['corner', 'mess']], - ['title' => 'the favorite spot', 'body' => '[The chair, the window, the light that makes the day better.]', 'image_keywords' => ['light', 'window']], - ['title' => 'come back soon', 'body' => 'More peeks coming. Follow {{brand_name}} for the next one.', 'image_keywords' => ['camera', 'door']], - ], - ], - [ - 'slug' => 'a_day_in_the_life_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'A day in the life', - 'description' => 'Show one workday from morning to evening.', - 'content' => 'A real day at {{brand_name}}, hour by hour. Not the highlight reel.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => '7:30am', 'body' => '[How the day actually starts. Coffee, walk, inbox, whatever it is.]', 'image_keywords' => ['morning', 'coffee']], - ['title' => '9:00am', 'body' => '[First thing on the work calendar. Be specific about what gets done.]', 'image_keywords' => ['desk', 'laptop']], - ['title' => '12:30pm', 'body' => '[Lunch. Where, with who, or alone with a podcast.]', 'image_keywords' => ['lunch', 'food']], - ['title' => '2:00pm', 'body' => '[Afternoon block. The thing that takes the most focus that day.]', 'image_keywords' => ['focus', 'work']], - ['title' => '5:30pm', 'body' => '[Wrapping up. What the last task usually is before signing off.]', 'image_keywords' => ['evening', 'office']], - ['title' => 'after hours', 'body' => '[How the day ends. Run, dinner, kids, reading, whatever is true.]', 'image_keywords' => ['sunset', 'home']], - ], - ], - [ - 'slug' => 'mistakes_we_made_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Mistakes we made', - 'description' => 'Share three real mistakes and what you learned.', - 'content' => '3 things we got wrong this year at {{brand_name}}. Sharing because hiding it would feel weird.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'why post this', 'body' => 'Wins get plenty of attention. The misses are usually where the lessons live.', 'image_keywords' => ['notebook', 'writing']], - ['title' => 'mistake 1', 'body' => '[What we tried. Why it did not work. What we did next.]', 'image_keywords' => ['error', 'desk']], - ['title' => 'mistake 2', 'body' => '[The second one. Be honest about the cost, in money or time.]', 'image_keywords' => ['budget', 'paper']], - ['title' => "mistake 3 + what's next", 'body' => '[Third mistake and one thing changing because of it.]', 'image_keywords' => ['plan', 'reset']], - ], - ], - [ - 'slug' => 'customer_story_carousel', - 'category' => 'testimonial', - 'name' => 'Customer story', - 'description' => 'Tell a single customer story across the slides.', - 'content' => "A story from one of {{brand_name}}'s customers. Posted with their permission.", - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'meet [name]', 'body' => '[Name, what they do, where they are. Two short sentences.]', 'image_keywords' => ['portrait', 'person']], - ['title' => 'the problem', 'body' => '[The situation before they used {{brand_name}}. Specific, not abstract.]', 'image_keywords' => ['problem', 'thinking']], - ['title' => 'what they tried', 'body' => '[How they found {{brand_name}} and what their first use looked like.]', 'image_keywords' => ['discover', 'try']], - ['title' => 'what changed', 'body' => '[The result. A number if you have one, a story if you do not.]', 'image_keywords' => ['result', 'change']], - ['title' => 'in their words', 'body' => '"[Direct quote from the customer. Short and real.]"', 'image_keywords' => ['quote', 'speech']], - ], - ], - [ - 'slug' => 'three_reviews_carousel', - 'category' => 'testimonial', - 'name' => 'Three reviews carousel', - 'description' => 'Pull three real reviews into a swipeable post.', - 'content' => 'Three reviews from real customers this month at {{brand_name}}.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'what people are saying', 'body' => 'Three unedited quotes from this month. Full names withheld where requested.', 'image_keywords' => ['stars', 'review']], - ['title' => 'review 1', 'body' => '"[Direct customer quote.]", [first name, location]', 'image_keywords' => ['speech', 'quote']], - ['title' => 'review 2', 'body' => '"[Direct customer quote.]", [first name, location]', 'image_keywords' => ['feedback', 'note']], - ['title' => 'review 3', 'body' => '"[Direct customer quote.]", [first name, location]', 'image_keywords' => ['testimonial', 'paper']], - ], - ], - [ - 'slug' => 'before_after_results_carousel', - 'category' => 'testimonial', - 'name' => 'Before and after results', - 'description' => 'Show a customer outcome in before and after slides.', - 'content' => 'A real result from a customer using [product/service] at {{brand_name}}. Same person, [time period] apart.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'the starting point', 'body' => '[Where they were when they started. The honest version, not the shiny one.]', 'image_keywords' => ['before', 'start']], - ['title' => 'what they did', 'body' => '[What they used and how often. Be specific about the routine.]', 'image_keywords' => ['process', 'routine']], - ['title' => 'the result', 'body' => '[Where they are now. Numbers if relevant, photo if visual.]', 'image_keywords' => ['after', 'result']], - ['title' => 'in their words', 'body' => '"[A short quote on what surprised them most.]"', 'image_keywords' => ['quote', 'smile']], - ], - ], - [ - 'slug' => 'industry_myth_busting_carousel', - 'category' => 'industry_tip', - 'name' => 'Industry myth busting', - 'description' => 'Bust three myths about your industry.', - 'content' => '3 things people still believe about [industry] that are not true.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'myths, picked apart', 'body' => 'Three [industry] beliefs that get repeated everywhere and still miss the mark.', 'image_keywords' => ['question', 'thinking']], - ['title' => 'myth 1', 'body' => 'Myth: [common belief]. Truth: [what is actually the case, with one detail].', 'image_keywords' => ['truth', 'note']], - ['title' => 'myth 2', 'body' => 'Myth: [common belief]. Truth: [the correction in one sentence].', 'image_keywords' => ['fact', 'paper']], - ['title' => 'myth 3', 'body' => 'Myth: [common belief]. Truth: [the correction]. The why is in the comments.', 'image_keywords' => ['comment', 'phone']], - ], - ], - [ - 'slug' => 'industry_trend_carousel', - 'category' => 'industry_tip', - 'name' => 'Industry trend carousel', - 'description' => 'Walk through a trend shaping the industry this year.', - 'content' => "What's actually moving in [industry] this year, in plain language.", - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'the trend', 'body' => '[Name the trend in plain words. One sentence on what it is.]', 'image_keywords' => ['trend', 'graph']], - ['title' => 'why now', 'body' => '[The specific cause. A regulation, a tech shift, a behavior change.]', 'image_keywords' => ['cause', 'news']], - ['title' => 'who it hits first', 'body' => '[The audience or company type that feels it before everyone else.]', 'image_keywords' => ['audience', 'people']], - ['title' => 'what to do', 'body' => '[One concrete thing to try this quarter, not a vague principle.]', 'image_keywords' => ['action', 'plan']], - ['title' => 'one number to watch', 'body' => '[A specific metric, with a source.]', 'image_keywords' => ['metric', 'data']], - ], - ], - [ - 'slug' => 'pro_tip_carousel', - 'category' => 'industry_tip', - 'name' => 'Pro tip carousel', - 'description' => 'Share a single deep pro tip with context and steps.', - 'content' => "One thing I'd tell my younger self about [topic]. Save this if it helps.", - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'the tip', 'body' => '[The one-line version. Short enough to remember.]', 'image_keywords' => ['tip', 'note']], - ['title' => 'why it works', 'body' => '[The reason. Use a small example, not a big claim.]', 'image_keywords' => ['idea', 'thought']], - ['title' => 'how to use it', 'body' => '[The steps. Three at most. Specific.]', 'image_keywords' => ['steps', 'list']], - ['title' => 'one thing to avoid', 'body' => '[The one mistake people make when applying this tip.]', 'image_keywords' => ['warning', 'caution']], - ], - ], - [ - 'slug' => 'event_announcement_carousel', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Announce an upcoming event with the key details.', - 'content' => "We're hosting [Event Name] on [date]. Everything you need to know is in the slides.", - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => '[event name]', 'body' => '[Date, location or online, who it is for in one line.]', 'image_keywords' => ['event', 'invite']], - ['title' => "what's planned", 'body' => '[The agenda in plain bullets, not marketing speak.]', 'image_keywords' => ['agenda', 'schedule']], - ['title' => "who's speaking", 'body' => '[Names and one-line bios. No more than three.]', 'image_keywords' => ['speakers', 'panel']], - ['title' => 'how to join', 'body' => '[Free or paid, link, deadline if any. Be specific.]', 'image_keywords' => ['ticket', 'register']], - ['title' => 'reserve your spot', 'body' => '[Final reminder + the link in bio call to action.]', 'image_keywords' => ['phone', 'tap']], - ], - ], - [ - 'slug' => 'event_speakers_carousel', - 'category' => 'event', - 'name' => 'Event speakers reveal', - 'description' => 'Reveal speakers one slide each.', - 'content' => 'Speakers for [Event Name]. Tickets are open at {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'speakers, revealed', 'body' => 'The lineup for [Event Name] on [date]. Swipe to meet them.', 'image_keywords' => ['lineup', 'stage']], - ['title' => '[speaker 1]', 'body' => '[Name, role. The one thing they will talk about.]', 'image_keywords' => ['portrait', 'speaker']], - ['title' => '[speaker 2]', 'body' => '[Name, role. Their session topic in one line.]', 'image_keywords' => ['portrait', 'mic']], - ['title' => '[speaker 3]', 'body' => '[Name, role. What attendees will leave with.]', 'image_keywords' => ['portrait', 'panel']], - ['title' => 'tickets in bio', 'body' => '[Date, location, registration link.]', 'image_keywords' => ['ticket', 'register']], - ], - ], - [ - 'slug' => 'workshop_invitation_carousel', - 'category' => 'event', - 'name' => 'Workshop invitation', - 'description' => 'Invite people to a hands-on workshop.', - 'content' => "Hands-on workshop at {{brand_name}} on [date]. Limited seats. Here's what's inside.", - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'workshop on [date]', 'body' => '[Topic in one line. Online or in person, with location and time.]', 'image_keywords' => ['workshop', 'class']], - ['title' => "what you'll do", 'body' => '[Three concrete activities. Use verbs, not adjectives.]', 'image_keywords' => ['hands', 'making']], - ['title' => "what you'll leave with", 'body' => '[The output: a finished thing, a draft, a decision, a plan.]', 'image_keywords' => ['notebook', 'result']], - ['title' => 'reserve a seat', 'body' => '[Number of seats left, price if any, link in bio.]', 'image_keywords' => ['chair', 'register']], - ], - ], - [ - 'slug' => 'this_or_that_carousel', - 'category' => 'engagement', - 'name' => 'This or that', - 'description' => 'Ask followers a series of either-or questions.', - 'content' => 'This or that, [topic] edition. Tell me your picks in the comments.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'pick one', 'body' => 'Five quick choices. Comment your answers in order.', 'image_keywords' => ['choice', 'fork']], - ['title' => '[option a] or [option b]', 'body' => '[Brief context if needed.]', 'image_keywords' => ['split', 'options']], - ['title' => '[option c] or [option d]', 'body' => '[Brief context if needed.]', 'image_keywords' => ['versus', 'choice']], - ['title' => '[option e] or [option f]', 'body' => '[Brief context if needed.]', 'image_keywords' => ['compare', 'pick']], - ['title' => 'your turn', 'body' => 'Drop your answers below. I read every comment.', 'image_keywords' => ['comment', 'phone']], - ], - ], - [ - 'slug' => 'unpopular_opinion_carousel', - 'category' => 'engagement', - 'name' => 'Unpopular opinion', - 'description' => 'Share a real opinion and invite disagreement.', - 'content' => 'An unpopular take on [topic]. Tell me where I am wrong in the comments.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'unpopular take', 'body' => '[The opinion in one short, clear sentence.]', 'image_keywords' => ['opinion', 'speech']], - ['title' => 'why I think this', 'body' => '[The reason. A small story or a number, not just feelings.]', 'image_keywords' => ['reason', 'thinking']], - ['title' => 'where I might be wrong', 'body' => '[Honest about the weakest part of the argument.]', 'image_keywords' => ['doubt', 'question']], - ['title' => 'tell me', 'body' => 'Agree, disagree, mixed, drop it in the comments.', 'image_keywords' => ['comment', 'discussion']], - ], - ], - [ - 'slug' => 'fill_in_the_blank_carousel', - 'category' => 'engagement', - 'name' => 'Fill in the blank', - 'description' => 'Prompt followers with three blanks to complete.', - 'content' => 'Fill in the blanks. I want to read your answers.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'fill in the blanks', 'body' => 'Three quick prompts about [topic]. Comment your answers in order.', 'image_keywords' => ['blank', 'pen']], - ['title' => 'prompt 1', 'body' => 'The best [thing] I [verb] this year was ____.', 'image_keywords' => ['idea', 'thought']], - ['title' => 'prompt 2', 'body' => 'The thing I want to do more of in [topic] is ____.', 'image_keywords' => ['plan', 'goal']], - ['title' => 'prompt 3', 'body' => 'One person who taught me about [topic] is ____.', 'image_keywords' => ['mentor', 'people']], - ], - ], - [ - 'slug' => 'q_and_a_carousel', - 'category' => 'engagement', - 'name' => 'Q and A carousel', - 'description' => 'Answer five real questions from your audience.', - 'content' => 'You asked, I answered. Five real questions from the DMs.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'questions answered', 'body' => 'Pulled five from this week. Anonymized where I needed to.', 'image_keywords' => ['questions', 'mail']], - ['title' => 'q1', 'body' => 'Q: [paraphrased question]. A: [answer in one or two sentences].', 'image_keywords' => ['answer', 'note']], - ['title' => 'q2', 'body' => 'Q: [paraphrased question]. A: [answer].', 'image_keywords' => ['reply', 'speech']], - ['title' => 'q3', 'body' => 'Q: [paraphrased question]. A: [answer].', 'image_keywords' => ['question', 'mark']], - ['title' => 'q4', 'body' => 'Q: [paraphrased question]. A: [answer].', 'image_keywords' => ['chat', 'bubble']], - ['title' => 'q5', 'body' => 'Q: [paraphrased question]. A: [answer]. Drop more in the comments.', 'image_keywords' => ['comments', 'phone']], - ], - ], -]; diff --git a/templates/en/instagram_feed.php b/templates/en/instagram_feed.php deleted file mode 100644 index 2112e8c0..00000000 --- a/templates/en/instagram_feed.php +++ /dev/null @@ -1,362 +0,0 @@ - 'limited_time_offer_feed', - 'category' => 'promotion', - 'name' => 'Limited-time offer', - 'description' => 'Promote a time-sensitive deal on Instagram Feed.', - 'content' => "⏰ Don't miss it. {{brand_name}} is offering [discount]% off [product/service], today only.\n\nTap the link in bio to grab yours before it's gone.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'offer', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'team_behind_the_scenes_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Team behind the scenes', - 'description' => 'Humanize your brand by showing the team at work.', - 'content' => "This is what a typical day at {{brand_name}} looks like. 👀\n\nWe believe great work happens when people feel at home. Here's a peek behind the curtain.\n\n#{{brand_name}} #BehindTheScenes", - 'image_count' => 1, - 'image_keywords' => ['office', 'team', 'workspace'], - 'slides' => null, - ], - - // Product launch - [ - 'slug' => 'new_product_drop_feed', - 'category' => 'product_launch', - 'name' => 'New product drop', - 'description' => 'Announce a fresh product release on the feed.', - 'content' => "It's here. [Product name] just landed at {{brand_name}}.\n\nWe spent [months/weeks] on this one. Every detail was tested by the team before we let it out the door.\n\nTap the link in bio to be one of the first to try it.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'pre_order_announcement_feed', - 'category' => 'product_launch', - 'name' => 'Pre-order announcement', - 'description' => 'Open pre-orders for an upcoming product.', - 'content' => "Pre-orders are open. [Product name] ships [date].\n\nThe first batch is limited to [number] units. Once they're claimed, the next run won't ship until [later date].\n\nReserve yours through the link in bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'package', 'box'], - 'slides' => null, - ], - [ - 'slug' => 'feature_highlight_launch_feed', - 'category' => 'product_launch', - 'name' => 'Feature highlight launch', - 'description' => 'Spotlight one specific feature of a new product.', - 'content' => "The one thing we're most proud of in [product name]: [specific feature].\n\nIt took [number] prototypes to get this right. The early testers told us it changed how they [use case], so we kept iterating until it felt obvious.\n\nSee it in action through the link in bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'detail', 'closeup'], - 'slides' => null, - ], - [ - 'slug' => 'product_restock_feed', - 'category' => 'product_launch', - 'name' => 'Product restock', - 'description' => 'Announce a return-to-stock for a popular item.', - 'content' => "Back in stock. [Product name] sold out in [time period] last time, so we made more.\n\nIf you missed it before, now's the moment. Stock is limited again, and we expect another quick run.\n\nGrab yours via the link in bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'shelf', 'inventory'], - 'slides' => null, - ], - - // Promotion - [ - 'slug' => 'flash_sale_feed', - 'category' => 'promotion', - 'name' => 'Flash sale', - 'description' => 'Drive urgency with a short flash sale.', - 'content' => "Flash sale. [Discount]% off everything for the next [hours] hours.\n\nNo code needed at checkout. The discount is already applied across the site.\n\nLink in bio. Set a timer.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'bundle_deal_feed', - 'category' => 'promotion', - 'name' => 'Bundle deal', - 'description' => 'Promote a multi-product bundle offer.', - 'content' => "Buy [item A] and [item B] together, save [amount].\n\nIt's the same combo our team uses every week, so we put it together as a set. Cheaper than buying each one on its own.\n\nLink in bio.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'products', 'gift'], - 'slides' => null, - ], - [ - 'slug' => 'free_shipping_feed', - 'category' => 'promotion', - 'name' => 'Free shipping', - 'description' => 'Announce free shipping for a limited window.', - 'content' => "Free shipping on every order this week.\n\nNo minimum, no code, no fine print at the bottom you have to squint to read. Just pick what you want and we'll cover the delivery.\n\nLink in bio. Ends [day].", - 'image_count' => 1, - 'image_keywords' => ['shipping', 'package', 'delivery'], - 'slides' => null, - ], - [ - 'slug' => 'first_order_discount_feed', - 'category' => 'promotion', - 'name' => 'First order discount', - 'description' => 'Welcome new customers with a first-purchase discount.', - 'content' => "First time at {{brand_name}}? Take [discount]% off your first order.\n\nUse code [CODE] at checkout. Works on anything in the shop, including the [bestseller name] people keep asking us about.\n\nLink in bio.", - 'image_count' => 1, - 'image_keywords' => ['welcome', 'shop', 'discount'], - 'slides' => null, - ], - - // Educational - [ - 'slug' => 'quick_how_to_tip_feed', - 'category' => 'educational', - 'name' => 'Quick how-to tip', - 'description' => 'Share a single actionable tip from your niche.', - 'content' => "Here's a small thing that makes [task] easier: [tip in one sentence].\n\nWe started doing this after [reason or story]. Saved us [time/money/effort] within a week.\n\nSave this post for later. Link in bio for the full guide.", - 'image_count' => 1, - 'image_keywords' => ['notebook', 'desk', 'work'], - 'slides' => null, - ], - [ - 'slug' => 'common_mistake_feed', - 'category' => 'educational', - 'name' => 'Common mistake', - 'description' => 'Call out a frequent mistake and the fix.', - 'content' => "The mistake we see most often with [topic]: [the mistake].\n\nIt's easy to do. Most people don't realize it costs them [consequence] until someone points it out.\n\nThe fix is simple: [the fix]. Try it this week and see what changes.", - 'image_count' => 1, - 'image_keywords' => ['warning', 'thinking', 'desk'], - 'slides' => null, - ], - [ - 'slug' => 'myth_vs_truth_feed', - 'category' => 'educational', - 'name' => 'Myth vs truth', - 'description' => 'Debunk a common myth in your industry.', - 'content' => "Myth: [common belief about your industry].\n\nTruth: [the reality, with one supporting detail].\n\nWe used to believe the myth too. Then we tracked it for [time period] and the data said otherwise. Save this if you've heard the same thing.", - 'image_count' => 1, - 'image_keywords' => ['question', 'thinking', 'idea'], - 'slides' => null, - ], - [ - 'slug' => 'glossary_term_feed', - 'category' => 'educational', - 'name' => 'Glossary term explained', - 'description' => 'Explain one industry term in plain language.', - 'content' => "[Term]: what it actually means.\n\nMost guides explain it with more jargon. Here's the plain version: [one-sentence definition].\n\nA real example from our work: [short example]. Save the post if you've been nodding through meetings without asking.", - 'image_count' => 1, - 'image_keywords' => ['book', 'glossary', 'study'], - 'slides' => null, - ], - - // Behind the scenes - [ - 'slug' => 'workspace_tour_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Workspace tour', - 'description' => 'Show where the work happens.', - 'content' => "Where the work happens.\n\nThis is [room/space] at {{brand_name}}. The plant in the corner has survived three office moves. The whiteboard hasn't been wiped since [month].\n\nNot polished, but it's ours.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'desk', 'studio'], - 'slides' => null, - ], - [ - 'slug' => 'how_its_made_feed', - 'category' => 'behind_the_scenes', - 'name' => 'How it is made', - 'description' => 'Show one step of your production process.', - 'content' => "This is step [number] of how we make [product].\n\nIt takes about [time] and we do it by hand. No shortcuts here, mostly because we tried the shortcut once and it ruined a whole batch.\n\nMore on the process in the link in bio.", - 'image_count' => 1, - 'image_keywords' => ['craft', 'making', 'workshop'], - 'slides' => null, - ], - [ - 'slug' => 'team_member_intro_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Team member intro', - 'description' => 'Introduce a single team member.', - 'content' => "Meet [name], our [role] at {{brand_name}}.\n\n[Name] joined us [time ago] and runs [area]. Outside work, you'll find them [hobby or interest].\n\nIf you've emailed support recently, there's a good chance [name] wrote back.", - 'image_count' => 1, - 'image_keywords' => ['portrait', 'team', 'person'], - 'slides' => null, - ], - [ - 'slug' => 'a_day_in_the_life_feed', - 'category' => 'behind_the_scenes', - 'name' => 'A day in the life', - 'description' => 'Walk through a normal day at the company.', - 'content' => "A normal Tuesday at {{brand_name}}.\n\nMornings are quiet, mostly emails and one stand-up. Afternoons get loud once [activity] starts. By 5pm someone has usually broken something and someone else has fixed it.\n\nThat's the whole job, honestly.", - 'image_count' => 1, - 'image_keywords' => ['office', 'work', 'coffee'], - 'slides' => null, - ], - - // Testimonial - [ - 'slug' => 'customer_quote_feed', - 'category' => 'testimonial', - 'name' => 'Customer quote', - 'description' => 'Share a single strong customer quote.', - 'content' => "\"[Customer quote in their own words].\", [Customer name], [city or role]\n\nThis came in last week and we had to share it. Thanks [first name].\n\nIf {{brand_name}} has helped you with [outcome], we'd love to hear about it. Reply or DM us.", - 'image_count' => 1, - 'image_keywords' => ['quote', 'happy', 'customer'], - 'slides' => null, - ], - [ - 'slug' => 'before_after_result_feed', - 'category' => 'testimonial', - 'name' => 'Before and after result', - 'description' => 'Highlight a real customer transformation.', - 'content' => "Before: [starting point].\nAfter: [result with a number if possible].\n\n[Customer name] worked with us for [time period]. The change wasn't overnight, but you can see where things tipped.\n\nLink in bio if you want a similar look.", - 'image_count' => 1, - 'image_keywords' => ['transformation', 'result', 'progress'], - 'slides' => null, - ], - [ - 'slug' => 'star_rating_review_feed', - 'category' => 'testimonial', - 'name' => 'Star rating review', - 'description' => 'Spotlight a recent five-star review.', - 'content' => "★★★★★\n\n\"[Pulled review text, two to three sentences].\"\n\n[Reviewer first name] left this one yesterday. We read every review that comes in, the kind ones and the rough ones.\n\nLeave yours in the link in bio.", - 'image_count' => 1, - 'image_keywords' => ['stars', 'review', 'rating'], - 'slides' => null, - ], - [ - 'slug' => 'case_study_snapshot_feed', - 'category' => 'testimonial', - 'name' => 'Case study snapshot', - 'description' => 'Tease a longer customer success story.', - 'content' => "How [customer or company] used {{brand_name}} to [outcome].\n\nIn [time period], they went from [starting point] to [result]. The full breakdown covers what they tried first and what finally clicked.\n\nLink in bio for the case study.", - 'image_count' => 1, - 'image_keywords' => ['case study', 'meeting', 'results'], - 'slides' => null, - ], - - // Industry tip - [ - 'slug' => 'one_tool_we_use_feed', - 'category' => 'industry_tip', - 'name' => 'One tool we use', - 'description' => 'Recommend a tool you actually use.', - 'content' => "One tool we use every week: [tool name].\n\nWe tried [number] alternatives before settling on this one. The thing that won us over was [specific feature], not the marketing on the homepage.\n\nNot sponsored. Just useful.", - 'image_count' => 1, - 'image_keywords' => ['tools', 'software', 'laptop'], - 'slides' => null, - ], - [ - 'slug' => 'industry_trend_take_feed', - 'category' => 'industry_tip', - 'name' => 'Industry trend take', - 'description' => 'Give an honest opinion on a current trend.', - 'content' => "Everyone in [industry] is talking about [trend].\n\nHonest take: it's useful for [use case], not for [other use case]. We tested it on a small project before committing, and that's the version we'd recommend.\n\nWhat's been your experience? Tell us in the comments.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry', 'analysis'], - 'slides' => null, - ], - [ - 'slug' => 'pricing_advice_feed', - 'category' => 'industry_tip', - 'name' => 'Pricing advice', - 'description' => 'Share a pricing lesson from experience.', - 'content' => "What we got wrong about pricing: [the mistake].\n\nWe undercharged for [period] before someone pointed out our numbers didn't add up. Raised prices [percent], lost [number] customers, kept the rest, made more.\n\nIf you're stuck on this too, the link in bio has our pricing breakdown.", - 'image_count' => 1, - 'image_keywords' => ['money', 'price', 'calculator'], - 'slides' => null, - ], - [ - 'slug' => 'workflow_tip_feed', - 'category' => 'industry_tip', - 'name' => 'Workflow tip', - 'description' => 'Share a small workflow improvement.', - 'content' => "Small workflow change that saved us hours: [the change].\n\nBefore, [old way]. After, [new way]. Took about a week to get used to and we haven't gone back.\n\nIf you try it, let us know how it lands.", - 'image_count' => 1, - 'image_keywords' => ['workflow', 'productivity', 'planner'], - 'slides' => null, - ], - - // Event - [ - 'slug' => 'event_announcement_feed', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Announce an upcoming event.', - 'content' => "Save the date.\n\n{{brand_name}} is hosting [event name] on [date] at [location or online].\n\nWe've got [speakers, format, or what to expect]. Spots are limited to [number] this time.\n\nRSVP through the link in bio.", - 'image_count' => 1, - 'image_keywords' => ['event', 'invitation', 'calendar'], - 'slides' => null, - ], - [ - 'slug' => 'webinar_invite_feed', - 'category' => 'event', - 'name' => 'Webinar invite', - 'description' => 'Promote an upcoming webinar.', - 'content' => "Free webinar: [topic]. [Date] at [time].\n\n[Host name] is going to walk through [main points] and then take live questions for the last [minutes].\n\nIf you can't make it, sign up anyway and we'll send the recording.\n\nLink in bio.", - 'image_count' => 1, - 'image_keywords' => ['webinar', 'laptop', 'presentation'], - 'slides' => null, - ], - [ - 'slug' => 'meetup_recap_feed', - 'category' => 'event', - 'name' => 'Meetup recap', - 'description' => 'Recap a recent in-person event.', - 'content' => "[Number] people, [city], one room.\n\nLast night's meetup brought together folks working in [field]. The best conversation of the night was about [topic], started over coffee and never really ended.\n\nThanks to everyone who came out. Next one is [date].", - 'image_count' => 1, - 'image_keywords' => ['meetup', 'crowd', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'live_stream_reminder_feed', - 'category' => 'event', - 'name' => 'Live stream reminder', - 'description' => 'Remind followers about an upcoming live stream.', - 'content' => "Going live [day] at [time].\n\nWe're talking [topic]. No script, just questions and whatever the chat throws at us.\n\nTurn on notifications so you don't miss it. Or don't, the replay will be on the grid afterward.", - 'image_count' => 1, - 'image_keywords' => ['live', 'broadcast', 'camera'], - 'slides' => null, - ], - - // Engagement - [ - 'slug' => 'this_or_that_feed', - 'category' => 'engagement', - 'name' => 'This or that', - 'description' => 'Ask a simple either/or question.', - 'content' => "[Option A] or [Option B]?\n\nWe argue about this in the office at least once a week. Curious which side wins here.\n\nVote in the comments. No wrong answer, but there's definitely a right one.", - 'image_count' => 1, - 'image_keywords' => ['choice', 'options', 'vote'], - 'slides' => null, - ], - [ - 'slug' => 'fill_in_the_blank_feed', - 'category' => 'engagement', - 'name' => 'Fill in the blank', - 'description' => 'Prompt followers with a fill-in-the-blank question.', - 'content' => "Finish the sentence: \"The first thing I do every morning is ___.\"\n\nWe asked the team and got answers from \"check Slack\" to \"avoid checking Slack.\" Curious where you land.\n\nDrop yours in the comments.", - 'image_count' => 1, - 'image_keywords' => ['question', 'morning', 'coffee'], - 'slides' => null, - ], - [ - 'slug' => 'comment_question_feed', - 'category' => 'engagement', - 'name' => 'Comment question', - 'description' => 'Ask an open question to spark comments.', - 'content' => "Question for the group: what's the best [topic-related thing] you've tried this year?\n\nWe're putting together a roundup and want real picks, not the same five everyone lists.\n\nDrop yours below. We'll share the favorites next week.", - 'image_count' => 1, - 'image_keywords' => ['conversation', 'community', 'chat'], - 'slides' => null, - ], - [ - 'slug' => 'tag_a_friend_feed', - 'category' => 'engagement', - 'name' => 'Tag a friend', - 'description' => 'Encourage tagging with a relatable scenario.', - 'content' => "Tag the friend who [relatable scenario].\n\nWe all have one. Maybe you are one. Either way, this post is for them.\n\nBonus points if they tag you back.", - 'image_count' => 1, - 'image_keywords' => ['friends', 'people', 'fun'], - 'slides' => null, - ], -]; diff --git a/templates/en/instagram_story.php b/templates/en/instagram_story.php deleted file mode 100644 index db153b58..00000000 --- a/templates/en/instagram_story.php +++ /dev/null @@ -1,362 +0,0 @@ - 'story_announcement', - 'category' => 'product_launch', - 'name' => 'Quick announcement', - 'description' => 'Drive attention to a new launch or update with a 24-hour story.', - 'content' => "Big news at {{brand_name}}.\n\nTap the link to see what's new.", - 'image_count' => 1, - 'image_keywords' => ['announcement', 'launch'], - 'slides' => null, - ], - [ - 'slug' => 'story_poll_question', - 'category' => 'engagement', - 'name' => 'Poll question', - 'description' => 'Use a story to ask a quick question and engage your audience.', - 'content' => "What matters most when you pick a [product/service]?\n\nTap to vote.", - 'image_count' => 1, - 'image_keywords' => ['question', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'story_flash_promo', - 'category' => 'promotion', - 'name' => 'Flash promo', - 'description' => 'Limited-time offer in story format with urgency.', - 'content' => "24 hours only.\n\n[Discount]% off at {{brand_name}}.\n\nSwipe up.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'urgency'], - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'story_product_drop', - 'category' => 'product_launch', - 'name' => 'New product drop', - 'description' => 'Announce a new product going live today.', - 'content' => "It's live.\n\n[Product name] just dropped.\n\nLink in bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'new'], - 'slides' => null, - ], - [ - 'slug' => 'story_feature_shipped', - 'category' => 'product_launch', - 'name' => 'Feature shipped', - 'description' => 'Tell followers about a new feature you just released.', - 'content' => "We just shipped [feature].\n\nGo try it.", - 'image_count' => 1, - 'image_keywords' => ['update', 'feature', 'app'], - 'slides' => null, - ], - [ - 'slug' => 'story_waitlist_open', - 'category' => 'product_launch', - 'name' => 'Waitlist open', - 'description' => 'Invite followers to join a waitlist.', - 'content' => "Waitlist is open.\n\n[Spots] spots left.\n\nLink in bio.", - 'image_count' => 1, - 'image_keywords' => ['waitlist', 'signup'], - 'slides' => null, - ], - [ - 'slug' => 'story_preorder_live', - 'category' => 'product_launch', - 'name' => 'Pre-order live', - 'description' => 'Drive pre-orders for an upcoming product.', - 'content' => "Pre-orders are open.\n\nShips [date].\n\nTap to claim yours.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product'], - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'story_weekend_sale', - 'category' => 'promotion', - 'name' => 'Weekend sale', - 'description' => 'Push a quick weekend sale.', - 'content' => "Weekend sale.\n\n[Discount]% off everything.\n\nEnds Sunday.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'weekend', 'discount'], - 'slides' => null, - ], - [ - 'slug' => 'story_code_drop', - 'category' => 'promotion', - 'name' => 'Discount code drop', - 'description' => 'Share a code your followers can use at checkout.', - 'content' => "Use [CODE] at checkout.\n\n[Discount]% off.\n\nGood until [date].", - 'image_count' => 1, - 'image_keywords' => ['coupon', 'code', 'discount'], - 'slides' => null, - ], - [ - 'slug' => 'story_last_chance', - 'category' => 'promotion', - 'name' => 'Last chance', - 'description' => 'Final reminder before a sale ends.', - 'content' => "Last chance.\n\n[Offer] ends at midnight.", - 'image_count' => 1, - 'image_keywords' => ['deadline', 'sale', 'urgent'], - 'slides' => null, - ], - [ - 'slug' => 'story_bundle_deal', - 'category' => 'promotion', - 'name' => 'Bundle deal', - 'description' => 'Promote a bundle at a lower price.', - 'content' => "Bundle deal.\n\n[Item A] + [Item B] for [price].\n\nTap to grab it.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'deal', 'product'], - 'slides' => null, - ], - - // educational - [ - 'slug' => 'story_quick_tip', - 'category' => 'educational', - 'name' => 'Quick tip', - 'description' => 'Share one short tip on the screen.', - 'content' => "Quick tip:\n\n[One short actionable tip].", - 'image_count' => 1, - 'image_keywords' => ['tip', 'advice', 'learning'], - 'slides' => null, - ], - [ - 'slug' => 'story_did_you_know', - 'category' => 'educational', - 'name' => 'Did you know', - 'description' => 'Surface a surprising fact.', - 'content' => "Did you know?\n\n[Surprising fact about your niche].", - 'image_count' => 1, - 'image_keywords' => ['fact', 'knowledge'], - 'slides' => null, - ], - [ - 'slug' => 'story_common_mistake', - 'category' => 'educational', - 'name' => 'Common mistake', - 'description' => 'Call out a mistake your audience tends to make.', - 'content' => "Stop doing [common mistake].\n\nDo [better approach] instead.", - 'image_count' => 1, - 'image_keywords' => ['mistake', 'advice', 'tip'], - 'slides' => null, - ], - [ - 'slug' => 'story_one_word_lesson', - 'category' => 'educational', - 'name' => 'One-word lesson', - 'description' => 'A single word followed by a short why.', - 'content' => "[One word].\n\nThat's the difference between [outcome A] and [outcome B].", - 'image_count' => 1, - 'image_keywords' => ['lesson', 'word', 'idea'], - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'story_workspace_peek', - 'category' => 'behind_the_scenes', - 'name' => 'Workspace peek', - 'description' => 'Quick shot of where the work happens.', - 'content' => "Where the work happens.\n\n[Short caption about your space].", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'desk', 'office'], - 'slides' => null, - ], - [ - 'slug' => 'story_meet_the_team', - 'category' => 'behind_the_scenes', - 'name' => 'Meet the team', - 'description' => 'Introduce a team member with one line.', - 'content' => "Meet [name].\n\n[Their role at {{brand_name}}].", - 'image_count' => 1, - 'image_keywords' => ['team', 'people', 'portrait'], - 'slides' => null, - ], - [ - 'slug' => 'story_in_progress', - 'category' => 'behind_the_scenes', - 'name' => 'In progress', - 'description' => 'Show something half-done.', - 'content' => "In progress.\n\n[What you are working on right now].", - 'image_count' => 1, - 'image_keywords' => ['process', 'work', 'progress'], - 'slides' => null, - ], - [ - 'slug' => 'story_packing_orders', - 'category' => 'behind_the_scenes', - 'name' => 'Packing orders', - 'description' => 'Show orders going out the door.', - 'content' => "Today's orders.\n\nThank you for trusting {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['packaging', 'orders', 'shipping'], - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'story_customer_quote', - 'category' => 'testimonial', - 'name' => 'Customer quote', - 'description' => 'Share a short customer quote on screen.', - 'content' => "\"[Short customer quote].\"\n\n- [Customer name]", - 'image_count' => 1, - 'image_keywords' => ['testimonial', 'review', 'quote'], - 'slides' => null, - ], - [ - 'slug' => 'story_review_screenshot', - 'category' => 'testimonial', - 'name' => 'Review screenshot', - 'description' => 'Repost a glowing review screenshot.', - 'content' => "Reviews like this make our week.\n\nThank you, [customer first name].", - 'image_count' => 1, - 'image_keywords' => ['review', 'screenshot', 'feedback'], - 'slides' => null, - ], - [ - 'slug' => 'story_before_after_user', - 'category' => 'testimonial', - 'name' => 'Customer before/after', - 'description' => 'Highlight a customer result.', - 'content' => '[Customer first name] went from [before] to [after] in [time].', - 'image_count' => 1, - 'image_keywords' => ['result', 'transformation', 'customer'], - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'story_industry_myth', - 'category' => 'industry_tip', - 'name' => 'Industry myth', - 'description' => 'Debunk a common belief in your space.', - 'content' => "Myth: [common belief].\n\nReality: [the truth].", - 'image_count' => 1, - 'image_keywords' => ['myth', 'industry', 'truth'], - 'slides' => null, - ], - [ - 'slug' => 'story_industry_stat', - 'category' => 'industry_tip', - 'name' => 'Industry stat', - 'description' => 'Drop a single stat that grabs attention.', - 'content' => "[Stat].\n\nThat's why we built {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['statistic', 'data', 'industry'], - 'slides' => null, - ], - [ - 'slug' => 'story_tool_we_use', - 'category' => 'industry_tip', - 'name' => 'Tool we use', - 'description' => 'Recommend a tool your audience can try.', - 'content' => "Tool we use every day:\n\n[Tool name].\n\nHere's why: [one short reason].", - 'image_count' => 1, - 'image_keywords' => ['tool', 'software', 'recommendation'], - 'slides' => null, - ], - [ - 'slug' => 'story_red_flag', - 'category' => 'industry_tip', - 'name' => 'Red flag', - 'description' => 'Warn followers about a red flag in your industry.', - 'content' => "Red flag in [industry]:\n\n[The warning sign to watch for].", - 'image_count' => 1, - 'image_keywords' => ['warning', 'industry', 'advice'], - 'slides' => null, - ], - - // event - [ - 'slug' => 'story_event_today', - 'category' => 'event', - 'name' => 'Event today', - 'description' => 'Last-minute reminder for a same-day event.', - 'content' => "Tonight.\n\n[Event name] at [time].\n\nTap for the link.", - 'image_count' => 1, - 'image_keywords' => ['event', 'reminder'], - 'slides' => null, - ], - [ - 'slug' => 'story_event_countdown', - 'category' => 'event', - 'name' => 'Event countdown', - 'description' => 'Build anticipation with a countdown.', - 'content' => "[X] days until [event name].\n\nReply GO to get the reminder.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'story_live_now', - 'category' => 'event', - 'name' => 'Live now', - 'description' => 'Tell followers you are live or onstage.', - 'content' => "Live now.\n\n[Topic or location].\n\nCome say hi.", - 'image_count' => 1, - 'image_keywords' => ['live', 'streaming', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'story_event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Quick recap after the event ends.', - 'content' => "[Event name] is a wrap.\n\nThank you to everyone who showed up.", - 'image_count' => 1, - 'image_keywords' => ['event', 'recap', 'crowd'], - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'story_this_or_that', - 'category' => 'engagement', - 'name' => 'This or that', - 'description' => 'Two-option poll for fast taps.', - 'content' => "[Option A] or [Option B]?\n\nTap to vote.", - 'image_count' => 1, - 'image_keywords' => ['poll', 'choice', 'vote'], - 'slides' => null, - ], - [ - 'slug' => 'story_question_box', - 'category' => 'engagement', - 'name' => 'Question box', - 'description' => 'Open the floor for questions.', - 'content' => "Ask me anything about [topic].\n\nReply with your question.", - 'image_count' => 1, - 'image_keywords' => ['questions', 'ama', 'conversation'], - 'slides' => null, - ], - [ - 'slug' => 'story_emoji_slider', - 'category' => 'engagement', - 'name' => 'Emoji slider', - 'description' => 'Use the slider sticker to gauge a feeling.', - 'content' => "How excited are you for [thing]?\n\nMove the slider.", - 'image_count' => 1, - 'image_keywords' => ['slider', 'reaction', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'story_dm_prompt', - 'category' => 'engagement', - 'name' => 'DM prompt', - 'description' => 'Push followers to send a DM keyword.', - 'content' => "Want [resource]?\n\nReply [keyword] and I'll send it.", - 'image_count' => 1, - 'image_keywords' => ['dm', 'message', 'engagement'], - 'slides' => null, - ], -]; diff --git a/templates/en/linkedin_page_post.php b/templates/en/linkedin_page_post.php deleted file mode 100644 index 9ea76a52..00000000 --- a/templates/en/linkedin_page_post.php +++ /dev/null @@ -1,342 +0,0 @@ - 'company_milestone', - 'category' => 'behind_the_scenes', - 'name' => 'Company milestone', - 'description' => 'Celebrate a company milestone from the brand page.', - 'content' => "Today {{brand_name}} hits [milestone, e.g. 1,000 customers, 5 years, \$X ARR].\n\nThis didn't happen because of any single person. It happened because [team / customers / community] showed up every day.\n\nThank you to everyone who's been part of this journey. We're just getting started.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'hiring_announcement', - 'category' => 'engagement', - 'name' => "We're hiring", - 'description' => 'Announce open roles and invite applications from the company page.', - 'content' => "{{brand_name}} is hiring.\n\nWe're looking for [role(s)] to join us on [team/mission].\n\nWhat we offer:\n→ [Highlight 1]\n→ [Highlight 2]\n→ [Highlight 3]\n\nIf this sounds like you (or someone you know), apply or share → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'thought_leadership_page', - 'category' => 'industry_tip', - 'name' => 'Industry POV', - 'description' => 'Share the company stance on an industry trend or shift.', - 'content' => "The [industry] landscape is shifting.\n\nHere's what we're seeing at {{brand_name}}:\n\n1. [Observation]\n2. [Observation]\n3. [Observation]\n\nWhat this means for [audience]: [implication].\n\nWhat are you noticing on your end?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== product_launch ===== - [ - 'slug' => 'new_feature_release', - 'category' => 'product_launch', - 'name' => 'New feature release', - 'description' => 'Announce a specific new feature with the problem it solves.', - 'content' => "We shipped [feature name] today.\n\nThe short version: [one-line description of what it does].\n\nThe longer version: customers kept telling us [specific pain point]. We tried [previous workaround] for about [timeframe], and it never quite landed. So we rebuilt the [area] from scratch.\n\nA few things that changed:\n[Behavior before] is now [behavior after].\n[Manual step] runs automatically.\n[Limit] is gone.\n\nIf you want to try it, the docs are here: [link]. If you find something broken, our team is in the comments.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_open_signups', - 'category' => 'product_launch', - 'name' => 'Beta open for signups', - 'description' => 'Invite customers and prospects into a public or private beta.', - 'content' => "Beta access for [product/feature] is now open.\n\nWe spent [timeframe] running it with [number] private testers. The feedback was good enough that we're widening the door.\n\nWho it's for: [specific user description, e.g. teams running >X campaigns/month].\nWho it's not for yet: [honest exclusion, e.g. enterprises needing SSO].\n\nWe're capping the next round at [number] companies so our team can stay close to every account. Spots go on a first-come basis.\n\nRequest access: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'integration_partnership', - 'category' => 'product_launch', - 'name' => 'Integration with partner', - 'description' => 'Announce a new integration or technical partnership.', - 'content' => "{{brand_name}} now connects with [partner].\n\nIf you use both, you can stop [manual step]. The integration handles [specific data flow] automatically.\n\nWhat changed for our shared customers:\nNo more exporting [data] and re-importing it on the other side.\n[Trigger] in [partner] now creates [action] in {{brand_name}}.\nField mapping is editable, so weird custom setups still work.\n\nThanks to the team at [partner] for the back-and-forth on the API. Setup guide: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'product_redesign', - 'category' => 'product_launch', - 'name' => 'Product redesign launch', - 'description' => 'Announce a significant UI or product refresh.', - 'content' => "We redesigned [product/area]. It's live for everyone today.\n\nOur design team has been quiet on here for a few months because of this. The old [area] grew organically and ended up with [specific issue, e.g. four different ways to start a new project]. Customers told us. We agreed.\n\nWhat's different:\nOne primary action per screen instead of three.\n[Old element] moved to [new location] so it stops getting in the way.\n[Specific pattern] that nobody used is gone.\n\nIf something feels off in the first few days, that's normal. Reply here or reach our team at [contact] and we'll get on it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== promotion ===== - [ - 'slug' => 'limited_time_offer', - 'category' => 'promotion', - 'name' => 'Limited-time offer', - 'description' => 'Announce a discount or pricing offer with a clear deadline.', - 'content' => "[Offer, e.g. 25% off the first year of {{brand_name}}] is open through [specific date].\n\nWe rarely run discounts. This one is tied to [reason, anniversary, end of quarter, product milestone] and we won't repeat it on the same terms in [timeframe].\n\nWho it applies to: [eligibility, new customers, annual plans, specific tier].\nWho it doesn't: [honest exclusion].\n\nUse [code] at checkout, or talk to our team if you want help picking a plan: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_resource_offer', - 'category' => 'promotion', - 'name' => 'Free resource giveaway', - 'description' => 'Promote a free guide, template, or report.', - 'content' => "We made a free [resource, guide, template, benchmark report] for [audience].\n\nIt covers [specific topic 1], [specific topic 2], and the [number] mistakes we see most often when working with [target customer type]. About [page count] pages, no email gate beyond a name and work address.\n\nWhy free: [honest reason, e.g. we built this for our own clients first, and it's the kind of thing that's more useful in more hands].\n\nDownload it here: [link]. Tell us what's missing and we'll update the next version.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'referral_program_launch', - 'category' => 'promotion', - 'name' => 'Referral program announcement', - 'description' => 'Promote a customer referral program from the company page.', - 'content' => "We launched a referral program for {{brand_name}} customers.\n\nIf you refer a company that becomes a paying customer, both sides get [specific benefit, e.g. one month free, \$X credit, a feature unlock]. No tiers. No leaderboard. No mug.\n\nWe spent a while resisting this because most referral programs feel like spam pyramids. We landed here because our biggest growth channel last year was customers telling other customers, and it felt strange not to share the upside.\n\nDetails and your referral link: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== educational ===== - [ - 'slug' => 'how_we_solve_problem', - 'category' => 'educational', - 'name' => 'How we approach a problem', - 'description' => 'Walk through how the company tackles a recurring customer problem.', - 'content' => "A question we get every week: [specific question].\n\nHere's how we think about it at {{brand_name}}.\n\nMost teams start by [common first move]. That works until [specific failure point]. Once you hit that, you're stuck adding [workaround] every time something changes.\n\nA different way: [alternative approach]. The trade-off is [honest cost, e.g. slower setup, more upfront thinking, harder to explain to a new hire]. The upside is that [specific benefit] stops being a recurring fire.\n\nWe wrote up the long version here: [link]. Disagree? The comments are open.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'customer_data_insight', - 'category' => 'educational', - 'name' => 'Insight from customer data', - 'description' => 'Share a useful pattern observed across the customer base.', - 'content' => "We looked at [metric/behavior] across [number] {{brand_name}} accounts last quarter.\n\nOne thing stood out: [specific finding with a number, e.g. teams that did X within their first week were 3x more likely to still be active at month six].\n\nWe expected the opposite. Our hypothesis going in was [old assumption], partly because [reason]. The data didn't agree.\n\nA few caveats: this is correlation, not causation. The sample skews toward [segment]. And [time period] is short.\n\nStill, if you're new to {{brand_name}}, [practical recommendation] is probably worth doing in week one.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'common_mistake_breakdown', - 'category' => 'educational', - 'name' => 'Common mistake breakdown', - 'description' => 'Explain a recurring mistake and how to avoid it.', - 'content' => "The single most common mistake we see when teams adopt [tool/process/practice]: [specific mistake].\n\nIt usually looks like this. A team starts with [setup]. Within a few weeks, they add [workaround] because [reason]. By month three, the workaround has become the system, and nobody remembers why.\n\nThe fix isn't [obvious answer]. The fix is to go back and ask whether [original assumption] was ever true for your use case. Half the time, it wasn't.\n\nWe wrote this up because we made the same mistake internally in [year]. Full breakdown: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'tool_comparison', - 'category' => 'educational', - 'name' => 'Honest tool comparison', - 'description' => 'Compare approaches or tools for a specific job, including where the company loses.', - 'content' => "When should you use {{brand_name}}, and when should you not?\n\nWe get the first half of that question constantly. Here's the second half.\n\nUse {{brand_name}} when [specific situation, e.g. you have more than X of Y, or you need Z capability].\n\nDon't use {{brand_name}} when [honest exclusion, e.g. you're a single user with fewer than X, or your workflow is fully [adjacent category]]. In those cases, [competitor or alternative approach] is genuinely a better fit, and we'll tell you that on a sales call.\n\nThe full breakdown, including a side-by-side: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== behind_the_scenes ===== - [ - 'slug' => 'team_offsite_recap', - 'category' => 'behind_the_scenes', - 'name' => 'Team offsite recap', - 'description' => 'Recap a recent team offsite or all-hands.', - 'content' => "We wrapped our team offsite in [city] last week.\n\n[Number] people, [number] days, one whiteboard that took a beating. About a third of the company met in person for the first time, which is what happens when you grow [from X to Y] in a year.\n\nWe spent more time on [topic] than we planned and less on [other topic] than we expected. The hardest conversation was about [honest topic, e.g. what we stop doing in the second half of the year]. We didn't fully resolve it. That's fine.\n\nNext one is in [location] in [month]. By then we'll be [number] people. Not sure how that'll feel.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'office_or_remote_culture', - 'category' => 'behind_the_scenes', - 'name' => 'How we work', - 'description' => 'Share the company operating model or work style honestly.', - 'content' => "How {{brand_name}} actually works, since people ask.\n\nWe're [fully remote / hybrid / based in X with remote contributors] across [number] time zones. No mandatory office days. We do one all-hands a week and one async update on Fridays.\n\nThe parts we like: deep work blocks, hiring across geographies, quiet calendars.\n\nThe parts that are harder: onboarding new hires takes longer than it would in person. New ideas can stall in DMs. Time zone overlap with [region] is rough.\n\nWe're not claiming this is the right setup for every company. It's the one that fits ours right now.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'engineering_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Engineering decision recap', - 'description' => 'Share an internal technical or product decision and the reasoning.', - 'content' => "Last month we [made a specific decision, e.g. moved off X, rewrote Y, killed feature Z].\n\nThe short version of why: [one-line reason].\n\nThe longer version. The old setup was fine when we had [number] customers. At [current scale], it started showing in [specific symptom]. We tried [intermediate fix] for about [timeframe] before agreeing it wasn't going to hold.\n\nThe trade-off we accepted: [honest cost, e.g. two weeks of slower releases, breaking change for some integrations].\n\nWriting this up because we wish other teams shared more of this kind of decision instead of only the wins.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mistake_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Public postmortem', - 'description' => 'Share a recent mistake, outage, or failure honestly.', - 'content' => "On [date], {{brand_name}} had [specific issue, e.g. an outage, a billing bug, a data issue affecting X% of accounts] for about [duration].\n\nWhat happened: [one-paragraph technical or operational summary].\n\nWho was affected: [honest scope, including the customers who weren't].\n\nWhat we did: [immediate fix and mitigation].\n\nWhat we're changing so it doesn't happen the same way again: [specific change, not a generic 'we'll do better'].\n\nIf you were affected and we haven't reached out individually, please reply or email [contact]. We owe a few of you a longer conversation.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== testimonial ===== - [ - 'slug' => 'customer_quote_short', - 'category' => 'testimonial', - 'name' => 'Short customer quote', - 'description' => 'Share a short, specific customer quote on the company page.', - 'content' => "From a recent conversation with [customer first name], [role] at [company]:\n\n\"[Customer quote, should reference a specific outcome, number, or change. Avoid 'great product' generic praise.]\"\n\nWe asked if we could share it. They said yes.\n\nThe context behind the quote: [one or two sentences on what they were trying to do and what changed].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'case_study_recap', - 'category' => 'testimonial', - 'name' => 'Case study recap', - 'description' => 'Summarize a published customer case study.', - 'content' => "New case study: [customer name].\n\nBefore {{brand_name}}, their team was [specific situation, e.g. running X manually, spending Y hours/week on Z]. After [timeframe] using {{brand_name}}, [specific outcome with a number].\n\nA few things they did that other customers don't always try:\n[Specific tactic from the customer].\n[Another tactic].\n[Honest note: something they're still figuring out].\n\nFull write-up with their team's actual workflow and screenshots: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unexpected_use_case', - 'category' => 'testimonial', - 'name' => 'Unexpected customer use case', - 'description' => 'Highlight a creative or unexpected way customers use the product.', - 'content' => "We didn't build {{brand_name}} for [unexpected use case], but customers keep using it that way.\n\n[Customer or customer segment] started [specific behavior] about [timeframe] ago. We noticed because [signal, e.g. a usage spike in a specific feature, a support ticket asking for X]. When we asked them, the answer was: [paraphrased customer reasoning].\n\nIt's not on our roadmap. It might be soon. If you're doing something similar, our product team would genuinely like to hear about it. Reply here or email [contact].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== industry_tip ===== - [ - 'slug' => 'contrarian_take', - 'category' => 'industry_tip', - 'name' => 'Contrarian take', - 'description' => 'Take a clear position against a popular industry idea.', - 'content' => "An opinion that gets us in trouble at conferences: [contrarian position, stated plainly].\n\nThe usual argument is [popular position]. It's not wrong in every case. It's wrong in most of the cases we see, and here's why.\n\n[Reason 1 with a specific example].\n[Reason 2 with a specific example].\n\nThe pushback we always get: [steelman the counter-argument]. That's fair, and we agree it applies when [specific condition]. Outside of that condition, the usual advice quietly costs teams a lot of money.\n\nHappy to be wrong about this. Tell us why in the comments.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'industry_benchmark', - 'category' => 'industry_tip', - 'name' => 'Industry benchmark', - 'description' => 'Share an aggregated benchmark or stat from the customer base.', - 'content' => "Quick benchmark for [audience].\n\nAcross [number] {{brand_name}} accounts in [industry/segment] last quarter, the median [metric] was [value]. The 90th percentile was [value]. The bottom 25% were under [value].\n\nIf you're below the median, the most common reason we see is [specific reason]. The fix is rarely [obvious answer]. It's usually [actual fix].\n\nIf you're above the 90th percentile, you're probably already doing [specific behavior], and we'd love to talk to you about it. Reply or DM the page.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'trend_we_disagree_with', - 'category' => 'industry_tip', - 'name' => 'Trend we disagree with', - 'description' => 'Push back on a trending industry practice with reasoning.', - 'content' => "Half the [industry] posts we see this month are about [trending practice].\n\nWe're not adopting it at {{brand_name}}, and probably won't.\n\nThe pitch is [popular framing]. The honest version, in our experience, is that it works in [narrow scenario] and quietly fails in [common scenario] because [specific reason]. We tested a version of it internally for [timeframe] and saw [specific outcome].\n\nNot saying nobody should do this. Saying that for [target audience], the time is better spent on [alternative].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'practical_framework', - 'category' => 'industry_tip', - 'name' => 'Practical framework', - 'description' => 'Share a simple internal framework or rule of thumb.', - 'content' => "A rule of thumb our team uses when deciding [specific decision]:\n\nIf [condition A], do [option 1].\nIf [condition B], do [option 2].\nIf you can't tell which you're in, you're probably in [option 1] and overthinking it.\n\nThis isn't a framework with a name. It came out of about [timeframe] of getting the same decision wrong in slightly different ways. It saves us an argument or two a week.\n\nUseful? Useless? Tell us how you decide.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== event ===== - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Announce an upcoming company event, webinar, or workshop.', - 'content' => "We're hosting [event name] on [date] at [time/timezone].\n\nFormat: [virtual / in-person in city / hybrid].\nWho it's for: [specific audience, e.g. heads of marketing at B2B SaaS companies, 20-200 employees].\nWhat we'll cover: [topic 1] and [topic 2]. No keynote. No vendor parade.\n\nWe're capping registration at [number] so the Q&A actually works. If past events are a guide, the second half is where the useful stuff happens.\n\nSign up: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Recap a recent event the company hosted or attended.', - 'content' => "[Event name] wrapped on [date]. A few things worth writing down before they fade.\n\nThe room got loudest during [specific moment or topic]. Our hypothesis going in was that [topic A] would dominate. It didn't. [Topic B] did, and we should have seen that coming.\n\nThe most useful question we got: [paraphrased question]. Our answer was honest but not great. If you asked it, we owe you a better one, reply here.\n\nThanks to [partner / venue / speakers] for making it work. Recordings up next week: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'conference_attendance', - 'category' => 'event', - 'name' => 'Conference attendance', - 'description' => 'Announce that the team will be at an upcoming conference.', - 'content' => "{{brand_name}} will be at [conference] in [city] from [date] to [date].\n\n[Number] of us are flying in. We're not doing a booth this year. We tried it last year and the most useful conversations happened nowhere near it.\n\nIf you want to meet:\n[Team member name] is around [days/times], mostly interested in [topic].\n[Another team member] is presenting on [topic] on [day].\nDinner on [date], small group, reply if you want in.\n\nBook a slot here: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== engagement ===== - [ - 'slug' => 'open_question_to_audience', - 'category' => 'engagement', - 'name' => 'Open question to audience', - 'description' => 'Ask a real, specific question to the page audience.', - 'content' => "A real question for [audience] this week.\n\nWhen [specific situation, e.g. you're scoping a new project, picking a vendor, deciding what to cut], how do you actually decide?\n\nNot the version you'd put in a deck. The version that involves [honest factor, e.g. who's available that week, what the CFO is in a mood about, which tool your team already knows].\n\nWe've been running an internal version of this question at {{brand_name}} for a month and the answers are more interesting than any framework we've seen. Reply with yours and we'll share what we've heard.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'we_want_your_feedback', - 'category' => 'engagement', - 'name' => 'Feedback request', - 'description' => 'Ask the audience for input on a specific roadmap or decision.', - 'content' => "We're stuck on something and want your input.\n\nFor the next version of {{brand_name}}, we're choosing between two directions for [area].\n\nOption A: [specific direction, with the trade-off].\nOption B: [specific direction, with the trade-off].\n\nBoth are real. Neither is obviously right. Customers we've asked are split close to evenly, which is the worst possible outcome for a product team trying to ship.\n\nIf you have an opinion, especially a strong one, reply here or DM the page. Our product team reads everything.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'community_spotlight', - 'category' => 'engagement', - 'name' => 'Community spotlight', - 'description' => 'Highlight a customer, partner, or community member doing something interesting.', - 'content' => "Spotlight on [name], [role] at [company].\n\nWe noticed [their specific work or post] last week and ended up sending it around the {{brand_name}} team. The short version of why: [specific reason, what they did that was unusual, useful, or against the grain].\n\nGo follow them if you don't already. We have no business arrangement here. They're just doing the kind of work we wish more people in [industry] did publicly.\n\n[Link to their post / profile].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'year_in_review', - 'category' => 'engagement', - 'name' => 'Year in review', - 'description' => 'Honest year-end recap from the company page.', - 'content' => "A short year-in-review for {{brand_name}}.\n\nThe good: [specific win with a number]. [Another specific win, ideally a customer outcome, not a vanity metric].\n\nThe hard: [honest miss, e.g. a product bet that didn't work, a hiring goal we didn't hit, a goal we set in January and quietly dropped in June].\n\nThe surprising: [unexpected thing that mattered, a customer segment that took off, a feature nobody asked for that became important].\n\nThank you to the [number] customers, [number] team members, and the people who replied to our posts at 11pm asking us to ship things. Next year is going to be weirder than this one.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/en/linkedin_post.php b/templates/en/linkedin_post.php deleted file mode 100644 index f0d55649..00000000 --- a/templates/en/linkedin_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'product_launch_announcement', - 'category' => 'product_launch', - 'name' => 'Product launch announcement', - 'description' => 'Short LinkedIn post announcing a new product.', - 'content' => "Excited to share: {{brand_name}} just launched [Product Name].\n\nHere's why this matters for [your audience]:\n→ [Benefit 1]\n→ [Benefit 2]\n→ [Benefit 3]\n\nLearn more at [link]. We'd love your feedback.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'how_to_guide', - 'category' => 'educational', - 'name' => 'How-to guide', - 'description' => 'Step-by-step educational post for LinkedIn.', - 'content' => "How to [achieve X] in [timeframe], a step-by-step guide.\n\nStep 1: [Action]\nStep 2: [Action]\nStep 3: [Action]\nStep 4: [Action]\n\nThe key insight most people miss: [insight].\n\nWhich step do you find most challenging? Drop a comment below.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'customer_quote', - 'category' => 'testimonial', - 'name' => 'Customer quote', - 'description' => 'Share a compelling customer testimonial on LinkedIn.', - 'content' => "\"[Customer quote about the result they achieved with your product or service.]\"\n- [Customer Name], [Role] at [Company]\n\nThis is exactly why we built {{brand_name}}. Real results for real teams.\n\nRead the full story → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'industry_insight', - 'category' => 'industry_tip', - 'name' => 'Industry insight', - 'description' => 'Share a timely insight or hot take relevant to your industry.', - 'content' => "Here's something most people in [industry] get wrong:\n\n[Counterintuitive statement or hot take]\n\nWhy? Because [reason].\n\nThe smarter approach: [better way to do it].\n\nAt {{brand_name}}, we've seen this play out with hundreds of [customers/teams]. The data is clear.\n\nWhat's your take?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Announce an upcoming webinar or live event.', - 'content' => "📅 Save the date: {{brand_name}} is hosting [Event Name] on [Date] at [Time].\n\nWhat to expect:\n✔ [Topic 1]\n✔ [Topic 2]\n✔ [Topic 3]\n\nSpots are limited. Register now → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'community_question', - 'category' => 'engagement', - 'name' => 'Community question', - 'description' => 'Spark discussion with an open-ended question to your network.', - 'content' => "If you could give one piece of advice to someone just starting out in [industry/role], what would it be?\n\nMine: [your answer, be honest and specific]\n\nDrop yours in the comments. Let's build a thread worth bookmarking.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Product launch (3) ===== - [ - 'slug' => 'feature_release_notes', - 'category' => 'product_launch', - 'name' => 'New feature release notes', - 'description' => 'Walk your network through what shipped and why it matters.', - 'content' => "We shipped [Feature Name] today.\n\nThe short version: it does [what it does] for [who it's for]. Took us [timeframe] from first sketch to production.\n\nWhat's actually new:\n• [Capability one, in plain language]\n• [Capability two, with a real example]\n• [The thing we cut, and why]\n\nWe debated [tradeoff] for weeks. Ended up choosing [decision] because [reason]. If you'd have made the other call, I want to hear why.\n\nDocs and a 4-minute walkthrough are at [link]. Bug reports welcome, we read every one.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_invitation', - 'category' => 'product_launch', - 'name' => 'Private beta invitation', - 'description' => 'Invite your network into a closed beta with clear expectations.', - 'content' => "We're opening up [Product/Feature] to a small private beta. Looking for around [N] testers.\n\nThe ideal fit:\n• You work in [role/industry]\n• You currently use [tool or workflow] and find [specific friction]\n• You have 30 minutes a week to break things and tell us about it\n\nWhat you get: early access, a direct line to the {{brand_name}} team, and a say in what we build next. What we get: honest feedback, even when it stings.\n\nIf this sounds like you, drop a comment or DM me. We'll send invites this [day/week].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'milestone_update', - 'category' => 'product_launch', - 'name' => 'Product milestone update', - 'description' => 'Share a meaningful product or company milestone with concrete numbers.', - 'content' => "Quiet milestone we hit this week: {{brand_name}} crossed [number / metric].\n\nFor context, when we started [timeframe] ago we had [starting number]. Most of the growth came from [specific channel or driver], not the thing we expected.\n\nA few things I learned along the way:\n1. [Lesson one, with the receipts]\n2. [Lesson two, what we'd do differently]\n3. [Lesson three about the team]\n\nThank you to the [N] people who took a chance on us when this was rough around the edges. Onward.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Promotion (3) ===== - [ - 'slug' => 'limited_time_offer', - 'category' => 'promotion', - 'name' => 'Limited-time offer', - 'description' => 'Promote a time-bound discount or deal in a non-spammy way.', - 'content' => "Running a [discount %] promo on {{brand_name}} until [date].\n\nNot a Black Friday gimmick. We had a slow [month/quarter] and want to bring in [N] new [users/customers] before [end of period]. That's the honest reason.\n\nIf you've been on the fence: [link]. If you signed up in the last 30 days, email me and I'll apply the same discount retroactively. That's the right thing to do.\n\nOffer ends [date] at [time, timezone].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_resource_offer', - 'category' => 'promotion', - 'name' => 'Free resource giveaway', - 'description' => 'Offer a useful free download or template as a low-friction lead magnet.', - 'content' => "Spent the weekend turning our internal [resource type, checklist, template, playbook] into something I can share.\n\nIt's the same [document] our team uses to [specific use case]. Nothing fancy: [N] pages, no fluff, no email gate.\n\nDrop a comment with the word \"[keyword]\" and I'll DM you the link. If you'd rather grab it directly: [link].\n\nFair warning, it's opinionated. If you disagree with my take on [specific point], tell me. That's how I improve it for v2.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'partnership_announcement', - 'category' => 'promotion', - 'name' => 'Partnership announcement', - 'description' => 'Announce a partnership or integration with a clear customer benefit.', - 'content' => "{{brand_name}} is now integrated with [Partner Name].\n\nThe practical effect for [audience]: you can now [specific workflow or capability] without [the previous workaround]. Saves about [time/money figure] per [period] based on the early test group.\n\nWe picked [Partner] because their team obsesses over [shared value] the same way ours does. Not every integration request makes the cut, and most don't.\n\nSetup takes about [N] minutes. Walkthrough here: [link]. If you're already using both tools, we'd love to hear how it lands.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Educational (3) ===== - [ - 'slug' => 'lesson_learned', - 'category' => 'educational', - 'name' => 'Lesson from a mistake', - 'description' => 'Teach by recounting a specific mistake and what changed because of it.', - 'content' => "Made a [N]-figure mistake last [year/quarter] that I want to write about while it still stings.\n\nThe setup: we were [situation]. The decision: [what you did]. The reasoning at the time: [why it seemed right].\n\nWhat actually happened: [the result, in concrete terms]. We lost [specific cost, money, time, customers, trust].\n\nWhat I should have done: [the better path], and the reason I didn't is [the honest reason, ego, hurry, missing data].\n\nThree things I changed in how I work because of it:\n1. [Change one]\n2. [Change two]\n3. [Change three]\n\nIf you've been there, you know. Tell me about yours in the comments.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'framework_breakdown', - 'category' => 'educational', - 'name' => 'Framework or mental model breakdown', - 'description' => 'Explain a specific framework or mental model with a concrete example.', - 'content' => "I keep coming back to one mental model when I think about [topic/problem]: [Framework Name].\n\nThe idea is simple. [One-sentence summary of the framework.]\n\nHow I actually use it: when I'm stuck on [specific situation], I ask [specific question the framework prompts]. Last week it pushed me to [decision you made because of it].\n\nWhere it breaks: [honest limitation]. It's not a universal answer for [type of problem], and treating it like one is how people end up [bad outcome].\n\nIf you want to read the original source, it's [author/book/link]. The version above is mine, with edits from a few hundred uses.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'tool_comparison', - 'category' => 'educational', - 'name' => 'Honest tool comparison', - 'description' => 'Compare two or three tools or approaches with real tradeoffs.', - 'content' => "I've used [Tool A], [Tool B], and [Tool C] for [task] over the past [timeframe]. Here's where each one actually wins.\n\n[Tool A] is the right call when [specific situation]. It's the fastest at [specific task] and the worst at [specific task]. We use it for [use case].\n\n[Tool B] feels less polished, but it does [thing] better than anything else I've tried. Worth the rough edges if [criteria].\n\n[Tool C] is the boring choice. That's a compliment. It's reliable, the docs are written by humans, and the team doesn't ship breaking changes on Fridays.\n\nMy current stack at {{brand_name}}: [actual answer]. Yours might differ if [reason].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Behind the scenes (3) ===== - [ - 'slug' => 'team_culture_glimpse', - 'category' => 'behind_the_scenes', - 'name' => 'Team culture moment', - 'description' => 'Share a small, specific moment that shows how your team actually works.', - 'content' => "Small thing that happened at {{brand_name}} this week.\n\n[Team member or role] noticed [specific issue or detail]. Could have shipped anyway. Instead they [specific action], which delayed [thing] by [timeframe].\n\nNobody asked them to. There was no Jira ticket. The customer would not have known.\n\nThis is the part of building a company that doesn't fit on a careers page. The work that nobody sees, done well anyway, because that's how the people here are wired. I think about it a lot.\n\nIf you want to work with people like this: [link]. If you already do, send them a DM.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'how_we_built_it', - 'category' => 'behind_the_scenes', - 'name' => 'How we built it', - 'description' => 'Walk through the real story behind a recent build, including dead ends.', - 'content' => "How we built [Feature/Product] at {{brand_name}}, including the parts we usually leave out.\n\nWe started with [original plan]. It took [timeframe] to figure out that plan was wrong. The real problem was [actual problem], which only became visible after [trigger event].\n\nVersion 2 was [what we tried next]. It worked in the demo and fell over in production at [scale or condition]. We rewrote the [specific component] twice.\n\nWhat finally shipped: [current solution]. It is [specific tradeoff acknowledgment, slower, simpler, less elegant] than what we set out to build, and it's the version that actually solves the customer problem.\n\nFull writeup with the architecture diagrams: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'day_in_the_life', - 'category' => 'behind_the_scenes', - 'name' => 'A day on the team', - 'description' => 'Show what a real day looks like for someone on the team.', - 'content' => "Pulled the calendar for [day of week] and counted: [N] meetings, [N] hours of focused work, [N] interruptions I should have said no to.\n\nThe work that actually mattered:\n• [Specific task one, and why it mattered]\n• [Specific task two, including what surprised you]\n• [Specific task three]\n\nThe work that felt urgent and wasn't: [honest example]. I keep falling for this and I'm tired of it.\n\nI used to think the goal was a perfect day. Now I think the goal is a few real hours and the discipline to protect them. Curious how the rest of you handle [specific challenge from the post].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Testimonial (3) ===== - [ - 'slug' => 'before_after_story', - 'category' => 'testimonial', - 'name' => 'Customer before-and-after', - 'description' => 'Tell a customer story with concrete numbers from before and after.', - 'content' => "Quick story from a {{brand_name}} customer worth sharing.\n\n[Customer/Company] came to us [timeframe] ago. The state of things then: [specific painful metric, hours per week, error rate, churn, cost]. They had tried [previous approach] and it didn't move the number.\n\n[Timeframe] in, the same metric is [new number]. The piece that mattered most, according to [Name, role]: [specific change in how they work].\n\nWhat I like about this one: it wasn't a magic feature. It was [boring fundamental, a process change, a default they flipped, a meeting they killed]. Most wins look like that and we don't talk about it enough.\n\nFull case study with the messy details: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unsolicited_review', - 'category' => 'testimonial', - 'name' => 'Unsolicited customer review', - 'description' => 'Share an organic piece of customer feedback with a thoughtful reaction.', - 'content' => "Got this in our inbox yesterday from [Customer Name] at [Company]:\n\n\"[Honest, specific quote, including any small criticism or tradeoff they mentioned. Real reviews aren't pure praise.]\"\n\nA few honest reactions on my end. The part about [specific praise] is the thing we've worked hardest on, so that one hit. The part about [specific gripe or wish] is fair, and it's already on the roadmap for [timeframe].\n\nWe don't pay for reviews and we don't ask for them. When one shows up like this, I read it twice. Thank you, [Name].\n\nIf you have a {{brand_name}} story, good, bad, or mixed, I want to hear it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'team_member_spotlight', - 'category' => 'testimonial', - 'name' => 'Team member spotlight', - 'description' => 'Highlight a specific person on the team with a concrete contribution.', - 'content' => "Want to talk about [Name], [role] at {{brand_name}}, for a minute.\n\n[Name] joined [timeframe] ago. The thing they own now: [specific area or system]. The thing they did that very few people would have done: [specific story, a tough call, an unglamorous fix, a tradeoff they pushed back on].\n\nThe result: [concrete outcome, with a number if you have one]. The reason it worked: [Name]'s instinct on [specific quality], which I'm still learning from.\n\nThis is not a humble brag. It's a thank-you, on a public platform, because that part of the job tends to happen quietly. [Name], the team is better with you in it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Industry tip (3) ===== - [ - 'slug' => 'data_point_take', - 'category' => 'industry_tip', - 'name' => 'Data point and what it means', - 'description' => 'Share a recent data point from a real source and your interpretation.', - 'content' => "[Source, report, study, public dataset] published this number last week: [specific stat].\n\nMost of the takes I've seen frame it as [common interpretation]. I think that misses the point.\n\nWhen you cut the same data by [dimension, segment, geography, company size, time period], the picture flips. [Specific subset] is [specific behavior], while [other subset] is [different behavior]. The headline number averages those two stories into something that describes neither.\n\nSo the practical implication for [audience]: [specific recommendation]. Not [common advice], because that one is built on the average that doesn't exist.\n\nLink to the raw data: [link]. Tell me where I'm wrong.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'contrarian_take', - 'category' => 'industry_tip', - 'name' => 'Contrarian take with receipts', - 'description' => 'Push back on a common belief in your industry with a specific argument.', - 'content' => "Unpopular opinion in [industry]: [contrarian claim].\n\nThe standard advice says [conventional wisdom]. I followed it for [timeframe] and the result was [specific bad or mediocre outcome].\n\nThe reason it doesn't work as well as people claim: [specific reason, incentive, hidden cost, survivorship bias, changed market]. The version that actually works for [audience] looks more like [alternative approach].\n\nFor what it's worth, this is the path we took at {{brand_name}} after [trigger event]. Numbers since: [specific result]. I'm not saying everyone should do it. I am saying \"because everyone says so\" is a bad reason to keep doing the thing.\n\nWhere are you on this?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'trend_watch', - 'category' => 'industry_tip', - 'name' => 'Trend worth watching', - 'description' => 'Spotlight a smaller industry trend before it goes mainstream.', - 'content' => "Quiet trend in [industry] that I think most people will be talking about in [timeframe]: [specific trend].\n\nThe signal I'm watching: [concrete evidence, hiring patterns, new entrants, pricing shifts, what customers are asking for]. Three different [companies/teams] in our network have done [specific thing] in the last [period], independently.\n\nWhy I think it actually matters and isn't just hype: [reason rooted in incentives, not vibes]. The thing that would make me wrong: [specific counter-signal you'd watch for].\n\nIf you're [audience], the practical move today is [specific action]. Not a bet-the-company pivot. Just enough that you're not caught flat-footed in [timeframe].\n\nWhat are you seeing?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Event (3) ===== - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Event recap with takeaways', - 'description' => 'Summarize an event you attended with specific takeaways.', - 'content' => "Back from [Event Name]. Three things stuck with me, and one I'm still arguing with.\n\nWhat held up: [Specific session or speaker], who made the case that [specific argument]. The part I hadn't considered: [specific insight].\n\nWhat I'm bringing back to {{brand_name}}: [concrete change you'll make based on the event]. Small enough to start next week, big enough to matter.\n\nThe thing I disagreed with: [specific take from a session]. The argument was clean, but it ignores [specific reality]. Going to write that one up properly.\n\nIf you were there, what did I miss? Always more in the hallway track than the main stage.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'speaking_announcement', - 'category' => 'event', - 'name' => 'Speaking engagement announcement', - 'description' => 'Announce that you or a teammate is speaking at an event.', - 'content' => "I'm speaking at [Event Name] on [date] in [location / online].\n\nThe talk: \"[Talk Title]\". The short pitch: [one or two sentences on what attendees will actually leave with].\n\nWhat I'm not going to do: walk through generic [topic] best practices. There are enough of those. What I am going to do: show the specific [data, framework, or case study] from {{brand_name}} that changed how we think about [specific problem], including the parts that didn't work.\n\nIf you're going to be there, find me, I'd rather have a real conversation than collect business cards. Registration: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'webinar_invitation', - 'category' => 'event', - 'name' => 'Webinar invitation', - 'description' => 'Invite your network to a webinar with a clear, honest agenda.', - 'content' => "Hosting a [length, e.g. 45-minute] webinar with [Co-host Name, role] on [date].\n\nTopic: [specific topic, framed as a question your audience is actually asking]. We're not doing a product demo. We are walking through [specific framework, dataset, or workflow] that we use at {{brand_name}}.\n\nRough agenda:\n• [Time], [Topic, with one detail that hints at the actual content]\n• [Time], [Topic]\n• [Time], Live Q&A. We answer everything, including the awkward ones.\n\nReplay goes out to everyone who registers, even if you can't make it live. Sign up: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Engagement (3) ===== - [ - 'slug' => 'poll_post', - 'category' => 'engagement', - 'name' => 'Opinionated poll prompt', - 'description' => 'Ask a focused either/or question that surfaces real opinions.', - 'content' => "Curious how [audience] is splitting on this.\n\nWhen you're deciding [specific decision], do you lean toward:\n\nA) [Option A, described concretely]\nB) [Option B, described concretely]\n\nNo \"it depends\" answers in the comments, please. Pick one and tell me why in a sentence.\n\nMy answer: [your honest pick]. The reason: [one or two sentence reason from real experience]. I held the opposite view for [timeframe] before [thing that changed my mind].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'hot_take_invitation', - 'category' => 'engagement', - 'name' => 'Hot take invitation', - 'description' => 'Invite the network to share a controversial opinion in their domain.', - 'content' => "What's a [industry/role] take you hold that gets you weird looks at conferences?\n\nMine: [specific opinion that's mildly controversial in your field, stated plainly]. I've been wrong about a lot, but on this one I'm holding the line.\n\nNot looking for the safe takes that already have 500 LinkedIn carousels behind them. The ones you'd say at the dinner after the panel, when you've stopped performing.\n\nGo. I'll be in the comments arguing in good faith.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'crowdsourced_advice', - 'category' => 'engagement', - 'name' => 'Crowdsourced advice request', - 'description' => 'Ask your network for input on a real, specific problem.', - 'content' => "Asking for the crowd's brain on a real problem we're working through at {{brand_name}}.\n\nContext: [specific situation in 2-3 sentences, enough that someone qualified can actually help]. The constraint that makes the obvious answer not work: [specific constraint].\n\nWhat I've already tried: [option one, and why it didn't fit]; [option two, and what it taught me]. So I'm not looking for those.\n\nIf you've solved something close to this, what worked? Comments are best, but DMs are open if it's the kind of thing you'd rather not say in public. I'll write up what we end up doing and tag the people who shaped it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/en/mastodon_post.php b/templates/en/mastodon_post.php deleted file mode 100644 index 036b5733..00000000 --- a/templates/en/mastodon_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'mastodon_release_note', - 'category' => 'product_launch', - 'name' => 'Release note', - 'description' => 'Share an open, transparent update about a release.', - 'content' => "Release note from {{brand_name}}:\n\n→ [What shipped]\n→ [Why it matters]\n→ [What's next]\n\nFeedback welcome. Reply or open an issue.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_lessons_learned', - 'category' => 'educational', - 'name' => 'Lessons learned', - 'description' => 'Share something you learned, in the candid Mastodon style.', - 'content' => "Something we learned at {{brand_name}} this week:\n\n[Lesson, be specific.]\n\nThe takeaway: [principle].\n\nMaybe useful to someone else building [similar thing].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_open_question', - 'category' => 'engagement', - 'name' => 'Open question', - 'description' => 'Ask the fediverse a question and gather perspectives.', - 'content' => "Question for the fediverse:\n\n[Open-ended question relevant to your audience.]\n\nBoosts appreciated if your followers might have thoughts.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'mastodon_version_bump', - 'category' => 'product_launch', - 'name' => 'Version bump', - 'description' => 'Announce a new version with the actual diff that matters.', - 'content' => "{{brand_name}} [version] is out.\n\nWhat changed:\n- [Fix or feature]\n- [Fix or feature]\n- [Breaking change, if any]\n\nUpgrade notes: [link or short instruction].\n\nIf something breaks, please tell us. We read every reply.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_new_feature_in_public', - 'category' => 'product_launch', - 'name' => 'New feature in public', - 'description' => 'Ship a feature and explain why you built it that way.', - 'content' => "We added [feature] to {{brand_name}} today.\n\nWhy: [the actual reason, in one sentence].\n\nHow it works: [short concrete description].\n\nThe code is here: [link]. Pull requests welcome.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_beta_invite', - 'category' => 'product_launch', - 'name' => 'Beta invite', - 'description' => 'Invite the fediverse into a beta with honest expectations.', - 'content' => "Beta testers wanted for [feature] in {{brand_name}}.\n\nIt is rough. Some things will break. We want to know which ones.\n\nSign up: [link]\n\nNo NDA, no marketing list, no upsell. We just need real users.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_self_host_release', - 'category' => 'product_launch', - 'name' => 'Self-host release', - 'description' => 'Let self-hosters know about a release with the operational details.', - 'content' => "Heads-up to {{brand_name}} self-hosters: [version] is tagged.\n\nMigrations: [yes/no, runtime estimate]\nConfig changes: [list or none]\nBreaking: [list or none]\n\nDocs: [link]. Issues: [link]. Boosts appreciated.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'mastodon_paid_plan_honest', - 'category' => 'promotion', - 'name' => 'Paid plan, honestly', - 'description' => 'Mention a paid plan without sounding like an ad.', - 'content' => "{{brand_name}} has a paid plan now. Here is what it gets you: [feature], [feature], [feature].\n\nThe free tier still does [what it always did]. We are not removing anything.\n\nDetails: [link]. Questions welcome.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_sponsor_us', - 'category' => 'promotion', - 'name' => 'Sponsor us', - 'description' => 'Ask for sponsorship or donations transparently.', - 'content' => "{{brand_name}} runs on [number] hours of volunteer work and [hosting cost] a month.\n\nIf you use it and want to chip in, sponsorship is here: [link].\n\nWe publish a spending breakdown every quarter. No tiers, no perks, just the work.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_discount_for_indies', - 'category' => 'promotion', - 'name' => 'Discount for indies', - 'description' => 'Offer a discount with no dark patterns.', - 'content' => "{{brand_name}} is [discount] off for solo developers and small co-ops until [date].\n\nNo coupon, no email gate. The price is just lower if you pick the [plan name] tier. Use it if it helps you.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // educational - [ - 'slug' => 'mastodon_quick_explainer', - 'category' => 'educational', - 'name' => 'Quick explainer', - 'description' => 'Explain a concept in plain language without padding.', - 'content' => "Quick explainer: [concept].\n\n[One sentence definition.]\n\n[One sentence about why it matters in practice.]\n\nIf you want the longer version, we wrote it up: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_misconception', - 'category' => 'educational', - 'name' => 'Common misconception', - 'description' => 'Correct a common misunderstanding with specifics.', - 'content' => "People often think [common belief about your topic].\n\nThat is not quite right. [The actual situation, with one specific example.]\n\nThis matters because [practical consequence].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_reading_list', - 'category' => 'educational', - 'name' => 'Reading list', - 'description' => 'Share a short, opinionated reading list.', - 'content' => "Things we have been reading at {{brand_name}}:\n\n- [Title], by [author]: [one-line reason].\n- [Title], by [author]: [one-line reason].\n- [Title], by [author]: [one-line reason].\n\nReply with what you have been reading. Always looking for new pointers.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_how_we_decided', - 'category' => 'educational', - 'name' => 'How we decided', - 'description' => 'Walk through a technical or product decision.', - 'content' => "How we picked [tool or approach] for {{brand_name}}:\n\nWe tried [option A]. It [problem]. We tried [option B]. It [tradeoff].\n\nWe went with [chosen option] because [reason]. It is not perfect. The thing that still bugs us is [downside].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'mastodon_dev_log', - 'category' => 'behind_the_scenes', - 'name' => 'Dev log', - 'description' => 'Share what you actually did this week.', - 'content' => "Dev log, week of [date]:\n\nMonday: [thing].\nTuesday: [thing].\nWednesday: [thing that went sideways].\nThursday: [fixed it].\nFriday: [shipped or punted].\n\nThis week is mostly [next focus].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Short postmortem', - 'description' => 'Share a postmortem in plain language.', - 'content' => "{{brand_name}} had an outage on [date]. Here is the short version:\n\nWhat broke: [system].\nWhy: [root cause].\nDuration: [time].\nHow we fixed it: [action].\n\nFull writeup with timeline: [link]. Sorry for the disruption.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_tooling_setup', - 'category' => 'behind_the_scenes', - 'name' => 'Our tooling', - 'description' => 'Show the actual tools you use.', - 'content' => "What {{brand_name}} runs on, in case you are curious:\n\n- Editor: [editor]\n- Language: [language]\n- Database: [database]\n- Hosting: [host]\n- CI: [ci]\n\nNothing exotic. The boring stack is the productive stack.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_team_intro', - 'category' => 'behind_the_scenes', - 'name' => 'Who we are', - 'description' => 'Introduce the people behind the project.', - 'content' => "Quick intro: {{brand_name}} is [number] people.\n\n[Name] works on [area].\n[Name] works on [area].\n[Name] works on [area].\n\nWe are based across [regions]. We hire openly when we hire, which is rarely. Hi.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'mastodon_user_quote', - 'category' => 'testimonial', - 'name' => 'User quote', - 'description' => 'Share a real quote with permission and context.', - 'content' => "[Username] sent us this about {{brand_name}}, posted with permission:\n\n\"[Real quote.]\"\n\nThat one made our week. Thanks [@username] for taking the time to write.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_use_case_share', - 'category' => 'testimonial', - 'name' => 'How someone uses it', - 'description' => 'Highlight a specific way someone uses your tool.', - 'content' => "[Person or org] uses {{brand_name}} to [specific use case].\n\nWhat they told us: \"[short specific quote].\"\n\nIf you have a setup worth sharing, reply or DM. We like collecting these.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_thanks_contributor', - 'category' => 'testimonial', - 'name' => 'Thanks to a contributor', - 'description' => 'Credit a contributor by name.', - 'content' => "Shoutout to [@username] for [specific contribution] on {{brand_name}}.\n\nThis kind of work is not glamorous and it is the reason the project keeps moving. Thank you.\n\nPR is here: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'mastodon_practical_tip', - 'category' => 'industry_tip', - 'name' => 'Practical tip', - 'description' => 'Share a real, specific tip.', - 'content' => "Tip if you work with [topic]:\n\n[One concrete tip in plain language.]\n\nWe figured this out the hard way after [brief context]. Maybe it saves someone else a few hours.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_unpopular_opinion', - 'category' => 'industry_tip', - 'name' => 'Unpopular opinion', - 'description' => 'Share a contrarian take you actually believe.', - 'content' => "Take that gets us in trouble: [contrarian belief about your field].\n\nReason: [the specific case where this holds].\n\nWe are open to being wrong. If you disagree, reply with the case and we will read it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_anti_pattern', - 'category' => 'industry_tip', - 'name' => 'Anti-pattern', - 'description' => 'Call out a common anti-pattern with care.', - 'content' => "Anti-pattern we see a lot in [domain]: [the pattern].\n\nWhy it bites you: [specific failure mode].\n\nWhat to do instead: [alternative]. Not always, but most of the time.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_stop_doing_this', - 'category' => 'industry_tip', - 'name' => 'Stop doing this', - 'description' => 'Push back on a habit that costs people time.', - 'content' => "Friendly push: stop [common habit] when working on [domain].\n\nIt costs you [specific cost] and the alternative is [alternative], which takes [effort].\n\nWe did the same thing for years. The change is small and the payoff is real.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // event - [ - 'slug' => 'mastodon_event_announce', - 'category' => 'event', - 'name' => 'Event announce', - 'description' => 'Announce an event without hype.', - 'content' => "{{brand_name}} is at [event] on [date] in [city].\n\n[Speaker or team member] is talking about [topic] at [time].\n\nIf you are around, come say hi. Boosts appreciated for fediverse folks who might be local.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_meetup_call', - 'category' => 'event', - 'name' => 'Meetup call', - 'description' => 'Invite people to a community meetup.', - 'content' => "Community call for {{brand_name}} this [day] at [time UTC].\n\nAgenda: [topic], [topic], open Q&A.\n\nLink: [video link]. Notes go up after on [link]. No login wall.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Recap an event with concrete takeaways.', - 'content' => "Back from [event]. Three things that stuck with us:\n\n1. [Specific takeaway].\n2. [Specific takeaway].\n3. [Specific takeaway].\n\nSlides from our talk are up: [link]. Thanks to everyone who came by the table.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'mastodon_what_are_you_using', - 'category' => 'engagement', - 'name' => 'What are you using', - 'description' => 'Ask what tools or setups people use.', - 'content' => "Curious what the fediverse is using for [specific task] in [year].\n\nWe are on [current setup] and it is [honest assessment]. Looking for what you would replace it with and why.\n\nReply with the tool and one sentence on the tradeoff.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_show_your_work', - 'category' => 'engagement', - 'name' => 'Show your work', - 'description' => 'Invite people to share what they are building.', - 'content' => "Show-and-tell thread: what are you building this week?\n\nWe will go first. {{brand_name}} is working on [thing]. It is [stage] and we are stuck on [problem].\n\nReply with yours. Boosts welcome so others can find it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/en/pinterest_pin.php b/templates/en/pinterest_pin.php deleted file mode 100644 index 74dfaa0a..00000000 --- a/templates/en/pinterest_pin.php +++ /dev/null @@ -1,306 +0,0 @@ - 'pinterest_how_to', - 'category' => 'educational', - 'name' => 'How-to pin', - 'description' => 'Step-by-step pin that drives saves and clicks.', - 'content' => "How to [achieve outcome] in [time/effort].\n\nA simple guide from {{brand_name}}.\n\nStep 1: [Action]\nStep 2: [Action]\nStep 3: [Action]\n\nFull tutorial → [link]", - 'image_count' => 1, - 'image_keywords' => ['tutorial', 'how-to', 'guide'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_inspiration', - 'category' => 'behind_the_scenes', - 'name' => 'Inspiration board', - 'description' => 'Inspirational pin around a theme or aesthetic.', - 'content' => "[Theme] inspiration, curated by {{brand_name}}.\n\nSave this for later.\n\nMore at → [link]", - 'image_count' => 1, - 'image_keywords' => ['inspiration', 'aesthetic', 'mood'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_product_showcase', - 'category' => 'product_launch', - 'name' => 'Product showcase', - 'description' => 'Highlight a product with a click-friendly description.', - 'content' => "[Product name] from {{brand_name}}.\n\n[Short benefit-led description, what it is, why it matters.]\n\nShop the look → [link]", - 'image_count' => 1, - 'image_keywords' => ['product', 'showcase', 'lifestyle'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_new_arrival', - 'category' => 'product_launch', - 'name' => 'New arrival pin', - 'description' => 'Announce a new product with searchable keywords.', - 'content' => "New from {{brand_name}}: [product name].\n\n[One sentence about what it is and who it is for.]\n\nKey features:\n- [Feature 1]\n- [Feature 2]\n- [Feature 3]\n\nAvailable in [colors/sizes/options].\n\nShop the [category] collection → [link]", - 'image_count' => 1, - 'image_keywords' => ['new product', 'launch', 'collection'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_collection_drop', - 'category' => 'product_launch', - 'name' => 'Collection drop pin', - 'description' => 'Introduce a curated product collection.', - 'content' => "The [collection name] collection is here.\n\n{{brand_name}} put together [number] pieces around [theme or season].\n\nWhat is inside:\n- [Item type 1]\n- [Item type 2]\n- [Item type 3]\n\nDesigned for [use case or audience].\n\nBrowse the full collection → [link]", - 'image_count' => 1, - 'image_keywords' => ['collection', 'lookbook', 'curated'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pre_order', - 'category' => 'product_launch', - 'name' => 'Pre-order pin', - 'description' => 'Drive saves and pre-orders for an upcoming product.', - 'content' => "Pre-order is open: [product name].\n\nShipping starts [date]. {{brand_name}} pre-order customers get [perk: early access, bonus item, locked-in price].\n\nWhy pre-order:\n- [Reason 1]\n- [Reason 2]\n\nReserve yours → [link]", - 'image_count' => 1, - 'image_keywords' => ['pre-order', 'launch', 'early access'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_seasonal_sale', - 'category' => 'promotion', - 'name' => 'Seasonal sale pin', - 'description' => 'Promote a seasonal sale with clear savings.', - 'content' => "[Season] sale at {{brand_name}}: [discount]% off [category].\n\nGood through [end date].\n\nWhat is on sale:\n- [Category 1]\n- [Category 2]\n- [Category 3]\n\nUse code [CODE] at checkout.\n\nShop the sale → [link]", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'seasonal shopping'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_bundle_deal', - 'category' => 'promotion', - 'name' => 'Bundle deal pin', - 'description' => 'Pin a value bundle with bullet pricing.', - 'content' => "The [bundle name] bundle from {{brand_name}}.\n\nBuy [item 1] + [item 2] + [item 3] together and save [amount].\n\nWhat is included:\n- [Item 1] (regularly [price])\n- [Item 2] (regularly [price])\n- [Item 3] (regularly [price])\n\nBundle price: [price].\n\nGrab the bundle → [link]", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'value pack', 'savings'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_free_shipping', - 'category' => 'promotion', - 'name' => 'Free shipping pin', - 'description' => 'Offer-led pin built around free shipping.', - 'content' => "Free shipping on every order at {{brand_name}}.\n\nNo minimum, no code. Through [end date].\n\nWhat to add to cart:\n- [Best seller 1]\n- [Best seller 2]\n- [Best seller 3]\n\nShop now → [link]", - 'image_count' => 1, - 'image_keywords' => ['free shipping', 'offer', 'deal'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_clearance', - 'category' => 'promotion', - 'name' => 'Clearance pin', - 'description' => 'Move clearance inventory with a save-worthy pin.', - 'content' => "Clearance at {{brand_name}}: up to [discount]% off.\n\nFinal markdowns on [category]. Once it is gone, it is gone.\n\nTop picks:\n- [Item 1], [price]\n- [Item 2], [price]\n- [Item 3], [price]\n\nShop clearance → [link]", - 'image_count' => 1, - 'image_keywords' => ['clearance', 'final sale', 'markdown'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_recipe', - 'category' => 'educational', - 'name' => 'Recipe pin', - 'description' => 'Save-worthy recipe pin with ingredients and steps.', - 'content' => "[Recipe name], ready in [time].\n\nFrom the {{brand_name}} kitchen.\n\nIngredients:\n- [Ingredient 1]\n- [Ingredient 2]\n- [Ingredient 3]\n- [Ingredient 4]\n\nMethod:\n1. [Step 1]\n2. [Step 2]\n3. [Step 3]\n\nServes [number]. Full recipe → [link]", - 'image_count' => 1, - 'image_keywords' => ['recipe', 'food', 'cooking'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_checklist', - 'category' => 'educational', - 'name' => 'Checklist pin', - 'description' => 'Practical checklist pin built for saves.', - 'content' => "The [topic] checklist from {{brand_name}}.\n\n[One sentence on who this is for.]\n\nThe checklist:\n- [Item 1]\n- [Item 2]\n- [Item 3]\n- [Item 4]\n- [Item 5]\n\nSave this pin so you have it when you need it.\n\nDownload the printable version → [link]", - 'image_count' => 1, - 'image_keywords' => ['checklist', 'planner', 'printable'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_beginners_guide', - 'category' => 'educational', - 'name' => 'Beginner guide pin', - 'description' => 'Beginner-friendly explainer pin.', - 'content' => "[Topic] for beginners.\n\nIf you are new to [topic], start here. {{brand_name}} put together the basics.\n\nWhat you need to know:\n1. [Concept 1]\n2. [Concept 2]\n3. [Concept 3]\n\nCommon beginner mistake: [mistake].\n\nRead the full guide → [link]", - 'image_count' => 1, - 'image_keywords' => ['beginner guide', 'basics', 'tutorial'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_diy_tutorial', - 'category' => 'educational', - 'name' => 'DIY tutorial pin', - 'description' => 'DIY project pin with a materials list.', - 'content' => "DIY [project name] in [time].\n\nA weekend project from {{brand_name}}.\n\nWhat you need:\n- [Material 1]\n- [Material 2]\n- [Material 3]\n- [Tool 1]\n\nThe steps:\n1. [Step 1]\n2. [Step 2]\n3. [Step 3]\n\nEstimated cost: [amount].\n\nFull tutorial with photos → [link]", - 'image_count' => 1, - 'image_keywords' => ['DIY', 'craft project', 'handmade'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_studio_tour', - 'category' => 'behind_the_scenes', - 'name' => 'Studio tour pin', - 'description' => 'Take followers inside the workspace.', - 'content' => "Inside the {{brand_name}} studio.\n\n[One sentence about what happens here.]\n\nThree things you will spot:\n- [Detail 1]\n- [Detail 2]\n- [Detail 3]\n\n[A note about the space, the team, or the routine.]\n\nMore studio photos → [link]", - 'image_count' => 1, - 'image_keywords' => ['studio', 'workspace', 'creative space'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_process_pin', - 'category' => 'behind_the_scenes', - 'name' => 'Making-of process pin', - 'description' => 'Show the craft behind a product.', - 'content' => "How {{brand_name}} makes [product].\n\nFrom [starting material] to finished piece, every step happens [where].\n\nThe process:\n1. [Stage 1]\n2. [Stage 2]\n3. [Stage 3]\n4. [Stage 4]\n\nTotal time per piece: [duration].\n\nSee the full process → [link]", - 'image_count' => 1, - 'image_keywords' => ['handmade', 'craft', 'process'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_founder_story', - 'category' => 'behind_the_scenes', - 'name' => 'Founder story pin', - 'description' => 'Personal pin about the brand origin.', - 'content' => "How {{brand_name}} started.\n\n[Founder name] launched [brand] in [year] after [origin moment].\n\n[Two short sentences on the why and the early days.]\n\nWhat is different about how we work:\n- [Value 1]\n- [Value 2]\n\nRead the full story → [link]", - 'image_count' => 1, - 'image_keywords' => ['founder story', 'small business', 'brand story'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_customer_review', - 'category' => 'testimonial', - 'name' => 'Customer review pin', - 'description' => 'Pull-quote pin from a real customer.', - 'content' => "\"[Customer quote about the product].\"\n- [Customer first name], [city or context]\n\n{{brand_name}} customers leave reviews like this every week.\n\nWhat [Customer first name] bought: [product name].\nWhy they bought it: [reason].\n\nRead more reviews → [link]", - 'image_count' => 1, - 'image_keywords' => ['customer review', 'testimonial', 'social proof'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_before_after', - 'category' => 'testimonial', - 'name' => 'Before and after pin', - 'description' => 'Visual transformation pin.', - 'content' => "Before and after with {{brand_name}} [product or service].\n\nBefore: [starting state].\nAfter: [end result].\nTime: [duration].\n\nWhat [customer name] used:\n- [Item 1]\n- [Item 2]\n\n[One sentence on the customer reaction.]\n\nSee more before and afters → [link]", - 'image_count' => 1, - 'image_keywords' => ['before and after', 'transformation', 'results'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_case_study', - 'category' => 'testimonial', - 'name' => 'Case study pin', - 'description' => 'Mini case study pin with concrete numbers.', - 'content' => "Case study: how [client name] used {{brand_name}} to [outcome].\n\nThe situation: [one sentence].\nWhat they tried: [product or service].\nThe result: [specific number or outcome] in [timeframe].\n\nWhy it worked:\n- [Reason 1]\n- [Reason 2]\n\nRead the full case study → [link]", - 'image_count' => 1, - 'image_keywords' => ['case study', 'results', 'success story'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pro_tip', - 'category' => 'industry_tip', - 'name' => 'Pro tip pin', - 'description' => 'Single-tip pin with a clear payoff.', - 'content' => "Pro tip: [tip in one sentence].\n\nMost people [common mistake]. The fix is [the actual technique].\n\nWhy it works: [one sentence on the reason].\n\nWhen to use it: [context or scenario].\n\nMore [topic] tips from {{brand_name}} → [link]", - 'image_count' => 1, - 'image_keywords' => ['pro tip', 'expert advice', 'industry tips'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_common_mistakes', - 'category' => 'industry_tip', - 'name' => 'Common mistakes pin', - 'description' => 'List of mistakes readers can avoid.', - 'content' => "[Number] [topic] mistakes to skip.\n\n{{brand_name}} sees these every week. Save the pin so you do not repeat them.\n\nThe mistakes:\n1. [Mistake 1], do this instead: [fix]\n2. [Mistake 2], do this instead: [fix]\n3. [Mistake 3], do this instead: [fix]\n\nRead the full breakdown → [link]", - 'image_count' => 1, - 'image_keywords' => ['common mistakes', 'tips', 'expert advice'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_industry_stat', - 'category' => 'industry_tip', - 'name' => 'Industry statistic pin', - 'description' => 'Stat-led pin that anchors a useful insight.', - 'content' => "[Statistic with number]% of [audience] [behavior].\nSource: [source, year].\n\nWhat that means for you: [one sentence on the implication].\n\nThree ways {{brand_name}} customers respond:\n- [Tactic 1]\n- [Tactic 2]\n- [Tactic 3]\n\nRead the full report → [link]", - 'image_count' => 1, - 'image_keywords' => ['industry data', 'statistics', 'research'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_workshop', - 'category' => 'event', - 'name' => 'Workshop pin', - 'description' => 'Pin promoting an in-person or online workshop.', - 'content' => "[Workshop name] with {{brand_name}}.\n\n[Date] · [time] · [location or online].\n\nWhat you will learn:\n- [Learning 1]\n- [Learning 2]\n- [Learning 3]\n\nWho it is for: [audience].\nSpots: [number] limited.\nPrice: [amount].\n\nReserve a seat → [link]", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'class', 'learning event'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pop_up', - 'category' => 'event', - 'name' => 'Pop-up shop pin', - 'description' => 'Drive foot traffic to a pop-up.', - 'content' => "{{brand_name}} pop-up shop in [city].\n\n[Date range] · [address] · [hours].\n\nWhat you will find:\n- [Category 1]\n- [Category 2]\n- [In-store exclusive]\n\n[One sentence on what makes the day worth the trip.]\n\nGet directions and full details → [link]", - 'image_count' => 1, - 'image_keywords' => ['pop-up shop', 'event', 'in-person shopping'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_webinar', - 'category' => 'event', - 'name' => 'Webinar pin', - 'description' => 'Promote a free or paid webinar.', - 'content' => "Free webinar: [topic].\n\nHosted by {{brand_name}} on [date] at [time, timezone].\n\nWhat we cover:\n- [Point 1]\n- [Point 2]\n- [Point 3]\n\nWho should attend: [audience].\nReplay: sent to everyone who registers.\n\nSave your spot → [link]", - 'image_count' => 1, - 'image_keywords' => ['webinar', 'online event', 'training'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_holiday_event', - 'category' => 'event', - 'name' => 'Holiday event pin', - 'description' => 'Holiday-themed event or promotion pin.', - 'content' => "{{brand_name}} [holiday name] event.\n\n[Date] · [location or online].\n\nOn the schedule:\n- [Activity 1]\n- [Activity 2]\n- [Activity 3]\n\nWhat to expect: [one sentence].\nRSVP by [date].\n\nFull schedule and RSVP → [link]", - 'image_count' => 1, - 'image_keywords' => ['holiday event', 'seasonal', 'celebration'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_question_pin', - 'category' => 'engagement', - 'name' => 'Question pin', - 'description' => 'Question-led pin that invites comments.', - 'content' => "[Open-ended question for the audience].\n\n{{brand_name}} is curious. Drop your answer in the comments.\n\nA few prompts to get you thinking:\n- [Prompt 1]\n- [Prompt 2]\n- [Prompt 3]\n\nWe will share the most interesting answers next week.\n\nJoin the conversation → [link]", - 'image_count' => 1, - 'image_keywords' => ['question', 'community', 'discussion'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_this_or_that', - 'category' => 'engagement', - 'name' => 'This or that pin', - 'description' => 'Side-by-side preference pin.', - 'content' => "This or that: [option A] or [option B].\n\n{{brand_name}} wants to know which side you are on. No wrong answer.\n\nThe case for [option A]: [one sentence].\nThe case for [option B]: [one sentence].\n\nVote in the comments. We will tally the results.\n\nMore polls → [link]", - 'image_count' => 1, - 'image_keywords' => ['poll', 'this or that', 'preference'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_giveaway', - 'category' => 'engagement', - 'name' => 'Giveaway pin', - 'description' => 'Pin announcing a giveaway with clear rules.', - 'content' => "{{brand_name}} giveaway: win [prize].\n\nOne winner picked on [date].\n\nHow to enter:\n1. Save this pin.\n2. Follow {{brand_name}} on Pinterest.\n3. Comment with [prompt].\n\nOpen to: [region].\nValue: [amount].\n\nFull rules → [link]", - 'image_count' => 1, - 'image_keywords' => ['giveaway', 'contest', 'prize'], - 'slides' => null, - ], -]; diff --git a/templates/en/threads_post.php b/templates/en/threads_post.php deleted file mode 100644 index 53fcf3d6..00000000 --- a/templates/en/threads_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'threads_hot_take', - 'category' => 'industry_tip', - 'name' => 'Hot take', - 'description' => 'A short, opinionated post designed to spark replies.', - 'content' => "Unpopular opinion: [counterintuitive statement about your industry].\n\nHere's why I think this →\n\n[Brief reasoning in 1–2 sentences.]\n\nAm I wrong?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_quick_tip', - 'category' => 'educational', - 'name' => 'Quick tip', - 'description' => 'One actionable tip in a short, friendly tone.', - 'content' => "Quick tip from {{brand_name}}:\n\n[Single, specific, actionable tip.]\n\nIt sounds simple. It changes everything.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_question', - 'category' => 'engagement', - 'name' => 'Open question', - 'description' => 'Ask the community a question to drive conversation.', - 'content' => "Genuine question for the {{brand_name}} community:\n\n[Question, open-ended and specific enough to answer.]\n\nNo wrong answers. Curious to read yours.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // PRODUCT LAUNCH - [ - 'slug' => 'threads_product_launch_soft', - 'category' => 'product_launch', - 'name' => 'Soft launch announcement', - 'description' => 'Casual, low-key announcement that something new is out.', - 'content' => "ok so. we shipped [product name] today.\n\nbeen working on it for [length of time] and i kind of can't believe it's actually live.\n\n[one specific thing it does that you're proud of].\n\nif you try it, tell me what breaks.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_product_launch_story', - 'category' => 'product_launch', - 'name' => 'Why we built it', - 'description' => 'Personal story behind the new product or feature.', - 'content' => "started building [product name] because [specific personal frustration].\n\nthought it would take a weekend. it took [actual time].\n\nit's live now at {{brand_name}}. honestly still surprised it works.\n\nwould love to hear what you think after you poke at it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_product_launch_feature', - 'category' => 'product_launch', - 'name' => 'New feature drop', - 'description' => 'Announce a single feature within an existing product.', - 'content' => "small thing but i'm weirdly excited about it.\n\n{{brand_name}} now [does this specific thing].\n\nthe reason: people kept asking for [the underlying need]. so we did it.\n\nit's live. go try it and let me know if it's actually useful or just a thing now.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // PROMOTION - [ - 'slug' => 'threads_promo_discount', - 'category' => 'promotion', - 'name' => 'Casual discount post', - 'description' => 'Low-pressure way to mention a sale or discount.', - 'content' => "running [discount amount] off [product or plan] this week at {{brand_name}}.\n\nnot doing the whole countdown timer thing. just figured i'd mention it once and let people decide.\n\ncode: [code]. ends [date].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_promo_bundle', - 'category' => 'promotion', - 'name' => 'Bundle offer', - 'description' => 'Promote a bundled deal in a relaxed tone.', - 'content' => "bundled [item one] and [item two] together because people kept buying them in the same order anyway.\n\nthe pair is [price] at {{brand_name}}, which is about [savings] less than buying them separate.\n\nthat's it. that's the post.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_promo_last_chance', - 'category' => 'promotion', - 'name' => 'Last chance reminder', - 'description' => 'Friendly nudge that an offer is ending.', - 'content' => "fair warning: [offer name] ends [date or time].\n\nnot trying to be pushy. some of you said you wanted me to remind you, so consider this the reminder.\n\nlink in bio if you want it. zero hard feelings if you don't.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // EDUCATIONAL - [ - 'slug' => 'threads_edu_mistake', - 'category' => 'educational', - 'name' => 'Mistake I made', - 'description' => 'Teach by sharing a personal mistake.', - 'content' => "made the same mistake [number] times before i figured this out:\n\n[the mistake in one sentence].\n\nthe fix is [the actual fix in plain words]. nothing fancy. just had to stop doing the thing.\n\nposting in case you're stuck on the same loop.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_misconception', - 'category' => 'educational', - 'name' => 'Common misconception', - 'description' => 'Correct a widely held but wrong belief.', - 'content' => "people keep telling me [common belief in your field].\n\nthat is not how it works.\n\n[what actually happens, in plain words].\n\nmight be obvious to some of you. apparently not to most of the people who emailed me last week.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_resource', - 'category' => 'educational', - 'name' => 'Resource share', - 'description' => 'Recommend a useful resource with personal context.', - 'content' => "if you're trying to learn [topic], stop watching 4 hour youtube videos and just read [specific resource].\n\ni put it off for months because the title is boring. it's the only thing that actually clicked for me.\n\nthat's the recommendation.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_step_breakdown', - 'category' => 'educational', - 'name' => 'Quick how-to', - 'description' => 'Tiny step-by-step in conversational tone.', - 'content' => "the [task] thing in 4 lines for anyone who keeps asking:\n\n1. [step one]\n2. [step two]\n3. [step three]\n4. [step four]\n\nthat is the whole process. you don't need a course for it.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // BEHIND THE SCENES - [ - 'slug' => 'threads_bts_morning', - 'category' => 'behind_the_scenes', - 'name' => 'Morning routine', - 'description' => 'Casual peek at how a workday starts.', - 'content' => "today at {{brand_name}}:\n\n- coffee\n- stared at [specific problem] for an hour\n- realized the bug was on line [number]\n- fixed it in 4 minutes\n\nthe ratio of thinking to doing in this job is genuinely cursed.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Decision we made', - 'description' => 'Share an internal decision and the reasoning.', - 'content' => "we decided to [specific decision] this week.\n\nthe other option was [alternative]. half the team wanted that one. i still kind of do.\n\nbut [the actual reason this decision won].\n\nask me in 3 months if it was the right call.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_messy_progress', - 'category' => 'behind_the_scenes', - 'name' => 'Messy progress shot', - 'description' => 'Honest mid-project update.', - 'content' => "current state of [project name]:\n\n- [percent] done\n- [specific thing that is working]\n- [specific thing that is not working]\n- [number] open tabs i'm afraid to close\n\nwill ship when it stops embarrassing me.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_team_moment', - 'category' => 'behind_the_scenes', - 'name' => 'Team moment', - 'description' => 'Small human moment from the team.', - 'content' => "[name on the team] just sent a slack message that said \"[short funny or insightful quote]\" and now we can't stop quoting it.\n\nbuilding {{brand_name}} with these people is half the reason i still like the job.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // TESTIMONIAL - [ - 'slug' => 'threads_testimonial_quote', - 'category' => 'testimonial', - 'name' => 'Customer quote', - 'description' => 'Share a real customer line with light context.', - 'content' => "got this email from [first name or initials] yesterday:\n\n\"[direct customer quote, 1-2 sentences]\"\n\ni read it twice. this is the part of the job that doesn't show up in the metrics.\n\nthank you for using {{brand_name}}. genuinely.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_testimonial_outcome', - 'category' => 'testimonial', - 'name' => 'Customer outcome', - 'description' => 'Talk about a real customer result without bragging.', - 'content' => "[customer first name] told me yesterday they [specific outcome] after using {{brand_name}} for [time period].\n\ni didn't ask them to share it. they just sent the screenshot and said \"thought you'd want to see this.\"\n\nyeah. i did.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_testimonial_unexpected', - 'category' => 'testimonial', - 'name' => 'Unexpected use case', - 'description' => 'Highlight a surprising way someone uses the product.', - 'content' => "didn't see this coming.\n\nsomeone using {{brand_name}} for [unexpected use case]. wasn't what we built it for. apparently it works.\n\nfavorite part of shipping things is finding out what people actually do with them.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // INDUSTRY TIP - [ - 'slug' => 'threads_industry_observation', - 'category' => 'industry_tip', - 'name' => 'Industry observation', - 'description' => 'Share a pattern you keep noticing in your field.', - 'content' => "thing i keep noticing in [industry]:\n\n[specific observation in one sentence].\n\ncould be a real shift. could be selection bias from who i talk to. tell me if you're seeing it too.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_lesson', - 'category' => 'industry_tip', - 'name' => 'Lesson from experience', - 'description' => 'Single hard-won lesson, no fluff.', - 'content' => "[number] years in [industry] and the lesson that took me longest to actually believe:\n\n[the lesson in one sentence].\n\nstill catch myself ignoring it. then something breaks. then i remember.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_pushback', - 'category' => 'industry_tip', - 'name' => 'Pushback on conventional wisdom', - 'description' => 'Politely disagree with a common piece of advice.', - 'content' => "the standard advice in [industry] is [common advice].\n\ni've been doing the opposite for [time period]. it works better for me, anyway.\n\n[brief reason why].\n\nnot saying everyone should. just that the rule isn't a rule.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_prediction', - 'category' => 'industry_tip', - 'name' => 'Quiet prediction', - 'description' => 'Make a prediction without grandstanding.', - 'content' => "small prediction:\n\nin [time frame], [specific change in your industry] will be normal.\n\ncould absolutely be wrong. saving this so i can come back and laugh at myself later.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // EVENT - [ - 'slug' => 'threads_event_announcement', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Casually announce an upcoming event.', - 'content' => "{{brand_name}} is doing [event name] on [date].\n\n[one or two sentences on what it actually is and who would care about it].\n\n[location or link]. tell a friend if it sounds like their thing.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Honest recap after an event.', - 'content' => "back from [event name].\n\nthe best part was [specific moment or conversation].\n\nthe weirdest part was [honest observation].\n\nif you were there and we didn't get to talk, message me. there's always more to say after the panel ends.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_event_invite', - 'category' => 'event', - 'name' => 'Personal invite', - 'description' => 'Direct invite that feels personal.', - 'content' => "doing a small [event type] for {{brand_name}} on [date] and i actually want you there.\n\nit's [duration] and we'll be talking about [specific topic].\n\nrsvp at [link] if you want in. capping it at [number] so it stays a real conversation.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ENGAGEMENT - [ - 'slug' => 'threads_engagement_recommendation', - 'category' => 'engagement', - 'name' => 'Recommendation request', - 'description' => 'Ask the audience for recommendations.', - 'content' => "looking for recommendations:\n\n[specific thing you need recommendations for].\n\ni've already tried [option a] and [option b]. need something that [specific constraint].\n\nbest reply gets my eternal gratitude. that is the prize.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_engagement_this_or_that', - 'category' => 'engagement', - 'name' => 'This or that', - 'description' => 'Quick binary question to drive replies.', - 'content' => "[option a] or [option b].\n\nno middle ground. no \"it depends.\" pick one and tell me why.\n\nrunning the {{brand_name}} version of this debate in our team chat and we are deeply, deeply split.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_engagement_confession', - 'category' => 'engagement', - 'name' => 'Tiny confession', - 'description' => 'Share something small and relatable.', - 'content' => "small confession.\n\ni still [slightly embarrassing habit related to your work or life].\n\ntell me i'm not the only one. or do tell me i'm the only one. either way i'd like to know.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/en/x_post.php b/templates/en/x_post.php deleted file mode 100644 index aa99368e..00000000 --- a/templates/en/x_post.php +++ /dev/null @@ -1,342 +0,0 @@ - 'flash_sale', - 'category' => 'promotion', - 'name' => 'Flash sale', - 'description' => 'Short X post for a flash sale with urgency.', - 'content' => "🔥 Flash sale at {{brand_name}}!\n\n[Discount]% off [product/service], ends in 24 hours.\n\nNo code needed → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'success_story', - 'category' => 'testimonial', - 'name' => 'Success story', - 'description' => 'Brief success-story format for X.', - 'content' => "\"[Short customer quote.]\"\n- @[handle]\n\nThis is why we do what we do at {{brand_name}}. 🙌", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'this_or_that_poll', - 'category' => 'engagement', - 'name' => 'This or that', - 'description' => 'Drive engagement with a simple binary choice question.', - 'content' => "Quick question for the {{brand_name}} community:\n\n[Option A] or [Option B]?\n\nReply with your pick and why 👇", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'shipped_today', - 'category' => 'product_launch', - 'name' => 'Shipped today', - 'description' => 'Casual ship announcement with one concrete change.', - 'content' => "Shipped today: [feature].\n\nIt does [one specific thing] so you can stop [annoying workaround].\n\nLive now in {{brand_name}}.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'new_feature_one_liner', - 'category' => 'product_launch', - 'name' => 'New feature one-liner', - 'description' => 'One-sentence pitch for a new feature.', - 'content' => "{{brand_name}} now [does specific thing].\n\nIf you've been [doing painful workaround], try it: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_invite', - 'category' => 'product_launch', - 'name' => 'Beta invite', - 'description' => 'Open call for beta testers.', - 'content' => "We're opening beta for [feature] this week.\n\nLooking for [number] people who [specific use case].\n\nReply if that's you.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'finally_built_it', - 'category' => 'product_launch', - 'name' => 'Finally built it', - 'description' => 'Honest "we got around to it" launch tone.', - 'content' => "Finally built [feature]. People have been asking for it since [time period].\n\nIt's live in {{brand_name}} today. Sorry it took so long.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'weekend_deal', - 'category' => 'promotion', - 'name' => 'Weekend deal', - 'description' => 'Weekend-only discount post.', - 'content' => "Weekend only: [discount] off [product] at {{brand_name}}.\n\nCode [CODE]. Expires Sunday at midnight. That's the whole post.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_shipping', - 'category' => 'promotion', - 'name' => 'Free shipping', - 'description' => 'Free shipping window announcement.', - 'content' => "Free shipping on every {{brand_name}} order over $[amount] this week.\n\nNo code, no minimum tricks. Goes back to normal Monday.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'last_call', - 'category' => 'promotion', - 'name' => 'Last call', - 'description' => 'Final hours of a sale.', - 'content' => "Last call. [Sale name] ends tonight at [time].\n\nIf you've had {{brand_name}} in your cart, this is the cheapest it gets this year: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bundle_offer', - 'category' => 'promotion', - 'name' => 'Bundle offer', - 'description' => 'Pitches a bundle as a saver deal.', - 'content' => "New bundle at {{brand_name}}: [Product A] + [Product B] for [price].\n\nThat's [amount] less than buying them separately. Limited to [quantity] units.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // educational - [ - 'slug' => 'one_thing_we_learned', - 'category' => 'educational', - 'name' => 'One thing we learned', - 'description' => 'Share a single concrete lesson.', - 'content' => "One thing we learned at {{brand_name}} this month:\n\n[Specific finding]. We thought [old assumption], but [data point] proved otherwise.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'common_mistake', - 'category' => 'educational', - 'name' => 'Common mistake', - 'description' => 'Call out a single mistake people make.', - 'content' => "Most people get [topic] wrong because they [common mistake].\n\nWhat actually works: [counter-approach]. We tested it on [number] customers.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'quick_tip', - 'category' => 'educational', - 'name' => 'Quick tip', - 'description' => 'Tiny actionable tip.', - 'content' => "Quick tip if you're using {{brand_name}}:\n\n[Specific action] before [step]. Saves about [time/result] for most people.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'myth_vs_reality', - 'category' => 'educational', - 'name' => 'Myth vs reality', - 'description' => 'Dispel one industry myth.', - 'content' => "Myth: [common belief about topic].\n\nReality: [counter-fact with number]. We see it in {{brand_name}} data every week.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'how_we_built_it', - 'category' => 'behind_the_scenes', - 'name' => 'How we built it', - 'description' => 'Casual behind-the-scenes peek.', - 'content' => "How we built [feature] at {{brand_name}}:\n\nStarted with [first attempt]. It broke. Switched to [approach 2]. Shipped that.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'team_at_work', - 'category' => 'behind_the_scenes', - 'name' => 'Team at work', - 'description' => 'Snapshot of what the team is doing right now.', - 'content' => "What the {{brand_name}} team is working on right now:\n\n[Person/role] is debugging [specific issue]. [Person/role] is on [other project]. Coffee count: high.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mistake_we_made', - 'category' => 'behind_the_scenes', - 'name' => 'Mistake we made', - 'description' => 'Honest postmortem in one tweet.', - 'content' => "We messed up at {{brand_name}} last week.\n\n[What broke]. Caused [impact] for [number] customers. Fixed it [how]. Sorry to anyone affected.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'office_moment', - 'category' => 'behind_the_scenes', - 'name' => 'Office moment', - 'description' => 'Small, human office snapshot.', - 'content' => "Random {{brand_name}} office moment:\n\n[Specific scene, e.g. designer arguing with engineer over a 2px button radius]. This is most days, honestly.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'customer_dm', - 'category' => 'testimonial', - 'name' => 'Customer DM', - 'description' => 'Share a real customer message.', - 'content' => "Got this DM from a {{brand_name}} customer today:\n\n\"[Short quote about what changed for them].\"\n\nThis is the part of the job that doesn't get old.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'before_and_after', - 'category' => 'testimonial', - 'name' => 'Before and after', - 'description' => 'Concrete before/after numbers from a customer.', - 'content' => "[Customer name] before {{brand_name}}: [metric].\n\n[Customer name] after [time period]: [new metric].\n\nNothing else changed in their setup.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'one_line_review', - 'category' => 'testimonial', - 'name' => 'One-line review', - 'description' => 'Single short customer line.', - 'content' => "\"[Specific customer line, max 12 words.]\"\n\n- [Customer name], [role] at [company]\n\nWe didn't ask them to write that.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'hot_take', - 'category' => 'industry_tip', - 'name' => 'Hot take', - 'description' => 'Opinionated take on the industry.', - 'content' => "Hot take: most people in [industry] think [common belief].\n\nAfter [time] running {{brand_name}}, I think the opposite. [Specific reason].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'overrated_underrated', - 'category' => 'industry_tip', - 'name' => 'Overrated underrated', - 'description' => 'Pair an overrated and underrated thing.', - 'content' => "Overrated in [industry]: [common practice].\n\nUnderrated: [overlooked practice].\n\nWe stopped doing the first at {{brand_name}} a year ago.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unpopular_opinion', - 'category' => 'industry_tip', - 'name' => 'Unpopular opinion', - 'description' => 'Share a contrarian observation.', - 'content' => "Unpopular opinion: [contrarian statement about industry].\n\n{{brand_name}} customers prove this every month. The data isn't subtle.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'what_changed_my_mind', - 'category' => 'industry_tip', - 'name' => 'What changed my mind', - 'description' => 'Honest mind-change moment.', - 'content' => "I used to think [old belief about industry].\n\nThen [specific event/data] happened at {{brand_name}}. Now I think [new view]. Still adjusting.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // event - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Event announcement', - 'description' => 'Plain event announcement.', - 'content' => "{{brand_name}} is hosting [event name] on [date] in [city].\n\n[Specific topic]. Free, [capacity] seats. Sign up: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Event recap', - 'description' => 'Short recap after an event.', - 'content' => "[Number] people showed up at the {{brand_name}} [event] last night.\n\nFavorite question: \"[real audience question].\" Recording goes up Friday.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'webinar_reminder', - 'category' => 'event', - 'name' => 'Webinar reminder', - 'description' => 'Reminder a webinar is happening soon.', - 'content' => "Reminder: {{brand_name}} webinar on [topic] starts in [time].\n\n[Speaker] is going to walk through [specific thing]. Last chance to register: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'open_question', - 'category' => 'engagement', - 'name' => 'Open question', - 'description' => 'Ask the audience a real question.', - 'content' => "Genuine question for anyone using [tool/category]:\n\nWhat's the one thing it still can't do that you wish it could?\n\nAsking because we're working on it at {{brand_name}}.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'fill_in_the_blank', - 'category' => 'engagement', - 'name' => 'Fill in the blank', - 'description' => 'Light fill-in-the-blank prompt.', - 'content' => "Fill in the blank:\n\nThe worst part of [task/topic] is ______.\n\nReading every reply. We're using them to plan {{brand_name}}'s next quarter.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'show_us_your_setup', - 'category' => 'engagement', - 'name' => 'Show us your setup', - 'description' => 'Ask people to share something visual.', - 'content' => "Show us your [thing, desk, dashboard, weekly routine].\n\nWe'll feature our favorite three on the {{brand_name}} account next week. No filter required.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/es/bluesky_post.php b/templates/es/bluesky_post.php deleted file mode 100644 index 7df037da..00000000 --- a/templates/es/bluesky_post.php +++ /dev/null @@ -1,316 +0,0 @@ - 'bluesky_now_live', - 'category' => 'product_launch', - 'name' => 'Ya disponible', - 'description' => 'Anuncia un lanzamiento con la onda abierta y descentralizada de Bluesky.', - 'content' => "Ya disponible: [feature/producto] de {{brand_name}}.\n\nQué cambió: [resumen en una línea].\n\nPara quién: [quién se beneficia].\n\nLink → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_thought', - 'category' => 'industry_tip', - 'name' => 'Pensamiento corto', - 'description' => 'Una observación concisa que se lee natural en Bluesky.', - 'content' => "[Observación sobre tu industria, contada en una o dos frases.]\n\nSimple, pero vale decirlo en voz alta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_invite', - 'category' => 'engagement', - 'name' => 'Invitación a la comunidad', - 'description' => 'Invita a la comunidad a un tema o conversación.', - 'content' => "Si te importa [tema], queremos escucharte.\n\n¿Qué te ronda la cabeza últimamente?\n\n- equipo {{brand_name}}", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_changelog_drop', - 'category' => 'product_launch', - 'name' => 'Changelog nuevo', - 'description' => 'Post de changelog directo para un release.', - 'content' => "v[versión] salió.\n\n• [cambio 1]\n• [cambio 2]\n• [bug fix]\n\nSin migrations. Notas completas: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_open_beta', - 'category' => 'product_launch', - 'name' => 'Beta abierta', - 'description' => 'Invita a los usuarios a una beta pública.', - 'content' => "Beta abierta: [feature] está disponible para quien quiera probarlo.\n\nTiene partes ásperas. Es justamente el punto. Bug reports bienvenidos.\n\nRegistrate: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_api_release', - 'category' => 'product_launch', - 'name' => 'Release de API', - 'description' => 'Anuncia una nueva API o feature para developers.', - 'content' => "Nuevo: [endpoint/SDK] de {{brand_name}}.\n\nDocs: [link]\nRepo de ejemplo: [link]\n\nSi falta algo en las docs, avisanos. Lo arreglamos más rápido de lo que esperás.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_discount', - 'category' => 'promotion', - 'name' => 'Ventana de descuento', - 'description' => 'Promo con plazo, dicha de forma directa.', - 'content' => "[X]% off en [plan/producto] hasta [fecha].\n\nSin registro de email. Sin popup. Solo el código: [CÓDIGO]\n\n[link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_lifetime', - 'category' => 'promotion', - 'name' => 'Lifetime deal', - 'description' => 'Oferta lifetime/early-bird pensada para builders.', - 'content' => "Lifetime deal en {{brand_name}}: [precio] una vez, sin suscripción.\n\nLimitado a [número] lugares. Después volvemos al mensual.\n\nLlevate uno: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_referral', - 'category' => 'promotion', - 'name' => 'Bonus por referido', - 'description' => 'Oferta de referidos directa.', - 'content' => "Referí a un amigo a {{brand_name}}, los dos reciben [recompensa].\n\nSin niveles. Sin ranking. Solo mandá tu link: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_one_thing', - 'category' => 'educational', - 'name' => 'Una cosa que aprendí', - 'description' => 'Una lección concreta, contada de forma simple.', - 'content' => "Una cosa que aprendí trabajando en [tema]:\n\n[lección concreta, una o dos frases].\n\nObvio en retrospectiva. No era obvio antes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_misconception', - 'category' => 'educational', - 'name' => 'Mito común', - 'description' => 'Corregí un mito difundido en tu área.', - 'content' => "Creencia común: [mito sobre tu área].\n\nLo que es verdad de hecho: [corrección].\n\nLa diferencia importa cuando [escenario específico].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_quick_how', - 'category' => 'educational', - 'name' => 'Tutorial rápido', - 'description' => 'Tutorial corto sobre una tarea específica.', - 'content' => "Cómo [tarea específica] en [herramienta]:\n\n1. [paso]\n2. [paso]\n3. [paso]\n\nEs todo. Sin config oculta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_tradeoff', - 'category' => 'educational', - 'name' => 'Explicación de un tradeoff', - 'description' => 'Mostrá un tradeoff real de tu dominio.', - 'content' => "[Opción A] vs [Opción B] es básicamente un tradeoff entre [cosa 1] y [cosa 2].\n\nSi te importa más [cosa 1], elegí A. Si [cosa 2], elegí B. La mayoría de los equipos eligen A y se arrepienten después.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_stack', - 'category' => 'behind_the_scenes', - 'name' => 'Nuestra stack', - 'description' => 'Nota honesta sobre la stack desde dentro del equipo.', - 'content' => "Nuestra stack en {{brand_name}}: [tech 1], [tech 2], [tech 3].\n\nElegimos [tech 1] por [motivo]. Nos arrepentimos de haber elegido [tech] por [motivo]. Probablemente lo cambiamos el próximo trimestre.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Mini postmortem', - 'description' => 'Nota corta y transparente sobre un incidente.', - 'content' => "[Servicio/feature] estuvo caído por [duración] hoy.\n\nCausa: [explicación simple].\nFix: [lo que hicimos].\n\nAgregamos [protección] para que la misma cosa no pase de la misma forma de nuevo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Por qué elegimos X', - 'description' => 'Explicá una decisión reciente de diseño o producto.', - 'content' => "Por qué elegimos [decisión] en lugar de [alternativa]:\n\n[motivo en una frase].\n\nNo es la elección popular. Pero encaja con cómo trabajan nuestros usuarios de verdad.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_numbers', - 'category' => 'behind_the_scenes', - 'name' => 'Números que miramos', - 'description' => 'Compartí una métrica real y qué significa.', - 'content' => "Un número que miramos de verdad en {{brand_name}}: [métrica].\n\nEl mes pasado fue [valor]. La semana anterior, [valor].\n\nEs la métrica que nos dice si [resultado] es real.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_quote', - 'category' => 'testimonial', - 'name' => 'Cita de un usuario', - 'description' => 'Cita corta de un usuario, sin adornos.', - 'content' => "De un usuario esta semana:\n\n\"[cita corta y específica sobre el producto].\"\n\n- [nombre], [rol]\n\nEs ese tipo de feedback el que nos mantiene construyendo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_workflow', - 'category' => 'testimonial', - 'name' => 'Cómo lo usa un cliente', - 'description' => 'Historia específica del workflow de un usuario.', - 'content' => "[Cliente/equipo] usa {{brand_name}} para [tarea específica].\n\nAntes: [forma vieja].\nAhora: [forma nueva].\n\nNo es dramático. Solo menos fricción todos los días.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_result', - 'category' => 'testimonial', - 'name' => 'Resultado concreto', - 'description' => 'Un resultado específico y medible de un cliente.', - 'content' => "[Cliente] redujo [tarea] de [tiempo viejo] a [tiempo nuevo] usando {{brand_name}}.\n\nUn cambio de workflow. Sin nuevas contrataciones.\n\nNota completa: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_take', - 'category' => 'industry_tip', - 'name' => 'Opinión medio impopular', - 'description' => 'Una opinión real sobre algo de tu industria.', - 'content' => "Opinión moderada: [opinión sobre tu industria].\n\nSé que es impopular. Cambié de idea sobre esto dos veces. Por ahora creo que se sostiene.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_pattern', - 'category' => 'industry_tip', - 'name' => 'Un patrón que veo seguido', - 'description' => 'Patrón observado entre equipos o proyectos.', - 'content' => "Un patrón que veo seguido en [industria/rol]:\n\n[patrón en una frase].\n\nGeneralmente funciona hasta [hito] y después deja de funcionar en silencio.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_anti_advice', - 'category' => 'industry_tip', - 'name' => 'Consejo que saltearía', - 'description' => 'Anti-consejo: consejo común que no se sostiene.', - 'content' => "Consejo que se escucha mucho: [consejo común].\n\nEn la práctica esto se cae cuando [escenario]. La versión que funciona de verdad es [consejo revisado].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_link_share', - 'category' => 'industry_tip', - 'name' => 'Link con contexto', - 'description' => 'Compartí un link con un motivo real para leerlo.', - 'content' => "Vale la lectura: [título del artículo/post].\n\nPor qué: [una cosa específica que el texto acierta].\n\n[link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_announce', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anunciá un evento o talk próximo.', - 'content' => "[Nombre del evento] el [fecha] a las [hora/timezone].\n\nTema: [qué vamos a cubrir].\nFormato: [talk / Q&A / demo].\n\nGratis, sin registro: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_speaking', - 'category' => 'event', - 'name' => 'Voy a hablar', - 'description' => 'Avisá que vas a hablar en una conferencia.', - 'content' => "Voy a hablar en [evento] el [fecha].\n\nTalk: [título o tema de la talk en palabras simples].\n\nSi andás por ahí, saludá. Especialmente si no estás de acuerdo con la talk.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_recap', - 'category' => 'event', - 'name' => 'Recap del evento', - 'description' => 'Recap corto después de un evento o meetup.', - 'content' => "Recap rápido del [evento]:\n\n• [qué funcionó]\n• [qué nos sorprendió]\n• [qué vamos a hacer distinto la próxima vez]\n\nGracias a todos los que aparecieron.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_office_hours', - 'category' => 'event', - 'name' => 'Office hours', - 'description' => 'Invitación a office hours abiertas o AMA.', - 'content' => "Office hours abiertas este [día] a las [hora/timezone].\n\nTraé preguntas reales sobre [tema]. Prefiero responder las difíciles antes que las fáciles.\n\nLink para entrar: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_question', - 'category' => 'engagement', - 'name' => 'Pregunta real', - 'description' => 'Una pregunta genuina, no engagement bait.', - 'content' => "Pregunta genuina para quien trabaja en [tema]:\n\n[pregunta específica].\n\nNo es retórica. Estoy trabado con esto y curioso por saber cómo lo manejan los demás.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_poll_lite', - 'category' => 'engagement', - 'name' => 'Dos lados', - 'description' => 'Un o/o liviano para tirar respuestas.', - 'content' => "Dos lados sobre [tema]:\n\nA: [opción A]\nB: [opción B]\n\n¿Cuál usás de verdad en el día a día, y qué te hizo elegirlo?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_show_us', - 'category' => 'engagement', - 'name' => 'Mostranos tu setup', - 'description' => 'Invitá a los usuarios a compartir su setup o workflow.', - 'content' => "Mostranos tu [setup / workflow / config] para [tarea].\n\nRespondé con un screenshot o una línea. Estamos juntando buenos patrones para devolver al grupo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/es/facebook_post.php b/templates/es/facebook_post.php deleted file mode 100644 index 3e4768cc..00000000 --- a/templates/es/facebook_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'facebook_special_offer', - 'category' => 'promotion', - 'name' => 'Oferta especial', - 'description' => 'Promociona una oferta especial en Facebook con una llamada a la acción clara.', - 'content' => "🎉 Oferta especial de {{brand_name}}.\n\n[Resumen de la oferta], disponible solo hasta [fecha].\n\nHaz clic en el enlace para aprovecharla: [link]\n\n¿Tienes preguntas? Déjalas en los comentarios, leemos cada una.", - 'image_count' => 1, - 'image_keywords' => ['offer', 'sale', 'promotion'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_community_story', - 'category' => 'behind_the_scenes', - 'name' => 'Historia de la comunidad', - 'description' => 'Comparte la historia de un cliente o un momento del equipo para crear conexión.', - 'content' => "Te presentamos a [nombre].\n\n[Historia corta, 2 a 4 frases, sobre cómo usa {{brand_name}} o lo que aporta a nuestra comunidad.]\n\nPor esto hacemos lo que hacemos. ❤️", - 'image_count' => 1, - 'image_keywords' => ['people', 'story', 'community'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_event_invite', - 'category' => 'event', - 'name' => 'Invitación a un evento', - 'description' => 'Invita a tus seguidores a un próximo evento o webinar.', - 'content' => "📅 Aparta la fecha.\n\n{{brand_name}} organiza [nombre del evento] el [fecha] a las [hora].\n\nVamos a hablar de:\n• [Tema 1]\n• [Tema 2]\n• [Tema 3]\n\nLa entrada es gratis. Reserva tu lugar → [link]", - 'image_count' => 1, - 'image_keywords' => ['event', 'calendar', 'invitation'], - 'slides' => null, - ], - - // Product launch (4) - [ - 'slug' => 'facebook_new_product_reveal', - 'category' => 'product_launch', - 'name' => 'Revelación de nuevo producto', - 'description' => 'Anuncia un producto nuevo a tu comunidad de Facebook.', - 'content' => "Después de [número] meses de trabajo, por fin podemos contarlo.\n\nTe presentamos [nombre del producto], el/la [descripción corta] que creamos porque [motivo]. Nuestro equipo escuchaba lo mismo de la gente de esta comunidad: [pedido frecuente]. Así que lo hicimos.\n\n{{brand_name}} envía el primer lote el [fecha]. El enlace está en el primer comentario.\n\n¿Qué quieres saber sobre él? Deja tu pregunta abajo y respondemos cada una esta semana.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_product_restock', - 'category' => 'product_launch', - 'name' => 'Anuncio de reposición de producto', - 'description' => 'Avisa a tus seguidores que un producto agotado volvió al stock.', - 'content' => "Volvió.\n\n[Nombre del producto] se agotó en [periodo] la última vez, y mucha gente quedó en lista de espera. Repusimos esta mañana con [cantidad] unidades.\n\nSi te lo perdiste antes, este es tu recordatorio: [link]\n\nPara quienes ya tienen uno, ¿qué le dirían a alguien que está pensando en pedirlo?", - 'image_count' => 1, - 'image_keywords' => ['product', 'restock', 'shelf'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_feature_release', - 'category' => 'product_launch', - 'name' => 'Lanzamiento de nueva función', - 'description' => 'Anuncia una nueva función agregada a un producto existente.', - 'content' => "Cambio pequeño, gran diferencia.\n\n{{brand_name}} acaba de liberar [nombre de la función]. Lo pidieron en los comentarios más veces de las que podemos contar, así que aquí está: [explicación en una frase de lo que hace].\n\nYa está disponible para todos a partir de hoy. No hay que actualizar nada.\n\nSi la pruebas esta semana, cuéntanos qué te parece. Ya estamos tomando notas para lo próximo.", - 'image_count' => 1, - 'image_keywords' => ['feature', 'update', 'screen'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_preorder_open', - 'category' => 'product_launch', - 'name' => 'Anuncio de preventa', - 'description' => 'Abre la preventa de un producto que está por lanzarse.', - 'content' => "La preventa está abierta.\n\n[Nombre del producto] se envía el [fecha], y dejamos que esta comunidad ordene primero. El precio de preventa es [precio] hasta [fecha límite], y solo hay [cantidad] lugares en la primera tanda.\n\nAquí está el enlace: [link]\n\nSi tienes dudas sobre [tema común: envío / talla / especificaciones], pregunta en los comentarios. Estamos por aquí toda la tarde.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product', 'package'], - 'slides' => null, - ], - - // Promotion (3) - [ - 'slug' => 'facebook_flash_sale', - 'category' => 'promotion', - 'name' => 'Alerta de oferta relámpago', - 'description' => 'Anuncia una oferta relámpago de corta duración con sentido de urgencia.', - 'content' => "Oferta relámpago, solo hoy.\n\n[Descuento] en [producto/categoría] hasta medianoche. Usa el código [CÓDIGO] al pagar.\n\nEs el precio más bajo que vamos a ofrecer esta temporada, y no la repetimos hasta [próxima fecha].\n\nEnlace en el primer comentario. Etiqueta a alguien que la tenga en la mira.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_holiday_promo', - 'category' => 'promotion', - 'name' => 'Promoción por fechas especiales', - 'description' => 'Lanza una promoción temática de fechas especiales con tono cercano.', - 'content' => "Feliz [nombre de la fecha] de parte de todos en {{brand_name}}.\n\nPara agradecerte por ser parte de este año, estamos dando [descuento] en [producto/categoría] desde [fecha inicial] hasta [fecha final]. Usa el código [CÓDIGO].\n\nSea lo que sea que estés celebrando esta semana, esperamos que la pases lindo. Cuéntanos en los comentarios cómo vas a vivirla.", - 'image_count' => 1, - 'image_keywords' => ['holiday', 'celebration', 'gift'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_bundle_deal', - 'category' => 'promotion', - 'name' => 'Promoción de combo', - 'description' => 'Promociona un combo de productos con ahorro.', - 'content' => "Dos de nuestros favoritos, mejores juntos.\n\n[Producto A] + [Producto B] ahora son combo, y el combo te ahorra [monto] frente a comprarlos por separado. Los juntamos porque los clientes los pedían en el mismo carrito una y otra vez.\n\nLlévate el tuyo aquí: [link]\n\nSi ya tienes uno de los dos, el otro es la pieza que falta. Confía en nosotros.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'products', 'package'], - 'slides' => null, - ], - - // Educational (4) - [ - 'slug' => 'facebook_how_to_guide', - 'category' => 'educational', - 'name' => 'Guía paso a paso', - 'description' => 'Enseña a tu audiencia a hacer algo útil.', - 'content' => "Cómo [tarea] en menos de [tiempo].\n\n1. [Paso 1 con un detalle real, no una instrucción vaga]\n2. [Paso 2]\n3. [Paso 3]\n4. [Paso 4]\n\nLa parte que la mayoría se salta es el [número de paso]. Si solo haces una cosa, que sea esa.\n\n¿Cuál es la duda sobre [tema] que siempre dejas para después? Pregunta abajo y la respondemos la próxima semana.", - 'image_count' => 1, - 'image_keywords' => ['tutorial', 'guide', 'how to'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_myth_buster', - 'category' => 'educational', - 'name' => 'Mito vs. realidad', - 'description' => 'Desmonta un mito común de tu industria.', - 'content' => "Hay un mito sobre [tema] que no se va.\n\nEl mito: [creencia común].\n\nLo que pasa en realidad: [explicación correcta, 2 a 3 frases con un ejemplo o número específico].\n\nLo escuchamos hace años. Si tú también lo creías, estás en buena compañía, la mayoría lo creía. Ahora ya lo sabes.\n\n¿Qué otros mitos de [industria] te sacan de quicio?", - 'image_count' => 1, - 'image_keywords' => ['fact check', 'information', 'thinking'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_quick_tip', - 'category' => 'educational', - 'name' => 'Tip rápido', - 'description' => 'Comparte un consejo corto que tu audiencia pueda usar hoy.', - 'content' => "Tip rápido que puedes usar hoy.\n\nSi [situación común], prueba [acción específica] en lugar de [enfoque habitual]. La razón: [explicación en una frase de por qué funciona].\n\nEmpezamos a hacerlo con [ejemplo] y cambió la forma en que [resultado]. Cambio chico, diferencia real.\n\nPruébalo esta semana y cuéntanos cómo te fue.", - 'image_count' => 1, - 'image_keywords' => ['tip', 'lightbulb', 'idea'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_common_mistake', - 'category' => 'educational', - 'name' => 'Error común a evitar', - 'description' => 'Ayuda a tus lectores a evitar un error común en tu campo.', - 'content' => "El error más común que vemos en [tema]: [error específico].\n\nSuele pasar cuando [contexto]. El resultado es [consecuencia], y para cuando te das cuenta, [perjuicio].\n\nQué hacer en lugar de eso: [alternativa clara]. Toma [tiempo/esfuerzo] más al principio y te ahorra [beneficio] después.\n\nSi ya lo cometiste, no estás solo. Nosotros también. ¿Cuál es un error sobre el que te gustaría que alguien te hubiera avisado antes?", - 'image_count' => 1, - 'image_keywords' => ['mistake', 'warning', 'lesson'], - 'slides' => null, - ], - - // Behind the scenes (4) - [ - 'slug' => 'facebook_team_intro', - 'category' => 'behind_the_scenes', - 'name' => 'Presentación de un miembro del equipo', - 'description' => 'Presenta a un miembro del equipo a la comunidad.', - 'content' => "Saluda a [nombre].\n\n[Nombre] es nuestro/a [puesto] y lleva en {{brand_name}} desde hace [tiempo]. Es la razón por la que [cosa específica que cuida o mejoró], y si alguna vez escribiste a soporte, hay buenas chances de que te haya respondido.\n\nDato curioso: [un detalle humano, hobby, talento raro, snack favorito].\n\nDéjale un saludo en los comentarios.", - 'image_count' => 1, - 'image_keywords' => ['team', 'portrait', 'workplace'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_workspace_tour', - 'category' => 'behind_the_scenes', - 'name' => 'Tour por el espacio de trabajo', - 'description' => 'Muestra a tus seguidores cómo es tu espacio o estudio.', - 'content' => "Un vistazo al lugar donde pasa todo.\n\nEste es [nombre del lugar] de {{brand_name}}. [Un detalle específico, la luz, el desorden, el rincón que todos quieren]. Pasamos casi todo el día aquí, y se nota.\n\n[Segundo detalle, algo visible en la foto que tiene una historia detrás].\n\n¿Cómo está tu espacio de trabajo ahora mismo? Respuesta honesta, con tazas de café incluidas.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'office', 'studio'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_making_of', - 'category' => 'behind_the_scenes', - 'name' => 'Detrás del proceso', - 'description' => 'Muestra cómo se hace un producto o un trabajo.', - 'content' => "¿Te has preguntado cómo se hace de verdad [producto/servicio]?\n\nEmpieza con [primer paso] y termina con [último paso]. En el medio hay mucho de [descripción honesta, prueba, rehacer, dudar]. La versión que terminas comprando suele ser el intento [número].\n\nAquí va una foto del lote de esta semana. El/la [detalle específico] es la parte que nadie ve pero todos notan cuando está bien hecha.\n\n¿Preguntas sobre el proceso? Adelante.", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'process', 'craft'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_milestone_celebration', - 'category' => 'behind_the_scenes', - 'name' => 'Celebración de un hito', - 'description' => 'Celebra un hito importante con la comunidad.', - 'content' => "Hoy es [hito, aniversario, número de clientes, lo que sea real].\n\nArrancamos {{brand_name}} hace [tiempo] con [detalle honesto del origen, una mesa de cocina, un cliente, una laptop prestada]. El plan era simple y un poco ingenuo: [objetivo original].\n\n[Hito] después, seguimos aquí, sobre todo gracias a la gente de esta comunidad que siguió apareciendo. Gracias, en serio.\n\nCuéntanos en los comentarios, ¿cuándo nos descubriste por primera vez?", - 'image_count' => 1, - 'image_keywords' => ['celebration', 'milestone', 'anniversary'], - 'slides' => null, - ], - - // Testimonial (3) - [ - 'slug' => 'facebook_customer_quote', - 'category' => 'testimonial', - 'name' => 'Testimonio de cliente', - 'description' => 'Comparte un testimonio de cliente con sus propias palabras.', - 'content' => "\"[Cita directa del cliente, mantenla específica, con su voz, con un resultado o sentimiento real.]\"\n\n- [Nombre del cliente], [ciudad o rol]\n\nRecibimos este mensaje hace [tiempo] y le preguntamos si podíamos compartirlo. [Primer nombre] dijo que sí. Estamos agradecidos por palabras así y por todos los que se toman un minuto para mandarlas.\n\nSi {{brand_name}} también fue parte de tu historia, nos encantaría leerte en los comentarios.", - 'image_count' => 1, - 'image_keywords' => ['testimonial', 'happy customer', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_before_after_story', - 'category' => 'testimonial', - 'name' => 'Historia de antes y después', - 'description' => 'Cuenta una historia de transformación de un cliente.', - 'content' => "Antes: [situación del cliente cuando encontró {{brand_name}}, descríbela en 2 a 3 frases honestas].\n\nDespués: [qué cambió, con un resultado específico y un plazo].\n\n[Nombre del cliente] nos mandó esta actualización el mes pasado, y es de esas cosas que dejan a toda la oficina en silencio un segundo. El trabajo no lo hicimos nosotros, lo hizo él/ella. Solo ayudamos donde podíamos.\n\nSi estás dudando por [duda común], historias así pueden ser la razón para empezar.", - 'image_count' => 1, - 'image_keywords' => ['transformation', 'progress', 'result'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_review_highlight', - 'category' => 'testimonial', - 'name' => 'Reseña destacada', - 'description' => 'Destaca una reseña reciente con contexto.', - 'content' => "Reseña de 5 estrellas de [nombre del cliente] esta semana:\n\n\"[Saca una frase real y concreta de la reseña, no el elogio genérico, la parte con el detalle de verdad.]\"\n\nGuardamos reseñas así y las releemos en los días difíciles. Gracias, [primer nombre].\n\nSi tienes unos minutos y {{brand_name}} te ayudó, dejar una reseña aquí es la cosa más linda que puedes hacer por nosotros: [link]", - 'image_count' => 1, - 'image_keywords' => ['review', 'stars', 'feedback'], - 'slides' => null, - ], - - // Industry tip (3) - [ - 'slug' => 'facebook_industry_insight', - 'category' => 'industry_tip', - 'name' => 'Insight de la industria', - 'description' => 'Comparte un insight útil de tu industria.', - 'content' => "Algo que notamos trabajando en [industria] este año:\n\n[Observación específica, un cambio, un patrón, un hallazgo contraintuitivo. 2 a 3 frases con un número o ejemplo.]\n\nNo creemos que se revierta pronto, y los negocios que se preparen ahora la van a tener más fácil que los que esperen.\n\n¿Estás viendo lo mismo? Nos da curiosidad cómo lo estás viviendo.", - 'image_count' => 1, - 'image_keywords' => ['insight', 'industry', 'analysis'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_pro_tip', - 'category' => 'industry_tip', - 'name' => 'Consejo de la experiencia', - 'description' => 'Comparte un consejo aprendido en la práctica.', - 'content' => "Un consejo de pro que aprendimos a la mala:\n\nCuando [situación común], siempre [acción específica]. Antes nos saltábamos este paso porque parecía trabajo extra, hasta que [historia, qué salió mal].\n\nAhora es lo primero que hacemos, sin falta. Toma [tiempo] y evita [problema].\n\n¿Qué consejo le darías a alguien que recién empieza en [área]?", - 'image_count' => 1, - 'image_keywords' => ['expertise', 'professional', 'advice'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_industry_trend', - 'category' => 'industry_tip', - 'name' => 'Explicación de una tendencia', - 'description' => 'Explica una tendencia en lenguaje sencillo.', - 'content' => "Todos en [industria] están hablando de [tendencia]. Aquí va lo que significa de verdad, en palabras simples.\n\n[Explicación en 2 a 3 frases sin tecnicismos, con un ejemplo concreto.]\n\nSi cumple lo que promete, ya es otra historia. Nuestra opinión: [opinión honesta, qué tomarse en serio, qué ignorar].\n\n¿Y tú qué piensas? Tenemos curiosidad por saber dónde queda parada la comunidad.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry', 'explainer'], - 'slides' => null, - ], - - // Event (3) - [ - 'slug' => 'facebook_event_recap', - 'category' => 'event', - 'name' => 'Resumen del evento', - 'description' => 'Comparte un resumen después de que el evento terminó.', - 'content' => "[Nombre del evento] acaba de terminar y todavía nos estamos recuperando.\n\nFueron [número] de ustedes los que se sumaron, hicieron buenas preguntas y se quedaron hasta tarde. Momentos destacados: [momento 1], [momento 2] y la parte donde [cosa graciosa o memorable específica].\n\nGracias enormes a todos los que vinieron. Si te lo perdiste, grabamos la sesión principal y el enlace está en el primer comentario.\n\n¿Cuál fue tu momento favorito del día? Etiqueta a alguien que conociste allí.", - 'image_count' => 1, - 'image_keywords' => ['event', 'recap', 'crowd'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_event_countdown', - 'category' => 'event', - 'name' => 'Cuenta regresiva del evento', - 'description' => 'Genera expectativa a medida que el evento se acerca.', - 'content' => "Faltan [número] días para [nombre del evento].\n\nSi todavía no apartaste tu lugar, ahora es el momento. Quedan [número] cupos, y en la última semana suelen volar.\n\nQué esperar el [fecha]: [un detalle real], [otro detalle real] y tiempo para hablar de verdad con la gente, no solo ver diapositivas.\n\nConsigue tu entrada aquí: [link]\n\n¿Quién va? Comenta para saber a quién buscar.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'event', 'tickets'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_workshop_announcement', - 'category' => 'event', - 'name' => 'Anuncio de taller', - 'description' => 'Anuncia un taller práctico.', - 'content' => "Vamos a hacer un taller sobre [tema].\n\n[Fecha] a las [hora]. Cupos limitados a [número] personas porque es práctico, no un webinar. Te vas con [resultado específico, algo terminado, una configuración funcionando, un plan escrito].\n\nPara quién es: [audiencia]. Para quién no es: [aclaración honesta].\n\nDetalles e inscripción: [link]\n\n¿Dudas sobre si te conviene? Pregunta en los comentarios.", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'learning', 'hands on'], - 'slides' => null, - ], - - // Engagement (3) - [ - 'slug' => 'facebook_question_prompt', - 'category' => 'engagement', - 'name' => 'Pregunta para la comunidad', - 'description' => 'Hazle una pregunta reflexiva a la comunidad.', - 'content' => "Pregunta sincera para la comunidad.\n\nCuando [situación común relacionada con {{brand_name}}], ¿cómo sueles [decisión específica]? Te preguntamos porque seguimos viendo el mismo tema en los DMs, y tenemos la corazonada de que nuestra respuesta no es la única buena.\n\nNo hay respuestas equivocadas. Leemos cada comentario.", - 'image_count' => 1, - 'image_keywords' => ['question', 'conversation', 'people talking'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_this_or_that', - 'category' => 'engagement', - 'name' => 'Encuesta esto o aquello', - 'description' => 'Lanza una publicación divertida estilo esto o aquello.', - 'content' => "Resuelve un debate que tenemos toda la semana.\n\n¿[Opción A] o [Opción B]?\n\nSin pensarlo mucho. Primer instinto, en los comentarios.\n\nPara que sepas, el equipo está dividido [número] a [número]. Contamos el lado ganador el viernes.", - 'image_count' => 1, - 'image_keywords' => ['choice', 'comparison', 'options'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_fill_in_blank', - 'category' => 'engagement', - 'name' => 'Completa la frase', - 'description' => 'Invita a tus seguidores a completar una frase.', - 'content' => "Completa la frase:\n\nLo que ojalá hubiera sabido antes de [tema] es __________.\n\nEmpezamos nosotros: [tu respuesta honesta, con una historia real al lado].\n\nTu turno. Las mejores respuestas que recibimos en estas preguntas terminan ayudando a alguien que las lee después, así que no te guardes nada.", - 'image_count' => 1, - 'image_keywords' => ['conversation', 'thinking', 'community'], - 'slides' => null, - ], -]; diff --git a/templates/es/facebook_story.php b/templates/es/facebook_story.php deleted file mode 100644 index 0bb7e301..00000000 --- a/templates/es/facebook_story.php +++ /dev/null @@ -1,326 +0,0 @@ - 'fb_story_announcement', - 'category' => 'product_launch', - 'name' => 'Aviso rápido', - 'description' => 'Atrae atención a una novedad con un Story de 24h en Facebook.', - 'content' => "Aviso de {{brand_name}}.\n\n[Destaque en una línea]\n\nLink en el perfil.", - 'image_count' => 1, - 'image_keywords' => ['announcement', 'launch'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_promo', - 'category' => 'promotion', - 'name' => 'Promo flash', - 'description' => 'Oferta por tiempo limitado en formato Story.', - 'content' => "Solo hoy.\n\n[Descuento]% off en {{brand_name}}.\n\nToca para comprar.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'urgency'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_question', - 'category' => 'engagement', - 'name' => 'Pregunta rápida', - 'description' => 'Pregunta algo a tus seguidores para generar respuestas.', - 'content' => "Rapidito.\n\n[Pregunta para tu audiencia]\n\nResponde este Story.", - 'image_count' => 1, - 'image_keywords' => ['question', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_new_drop', - 'category' => 'product_launch', - 'name' => 'Novedad', - 'description' => 'Presenta un producto nuevo con un toque visual.', - 'content' => "Llegó.\n\n[Nombre del producto] de {{brand_name}}.\n\nToca para verlo.", - 'image_count' => 1, - 'image_keywords' => ['new product', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_preorder', - 'category' => 'product_launch', - 'name' => 'Preventa abierta', - 'description' => 'Abre la preventa con un Story corto.', - 'content' => "Preventa abierta.\n\n[Producto] se envía el [fecha].\n\nLink en bio.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_launch_day', - 'category' => 'product_launch', - 'name' => 'Día del lanzamiento', - 'description' => 'Marca el lanzamiento en vivo con CTA de un toque.', - 'content' => "En vivo ahora.\n\n[Producto] sale hoy.\n\nToca para llevarlo.", - 'image_count' => 1, - 'image_keywords' => ['launch', 'product reveal'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_back_in_stock', - 'category' => 'product_launch', - 'name' => 'Volvió al stock', - 'description' => 'Avisa que un producto agotado volvió.', - 'content' => "Volvió al stock.\n\n[Producto] en {{brand_name}}.\n\nSe va rápido. Toca para ver.", - 'image_count' => 1, - 'image_keywords' => ['restock', 'available'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bogo', - 'category' => 'promotion', - 'name' => 'Lleva 2 paga 1', - 'description' => 'Empuja una oferta lleva 2 paga 1 en Story.', - 'content' => "Lleva 2, paga 1.\n\nEsta semana en {{brand_name}}.\n\nToca para comprar.", - 'image_count' => 1, - 'image_keywords' => ['bogo', 'sale'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_free_shipping', - 'category' => 'promotion', - 'name' => 'Envío gratis', - 'description' => 'Promociona una ventana de envío gratis.', - 'content' => "Envío gratis.\n\n48h solo en {{brand_name}}.\n\nUsa el código [CODE].", - 'image_count' => 1, - 'image_keywords' => ['shipping', 'delivery box'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_last_chance', - 'category' => 'promotion', - 'name' => 'Última oportunidad', - 'description' => 'Aviso final de un descuento que termina.', - 'content' => "Última oportunidad.\n\n[Descuento]% off acaba esta noche.\n\nToca en {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'sale ending'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_coupon_drop', - 'category' => 'promotion', - 'name' => 'Cupón liberado', - 'description' => 'Suelta un código de cupón en un Story de 24h.', - 'content' => "Código [CODE].\n\n[Descuento]% off en {{brand_name}}.\n\nSe va en 24h.", - 'image_count' => 1, - 'image_keywords' => ['coupon', 'promo code'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_quick_tip', - 'category' => 'educational', - 'name' => 'Tip rápido', - 'description' => 'Comparte un tip útil.', - 'content' => "Tip rápido.\n\n[Un tip práctico].\n\nGuarda este Story.", - 'image_count' => 1, - 'image_keywords' => ['tip', 'advice'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_did_you_know', - 'category' => 'educational', - 'name' => 'Sabías que', - 'description' => 'Sorprende a tus seguidores con un dato rápido.', - 'content' => "¿Sabías que?\n\n[Dato curioso].\n\nMás en el blog de {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['fact', 'lightbulb'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_myth_buster', - 'category' => 'educational', - 'name' => 'Mito o verdad', - 'description' => 'Derriba un mito común de un solo golpe.', - 'content' => "Mito: [creencia común].\n\nReal: [verdad].\n\nToca para entender.", - 'image_count' => 1, - 'image_keywords' => ['myth', 'truth'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_one_minute_lesson', - 'category' => 'educational', - 'name' => 'Lección de 1 minuto', - 'description' => 'Lección corta con CTA de toque.', - 'content' => "Lección de 60 segundos.\n\n[Tema] de {{brand_name}}.\n\nToca para verla.", - 'image_count' => 1, - 'image_keywords' => ['lesson', 'teaching'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_workspace', - 'category' => 'behind_the_scenes', - 'name' => 'Detrás de cámaras', - 'description' => 'Muestra el lugar donde todo pasa.', - 'content' => "Hoy en {{brand_name}}.\n\n[Lo que pasa ahora].\n\nToca para ver más.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'office'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_team', - 'category' => 'behind_the_scenes', - 'name' => 'Conoce al equipo', - 'description' => 'Presenta a un miembro del equipo rápido.', - 'content' => "Conoce a [nombre].\n\n[Rol en {{brand_name}}].\n\nToca para saludar.", - 'image_count' => 1, - 'image_keywords' => ['team', 'employee'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_process', - 'category' => 'behind_the_scenes', - 'name' => 'Cómo se hace', - 'description' => 'Vistazo rápido a cómo se produce algo.', - 'content' => "Cómo se hace [producto].\n\nPaso [n] en {{brand_name}}.\n\nToca por el video completo.", - 'image_count' => 1, - 'image_keywords' => ['production', 'process'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_packing', - 'category' => 'behind_the_scenes', - 'name' => 'Empacando pedidos', - 'description' => 'Muestra los pedidos saliendo.', - 'content' => "Empacando pedidos.\n\n[Número] salen hoy.\n\nGracias por el apoyo.", - 'image_count' => 1, - 'image_keywords' => ['packing', 'shipping'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_customer_quote', - 'category' => 'testimonial', - 'name' => 'Frase de cliente', - 'description' => 'Muestra una frase corta de un cliente.', - 'content' => "\"[Frase del cliente].\"\n\n- [nombre]\n\nToca para leer más.", - 'image_count' => 1, - 'image_keywords' => ['quote', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_five_star', - 'category' => 'testimonial', - 'name' => 'Reseña 5 estrellas', - 'description' => 'Destaca una reseña de 5 estrellas.', - 'content' => "5 estrellas.\n\n\"[Reseña corta]\", [nombre]\n\nMás en {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['five stars', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_before_after', - 'category' => 'testimonial', - 'name' => 'Antes y después', - 'description' => 'Muestra un antes/después con un solo CTA.', - 'content' => "Antes. Después.\n\n[Nombre del cliente] usando {{brand_name}}.\n\nToca por la historia.", - 'image_count' => 1, - 'image_keywords' => ['before after', 'transformation'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_industry_trend', - 'category' => 'industry_tip', - 'name' => 'Tendencia del sector', - 'description' => 'Suelta una idea rápida de tendencia.', - 'content' => "Tendencia.\n\n[Tendencia del sector en una línea].\n\nToca por nuestra visión.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_pro_hack', - 'category' => 'industry_tip', - 'name' => 'Hack pro', - 'description' => 'Comparte un hack rápido de profesional.', - 'content' => "Hack pro.\n\n[Truco en una línea].\n\nMás tips en {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['hack', 'shortcut'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_mistake_to_avoid', - 'category' => 'industry_tip', - 'name' => 'Error a evitar', - 'description' => 'Advierte sobre un error común.', - 'content' => "Deja de hacer esto.\n\n[Error común].\n\nToca por la solución.", - 'image_count' => 1, - 'image_keywords' => ['warning', 'mistake'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_save_date', - 'category' => 'event', - 'name' => 'Aparta la fecha', - 'description' => 'Planta un save the date en un Story de 24h.', - 'content' => "Aparta la fecha.\n\n[Evento] el [fecha].\n\nRSVP en bio.", - 'image_count' => 1, - 'image_keywords' => ['calendar', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_today', - 'category' => 'event', - 'name' => 'Evento hoy', - 'description' => 'Recordatorio de evento del mismo día.', - 'content' => "Hoy.\n\n[Evento] a las [hora].\n\nToca por el link.", - 'image_count' => 1, - 'image_keywords' => ['event', 'live'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_live_starting', - 'category' => 'event', - 'name' => 'Vamos en vivo', - 'description' => 'Lleva a tus seguidores a la transmisión.', - 'content' => "Vamos en vivo.\n\n[Tema] en [minutos] minutos.\n\nToca para entrar a {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['live stream', 'broadcast'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_recap', - 'category' => 'event', - 'name' => 'Resumen del evento', - 'description' => 'Resumen rápido al día siguiente.', - 'content' => "Eso fue [evento].\n\nGracias por venir.\n\nResumen completo en la página.", - 'image_count' => 1, - 'image_keywords' => ['event recap', 'crowd'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_poll_this_or_that', - 'category' => 'engagement', - 'name' => 'Esta o esa', - 'description' => 'Story tipo encuesta con dos opciones.', - 'content' => "[Opción A] o [Opción B]?\n\nResponde con tu elección.\n\nLeemos todas.", - 'image_count' => 1, - 'image_keywords' => ['poll', 'choice'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_dm_us', - 'category' => 'engagement', - 'name' => 'Mándanos DM', - 'description' => 'Invita a seguidores a mandar mensaje.', - 'content' => "Mándanos DM.\n\n[Motivo para escribir a {{brand_name}}].\n\nRespondemos rápido.", - 'image_count' => 1, - 'image_keywords' => ['message', 'chat'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_caption_this', - 'category' => 'engagement', - 'name' => 'Ponle caption', - 'description' => 'Pedido de caption en abierto.', - 'content' => "Ponle caption.\n\n[Contexto de la imagen].\n\nManda el mejor.", - 'image_count' => 1, - 'image_keywords' => ['fun', 'reaction'], - 'slides' => null, - ], -]; diff --git a/templates/es/instagram_carousel.php b/templates/es/instagram_carousel.php deleted file mode 100644 index e043b7d1..00000000 --- a/templates/es/instagram_carousel.php +++ /dev/null @@ -1,523 +0,0 @@ - 'feature_launch_carousel', - 'category' => 'product_launch', - 'name' => 'Lanzamiento de funcionalidad', - 'description' => 'Anuncia una nueva funcionalidad del producto en un carrusel de 5 slides.', - 'content' => '{{brand_name}} acaba de lanzar algo que nos tiene entusiasmados. Desliza para ver lo nuevo.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Lo nuevo', 'body' => 'Un vistazo rápido a la última actualización.', 'image_keywords' => ['product', 'launch']], - ['title' => 'Cómo funciona', 'body' => 'Tres pasos y ya estás usándolo.', 'image_keywords' => ['workflow']], - ['title' => 'Por qué importa', 'body' => 'Más rápido, más simple, con menos clics.', 'image_keywords' => ['speed']], - ['title' => 'Para quién es', 'body' => 'Hecho para equipos que entregan.', 'image_keywords' => ['team']], - ['title' => 'Pruébalo ya', 'body' => 'Disponible hoy. Link en bio.', 'image_keywords' => ['phone', 'app']], - ], - ], - [ - 'slug' => 'five_tips_carousel', - 'category' => 'educational', - 'name' => 'Carrusel de 5 consejos', - 'description' => 'Comparte cinco consejos prácticos en un carrusel deslizable.', - 'content' => '5 cosas que me hubiera gustado saber antes sobre [tema]. Guárdalo para después. 👇', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Consejo #1', 'body' => '[Primer consejo, sé específico y práctico.]', 'image_keywords' => ['idea', 'lightbulb']], - ['title' => 'Consejo #2', 'body' => '[Segundo consejo, usa un ejemplo real si puedes.]', 'image_keywords' => ['notebook']], - ['title' => 'Consejo #3', 'body' => '[Tercer consejo, sé breve.]', 'image_keywords' => ['focus']], - ['title' => 'Consejo #4', 'body' => '[Cuarto consejo, algo sorprendente o que va contra la intuición.]', 'image_keywords' => ['surprise']], - ['title' => 'Consejo #5', 'body' => '[Quinto consejo, cierra fuerte con una conclusión.]', 'image_keywords' => ['success']], - ], - ], - [ - 'slug' => 'process_reveal_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Mostrando el proceso', - 'description' => 'Lleva a tus seguidores por el proceso de cómo creas tu producto o servicio.', - 'content' => '¿Te has preguntado cómo se hace [producto/servicio]? Desliza para ver cada paso. ✨', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Todo empieza con investigación', 'body' => 'Cada proyecto arranca entendiendo el problema a fondo.', 'image_keywords' => ['research', 'desk']], - ['title' => 'Diseño e iteración', 'body' => 'Prototipamos rápido y probamos seguido.', 'image_keywords' => ['design', 'sketch']], - ['title' => 'Construyendo lo real', 'body' => 'Oficio y precisión en cada detalle.', 'image_keywords' => ['craft', 'build']], - ['title' => 'El resultado final', 'body' => 'Una calidad que se siente desde que lo usas.', 'image_keywords' => ['product', 'final']], - ], - ], - [ - 'slug' => 'quick_stat_carousel', - 'category' => 'industry_tip', - 'name' => 'Carrusel de estadísticas rápidas', - 'description' => 'Presenta datos del sector en formato de carrusel visual.', - 'content' => 'Los números de [sector] que cualquier persona de marketing debería tener en el radar este año. 📊', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Dato #1', 'body' => '[X]% de [audiencia] dice [hallazgo]. Fuente: [fuente]', 'image_keywords' => ['chart', 'data']], - ['title' => 'Dato #2', 'body' => '[Y]% de aumento en [métrica] año contra año.', 'image_keywords' => ['growth', 'graph']], - ['title' => 'Dato #3', 'body' => 'Para [año], [proyección].', 'image_keywords' => ['future', 'trend']], - ['title' => 'Qué significa esto para ti', 'body' => '[Conclusión práctica con base en los datos de arriba.]', 'image_keywords' => ['action', 'plan']], - ], - ], - [ - 'slug' => 'event_recap_carousel', - 'category' => 'event', - 'name' => 'Resumen del evento', - 'description' => 'Recapitula los mejores momentos de un evento o conferencia reciente.', - 'content' => 'Acabamos de cerrar [Nombre del Evento] y fue increíble. Aquí los destacados. 🙌', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Todo empezó con…', 'body' => '[Momento de apertura o destacado de la charla principal.]', 'image_keywords' => ['conference', 'stage']], - ['title' => 'La charla de la que todos hablaron', 'body' => '[Idea clave de la charla más comentada.]', 'image_keywords' => ['presentation', 'crowd']], - ['title' => 'Conectando con la comunidad', 'body' => '[Destaca momentos de networking o con asistentes.]', 'image_keywords' => ['networking', 'people']], - ['title' => 'Hasta la próxima', 'body' => 'Sigue a {{brand_name}} para novedades sobre nuestro próximo evento.', 'image_keywords' => ['celebration']], - ], - ], - [ - 'slug' => 'product_lineup_carousel', - 'category' => 'product_launch', - 'name' => 'Revelación de la línea de productos', - 'description' => 'Muestra una línea completa de productos, uno por slide.', - 'content' => 'Hicimos [número] cosas nuevas. Aquí va la línea completa de {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'conoce la línea', 'body' => '[Número] piezas nuevas, pensadas en conjunto. Cada una resuelve un problema específico.', 'image_keywords' => ['products', 'lineup']], - ['title' => 'pieza uno', 'body' => '[Nombre del producto 1]. Ideal para [caso de uso].', 'image_keywords' => ['product', 'studio']], - ['title' => 'pieza dos', 'body' => '[Nombre del producto 2]. Va bien con la pieza uno si buscas [beneficio].', 'image_keywords' => ['object', 'detail']], - ['title' => 'pieza tres', 'body' => '[Nombre del producto 3]. La que seguimos iterando hasta que quedó como queríamos.', 'image_keywords' => ['craft', 'closeup']], - ['title' => 'compra el lanzamiento', 'body' => 'Disponible [fecha]. Link en bio.', 'image_keywords' => ['shop', 'phone']], - ], - ], - [ - 'slug' => 'before_after_launch_carousel', - 'category' => 'product_launch', - 'name' => 'Antes y después del lanzamiento', - 'description' => 'Muestra el cambio de la versión vieja a la nueva.', - 'content' => 'La misma idea, reconstruida. Esto fue lo que cambió en el nuevo [producto] de {{brand_name}}.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'antes', 'body' => '[La versión vieja. Lo que hacía bien y dónde se quedaba corta.]', 'image_keywords' => ['old', 'product']], - ['title' => 'después', 'body' => '[La nueva versión. Una frase sobre el mayor cambio.]', 'image_keywords' => ['new', 'product']], - ['title' => 'qué arreglamos', 'body' => '[Problema concreto que nos contaron los clientes y cómo lo resolvimos.]', 'image_keywords' => ['detail', 'redesign']], - ['title' => 'ya disponible', 'body' => 'Encuéntralo en la tienda. Link en bio.', 'image_keywords' => ['store', 'phone']], - ], - ], - [ - 'slug' => 'spec_breakdown_carousel', - 'category' => 'product_launch', - 'name' => 'Carrusel con la ficha técnica', - 'description' => 'Desglosa las especificaciones del producto en varios slides.', - 'content' => 'La ficha técnica completa de [producto]. Todo lo que trae adentro, en un solo carrusel.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'conoce [producto]', 'body' => 'Hecho para [caso de uso]. Disponible [fecha].', 'image_keywords' => ['product', 'reveal']], - ['title' => 'materiales', 'body' => '[Detalles del material. De dónde viene. Por qué importa para el tacto final.]', 'image_keywords' => ['materials', 'texture']], - ['title' => 'dimensiones', 'body' => '[Tamaño, peso, notas de calce. Los números que la gente quiere antes de comprar.]', 'image_keywords' => ['measurement', 'detail']], - ['title' => 'cómo rinde', 'body' => '[Número de desempeño clave. Batería, autonomía, fuerza de agarre, lo que aplique.]', 'image_keywords' => ['performance', 'test']], - ['title' => 'qué viene en la caja', 'body' => '[Lista los items: producto, accesorios, manual, etc.]', 'image_keywords' => ['unboxing', 'box']], - ['title' => 'pide el tuyo', 'body' => 'Link en bio. Envío en [plazo].', 'image_keywords' => ['shipping', 'parcel']], - ], - ], - [ - 'slug' => 'flash_sale_carousel', - 'category' => 'promotion', - 'name' => 'Promoción flash', - 'description' => 'Promociona una oferta por tiempo limitado en varios slides.', - 'content' => '[Descuento]% de descuento en las próximas [horas] horas en {{brand_name}}. Lee cada slide para no perdértelo.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'promoción flash activa', 'body' => '[Descuento]% off hasta [fecha y hora final]. Sin código.', 'image_keywords' => ['sale', 'tag']], - ['title' => 'qué incluye', 'body' => '[Categorías en oferta y exclusiones si las hay. Sé honesto sobre lo que no entra.]', 'image_keywords' => ['products', 'shop']], - ['title' => 'los más queridos', 'body' => '[Dos o tres bestsellers que la gente agarra primero cuando hay ofertas.]', 'image_keywords' => ['favorites', 'shelf']], - ['title' => 'compra antes que termine', 'body' => 'Link en bio. Cuando se acaba el stock, se acabó.', 'image_keywords' => ['phone', 'cart']], - ], - ], - [ - 'slug' => 'bundle_deal_carousel', - 'category' => 'promotion', - 'name' => 'Carrusel del combo', - 'description' => 'Explica una oferta de combo slide por slide.', - 'content' => 'Tres cosas, un solo precio. Ahorra [monto] llevándolas juntas en {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'el combo', 'body' => '[Descripción breve de lo que trae el combo y cuánto ahorras en total.]', 'image_keywords' => ['bundle', 'box']], - ['title' => 'item uno', 'body' => '[Primer item del combo y qué hace por sí solo.]', 'image_keywords' => ['product', 'one']], - ['title' => 'item dos', 'body' => '[Segundo item y por qué combina con el primero.]', 'image_keywords' => ['product', 'two']], - ['title' => 'item tres', 'body' => '[Tercer item. El que termina de armar el combo.]', 'image_keywords' => ['product', 'three']], - ['title' => 'llévate el combo', 'body' => 'Ahorra [monto]. Disponible mientras dure el stock.', 'image_keywords' => ['bag', 'shopping']], - ], - ], - [ - 'slug' => 'first_order_discount_carousel', - 'category' => 'promotion', - 'name' => 'Descuento en la primera compra', - 'description' => 'Da la bienvenida a clientes nuevos con un descuento en la primera compra.', - 'content' => '¿Nuevo por aquí? Usa el código [CÓDIGO] para [descuento]% off en tu primera compra en {{brand_name}}.', - 'image_count' => 3, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'oferta de bienvenida', 'body' => '[Descuento]% off en tu primera compra. Código: [CÓDIGO]. Válido por [duración].', 'image_keywords' => ['welcome', 'gift']], - ['title' => 'por dónde empieza la gente', 'body' => '[Uno o dos productos que son buenos puntos de entrada para clientes nuevos.]', 'image_keywords' => ['bestseller', 'product']], - ['title' => 'cómo usarlo', 'body' => 'Agrega al carrito, pega [CÓDIGO] al pagar. Link en bio.', 'image_keywords' => ['checkout', 'phone']], - ], - ], - [ - 'slug' => 'free_shipping_carousel', - 'category' => 'promotion', - 'name' => 'Fin de semana con envío gratis', - 'description' => 'Promociona una ventana limitada de envío gratis.', - 'content' => 'Envío gratis en {{brand_name}} solo este fin de semana. Sin monto mínimo.', - 'image_count' => 3, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'fin de semana con envío gratis', 'body' => 'De [viernes] a [domingo]. Sin código y sin pedido mínimo.', 'image_keywords' => ['shipping', 'box']], - ['title' => 'a dónde enviamos', 'body' => '[Regiones o países incluidos. Aclara cualquier exclusión.]', 'image_keywords' => ['map', 'globe']], - ['title' => 'aprovecha el fin de semana', 'body' => 'Toca el link en bio antes de la medianoche del [domingo] [zona horaria].', 'image_keywords' => ['cart', 'phone']], - ], - ], - [ - 'slug' => 'beginner_guide_carousel', - 'category' => 'educational', - 'name' => 'Carrusel guía para principiantes', - 'description' => 'Enseña un tema desde cero hasta el primer resultado útil.', - 'content' => '[Tema] para principiantes absolutos. Guárdalo para después. 👇', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'empieza aquí', 'body' => 'Si [tema] te parece abrumador, esta es la versión que me ayudó cuando recién empezaba.', 'image_keywords' => ['beginner', 'notes']], - ['title' => 'qué es en realidad', 'body' => '[Definición simple. Sin jerga. Una frase basta.]', 'image_keywords' => ['concept', 'sketch']], - ['title' => 'por qué le importa a la gente', 'body' => '[La razón concreta por la que un principiante se molestaría en aprender esto.]', 'image_keywords' => ['question', 'curious']], - ['title' => 'lo primero para probar', 'body' => '[Una acción pequeña y específica que puedan hacer en menos de 10 minutos.]', 'image_keywords' => ['hands', 'desk']], - ['title' => 'error común', 'body' => '[La trampa en la que cae la mayoría de los principiantes. Sé específico.]', 'image_keywords' => ['mistake', 'fix']], - ['title' => 'a dónde ir después', 'body' => '[Un libro, canal o recurso de {{brand_name}} para el siguiente paso.]', 'image_keywords' => ['library', 'resource']], - ], - ], - [ - 'slug' => 'common_mistakes_carousel', - 'category' => 'educational', - 'name' => 'Errores comunes', - 'description' => 'Resalta errores comunes y cómo corregirlos.', - 'content' => '5 errores que veo todo el tiempo con [tema]. El número 3 me tocó aprenderlo a las malas.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'los errores', 'body' => 'Cinco cosas que la gente hace mal con [tema] y qué hacer en su lugar.', 'image_keywords' => ['mistake', 'pen']], - ['title' => 'error 1', 'body' => '[Primer error. Después la solución en una frase.]', 'image_keywords' => ['error', 'paper']], - ['title' => 'error 2', 'body' => '[Segundo error y la solución.]', 'image_keywords' => ['confused', 'desk']], - ['title' => 'error 3', 'body' => '[Tercer error. El que sorprende a la gente.]', 'image_keywords' => ['surprised', 'thought']], - ['title' => 'error 4', 'body' => '[Cuarto error y la solución.]', 'image_keywords' => ['process', 'workspace']], - ['title' => 'error 5', 'body' => '[Último error. Cierra con lo que harías en su lugar.]', 'image_keywords' => ['solution', 'check']], - ], - ], - [ - 'slug' => 'glossary_carousel', - 'category' => 'educational', - 'name' => 'Carrusel glosario', - 'description' => 'Define cinco términos de tu sector en lenguaje simple.', - 'content' => '5 términos de [sector] explicados sin jerga. Guárdalo para después.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'jerga decodificada', 'body' => 'Cinco palabras de [sector] que la gente usa como si todos las conocieran.', 'image_keywords' => ['dictionary', 'book']], - ['title' => '[término 1]', 'body' => '[Definición simple. Una frase de ejemplo.]', 'image_keywords' => ['letters', 'text']], - ['title' => '[término 2]', 'body' => '[Definición simple. Una frase de ejemplo.]', 'image_keywords' => ['letters', 'paper']], - ['title' => '[término 3]', 'body' => '[Definición simple. Una frase de ejemplo.]', 'image_keywords' => ['note', 'pen']], - ['title' => '[término 4]', 'body' => '[Definición simple. Una frase de ejemplo.]', 'image_keywords' => ['definition', 'page']], - ['title' => '[término 5]', 'body' => '[Definición simple. Una frase de ejemplo.]', 'image_keywords' => ['glossary', 'open book']], - ], - ], - [ - 'slug' => 'step_by_step_tutorial_carousel', - 'category' => 'educational', - 'name' => 'Tutorial paso a paso', - 'description' => 'Guía a través de un cómo-hacer breve en pasos claros.', - 'content' => 'Cómo [tarea] en [número] pasos. Guárdalo para tenerlo a mano la próxima.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'qué necesitas', 'body' => '[Lista las herramientas o materiales. Mantenlo breve.]', 'image_keywords' => ['tools', 'supplies']], - ['title' => 'paso 1', 'body' => '[Primer paso. Una acción específica, no un objetivo.]', 'image_keywords' => ['hands', 'work']], - ['title' => 'paso 2', 'body' => '[Segundo paso. Cómo debería verse antes de avanzar.]', 'image_keywords' => ['progress', 'desk']], - ['title' => 'paso 3', 'body' => '[Tercer paso. Menciona aquí el desliz más común.]', 'image_keywords' => ['focus', 'detail']], - ['title' => 'listo', 'body' => '[Cómo debería verse el resultado final. Una idea de foto.]', 'image_keywords' => ['finished', 'result']], - ], - ], - [ - 'slug' => 'team_intro_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Conoce al equipo', - 'description' => 'Presenta a los miembros del equipo de a uno por slide.', - 'content' => 'Las caras detrás de {{brand_name}}. Desliza para conocer a quienes hacen que esto funcione.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'el equipo', 'body' => 'Somos [número] personas en [ubicaciones]. Aquí va quién hace qué.', 'image_keywords' => ['team', 'office']], - ['title' => '[nombre 1]', 'body' => '[Rol. Algo que tiene a su cargo y algo que disfruta fuera del trabajo.]', 'image_keywords' => ['portrait', 'work']], - ['title' => '[nombre 2]', 'body' => '[Rol. Un detalle que muestra su personalidad, no solo su cargo.]', 'image_keywords' => ['portrait', 'desk']], - ['title' => '[nombre 3]', 'body' => '[Rol. Algo concreto que hizo este mes.]', 'image_keywords' => ['portrait', 'studio']], - ['title' => 'salúdanos', 'body' => 'Los DM están abiertos. Los respondemos nosotros mismos.', 'image_keywords' => ['phone', 'chat']], - ], - ], - [ - 'slug' => 'workspace_tour_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Recorrido por el espacio de trabajo', - 'description' => 'Muestra tu estudio, cocina u oficina en varios slides.', - 'content' => 'Un recorrido por donde {{brand_name}} se hace de verdad. Menos pulido de lo que piensas.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'donde pasa todo', 'body' => '[Ubicación, tamaño, qué tipo de espacio es, en una frase.]', 'image_keywords' => ['studio', 'workshop']], - ['title' => 'la mesa de trabajo', 'body' => '[Lo que vive en la mesa principal la mayoría de los días.]', 'image_keywords' => ['workbench', 'tools']], - ['title' => 'el rincón que nadie ve', 'body' => '[Detalle honesto: una repisa desordenada, una pared con notas, la cafetera.]', 'image_keywords' => ['corner', 'mess']], - ['title' => 'el lugar favorito', 'body' => '[La silla, la ventana, la luz que mejora el día.]', 'image_keywords' => ['light', 'window']], - ['title' => 'vuelve pronto', 'body' => 'Vienen más vistazos. Sigue a {{brand_name}} para el próximo.', 'image_keywords' => ['camera', 'door']], - ], - ], - [ - 'slug' => 'a_day_in_the_life_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Un día en la rutina', - 'description' => 'Muestra una jornada de trabajo de la mañana a la noche.', - 'content' => 'Un día real en {{brand_name}}, hora por hora. Sin la versión maquillada.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => '7:30 a. m.', 'body' => '[Cómo arranca el día de verdad. Café, caminata, correo, lo que sea.]', 'image_keywords' => ['morning', 'coffee']], - ['title' => '9:00 a. m.', 'body' => '[Lo primero en la agenda. Sé específico sobre qué se hace.]', 'image_keywords' => ['desk', 'laptop']], - ['title' => '12:30 p. m.', 'body' => '[Almuerzo. Dónde, con quién, o solo con un podcast.]', 'image_keywords' => ['lunch', 'food']], - ['title' => '2:00 p. m.', 'body' => '[Bloque de la tarde. Lo que más concentración pide ese día.]', 'image_keywords' => ['focus', 'work']], - ['title' => '5:30 p. m.', 'body' => '[Cerrando. Cuál suele ser la última tarea antes de desconectar.]', 'image_keywords' => ['evening', 'office']], - ['title' => 'fuera de horario', 'body' => '[Cómo termina el día. Correr, cenar, hijos, lectura, lo que sea cierto.]', 'image_keywords' => ['sunset', 'home']], - ], - ], - [ - 'slug' => 'mistakes_we_made_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Errores que cometimos', - 'description' => 'Comparte tres errores reales y lo que aprendiste.', - 'content' => '3 cosas que hicimos mal este año en {{brand_name}}. Lo cuento porque ocultarlo se sentiría raro.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'por qué publicar esto', 'body' => 'Las victorias se llevan toda la atención. Los errores suelen ser donde están las lecciones.', 'image_keywords' => ['notebook', 'writing']], - ['title' => 'error 1', 'body' => '[Lo que probamos. Por qué no funcionó. Qué hicimos después.]', 'image_keywords' => ['error', 'desk']], - ['title' => 'error 2', 'body' => '[El segundo. Sé honesto sobre el costo en dinero o tiempo.]', 'image_keywords' => ['budget', 'paper']], - ['title' => 'error 3 + qué sigue', 'body' => '[Tercer error y una cosa que está cambiando por eso.]', 'image_keywords' => ['plan', 'reset']], - ], - ], - [ - 'slug' => 'customer_story_carousel', - 'category' => 'testimonial', - 'name' => 'Historia de cliente', - 'description' => 'Cuenta una sola historia de cliente a lo largo de los slides.', - 'content' => 'Una historia de uno de los clientes de {{brand_name}}. Publicada con su permiso.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'conoce a [nombre]', 'body' => '[Nombre, qué hace, dónde vive. Dos frases cortas.]', 'image_keywords' => ['portrait', 'person']], - ['title' => 'el problema', 'body' => '[La situación antes de usar {{brand_name}}. Concreta, no abstracta.]', 'image_keywords' => ['problem', 'thinking']], - ['title' => 'qué probó', 'body' => '[Cómo encontró {{brand_name}} y cómo fue su primer uso.]', 'image_keywords' => ['discover', 'try']], - ['title' => 'qué cambió', 'body' => '[El resultado. Un número si lo tienes, una historia si no.]', 'image_keywords' => ['result', 'change']], - ['title' => 'en sus palabras', 'body' => '"[Cita directa del cliente. Corta y real.]"', 'image_keywords' => ['quote', 'speech']], - ], - ], - [ - 'slug' => 'three_reviews_carousel', - 'category' => 'testimonial', - 'name' => 'Carrusel con tres reseñas', - 'description' => 'Reúne tres reseñas reales en un post deslizable.', - 'content' => 'Tres reseñas de clientes reales este mes en {{brand_name}}.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'lo que dice la gente', 'body' => 'Tres citas sin editar de este mes. Apellidos reservados cuando se pidió.', 'image_keywords' => ['stars', 'review']], - ['title' => 'reseña 1', 'body' => '"[Cita directa del cliente.]", [primer nombre, ubicación]', 'image_keywords' => ['speech', 'quote']], - ['title' => 'reseña 2', 'body' => '"[Cita directa del cliente.]", [primer nombre, ubicación]', 'image_keywords' => ['feedback', 'note']], - ['title' => 'reseña 3', 'body' => '"[Cita directa del cliente.]", [primer nombre, ubicación]', 'image_keywords' => ['testimonial', 'paper']], - ], - ], - [ - 'slug' => 'before_after_results_carousel', - 'category' => 'testimonial', - 'name' => 'Resultados antes y después', - 'description' => 'Muestra el resultado de un cliente en slides de antes y después.', - 'content' => 'Un resultado real de un cliente usando [producto/servicio] en {{brand_name}}. La misma persona, [período] de diferencia.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'el punto de partida', 'body' => '[Dónde estaba al empezar. La versión honesta, no la maquillada.]', 'image_keywords' => ['before', 'start']], - ['title' => 'qué hizo', 'body' => '[Qué usó y con qué frecuencia. Sé específico sobre la rutina.]', 'image_keywords' => ['process', 'routine']], - ['title' => 'el resultado', 'body' => '[Dónde está ahora. Números si aplica, foto si es visual.]', 'image_keywords' => ['after', 'result']], - ['title' => 'en sus palabras', 'body' => '"[Una cita corta sobre lo que más le sorprendió.]"', 'image_keywords' => ['quote', 'smile']], - ], - ], - [ - 'slug' => 'industry_myth_busting_carousel', - 'category' => 'industry_tip', - 'name' => 'Derribando mitos del sector', - 'description' => 'Derriba tres mitos sobre tu sector.', - 'content' => '3 cosas que la gente sigue creyendo sobre [sector] y que no son ciertas.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'mitos, desarmados', 'body' => 'Tres creencias sobre [sector] que se repiten en todos lados y siguen errando.', 'image_keywords' => ['question', 'thinking']], - ['title' => 'mito 1', 'body' => 'Mito: [creencia común]. Realidad: [cómo es en verdad, con un detalle].', 'image_keywords' => ['truth', 'note']], - ['title' => 'mito 2', 'body' => 'Mito: [creencia común]. Realidad: [la corrección en una frase].', 'image_keywords' => ['fact', 'paper']], - ['title' => 'mito 3', 'body' => 'Mito: [creencia común]. Realidad: [la corrección]. El porqué está en los comentarios.', 'image_keywords' => ['comment', 'phone']], - ], - ], - [ - 'slug' => 'industry_trend_carousel', - 'category' => 'industry_tip', - 'name' => 'Carrusel de tendencias del sector', - 'description' => 'Recorre una tendencia que está marcando el sector este año.', - 'content' => 'Lo que se está moviendo de verdad en [sector] este año, en lenguaje simple.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'la tendencia', 'body' => '[Nombra la tendencia en palabras simples. Una frase sobre qué es.]', 'image_keywords' => ['trend', 'graph']], - ['title' => 'por qué ahora', 'body' => '[La causa concreta. Una regulación, un cambio técnico, un cambio de comportamiento.]', 'image_keywords' => ['cause', 'news']], - ['title' => 'a quién le pega primero', 'body' => '[La audiencia o tipo de empresa que la siente antes que el resto.]', 'image_keywords' => ['audience', 'people']], - ['title' => 'qué hacer', 'body' => '[Una cosa concreta para probar este trimestre, no un principio vago.]', 'image_keywords' => ['action', 'plan']], - ['title' => 'un número para mirar', 'body' => '[Una métrica específica, con fuente.]', 'image_keywords' => ['metric', 'data']], - ], - ], - [ - 'slug' => 'pro_tip_carousel', - 'category' => 'industry_tip', - 'name' => 'Carrusel de consejo pro', - 'description' => 'Comparte un solo consejo profesional con contexto y pasos.', - 'content' => 'Una cosa que le diría a mi yo más joven sobre [tema]. Guárdalo si te sirve.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'el consejo', 'body' => '[La versión de una línea. Lo bastante corto para recordarlo.]', 'image_keywords' => ['tip', 'note']], - ['title' => 'por qué funciona', 'body' => '[La razón. Usa un ejemplo pequeño, no una afirmación grande.]', 'image_keywords' => ['idea', 'thought']], - ['title' => 'cómo aplicarlo', 'body' => '[Los pasos. Tres como mucho. Específicos.]', 'image_keywords' => ['steps', 'list']], - ['title' => 'una cosa que evitar', 'body' => '[El error que comete la gente al aplicar este consejo.]', 'image_keywords' => ['warning', 'caution']], - ], - ], - [ - 'slug' => 'event_announcement_carousel', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncia un evento próximo con los detalles clave.', - 'content' => 'Vamos a organizar [Nombre del Evento] el [fecha]. Todo lo que necesitas saber está en los slides.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => '[nombre del evento]', 'body' => '[Fecha, lugar u online, para quién es, en una línea.]', 'image_keywords' => ['event', 'invite']], - ['title' => 'qué hay planeado', 'body' => '[La agenda en bullets directos, sin lenguaje de marketing.]', 'image_keywords' => ['agenda', 'schedule']], - ['title' => 'quién habla', 'body' => '[Nombres y bios de una línea. No más de tres.]', 'image_keywords' => ['speakers', 'panel']], - ['title' => 'cómo unirte', 'body' => '[Gratis o pago, link, fecha límite si la hay. Sé específico.]', 'image_keywords' => ['ticket', 'register']], - ['title' => 'reserva tu lugar', 'body' => '[Recordatorio final + llamada al link en bio.]', 'image_keywords' => ['phone', 'tap']], - ], - ], - [ - 'slug' => 'event_speakers_carousel', - 'category' => 'event', - 'name' => 'Revelación de oradores', - 'description' => 'Revela a los oradores, uno por slide.', - 'content' => 'Oradores de [Nombre del Evento]. Las entradas están abiertas en {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'oradores revelados', 'body' => 'El lineup de [Nombre del Evento] el [fecha]. Desliza para conocerlos.', 'image_keywords' => ['lineup', 'stage']], - ['title' => '[orador 1]', 'body' => '[Nombre, rol. La cosa puntual sobre la que va a hablar.]', 'image_keywords' => ['portrait', 'speaker']], - ['title' => '[orador 2]', 'body' => '[Nombre, rol. El tema de su charla en una línea.]', 'image_keywords' => ['portrait', 'mic']], - ['title' => '[orador 3]', 'body' => '[Nombre, rol. Con qué se irán los asistentes.]', 'image_keywords' => ['portrait', 'panel']], - ['title' => 'entradas en bio', 'body' => '[Fecha, lugar, link de inscripción.]', 'image_keywords' => ['ticket', 'register']], - ], - ], - [ - 'slug' => 'workshop_invitation_carousel', - 'category' => 'event', - 'name' => 'Invitación al taller', - 'description' => 'Invita a la gente a un taller práctico.', - 'content' => 'Taller práctico en {{brand_name}} el [fecha]. Cupos limitados. Esto es lo que trae.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'taller el [fecha]', 'body' => '[Tema en una línea. Online o presencial, con lugar y horario.]', 'image_keywords' => ['workshop', 'class']], - ['title' => 'qué vas a hacer', 'body' => '[Tres actividades concretas. Usa verbos, no adjetivos.]', 'image_keywords' => ['hands', 'making']], - ['title' => 'con qué te vas a ir', 'body' => '[El resultado: algo terminado, un borrador, una decisión, un plan.]', 'image_keywords' => ['notebook', 'result']], - ['title' => 'reserva un cupo', 'body' => '[Cupos disponibles, precio si lo hay, link en bio.]', 'image_keywords' => ['chair', 'register']], - ], - ], - [ - 'slug' => 'this_or_that_carousel', - 'category' => 'engagement', - 'name' => 'Esto o aquello', - 'description' => 'Hazle a tus seguidores una serie de preguntas de elección.', - 'content' => 'Esto o aquello, edición [tema]. Cuéntame tus elecciones en los comentarios.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'elige uno', 'body' => 'Cinco elecciones rápidas. Comenta tus respuestas en orden.', 'image_keywords' => ['choice', 'fork']], - ['title' => '[opción a] o [opción b]', 'body' => '[Contexto breve si hace falta.]', 'image_keywords' => ['split', 'options']], - ['title' => '[opción c] o [opción d]', 'body' => '[Contexto breve si hace falta.]', 'image_keywords' => ['versus', 'choice']], - ['title' => '[opción e] o [opción f]', 'body' => '[Contexto breve si hace falta.]', 'image_keywords' => ['compare', 'pick']], - ['title' => 'tu turno', 'body' => 'Deja tus respuestas abajo. Leo cada comentario.', 'image_keywords' => ['comment', 'phone']], - ], - ], - [ - 'slug' => 'unpopular_opinion_carousel', - 'category' => 'engagement', - 'name' => 'Opinión impopular', - 'description' => 'Comparte una opinión real e invita al desacuerdo.', - 'content' => 'Una opinión impopular sobre [tema]. Dime en los comentarios dónde me equivoco.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'opinión impopular', 'body' => '[La opinión en una frase corta y clara.]', 'image_keywords' => ['opinion', 'speech']], - ['title' => 'por qué pienso esto', 'body' => '[La razón. Una historia pequeña o un número, no solo sentimientos.]', 'image_keywords' => ['reason', 'thinking']], - ['title' => 'dónde podría equivocarme', 'body' => '[Honesto sobre la parte más débil del argumento.]', 'image_keywords' => ['doubt', 'question']], - ['title' => 'cuéntame', 'body' => 'De acuerdo, en desacuerdo, mixto, déjalo en los comentarios.', 'image_keywords' => ['comment', 'discussion']], - ], - ], - [ - 'slug' => 'fill_in_the_blank_carousel', - 'category' => 'engagement', - 'name' => 'Completa la frase', - 'description' => 'Lanza a los seguidores tres frases para completar.', - 'content' => 'Completa las frases. Quiero leer tus respuestas.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'completa las frases', 'body' => 'Tres provocaciones rápidas sobre [tema]. Comenta tus respuestas en orden.', 'image_keywords' => ['blank', 'pen']], - ['title' => 'frase 1', 'body' => 'La mejor [cosa] que [verbo] este año fue ____.', 'image_keywords' => ['idea', 'thought']], - ['title' => 'frase 2', 'body' => 'Lo que quiero hacer más en [tema] es ____.', 'image_keywords' => ['plan', 'goal']], - ['title' => 'frase 3', 'body' => 'Una persona que me enseñó sobre [tema] es ____.', 'image_keywords' => ['mentor', 'people']], - ], - ], - [ - 'slug' => 'q_and_a_carousel', - 'category' => 'engagement', - 'name' => 'Carrusel de preguntas y respuestas', - 'description' => 'Responde cinco preguntas reales de tu audiencia.', - 'content' => 'Tú preguntaste, yo respondo. Cinco preguntas reales que llegaron por DM.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'preguntas respondidas', 'body' => 'Tomé cinco de esta semana. Anonimizadas donde hizo falta.', 'image_keywords' => ['questions', 'mail']], - ['title' => 'p1', 'body' => 'P: [pregunta parafraseada]. R: [respuesta en una o dos frases].', 'image_keywords' => ['answer', 'note']], - ['title' => 'p2', 'body' => 'P: [pregunta parafraseada]. R: [respuesta].', 'image_keywords' => ['reply', 'speech']], - ['title' => 'p3', 'body' => 'P: [pregunta parafraseada]. R: [respuesta].', 'image_keywords' => ['question', 'mark']], - ['title' => 'p4', 'body' => 'P: [pregunta parafraseada]. R: [respuesta].', 'image_keywords' => ['chat', 'bubble']], - ['title' => 'p5', 'body' => 'P: [pregunta parafraseada]. R: [respuesta]. Manda más en los comentarios.', 'image_keywords' => ['comments', 'phone']], - ], - ], -]; diff --git a/templates/es/instagram_feed.php b/templates/es/instagram_feed.php deleted file mode 100644 index 1682947f..00000000 --- a/templates/es/instagram_feed.php +++ /dev/null @@ -1,362 +0,0 @@ - 'limited_time_offer_feed', - 'category' => 'promotion', - 'name' => 'Oferta por tiempo limitado', - 'description' => 'Promociona una oferta con plazo en Instagram Feed.', - 'content' => "⏰ No te lo pierdas. {{brand_name}} ofrece [descuento]% off en [producto/servicio], solo hoy.\n\nToca el link en la bio para conseguir el tuyo antes de que se acabe.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'offer', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'team_behind_the_scenes_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Bastidores del equipo', - 'description' => 'Humaniza tu marca mostrando al equipo en acción.', - 'content' => "Así se ve un día normal en {{brand_name}}. 👀\n\nCreemos que el buen trabajo pasa cuando la gente se siente en casa. Aquí va una mirada detrás del telón.\n\n#{{brand_name}} #BehindTheScenes", - 'image_count' => 1, - 'image_keywords' => ['office', 'team', 'workspace'], - 'slides' => null, - ], - - // Product launch - [ - 'slug' => 'new_product_drop_feed', - 'category' => 'product_launch', - 'name' => 'Lanzamiento de nuevo producto', - 'description' => 'Anuncia el lanzamiento de un producto fresco en el feed.', - 'content' => "Ya está. [Nombre del producto] acaba de llegar a {{brand_name}}.\n\nLe dedicamos [meses/semanas] a este. Cada detalle fue probado por el equipo antes de soltarlo al público.\n\nToca el link en la bio para ser de los primeros en probarlo.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'pre_order_announcement_feed', - 'category' => 'product_launch', - 'name' => 'Anuncio de preventa', - 'description' => 'Abre preventas para un producto que viene en camino.', - 'content' => "Preventas abiertas. [Nombre del producto] se envía el [fecha].\n\nEl primer lote tiene [número] unidades. Cuando se agoten, la siguiente tanda no sale hasta [fecha posterior].\n\nReserva el tuyo por el link en la bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'package', 'box'], - 'slides' => null, - ], - [ - 'slug' => 'feature_highlight_launch_feed', - 'category' => 'product_launch', - 'name' => 'Destaque de funcionalidad', - 'description' => 'Resalta una función específica de un producto nuevo.', - 'content' => "Lo que más nos enorgullece de [nombre del producto]: [función específica].\n\nNos costó [número] prototipos llegar a esto. Los testers iniciales nos dijeron que cambió la forma en que [caso de uso], así que seguimos iterando hasta que se sintió obvio.\n\nMíralo en acción por el link en la bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'detail', 'closeup'], - 'slides' => null, - ], - [ - 'slug' => 'product_restock_feed', - 'category' => 'product_launch', - 'name' => 'Producto reabastecido', - 'description' => 'Anuncia la vuelta al stock de un producto popular.', - 'content' => "De vuelta en stock. [Nombre del producto] se agotó en [tiempo] la última vez, así que hicimos más.\n\nSi te lo perdiste antes, este es el momento. El stock vuelve a ser limitado y esperamos otra corrida rápida.\n\nConsigue el tuyo por el link en la bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'shelf', 'inventory'], - 'slides' => null, - ], - - // Promotion - [ - 'slug' => 'flash_sale_feed', - 'category' => 'promotion', - 'name' => 'Flash sale', - 'description' => 'Genera urgencia con un flash sale corto.', - 'content' => "Flash sale. [Descuento]% off en todo durante las próximas [horas] horas.\n\nNo necesitas código en el checkout. El descuento ya está aplicado en todo el sitio.\n\nLink en la bio. Pon un cronómetro.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'bundle_deal_feed', - 'category' => 'promotion', - 'name' => 'Oferta de combo', - 'description' => 'Promociona una oferta de combo con varios productos.', - 'content' => "Compra [item A] y [item B] juntos y ahorra [monto].\n\nEs la misma combinación que nuestro equipo usa cada semana, así que la armamos como kit. Sale más barato que comprar cada uno por separado.\n\nLink en la bio.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'products', 'gift'], - 'slides' => null, - ], - [ - 'slug' => 'free_shipping_feed', - 'category' => 'promotion', - 'name' => 'Envío gratis', - 'description' => 'Anuncia envío gratis por una ventana limitada.', - 'content' => "Envío gratis en todos los pedidos esta semana.\n\nSin mínimo, sin código, sin letra chica al pie que haya que entrecerrar los ojos para leer. Eliges lo que quieres y nosotros cubrimos la entrega.\n\nLink en la bio. Termina el [día].", - 'image_count' => 1, - 'image_keywords' => ['shipping', 'package', 'delivery'], - 'slides' => null, - ], - [ - 'slug' => 'first_order_discount_feed', - 'category' => 'promotion', - 'name' => 'Descuento en la primera compra', - 'description' => 'Recibe a clientes nuevos con descuento en la primera compra.', - 'content' => "¿Primera vez en {{brand_name}}? Llévate [descuento]% off en tu primer pedido.\n\nUsa el código [CÓDIGO] en el checkout. Funciona con cualquier producto de la tienda, incluido el [nombre del bestseller] que la gente nos sigue preguntando.\n\nLink en la bio.", - 'image_count' => 1, - 'image_keywords' => ['welcome', 'shop', 'discount'], - 'slides' => null, - ], - - // Educational - [ - 'slug' => 'quick_how_to_tip_feed', - 'category' => 'educational', - 'name' => 'Tip rápido de cómo hacer', - 'description' => 'Comparte un tip accionable de tu nicho.', - 'content' => "Algo pequeño que hace [tarea] más fácil: [tip en una frase].\n\nEmpezamos a hacer esto después de [motivo o historia]. Nos ahorró [tiempo/dinero/esfuerzo] en una semana.\n\nGuarda este post para después. Link en la bio para la guía completa.", - 'image_count' => 1, - 'image_keywords' => ['notebook', 'desk', 'work'], - 'slides' => null, - ], - [ - 'slug' => 'common_mistake_feed', - 'category' => 'educational', - 'name' => 'Error común', - 'description' => 'Señala un error frecuente y la solución.', - 'content' => "El error que más vemos con [tema]: [el error].\n\nEs fácil de cometer. La mayoría no se da cuenta de que cuesta [consecuencia] hasta que alguien lo señala.\n\nLa solución es simple: [la solución]. Pruébalo esta semana y mira qué cambia.", - 'image_count' => 1, - 'image_keywords' => ['warning', 'thinking', 'desk'], - 'slides' => null, - ], - [ - 'slug' => 'myth_vs_truth_feed', - 'category' => 'educational', - 'name' => 'Mito vs verdad', - 'description' => 'Desmiente un mito común de tu industria.', - 'content' => "Mito: [creencia común sobre tu industria].\n\nVerdad: [la realidad, con un detalle que la respalda].\n\nNosotros también creíamos en el mito. Después lo medimos por [periodo] y los datos dijeron otra cosa. Guarda esto si has oído lo mismo.", - 'image_count' => 1, - 'image_keywords' => ['question', 'thinking', 'idea'], - 'slides' => null, - ], - [ - 'slug' => 'glossary_term_feed', - 'category' => 'educational', - 'name' => 'Término del glosario explicado', - 'description' => 'Explica un término del rubro en lenguaje claro.', - 'content' => "[Término]: lo que significa de verdad.\n\nLa mayoría de las guías lo explican con más jerga. Aquí va la versión directa: [definición en una frase].\n\nUn ejemplo real de nuestro trabajo: [ejemplo corto]. Guarda el post si has estado asintiendo en reuniones sin preguntar.", - 'image_count' => 1, - 'image_keywords' => ['book', 'glossary', 'study'], - 'slides' => null, - ], - - // Behind the scenes - [ - 'slug' => 'workspace_tour_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Tour por el espacio de trabajo', - 'description' => 'Muestra el lugar donde pasa el trabajo.', - 'content' => "Donde pasa el trabajo.\n\nEsto es [sala/espacio] en {{brand_name}}. La planta del rincón sobrevivió a tres mudanzas de oficina. La pizarra no se ha borrado desde [mes].\n\nNo es pulido, pero es nuestro.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'desk', 'studio'], - 'slides' => null, - ], - [ - 'slug' => 'how_its_made_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Cómo se hace', - 'description' => 'Muestra un paso de tu proceso de producción.', - 'content' => "Este es el paso [número] de cómo hacemos [producto].\n\nLleva como [tiempo] y lo hacemos a mano. Sin atajos por aquí, sobre todo porque probamos un atajo una vez y arruinó un lote entero.\n\nMás del proceso en el link en la bio.", - 'image_count' => 1, - 'image_keywords' => ['craft', 'making', 'workshop'], - 'slides' => null, - ], - [ - 'slug' => 'team_member_intro_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Presentación de un miembro del equipo', - 'description' => 'Presenta a un integrante del equipo.', - 'content' => "Conoce a [nombre], nuestro/a [rol] en {{brand_name}}.\n\n[Nombre] se sumó hace [tiempo] y lleva [área]. Fuera del trabajo, lo/la encuentras [hobby o interés].\n\nSi escribiste a soporte hace poco, hay buenas chances de que [nombre] te haya respondido.", - 'image_count' => 1, - 'image_keywords' => ['portrait', 'team', 'person'], - 'slides' => null, - ], - [ - 'slug' => 'a_day_in_the_life_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Un día en la vida', - 'description' => 'Cuenta cómo es un día normal en la empresa.', - 'content' => "Un martes normal en {{brand_name}}.\n\nLas mañanas son tranquilas, sobre todo correos y una daily. Las tardes se vuelven ruidosas cuando arranca [actividad]. Para las 5pm alguien ya rompió algo y otra persona ya lo arregló.\n\nEse es todo el trabajo, sinceramente.", - 'image_count' => 1, - 'image_keywords' => ['office', 'work', 'coffee'], - 'slides' => null, - ], - - // Testimonial - [ - 'slug' => 'customer_quote_feed', - 'category' => 'testimonial', - 'name' => 'Cita de cliente', - 'description' => 'Comparte una cita potente de un cliente.', - 'content' => "\"[Cita del cliente con sus propias palabras].\", [Nombre del cliente], [ciudad o rol]\n\nEsta llegó la semana pasada y teníamos que compartirla. Gracias [nombre].\n\nSi {{brand_name}} te ayudó con [resultado], nos encantaría saberlo. Responde o mándanos un DM.", - 'image_count' => 1, - 'image_keywords' => ['quote', 'happy', 'customer'], - 'slides' => null, - ], - [ - 'slug' => 'before_after_result_feed', - 'category' => 'testimonial', - 'name' => 'Resultado antes y después', - 'description' => 'Resalta una transformación real de cliente.', - 'content' => "Antes: [punto de partida].\nDespués: [resultado, con un número si es posible].\n\n[Nombre del cliente] trabajó con nosotros por [periodo]. El cambio no fue de un día para otro, pero se ve dónde se inclinó la balanza.\n\nLink en la bio si quieres un resultado parecido.", - 'image_count' => 1, - 'image_keywords' => ['transformation', 'result', 'progress'], - 'slides' => null, - ], - [ - 'slug' => 'star_rating_review_feed', - 'category' => 'testimonial', - 'name' => 'Reseña de cinco estrellas', - 'description' => 'Resalta una reseña reciente de cinco estrellas.', - 'content' => "★★★★★\n\n\"[Texto de la reseña, dos o tres frases].\"\n\n[Nombre] dejó esta ayer. Leemos cada reseña que llega, las amables y las duras.\n\nDeja la tuya por el link en la bio.", - 'image_count' => 1, - 'image_keywords' => ['stars', 'review', 'rating'], - 'slides' => null, - ], - [ - 'slug' => 'case_study_snapshot_feed', - 'category' => 'testimonial', - 'name' => 'Resumen de case study', - 'description' => 'Adelanta un case de éxito de cliente.', - 'content' => "Cómo [cliente o empresa] usó {{brand_name}} para [resultado].\n\nEn [periodo], pasaron de [punto inicial] a [resultado]. El análisis completo cuenta lo que probaron primero y lo que finalmente encajó.\n\nLink en la bio para el case study.", - 'image_count' => 1, - 'image_keywords' => ['case study', 'meeting', 'results'], - 'slides' => null, - ], - - // Industry tip - [ - 'slug' => 'one_tool_we_use_feed', - 'category' => 'industry_tip', - 'name' => 'Una herramienta que usamos', - 'description' => 'Recomienda una herramienta que usas de verdad.', - 'content' => "Una herramienta que usamos cada semana: [nombre de la herramienta].\n\nProbamos [número] alternativas antes de quedarnos con esta. Lo que nos convenció fue [función específica], no el marketing de la página principal.\n\nNo es publicidad. Solo es útil.", - 'image_count' => 1, - 'image_keywords' => ['tools', 'software', 'laptop'], - 'slides' => null, - ], - [ - 'slug' => 'industry_trend_take_feed', - 'category' => 'industry_tip', - 'name' => 'Opinión sobre tendencia del rubro', - 'description' => 'Da una opinión honesta sobre una tendencia actual.', - 'content' => "Todo el mundo en [rubro] habla de [tendencia].\n\nOpinión honesta: sirve para [caso de uso], no sirve para [otro caso de uso]. Lo probamos en un proyecto pequeño antes de comprometernos, y esa es la versión que recomendamos.\n\n¿Cuál ha sido tu experiencia? Cuéntanos en los comentarios.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry', 'analysis'], - 'slides' => null, - ], - [ - 'slug' => 'pricing_advice_feed', - 'category' => 'industry_tip', - 'name' => 'Consejo de precios', - 'description' => 'Comparte una lección de precios desde la experiencia.', - 'content' => "Lo que nos equivocamos en precios: [el error].\n\nCobramos poco por [periodo] hasta que alguien nos hizo notar que los números no cerraban. Subimos los precios [porcentaje], perdimos [número] clientes, mantuvimos al resto y ganamos más.\n\nSi tú también estás trancado/a con esto, el link en la bio tiene nuestro desglose de precios.", - 'image_count' => 1, - 'image_keywords' => ['money', 'price', 'calculator'], - 'slides' => null, - ], - [ - 'slug' => 'workflow_tip_feed', - 'category' => 'industry_tip', - 'name' => 'Tip de flujo de trabajo', - 'description' => 'Comparte una mejora pequeña en el flujo de trabajo.', - 'content' => "Un cambio pequeño en el flujo que nos ahorró horas: [el cambio].\n\nAntes, [forma vieja]. Después, [forma nueva]. Tomó como una semana acostumbrarse y no volvimos atrás.\n\nSi lo pruebas, cuéntanos qué tal te fue.", - 'image_count' => 1, - 'image_keywords' => ['workflow', 'productivity', 'planner'], - 'slides' => null, - ], - - // Event - [ - 'slug' => 'event_announcement_feed', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncia un evento que viene en camino.', - 'content' => "Aparta la fecha.\n\n{{brand_name}} organiza [nombre del evento] el [fecha] en [lugar u online].\n\nVamos a tener [oradores, formato o qué esperar]. Los lugares están limitados a [número] esta vez.\n\nConfirma asistencia por el link en la bio.", - 'image_count' => 1, - 'image_keywords' => ['event', 'invitation', 'calendar'], - 'slides' => null, - ], - [ - 'slug' => 'webinar_invite_feed', - 'category' => 'event', - 'name' => 'Invitación a webinar', - 'description' => 'Promociona un webinar que viene en camino.', - 'content' => "Webinar gratis: [tema]. [Fecha] a las [hora].\n\n[Nombre del host] va a recorrer [puntos principales] y después responder preguntas en vivo en los últimos [minutos].\n\nSi no puedes asistir, regístrate igual y te enviamos la grabación.\n\nLink en la bio.", - 'image_count' => 1, - 'image_keywords' => ['webinar', 'laptop', 'presentation'], - 'slides' => null, - ], - [ - 'slug' => 'meetup_recap_feed', - 'category' => 'event', - 'name' => 'Recap del meetup', - 'description' => 'Recapitula un evento presencial reciente.', - 'content' => "[Número] personas, [ciudad], una sala.\n\nEl meetup de anoche juntó a gente que trabaja en [área]. La mejor conversación de la noche fue sobre [tema], empezó con un café y nunca terminó del todo.\n\nGracias a todos los que vinieron. El próximo es el [fecha].", - 'image_count' => 1, - 'image_keywords' => ['meetup', 'crowd', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'live_stream_reminder_feed', - 'category' => 'event', - 'name' => 'Recordatorio de live', - 'description' => 'Recuerda a tus seguidores sobre un live que viene.', - 'content' => "Live el [día] a las [hora].\n\nVamos a hablar de [tema]. Sin guion, solo preguntas y lo que tire el chat.\n\nActiva las notificaciones para no perdértelo. O no, el replay queda en el perfil después.", - 'image_count' => 1, - 'image_keywords' => ['live', 'broadcast', 'camera'], - 'slides' => null, - ], - - // Engagement - [ - 'slug' => 'this_or_that_feed', - 'category' => 'engagement', - 'name' => 'Esto o aquello', - 'description' => 'Haz una pregunta simple de elegir entre dos.', - 'content' => "¿[Opción A] u [Opción B]?\n\nDiscutimos esto en la oficina al menos una vez por semana. Curioso por ver qué lado gana aquí.\n\nVota en los comentarios. No hay respuesta incorrecta, pero hay una correcta.", - 'image_count' => 1, - 'image_keywords' => ['choice', 'options', 'vote'], - 'slides' => null, - ], - [ - 'slug' => 'fill_in_the_blank_feed', - 'category' => 'engagement', - 'name' => 'Completa la frase', - 'description' => 'Reta a tus seguidores con una frase para completar.', - 'content' => "Termina la frase: \"Lo primero que hago cada mañana es ___.\"\n\nLe preguntamos al equipo y nos dijeron desde \"revisar Slack\" hasta \"evitar revisar Slack\". Curioso por saber dónde te ubicas tú.\n\nDeja la tuya en los comentarios.", - 'image_count' => 1, - 'image_keywords' => ['question', 'morning', 'coffee'], - 'slides' => null, - ], - [ - 'slug' => 'comment_question_feed', - 'category' => 'engagement', - 'name' => 'Pregunta para comentarios', - 'description' => 'Haz una pregunta abierta para generar comentarios.', - 'content' => "Pregunta para el grupo: ¿cuál es el mejor [item relacionado al tema] que probaste este año?\n\nEstamos armando un compilado y queremos elecciones reales, no las cinco que todos listan.\n\nDeja la tuya abajo. Compartimos las favoritas la próxima semana.", - 'image_count' => 1, - 'image_keywords' => ['conversation', 'community', 'chat'], - 'slides' => null, - ], - [ - 'slug' => 'tag_a_friend_feed', - 'category' => 'engagement', - 'name' => 'Etiqueta a un amigo', - 'description' => 'Anima a etiquetar con un escenario identificable.', - 'content' => "Etiqueta al amigo que [escenario identificable].\n\nTodos tenemos uno. Tal vez tú eres uno. Como sea, este post es para esa persona.\n\nPuntos extra si te etiqueta de vuelta.", - 'image_count' => 1, - 'image_keywords' => ['friends', 'people', 'fun'], - 'slides' => null, - ], -]; diff --git a/templates/es/instagram_story.php b/templates/es/instagram_story.php deleted file mode 100644 index 00c2be95..00000000 --- a/templates/es/instagram_story.php +++ /dev/null @@ -1,362 +0,0 @@ - 'story_announcement', - 'category' => 'product_launch', - 'name' => 'Aviso rápido', - 'description' => 'Llama la atención sobre un lanzamiento o novedad con un Story de 24 horas.', - 'content' => "Novedad en {{brand_name}}.\n\nToca el enlace para ver lo nuevo.", - 'image_count' => 1, - 'image_keywords' => ['announcement', 'launch'], - 'slides' => null, - ], - [ - 'slug' => 'story_poll_question', - 'category' => 'engagement', - 'name' => 'Encuesta rápida', - 'description' => 'Usa un Story para hacer una pregunta rápida y enganchar a tu audiencia.', - 'content' => "¿Qué es lo más importante al elegir un [producto/servicio]?\n\nToca para votar.", - 'image_count' => 1, - 'image_keywords' => ['question', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'story_flash_promo', - 'category' => 'promotion', - 'name' => 'Promo relámpago', - 'description' => 'Oferta por tiempo limitado en formato Story con urgencia.', - 'content' => "Solo por 24 horas.\n\n[Descuento]% off en {{brand_name}}.\n\nDesliza hacia arriba.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'urgency'], - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'story_product_drop', - 'category' => 'product_launch', - 'name' => 'Lanzamiento de producto', - 'description' => 'Anuncia un producto nuevo que sale hoy.', - 'content' => "Ya está.\n\n[Nombre del producto] acaba de salir.\n\nEnlace en la bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'new'], - 'slides' => null, - ], - [ - 'slug' => 'story_feature_shipped', - 'category' => 'product_launch', - 'name' => 'Función publicada', - 'description' => 'Cuéntales a tus seguidores sobre una función que acabas de lanzar.', - 'content' => "Acabamos de lanzar [función].\n\nPruébala.", - 'image_count' => 1, - 'image_keywords' => ['update', 'feature', 'app'], - 'slides' => null, - ], - [ - 'slug' => 'story_waitlist_open', - 'category' => 'product_launch', - 'name' => 'Lista de espera abierta', - 'description' => 'Invita a tus seguidores a unirse a la lista de espera.', - 'content' => "Lista de espera abierta.\n\nQuedan [Cupos] cupos.\n\nEnlace en la bio.", - 'image_count' => 1, - 'image_keywords' => ['waitlist', 'signup'], - 'slides' => null, - ], - [ - 'slug' => 'story_preorder_live', - 'category' => 'product_launch', - 'name' => 'Preventa activa', - 'description' => 'Impulsa las preventas de un producto que viene en camino.', - 'content' => "Preventa abierta.\n\nEnvíos el [fecha].\n\nToca para reservar el tuyo.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product'], - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'story_weekend_sale', - 'category' => 'promotion', - 'name' => 'Promo de fin de semana', - 'description' => 'Impulsa una promo rápida de fin de semana.', - 'content' => "Promo de fin de semana.\n\n[Descuento]% off en todo.\n\nTermina el domingo.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'weekend', 'discount'], - 'slides' => null, - ], - [ - 'slug' => 'story_code_drop', - 'category' => 'promotion', - 'name' => 'Código de descuento', - 'description' => 'Comparte un código que tus seguidores pueden usar al pagar.', - 'content' => "Usa [CÓDIGO] al pagar.\n\n[Descuento]% off.\n\nVálido hasta [fecha].", - 'image_count' => 1, - 'image_keywords' => ['coupon', 'code', 'discount'], - 'slides' => null, - ], - [ - 'slug' => 'story_last_chance', - 'category' => 'promotion', - 'name' => 'Última oportunidad', - 'description' => 'Recordatorio final antes de que termine la promo.', - 'content' => "Última oportunidad.\n\n[Oferta] termina a medianoche.", - 'image_count' => 1, - 'image_keywords' => ['deadline', 'sale', 'urgent'], - 'slides' => null, - ], - [ - 'slug' => 'story_bundle_deal', - 'category' => 'promotion', - 'name' => 'Combo promocional', - 'description' => 'Promociona un combo a un precio menor.', - 'content' => "Combo promocional.\n\n[Ítem A] + [Ítem B] por [precio].\n\nToca para llevarlo.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'deal', 'product'], - 'slides' => null, - ], - - // educational - [ - 'slug' => 'story_quick_tip', - 'category' => 'educational', - 'name' => 'Tip rápido', - 'description' => 'Comparte un tip corto en pantalla.', - 'content' => "Tip rápido:\n\n[Un tip corto y práctico].", - 'image_count' => 1, - 'image_keywords' => ['tip', 'advice', 'learning'], - 'slides' => null, - ], - [ - 'slug' => 'story_did_you_know', - 'category' => 'educational', - 'name' => 'Sabías que', - 'description' => 'Suelta un dato sorprendente.', - 'content' => "¿Sabías que…?\n\n[Dato sorprendente sobre tu nicho].", - 'image_count' => 1, - 'image_keywords' => ['fact', 'knowledge'], - 'slides' => null, - ], - [ - 'slug' => 'story_common_mistake', - 'category' => 'educational', - 'name' => 'Error común', - 'description' => 'Señala un error que tu audiencia suele cometer.', - 'content' => "Deja de [error común].\n\nHaz [mejor enfoque] en su lugar.", - 'image_count' => 1, - 'image_keywords' => ['mistake', 'advice', 'tip'], - 'slides' => null, - ], - [ - 'slug' => 'story_one_word_lesson', - 'category' => 'educational', - 'name' => 'Lección en una palabra', - 'description' => 'Una sola palabra seguida de un porqué corto.', - 'content' => "[Una palabra].\n\nEsa es la diferencia entre [resultado A] y [resultado B].", - 'image_count' => 1, - 'image_keywords' => ['lesson', 'word', 'idea'], - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'story_workspace_peek', - 'category' => 'behind_the_scenes', - 'name' => 'Vistazo al espacio', - 'description' => 'Foto rápida de donde sucede el trabajo.', - 'content' => "Donde sucede el trabajo.\n\n[Pie corto sobre tu espacio].", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'desk', 'office'], - 'slides' => null, - ], - [ - 'slug' => 'story_meet_the_team', - 'category' => 'behind_the_scenes', - 'name' => 'Conoce al equipo', - 'description' => 'Presenta a alguien del equipo en una línea.', - 'content' => "Conoce a [nombre].\n\n[Su rol en {{brand_name}}].", - 'image_count' => 1, - 'image_keywords' => ['team', 'people', 'portrait'], - 'slides' => null, - ], - [ - 'slug' => 'story_in_progress', - 'category' => 'behind_the_scenes', - 'name' => 'En proceso', - 'description' => 'Muestra algo a medio hacer.', - 'content' => "En proceso.\n\n[En qué estás trabajando ahora].", - 'image_count' => 1, - 'image_keywords' => ['process', 'work', 'progress'], - 'slides' => null, - ], - [ - 'slug' => 'story_packing_orders', - 'category' => 'behind_the_scenes', - 'name' => 'Pedidos saliendo', - 'description' => 'Muestra los pedidos saliendo a la calle.', - 'content' => "Pedidos de hoy.\n\nGracias por confiar en {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['packaging', 'orders', 'shipping'], - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'story_customer_quote', - 'category' => 'testimonial', - 'name' => 'Cita de cliente', - 'description' => 'Comparte una cita corta de un cliente en pantalla.', - 'content' => "\"[Cita corta del cliente].\"\n\n- [Nombre del cliente]", - 'image_count' => 1, - 'image_keywords' => ['testimonial', 'review', 'quote'], - 'slides' => null, - ], - [ - 'slug' => 'story_review_screenshot', - 'category' => 'testimonial', - 'name' => 'Captura de reseña', - 'description' => 'Repostea una captura de una reseña genial.', - 'content' => "Reseñas así nos alegran la semana.\n\nGracias, [primer nombre del cliente].", - 'image_count' => 1, - 'image_keywords' => ['review', 'screenshot', 'feedback'], - 'slides' => null, - ], - [ - 'slug' => 'story_before_after_user', - 'category' => 'testimonial', - 'name' => 'Antes y después del cliente', - 'description' => 'Destaca el resultado de un cliente.', - 'content' => '[Primer nombre del cliente] pasó de [antes] a [después] en [tiempo].', - 'image_count' => 1, - 'image_keywords' => ['result', 'transformation', 'customer'], - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'story_industry_myth', - 'category' => 'industry_tip', - 'name' => 'Mito del sector', - 'description' => 'Derriba una creencia común en tu rubro.', - 'content' => "Mito: [creencia común].\n\nRealidad: [la verdad].", - 'image_count' => 1, - 'image_keywords' => ['myth', 'industry', 'truth'], - 'slides' => null, - ], - [ - 'slug' => 'story_industry_stat', - 'category' => 'industry_tip', - 'name' => 'Dato del sector', - 'description' => 'Suelta un dato que llama la atención.', - 'content' => "[Dato].\n\nPor eso creamos {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['statistic', 'data', 'industry'], - 'slides' => null, - ], - [ - 'slug' => 'story_tool_we_use', - 'category' => 'industry_tip', - 'name' => 'Herramienta que usamos', - 'description' => 'Recomienda una herramienta que tu audiencia puede probar.', - 'content' => "Herramienta que usamos a diario:\n\n[Nombre de la herramienta].\n\nPor qué: [un motivo corto].", - 'image_count' => 1, - 'image_keywords' => ['tool', 'software', 'recommendation'], - 'slides' => null, - ], - [ - 'slug' => 'story_red_flag', - 'category' => 'industry_tip', - 'name' => 'Señal de alerta', - 'description' => 'Avisa a tus seguidores sobre una señal de alerta en tu sector.', - 'content' => "Señal de alerta en [sector]:\n\n[La señal a la que prestar atención].", - 'image_count' => 1, - 'image_keywords' => ['warning', 'industry', 'advice'], - 'slides' => null, - ], - - // event - [ - 'slug' => 'story_event_today', - 'category' => 'event', - 'name' => 'Evento hoy', - 'description' => 'Recordatorio de último momento para un evento del mismo día.', - 'content' => "Esta noche.\n\n[Nombre del evento] a las [hora].\n\nToca el enlace.", - 'image_count' => 1, - 'image_keywords' => ['event', 'reminder'], - 'slides' => null, - ], - [ - 'slug' => 'story_event_countdown', - 'category' => 'event', - 'name' => 'Cuenta regresiva', - 'description' => 'Genera expectativa con una cuenta regresiva.', - 'content' => "[X] días para [nombre del evento].\n\nResponde VOY para recibir el recordatorio.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'story_live_now', - 'category' => 'event', - 'name' => 'En vivo ahora', - 'description' => 'Avisa a tus seguidores que estás en vivo o en escenario.', - 'content' => "En vivo ahora.\n\n[Tema o lugar].\n\nVen a saludar.", - 'image_count' => 1, - 'image_keywords' => ['live', 'streaming', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'story_event_recap', - 'category' => 'event', - 'name' => 'Resumen del evento', - 'description' => 'Resumen rápido cuando termina el evento.', - 'content' => "[Nombre del evento] terminó.\n\nGracias a quienes nos acompañaron.", - 'image_count' => 1, - 'image_keywords' => ['event', 'recap', 'crowd'], - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'story_this_or_that', - 'category' => 'engagement', - 'name' => 'Esto o aquello', - 'description' => 'Encuesta de dos opciones para toques rápidos.', - 'content' => "¿[Opción A] u [Opción B]?\n\nToca para votar.", - 'image_count' => 1, - 'image_keywords' => ['poll', 'choice', 'vote'], - 'slides' => null, - ], - [ - 'slug' => 'story_question_box', - 'category' => 'engagement', - 'name' => 'Caja de preguntas', - 'description' => 'Abre el espacio a preguntas.', - 'content' => "Pregúntame lo que quieras sobre [tema].\n\nResponde con tu pregunta.", - 'image_count' => 1, - 'image_keywords' => ['questions', 'ama', 'conversation'], - 'slides' => null, - ], - [ - 'slug' => 'story_emoji_slider', - 'category' => 'engagement', - 'name' => 'Slider de emoji', - 'description' => 'Usa el sticker de slider para medir una sensación.', - 'content' => "¿Qué tan emocionado estás con [cosa]?\n\nMueve el slider.", - 'image_count' => 1, - 'image_keywords' => ['slider', 'reaction', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'story_dm_prompt', - 'category' => 'engagement', - 'name' => 'Llamada al DM', - 'description' => 'Anima a tus seguidores a enviar una palabra clave por DM.', - 'content' => "¿Quieres [recurso]?\n\nResponde [palabra clave] y te lo envío.", - 'image_count' => 1, - 'image_keywords' => ['dm', 'message', 'engagement'], - 'slides' => null, - ], -]; diff --git a/templates/es/linkedin_page_post.php b/templates/es/linkedin_page_post.php deleted file mode 100644 index 5fc21236..00000000 --- a/templates/es/linkedin_page_post.php +++ /dev/null @@ -1,342 +0,0 @@ - 'company_milestone', - 'category' => 'behind_the_scenes', - 'name' => 'Hito de la empresa', - 'description' => 'Celebra un hito de la empresa desde la página de la marca.', - 'content' => "Hoy {{brand_name}} llega a [hito, ej.: 1.000 clientes, 5 años, \$X de ARR].\n\nEsto no pasó por una sola persona. Pasó porque [equipo / clientes / comunidad] aparecieron todos los días.\n\nGracias a todos los que estuvieron en este camino. Recién estamos empezando.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'hiring_announcement', - 'category' => 'engagement', - 'name' => 'Estamos contratando', - 'description' => 'Anuncia vacantes abiertas e invita postulaciones desde la página de la empresa.', - 'content' => "{{brand_name}} está contratando.\n\nBuscamos [puesto(s)] para sumarse a nosotros en [equipo/misión].\n\nLo que ofrecemos:\n→ [Punto 1]\n→ [Punto 2]\n→ [Punto 3]\n\nSi te suena (o conoces a alguien), postula o comparte → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'thought_leadership_page', - 'category' => 'industry_tip', - 'name' => 'Mirada del sector', - 'description' => 'Comparte la postura de la empresa sobre una tendencia o cambio del sector.', - 'content' => "El panorama de [sector] está cambiando.\n\nEsto es lo que vemos en {{brand_name}}:\n\n1. [Observación]\n2. [Observación]\n3. [Observación]\n\nLo que esto significa para [audiencia]: [implicación].\n\n¿Qué están viendo ustedes?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== product_launch ===== - [ - 'slug' => 'new_feature_release', - 'category' => 'product_launch', - 'name' => 'Lanzamiento de nueva función', - 'description' => 'Anuncia una función nueva específica y el problema que resuelve.', - 'content' => "Hoy lanzamos [nombre de la función].\n\nLa versión corta: [descripción en una línea de lo que hace].\n\nLa versión larga: los clientes nos repetían [dolor específico]. Probamos [solución previa] durante unos [periodo de tiempo] y nunca terminó de funcionar. Así que rehicimos [área] desde cero.\n\nAlgunos cambios:\n[Comportamiento antes] ahora es [comportamiento después].\n[Paso manual] corre solo.\n[Límite] ya no existe.\n\nSi quieres probarlo, la documentación está aquí: [link]. Si encuentras algo roto, nuestro equipo está en los comentarios.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_open_signups', - 'category' => 'product_launch', - 'name' => 'Beta abierta para inscripciones', - 'description' => 'Invita a clientes y prospectos a un beta público o privado.', - 'content' => "El acceso beta a [producto/función] ya está abierto.\n\nPasamos [periodo de tiempo] probándolo con [número] testers privados. La devolución fue lo bastante buena como para abrir más la puerta.\n\nPara quién es: [descripción específica del usuario, ej.: equipos que corren más de X campañas/mes].\nPara quién todavía no: [exclusión honesta, ej.: empresas que necesitan SSO].\n\nLimitamos esta ronda a [número] empresas para que el equipo pueda acompañar cada cuenta de cerca. Los lugares se asignan por orden de llegada.\n\nPide acceso: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'integration_partnership', - 'category' => 'product_launch', - 'name' => 'Integración con socio', - 'description' => 'Anuncia una nueva integración o alianza técnica.', - 'content' => "{{brand_name}} ahora se conecta con [socio].\n\nSi usas las dos, puedes dejar de [paso manual]. La integración se encarga de [flujo de datos específico] de forma automática.\n\nLo que cambió para nuestros clientes en común:\nNada de exportar [datos] y reimportar del otro lado.\n[Disparador] en [socio] ahora crea [acción] en {{brand_name}}.\nEl mapeo de campos se puede editar, así que las configuraciones raras siguen funcionando.\n\nGracias al equipo de [socio] por las idas y vueltas con la API. Guía de configuración: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'product_redesign', - 'category' => 'product_launch', - 'name' => 'Lanzamiento de rediseño del producto', - 'description' => 'Anuncia un rediseño relevante de UI o producto.', - 'content' => "Rediseñamos [producto/área]. Está disponible para todos hoy.\n\nNuestro equipo de diseño estuvo bastante callado por aquí los últimos meses por esto. La [área] anterior creció de forma orgánica y terminó con [problema específico, ej.: cuatro maneras distintas de empezar un proyecto nuevo]. Los clientes nos lo dijeron. Estuvimos de acuerdo.\n\nLo que cambió:\nUna acción principal por pantalla, en vez de tres.\n[Elemento anterior] pasó a [nueva ubicación] para dejar de estorbar.\n[Patrón específico] que nadie usaba se fue.\n\nSi algo se siente raro los primeros días, es normal. Responde aquí o escríbele al equipo a [contacto] y lo miramos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== promotion ===== - [ - 'slug' => 'limited_time_offer', - 'category' => 'promotion', - 'name' => 'Oferta por tiempo limitado', - 'description' => 'Anuncia un descuento u oferta de precio con fecha límite clara.', - 'content' => "[Oferta, ej.: 25% de descuento en el primer año de {{brand_name}}] está abierta hasta [fecha específica].\n\nCasi nunca hacemos descuentos. Este está atado a [motivo, aniversario, cierre de trimestre, hito de producto] y no lo vamos a repetir en las mismas condiciones en [periodo de tiempo].\n\nA quién aplica: [elegibilidad, clientes nuevos, planes anuales, plan específico].\nA quién no: [exclusión honesta].\n\nUsa [código] en el checkout, o habla con nuestro equipo si quieres ayuda para elegir un plan: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_resource_offer', - 'category' => 'promotion', - 'name' => 'Recurso gratuito', - 'description' => 'Promociona una guía, plantilla o reporte gratuito.', - 'content' => "Hicimos un [recurso, guía, plantilla, reporte de benchmark] gratuito para [audiencia].\n\nCubre [tema específico 1], [tema específico 2] y los [número] errores que más vemos al trabajar con [tipo de cliente objetivo]. Unas [número] páginas, sin pedir más que nombre y mail laboral.\n\nPor qué es gratis: [motivo honesto, ej.: lo armamos primero para nuestros clientes y es el tipo de cosa que rinde más cuanta más gente la tiene].\n\nDescárgalo aquí: [link]. Cuéntanos qué falta y lo actualizamos en la próxima versión.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'referral_program_launch', - 'category' => 'promotion', - 'name' => 'Anuncio de programa de referidos', - 'description' => 'Promociona un programa de referidos para clientes desde la página de la empresa.', - 'content' => "Lanzamos un programa de referidos para clientes de {{brand_name}}.\n\nSi recomiendas una empresa que termina pagando, las dos partes reciben [beneficio específico, ej.: un mes gratis, \$X de crédito, una función desbloqueada]. Sin niveles. Sin ranking. Sin tazas.\n\nResistimos un buen tiempo a hacer esto porque la mayoría de los programas de referidos parece pirámide encubierta. Llegamos acá porque nuestro mayor canal de crecimiento el año pasado fue cliente contándole a cliente, y se sintió raro no compartir el beneficio.\n\nDetalles y tu link de referidos: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== educational ===== - [ - 'slug' => 'how_we_solve_problem', - 'category' => 'educational', - 'name' => 'Cómo abordamos un problema', - 'description' => 'Muestra cómo la empresa enfrenta un problema recurrente de los clientes.', - 'content' => "Una pregunta que nos llega cada semana: [pregunta específica].\n\nAsí lo pensamos en {{brand_name}}.\n\nLa mayoría de los equipos arranca con [primer movimiento común]. Funciona hasta que se topa con [punto específico de falla]. Ahí te quedas pegado agregando [solución parche] cada vez que algo cambia.\n\nUn camino distinto: [enfoque alternativo]. El precio es [costo honesto, ej.: un setup más lento, más cabeza al inicio, más difícil de explicarle a alguien nuevo]. La ganancia es que [beneficio específico] deja de ser un incendio recurrente.\n\nEscribimos la versión larga aquí: [link]. ¿No estás de acuerdo? Los comentarios están abiertos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'customer_data_insight', - 'category' => 'educational', - 'name' => 'Insight de datos de clientes', - 'description' => 'Comparte un patrón útil que se observa en la base de clientes.', - 'content' => "Miramos [métrica/comportamiento] en [número] cuentas de {{brand_name}} el último trimestre.\n\nUna cosa saltó a la vista: [hallazgo específico con número, ej.: los equipos que hicieron X en su primera semana tuvieron 3x más probabilidad de seguir activos al sexto mes].\n\nEsperábamos lo contrario. Nuestra hipótesis inicial era [supuesto viejo], en parte por [motivo]. Los datos no estuvieron de acuerdo.\n\nAlgunos detalles: esto es correlación, no causa. La muestra está sesgada hacia [segmento]. Y [periodo de tiempo] es corto.\n\nAun así, si recién empiezas con {{brand_name}}, [recomendación práctica] probablemente vale la pena en la primera semana.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'common_mistake_breakdown', - 'category' => 'educational', - 'name' => 'Desglose de error común', - 'description' => 'Explica un error recurrente y cómo evitarlo.', - 'content' => "El error más común que vemos cuando los equipos adoptan [herramienta/proceso/práctica]: [error específico].\n\nSuele verse así. Un equipo arranca con [setup]. En unas semanas, agregan [solución parche] porque [motivo]. Para el tercer mes, el parche ya es el sistema y nadie recuerda por qué.\n\nLa solución no es [respuesta obvia]. La solución es volver atrás y preguntarse si [supuesto original] alguna vez fue cierto en su caso. La mitad de las veces, no lo era.\n\nEscribimos esto porque cometimos el mismo error puertas adentro en [año]. Detalle completo: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'tool_comparison', - 'category' => 'educational', - 'name' => 'Comparación honesta de herramientas', - 'description' => 'Compara enfoques o herramientas para una tarea específica, incluyendo dónde la empresa pierde.', - 'content' => "¿Cuándo usar {{brand_name}} y cuándo no?\n\nLa primera mitad de la pregunta nos llega todo el tiempo. Esta es la segunda.\n\nUsa {{brand_name}} cuando [situación específica, ej.: tienes más de X de Y, o necesitas la capacidad Z].\n\nNo uses {{brand_name}} cuando [exclusión honesta, ej.: eres un solo usuario con menos de X, o tu flujo es totalmente [categoría adyacente]]. En esos casos, [competidor o enfoque alternativo] encaja mejor de verdad, y eso te lo decimos en una llamada de ventas.\n\nDesglose completo, con comparativa al lado: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== behind_the_scenes ===== - [ - 'slug' => 'team_offsite_recap', - 'category' => 'behind_the_scenes', - 'name' => 'Recap del offsite del equipo', - 'description' => 'Resume un offsite o all-hands reciente del equipo.', - 'content' => "Cerramos nuestro offsite en [ciudad] la semana pasada.\n\n[Número] personas, [número] días, una pizarra que la pasó mal. Más o menos un tercio de la empresa se vio en persona por primera vez, lo que pasa cuando creces [de X a Y] en un año.\n\nGastamos más tiempo en [tema] del que habíamos planeado y menos en [otro tema] de lo que esperábamos. La conversación más difícil fue sobre [tema honesto, ej.: qué dejamos de hacer en la segunda mitad del año]. No la cerramos del todo. Está bien.\n\nEl próximo es en [lugar] en [mes]. Para entonces seremos [número] personas. No tengo idea cómo va a ser.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'office_or_remote_culture', - 'category' => 'behind_the_scenes', - 'name' => 'Cómo trabajamos', - 'description' => 'Comparte el modelo de trabajo de la empresa de forma honesta.', - 'content' => "Cómo trabaja {{brand_name}} de verdad, ya que nos preguntan.\n\nSomos [totalmente remotos / híbridos / con base en X y colaboradores remotos] en [número] zonas horarias. Sin días obligatorios en oficina. Hacemos un all-hands por semana y un update asíncrono los viernes.\n\nLo que nos gusta: bloques de trabajo profundo, contratar en distintas geografías, agendas más limpias.\n\nLo difícil: el onboarding lleva más tiempo del que llevaría en persona. Las ideas nuevas a veces se quedan trabadas en mensajes directos. La superposición horaria con [región] es complicada.\n\nNo decimos que sea el setup correcto para toda empresa. Es el que nos sirve a nosotros hoy.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'engineering_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Recap de decisión de ingeniería', - 'description' => 'Comparte una decisión técnica o de producto interna y el porqué.', - 'content' => "El mes pasado [tomamos una decisión específica, ej.: salimos de X, reescribimos Y, matamos la función Z].\n\nLa versión corta del porqué: [motivo en una línea].\n\nLa versión larga. El setup viejo estaba bien cuando teníamos [número] clientes. En [escala actual], empezó a notarse en [síntoma específico]. Probamos [arreglo intermedio] durante unos [periodo de tiempo] hasta que aceptamos que no iba a aguantar.\n\nEl precio que aceptamos: [costo honesto, ej.: dos semanas con releases más lentos, breaking change para algunas integraciones].\n\nLo escribimos porque ojalá otros equipos compartan más de este tipo de decisión y no solo las victorias.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mistake_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Postmortem público', - 'description' => 'Comparte un error, caída o falla reciente de forma honesta.', - 'content' => "El [fecha], {{brand_name}} tuvo [problema específico, ej.: una caída, un bug de cobro, un problema de datos que afectó al X% de las cuentas] durante unos [duración].\n\nQué pasó: [resumen técnico u operativo en un párrafo].\n\nA quién afectó: [alcance honesto, incluyendo a los clientes que no se vieron afectados].\n\nQué hicimos: [arreglo inmediato y mitigación].\n\nQué estamos cambiando para que no vuelva a pasar igual: [cambio específico, no un genérico 'lo haremos mejor'].\n\nSi te afectó y no te contactamos directamente, responde o escribe a [contacto]. Le debemos a varios una conversación más larga.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== testimonial ===== - [ - 'slug' => 'customer_quote_short', - 'category' => 'testimonial', - 'name' => 'Cita corta de cliente', - 'description' => 'Comparte una cita corta y específica de cliente en la página de la empresa.', - 'content' => "De una conversación reciente con [primer nombre del cliente], [puesto] en [empresa]:\n\n\"[Cita del cliente, debe mencionar un resultado, número o cambio específico. Evita elogios genéricos del tipo 'gran producto'.]\"\n\nLes preguntamos si podíamos compartirla. Dijeron que sí.\n\nEl contexto detrás de la cita: [una o dos frases sobre lo que estaban tratando de hacer y qué cambió].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'case_study_recap', - 'category' => 'testimonial', - 'name' => 'Resumen de caso de éxito', - 'description' => 'Resume un caso de éxito de cliente publicado.', - 'content' => "Nuevo caso: [nombre del cliente].\n\nAntes de {{brand_name}}, su equipo estaba [situación específica, ej.: corriendo X manualmente, gastando Y horas/semana en Z]. Después de [periodo de tiempo] usando {{brand_name}}, [resultado específico con número].\n\nAlgunas cosas que ellos hicieron y que otros clientes no siempre prueban:\n[Táctica específica del cliente].\n[Otra táctica].\n[Nota honesta: algo que todavía están afinando].\n\nVersión completa con el flujo real del equipo y capturas: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unexpected_use_case', - 'category' => 'testimonial', - 'name' => 'Uso inesperado del producto', - 'description' => 'Resalta una manera creativa o inesperada en que los clientes usan el producto.', - 'content' => "No construimos {{brand_name}} pensando en [caso de uso inesperado], pero los clientes lo siguen usando así.\n\n[Cliente o segmento de clientes] empezó a [comportamiento específico] hace unos [periodo de tiempo]. Lo notamos por [señal, ej.: un pico de uso en una función específica, un ticket de soporte pidiendo X]. Cuando les preguntamos, la respuesta fue: [razonamiento del cliente parafraseado].\n\nNo está en nuestro roadmap. Quizá entre pronto. Si estás haciendo algo parecido, a nuestro equipo de producto le encantaría escucharte. Responde aquí o escribe a [contacto].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== industry_tip ===== - [ - 'slug' => 'contrarian_take', - 'category' => 'industry_tip', - 'name' => 'Opinión a contracorriente', - 'description' => 'Defiende una postura clara contra una idea popular del sector.', - 'content' => "Una opinión que nos mete en problemas en conferencias: [postura contraria, dicha sin vueltas].\n\nEl argumento de siempre es [postura popular]. No está mal en todos los casos. Está mal en la mayoría de los casos que vemos, y aquí va el porqué.\n\n[Razón 1 con ejemplo específico].\n[Razón 2 con ejemplo específico].\n\nLa contra que siempre nos ponen: [contraargumento bien hecho]. Es justo, y aceptamos que aplica cuando [condición específica]. Fuera de esa condición, el consejo de siempre les sale caro a los equipos sin que nadie se dé cuenta.\n\nFelices de estar equivocados acá. Cuéntenos en los comentarios por qué.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'industry_benchmark', - 'category' => 'industry_tip', - 'name' => 'Benchmark del sector', - 'description' => 'Comparte un benchmark o métrica agregada de la base de clientes.', - 'content' => "Benchmark rápido para [audiencia].\n\nEntre [número] cuentas {{brand_name}} de [sector/segmento] el último trimestre, la mediana de [métrica] fue [valor]. El percentil 90 fue [valor]. El 25% más bajo quedó por debajo de [valor].\n\nSi estás bajo la mediana, el motivo más común que vemos es [motivo específico]. La solución casi nunca es [respuesta obvia]. Suele ser [solución real].\n\nSi estás arriba del percentil 90, probablemente ya haces [comportamiento específico], y nos encantaría hablar contigo de eso. Responde o manda un DM a la página.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'trend_we_disagree_with', - 'category' => 'industry_tip', - 'name' => 'Tendencia con la que no estamos de acuerdo', - 'description' => 'Cuestiona una práctica de moda en el sector con argumentos.', - 'content' => "La mitad de los posts de [sector] que vemos este mes son sobre [práctica de moda].\n\nNosotros no la vamos a adoptar en {{brand_name}}, y es probable que no lo hagamos.\n\nEl pitch es [encuadre popular]. La versión honesta, según nuestra experiencia, es que funciona en [escenario acotado] y falla sin hacer ruido en [escenario común] por [motivo específico]. Probamos una versión interna durante [periodo de tiempo] y vimos [resultado específico].\n\nNo digo que nadie deba hacerlo. Digo que para [audiencia objetivo], el tiempo rinde más en [alternativa].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'practical_framework', - 'category' => 'industry_tip', - 'name' => 'Framework práctico', - 'description' => 'Comparte una regla simple o framework interno del equipo.', - 'content' => "Una regla de bolsillo que usa nuestro equipo para decidir [decisión específica]:\n\nSi [condición A], haz [opción 1].\nSi [condición B], haz [opción 2].\nSi no sabes en cuál estás, probablemente estás en [opción 1] complicándolo de más.\n\nNo es un framework con nombre. Salió de unos [periodo de tiempo] de equivocarnos en la misma decisión de maneras un poco distintas. Nos ahorra una o dos discusiones por semana.\n\n¿Útil? ¿Inútil? Cuéntennos cómo deciden ustedes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== event ===== - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncia un evento, webinar o workshop de la empresa.', - 'content' => "Vamos a hacer [nombre del evento] el [fecha] a las [hora/zona horaria].\n\nFormato: [virtual / presencial en ciudad / híbrido].\nPara quién es: [audiencia específica, ej.: heads de marketing en SaaS B2B, 20-200 empleados].\nDe qué vamos a hablar: [tema 1] y [tema 2]. Sin keynote. Sin desfile de proveedores.\n\nLimitamos las inscripciones a [número] para que el Q&A funcione de verdad. Si los eventos pasados sirven de guía, la segunda mitad es donde aparece lo bueno.\n\nInscríbete: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Recap del evento', - 'description' => 'Resume un evento reciente que la empresa organizó o donde participó.', - 'content' => "[Nombre del evento] cerró el [fecha]. Algunas cosas para anotar antes de que se borren.\n\nLa sala se prendió más en [momento o tema específico]. Nuestra hipótesis era que [tema A] iba a dominar. No fue así. Dominó [tema B], y deberíamos haberlo anticipado.\n\nLa pregunta más útil que recibimos: [pregunta parafraseada]. La contestamos con honestidad pero no muy bien. Si fuiste vos, te debemos una mejor, responde aquí.\n\nGracias a [socio / espacio / oradores] por hacer que pasara. Las grabaciones suben la semana que viene: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'conference_attendance', - 'category' => 'event', - 'name' => 'Participación en conferencia', - 'description' => 'Anuncia que el equipo va a estar en una conferencia próxima.', - 'content' => "{{brand_name}} va a estar en [conferencia] en [ciudad] del [fecha] al [fecha].\n\nVamos [número] personas. Este año no tenemos stand. Lo probamos el año pasado y las conversaciones más útiles pasaron lejos del stand.\n\nSi quieres encontrarte con nosotros:\n[Nombre del miembro del equipo] anda por ahí [días/horarios], con interés sobre todo en [tema].\n[Otro miembro del equipo] presenta sobre [tema] el [día].\nCena el [fecha], grupo chico, responde si quieres entrar.\n\nReserva un horario aquí: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== engagement ===== - [ - 'slug' => 'open_question_to_audience', - 'category' => 'engagement', - 'name' => 'Pregunta abierta a la audiencia', - 'description' => 'Haz una pregunta real y específica a la audiencia de la página.', - 'content' => "Una pregunta de verdad para [audiencia] esta semana.\n\nCuando [situación específica, ej.: estás armando un proyecto nuevo, eligiendo un proveedor, decidiendo qué cortar], ¿cómo decides en la práctica?\n\nNo la versión que pondrías en un slide. La versión que incluye [factor honesto, ej.: quién está disponible esa semana, de qué humor está el CFO, qué herramienta ya conoce el equipo].\n\nVenimos haciendo una versión interna de esta pregunta en {{brand_name}} desde hace un mes y las respuestas son más interesantes que cualquier framework que vimos. Manda la tuya y compartimos lo que escuchamos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'we_want_your_feedback', - 'category' => 'engagement', - 'name' => 'Pedido de feedback', - 'description' => 'Pide la opinión de la audiencia sobre una decisión de roadmap específica.', - 'content' => "Estamos trabados con algo y queremos tu opinión.\n\nPara la próxima versión de {{brand_name}}, estamos eligiendo entre dos caminos para [área].\n\nOpción A: [dirección específica, con el trade-off].\nOpción B: [dirección específica, con el trade-off].\n\nLas dos son reales. Ninguna es claramente la correcta. Los clientes a los que preguntamos están divididos casi mitad y mitad, que es el peor resultado posible para un equipo de producto que quiere entregar.\n\nSi tienes una opinión, sobre todo si es fuerte, responde aquí o manda DM a la página. Nuestro equipo de producto lee todo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'community_spotlight', - 'category' => 'engagement', - 'name' => 'Spotlight de la comunidad', - 'description' => 'Resalta a un cliente, socio o miembro de la comunidad que está haciendo algo interesante.', - 'content' => "Spotlight para [nombre], [puesto] en [empresa].\n\nVimos [su trabajo o post específico] la semana pasada y terminó circulando dentro del equipo de {{brand_name}}. La versión corta del porqué: [motivo específico, qué hizo que fue distinto, útil o a contramano].\n\nVe a seguirle, si todavía no lo haces. No tenemos ningún acuerdo comercial. Sólo está haciendo el tipo de trabajo que nos gustaría ver más en [sector] de forma pública.\n\n[Link a su post / perfil].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'year_in_review', - 'category' => 'engagement', - 'name' => 'Resumen del año', - 'description' => 'Resumen de fin de año honesto desde la página de la empresa.', - 'content' => "Un resumen corto del año de {{brand_name}}.\n\nLo bueno: [logro específico con número]. [Otro logro específico, idealmente un resultado de cliente y no una métrica de vanidad].\n\nLo difícil: [error honesto, ej.: una apuesta de producto que no funcionó, un objetivo de contratación que no alcanzamos, un objetivo que pusimos en enero y soltamos sin ruido en junio].\n\nLo sorpresivo: [algo inesperado que importó, un segmento de cliente que despegó, una función que nadie pidió y se volvió clave].\n\nGracias a los [número] clientes, las [número] personas del equipo y a quienes nos respondían a las 23 h pidiendo que entregáramos cosas. El año que viene va a ser más raro que este.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/es/linkedin_post.php b/templates/es/linkedin_post.php deleted file mode 100644 index baadd48c..00000000 --- a/templates/es/linkedin_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'product_launch_announcement', - 'category' => 'product_launch', - 'name' => 'Anuncio de lanzamiento de producto', - 'description' => 'Publicación corta en LinkedIn anunciando un nuevo producto.', - 'content' => "Tenemos algo que contarte: {{brand_name}} acaba de lanzar [Nombre del Producto].\n\nPor qué importa para [tu audiencia]:\n→ [Beneficio 1]\n→ [Beneficio 2]\n→ [Beneficio 3]\n\nMás info en [link]. Nos encantaría escuchar tu opinión.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'how_to_guide', - 'category' => 'educational', - 'name' => 'Guía paso a paso', - 'description' => 'Publicación educativa paso a paso para LinkedIn.', - 'content' => "Cómo [lograr X] en [plazo], una guía paso a paso.\n\nPaso 1: [Acción]\nPaso 2: [Acción]\nPaso 3: [Acción]\nPaso 4: [Acción]\n\nLo que la mayoría no ve: [insight].\n\n¿Qué paso se te complica más? Cuéntame en los comentarios.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'customer_quote', - 'category' => 'testimonial', - 'name' => 'Testimonio de cliente', - 'description' => 'Comparte un testimonio potente de un cliente en LinkedIn.', - 'content' => "\"[Frase del cliente sobre el resultado que logró con tu producto o servicio.]\"\n- [Nombre del Cliente], [Cargo] en [Empresa]\n\nPor esto construimos {{brand_name}}. Resultados reales para equipos reales.\n\nLee la historia completa → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'industry_insight', - 'category' => 'industry_tip', - 'name' => 'Insight del sector', - 'description' => 'Comparte una visión actual u opinión fuerte sobre tu industria.', - 'content' => "Algo que la mayoría en [industria] entiende mal:\n\n[Afirmación contraintuitiva u opinión fuerte]\n\n¿Por qué? Porque [razón].\n\nLo que sí funciona: [mejor camino].\n\nEn {{brand_name}} lo vimos pasar con cientos de [clientes/equipos]. Los datos son claros.\n\n¿Cuál es tu postura?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncia un webinar o evento en vivo próximo.', - 'content' => "📅 Aparta la fecha: {{brand_name}} organiza [Nombre del Evento] el [Fecha] a las [Hora].\n\nQué esperar:\n✔ [Tema 1]\n✔ [Tema 2]\n✔ [Tema 3]\n\nCupos limitados. Regístrate ya → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'community_question', - 'category' => 'engagement', - 'name' => 'Pregunta para la comunidad', - 'description' => 'Provoca conversación con una pregunta abierta a tu red.', - 'content' => "Si pudieras dar un solo consejo a alguien que recién empieza en [industria/rol], ¿cuál sería?\n\nEl mío: [tu respuesta, sé honesto y específico]\n\nDeja el tuyo en los comentarios. Armemos un hilo que valga la pena guardar.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Product launch (3) ===== - [ - 'slug' => 'feature_release_notes', - 'category' => 'product_launch', - 'name' => 'Notas de lanzamiento de feature', - 'description' => 'Cuéntale a tu red qué se publicó y por qué importa.', - 'content' => "Hoy publicamos [Nombre de la Feature].\n\nLa versión corta: hace [lo que hace] para [a quién está dirigida]. Nos llevó [plazo] del primer boceto a producción.\n\nLo que cambia de verdad:\n• [Capacidad uno, en lenguaje claro]\n• [Capacidad dos, con un ejemplo real]\n• [Lo que cortamos y por qué]\n\nDebatimos [tradeoff] durante semanas. Al final elegimos [decisión] porque [razón]. Si tú habrías tomado la otra decisión, quiero entender por qué.\n\nDocs y un recorrido de 4 minutos en [link]. Los reportes de bugs son bienvenidos, leemos cada uno.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_invitation', - 'category' => 'product_launch', - 'name' => 'Invitación a beta privada', - 'description' => 'Invita a tu red a una beta cerrada con expectativas claras.', - 'content' => "Estamos abriendo [Producto/Feature] en beta privada para un grupo pequeño. Buscamos unos [N] testers.\n\nEl perfil ideal:\n• Trabajas en [rol/industria]\n• Hoy usas [herramienta o flujo] y sientes [fricción específica]\n• Tienes 30 minutos a la semana para romper cosas y contarnos\n\nLo que recibes: acceso anticipado, línea directa con el equipo de {{brand_name}} y voz en lo que construyamos después. Lo que recibimos: feedback honesto, aunque duela.\n\nSi te calza, comenta o escríbeme por DM. Mandamos las invitaciones esta [día/semana].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'milestone_update', - 'category' => 'product_launch', - 'name' => 'Hito del producto', - 'description' => 'Comparte un hito relevante del producto o la empresa con números concretos.', - 'content' => "Hito discreto que cumplimos esta semana: {{brand_name}} pasó de [número / métrica].\n\nPara contexto, cuando arrancamos hace [plazo] teníamos [número inicial]. La mayor parte del crecimiento vino de [canal o motor específico], no de lo que esperábamos.\n\nAlgunas cosas que aprendí en el camino:\n1. [Lección uno, con los números]\n2. [Lección dos, qué haríamos distinto]\n3. [Lección tres sobre el equipo]\n\nGracias a las [N] personas que apostaron por nosotros cuando esto estaba muy crudo. Seguimos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Promotion (3) ===== - [ - 'slug' => 'limited_time_offer', - 'category' => 'promotion', - 'name' => 'Oferta por tiempo limitado', - 'description' => 'Promueve un descuento u oferta con plazo, sin caer en spam.', - 'content' => "Estamos corriendo una promo de [% de descuento] en {{brand_name}} hasta el [fecha].\n\nNo es un truco de Black Friday. Tuvimos un [mes/trimestre] flojo y queremos sumar [N] nuevos [usuarios/clientes] antes de [fin del periodo]. Esa es la razón honesta.\n\nSi venías dudando: [link]. Si te suscribiste en los últimos 30 días, escríbeme y aplico el mismo descuento de forma retroactiva. Es lo correcto.\n\nLa oferta termina el [fecha] a las [hora, zona horaria].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_resource_offer', - 'category' => 'promotion', - 'name' => 'Recurso gratuito', - 'description' => 'Ofrece una descarga o plantilla útil como recurso de baja fricción.', - 'content' => "Pasé el fin de semana convirtiendo nuestro [tipo de recurso, checklist, plantilla, playbook] interno en algo que se puede compartir.\n\nEs el mismo [documento] que usa nuestro equipo para [caso de uso específico]. Sin adornos: [N] páginas, sin relleno, sin formulario de email.\n\nDeja un comentario con la palabra \"[palabra clave]\" y te paso el link por DM. Si prefieres tomarlo directo: [link].\n\nAviso: tiene opinión. Si discrepas con mi postura sobre [punto específico], dímelo. Así lo mejoro para la v2.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'partnership_announcement', - 'category' => 'promotion', - 'name' => 'Anuncio de alianza', - 'description' => 'Anuncia una alianza o integración con un beneficio claro para el cliente.', - 'content' => "{{brand_name}} ya está integrado con [Nombre del Partner].\n\nEl efecto práctico para [audiencia]: ahora puedes [flujo o capacidad específica] sin [el rodeo anterior]. Ahorra cerca de [tiempo/dinero] por [periodo] según el grupo de prueba inicial.\n\nElegimos [Partner] porque su equipo se obsesiona con [valor compartido] igual que el nuestro. No toda solicitud de integración pasa el filtro, y la mayoría no pasa.\n\nLa configuración toma unos [N] minutos. Tutorial aquí: [link]. Si ya usas ambas herramientas, queremos saber cómo te fue.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Educational (3) ===== - [ - 'slug' => 'lesson_learned', - 'category' => 'educational', - 'name' => 'Lección de un error', - 'description' => 'Enseña contando un error específico y lo que cambió por él.', - 'content' => "Cometí un error de [N] cifras el [año/trimestre] pasado y quiero escribir sobre él mientras todavía duele.\n\nEl contexto: estábamos en [situación]. La decisión: [lo que hiciste]. La lógica en ese momento: [por qué parecía lo correcto].\n\nLo que pasó en realidad: [resultado, en términos concretos]. Perdimos [costo específico, dinero, tiempo, clientes, confianza].\n\nLo que debí haber hecho: [mejor camino], y la razón por la que no lo hice fue [razón honesta, ego, prisa, faltaba data].\n\nTres cosas que cambié en mi forma de trabajar por esto:\n1. [Cambio uno]\n2. [Cambio dos]\n3. [Cambio tres]\n\nSi pasaste por algo así, sabes de qué hablo. Cuéntame el tuyo en los comentarios.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'framework_breakdown', - 'category' => 'educational', - 'name' => 'Framework o modelo mental al detalle', - 'description' => 'Explica un framework o modelo mental específico con un ejemplo concreto.', - 'content' => "Vuelvo siempre a un modelo mental cuando pienso en [tema/problema]: [Nombre del Framework].\n\nLa idea es simple. [Resumen del framework en una frase.]\n\nCómo lo uso de verdad: cuando me trabo en [situación específica], me pregunto [pregunta específica que dispara el framework]. La semana pasada me empujó a [decisión que tomaste por él].\n\nDónde se rompe: [limitación honesta]. No es respuesta universal para [tipo de problema], y tratarlo como si lo fuera lleva a [mal resultado].\n\nSi quieres leer la fuente original, es [autor/libro/link]. La versión de arriba es la mía, ajustada con cientos de usos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'tool_comparison', - 'category' => 'educational', - 'name' => 'Comparación honesta de herramientas', - 'description' => 'Compara dos o tres herramientas o enfoques con tradeoffs reales.', - 'content' => "Usé [Herramienta A], [Herramienta B] y [Herramienta C] para [tarea] durante los últimos [plazo]. Aquí dónde gana cada una de verdad.\n\n[Herramienta A] es la elección correcta cuando [situación específica]. Es la más rápida en [tarea específica] y la peor en [tarea específica]. La usamos para [caso de uso].\n\n[Herramienta B] se siente menos pulida, pero hace [cosa] mejor que cualquier otra que probé. Vale la incomodidad si [criterio].\n\n[Herramienta C] es la opción aburrida. Eso es un cumplido. Es confiable, la documentación la escribieron humanos, y el equipo no publica breaking changes los viernes.\n\nMi stack actual en {{brand_name}}: [respuesta real]. El tuyo puede ser distinto si [razón].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Behind the scenes (3) ===== - [ - 'slug' => 'team_culture_glimpse', - 'category' => 'behind_the_scenes', - 'name' => 'Momento de cultura del equipo', - 'description' => 'Comparte un momento pequeño y específico que muestra cómo trabaja el equipo de verdad.', - 'content' => "Cosa pequeña que pasó en {{brand_name}} esta semana.\n\n[Persona o rol del equipo] notó [problema o detalle específico]. Podía haberse publicado igual. En vez de eso, [acción específica], lo que retrasó [cosa] en [plazo].\n\nNadie lo pidió. No había ticket en Jira. El cliente nunca se habría enterado.\n\nEsta es la parte de construir una empresa que no entra en una página de carreras. El trabajo que nadie ve, hecho bien igual, porque así son las personas de aquí. Pienso bastante en eso.\n\nSi quieres trabajar con gente así: [link]. Si ya lo haces, mándale un DM.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'how_we_built_it', - 'category' => 'behind_the_scenes', - 'name' => 'Cómo lo construimos', - 'description' => 'Cuenta la historia real de una entrega reciente, incluyendo los callejones sin salida.', - 'content' => "Cómo construimos [Feature/Producto] en {{brand_name}}, incluyendo las partes que solemos dejar fuera.\n\nArrancamos con [plan original]. Tardamos [plazo] en darnos cuenta de que el plan estaba equivocado. El problema real era [problema real], y solo se hizo visible después de [evento gatillo].\n\nLa versión 2 fue [lo que probamos después]. Funcionó en la demo y se cayó en producción a [escala o condición]. Reescribimos el [componente específico] dos veces.\n\nLo que finalmente salió: [solución actual]. Es [reconocimiento honesto del tradeoff, más lenta, más simple, menos elegante] que lo que queríamos construir, y es la versión que sí resuelve el problema del cliente.\n\nWriteup completo con los diagramas de arquitectura: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'day_in_the_life', - 'category' => 'behind_the_scenes', - 'name' => 'Un día en el equipo', - 'description' => 'Muestra cómo es un día real para alguien del equipo.', - 'content' => "Saqué la agenda del [día de la semana] y conté: [N] reuniones, [N] horas de trabajo concentrado, [N] interrupciones a las que debí decir que no.\n\nEl trabajo que sí importó:\n• [Tarea uno, y por qué importó]\n• [Tarea dos, incluyendo lo que te sorprendió]\n• [Tarea tres]\n\nEl trabajo que parecía urgente y no lo era: [ejemplo honesto]. Sigo cayendo en eso y ya estoy cansado.\n\nAntes pensaba que la meta era un día perfecto. Ahora creo que la meta son unas pocas horas reales y la disciplina para protegerlas. Curioso cómo lo manejan ustedes con [desafío específico del post].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Testimonial (3) ===== - [ - 'slug' => 'before_after_story', - 'category' => 'testimonial', - 'name' => 'Antes y después de un cliente', - 'description' => 'Cuenta la historia de un cliente con números concretos del antes y el después.', - 'content' => "Historia rápida de un cliente de {{brand_name}} que vale la pena compartir.\n\n[Cliente/Empresa] llegó a nosotros hace [plazo]. El estado de las cosas entonces: [métrica dolorosa específica, horas por semana, tasa de error, churn, costo]. Habían probado [enfoque anterior] y el número no se movió.\n\n[Plazo] después, esa misma métrica está en [nuevo número]. La pieza que más pesó, según [Nombre, cargo]: [cambio específico en cómo trabajan].\n\nLo que me gusta de esta historia: no fue una feature mágica. Fue [fundamento aburrido, cambio de proceso, default que invirtieron, reunión que eliminaron]. La mayoría de las victorias se ven así y no lo hablamos lo suficiente.\n\nCaso completo con los detalles desordenados: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unsolicited_review', - 'category' => 'testimonial', - 'name' => 'Reseña espontánea de cliente', - 'description' => 'Comparte un feedback orgánico de un cliente con una reacción reflexiva.', - 'content' => "Esto llegó ayer a nuestra bandeja, de [Nombre del Cliente] en [Empresa]:\n\n\"[Cita honesta y específica, incluyendo cualquier crítica pequeña o tradeoff que mencione. Las reseñas reales no son solo elogio.]\"\n\nAlgunas reacciones honestas de mi lado. La parte sobre [elogio específico] es en lo que más hemos trabajado, así que esa pegó. La parte sobre [queja o deseo específico] es justa, y ya está en el roadmap para [plazo].\n\nNo pagamos por reseñas y no las pedimos. Cuando aparece una así, la leo dos veces. Gracias, [Nombre].\n\nSi tienes una historia con {{brand_name}}, buena, mala o mixta, quiero escucharla.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'team_member_spotlight', - 'category' => 'testimonial', - 'name' => 'Reflector sobre alguien del equipo', - 'description' => 'Destaca a una persona del equipo por una contribución concreta.', - 'content' => "Quiero hablar un momento de [Nombre], [cargo] en {{brand_name}}.\n\n[Nombre] entró hace [plazo]. Lo que tiene a su cargo hoy: [área o sistema específico]. Lo que hizo y poca gente habría hecho: [historia específica, decisión dura, arreglo poco glamoroso, tradeoff que defendió].\n\nEl resultado: [resultado concreto, con un número si lo tienes]. Por qué funcionó: el instinto de [Nombre] sobre [cualidad específica], del que sigo aprendiendo.\n\nEsto no es falsa modestia. Es un gracias, en plataforma pública, porque esa parte del trabajo suele pasar en silencio. [Nombre], el equipo es mejor contigo dentro.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Industry tip (3) ===== - [ - 'slug' => 'data_point_take', - 'category' => 'industry_tip', - 'name' => 'Dato y lo que significa', - 'description' => 'Comparte un dato reciente de una fuente real con tu interpretación.', - 'content' => "[Fuente, reporte, estudio, dataset público] publicó este número la semana pasada: [estadística específica].\n\nLa mayoría de las lecturas que vi lo enmarcan como [interpretación común]. Creo que se pierde el punto.\n\nCuando cortas los mismos datos por [dimensión, segmento, geografía, tamaño de empresa, periodo], el cuadro cambia. [Subgrupo específico] está [comportamiento específico], mientras que [otro subgrupo] está [comportamiento distinto]. El número titular promedia esas dos historias en algo que no describe a ninguna.\n\nLa implicación práctica para [audiencia]: [recomendación específica]. No [consejo común], porque se apoya en un promedio que no existe.\n\nLink a los datos en bruto: [link]. Dime dónde estoy equivocado.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'contrarian_take', - 'category' => 'industry_tip', - 'name' => 'Postura contraria con argumentos', - 'description' => 'Cuestiona una creencia común de tu industria con un argumento específico.', - 'content' => "Opinión impopular en [industria]: [tesis contraria].\n\nEl consejo estándar dice [sabiduría convencional]. Lo seguí durante [plazo] y el resultado fue [resultado específico, malo o mediocre].\n\nPor qué no funciona tan bien como dicen: [razón específica, incentivo, costo oculto, sesgo de supervivencia, mercado cambió]. La versión que sí funciona para [audiencia] se parece más a [enfoque alternativo].\n\nPara que conste, ese fue el camino que tomamos en {{brand_name}} después de [evento gatillo]. Números desde entonces: [resultado específico]. No digo que todos deban hacerlo. Sí digo que \"porque todos lo dicen\" es una mala razón para seguir haciendo lo mismo.\n\n¿Dónde estás tú en esto?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'trend_watch', - 'category' => 'industry_tip', - 'name' => 'Tendencia para vigilar', - 'description' => 'Pon foco en una tendencia menor antes de que se vuelva mainstream.', - 'content' => "Tendencia silenciosa en [industria] que creo que la mayoría discutirá en [plazo]: [tendencia específica].\n\nLa señal que estoy mirando: [evidencia concreta, patrones de contratación, nuevos jugadores, cambios de precio, qué piden los clientes]. Tres [empresas/equipos] distintos en nuestra red hicieron [cosa específica] en el último [periodo], cada uno por su cuenta.\n\nPor qué creo que sí importa y no es solo hype: [razón anclada en incentivos, no en vibras]. Lo que me haría cambiar de idea: [contraseñal específica que vigilaría].\n\nSi eres [audiencia], el movimiento práctico hoy es [acción específica]. No un giro que apuesta la empresa. Solo lo justo para no quedar fuera de juego en [plazo].\n\n¿Qué estás viendo tú?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Event (3) ===== - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Resumen de evento con aprendizajes', - 'description' => 'Resume un evento al que asististe con aprendizajes específicos.', - 'content' => "Vuelvo de [Nombre del Evento]. Tres cosas se me quedaron, y una con la que sigo discutiendo.\n\nLo que se sostuvo: [sesión o ponente específico], que defendió que [argumento específico]. La parte que no había considerado: [insight específico].\n\nLo que me llevo a {{brand_name}}: [cambio concreto que harás por el evento]. Lo bastante chico para empezar la próxima semana, lo bastante grande para importar.\n\nCon lo que no estuve de acuerdo: [postura específica de una sesión]. El argumento estaba bien armado, pero ignora [realidad específica]. Voy a escribir eso aparte, en serio.\n\nSi estuviste ahí, ¿qué se me escapó? Siempre hay más en los pasillos que en el escenario principal.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'speaking_announcement', - 'category' => 'event', - 'name' => 'Anuncio de ponencia', - 'description' => 'Anuncia que tú o alguien del equipo va a dar una charla en un evento.', - 'content' => "Voy a dar una charla en [Nombre del Evento] el [fecha] en [lugar / online].\n\nLa charla: \"[Título de la Charla]\". El pitch corto: [una o dos frases sobre lo que el público se llevará de verdad].\n\nLo que no voy a hacer: pasar buenas prácticas genéricas de [tema]. Ya hay suficientes. Lo que sí voy a hacer: mostrar [dato, framework o caso] específico de {{brand_name}} que cambió cómo pensamos [problema específico], incluyendo las partes que no funcionaron.\n\nSi vas a estar, búscame, prefiero una conversación de verdad antes que juntar tarjetas. Registro: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'webinar_invitation', - 'category' => 'event', - 'name' => 'Invitación a webinar', - 'description' => 'Invita a tu red a un webinar con una agenda clara y honesta.', - 'content' => "Voy a hacer un webinar de [duración, ej. 45 minutos] con [Nombre del co-host, cargo] el [fecha].\n\nTema: [tema específico, como una pregunta que tu audiencia se está haciendo]. No vamos a hacer una demo de producto. Vamos a recorrer [framework, dataset o flujo específico] que usamos en {{brand_name}}.\n\nAgenda preliminar:\n• [Hora], [Tema, con un detalle que muestra el contenido real]\n• [Hora], [Tema]\n• [Hora], Q&A en vivo. Respondemos todo, incluyendo las preguntas incómodas.\n\nLa repetición llega a quien se registre, aunque no puedas conectarte en vivo. Inscripción: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Engagement (3) ===== - [ - 'slug' => 'poll_post', - 'category' => 'engagement', - 'name' => 'Encuesta con opinión', - 'description' => 'Haz una pregunta directa de A o B que saque opiniones reales.', - 'content' => "Curioso por ver cómo se está partiendo [audiencia] en esto.\n\nCuando decides [decisión específica], ¿te inclinas por:\n\nA) [Opción A, descrita concretamente]\nB) [Opción B, descrita concretamente]\n\nNada de \"depende\" en los comentarios, por favor. Elige una y dime por qué en una frase.\n\nMi respuesta: [tu elección honesta]. La razón: [una o dos frases desde experiencia real]. Sostuve la postura contraria durante [plazo] hasta que [cosa que me hizo cambiar de idea].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'hot_take_invitation', - 'category' => 'engagement', - 'name' => 'Invitación a opinión polémica', - 'description' => 'Invita a la red a compartir una opinión controversial de su área.', - 'content' => "¿Cuál es una opinión sobre [industria/rol] que te hace ganar miradas raras en una conferencia?\n\nLa mía: [opinión tuya levemente polémica en tu campo, dicha sin rodeos]. Me he equivocado en muchas cosas, pero en esta sostengo la postura.\n\nNo busco las opiniones seguras que ya tienen 500 carruseles de LinkedIn detrás. Las que dirías en la cena después del panel, cuando ya dejaste de actuar.\n\nDispara. Voy a estar en los comentarios discutiendo de buena fe.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'crowdsourced_advice', - 'category' => 'engagement', - 'name' => 'Pedido de consejo colectivo', - 'description' => 'Pide a tu red su opinión sobre un problema real y específico.', - 'content' => "Pido el cerebro colectivo en un problema real que estamos resolviendo en {{brand_name}}.\n\nContexto: [situación específica en 2-3 frases, suficiente para que alguien calificado pueda ayudar]. La restricción que hace que la respuesta obvia no sirva: [restricción específica].\n\nLo que ya probé: [opción uno, y por qué no encajó]; [opción dos, y lo que me enseñó]. Así que esas no las busco.\n\nSi resolviste algo parecido, ¿qué funcionó? Comentarios son lo mejor, pero el DM está abierto si es de esas cosas que prefieres no decir en público. Voy a escribir lo que terminemos haciendo y etiquetar a quien aporte.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/es/mastodon_post.php b/templates/es/mastodon_post.php deleted file mode 100644 index be7e81cb..00000000 --- a/templates/es/mastodon_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'mastodon_release_note', - 'category' => 'product_launch', - 'name' => 'Notas de la release', - 'description' => 'Comparte una actualización abierta y transparente sobre una release.', - 'content' => "Notas de la release de {{brand_name}}:\n\n→ [Qué se entregó]\n→ [Por qué importa]\n→ [Qué viene después]\n\nFeedback bienvenido. Responde o abre un issue.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_lessons_learned', - 'category' => 'educational', - 'name' => 'Lecciones aprendidas', - 'description' => 'Comparte algo que aprendiste, en el estilo directo de Mastodon.', - 'content' => "Algo que aprendimos en {{brand_name}} esta semana:\n\n[Lección, sé específico.]\n\nLa conclusión: [principio].\n\nQuizás le sirva a alguien más que esté construyendo [algo parecido].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_open_question', - 'category' => 'engagement', - 'name' => 'Pregunta abierta', - 'description' => 'Haz una pregunta al fediverso y recoge perspectivas.', - 'content' => "Pregunta para el fediverso:\n\n[Pregunta abierta relevante para tu audiencia.]\n\nBoosts bienvenidos si tus seguidores podrían tener algo que decir.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'mastodon_version_bump', - 'category' => 'product_launch', - 'name' => 'Nueva versión', - 'description' => 'Anuncia una nueva versión con el diff que de verdad importa.', - 'content' => "{{brand_name}} [versión] ya salió.\n\nQué cambió:\n- [Fix o feature]\n- [Fix o feature]\n- [Breaking change, si lo hay]\n\nNotas de upgrade: [link o instrucción corta].\n\nSi algo se rompe, cuéntanos. Leemos cada respuesta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_new_feature_in_public', - 'category' => 'product_launch', - 'name' => 'Feature nuevo en público', - 'description' => 'Lanza un feature y explica por qué lo construiste así.', - 'content' => "Hoy agregamos [feature] a {{brand_name}}.\n\nPor qué: [el motivo real, en una frase].\n\nCómo funciona: [descripción corta y concreta].\n\nEl código está aquí: [link]. Pull requests bienvenidos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_beta_invite', - 'category' => 'product_launch', - 'name' => 'Invitación a beta', - 'description' => 'Invita al fediverso a un beta con expectativas honestas.', - 'content' => "Buscamos beta testers para [feature] en {{brand_name}}.\n\nEstá rústico. Algunas cosas se van a romper. Queremos saber cuáles.\n\nRegistro: [link]\n\nSin NDA, sin lista de marketing, sin upsell. Solo necesitamos usuarios reales.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_self_host_release', - 'category' => 'product_launch', - 'name' => 'Release para self-host', - 'description' => 'Avisa a quienes hacen self-host sobre una release con los detalles operativos.', - 'content' => "Aviso para quienes hacen self-host de {{brand_name}}: [versión] está taggeada.\n\nMigraciones: [sí/no, tiempo estimado]\nCambios de config: [lista o ninguno]\nBreaking: [lista o ninguno]\n\nDocs: [link]. Issues: [link]. Boosts bienvenidos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'mastodon_paid_plan_honest', - 'category' => 'promotion', - 'name' => 'Plan pago, sin vueltas', - 'description' => 'Menciona un plan pago sin sonar a anuncio.', - 'content' => "{{brand_name}} ahora tiene plan pago. Esto es lo que te da: [feature], [feature], [feature].\n\nEl tier gratis sigue haciendo [lo que siempre hizo]. No estamos quitando nada.\n\nDetalles: [link]. Las preguntas son bienvenidas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_sponsor_us', - 'category' => 'promotion', - 'name' => 'Patrocínanos', - 'description' => 'Pide patrocinio o donaciones de forma transparente.', - 'content' => "{{brand_name}} se sostiene con [número] horas de trabajo voluntario y [costo de hosting] al mes.\n\nSi lo usas y quieres aportar, el patrocinio está aquí: [link].\n\nPublicamos un desglose de gastos cada trimestre. Sin tiers, sin perks, solo el trabajo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_discount_for_indies', - 'category' => 'promotion', - 'name' => 'Descuento para indies', - 'description' => 'Ofrece un descuento sin dark patterns.', - 'content' => "{{brand_name}} tiene [descuento] de descuento para devs solo y cooperativas pequeñas hasta [fecha].\n\nSin cupón, sin registro de email. El precio es más bajo si eliges el tier [nombre del plan]. Úsalo si te ayuda.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // educational - [ - 'slug' => 'mastodon_quick_explainer', - 'category' => 'educational', - 'name' => 'Explicación rápida', - 'description' => 'Explica un concepto en lenguaje simple, sin relleno.', - 'content' => "Explicación rápida: [concepto].\n\n[Definición en una frase.]\n\n[Una frase sobre por qué importa en la práctica.]\n\nSi quieres la versión larga, la escribimos aquí: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_misconception', - 'category' => 'educational', - 'name' => 'Malentendido común', - 'description' => 'Corrige un malentendido común con detalles específicos.', - 'content' => "Mucha gente piensa que [creencia común sobre tu tema].\n\nNo es del todo así. [La situación real, con un ejemplo específico.]\n\nImporta porque [consecuencia práctica].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_reading_list', - 'category' => 'educational', - 'name' => 'Lista de lectura', - 'description' => 'Comparte una lista de lectura corta y con opinión.', - 'content' => "Cosas que estamos leyendo en {{brand_name}}:\n\n- [Título], de [autor]: [motivo en una línea].\n- [Título], de [autor]: [motivo en una línea].\n- [Título], de [autor]: [motivo en una línea].\n\nResponde con lo que tú estás leyendo. Siempre buscamos nuevas referencias.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_how_we_decided', - 'category' => 'educational', - 'name' => 'Cómo decidimos', - 'description' => 'Repasa una decisión técnica o de producto.', - 'content' => "Cómo elegimos [herramienta o enfoque] para {{brand_name}}:\n\nProbamos [opción A]. Tuvo [problema]. Probamos [opción B]. Tenía [tradeoff].\n\nElegimos [opción elegida] porque [razón]. No es perfecto. Lo que aún nos molesta es [punto débil].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'mastodon_dev_log', - 'category' => 'behind_the_scenes', - 'name' => 'Dev log', - 'description' => 'Comparte lo que de verdad hiciste esta semana.', - 'content' => "Dev log, semana del [fecha]:\n\nLunes: [cosa].\nMartes: [cosa].\nMiércoles: [cosa que salió mal].\nJueves: [arreglo].\nViernes: [salió o se pospuso].\n\nEsta semana es sobre todo [próximo foco].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Postmortem corto', - 'description' => 'Comparte un postmortem en lenguaje simple.', - 'content' => "{{brand_name}} tuvo una caída el [fecha]. La versión corta:\n\nQué se rompió: [sistema].\nPor qué: [causa raíz].\nDuración: [tiempo].\nCómo lo arreglamos: [acción].\n\nWriteup completo con timeline: [link]. Disculpa la molestia.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_tooling_setup', - 'category' => 'behind_the_scenes', - 'name' => 'Nuestro stack', - 'description' => 'Muestra las herramientas que usas de verdad.', - 'content' => "Lo que usa {{brand_name}}, por si te da curiosidad:\n\n- Editor: [editor]\n- Lenguaje: [lenguaje]\n- Base de datos: [base de datos]\n- Hosting: [host]\n- CI: [ci]\n\nNada exótico. Stack aburrido es stack productivo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_team_intro', - 'category' => 'behind_the_scenes', - 'name' => 'Quiénes somos', - 'description' => 'Presenta a las personas detrás del proyecto.', - 'content' => "Presentación rápida: {{brand_name}} somos [número] personas.\n\n[Nombre] trabaja en [área].\n[Nombre] trabaja en [área].\n[Nombre] trabaja en [área].\n\nEstamos repartidos por [regiones]. Contratamos abiertamente cuando contratamos, lo que es raro. Hola.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'mastodon_user_quote', - 'category' => 'testimonial', - 'name' => 'Cita de usuario', - 'description' => 'Comparte una cita real, con permiso y contexto.', - 'content' => "[Username] nos mandó esto sobre {{brand_name}}, publicado con permiso:\n\n\"[Cita real.]\"\n\nNos hizo la semana. Gracias [@username] por tomarte el tiempo de escribir.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_use_case_share', - 'category' => 'testimonial', - 'name' => 'Cómo lo usa alguien', - 'description' => 'Destaca una forma específica en que alguien usa tu herramienta.', - 'content' => "[Persona u organización] usa {{brand_name}} para [caso de uso específico].\n\nLo que nos contaron: \"[cita corta y específica].\"\n\nSi tienes un setup que vale la pena compartir, responde o manda un DM. Nos gusta coleccionar estos casos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_thanks_contributor', - 'category' => 'testimonial', - 'name' => 'Gracias a un contribuidor', - 'description' => 'Da crédito a un contribuidor por su nombre.', - 'content' => "Shoutout a [@username] por [contribución específica] en {{brand_name}}.\n\nEste tipo de trabajo no es glamoroso y es la razón por la que el proyecto sigue avanzando. Gracias.\n\nEl PR está aquí: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'mastodon_practical_tip', - 'category' => 'industry_tip', - 'name' => 'Tip práctico', - 'description' => 'Comparte un tip real y específico.', - 'content' => "Tip si trabajas con [tema]:\n\n[Un tip concreto en lenguaje simple.]\n\nLo descubrimos a la mala después de [contexto breve]. Quizás le ahorre unas horas a alguien más.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_unpopular_opinion', - 'category' => 'industry_tip', - 'name' => 'Opinión impopular', - 'description' => 'Comparte una postura contraria en la que de verdad crees.', - 'content' => "Postura que nos mete en problemas: [creencia contraria sobre tu campo].\n\nMotivo: [el caso específico donde aplica].\n\nEstamos abiertos a estar equivocados. Si no estás de acuerdo, responde con el caso y lo leemos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_anti_pattern', - 'category' => 'industry_tip', - 'name' => 'Antipatrón', - 'description' => 'Señala un antipatrón común con cuidado.', - 'content' => "Antipatrón que vemos mucho en [dominio]: [el patrón].\n\nPor qué te muerde: [modo de falla específico].\n\nQué hacer en su lugar: [alternativa]. No siempre, pero la mayoría de las veces.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_stop_doing_this', - 'category' => 'industry_tip', - 'name' => 'Deja de hacer esto', - 'description' => 'Empuja contra un hábito que le cuesta tiempo a la gente.', - 'content' => "Empujón amigable: deja de [hábito común] cuando trabajes con [dominio].\n\nTe cuesta [costo específico] y la alternativa es [alternativa], que toma [esfuerzo].\n\nNosotros hicimos lo mismo durante años. El cambio es chico y el retorno es real.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // event - [ - 'slug' => 'mastodon_event_announce', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncia un evento sin hype.', - 'content' => "{{brand_name}} estará en [evento] el [fecha] en [ciudad].\n\n[Speaker o miembro del equipo] va a hablar de [tema] a las [hora].\n\nSi andas por ahí, pasa a saludar. Boosts bienvenidos para gente del fediverso que pueda estar cerca.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_meetup_call', - 'category' => 'event', - 'name' => 'Llamada para meetup', - 'description' => 'Invita a la gente a un encuentro de la comunidad.', - 'content' => "Llamada de la comunidad de {{brand_name}} este [día] a las [hora UTC].\n\nAgenda: [tema], [tema], Q&A abierto.\n\nLink: [link del video]. Las notas suben después en [link]. Sin login obligatorio.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_event_recap', - 'category' => 'event', - 'name' => 'Recap del evento', - 'description' => 'Resume un evento con aprendizajes concretos.', - 'content' => "De vuelta de [evento]. Tres cosas que se nos quedaron:\n\n1. [Aprendizaje específico].\n2. [Aprendizaje específico].\n3. [Aprendizaje específico].\n\nLas slides de nuestra charla están arriba: [link]. Gracias a quienes pasaron por la mesa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'mastodon_what_are_you_using', - 'category' => 'engagement', - 'name' => 'Qué estás usando', - 'description' => 'Pregunta qué herramientas o setups usa la gente.', - 'content' => "Curiosidad: qué está usando el fediverso para [tarea específica] en [año].\n\nNosotros estamos en [setup actual] y es [evaluación honesta]. Quiero saber por qué lo cambiarías y por qué.\n\nResponde con la herramienta y una frase sobre el tradeoff.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_show_your_work', - 'category' => 'engagement', - 'name' => 'Muestra tu trabajo', - 'description' => 'Invita a la gente a mostrar lo que está construyendo.', - 'content' => "Hilo de muestra-y-cuenta: ¿qué estás construyendo esta semana?\n\nEmpezamos. {{brand_name}} está trabajando en [cosa]. Está en [etapa] y estamos atascados en [problema].\n\nResponde con el tuyo. Boosts bienvenidos para que otros lo encuentren.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/es/pinterest_pin.php b/templates/es/pinterest_pin.php deleted file mode 100644 index a3948152..00000000 --- a/templates/es/pinterest_pin.php +++ /dev/null @@ -1,306 +0,0 @@ - 'pinterest_how_to', - 'category' => 'educational', - 'name' => 'Pin de tutorial', - 'description' => 'Pin paso a paso que genera guardados y clics.', - 'content' => "Cómo [lograr resultado] en [tiempo/esfuerzo].\n\nUna guía simple de {{brand_name}}.\n\nPaso 1: [Acción]\nPaso 2: [Acción]\nPaso 3: [Acción]\n\nTutorial completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['tutorial', 'how-to', 'guide'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_inspiration', - 'category' => 'behind_the_scenes', - 'name' => 'Tablero de inspiración', - 'description' => 'Pin inspirador en torno a un tema o estética.', - 'content' => "Inspiración de [tema], curada por {{brand_name}}.\n\nGuarda este pin para después.\n\nMás en → [link]", - 'image_count' => 1, - 'image_keywords' => ['inspiration', 'aesthetic', 'mood'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_product_showcase', - 'category' => 'product_launch', - 'name' => 'Vitrina de producto', - 'description' => 'Destaca un producto con una descripción que invita al clic.', - 'content' => "[Nombre del producto] de {{brand_name}}.\n\n[Descripción corta enfocada en beneficio, qué es, por qué importa.]\n\nCompra el look → [link]", - 'image_count' => 1, - 'image_keywords' => ['product', 'showcase', 'lifestyle'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_new_arrival', - 'category' => 'product_launch', - 'name' => 'Pin de novedad', - 'description' => 'Anuncia un producto nuevo con palabras clave de búsqueda.', - 'content' => "Novedad de {{brand_name}}: [nombre del producto].\n\n[Una frase sobre qué es y para quién es.]\n\nCaracterísticas principales:\n- [Característica 1]\n- [Característica 2]\n- [Característica 3]\n\nDisponible en [colores/tallas/opciones].\n\nCompra la colección [categoría] → [link]", - 'image_count' => 1, - 'image_keywords' => ['new product', 'launch', 'collection'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_collection_drop', - 'category' => 'product_launch', - 'name' => 'Pin de lanzamiento de colección', - 'description' => 'Presenta una colección curada de productos.', - 'content' => "Llegó la colección [nombre de la colección].\n\n{{brand_name}} reunió [número] piezas en torno a [tema o temporada].\n\nQué hay dentro:\n- [Tipo de artículo 1]\n- [Tipo de artículo 2]\n- [Tipo de artículo 3]\n\nPensada para [uso o público].\n\nMira la colección completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['collection', 'lookbook', 'curated'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pre_order', - 'category' => 'product_launch', - 'name' => 'Pin de preventa', - 'description' => 'Genera guardados y preventas para un producto que viene.', - 'content' => "Preventa abierta: [nombre del producto].\n\nLos envíos empiezan el [fecha]. Quienes compren en preventa de {{brand_name}} reciben [beneficio: acceso anticipado, regalo extra, precio fijo].\n\nPor qué comprar en preventa:\n- [Razón 1]\n- [Razón 2]\n\nReserva el tuyo → [link]", - 'image_count' => 1, - 'image_keywords' => ['pre-order', 'launch', 'early access'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_seasonal_sale', - 'category' => 'promotion', - 'name' => 'Pin de oferta de temporada', - 'description' => 'Promociona una oferta de temporada con descuento claro.', - 'content' => "Oferta de [temporada] en {{brand_name}}: [descuento]% off en [categoría].\n\nVálido hasta [fecha final].\n\nQué está en oferta:\n- [Categoría 1]\n- [Categoría 2]\n- [Categoría 3]\n\nUsa el código [CÓDIGO] al pagar.\n\nAprovecha la oferta → [link]", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'seasonal shopping'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_bundle_deal', - 'category' => 'promotion', - 'name' => 'Pin de combo', - 'description' => 'Pin de combo con precios en lista.', - 'content' => "El combo [nombre del combo] de {{brand_name}}.\n\nLleva [artículo 1] + [artículo 2] + [artículo 3] juntos y ahorra [monto].\n\nQué incluye:\n- [Artículo 1] (normalmente [precio])\n- [Artículo 2] (normalmente [precio])\n- [Artículo 3] (normalmente [precio])\n\nPrecio del combo: [precio].\n\nLlévate el combo → [link]", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'value pack', 'savings'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_free_shipping', - 'category' => 'promotion', - 'name' => 'Pin de envío gratis', - 'description' => 'Pin con oferta centrada en envío gratis.', - 'content' => "Envío gratis en cada pedido de {{brand_name}}.\n\nSin mínimo, sin código. Hasta [fecha final].\n\nQué agregar al carrito:\n- [Más vendido 1]\n- [Más vendido 2]\n- [Más vendido 3]\n\nCompra ahora → [link]", - 'image_count' => 1, - 'image_keywords' => ['free shipping', 'offer', 'deal'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_clearance', - 'category' => 'promotion', - 'name' => 'Pin de liquidación', - 'description' => 'Mueve el inventario de liquidación con un pin que vale guardar.', - 'content' => "Liquidación en {{brand_name}}: hasta [descuento]% off.\n\nÚltimas rebajas en [categoría]. Cuando se acabe, se acabó.\n\nDestacados:\n- [Artículo 1], [precio]\n- [Artículo 2], [precio]\n- [Artículo 3], [precio]\n\nMira la liquidación → [link]", - 'image_count' => 1, - 'image_keywords' => ['clearance', 'final sale', 'markdown'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_recipe', - 'category' => 'educational', - 'name' => 'Pin de receta', - 'description' => 'Pin de receta que vale guardar, con ingredientes y pasos.', - 'content' => "[Nombre de la receta], lista en [tiempo].\n\nDirecto de la cocina de {{brand_name}}.\n\nIngredientes:\n- [Ingrediente 1]\n- [Ingrediente 2]\n- [Ingrediente 3]\n- [Ingrediente 4]\n\nPreparación:\n1. [Paso 1]\n2. [Paso 2]\n3. [Paso 3]\n\nRinde [número] porciones. Receta completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['recipe', 'food', 'cooking'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_checklist', - 'category' => 'educational', - 'name' => 'Pin de checklist', - 'description' => 'Pin práctico de checklist hecho para guardar.', - 'content' => "El checklist de [tema] de {{brand_name}}.\n\n[Una frase sobre para quién es.]\n\nEl checklist:\n- [Ítem 1]\n- [Ítem 2]\n- [Ítem 3]\n- [Ítem 4]\n- [Ítem 5]\n\nGuarda este pin para tenerlo cuando lo necesites.\n\nDescarga la versión imprimible → [link]", - 'image_count' => 1, - 'image_keywords' => ['checklist', 'planner', 'printable'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_beginners_guide', - 'category' => 'educational', - 'name' => 'Pin de guía para principiantes', - 'description' => 'Pin explicativo amigable para quien empieza.', - 'content' => "[Tema] para principiantes.\n\nSi eres nuevo en [tema], empieza aquí. {{brand_name}} reunió lo básico.\n\nLo que tienes que saber:\n1. [Concepto 1]\n2. [Concepto 2]\n3. [Concepto 3]\n\nError común de principiante: [error].\n\nLee la guía completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['beginner guide', 'basics', 'tutorial'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_diy_tutorial', - 'category' => 'educational', - 'name' => 'Pin de tutorial DIY', - 'description' => 'Pin de proyecto hazlo tú mismo con lista de materiales.', - 'content' => "DIY [nombre del proyecto] en [tiempo].\n\nUn proyecto de fin de semana de {{brand_name}}.\n\nQué necesitas:\n- [Material 1]\n- [Material 2]\n- [Material 3]\n- [Herramienta 1]\n\nLos pasos:\n1. [Paso 1]\n2. [Paso 2]\n3. [Paso 3]\n\nCosto estimado: [monto].\n\nTutorial completo con fotos → [link]", - 'image_count' => 1, - 'image_keywords' => ['DIY', 'craft project', 'handmade'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_studio_tour', - 'category' => 'behind_the_scenes', - 'name' => 'Pin de tour por el estudio', - 'description' => 'Lleva a los seguidores dentro del espacio de trabajo.', - 'content' => "Dentro del estudio de {{brand_name}}.\n\n[Una frase sobre lo que pasa aquí.]\n\nTres cosas que vas a notar:\n- [Detalle 1]\n- [Detalle 2]\n- [Detalle 3]\n\n[Una nota sobre el espacio, el equipo o la rutina.]\n\nMás fotos del estudio → [link]", - 'image_count' => 1, - 'image_keywords' => ['studio', 'workspace', 'creative space'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_process_pin', - 'category' => 'behind_the_scenes', - 'name' => 'Pin de proceso de producción', - 'description' => 'Muestra el oficio detrás del producto.', - 'content' => "Cómo {{brand_name}} hace [producto].\n\nDe [materia prima] a la pieza terminada, cada paso ocurre [dónde].\n\nEl proceso:\n1. [Etapa 1]\n2. [Etapa 2]\n3. [Etapa 3]\n4. [Etapa 4]\n\nTiempo total por pieza: [duración].\n\nMira el proceso completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['handmade', 'craft', 'process'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_founder_story', - 'category' => 'behind_the_scenes', - 'name' => 'Pin de historia del fundador', - 'description' => 'Pin personal sobre el origen de la marca.', - 'content' => "Cómo empezó {{brand_name}}.\n\n[Nombre del fundador] lanzó [marca] en [año] después de [momento de origen].\n\n[Dos frases cortas sobre el porqué y los primeros días.]\n\nQué hace diferente nuestra forma de trabajar:\n- [Valor 1]\n- [Valor 2]\n\nLee la historia completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['founder story', 'small business', 'brand story'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_customer_review', - 'category' => 'testimonial', - 'name' => 'Pin de reseña de cliente', - 'description' => 'Pin con cita directa de un cliente real.', - 'content' => "\"[Reseña del cliente sobre el producto].\"\n- [Nombre del cliente], [ciudad o contexto]\n\nLos clientes de {{brand_name}} dejan reseñas así cada semana.\n\nQué compró [nombre del cliente]: [nombre del producto].\nPor qué lo compró: [razón].\n\nLee más reseñas → [link]", - 'image_count' => 1, - 'image_keywords' => ['customer review', 'testimonial', 'social proof'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_before_after', - 'category' => 'testimonial', - 'name' => 'Pin de antes y después', - 'description' => 'Pin de transformación visual.', - 'content' => "Antes y después con [producto o servicio] de {{brand_name}}.\n\nAntes: [estado inicial].\nDespués: [resultado final].\nTiempo: [duración].\n\nQué usó [nombre del cliente]:\n- [Artículo 1]\n- [Artículo 2]\n\n[Una frase sobre la reacción del cliente.]\n\nMira más antes y después → [link]", - 'image_count' => 1, - 'image_keywords' => ['before and after', 'transformation', 'results'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_case_study', - 'category' => 'testimonial', - 'name' => 'Pin de caso de éxito', - 'description' => 'Mini caso de éxito con números concretos.', - 'content' => "Caso de éxito: cómo [nombre del cliente] usó {{brand_name}} para [resultado].\n\nLa situación: [una frase].\nQué probaron: [producto o servicio].\nEl resultado: [número o resultado específico] en [periodo].\n\nPor qué funcionó:\n- [Razón 1]\n- [Razón 2]\n\nLee el caso de éxito completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['case study', 'results', 'success story'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pro_tip', - 'category' => 'industry_tip', - 'name' => 'Pin de consejo profesional', - 'description' => 'Pin con un solo consejo y beneficio claro.', - 'content' => "Consejo profesional: [consejo en una frase].\n\nLa mayoría [error común]. La solución es [la técnica real].\n\nPor qué funciona: [una frase con la razón].\n\nCuándo usarlo: [contexto o escenario].\n\nMás consejos de [tema] de {{brand_name}} → [link]", - 'image_count' => 1, - 'image_keywords' => ['pro tip', 'expert advice', 'industry tips'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_common_mistakes', - 'category' => 'industry_tip', - 'name' => 'Pin de errores comunes', - 'description' => 'Lista de errores que el lector puede evitar.', - 'content' => "[Número] errores de [tema] que evitar.\n\n{{brand_name}} los ve cada semana. Guarda el pin para no repetirlos.\n\nLos errores:\n1. [Error 1], haz esto en su lugar: [solución]\n2. [Error 2], haz esto en su lugar: [solución]\n3. [Error 3], haz esto en su lugar: [solución]\n\nLee el análisis completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['common mistakes', 'tips', 'expert advice'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_industry_stat', - 'category' => 'industry_tip', - 'name' => 'Pin de estadística del sector', - 'description' => 'Pin basado en dato que ancla un insight útil.', - 'content' => "[Estadística con número]% de [público] [comportamiento].\nFuente: [fuente, año].\n\nQué significa para ti: [una frase sobre la implicación].\n\nTres formas en que los clientes de {{brand_name}} responden:\n- [Táctica 1]\n- [Táctica 2]\n- [Táctica 3]\n\nLee el reporte completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['industry data', 'statistics', 'research'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_workshop', - 'category' => 'event', - 'name' => 'Pin de taller', - 'description' => 'Pin para promocionar un taller presencial u online.', - 'content' => "[Nombre del taller] con {{brand_name}}.\n\n[Fecha] · [hora] · [lugar u online].\n\nQué vas a aprender:\n- [Aprendizaje 1]\n- [Aprendizaje 2]\n- [Aprendizaje 3]\n\nPara quién es: [público].\nCupos: [número] limitados.\nPrecio: [monto].\n\nReserva tu lugar → [link]", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'class', 'learning event'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pop_up', - 'category' => 'event', - 'name' => 'Pin de tienda pop-up', - 'description' => 'Atrae público a una tienda pop-up.', - 'content' => "Tienda pop-up de {{brand_name}} en [ciudad].\n\n[Periodo] · [dirección] · [horario].\n\nQué vas a encontrar:\n- [Categoría 1]\n- [Categoría 2]\n- [Exclusivo en tienda]\n\n[Una frase sobre lo que hace que el día valga la pena.]\n\nMira cómo llegar y los detalles → [link]", - 'image_count' => 1, - 'image_keywords' => ['pop-up shop', 'event', 'in-person shopping'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_webinar', - 'category' => 'event', - 'name' => 'Pin de webinar', - 'description' => 'Promociona un webinar gratuito o pago.', - 'content' => "Webinar gratuito: [tema].\n\nPresentado por {{brand_name}} el [fecha] a las [hora, zona horaria].\n\nQué vamos a cubrir:\n- [Punto 1]\n- [Punto 2]\n- [Punto 3]\n\nPara quién es: [público].\nGrabación: enviada a todos los inscritos.\n\nReserva tu lugar → [link]", - 'image_count' => 1, - 'image_keywords' => ['webinar', 'online event', 'training'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_holiday_event', - 'category' => 'event', - 'name' => 'Pin de evento festivo', - 'description' => 'Pin de evento o promoción con tema festivo.', - 'content' => "Evento de [festividad] de {{brand_name}}.\n\n[Fecha] · [lugar u online].\n\nEn la agenda:\n- [Actividad 1]\n- [Actividad 2]\n- [Actividad 3]\n\nQué esperar: [una frase].\nConfirma asistencia antes del [fecha].\n\nAgenda completa y RSVP → [link]", - 'image_count' => 1, - 'image_keywords' => ['holiday event', 'seasonal', 'celebration'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_question_pin', - 'category' => 'engagement', - 'name' => 'Pin de pregunta', - 'description' => 'Pin con pregunta que invita a comentar.', - 'content' => "[Pregunta abierta para el público].\n\n{{brand_name}} tiene curiosidad. Deja tu respuesta en los comentarios.\n\nAlgunas pistas para pensar:\n- [Pista 1]\n- [Pista 2]\n- [Pista 3]\n\nVamos a compartir las respuestas más interesantes la próxima semana.\n\nÚnete a la conversación → [link]", - 'image_count' => 1, - 'image_keywords' => ['question', 'community', 'discussion'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_this_or_that', - 'category' => 'engagement', - 'name' => 'Pin de esto o aquello', - 'description' => 'Pin de preferencia lado a lado.', - 'content' => "Esto o aquello: [opción A] u [opción B].\n\n{{brand_name}} quiere saber de qué lado estás. No hay respuesta incorrecta.\n\nA favor de [opción A]: [una frase].\nA favor de [opción B]: [una frase].\n\nVota en los comentarios. Vamos a contar los votos.\n\nMás encuestas → [link]", - 'image_count' => 1, - 'image_keywords' => ['poll', 'this or that', 'preference'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_giveaway', - 'category' => 'engagement', - 'name' => 'Pin de sorteo', - 'description' => 'Pin que anuncia un sorteo con reglas claras.', - 'content' => "Sorteo de {{brand_name}}: gana [premio].\n\nUn ganador elegido el [fecha].\n\nCómo participar:\n1. Guarda este pin.\n2. Sigue a {{brand_name}} en Pinterest.\n3. Comenta con [pista].\n\nAbierto a: [región].\nValor: [monto].\n\nReglas completas → [link]", - 'image_count' => 1, - 'image_keywords' => ['giveaway', 'contest', 'prize'], - 'slides' => null, - ], -]; diff --git a/templates/es/threads_post.php b/templates/es/threads_post.php deleted file mode 100644 index 0c548299..00000000 --- a/templates/es/threads_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'threads_hot_take', - 'category' => 'industry_tip', - 'name' => 'Opinión polémica', - 'description' => 'Un post corto y opinado pensado para generar respuestas.', - 'content' => "Opinión impopular: [afirmación contraintuitiva sobre tu industria].\n\nPor qué pienso esto →\n\n[Razonamiento breve en 1 o 2 oraciones.]\n\n¿Estoy equivocado?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_quick_tip', - 'category' => 'educational', - 'name' => 'Tip rápido', - 'description' => 'Un tip accionable, en tono corto y amigable.', - 'content' => "Tip rápido de {{brand_name}}:\n\n[Un tip único, específico y accionable.]\n\nSuena simple. Lo cambia todo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_question', - 'category' => 'engagement', - 'name' => 'Pregunta abierta', - 'description' => 'Hacele una pregunta a la comunidad para mover conversación.', - 'content' => "Pregunta sincera para la comunidad de {{brand_name}}:\n\n[Pregunta, abierta y suficientemente específica para responder.]\n\nNo hay respuestas equivocadas. Tengo curiosidad por leer las tuyas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // PRODUCT LAUNCH - [ - 'slug' => 'threads_product_launch_soft', - 'category' => 'product_launch', - 'name' => 'Lanzamiento tranqui', - 'description' => 'Anuncio casual y discreto de algo nuevo.', - 'content' => "ok bueno. lanzamos [nombre del producto] hoy.\n\nllevo trabajando en esto [duración] y medio que no puedo creer que esté en vivo.\n\n[una cosa específica que hace y de la que estás orgulloso].\n\nsi lo probás, contame qué se rompe.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_product_launch_story', - 'category' => 'product_launch', - 'name' => 'Por qué lo construimos', - 'description' => 'Historia personal detrás del producto o feature nuevo.', - 'content' => "empecé a construir [nombre del producto] porque [frustración personal específica].\n\npensé que iba a llevar un fin de semana. llevó [tiempo real].\n\nestá en vivo ahora en {{brand_name}}. honestamente sigo sorprendido de que funcione.\n\nme encantaría escuchar qué pensás después de probarlo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_product_launch_feature', - 'category' => 'product_launch', - 'name' => 'Feature nuevo', - 'description' => 'Anuncia un solo feature dentro de un producto existente.', - 'content' => "cosa chica pero estoy raramente entusiasmado con esto.\n\n{{brand_name}} ahora [hace esta cosa específica].\n\nel motivo: la gente seguía pidiendo [la necesidad de fondo]. así que lo hicimos.\n\nestá en vivo. probalo y contame si es realmente útil o solo una cosa más ahora.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // PROMOTION - [ - 'slug' => 'threads_promo_discount', - 'category' => 'promotion', - 'name' => 'Descuento casual', - 'description' => 'Forma relajada de mencionar una promo o descuento.', - 'content' => "tenemos [monto de descuento] off en [producto o plan] esta semana en {{brand_name}}.\n\nno voy a hacer toda la cosa del contador. solo me pareció mencionarlo una vez y dejar que la gente decida.\n\ncódigo: [código]. termina [fecha].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_promo_bundle', - 'category' => 'promotion', - 'name' => 'Combo', - 'description' => 'Promociona un combo en tono relajado.', - 'content' => "combiné [item uno] e [item dos] juntos porque la gente igual los compraba en el mismo pedido.\n\nel par sale [precio] en {{brand_name}}, que son como [ahorro] menos que comprarlos por separado.\n\neso es. ese es el post.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_promo_last_chance', - 'category' => 'promotion', - 'name' => 'Último aviso', - 'description' => 'Empujoncito amigable de que una oferta termina.', - 'content' => "aviso amigable: [nombre de la oferta] termina [fecha o hora].\n\nno trato de ser pesado. algunos me pidieron que les recordara, así que considerá esto el recordatorio.\n\nlink en bio si lo querés. cero rencor si no.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // EDUCATIONAL - [ - 'slug' => 'threads_edu_mistake', - 'category' => 'educational', - 'name' => 'Error que cometí', - 'description' => 'Enseñar compartiendo un error personal.', - 'content' => "cometí el mismo error [número] veces antes de darme cuenta:\n\n[el error en una oración].\n\nla solución es [la solución real en palabras simples]. nada elegante. solo tuve que dejar de hacer la cosa.\n\nposteo por si estás trabado en el mismo loop.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_misconception', - 'category' => 'educational', - 'name' => 'Mito común', - 'description' => 'Corrige una creencia común pero equivocada.', - 'content' => "la gente me sigue diciendo [creencia común en tu rubro].\n\nasí no funciona.\n\n[lo que pasa de verdad, en palabras simples].\n\npuede ser obvio para algunos. aparentemente no para la mayoría de los que me escribieron la semana pasada.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_resource', - 'category' => 'educational', - 'name' => 'Recurso recomendado', - 'description' => 'Recomienda un recurso útil con contexto personal.', - 'content' => "si estás tratando de aprender [tema], dejá de mirar videos de 4 horas en youtube y leé [recurso específico].\n\nlo postergué meses porque el título es aburrido. es la única cosa que realmente me hizo clic.\n\nesa es la recomendación.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_step_breakdown', - 'category' => 'educational', - 'name' => 'Cómo hacerlo rápido', - 'description' => 'Mini paso a paso en tono conversacional.', - 'content' => "el tema de [tarea] en 4 líneas para los que siguen preguntando:\n\n1. [paso uno]\n2. [paso dos]\n3. [paso tres]\n4. [paso cuatro]\n\nese es todo el proceso. no necesitás un curso para esto.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // BEHIND THE SCENES - [ - 'slug' => 'threads_bts_morning', - 'category' => 'behind_the_scenes', - 'name' => 'Rutina de mañana', - 'description' => 'Vistazo casual a cómo arranca un día de trabajo.', - 'content' => "hoy en {{brand_name}}:\n\n- café\n- miré [problema específico] por una hora\n- me di cuenta que el bug estaba en la línea [número]\n- lo arreglé en 4 minutos\n\nla proporción de pensar versus hacer en este trabajo está genuinamente maldita.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Decisión que tomamos', - 'description' => 'Comparte una decisión interna y el razonamiento.', - 'content' => "decidimos [decisión específica] esta semana.\n\nla otra opción era [alternativa]. medio equipo quería esa. medio que yo sigo queriendo.\n\npero [el motivo real por el que ganó esta decisión].\n\npreguntame en 3 meses si fue la decisión correcta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_messy_progress', - 'category' => 'behind_the_scenes', - 'name' => 'Avance desprolijo', - 'description' => 'Update honesto a mitad de proyecto.', - 'content' => "estado actual de [nombre del proyecto]:\n\n- [porcentaje] hecho\n- [cosa específica que está funcionando]\n- [cosa específica que no está funcionando]\n- [número] pestañas abiertas que tengo miedo de cerrar\n\nlo lanzo cuando deje de hacerme pasar vergüenza.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_team_moment', - 'category' => 'behind_the_scenes', - 'name' => 'Momento del equipo', - 'description' => 'Pequeño momento humano del equipo.', - 'content' => "[nombre de alguien del equipo] mandó un mensaje en slack que decía \"[cita corta graciosa o ingeniosa]\" y ahora no podemos parar de citarla.\n\nconstruir {{brand_name}} con esta gente es la mitad del motivo por el que sigo gustándome el trabajo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // TESTIMONIAL - [ - 'slug' => 'threads_testimonial_quote', - 'category' => 'testimonial', - 'name' => 'Frase de cliente', - 'description' => 'Comparte una frase real de un cliente con contexto liviano.', - 'content' => "recibí este mail de [primer nombre o iniciales] ayer:\n\n\"[cita directa del cliente, 1 o 2 oraciones]\"\n\nlo leí dos veces. esta es la parte del trabajo que no aparece en las métricas.\n\ngracias por usar {{brand_name}}. de verdad.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_testimonial_outcome', - 'category' => 'testimonial', - 'name' => 'Resultado de cliente', - 'description' => 'Habla de un resultado real de un cliente sin alardear.', - 'content' => "[primer nombre del cliente] me dijo ayer que [resultado específico] después de usar {{brand_name}} por [período de tiempo].\n\nno le pedí que lo compartiera. solo mandó la captura y dijo \"pensé que querrías ver esto.\"\n\nsí. quería.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_testimonial_unexpected', - 'category' => 'testimonial', - 'name' => 'Uso inesperado', - 'description' => 'Resalta una forma sorprendente de usar el producto.', - 'content' => "no me lo esperaba.\n\nalguien usando {{brand_name}} para [uso inesperado]. no era para lo que lo construimos. aparentemente funciona.\n\nparte favorita de lanzar cosas es enterarse qué hace la gente con ellas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // INDUSTRY TIP - [ - 'slug' => 'threads_industry_observation', - 'category' => 'industry_tip', - 'name' => 'Observación del rubro', - 'description' => 'Comparte un patrón que venís notando en tu campo.', - 'content' => "cosa que vengo notando en [industria]:\n\n[observación específica en una oración].\n\npodría ser un cambio real. podría ser sesgo de selección de con quién hablo. contame si lo estás viendo también.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_lesson', - 'category' => 'industry_tip', - 'name' => 'Lección de la experiencia', - 'description' => 'Una lección difícilmente aprendida, sin relleno.', - 'content' => "[número] años en [industria] y la lección que más me costó creer:\n\n[la lección en una oración].\n\ntodavía me pesco ignorándola. después algo se rompe. después me acuerdo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_pushback', - 'category' => 'industry_tip', - 'name' => 'Contra el saber común', - 'description' => 'Discrepa educadamente con un consejo común.', - 'content' => "el consejo estándar en [industria] es [consejo común].\n\nvengo haciendo lo opuesto desde hace [período de tiempo]. funciona mejor para mí, al menos.\n\n[motivo breve].\n\nno digo que todos deberían. solo que la regla no es una regla.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_prediction', - 'category' => 'industry_tip', - 'name' => 'Predicción tranqui', - 'description' => 'Hace una predicción sin pavonearse.', - 'content' => "predicción chica:\n\nen [horizonte de tiempo], [cambio específico en tu industria] va a ser normal.\n\npuedo estar totalmente equivocado. guardo esto para volver y reírme de mí mismo después.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // EVENT - [ - 'slug' => 'threads_event_announcement', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncia casualmente un evento próximo.', - 'content' => "{{brand_name}} va a hacer [nombre del evento] el [fecha].\n\n[una o dos oraciones sobre qué es realmente y a quién le interesaría].\n\n[lugar o link]. avisale a un amigo si parece su tipo de cosa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_event_recap', - 'category' => 'event', - 'name' => 'Resumen de evento', - 'description' => 'Resumen honesto después de un evento.', - 'content' => "volví de [nombre del evento].\n\nla mejor parte fue [momento o conversación específica].\n\nla parte más rara fue [observación honesta].\n\nsi estuviste y no llegamos a hablar, escribime. siempre hay más para decir cuando termina el panel.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_event_invite', - 'category' => 'event', - 'name' => 'Invitación personal', - 'description' => 'Invitación directa que se siente personal.', - 'content' => "voy a hacer un [tipo de evento] chico para {{brand_name}} el [fecha] y realmente quiero que estés.\n\nes [duración] y vamos a hablar de [tema específico].\n\nconfirmá en [link] si querés entrar. lo limito a [número] para que sea una conversación de verdad.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ENGAGEMENT - [ - 'slug' => 'threads_engagement_recommendation', - 'category' => 'engagement', - 'name' => 'Pedido de recomendación', - 'description' => 'Pedile recomendaciones a tu audiencia.', - 'content' => "buscando recomendaciones:\n\n[cosa específica para la que necesitás recomendaciones].\n\nya probé [opción a] y [opción b]. necesito algo que [restricción específica].\n\nla mejor respuesta se gana mi gratitud eterna. ese es el premio.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_engagement_this_or_that', - 'category' => 'engagement', - 'name' => 'Esto o aquello', - 'description' => 'Pregunta binaria rápida para mover respuestas.', - 'content' => "[opción a] u [opción b].\n\nsin término medio. sin \"depende\". elegí una y contame por qué.\n\nestamos teniendo la versión {{brand_name}} de este debate en el chat del equipo y estamos profunda, profundamente divididos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_engagement_confession', - 'category' => 'engagement', - 'name' => 'Pequeña confesión', - 'description' => 'Comparte algo chico y con el que la gente se identifica.', - 'content' => "pequeña confesión.\n\ntodavía [costumbre algo vergonzosa relacionada a tu trabajo o vida].\n\ndecime que no soy el único. o decime que soy el único. de cualquier forma me gustaría saber.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/es/x_post.php b/templates/es/x_post.php deleted file mode 100644 index 76e1ca84..00000000 --- a/templates/es/x_post.php +++ /dev/null @@ -1,342 +0,0 @@ - 'flash_sale', - 'category' => 'promotion', - 'name' => 'Oferta relámpago', - 'description' => 'Post corto en X para una oferta relámpago con urgencia.', - 'content' => "🔥 ¡Oferta relámpago en {{brand_name}}!\n\n[Descuento]% off en [producto/servicio], termina en 24 horas.\n\nSin código → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'success_story', - 'category' => 'testimonial', - 'name' => 'Caso de éxito', - 'description' => 'Formato breve de caso de éxito para X.', - 'content' => "\"[Cita corta del cliente.]\"\n- @[handle]\n\nPor esto hacemos lo que hacemos en {{brand_name}}. 🙌", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'this_or_that_poll', - 'category' => 'engagement', - 'name' => 'Esto o aquello', - 'description' => 'Genera engagement con una elección binaria simple.', - 'content' => "Pregunta rápida para la comunidad de {{brand_name}}:\n\n¿[Opción A] o [Opción B]?\n\nResponde con tu elección y por qué 👇", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'shipped_today', - 'category' => 'product_launch', - 'name' => 'Lanzado hoy', - 'description' => 'Anuncio casual de release con un cambio concreto.', - 'content' => "Lanzado hoy: [feature].\n\nHace [cosa específica] para que dejes de [solución incómoda].\n\nYa está activo en {{brand_name}}.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'new_feature_one_liner', - 'category' => 'product_launch', - 'name' => 'Feature en una línea', - 'description' => 'Pitch de una frase para una nueva feature.', - 'content' => "{{brand_name}} ahora [hace cosa específica].\n\nSi has estado [haciendo solución dolorosa], pruébalo: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_invite', - 'category' => 'product_launch', - 'name' => 'Invitación al beta', - 'description' => 'Llamada abierta para testers del beta.', - 'content' => "Abrimos beta de [feature] esta semana.\n\nBuscamos [número] personas que [caso de uso].\n\nResponde si eres tú.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'finally_built_it', - 'category' => 'product_launch', - 'name' => 'Por fin lo hicimos', - 'description' => 'Tono honesto de "tardamos pero salió".', - 'content' => "Por fin construimos [feature]. La gente lo pedía desde [período].\n\nYa está activo en {{brand_name}} hoy. Perdón por la demora.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'weekend_deal', - 'category' => 'promotion', - 'name' => 'Oferta de fin de semana', - 'description' => 'Post de descuento solo en fin de semana.', - 'content' => "Solo el fin de semana: [descuento] off en [producto] en {{brand_name}}.\n\nCódigo [CODE]. Termina domingo a medianoche. Eso es todo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_shipping', - 'category' => 'promotion', - 'name' => 'Envío gratis', - 'description' => 'Anuncio de ventana de envío gratis.', - 'content' => "Envío gratis en pedidos de {{brand_name}} sobre $[monto] esta semana.\n\nSin código, sin trampas. Vuelve a lo normal el lunes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'last_call', - 'category' => 'promotion', - 'name' => 'Última llamada', - 'description' => 'Últimas horas de una oferta.', - 'content' => "Última llamada. [Nombre de la oferta] termina hoy a las [hora].\n\nSi tienes {{brand_name}} en el carrito, es el precio más bajo del año: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bundle_offer', - 'category' => 'promotion', - 'name' => 'Oferta combo', - 'description' => 'Presenta un combo como oferta económica.', - 'content' => "Nuevo combo en {{brand_name}}: [Producto A] + [Producto B] por [precio].\n\nSon [monto] menos que comprarlos por separado. Solo [cantidad] unidades.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // educational - [ - 'slug' => 'one_thing_we_learned', - 'category' => 'educational', - 'name' => 'Algo que aprendimos', - 'description' => 'Comparte una lección concreta.', - 'content' => "Algo que aprendimos en {{brand_name}} este mes:\n\n[Hallazgo]. Pensábamos [suposición vieja], pero [dato] probó lo contrario.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'common_mistake', - 'category' => 'educational', - 'name' => 'Error común', - 'description' => 'Señala un error que comete la gente.', - 'content' => "La mayoría se equivoca en [tema] porque [error común].\n\nLo que sí funciona: [contra-enfoque]. Lo probamos con [número] clientes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'quick_tip', - 'category' => 'educational', - 'name' => 'Tip rápido', - 'description' => 'Tip corto y accionable.', - 'content' => "Tip rápido si usas {{brand_name}}:\n\n[Acción] antes de [paso]. Te ahorra unos [tiempo/resultado] a la mayoría.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'myth_vs_reality', - 'category' => 'educational', - 'name' => 'Mito vs realidad', - 'description' => 'Derriba un mito del sector.', - 'content' => "Mito: [creencia común sobre el tema].\n\nRealidad: [contra-dato con número]. Lo vemos en datos de {{brand_name}} cada semana.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'how_we_built_it', - 'category' => 'behind_the_scenes', - 'name' => 'Cómo lo construimos', - 'description' => 'Vistazo casual detrás de cámaras.', - 'content' => "Cómo construimos [feature] en {{brand_name}}:\n\nEmpezamos con [primer intento]. Se rompió. Cambiamos a [enfoque 2]. Eso fue lo que salió.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'team_at_work', - 'category' => 'behind_the_scenes', - 'name' => 'Equipo trabajando', - 'description' => 'Foto de lo que el equipo está haciendo ahora.', - 'content' => "Lo que el equipo de {{brand_name}} está haciendo ahora:\n\n[Persona/rol] debugueando [problema]. [Persona/rol] en [otro proyecto]. Nivel de café: alto.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mistake_we_made', - 'category' => 'behind_the_scenes', - 'name' => 'Error que cometimos', - 'description' => 'Postmortem honesto en un tweet.', - 'content' => "La regamos en {{brand_name}} la semana pasada.\n\n[Qué se rompió]. Afectó a [número] clientes con [impacto]. Lo arreglamos [cómo]. Perdón a los afectados.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'office_moment', - 'category' => 'behind_the_scenes', - 'name' => 'Momento de oficina', - 'description' => 'Escena pequeña y humana de oficina.', - 'content' => "Momento aleatorio en la oficina de {{brand_name}}:\n\n[Escena, ej.: diseñador peleando con dev por 2px de border-radius]. Es así casi todos los días.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'customer_dm', - 'category' => 'testimonial', - 'name' => 'DM de cliente', - 'description' => 'Comparte un mensaje real de cliente.', - 'content' => "Me llegó este DM de un cliente de {{brand_name}} hoy:\n\n\"[Cita corta sobre lo que cambió para él].\"\n\nEs la parte del trabajo que no cansa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'before_and_after', - 'category' => 'testimonial', - 'name' => 'Antes y después', - 'description' => 'Números concretos de antes/después de un cliente.', - 'content' => "[Cliente] antes de {{brand_name}}: [métrica].\n\n[Cliente] después de [período]: [nueva métrica].\n\nNada más cambió en su setup.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'one_line_review', - 'category' => 'testimonial', - 'name' => 'Reseña de una línea', - 'description' => 'Frase corta de un cliente.', - 'content' => "\"[Frase específica del cliente, máximo 12 palabras.]\"\n\n- [Cliente], [cargo] en [empresa]\n\nNo le pedimos que escribiera eso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'hot_take', - 'category' => 'industry_tip', - 'name' => 'Opinión fuerte', - 'description' => 'Opinión con punto de vista sobre el sector.', - 'content' => "Opinión fuerte: la mayoría en [sector] cree que [creencia común].\n\nDespués de [tiempo] con {{brand_name}}, pienso lo opuesto. [Razón].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'overrated_underrated', - 'category' => 'industry_tip', - 'name' => 'Sobrevalorado subvalorado', - 'description' => 'Junta algo sobrevalorado y algo subvalorado.', - 'content' => "Sobrevalorado en [sector]: [práctica común].\n\nSubvalorado: [práctica ignorada].\n\nDejamos la primera en {{brand_name}} hace un año.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unpopular_opinion', - 'category' => 'industry_tip', - 'name' => 'Opinión impopular', - 'description' => 'Comparte una observación contraria.', - 'content' => "Opinión impopular: [afirmación contraria sobre el sector].\n\nLos clientes de {{brand_name}} lo prueban cada mes. Los datos no son sutiles.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'what_changed_my_mind', - 'category' => 'industry_tip', - 'name' => 'Lo que me hizo cambiar', - 'description' => 'Momento honesto de cambiar de opinión.', - 'content' => "Antes pensaba [creencia vieja sobre el sector].\n\nLuego pasó [evento/dato] en {{brand_name}}. Ahora creo [nueva visión]. Todavía ajustando.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // event - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Anuncio de evento', - 'description' => 'Anuncio simple de evento.', - 'content' => "{{brand_name}} organiza [nombre del evento] el [fecha] en [ciudad].\n\n[Tema]. Gratis, [capacidad] cupos. Regístrate: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Recap del evento', - 'description' => 'Resumen corto después de un evento.', - 'content' => "[Número] personas en el [evento] de {{brand_name}} anoche.\n\nPregunta favorita: \"[pregunta real del público].\" La grabación sale el viernes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'webinar_reminder', - 'category' => 'event', - 'name' => 'Recordatorio de webinar', - 'description' => 'Recordatorio de que un webinar empieza pronto.', - 'content' => "Recordatorio: webinar de {{brand_name}} sobre [tema] empieza en [tiempo].\n\n[Speaker] va a mostrar [cosa específica]. Última chance para registrarte: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'open_question', - 'category' => 'engagement', - 'name' => 'Pregunta abierta', - 'description' => 'Hazle una pregunta real al público.', - 'content' => "Pregunta sincera para quien usa [herramienta/categoría]:\n\n¿Qué es lo único que aún no hace y te gustaría que hiciera?\n\nPregunto porque {{brand_name}} está trabajando en eso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'fill_in_the_blank', - 'category' => 'engagement', - 'name' => 'Completa la frase', - 'description' => 'Provocación ligera tipo completa la frase.', - 'content' => "Completa:\n\nLo peor de [tarea/tema] es ______.\n\nLeo cada respuesta. Vamos a usarlas para planear el próximo trimestre de {{brand_name}}.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'show_us_your_setup', - 'category' => 'engagement', - 'name' => 'Muéstranos tu setup', - 'description' => 'Pide a la gente que comparta algo visual.', - 'content' => "Muéstranos tu [cosa, escritorio, dashboard, rutina semanal].\n\nVamos a destacar nuestros tres favoritos en la cuenta de {{brand_name}} la próxima semana. Sin filtro.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/bluesky_post.php b/templates/pt-BR/bluesky_post.php deleted file mode 100644 index a1883c15..00000000 --- a/templates/pt-BR/bluesky_post.php +++ /dev/null @@ -1,316 +0,0 @@ - 'bluesky_now_live', - 'category' => 'product_launch', - 'name' => 'No ar', - 'description' => 'Anuncie um lançamento no clima aberto e descentralizado do Bluesky.', - 'content' => "No ar: [feature/produto] do {{brand_name}}.\n\nO que mudou: [resumo em uma linha].\n\nPra quem é: [quem se beneficia].\n\nLink → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_thought', - 'category' => 'industry_tip', - 'name' => 'Pensamento curto', - 'description' => 'Uma observação concisa que soa natural no Bluesky.', - 'content' => "[Observação sobre seu setor, contada em uma ou duas frases.]\n\nSimples, mas vale dizer em voz alta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_invite', - 'category' => 'engagement', - 'name' => 'Convite à comunidade', - 'description' => 'Chame a comunidade pra um tema ou conversa.', - 'content' => "Se você se importa com [tema], a gente quer ouvir você.\n\nO que tem rondado sua cabeça ultimamente?\n\n- time {{brand_name}}", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_changelog_drop', - 'category' => 'product_launch', - 'name' => 'Changelog novo', - 'description' => 'Post de changelog direto pra um release.', - 'content' => "v[versão] saiu.\n\n• [mudança 1]\n• [mudança 2]\n• [bug fix]\n\nSem migrations. Notas completas: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_open_beta', - 'category' => 'product_launch', - 'name' => 'Beta aberto', - 'description' => 'Convide usuários pra um beta público.', - 'content' => "Beta aberto: [feature] tá no ar pra quem quiser testar.\n\nTem partes meio ásperas. É justamente o ponto. Bug reports são bem-vindos.\n\nInscreva-se: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_api_release', - 'category' => 'product_launch', - 'name' => 'Release de API', - 'description' => 'Anuncie uma nova API ou feature pra desenvolvedores.', - 'content' => "Novo: [endpoint/SDK] do {{brand_name}}.\n\nDocs: [link]\nRepo de exemplo: [link]\n\nSe faltar algo nas docs, fala pra gente. A gente conserta mais rápido do que você espera.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_discount', - 'category' => 'promotion', - 'name' => 'Janela de desconto', - 'description' => 'Promo com prazo, dita de forma direta.', - 'content' => "[X]% off em [plano/produto] até [data].\n\nSem cadastro de email. Sem popup. Só o código: [CÓDIGO]\n\n[link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_lifetime', - 'category' => 'promotion', - 'name' => 'Lifetime deal', - 'description' => 'Oferta lifetime/early-bird voltada pra builders.', - 'content' => "Lifetime deal no {{brand_name}}: [preço] uma vez, sem mensalidade.\n\nLimitado a [número] vagas. Depois disso voltamos pro mensal.\n\nPegue uma: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_promo_referral', - 'category' => 'promotion', - 'name' => 'Bônus por indicação', - 'description' => 'Oferta de indicação direta.', - 'content' => "Indique um amigo pro {{brand_name}}, vocês dois ganham [recompensa].\n\nSem níveis. Sem ranking. Só mande seu link: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_one_thing', - 'category' => 'educational', - 'name' => 'Uma coisa que aprendi', - 'description' => 'Uma lição concreta, contada de forma simples.', - 'content' => "Uma coisa que aprendi trabalhando com [tema]:\n\n[lição concreta, uma ou duas frases].\n\nÓbvio em retrospecto. Não era óbvio antes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_misconception', - 'category' => 'educational', - 'name' => 'Mito comum', - 'description' => 'Corrija um mito difundido na sua área.', - 'content' => "Crença comum: [mito sobre sua área].\n\nO que é verdade de fato: [correção].\n\nA diferença importa quando [cenário específico].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_quick_how', - 'category' => 'educational', - 'name' => 'Tutorial rápido', - 'description' => 'Tutorial curto sobre uma tarefa específica.', - 'content' => "Como [tarefa específica] no [ferramenta]:\n\n1. [passo]\n2. [passo]\n3. [passo]\n\nÉ isso. Sem config escondida.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_edu_tradeoff', - 'category' => 'educational', - 'name' => 'Explicando um tradeoff', - 'description' => 'Mostre um tradeoff real do seu domínio.', - 'content' => "[Opção A] vs [Opção B] é basicamente um tradeoff entre [coisa 1] e [coisa 2].\n\nSe você se importa mais com [coisa 1], escolhe A. Se [coisa 2], escolhe B. A maioria dos times escolhe A e se arrepende depois.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_stack', - 'category' => 'behind_the_scenes', - 'name' => 'Nossa stack', - 'description' => 'Nota honesta sobre a stack vinda de dentro do time.', - 'content' => "Nossa stack no {{brand_name}}: [tech 1], [tech 2], [tech 3].\n\nEscolhemos [tech 1] por [motivo]. A gente se arrepende de ter escolhido [tech] por [motivo]. Provavelmente trocamos no próximo trimestre.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Mini postmortem', - 'description' => 'Nota curta e transparente sobre um incidente.', - 'content' => "[Serviço/feature] ficou fora do ar por [duração] hoje.\n\nCausa: [explicação simples].\nFix: [o que fizemos].\n\nAdicionamos [proteção] pra que a mesma coisa não aconteça do mesmo jeito de novo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Por que escolhemos X', - 'description' => 'Explique uma decisão recente de design ou produto.', - 'content' => "Por que escolhemos [decisão] em vez de [alternativa]:\n\n[motivo em uma frase].\n\nNão é a escolha popular. Mas combina com como nossos usuários trabalham de verdade.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_bts_numbers', - 'category' => 'behind_the_scenes', - 'name' => 'Números que acompanhamos', - 'description' => 'Compartilhe uma métrica real e o que ela significa.', - 'content' => "Um número que a gente acompanha de verdade no {{brand_name}}: [métrica].\n\nMês passado foi [valor]. Na semana anterior, [valor].\n\nÉ a métrica que nos diz se [resultado] é real.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_quote', - 'category' => 'testimonial', - 'name' => 'Citação de um usuário', - 'description' => 'Citação curta de um usuário, sem enfeite.', - 'content' => "De um usuário esta semana:\n\n\"[citação curta e específica sobre o produto].\"\n\n- [primeiro nome], [cargo]\n\nÉ esse tipo de feedback que mantém a gente construindo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_workflow', - 'category' => 'testimonial', - 'name' => 'Como um cliente usa', - 'description' => 'História específica do workflow de um usuário.', - 'content' => "[Cliente/time] usa o {{brand_name}} pra [tarefa específica].\n\nAntes: [jeito antigo].\nAgora: [jeito novo].\n\nNão é dramático. Só menos atrito todo dia.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_testimonial_result', - 'category' => 'testimonial', - 'name' => 'Resultado concreto', - 'description' => 'Um resultado específico e mensurável de um cliente.', - 'content' => "[Cliente] reduziu [tarefa] de [tempo antigo] pra [tempo novo] usando o {{brand_name}}.\n\nUma mudança de workflow. Sem novas contratações.\n\nEstudo completo: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_take', - 'category' => 'industry_tip', - 'name' => 'Opinião meio impopular', - 'description' => 'Uma opinião real sobre algo do seu setor.', - 'content' => "Opinião moderada: [opinião sobre seu setor].\n\nSei que é impopular. Já mudei de ideia sobre isso duas vezes. Por enquanto acho que se sustenta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_pattern', - 'category' => 'industry_tip', - 'name' => 'Um padrão que vejo sempre', - 'description' => 'Padrão observado entre times ou projetos.', - 'content' => "Um padrão que vejo sempre em [setor/cargo]:\n\n[padrão em uma frase].\n\nGeralmente funciona até [marco] e aí para de funcionar discretamente.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_anti_advice', - 'category' => 'industry_tip', - 'name' => 'Conselho que eu pularia', - 'description' => 'Anti-conselho: conselho comum que não se sustenta.', - 'content' => "Conselho que se ouve muito: [conselho comum].\n\nNa prática isso desmorona quando [cenário]. A versão que funciona de verdade é [conselho revisado].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_industry_link_share', - 'category' => 'industry_tip', - 'name' => 'Link com contexto', - 'description' => 'Compartilhe um link com um motivo real pra ler.', - 'content' => "Vale a leitura: [título do artigo/post].\n\nPor quê: [uma coisa específica que o texto acerta].\n\n[link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_announce', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncie um evento ou talk que vem aí.', - 'content' => "[Nome do evento] em [data] às [hora/timezone].\n\nTema: [o que vamos cobrir].\nFormato: [talk / Q&A / demo].\n\nGratuito, sem cadastro: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_speaking', - 'category' => 'event', - 'name' => 'Vou palestrar', - 'description' => 'Avise que você vai palestrar em uma conferência.', - 'content' => "Vou palestrar no [evento] em [data].\n\nTalk: [título ou tema da talk em palavras simples].\n\nSe você estiver por lá, dá um oi. Especialmente se você discordar da talk.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_recap', - 'category' => 'event', - 'name' => 'Recap do evento', - 'description' => 'Recap curto depois de um evento ou meetup.', - 'content' => "Recap rápido do [evento]:\n\n• [o que funcionou]\n• [o que nos surpreendeu]\n• [o que vamos fazer diferente da próxima vez]\n\nValeu a quem apareceu.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_event_office_hours', - 'category' => 'event', - 'name' => 'Office hours', - 'description' => 'Convite pra office hours abertas ou AMA.', - 'content' => "Office hours abertas nesta [dia] às [hora/timezone].\n\nTraga perguntas reais sobre [tema]. Prefiro responder as difíceis do que as fáceis.\n\nLink pra entrar: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_question', - 'category' => 'engagement', - 'name' => 'Pergunta real', - 'description' => 'Uma pergunta genuína, não engagement bait.', - 'content' => "Pergunta genuína pra quem trabalha com [tema]:\n\n[pergunta específica].\n\nNão é retórica. Tô travado nisso e curioso pra saber como os outros lidam.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_poll_lite', - 'category' => 'engagement', - 'name' => 'Dois lados', - 'description' => 'Um ou/ou leve pra puxar respostas.', - 'content' => "Dois lados sobre [tema]:\n\nA: [opção A]\nB: [opção B]\n\nQual você usa de verdade no dia a dia, e o que te fez escolher?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bluesky_engagement_show_us', - 'category' => 'engagement', - 'name' => 'Mostra teu setup', - 'description' => 'Convide usuários a mostrar o setup ou workflow deles.', - 'content' => "Mostra teu [setup / workflow / config] pra [tarefa].\n\nResponda com um screenshot ou uma linha. A gente tá juntando bons padrões pra compartilhar de volta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/facebook_post.php b/templates/pt-BR/facebook_post.php deleted file mode 100644 index 4e53f931..00000000 --- a/templates/pt-BR/facebook_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'facebook_special_offer', - 'category' => 'promotion', - 'name' => 'Oferta especial', - 'description' => 'Divulgue uma oferta especial no Facebook com uma chamada clara para ação.', - 'content' => "🎉 Oferta especial da {{brand_name}}.\n\n[Resumo da oferta], válida só até [data].\n\nClique no link para garantir a sua: [link]\n\nFicou com alguma dúvida? Manda nos comentários, a gente lê todas.", - 'image_count' => 1, - 'image_keywords' => ['offer', 'sale', 'promotion'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_community_story', - 'category' => 'behind_the_scenes', - 'name' => 'História da comunidade', - 'description' => 'Compartilhe a história de um cliente ou momento da equipe para criar conexão.', - 'content' => "Conheça [nome].\n\n[História curta, 2 a 4 frases, sobre como essa pessoa usa a {{brand_name}} ou o que ela traz para a nossa comunidade.]\n\nÉ por isso que a gente faz o que faz. ❤️", - 'image_count' => 1, - 'image_keywords' => ['people', 'story', 'community'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_event_invite', - 'category' => 'event', - 'name' => 'Convite para evento', - 'description' => 'Convide seus seguidores para um próximo evento ou webinar.', - 'content' => "📅 Anota na agenda.\n\nA {{brand_name}} vai realizar [nome do evento] em [data] às [hora].\n\nVamos falar sobre:\n• [Tópico 1]\n• [Tópico 2]\n• [Tópico 3]\n\nA participação é gratuita. Garanta seu lugar → [link]", - 'image_count' => 1, - 'image_keywords' => ['event', 'calendar', 'invitation'], - 'slides' => null, - ], - - // Product launch (4) - [ - 'slug' => 'facebook_new_product_reveal', - 'category' => 'product_launch', - 'name' => 'Revelação de novo produto', - 'description' => 'Anuncie um produto totalmente novo para a sua comunidade no Facebook.', - 'content' => "Depois de [número] meses de trabalho, finalmente a gente pode falar sobre isso.\n\nApresentamos [nome do produto], o(a) [descrição curta] que criamos porque [motivo]. Nosso time ouvia a mesma coisa das pessoas dessa comunidade: [pedido recorrente]. Então fizemos.\n\nA {{brand_name}} envia o primeiro lote em [data]. O link está no primeiro comentário.\n\nO que você quer saber sobre ele? Deixa sua pergunta aqui embaixo que a gente responde uma por uma essa semana.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_product_restock', - 'category' => 'product_launch', - 'name' => 'Anúncio de reposição de produto', - 'description' => 'Avise seus seguidores que um produto esgotado voltou ao estoque.', - 'content' => "Voltou.\n\nO [nome do produto] esgotou em [período] da última vez, e muita gente ficou na lista de espera. Repusemos hoje de manhã com [quantidade] unidades.\n\nSe você perdeu antes, esse é o seu lembrete: [link]\n\nPara quem já tem um, o que você diria para alguém que está pensando em comprar?", - 'image_count' => 1, - 'image_keywords' => ['product', 'restock', 'shelf'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_feature_release', - 'category' => 'product_launch', - 'name' => 'Lançamento de novo recurso', - 'description' => 'Anuncie um novo recurso adicionado a um produto que já existe.', - 'content' => "Atualização pequena, diferença grande.\n\nA {{brand_name}} acabou de liberar [nome do recurso]. Vocês pediram nos comentários mais vezes do que a gente conseguia contar, então aí está: [explicação em uma frase do que ele faz].\n\nJá está disponível para todo mundo a partir de hoje. Não precisa atualizar nada.\n\nSe você testar essa semana, conta o que achou. A gente já está anotando ideias para o próximo lançamento.", - 'image_count' => 1, - 'image_keywords' => ['feature', 'update', 'screen'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_preorder_open', - 'category' => 'product_launch', - 'name' => 'Anúncio de pré-venda', - 'description' => 'Abra a pré-venda de um produto que ainda vai ser lançado.', - 'content' => "A pré-venda está aberta.\n\nO [nome do produto] começa a ser entregue em [data], e essa comunidade vai poder pedir antes. O preço de pré-venda é [preço] até [prazo], e tem só [quantidade] vagas no primeiro lote.\n\nO link está aqui: [link]\n\nSe você tem dúvida sobre [preocupação comum: entrega / tamanho / especificações], pergunta nos comentários. A gente fica por aqui a tarde toda.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product', 'package'], - 'slides' => null, - ], - - // Promotion (3) - [ - 'slug' => 'facebook_flash_sale', - 'category' => 'promotion', - 'name' => 'Alerta de promoção relâmpago', - 'description' => 'Anuncie uma promoção relâmpago de curta duração com senso de urgência.', - 'content' => "Promoção relâmpago, só hoje.\n\n[Desconto] em [produto/categoria] até meia-noite. Use o cupom [CÓDIGO] no checkout.\n\nEsse é o menor preço que vamos oferecer essa temporada, e só voltamos a fazer em [próxima data].\n\nLink no primeiro comentário. Marca um amigo que está de olho nisso.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_holiday_promo', - 'category' => 'promotion', - 'name' => 'Promoção de feriado', - 'description' => 'Faça uma promoção temática de feriado com tom amigável.', - 'content' => "Feliz [nome do feriado] de todos nós da {{brand_name}}.\n\nPara dizer obrigado por fazer parte desse ano, estamos dando [desconto] em [produto/categoria] de [data inicial] até [data final]. Use o cupom [CÓDIGO].\n\nSeja lá o que você está comemorando essa semana, que seja bom. Conta nos comentários como você vai passar o feriado.", - 'image_count' => 1, - 'image_keywords' => ['holiday', 'celebration', 'gift'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_bundle_deal', - 'category' => 'promotion', - 'name' => 'Promoção de combo', - 'description' => 'Promova um combo de produtos com economia.', - 'content' => "Dois favoritos nossos, melhores juntos.\n\n[Produto A] + [Produto B] agora viraram combo, e o combo te dá [valor] de economia em comparação com comprar separado. Juntamos os dois porque os clientes não paravam de pedir os dois no mesmo carrinho.\n\nGaranta o seu aqui: [link]\n\nSe você já tem um deles, o outro é a peça que faltava. Pode confiar.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'products', 'package'], - 'slides' => null, - ], - - // Educational (4) - [ - 'slug' => 'facebook_how_to_guide', - 'category' => 'educational', - 'name' => 'Guia passo a passo', - 'description' => 'Ensine seu público a fazer algo útil.', - 'content' => "Como [tarefa] em menos de [tempo].\n\n1. [Passo 1 com um detalhe real, não uma instrução vaga]\n2. [Passo 2]\n3. [Passo 3]\n4. [Passo 4]\n\nA parte que a maioria pula é o [número do passo]. Se você só fizer uma coisa, faça essa.\n\nQual é a dúvida sobre [tema] que você sempre adia para pesquisar? Pergunta aqui embaixo que a gente responde na próxima semana.", - 'image_count' => 1, - 'image_keywords' => ['tutorial', 'guide', 'how to'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_myth_buster', - 'category' => 'educational', - 'name' => 'Mito vs. verdade', - 'description' => 'Desmonte um mito comum do seu setor.', - 'content' => "Tem um mito sobre [tema] que não vai embora.\n\nO mito: [crença comum].\n\nO que acontece de verdade: [explicação correta, 2 a 3 frases com um exemplo ou número específico].\n\nA gente escuta isso há anos. Se você também acreditava, está em boa companhia, a maioria acreditava. Agora você sabe.\n\nQuais outros mitos do [setor] te tiram do sério?", - 'image_count' => 1, - 'image_keywords' => ['fact check', 'information', 'thinking'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_quick_tip', - 'category' => 'educational', - 'name' => 'Dica rápida', - 'description' => 'Compartilhe uma dica curta que seu público pode usar hoje.', - 'content' => "Dica rápida que você pode usar hoje.\n\nSe você [situação comum], experimente [ação específica] em vez de [abordagem usual]. O motivo: [explicação em uma frase de por que funciona].\n\nA gente começou a fazer isso com [exemplo] e mudou a forma como a gente [resultado]. Mudança pequena, diferença real.\n\nTesta essa semana e conta como foi.", - 'image_count' => 1, - 'image_keywords' => ['tip', 'lightbulb', 'idea'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_common_mistake', - 'category' => 'educational', - 'name' => 'Erro comum para evitar', - 'description' => 'Ajude seus leitores a evitar um erro comum no seu campo.', - 'content' => "O erro mais comum que a gente vê em [tema]: [erro específico].\n\nGeralmente acontece quando [contexto]. O resultado é [consequência], e quando você percebe, [prejuízo].\n\nO que fazer no lugar: [alternativa clara]. Leva [tempo/esforço] a mais no começo e te poupa [benefício] depois.\n\nSe você já fez isso, não está sozinho. A gente também já fez. Qual é um erro que você queria que alguém tivesse te avisado antes?", - 'image_count' => 1, - 'image_keywords' => ['mistake', 'warning', 'lesson'], - 'slides' => null, - ], - - // Behind the scenes (4) - [ - 'slug' => 'facebook_team_intro', - 'category' => 'behind_the_scenes', - 'name' => 'Apresentação de membro do time', - 'description' => 'Apresente um membro da equipe para a comunidade.', - 'content' => "Diga oi para [nome].\n\n[Nome] é nosso(a) [cargo] e está com a {{brand_name}} há [tempo]. É por causa dele(a) que [coisa específica que essa pessoa cuida ou melhorou], e se você já mandou e-mail para o suporte, é bem provável que ele(a) tenha respondido.\n\nCuriosidade: [um detalhe humano, hobby, talento estranho, lanche favorito].\n\nManda um oi nos comentários para receber.", - 'image_count' => 1, - 'image_keywords' => ['team', 'portrait', 'workplace'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_workspace_tour', - 'category' => 'behind_the_scenes', - 'name' => 'Tour pelo espaço de trabalho', - 'description' => 'Mostre aos seguidores onde você trabalha ou cria.', - 'content' => "Uma espiada no lugar onde o trabalho acontece.\n\nEsse é o(a) [nome da sala/espaço] da {{brand_name}}. [Um detalhe específico, a iluminação, a bagunça, o canto que todo mundo disputa]. A gente passa a maior parte do dia aqui, e dá para perceber.\n\n[Segundo detalhe, algo visível na foto que tem uma história por trás].\n\nE o seu espaço de trabalho, está como agora? Resposta honesta, com xícaras de café e tudo mais.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'office', 'studio'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_making_of', - 'category' => 'behind_the_scenes', - 'name' => 'Bastidores do processo', - 'description' => 'Mostre como um produto ou trabalho é feito.', - 'content' => "Já se perguntou como o(a) [produto/serviço] é feito de verdade?\n\nComeça com [primeiro passo] e termina com [último passo]. No meio tem muito de [descrição honesta, teste, refazer, repensar]. A versão que você acaba comprando geralmente é a [número] tentativa.\n\nAqui vai um registro do lote dessa semana. O(a) [detalhe específico] é a parte que ninguém vê mas todo mundo nota quando está bem feita.\n\nDúvidas sobre o processo? Pode mandar.", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'process', 'craft'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_milestone_celebration', - 'category' => 'behind_the_scenes', - 'name' => 'Comemoração de marco', - 'description' => 'Comemore um marco importante com a comunidade.', - 'content' => "Hoje é [marco, aniversário, número de clientes, qualquer coisa real].\n\nA gente começou a {{brand_name}} há [tempo] com [detalhe honesto da origem, a mesa da cozinha, um cliente, um notebook emprestado]. O plano era simples e meio ingênuo: [objetivo original].\n\n[Marco] depois, a gente segue por aqui, principalmente por causa das pessoas dessa comunidade que continuaram aparecendo. Obrigado, de verdade.\n\nConta nos comentários, quando você nos descobriu pela primeira vez?", - 'image_count' => 1, - 'image_keywords' => ['celebration', 'milestone', 'anniversary'], - 'slides' => null, - ], - - // Testimonial (3) - [ - 'slug' => 'facebook_customer_quote', - 'category' => 'testimonial', - 'name' => 'Depoimento de cliente', - 'description' => 'Compartilhe um depoimento de cliente nas próprias palavras.', - 'content' => "\"[Frase direta do cliente, mantenha específica, com a voz dele(a), com um resultado ou sentimento real.]\"\n\n- [Nome do cliente], [cidade ou função]\n\nA gente recebeu essa mensagem [tempo] atrás e perguntou se podia compartilhar. [Primeiro nome] disse sim. Somos gratos por palavras assim e por todo mundo que tira um minuto para mandar.\n\nSe a {{brand_name}} fez parte da sua história também, a gente adoraria ouvir nos comentários.", - 'image_count' => 1, - 'image_keywords' => ['testimonial', 'happy customer', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_before_after_story', - 'category' => 'testimonial', - 'name' => 'História de antes e depois', - 'description' => 'Conte uma história de transformação de cliente.', - 'content' => "Antes: [situação do cliente quando encontrou a {{brand_name}}, descreva em 2 a 3 frases honestas].\n\nDepois: [o que mudou, com um resultado específico e prazo].\n\n[Nome do cliente] mandou essa atualização no mês passado, e é o tipo de coisa que faz todo mundo no escritório ficar quieto por um segundo. Não foi a gente que fez o trabalho, foi ele(a). A gente só ajudou onde dava.\n\nSe você está em dúvida sobre [hesitação comum], histórias assim podem ser o motivo para começar.", - 'image_count' => 1, - 'image_keywords' => ['transformation', 'progress', 'result'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_review_highlight', - 'category' => 'testimonial', - 'name' => 'Destaque de avaliação', - 'description' => 'Destaque uma avaliação recente com contexto.', - 'content' => "Avaliação 5 estrelas de [nome do cliente] essa semana:\n\n\"[Tire uma frase real e específica da avaliação, não o elogio genérico, a parte com o detalhe de verdade.]\"\n\nA gente guarda avaliações assim e relê nos dias difíceis. Obrigado, [primeiro nome].\n\nSe você tem alguns minutos e a {{brand_name}} te ajudou, deixar uma avaliação aqui é a coisa mais gentil que você pode fazer pela gente: [link]", - 'image_count' => 1, - 'image_keywords' => ['review', 'stars', 'feedback'], - 'slides' => null, - ], - - // Industry tip (3) - [ - 'slug' => 'facebook_industry_insight', - 'category' => 'industry_tip', - 'name' => 'Insight do setor', - 'description' => 'Compartilhe um insight útil do seu setor.', - 'content' => "Uma coisa que a gente percebeu trabalhando em [setor] esse ano:\n\n[Observação específica, uma mudança, um padrão, uma descoberta contraintuitiva. 2 a 3 frases com um número ou exemplo.]\n\nA gente não acha que isso vai voltar atrás tão cedo, e os negócios que se prepararem agora vão ter menos dificuldade do que os que esperarem.\n\nVocê está vendo a mesma coisa? Curioso para saber como tem sido a sua experiência.", - 'image_count' => 1, - 'image_keywords' => ['insight', 'industry', 'analysis'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_pro_tip', - 'category' => 'industry_tip', - 'name' => 'Dica de quem já viveu', - 'description' => 'Compartilhe uma dica aprendida na prática.', - 'content' => "Uma dica de profissional que a gente aprendeu da maneira difícil:\n\nQuando você [cenário comum], sempre [ação específica]. A gente costumava pular esse passo porque parecia trabalho a mais, até que [história, o que deu errado].\n\nAgora é a primeira coisa que a gente faz, sempre. Leva [tempo] e evita [problema].\n\nQual dica você daria para alguém começando agora em [área]?", - 'image_count' => 1, - 'image_keywords' => ['expertise', 'professional', 'advice'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_industry_trend', - 'category' => 'industry_tip', - 'name' => 'Tendência do setor explicada', - 'description' => 'Explique uma tendência em linguagem simples.', - 'content' => "Todo mundo em [setor] está falando de [tendência]. Aqui vai o que isso significa de verdade, em palavras simples.\n\n[Explicação em 2 a 3 frases, sem jargão, com um exemplo concreto.]\n\nSe vai dar no que prometem, é outra história. Nossa opinião: [opinião honesta, o que levar a sério, o que ignorar].\n\nE você, o que acha? Curioso para saber onde a comunidade está nessa.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry', 'explainer'], - 'slides' => null, - ], - - // Event (3) - [ - 'slug' => 'facebook_event_recap', - 'category' => 'event', - 'name' => 'Resumo do evento', - 'description' => 'Compartilhe um resumo depois que o evento acabou.', - 'content' => "[Nome do evento] acabou e a gente ainda está se recuperando.\n\n[Número] de vocês apareceram, fizeram boas perguntas e ficaram até tarde. Destaques: [momento 1], [momento 2] e a parte em que [coisa específica engraçada ou marcante].\n\nUm muito obrigado para todo mundo que veio. Se você perdeu, a gente gravou a sessão principal e o link está no primeiro comentário.\n\nQual foi seu momento preferido do dia? Marca alguém que você conheceu lá.", - 'image_count' => 1, - 'image_keywords' => ['event', 'recap', 'crowd'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_event_countdown', - 'category' => 'event', - 'name' => 'Contagem regressiva para evento', - 'description' => 'Crie expectativa conforme o evento se aproxima.', - 'content' => "Faltam [número] dias para [nome do evento].\n\nSe você ainda não garantiu seu lugar, a hora é agora. Sobraram [número] vagas, e na última semana elas costumam acabar rápido.\n\nO que esperar em [data]: [um detalhe real], [outro detalhe real] e tempo para conversar de verdade com as pessoas, não só ficar olhando slides.\n\nGaranta seu ingresso aqui: [link]\n\nQuem vai? Comenta para a gente saber quem procurar.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'event', 'tickets'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_workshop_announcement', - 'category' => 'event', - 'name' => 'Anúncio de workshop', - 'description' => 'Anuncie um workshop prático.', - 'content' => "Vamos fazer um workshop sobre [tema].\n\n[Data] às [hora]. Vagas limitadas a [número] pessoas porque é mão na massa, não webinar. Você sai de lá com [resultado específico, uma coisa pronta, uma configuração funcionando, um plano escrito].\n\nPara quem é: [público]. Para quem não é: [aviso honesto].\n\nDetalhes e inscrição: [link]\n\nDúvidas se faz sentido para você? Pergunta nos comentários.", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'learning', 'hands on'], - 'slides' => null, - ], - - // Engagement (3) - [ - 'slug' => 'facebook_question_prompt', - 'category' => 'engagement', - 'name' => 'Pergunta para a comunidade', - 'description' => 'Faça uma pergunta reflexiva para a comunidade.', - 'content' => "Pergunta sincera para a comunidade.\n\nQuando você [situação comum relacionada à {{brand_name}}], como você costuma [decisão específica]? A gente está perguntando porque vê o mesmo assunto aparecer nas DMs, e tem uma intuição de que a nossa resposta não é a única boa.\n\nNão tem resposta errada. A gente lê todos os comentários.", - 'image_count' => 1, - 'image_keywords' => ['question', 'conversation', 'people talking'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_this_or_that', - 'category' => 'engagement', - 'name' => 'Enquete isso ou aquilo', - 'description' => 'Faça um post divertido no estilo isso ou aquilo.', - 'content' => "Resolve um debate que a gente tem tido a semana toda.\n\n[Opção A] ou [Opção B]?\n\nSem pensar muito. Primeira reação, nos comentários.\n\nPara constar, o time está dividido [número] a [número]. A gente conta o lado vencedor na sexta.", - 'image_count' => 1, - 'image_keywords' => ['choice', 'comparison', 'options'], - 'slides' => null, - ], - [ - 'slug' => 'facebook_fill_in_blank', - 'category' => 'engagement', - 'name' => 'Complete a frase', - 'description' => 'Convide os seguidores a completar uma frase.', - 'content' => "Complete a frase:\n\nUma coisa que eu queria ter sabido antes de [tema] é __________.\n\nA gente começa: [sua resposta honesta, com uma história real junto].\n\nAgora é sua vez. As melhores respostas que a gente recebe nesse tipo de pergunta acabam ajudando alguém que vai ler depois, então não segura.", - 'image_count' => 1, - 'image_keywords' => ['conversation', 'thinking', 'community'], - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/facebook_story.php b/templates/pt-BR/facebook_story.php deleted file mode 100644 index a6454d70..00000000 --- a/templates/pt-BR/facebook_story.php +++ /dev/null @@ -1,326 +0,0 @@ - 'fb_story_announcement', - 'category' => 'product_launch', - 'name' => 'Aviso rápido', - 'description' => 'Chame atenção para uma novidade com um Story de 24h no Facebook.', - 'content' => "Aviso da {{brand_name}}.\n\n[Destaque em uma linha]\n\nLink no perfil.", - 'image_count' => 1, - 'image_keywords' => ['announcement', 'launch'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_promo', - 'category' => 'promotion', - 'name' => 'Promo relâmpago', - 'description' => 'Oferta por tempo limitado em formato Story.', - 'content' => "Só hoje.\n\n[Desconto]% off na {{brand_name}}.\n\nToque para comprar.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'urgency'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_question', - 'category' => 'engagement', - 'name' => 'Pergunta rápida', - 'description' => 'Pergunte algo aos seguidores para gerar respostas e reações.', - 'content' => "Rapidinho.\n\n[Pergunta para o seu público]\n\nResponda este Story.", - 'image_count' => 1, - 'image_keywords' => ['question', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_new_drop', - 'category' => 'product_launch', - 'name' => 'Novidade no ar', - 'description' => 'Apresente um produto novo com um toque visual.', - 'content' => "Chegou.\n\n[Nome do produto] da {{brand_name}}.\n\nToque para ver.", - 'image_count' => 1, - 'image_keywords' => ['new product', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_preorder', - 'category' => 'product_launch', - 'name' => 'Pré-venda aberta', - 'description' => 'Abra a pré-venda com um Story curto.', - 'content' => "Pré-venda aberta.\n\n[Produto] envia em [data].\n\nLink na bio.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_launch_day', - 'category' => 'product_launch', - 'name' => 'Dia do lançamento', - 'description' => 'Marque o lançamento ao vivo com CTA de um toque.', - 'content' => "Ao vivo agora.\n\n[Produto] saindo hoje.\n\nToque para garantir.", - 'image_count' => 1, - 'image_keywords' => ['launch', 'product reveal'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_back_in_stock', - 'category' => 'product_launch', - 'name' => 'Voltou ao estoque', - 'description' => 'Avise os seguidores que um produto esgotado voltou.', - 'content' => "Voltou ao estoque.\n\n[Produto] na {{brand_name}}.\n\nVai rápido. Toque pra ver.", - 'image_count' => 1, - 'image_keywords' => ['restock', 'available'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bogo', - 'category' => 'promotion', - 'name' => 'Compre 1 leve 2', - 'description' => 'Empurre uma oferta compre 1 leve 2 no Story.', - 'content' => "Compre 1, leve 2.\n\nEsta semana na {{brand_name}}.\n\nToque para comprar.", - 'image_count' => 1, - 'image_keywords' => ['bogo', 'sale'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_free_shipping', - 'category' => 'promotion', - 'name' => 'Frete grátis', - 'description' => 'Divulgue uma janela de frete grátis.', - 'content' => "Frete grátis.\n\n48h só na {{brand_name}}.\n\nUse o código [CODE].", - 'image_count' => 1, - 'image_keywords' => ['shipping', 'delivery box'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_last_chance', - 'category' => 'promotion', - 'name' => 'Última chance', - 'description' => 'Aviso final de desconto que está acabando.', - 'content' => "Última chance.\n\n[Desconto]% off acaba hoje à noite.\n\nToque na {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'sale ending'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_coupon_drop', - 'category' => 'promotion', - 'name' => 'Cupom liberado', - 'description' => 'Solte um código de cupom em um Story de 24h.', - 'content' => "Código [CODE].\n\n[Desconto]% off na {{brand_name}}.\n\nSome em 24h.", - 'image_count' => 1, - 'image_keywords' => ['coupon', 'promo code'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_quick_tip', - 'category' => 'educational', - 'name' => 'Dica rápida', - 'description' => 'Compartilhe uma dica útil.', - 'content' => "Dica rápida.\n\n[Uma dica prática].\n\nSalve este Story.", - 'image_count' => 1, - 'image_keywords' => ['tip', 'advice'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_did_you_know', - 'category' => 'educational', - 'name' => 'Você sabia', - 'description' => 'Surpreenda os seguidores com um fato rápido.', - 'content' => "Você sabia?\n\n[Fato curioso].\n\nMais no blog da {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['fact', 'lightbulb'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_myth_buster', - 'category' => 'educational', - 'name' => 'Mito ou verdade', - 'description' => 'Derrube um mito comum em uma única tacada.', - 'content' => "Mito: [crença comum].\n\nVerdade: [a real].\n\nToque pra entender.", - 'image_count' => 1, - 'image_keywords' => ['myth', 'truth'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_one_minute_lesson', - 'category' => 'educational', - 'name' => 'Aula de 1 minuto', - 'description' => 'Lição curta com CTA de toque.', - 'content' => "Aula de 60 segundos.\n\n[Tema] da {{brand_name}}.\n\nToque para assistir.", - 'image_count' => 1, - 'image_keywords' => ['lesson', 'teaching'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_workspace', - 'category' => 'behind_the_scenes', - 'name' => 'Bastidor do escritório', - 'description' => 'Mostre o lugar onde tudo acontece.', - 'content' => "Hoje na {{brand_name}}.\n\n[O que está rolando agora].\n\nToque para ver mais.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'office'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_team', - 'category' => 'behind_the_scenes', - 'name' => 'Conheça o time', - 'description' => 'Apresente um membro do time de forma rápida.', - 'content' => "Conheça [nome].\n\n[Cargo na {{brand_name}}].\n\nToque para dar um oi.", - 'image_count' => 1, - 'image_keywords' => ['team', 'employee'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_process', - 'category' => 'behind_the_scenes', - 'name' => 'Como é feito', - 'description' => 'Espiada rápida de como algo é produzido.', - 'content' => "Como [produto] é feito.\n\nEtapa [n] na {{brand_name}}.\n\nToque pro vídeo completo.", - 'image_count' => 1, - 'image_keywords' => ['production', 'process'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_bts_packing', - 'category' => 'behind_the_scenes', - 'name' => 'Embalando pedidos', - 'description' => 'Mostre os pedidos saindo da casa.', - 'content' => "Embalando pedidos.\n\n[Número] saindo hoje.\n\nObrigado pelo apoio.", - 'image_count' => 1, - 'image_keywords' => ['packing', 'shipping'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_customer_quote', - 'category' => 'testimonial', - 'name' => 'Citação de cliente', - 'description' => 'Mostre uma frase curta de cliente.', - 'content' => "\"[Frase do cliente].\"\n\n- [nome]\n\nToque para ler mais.", - 'image_count' => 1, - 'image_keywords' => ['quote', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_five_star', - 'category' => 'testimonial', - 'name' => 'Avaliação 5 estrelas', - 'description' => 'Destaque uma avaliação 5 estrelas.', - 'content' => "5 estrelas.\n\n\"[Avaliação curta]\", [nome]\n\nMais na {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['five stars', 'review'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_before_after', - 'category' => 'testimonial', - 'name' => 'Antes e depois', - 'description' => 'Mostre um antes/depois com um único CTA.', - 'content' => "Antes. Depois.\n\n[Nome do cliente] usando {{brand_name}}.\n\nToque pra ver a história.", - 'image_count' => 1, - 'image_keywords' => ['before after', 'transformation'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_industry_trend', - 'category' => 'industry_tip', - 'name' => 'Tendência do setor', - 'description' => 'Solte uma sacada rápida de tendência.', - 'content' => "Tendência.\n\n[Tendência do setor em uma linha].\n\nToque pra nossa visão.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_pro_hack', - 'category' => 'industry_tip', - 'name' => 'Truque pro', - 'description' => 'Compartilhe um truque rápido de profissional.', - 'content' => "Truque pro.\n\n[Macete em uma linha].\n\nMais dicas na {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['hack', 'shortcut'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_mistake_to_avoid', - 'category' => 'industry_tip', - 'name' => 'Erro a evitar', - 'description' => 'Avise sobre um erro comum.', - 'content' => "Pare de fazer isso.\n\n[Erro comum].\n\nToque pra solução.", - 'image_count' => 1, - 'image_keywords' => ['warning', 'mistake'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_save_date', - 'category' => 'event', - 'name' => 'Reserve a data', - 'description' => 'Plante um save the date em um Story de 24h.', - 'content' => "Reserve a data.\n\n[Evento] em [data].\n\nConfirme presença na bio.", - 'image_count' => 1, - 'image_keywords' => ['calendar', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_today', - 'category' => 'event', - 'name' => 'Evento hoje', - 'description' => 'Lembrete de evento no mesmo dia.', - 'content' => "Hoje.\n\n[Evento] às [hora].\n\nToque pelo link.", - 'image_count' => 1, - 'image_keywords' => ['event', 'live'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_live_starting', - 'category' => 'event', - 'name' => 'Indo ao vivo', - 'description' => 'Leve os seguidores até a live.', - 'content' => "Indo ao vivo.\n\n[Tema] em [minutos] minutos.\n\nToque pra entrar na {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['live stream', 'broadcast'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_event_recap', - 'category' => 'event', - 'name' => 'Resumo do evento', - 'description' => 'Resumo rápido no dia seguinte.', - 'content' => "Foi assim o [evento].\n\nValeu por vir.\n\nResumo completo na página.", - 'image_count' => 1, - 'image_keywords' => ['event recap', 'crowd'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_poll_this_or_that', - 'category' => 'engagement', - 'name' => 'Esta ou aquela', - 'description' => 'Story estilo enquete com duas opções.', - 'content' => "[Opção A] ou [Opção B]?\n\nResponda com sua escolha.\n\nLemos todas.", - 'image_count' => 1, - 'image_keywords' => ['poll', 'choice'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_dm_us', - 'category' => 'engagement', - 'name' => 'Manda DM', - 'description' => 'Convide seguidores a mandar mensagem.', - 'content' => "Manda DM.\n\n[Motivo pra falar com a {{brand_name}}].\n\nA gente responde rápido.", - 'image_count' => 1, - 'image_keywords' => ['message', 'chat'], - 'slides' => null, - ], - [ - 'slug' => 'fb_story_caption_this', - 'category' => 'engagement', - 'name' => 'Legenda essa', - 'description' => 'Pedido de legenda em aberto.', - 'content' => "Legenda essa.\n\n[Contexto da imagem].\n\nManda a sua melhor.", - 'image_count' => 1, - 'image_keywords' => ['fun', 'reaction'], - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/instagram_carousel.php b/templates/pt-BR/instagram_carousel.php deleted file mode 100644 index 9fb7616d..00000000 --- a/templates/pt-BR/instagram_carousel.php +++ /dev/null @@ -1,523 +0,0 @@ - 'feature_launch_carousel', - 'category' => 'product_launch', - 'name' => 'Lançamento de funcionalidade', - 'description' => 'Anuncie uma nova funcionalidade do produto em um carrossel de 5 slides.', - 'content' => 'A {{brand_name}} acabou de lançar algo que estamos animados pra mostrar. Arraste para ver o que tem de novo.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'O que tem de novo', 'body' => 'Uma olhada rápida na atualização mais recente.', 'image_keywords' => ['product', 'launch']], - ['title' => 'Como funciona', 'body' => 'Três passos e você já está usando.', 'image_keywords' => ['workflow']], - ['title' => 'Por que isso importa', 'body' => 'Mais rápido, mais simples, com menos cliques.', 'image_keywords' => ['speed']], - ['title' => 'Pra quem é', 'body' => 'Feito para times que entregam.', 'image_keywords' => ['team']], - ['title' => 'Experimente agora', 'body' => 'Disponível hoje. Link na bio.', 'image_keywords' => ['phone', 'app']], - ], - ], - [ - 'slug' => 'five_tips_carousel', - 'category' => 'educational', - 'name' => 'Carrossel de 5 dicas', - 'description' => 'Compartilhe cinco dicas práticas em um carrossel para arrastar.', - 'content' => '5 coisas que eu queria ter sabido antes sobre [tópico]. Salve pra ler depois. 👇', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Dica #1', 'body' => '[Primeira dica, seja específico e prático.]', 'image_keywords' => ['idea', 'lightbulb']], - ['title' => 'Dica #2', 'body' => '[Segunda dica, use um exemplo real se puder.]', 'image_keywords' => ['notebook']], - ['title' => 'Dica #3', 'body' => '[Terceira dica, seja curto.]', 'image_keywords' => ['focus']], - ['title' => 'Dica #4', 'body' => '[Quarta dica, algo surpreendente ou que vai contra o senso comum.]', 'image_keywords' => ['surprise']], - ['title' => 'Dica #5', 'body' => '[Quinta dica, termine forte com um aprendizado.]', 'image_keywords' => ['success']], - ], - ], - [ - 'slug' => 'process_reveal_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Revelação do processo', - 'description' => 'Mostre aos seguidores como você cria seu produto ou serviço.', - 'content' => 'Já se perguntou como [produto/serviço] é feito? Arraste para ver cada etapa. ✨', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Tudo começa com pesquisa', 'body' => 'Todo projeto começa entendendo o problema a fundo.', 'image_keywords' => ['research', 'desk']], - ['title' => 'Design e iteração', 'body' => 'A gente prototipa rápido e testa muito.', 'image_keywords' => ['design', 'sketch']], - ['title' => 'Construindo de verdade', 'body' => 'Capricho e precisão em cada detalhe.', 'image_keywords' => ['craft', 'build']], - ['title' => 'O resultado final', 'body' => 'Qualidade que você sente assim que usa.', 'image_keywords' => ['product', 'final']], - ], - ], - [ - 'slug' => 'quick_stat_carousel', - 'category' => 'industry_tip', - 'name' => 'Carrossel de estatísticas rápidas', - 'description' => 'Apresente dados do setor em um carrossel visual.', - 'content' => 'Os números de [setor] que todo profissional de marketing precisa acompanhar este ano. 📊', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Dado #1', 'body' => '[X]% de [público] dizem [descoberta]. Fonte: [fonte]', 'image_keywords' => ['chart', 'data']], - ['title' => 'Dado #2', 'body' => '[Y]% de aumento em [métrica] ano após ano.', 'image_keywords' => ['growth', 'graph']], - ['title' => 'Dado #3', 'body' => 'Até [ano], [projeção].', 'image_keywords' => ['future', 'trend']], - ['title' => 'O que isso significa pra você', 'body' => '[Conclusão prática com base nos dados acima.]', 'image_keywords' => ['action', 'plan']], - ], - ], - [ - 'slug' => 'event_recap_carousel', - 'category' => 'event', - 'name' => 'Resumo do evento', - 'description' => 'Recapitule os destaques de um evento ou conferência recente.', - 'content' => 'Acabamos de encerrar [Nome do Evento] e foi incrível. Veja os destaques. 🙌', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'Tudo começou com…', 'body' => '[Momento de abertura ou destaque da palestra principal.]', 'image_keywords' => ['conference', 'stage']], - ['title' => 'A palestra que todo mundo comentou', 'body' => '[Insight principal da palestra que se destacou.]', 'image_keywords' => ['presentation', 'crowd']], - ['title' => 'Conexão com a comunidade', 'body' => '[Destaque de networking ou momentos com participantes.]', 'image_keywords' => ['networking', 'people']], - ['title' => 'Até a próxima', 'body' => 'Siga a {{brand_name}} para novidades sobre nosso próximo evento.', 'image_keywords' => ['celebration']], - ], - ], - [ - 'slug' => 'product_lineup_carousel', - 'category' => 'product_launch', - 'name' => 'Revelação da linha de produtos', - 'description' => 'Revele uma linha completa de produtos, um item por slide.', - 'content' => 'Fizemos [número] coisas novas. Aqui vai a linha completa da {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'conheça a linha', 'body' => '[Número] peças novas, pensadas em conjunto. Cada uma resolve um problema específico.', 'image_keywords' => ['products', 'lineup']], - ['title' => 'peça um', 'body' => '[Nome do produto 1]. Ideal para [caso de uso].', 'image_keywords' => ['product', 'studio']], - ['title' => 'peça dois', 'body' => '[Nome do produto 2]. Combina com a peça um se você quer [benefício].', 'image_keywords' => ['object', 'detail']], - ['title' => 'peça três', 'body' => '[Nome do produto 3]. A que ficamos refazendo até ficar do jeito certo.', 'image_keywords' => ['craft', 'closeup']], - ['title' => 'compre o lançamento', 'body' => 'Disponível em [data]. Link na bio.', 'image_keywords' => ['shop', 'phone']], - ], - ], - [ - 'slug' => 'before_after_launch_carousel', - 'category' => 'product_launch', - 'name' => 'Antes e depois do lançamento', - 'description' => 'Mostre o upgrade da versão antiga para a nova.', - 'content' => 'Mesma ideia, refeita. Veja o que mudou no novo [produto] da {{brand_name}}.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'antes', 'body' => '[A versão antiga. O que ela fazia bem e onde deixava a desejar.]', 'image_keywords' => ['old', 'product']], - ['title' => 'depois', 'body' => '[A nova versão. Uma frase sobre a maior mudança.]', 'image_keywords' => ['new', 'product']], - ['title' => 'o que arrumamos', 'body' => '[Problema específico que os clientes contaram, e como resolvemos.]', 'image_keywords' => ['detail', 'redesign']], - ['title' => 'já disponível', 'body' => 'Encontre na loja. Link na bio.', 'image_keywords' => ['store', 'phone']], - ], - ], - [ - 'slug' => 'spec_breakdown_carousel', - 'category' => 'product_launch', - 'name' => 'Carrossel de especificações', - 'description' => 'Detalhe as especificações do produto em vários slides.', - 'content' => 'A ficha técnica completa do [produto]. Tudo que tem dentro, em um carrossel.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'conheça [produto]', 'body' => 'Feito para [caso de uso]. Disponível em [data].', 'image_keywords' => ['product', 'reveal']], - ['title' => 'materiais', 'body' => '[Detalhes dos materiais. De onde vem. Por que importa pro toque final.]', 'image_keywords' => ['materials', 'texture']], - ['title' => 'dimensões', 'body' => '[Tamanho, peso, notas de caimento. Os números que as pessoas vão querer antes de comprar.]', 'image_keywords' => ['measurement', 'detail']], - ['title' => 'como se comporta', 'body' => '[Número de desempenho principal. Bateria, autonomia, força de fixação, o que fizer sentido.]', 'image_keywords' => ['performance', 'test']], - ['title' => 'o que vem na caixa', 'body' => '[Liste os itens: produto, acessórios, manual, etc.]', 'image_keywords' => ['unboxing', 'box']], - ['title' => 'compre o seu', 'body' => 'Link na bio. Envio em [prazo].', 'image_keywords' => ['shipping', 'parcel']], - ], - ], - [ - 'slug' => 'flash_sale_carousel', - 'category' => 'promotion', - 'name' => 'Promoção relâmpago', - 'description' => 'Promova uma oferta por tempo limitado em vários slides.', - 'content' => '[Desconto]% de desconto nas próximas [horas] horas na {{brand_name}}. Leia todos os slides para não perder.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'promoção relâmpago no ar', 'body' => '[Desconto]% off até [data e hora final]. Sem código.', 'image_keywords' => ['sale', 'tag']], - ['title' => 'o que está incluso', 'body' => '[Categorias em promoção, exceções se houver. Seja honesto sobre o que não entra.]', 'image_keywords' => ['products', 'shop']], - ['title' => 'os mais queridos', 'body' => '[Dois ou três campeões de venda que as pessoas pegam primeiro quando tem promoção.]', 'image_keywords' => ['favorites', 'shelf']], - ['title' => 'compre antes que acabe', 'body' => 'Link na bio. Quando o estoque acabar, acabou.', 'image_keywords' => ['phone', 'cart']], - ], - ], - [ - 'slug' => 'bundle_deal_carousel', - 'category' => 'promotion', - 'name' => 'Carrossel de combo', - 'description' => 'Explique uma oferta de combo slide por slide.', - 'content' => 'Três coisas, um preço. Economize [valor] comprando juntas na {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'o combo', 'body' => '[Descrição rápida do que tem no combo e o total que se economiza.]', 'image_keywords' => ['bundle', 'box']], - ['title' => 'item um', 'body' => '[Primeiro item do combo e o que ele faz sozinho.]', 'image_keywords' => ['product', 'one']], - ['title' => 'item dois', 'body' => '[Segundo item e por que combina com o primeiro.]', 'image_keywords' => ['product', 'two']], - ['title' => 'item três', 'body' => '[Terceiro item. O que amarra o combo.]', 'image_keywords' => ['product', 'three']], - ['title' => 'leve o combo', 'body' => 'Economize [valor]. Disponível enquanto durar o estoque.', 'image_keywords' => ['bag', 'shopping']], - ], - ], - [ - 'slug' => 'first_order_discount_carousel', - 'category' => 'promotion', - 'name' => 'Desconto na primeira compra', - 'description' => 'Receba novos clientes com um desconto na primeira compra.', - 'content' => 'Novo por aqui? Use o código [CÓDIGO] para [desconto]% off na sua primeira compra na {{brand_name}}.', - 'image_count' => 3, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'oferta de boas-vindas', 'body' => '[Desconto]% off na primeira compra. Código: [CÓDIGO]. Válido por [duração].', 'image_keywords' => ['welcome', 'gift']], - ['title' => 'por onde as pessoas começam', 'body' => '[Um ou dois produtos que são bons pontos de partida pra novos clientes.]', 'image_keywords' => ['bestseller', 'product']], - ['title' => 'como usar', 'body' => 'Adicione ao carrinho, cole [CÓDIGO] no checkout. Link na bio.', 'image_keywords' => ['checkout', 'phone']], - ], - ], - [ - 'slug' => 'free_shipping_carousel', - 'category' => 'promotion', - 'name' => 'Final de semana com frete grátis', - 'description' => 'Promova um período limitado de frete grátis.', - 'content' => 'Frete grátis na {{brand_name}} só neste final de semana. Sem valor mínimo.', - 'image_count' => 3, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'final de semana com frete grátis', 'body' => 'De [sexta] a [domingo]. Sem código, sem pedido mínimo.', 'image_keywords' => ['shipping', 'box']], - ['title' => 'pra onde enviamos', 'body' => '[Regiões ou países incluídos. Deixe claro qualquer exceção.]', 'image_keywords' => ['map', 'globe']], - ['title' => 'aproveite o final de semana', 'body' => 'Toque no link na bio antes da meia-noite de [domingo] [fuso horário].', 'image_keywords' => ['cart', 'phone']], - ], - ], - [ - 'slug' => 'beginner_guide_carousel', - 'category' => 'educational', - 'name' => 'Carrossel guia para iniciantes', - 'description' => 'Ensine um tópico do zero até o primeiro resultado prático.', - 'content' => '[Tópico] para quem está começando do zero. Salve pra ler depois. 👇', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'comece por aqui', 'body' => 'Se [tópico] parece muito, esta é a versão que me ajudou quando eu era iniciante.', 'image_keywords' => ['beginner', 'notes']], - ['title' => 'o que é, na real', 'body' => '[Definição simples. Sem jargão. Uma frase basta.]', 'image_keywords' => ['concept', 'sketch']], - ['title' => 'por que importa', 'body' => '[O motivo concreto pelo qual um iniciante se daria o trabalho de aprender isso.]', 'image_keywords' => ['question', 'curious']], - ['title' => 'primeira coisa pra tentar', 'body' => '[Uma ação pequena e específica que dá pra fazer em menos de 10 minutos.]', 'image_keywords' => ['hands', 'desk']], - ['title' => 'erro comum', 'body' => '[A armadilha em que a maioria dos iniciantes cai. Seja específico.]', 'image_keywords' => ['mistake', 'fix']], - ['title' => 'pra onde ir depois', 'body' => '[Um livro, canal ou recurso da {{brand_name}} pro próximo passo.]', 'image_keywords' => ['library', 'resource']], - ], - ], - [ - 'slug' => 'common_mistakes_carousel', - 'category' => 'educational', - 'name' => 'Erros comuns', - 'description' => 'Mostre erros comuns e como corrigi-los.', - 'content' => '5 erros que eu vejo o tempo todo com [tópico]. O número 3 eu tive que aprender da pior forma.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'os erros', 'body' => 'Cinco coisas que as pessoas fazem errado com [tópico], e o que fazer no lugar.', 'image_keywords' => ['mistake', 'pen']], - ['title' => 'erro 1', 'body' => '[Primeiro erro. Depois a correção em uma frase.]', 'image_keywords' => ['error', 'paper']], - ['title' => 'erro 2', 'body' => '[Segundo erro e a correção.]', 'image_keywords' => ['confused', 'desk']], - ['title' => 'erro 3', 'body' => '[Terceiro erro. O que pega as pessoas de surpresa.]', 'image_keywords' => ['surprised', 'thought']], - ['title' => 'erro 4', 'body' => '[Quarto erro e a correção.]', 'image_keywords' => ['process', 'workspace']], - ['title' => 'erro 5', 'body' => '[Erro final. Termine com o que você faria no lugar.]', 'image_keywords' => ['solution', 'check']], - ], - ], - [ - 'slug' => 'glossary_carousel', - 'category' => 'educational', - 'name' => 'Carrossel glossário', - 'description' => 'Defina cinco termos do seu setor em linguagem simples.', - 'content' => '5 termos de [setor] explicados sem o jargão. Salve pra ler depois.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'jargão decifrado', 'body' => 'Cinco palavras de [setor] que as pessoas usam como se todo mundo já soubesse.', 'image_keywords' => ['dictionary', 'book']], - ['title' => '[termo 1]', 'body' => '[Definição simples. Uma frase de exemplo.]', 'image_keywords' => ['letters', 'text']], - ['title' => '[termo 2]', 'body' => '[Definição simples. Uma frase de exemplo.]', 'image_keywords' => ['letters', 'paper']], - ['title' => '[termo 3]', 'body' => '[Definição simples. Uma frase de exemplo.]', 'image_keywords' => ['note', 'pen']], - ['title' => '[termo 4]', 'body' => '[Definição simples. Uma frase de exemplo.]', 'image_keywords' => ['definition', 'page']], - ['title' => '[termo 5]', 'body' => '[Definição simples. Uma frase de exemplo.]', 'image_keywords' => ['glossary', 'open book']], - ], - ], - [ - 'slug' => 'step_by_step_tutorial_carousel', - 'category' => 'educational', - 'name' => 'Tutorial passo a passo', - 'description' => 'Mostre um pequeno tutorial em passos claros.', - 'content' => 'Como [tarefa] em [número] passos. Salve pra ter na próxima vez.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'o que você vai precisar', 'body' => '[Liste as ferramentas ou materiais. Seja breve.]', 'image_keywords' => ['tools', 'supplies']], - ['title' => 'passo 1', 'body' => '[Primeiro passo. Ação específica, não um objetivo.]', 'image_keywords' => ['hands', 'work']], - ['title' => 'passo 2', 'body' => '[Segundo passo. Como deve estar antes de seguir adiante.]', 'image_keywords' => ['progress', 'desk']], - ['title' => 'passo 3', 'body' => '[Terceiro passo. Cite o erro mais comum aqui.]', 'image_keywords' => ['focus', 'detail']], - ['title' => 'pronto', 'body' => '[Como deve ficar o resultado final. Uma ideia de foto.]', 'image_keywords' => ['finished', 'result']], - ], - ], - [ - 'slug' => 'team_intro_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Conheça o time', - 'description' => 'Apresente os membros do time, um slide por vez.', - 'content' => 'Os rostos por trás da {{brand_name}}. Arraste pra conhecer quem faz tudo acontecer.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'o time', 'body' => 'Somos [número] pessoas em [localidades]. Aqui está quem faz o quê.', 'image_keywords' => ['team', 'office']], - ['title' => '[nome 1]', 'body' => '[Cargo. Uma coisa que essa pessoa toca e uma que gosta de fazer fora do trabalho.]', 'image_keywords' => ['portrait', 'work']], - ['title' => '[nome 2]', 'body' => '[Cargo. Um detalhe que mostra a personalidade, não só o cargo.]', 'image_keywords' => ['portrait', 'desk']], - ['title' => '[nome 3]', 'body' => '[Cargo. Algo específico que ela fez este mês.]', 'image_keywords' => ['portrait', 'studio']], - ['title' => 'manda um oi', 'body' => 'Direct aberto. A gente responde em pessoa.', 'image_keywords' => ['phone', 'chat']], - ], - ], - [ - 'slug' => 'workspace_tour_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Tour pelo espaço', - 'description' => 'Faça um tour pelo seu estúdio, cozinha ou escritório em vários slides.', - 'content' => 'Um tour por onde a {{brand_name}} é feita de verdade. Menos arrumado do que você imagina.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'onde a coisa acontece', 'body' => '[Local, tamanho, que tipo de espaço é, em uma frase.]', 'image_keywords' => ['studio', 'workshop']], - ['title' => 'a bancada de trabalho', 'body' => '[O que vive na bancada ou mesa principal na maioria dos dias.]', 'image_keywords' => ['workbench', 'tools']], - ['title' => 'o canto que ninguém vê', 'body' => '[Detalhe honesto: uma estante bagunçada, uma parede de post-its, a estação de café.]', 'image_keywords' => ['corner', 'mess']], - ['title' => 'o lugar favorito', 'body' => '[A cadeira, a janela, a luz que deixa o dia melhor.]', 'image_keywords' => ['light', 'window']], - ['title' => 'volte logo', 'body' => 'Mais espiadinhas vindo. Siga a {{brand_name}} pra próxima.', 'image_keywords' => ['camera', 'door']], - ], - ], - [ - 'slug' => 'a_day_in_the_life_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Um dia na rotina', - 'description' => 'Mostre um dia de trabalho, da manhã à noite.', - 'content' => 'Um dia de verdade na {{brand_name}}, hora por hora. Sem montagem.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => '7h30', 'body' => '[Como o dia realmente começa. Café, caminhada, e-mails, o que for.]', 'image_keywords' => ['morning', 'coffee']], - ['title' => '9h', 'body' => '[Primeira coisa na agenda de trabalho. Seja específico sobre o que é feito.]', 'image_keywords' => ['desk', 'laptop']], - ['title' => '12h30', 'body' => '[Almoço. Onde, com quem, ou sozinho ouvindo podcast.]', 'image_keywords' => ['lunch', 'food']], - ['title' => '14h', 'body' => '[Bloco da tarde. A coisa que exige mais foco no dia.]', 'image_keywords' => ['focus', 'work']], - ['title' => '17h30', 'body' => '[Encerrando. Qual costuma ser a última tarefa antes de desligar.]', 'image_keywords' => ['evening', 'office']], - ['title' => 'fora do horário', 'body' => '[Como o dia termina. Corrida, jantar, filhos, leitura, o que for verdade.]', 'image_keywords' => ['sunset', 'home']], - ], - ], - [ - 'slug' => 'mistakes_we_made_carousel', - 'category' => 'behind_the_scenes', - 'name' => 'Erros que cometemos', - 'description' => 'Compartilhe três erros reais e o que aprendeu com eles.', - 'content' => '3 coisas que a gente errou este ano na {{brand_name}}. Compartilho porque esconder seria estranho.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'por que postar isso', 'body' => 'Vitórias recebem bastante atenção. Os erros são onde costumam estar as lições.', 'image_keywords' => ['notebook', 'writing']], - ['title' => 'erro 1', 'body' => '[O que tentamos. Por que não deu certo. O que fizemos depois.]', 'image_keywords' => ['error', 'desk']], - ['title' => 'erro 2', 'body' => '[O segundo. Seja honesto sobre o custo, em dinheiro ou tempo.]', 'image_keywords' => ['budget', 'paper']], - ['title' => 'erro 3 + o que vem agora', 'body' => '[Terceiro erro e uma coisa que está mudando por causa dele.]', 'image_keywords' => ['plan', 'reset']], - ], - ], - [ - 'slug' => 'customer_story_carousel', - 'category' => 'testimonial', - 'name' => 'História de cliente', - 'description' => 'Conte uma única história de cliente ao longo dos slides.', - 'content' => 'Uma história de um dos clientes da {{brand_name}}. Postado com a permissão dele.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'conheça [nome]', 'body' => '[Nome, o que faz, onde mora. Duas frases curtas.]', 'image_keywords' => ['portrait', 'person']], - ['title' => 'o problema', 'body' => '[A situação antes de usar a {{brand_name}}. Específica, não abstrata.]', 'image_keywords' => ['problem', 'thinking']], - ['title' => 'o que ele tentou', 'body' => '[Como encontrou a {{brand_name}} e como foi o primeiro uso.]', 'image_keywords' => ['discover', 'try']], - ['title' => 'o que mudou', 'body' => '[O resultado. Um número se você tiver, uma história se não tiver.]', 'image_keywords' => ['result', 'change']], - ['title' => 'nas palavras dele', 'body' => '"[Citação direta do cliente. Curta e real.]"', 'image_keywords' => ['quote', 'speech']], - ], - ], - [ - 'slug' => 'three_reviews_carousel', - 'category' => 'testimonial', - 'name' => 'Carrossel com três avaliações', - 'description' => 'Junte três avaliações reais em um carrossel.', - 'content' => 'Três avaliações de clientes reais este mês na {{brand_name}}.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'o que as pessoas estão dizendo', 'body' => 'Três citações sem editar deste mês. Nomes completos preservados quando solicitado.', 'image_keywords' => ['stars', 'review']], - ['title' => 'avaliação 1', 'body' => '"[Citação direta do cliente.]", [primeiro nome, localidade]', 'image_keywords' => ['speech', 'quote']], - ['title' => 'avaliação 2', 'body' => '"[Citação direta do cliente.]", [primeiro nome, localidade]', 'image_keywords' => ['feedback', 'note']], - ['title' => 'avaliação 3', 'body' => '"[Citação direta do cliente.]", [primeiro nome, localidade]', 'image_keywords' => ['testimonial', 'paper']], - ], - ], - [ - 'slug' => 'before_after_results_carousel', - 'category' => 'testimonial', - 'name' => 'Resultados antes e depois', - 'description' => 'Mostre um resultado de cliente em slides de antes e depois.', - 'content' => 'Um resultado real de um cliente usando [produto/serviço] na {{brand_name}}. Mesma pessoa, [período] de diferença.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'o ponto de partida', 'body' => '[Onde estava no começo. A versão honesta, não a polida.]', 'image_keywords' => ['before', 'start']], - ['title' => 'o que ele fez', 'body' => '[O que usou e com que frequência. Seja específico sobre a rotina.]', 'image_keywords' => ['process', 'routine']], - ['title' => 'o resultado', 'body' => '[Onde está agora. Números se for relevante, foto se for visual.]', 'image_keywords' => ['after', 'result']], - ['title' => 'nas palavras dele', 'body' => '"[Uma citação curta sobre o que mais surpreendeu.]"', 'image_keywords' => ['quote', 'smile']], - ], - ], - [ - 'slug' => 'industry_myth_busting_carousel', - 'category' => 'industry_tip', - 'name' => 'Derrubando mitos do setor', - 'description' => 'Derrube três mitos sobre o seu setor.', - 'content' => '3 coisas que as pessoas ainda acreditam sobre [setor] e que não são verdade.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'mitos, desmontados', 'body' => 'Três crenças sobre [setor] que se repetem em todo lugar e ainda erram a mão.', 'image_keywords' => ['question', 'thinking']], - ['title' => 'mito 1', 'body' => 'Mito: [crença comum]. Verdade: [como é de fato, com um detalhe].', 'image_keywords' => ['truth', 'note']], - ['title' => 'mito 2', 'body' => 'Mito: [crença comum]. Verdade: [a correção em uma frase].', 'image_keywords' => ['fact', 'paper']], - ['title' => 'mito 3', 'body' => 'Mito: [crença comum]. Verdade: [a correção]. O porquê está nos comentários.', 'image_keywords' => ['comment', 'phone']], - ], - ], - [ - 'slug' => 'industry_trend_carousel', - 'category' => 'industry_tip', - 'name' => 'Carrossel de tendência do setor', - 'description' => 'Apresente uma tendência que está moldando o setor este ano.', - 'content' => 'O que está realmente se mexendo em [setor] este ano, em linguagem simples.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'a tendência', 'body' => '[Nomeie a tendência em palavras simples. Uma frase sobre o que é.]', 'image_keywords' => ['trend', 'graph']], - ['title' => 'por que agora', 'body' => '[A causa específica. Uma regulação, uma mudança técnica, uma mudança de comportamento.]', 'image_keywords' => ['cause', 'news']], - ['title' => 'quem sente primeiro', 'body' => '[O público ou tipo de empresa que sente antes dos outros.]', 'image_keywords' => ['audience', 'people']], - ['title' => 'o que fazer', 'body' => '[Uma coisa concreta pra testar neste trimestre, não um princípio vago.]', 'image_keywords' => ['action', 'plan']], - ['title' => 'um número pra acompanhar', 'body' => '[Uma métrica específica, com fonte.]', 'image_keywords' => ['metric', 'data']], - ], - ], - [ - 'slug' => 'pro_tip_carousel', - 'category' => 'industry_tip', - 'name' => 'Carrossel de dica de profissional', - 'description' => 'Compartilhe uma única dica de profissional com contexto e passos.', - 'content' => 'Uma coisa que eu diria pra mim mesmo mais novo sobre [tópico]. Salve se ajudar.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'a dica', 'body' => '[A versão de uma frase. Curta o suficiente pra lembrar.]', 'image_keywords' => ['tip', 'note']], - ['title' => 'por que funciona', 'body' => '[O motivo. Use um exemplo pequeno, não uma afirmação grande.]', 'image_keywords' => ['idea', 'thought']], - ['title' => 'como usar', 'body' => '[Os passos. No máximo três. Específicos.]', 'image_keywords' => ['steps', 'list']], - ['title' => 'uma coisa pra evitar', 'body' => '[O erro que as pessoas cometem ao aplicar essa dica.]', 'image_keywords' => ['warning', 'caution']], - ], - ], - [ - 'slug' => 'event_announcement_carousel', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncie um evento próximo com os detalhes principais.', - 'content' => 'Vamos sediar [Nome do Evento] em [data]. Tudo que você precisa saber está nos slides.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => '[nome do evento]', 'body' => '[Data, local ou online, pra quem é, em uma linha.]', 'image_keywords' => ['event', 'invite']], - ['title' => 'o que está programado', 'body' => '[A agenda em tópicos diretos, sem marketing.]', 'image_keywords' => ['agenda', 'schedule']], - ['title' => 'quem vai falar', 'body' => '[Nomes e bios em uma linha. No máximo três.]', 'image_keywords' => ['speakers', 'panel']], - ['title' => 'como participar', 'body' => '[Gratuito ou pago, link, prazo se houver. Seja específico.]', 'image_keywords' => ['ticket', 'register']], - ['title' => 'garanta seu lugar', 'body' => '[Lembrete final + chamada pro link na bio.]', 'image_keywords' => ['phone', 'tap']], - ], - ], - [ - 'slug' => 'event_speakers_carousel', - 'category' => 'event', - 'name' => 'Revelação dos palestrantes', - 'description' => 'Revele os palestrantes, um por slide.', - 'content' => 'Palestrantes do [Nome do Evento]. Os ingressos estão abertos na {{brand_name}}.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'palestrantes revelados', 'body' => 'O lineup do [Nome do Evento] em [data]. Arraste pra conhecer.', 'image_keywords' => ['lineup', 'stage']], - ['title' => '[palestrante 1]', 'body' => '[Nome, cargo. A coisa principal sobre a qual vai falar.]', 'image_keywords' => ['portrait', 'speaker']], - ['title' => '[palestrante 2]', 'body' => '[Nome, cargo. O tema da palestra em uma linha.]', 'image_keywords' => ['portrait', 'mic']], - ['title' => '[palestrante 3]', 'body' => '[Nome, cargo. O que os participantes vão levar.]', 'image_keywords' => ['portrait', 'panel']], - ['title' => 'ingressos na bio', 'body' => '[Data, local, link de inscrição.]', 'image_keywords' => ['ticket', 'register']], - ], - ], - [ - 'slug' => 'workshop_invitation_carousel', - 'category' => 'event', - 'name' => 'Convite para workshop', - 'description' => 'Convide as pessoas para um workshop prático.', - 'content' => 'Workshop prático na {{brand_name}} em [data]. Vagas limitadas. Veja o que tem dentro.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'workshop em [data]', 'body' => '[Tema em uma linha. Online ou presencial, com local e horário.]', 'image_keywords' => ['workshop', 'class']], - ['title' => 'o que você vai fazer', 'body' => '[Três atividades concretas. Use verbos, não adjetivos.]', 'image_keywords' => ['hands', 'making']], - ['title' => 'o que você vai levar', 'body' => '[O resultado: uma coisa pronta, um rascunho, uma decisão, um plano.]', 'image_keywords' => ['notebook', 'result']], - ['title' => 'reserve sua vaga', 'body' => '[Vagas restantes, preço se houver, link na bio.]', 'image_keywords' => ['chair', 'register']], - ], - ], - [ - 'slug' => 'this_or_that_carousel', - 'category' => 'engagement', - 'name' => 'Esse ou aquele', - 'description' => 'Faça aos seguidores uma série de perguntas de escolha.', - 'content' => 'Esse ou aquele, edição [tópico]. Conta nos comentários quais você escolhe.', - 'image_count' => 5, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'escolha um', 'body' => 'Cinco escolhas rápidas. Comente as respostas em ordem.', 'image_keywords' => ['choice', 'fork']], - ['title' => '[opção a] ou [opção b]', 'body' => '[Contexto rápido se precisar.]', 'image_keywords' => ['split', 'options']], - ['title' => '[opção c] ou [opção d]', 'body' => '[Contexto rápido se precisar.]', 'image_keywords' => ['versus', 'choice']], - ['title' => '[opção e] ou [opção f]', 'body' => '[Contexto rápido se precisar.]', 'image_keywords' => ['compare', 'pick']], - ['title' => 'sua vez', 'body' => 'Deixa as respostas aí embaixo. Eu leio cada comentário.', 'image_keywords' => ['comment', 'phone']], - ], - ], - [ - 'slug' => 'unpopular_opinion_carousel', - 'category' => 'engagement', - 'name' => 'Opinião impopular', - 'description' => 'Compartilhe uma opinião real e convide à discordância.', - 'content' => 'Uma opinião impopular sobre [tópico]. Me conta nos comentários onde estou errado.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'opinião impopular', 'body' => '[A opinião em uma frase curta e clara.]', 'image_keywords' => ['opinion', 'speech']], - ['title' => 'por que penso assim', 'body' => '[O motivo. Uma história pequena ou um número, não só sentimentos.]', 'image_keywords' => ['reason', 'thinking']], - ['title' => 'onde posso estar errado', 'body' => '[Honesto sobre a parte mais fraca do argumento.]', 'image_keywords' => ['doubt', 'question']], - ['title' => 'me conta', 'body' => 'Concorda, discorda, está em cima do muro, deixa nos comentários.', 'image_keywords' => ['comment', 'discussion']], - ], - ], - [ - 'slug' => 'fill_in_the_blank_carousel', - 'category' => 'engagement', - 'name' => 'Complete a frase', - 'description' => 'Provoque os seguidores com três frases para completar.', - 'content' => 'Complete as frases. Quero ler as suas respostas.', - 'image_count' => 4, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'complete as frases', 'body' => 'Três provocações rápidas sobre [tópico]. Comente as respostas em ordem.', 'image_keywords' => ['blank', 'pen']], - ['title' => 'frase 1', 'body' => 'A melhor [coisa] que eu [verbo] este ano foi ____.', 'image_keywords' => ['idea', 'thought']], - ['title' => 'frase 2', 'body' => 'O que eu quero fazer mais em [tópico] é ____.', 'image_keywords' => ['plan', 'goal']], - ['title' => 'frase 3', 'body' => 'Uma pessoa que me ensinou sobre [tópico] foi ____.', 'image_keywords' => ['mentor', 'people']], - ], - ], - [ - 'slug' => 'q_and_a_carousel', - 'category' => 'engagement', - 'name' => 'Carrossel de perguntas e respostas', - 'description' => 'Responda cinco perguntas reais do seu público.', - 'content' => 'Você perguntou, eu respondi. Cinco perguntas reais que chegaram no direct.', - 'image_count' => 6, - 'image_keywords' => null, - 'slides' => [ - ['title' => 'perguntas respondidas', 'body' => 'Peguei cinco desta semana. Anonimizei onde precisei.', 'image_keywords' => ['questions', 'mail']], - ['title' => 'p1', 'body' => 'P: [pergunta parafraseada]. R: [resposta em uma ou duas frases].', 'image_keywords' => ['answer', 'note']], - ['title' => 'p2', 'body' => 'P: [pergunta parafraseada]. R: [resposta].', 'image_keywords' => ['reply', 'speech']], - ['title' => 'p3', 'body' => 'P: [pergunta parafraseada]. R: [resposta].', 'image_keywords' => ['question', 'mark']], - ['title' => 'p4', 'body' => 'P: [pergunta parafraseada]. R: [resposta].', 'image_keywords' => ['chat', 'bubble']], - ['title' => 'p5', 'body' => 'P: [pergunta parafraseada]. R: [resposta]. Manda mais nos comentários.', 'image_keywords' => ['comments', 'phone']], - ], - ], -]; diff --git a/templates/pt-BR/instagram_feed.php b/templates/pt-BR/instagram_feed.php deleted file mode 100644 index 09289285..00000000 --- a/templates/pt-BR/instagram_feed.php +++ /dev/null @@ -1,362 +0,0 @@ - 'limited_time_offer_feed', - 'category' => 'promotion', - 'name' => 'Oferta por tempo limitado', - 'description' => 'Divulgue uma promoção com prazo no Instagram Feed.', - 'content' => "⏰ Não perca. {{brand_name}} está com [desconto]% off em [produto/serviço], só hoje.\n\nClique no link da bio para garantir o seu antes que acabe.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'offer', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'team_behind_the_scenes_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Bastidores do time', - 'description' => 'Humanize sua marca mostrando o time em ação.', - 'content' => "É assim que é um dia normal na {{brand_name}}. 👀\n\nA gente acredita que bom trabalho acontece quando as pessoas se sentem em casa. Aqui vai uma espiada nos bastidores.\n\n#{{brand_name}} #BehindTheScenes", - 'image_count' => 1, - 'image_keywords' => ['office', 'team', 'workspace'], - 'slides' => null, - ], - - // Product launch - [ - 'slug' => 'new_product_drop_feed', - 'category' => 'product_launch', - 'name' => 'Lançamento de novo produto', - 'description' => 'Anuncie o lançamento de um produto novo no feed.', - 'content' => "Chegou. [Nome do produto] acaba de entrar na {{brand_name}}.\n\nA gente passou [meses/semanas] nesse projeto. Cada detalhe foi testado pelo time antes de liberar para o público.\n\nClique no link da bio e seja um dos primeiros a testar.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'unboxing'], - 'slides' => null, - ], - [ - 'slug' => 'pre_order_announcement_feed', - 'category' => 'product_launch', - 'name' => 'Anúncio de pré-venda', - 'description' => 'Abra pré-vendas para um produto que está chegando.', - 'content' => "Pré-vendas abertas. [Nome do produto] começa a ser enviado em [data].\n\nO primeiro lote tem [número] unidades. Quando acabarem, a próxima leva só sai em [data posterior].\n\nReserve o seu pelo link da bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'package', 'box'], - 'slides' => null, - ], - [ - 'slug' => 'feature_highlight_launch_feed', - 'category' => 'product_launch', - 'name' => 'Destaque de funcionalidade', - 'description' => 'Mostre uma funcionalidade específica de um produto novo.', - 'content' => "O que mais nos deixa orgulhosos no [nome do produto]: [funcionalidade específica].\n\nForam [número] protótipos até acertar. Os testadores nos disseram que isso mudou a forma como eles [caso de uso], então a gente continuou ajustando até parecer óbvio.\n\nVeja em ação pelo link da bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'detail', 'closeup'], - 'slides' => null, - ], - [ - 'slug' => 'product_restock_feed', - 'category' => 'product_launch', - 'name' => 'Produto reposto', - 'description' => 'Anuncie a volta ao estoque de um item popular.', - 'content' => "Voltou ao estoque. [Nome do produto] esgotou em [tempo] na última vez, então a gente fez mais.\n\nSe você perdeu antes, agora é a hora. O estoque é limitado de novo, e a gente espera mais uma corrida rápida.\n\nGaranta o seu pelo link da bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'shelf', 'inventory'], - 'slides' => null, - ], - - // Promotion - [ - 'slug' => 'flash_sale_feed', - 'category' => 'promotion', - 'name' => 'Flash sale', - 'description' => 'Crie urgência com um flash sale curto.', - 'content' => "Flash sale. [Desconto]% off em tudo nas próximas [horas] horas.\n\nNão precisa de cupom no checkout. O desconto já está aplicado no site inteiro.\n\nLink na bio. Coloca um cronômetro.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'shopping'], - 'slides' => null, - ], - [ - 'slug' => 'bundle_deal_feed', - 'category' => 'promotion', - 'name' => 'Combo promocional', - 'description' => 'Divulgue uma oferta de combo com vários produtos.', - 'content' => "Compre [item A] e [item B] juntos e economize [valor].\n\nÉ a mesma combinação que nosso time usa toda semana, então a gente montou como kit. Sai mais barato do que comprar separado.\n\nLink na bio.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'products', 'gift'], - 'slides' => null, - ], - [ - 'slug' => 'free_shipping_feed', - 'category' => 'promotion', - 'name' => 'Frete grátis', - 'description' => 'Anuncie frete grátis por uma janela limitada.', - 'content' => "Frete grátis em todos os pedidos esta semana.\n\nSem mínimo, sem cupom, sem letrinha miúda no rodapé que você precisa apertar os olhos para ler. Escolhe o que quer e a gente cobre a entrega.\n\nLink na bio. Termina [dia].", - 'image_count' => 1, - 'image_keywords' => ['shipping', 'package', 'delivery'], - 'slides' => null, - ], - [ - 'slug' => 'first_order_discount_feed', - 'category' => 'promotion', - 'name' => 'Desconto na primeira compra', - 'description' => 'Receba novos clientes com desconto na primeira compra.', - 'content' => "Primeira vez na {{brand_name}}? Ganhe [desconto]% off no seu primeiro pedido.\n\nUse o código [CÓDIGO] no checkout. Vale para qualquer produto da loja, inclusive o [nome do bestseller] que todo mundo pergunta.\n\nLink na bio.", - 'image_count' => 1, - 'image_keywords' => ['welcome', 'shop', 'discount'], - 'slides' => null, - ], - - // Educational - [ - 'slug' => 'quick_how_to_tip_feed', - 'category' => 'educational', - 'name' => 'Dica rápida de como fazer', - 'description' => 'Compartilhe uma dica prática do seu nicho.', - 'content' => "Uma coisinha que facilita [tarefa]: [dica em uma frase].\n\nA gente começou a fazer isso depois de [motivo ou história]. Economizou [tempo/dinheiro/esforço] em uma semana.\n\nSalva esse post para depois. Link na bio para o guia completo.", - 'image_count' => 1, - 'image_keywords' => ['notebook', 'desk', 'work'], - 'slides' => null, - ], - [ - 'slug' => 'common_mistake_feed', - 'category' => 'educational', - 'name' => 'Erro comum', - 'description' => 'Aponte um erro frequente e como corrigir.', - 'content' => "O erro que mais vemos com [tópico]: [o erro].\n\nÉ fácil de cometer. A maioria das pessoas nem percebe que isso custa [consequência] até alguém apontar.\n\nA solução é simples: [a solução]. Tenta essa semana e vê o que muda.", - 'image_count' => 1, - 'image_keywords' => ['warning', 'thinking', 'desk'], - 'slides' => null, - ], - [ - 'slug' => 'myth_vs_truth_feed', - 'category' => 'educational', - 'name' => 'Mito vs verdade', - 'description' => 'Desconstrua um mito comum do seu setor.', - 'content' => "Mito: [crença comum sobre seu setor].\n\nVerdade: [a realidade, com um detalhe que comprova].\n\nA gente também acreditava no mito. Aí monitoramos por [período] e os dados disseram outra coisa. Salva se você já ouviu a mesma história.", - 'image_count' => 1, - 'image_keywords' => ['question', 'thinking', 'idea'], - 'slides' => null, - ], - [ - 'slug' => 'glossary_term_feed', - 'category' => 'educational', - 'name' => 'Termo do glossário explicado', - 'description' => 'Explique um termo do setor em linguagem simples.', - 'content' => "[Termo]: o que isso significa de verdade.\n\nA maioria dos guias explica com mais jargão. Aqui vai a versão direta: [definição em uma frase].\n\nUm exemplo real do nosso trabalho: [exemplo curto]. Salva esse post se você fica balançando a cabeça em reuniões sem perguntar.", - 'image_count' => 1, - 'image_keywords' => ['book', 'glossary', 'study'], - 'slides' => null, - ], - - // Behind the scenes - [ - 'slug' => 'workspace_tour_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Tour pelo espaço de trabalho', - 'description' => 'Mostre o lugar onde o trabalho acontece.', - 'content' => "Onde o trabalho acontece.\n\nEsse é [sala/espaço] da {{brand_name}}. A planta no canto sobreviveu a três mudanças de escritório. O quadro branco não é apagado desde [mês].\n\nNão é polido, mas é nosso.", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'desk', 'studio'], - 'slides' => null, - ], - [ - 'slug' => 'how_its_made_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Como é feito', - 'description' => 'Mostre uma etapa do seu processo de produção.', - 'content' => "Esse é o passo [número] de como a gente faz [produto].\n\nLeva uns [tempo] e fazemos à mão. Sem atalhos por aqui, principalmente porque a gente tentou um atalho uma vez e arruinou um lote inteiro.\n\nMais sobre o processo no link da bio.", - 'image_count' => 1, - 'image_keywords' => ['craft', 'making', 'workshop'], - 'slides' => null, - ], - [ - 'slug' => 'team_member_intro_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Apresentação de membro do time', - 'description' => 'Apresente um integrante do time.', - 'content' => "Conheça [nome], nosso(a) [cargo] na {{brand_name}}.\n\n[Nome] entrou no time há [tempo] e cuida de [área]. Fora do trabalho, dá para encontrá-lo(a) [hobby ou interesse].\n\nSe você mandou e-mail para o suporte recentemente, tem uma boa chance de ter sido [nome] respondendo.", - 'image_count' => 1, - 'image_keywords' => ['portrait', 'team', 'person'], - 'slides' => null, - ], - [ - 'slug' => 'a_day_in_the_life_feed', - 'category' => 'behind_the_scenes', - 'name' => 'Um dia na vida', - 'description' => 'Mostre como é um dia normal na empresa.', - 'content' => "Uma terça normal na {{brand_name}}.\n\nDe manhã o ambiente é tranquilo, basicamente e-mails e uma daily. À tarde fica barulhento quando [atividade] começa. Lá pelas 17h alguém já quebrou alguma coisa e outra pessoa já consertou.\n\nSinceramente, esse é o trabalho inteiro.", - 'image_count' => 1, - 'image_keywords' => ['office', 'work', 'coffee'], - 'slides' => null, - ], - - // Testimonial - [ - 'slug' => 'customer_quote_feed', - 'category' => 'testimonial', - 'name' => 'Citação de cliente', - 'description' => 'Compartilhe uma citação forte de cliente.', - 'content' => "\"[Citação do cliente nas próprias palavras].\", [Nome do cliente], [cidade ou cargo]\n\nEssa chegou semana passada e a gente precisou compartilhar. Obrigado(a) [primeiro nome].\n\nSe a {{brand_name}} te ajudou com [resultado], a gente adoraria saber. Responda ou manda DM.", - 'image_count' => 1, - 'image_keywords' => ['quote', 'happy', 'customer'], - 'slides' => null, - ], - [ - 'slug' => 'before_after_result_feed', - 'category' => 'testimonial', - 'name' => 'Resultado antes e depois', - 'description' => 'Destaque uma transformação real de cliente.', - 'content' => "Antes: [ponto de partida].\nDepois: [resultado, com número se possível].\n\n[Nome do cliente] trabalhou com a gente por [período]. A mudança não foi de uma hora para outra, mas dá para ver onde as coisas viraram.\n\nLink na bio se você quer um resultado parecido.", - 'image_count' => 1, - 'image_keywords' => ['transformation', 'result', 'progress'], - 'slides' => null, - ], - [ - 'slug' => 'star_rating_review_feed', - 'category' => 'testimonial', - 'name' => 'Avaliação cinco estrelas', - 'description' => 'Destaque uma avaliação cinco estrelas recente.', - 'content' => "★★★★★\n\n\"[Trecho da avaliação, duas a três frases].\"\n\n[Primeiro nome] deixou essa ontem. A gente lê toda avaliação que chega, as gentis e as duras.\n\nDeixe a sua pelo link da bio.", - 'image_count' => 1, - 'image_keywords' => ['stars', 'review', 'rating'], - 'slides' => null, - ], - [ - 'slug' => 'case_study_snapshot_feed', - 'category' => 'testimonial', - 'name' => 'Resumo de case', - 'description' => 'Antecipe um case de sucesso de cliente.', - 'content' => "Como [cliente ou empresa] usou a {{brand_name}} para [resultado].\n\nEm [período], saíram de [ponto inicial] para [resultado]. O case completo conta o que tentaram primeiro e o que finalmente funcionou.\n\nLink na bio para ver o case.", - 'image_count' => 1, - 'image_keywords' => ['case study', 'meeting', 'results'], - 'slides' => null, - ], - - // Industry tip - [ - 'slug' => 'one_tool_we_use_feed', - 'category' => 'industry_tip', - 'name' => 'Uma ferramenta que usamos', - 'description' => 'Recomende uma ferramenta que você usa de verdade.', - 'content' => "Uma ferramenta que usamos toda semana: [nome da ferramenta].\n\nTestamos [número] alternativas antes de ficar com essa. O que conquistou a gente foi [funcionalidade específica], não o marketing da página inicial.\n\nNão é publi. É só útil.", - 'image_count' => 1, - 'image_keywords' => ['tools', 'software', 'laptop'], - 'slides' => null, - ], - [ - 'slug' => 'industry_trend_take_feed', - 'category' => 'industry_tip', - 'name' => 'Opinião sobre tendência do setor', - 'description' => 'Dê uma opinião honesta sobre uma tendência atual.', - 'content' => "Todo mundo em [setor] está falando sobre [tendência].\n\nOpinião sincera: serve para [caso de uso], não serve para [outro caso de uso]. A gente testou em um projeto pequeno antes de assumir, e essa é a versão que recomendamos.\n\nQual foi a sua experiência? Conta nos comentários.", - 'image_count' => 1, - 'image_keywords' => ['trend', 'industry', 'analysis'], - 'slides' => null, - ], - [ - 'slug' => 'pricing_advice_feed', - 'category' => 'industry_tip', - 'name' => 'Conselho sobre preço', - 'description' => 'Compartilhe uma lição de preço da sua experiência.', - 'content' => "O que a gente errou em precificação: [o erro].\n\nCobramos pouco demais por [período] até alguém apontar que os números não fechavam. Subimos os preços [percentual], perdemos [número] clientes, mantivemos o restante e ganhamos mais.\n\nSe você está travado nisso, o link da bio tem nossa análise de preços.", - 'image_count' => 1, - 'image_keywords' => ['money', 'price', 'calculator'], - 'slides' => null, - ], - [ - 'slug' => 'workflow_tip_feed', - 'category' => 'industry_tip', - 'name' => 'Dica de fluxo de trabalho', - 'description' => 'Compartilhe uma melhoria pequena no fluxo de trabalho.', - 'content' => "Uma mudança pequena no fluxo que economizou horas: [a mudança].\n\nAntes, [forma antiga]. Depois, [forma nova]. Levou uma semana para a gente se acostumar e nunca mais voltamos atrás.\n\nSe você testar, conta como foi.", - 'image_count' => 1, - 'image_keywords' => ['workflow', 'productivity', 'planner'], - 'slides' => null, - ], - - // Event - [ - 'slug' => 'event_announcement_feed', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncie um evento que está chegando.', - 'content' => "Marca na agenda.\n\n{{brand_name}} vai realizar [nome do evento] em [data] em [local ou online].\n\nVão ter [palestrantes, formato ou o que esperar]. As vagas estão limitadas a [número] desta vez.\n\nConfirme presença pelo link da bio.", - 'image_count' => 1, - 'image_keywords' => ['event', 'invitation', 'calendar'], - 'slides' => null, - ], - [ - 'slug' => 'webinar_invite_feed', - 'category' => 'event', - 'name' => 'Convite para webinar', - 'description' => 'Divulgue um webinar que está chegando.', - 'content' => "Webinar gratuito: [tema]. [Data] às [horário].\n\n[Nome do host] vai passar por [pontos principais] e depois responder perguntas ao vivo nos últimos [minutos].\n\nSe não conseguir comparecer, se inscreva mesmo assim e a gente envia a gravação.\n\nLink na bio.", - 'image_count' => 1, - 'image_keywords' => ['webinar', 'laptop', 'presentation'], - 'slides' => null, - ], - [ - 'slug' => 'meetup_recap_feed', - 'category' => 'event', - 'name' => 'Resumo do meetup', - 'description' => 'Resuma um evento presencial recente.', - 'content' => "[Número] pessoas, [cidade], uma sala.\n\nO meetup de ontem reuniu gente que trabalha com [área]. A melhor conversa da noite foi sobre [tema], começou no café e nunca terminou de fato.\n\nObrigado a todo mundo que apareceu. O próximo é em [data].", - 'image_count' => 1, - 'image_keywords' => ['meetup', 'crowd', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'live_stream_reminder_feed', - 'category' => 'event', - 'name' => 'Lembrete de live', - 'description' => 'Lembre seguidores de uma live que vem aí.', - 'content' => "Live [dia] às [horário].\n\nA gente vai falar sobre [tema]. Sem roteiro, só perguntas e o que o chat jogar para a gente.\n\nLiga as notificações para não perder. Ou não liga, o replay vai ficar no perfil depois.", - 'image_count' => 1, - 'image_keywords' => ['live', 'broadcast', 'camera'], - 'slides' => null, - ], - - // Engagement - [ - 'slug' => 'this_or_that_feed', - 'category' => 'engagement', - 'name' => 'Esse ou aquele', - 'description' => 'Faça uma pergunta simples de escolha entre dois.', - 'content' => "[Opção A] ou [Opção B]?\n\nA gente discute isso no escritório toda semana. Curioso para ver qual lado vence aqui.\n\nVote nos comentários. Não tem resposta errada, mas tem uma certa.", - 'image_count' => 1, - 'image_keywords' => ['choice', 'options', 'vote'], - 'slides' => null, - ], - [ - 'slug' => 'fill_in_the_blank_feed', - 'category' => 'engagement', - 'name' => 'Complete a frase', - 'description' => 'Provoque os seguidores com uma frase para completar.', - 'content' => "Complete a frase: \"A primeira coisa que faço toda manhã é ___.\"\n\nA gente perguntou para o time e recebeu de \"checar o Slack\" até \"evitar checar o Slack\". Curioso para saber onde você se encaixa.\n\nDeixe a sua nos comentários.", - 'image_count' => 1, - 'image_keywords' => ['question', 'morning', 'coffee'], - 'slides' => null, - ], - [ - 'slug' => 'comment_question_feed', - 'category' => 'engagement', - 'name' => 'Pergunta nos comentários', - 'description' => 'Faça uma pergunta aberta para gerar comentários.', - 'content' => "Pergunta para a galera: qual foi o melhor [item relacionado ao tema] que você testou esse ano?\n\nA gente está montando uma lista e quer escolhas reais, não as cinco que todo mundo cita.\n\nDeixe a sua aí embaixo. Compartilhamos as favoritas semana que vem.", - 'image_count' => 1, - 'image_keywords' => ['conversation', 'community', 'chat'], - 'slides' => null, - ], - [ - 'slug' => 'tag_a_friend_feed', - 'category' => 'engagement', - 'name' => 'Marca um amigo', - 'description' => 'Incentive marcações com um cenário identificável.', - 'content' => "Marca o amigo que [cenário identificável].\n\nTodo mundo tem um. Talvez você seja um. De qualquer jeito, esse post é para essa pessoa.\n\nPontos extras se ele te marcar de volta.", - 'image_count' => 1, - 'image_keywords' => ['friends', 'people', 'fun'], - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/instagram_story.php b/templates/pt-BR/instagram_story.php deleted file mode 100644 index c5d1f674..00000000 --- a/templates/pt-BR/instagram_story.php +++ /dev/null @@ -1,362 +0,0 @@ - 'story_announcement', - 'category' => 'product_launch', - 'name' => 'Aviso rápido', - 'description' => 'Chame atenção para um lançamento ou novidade com um Story de 24 horas.', - 'content' => "Novidade na {{brand_name}}.\n\nToque no link para ver o que mudou.", - 'image_count' => 1, - 'image_keywords' => ['announcement', 'launch'], - 'slides' => null, - ], - [ - 'slug' => 'story_poll_question', - 'category' => 'engagement', - 'name' => 'Enquete rápida', - 'description' => 'Use um Story para fazer uma pergunta rápida e engajar a audiência.', - 'content' => "O que mais importa quando você escolhe um [produto/serviço]?\n\nToque para votar.", - 'image_count' => 1, - 'image_keywords' => ['question', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'story_flash_promo', - 'category' => 'promotion', - 'name' => 'Promoção relâmpago', - 'description' => 'Oferta por tempo limitado em formato de Story com urgência.', - 'content' => "Só por 24 horas.\n\n[Desconto]% off na {{brand_name}}.\n\nArraste para cima.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'urgency'], - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'story_product_drop', - 'category' => 'product_launch', - 'name' => 'Lançamento de produto', - 'description' => 'Avise que um produto novo entrou no ar hoje.', - 'content' => "Está no ar.\n\n[Nome do produto] acabou de sair.\n\nLink na bio.", - 'image_count' => 1, - 'image_keywords' => ['product', 'launch', 'new'], - 'slides' => null, - ], - [ - 'slug' => 'story_feature_shipped', - 'category' => 'product_launch', - 'name' => 'Recurso liberado', - 'description' => 'Conte aos seguidores sobre um recurso novo que você acabou de soltar.', - 'content' => "Acabamos de soltar [recurso].\n\nVá testar.", - 'image_count' => 1, - 'image_keywords' => ['update', 'feature', 'app'], - 'slides' => null, - ], - [ - 'slug' => 'story_waitlist_open', - 'category' => 'product_launch', - 'name' => 'Lista de espera aberta', - 'description' => 'Convide seguidores a entrar na lista de espera.', - 'content' => "Lista de espera aberta.\n\n[Vagas] vagas restantes.\n\nLink na bio.", - 'image_count' => 1, - 'image_keywords' => ['waitlist', 'signup'], - 'slides' => null, - ], - [ - 'slug' => 'story_preorder_live', - 'category' => 'product_launch', - 'name' => 'Pré-venda no ar', - 'description' => 'Estimule pré-vendas de um produto que vem por aí.', - 'content' => "Pré-vendas abertas.\n\nEnviamos em [data].\n\nToque para garantir a sua.", - 'image_count' => 1, - 'image_keywords' => ['preorder', 'product'], - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'story_weekend_sale', - 'category' => 'promotion', - 'name' => 'Promoção de fim de semana', - 'description' => 'Empurre uma promoção rápida de fim de semana.', - 'content' => "Promoção de fim de semana.\n\n[Desconto]% off em tudo.\n\nTermina domingo.", - 'image_count' => 1, - 'image_keywords' => ['sale', 'weekend', 'discount'], - 'slides' => null, - ], - [ - 'slug' => 'story_code_drop', - 'category' => 'promotion', - 'name' => 'Cupom de desconto', - 'description' => 'Compartilhe um cupom para os seguidores usarem no checkout.', - 'content' => "Use [CUPOM] no checkout.\n\n[Desconto]% off.\n\nVálido até [data].", - 'image_count' => 1, - 'image_keywords' => ['coupon', 'code', 'discount'], - 'slides' => null, - ], - [ - 'slug' => 'story_last_chance', - 'category' => 'promotion', - 'name' => 'Última chance', - 'description' => 'Lembrete final antes da promoção acabar.', - 'content' => "Última chance.\n\n[Oferta] termina à meia-noite.", - 'image_count' => 1, - 'image_keywords' => ['deadline', 'sale', 'urgent'], - 'slides' => null, - ], - [ - 'slug' => 'story_bundle_deal', - 'category' => 'promotion', - 'name' => 'Combo promocional', - 'description' => 'Divulgue um combo por um preço menor.', - 'content' => "Combo promocional.\n\n[Item A] + [Item B] por [preço].\n\nToque para garantir.", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'deal', 'product'], - 'slides' => null, - ], - - // educational - [ - 'slug' => 'story_quick_tip', - 'category' => 'educational', - 'name' => 'Dica rápida', - 'description' => 'Compartilhe uma dica curta na tela.', - 'content' => "Dica rápida:\n\n[Uma dica curta e prática].", - 'image_count' => 1, - 'image_keywords' => ['tip', 'advice', 'learning'], - 'slides' => null, - ], - [ - 'slug' => 'story_did_you_know', - 'category' => 'educational', - 'name' => 'Você sabia', - 'description' => 'Traga um fato surpreendente.', - 'content' => "Você sabia?\n\n[Fato surpreendente sobre seu nicho].", - 'image_count' => 1, - 'image_keywords' => ['fact', 'knowledge'], - 'slides' => null, - ], - [ - 'slug' => 'story_common_mistake', - 'category' => 'educational', - 'name' => 'Erro comum', - 'description' => 'Aponte um erro que sua audiência costuma cometer.', - 'content' => "Pare de [erro comum].\n\nFaça [abordagem melhor] no lugar.", - 'image_count' => 1, - 'image_keywords' => ['mistake', 'advice', 'tip'], - 'slides' => null, - ], - [ - 'slug' => 'story_one_word_lesson', - 'category' => 'educational', - 'name' => 'Lição em uma palavra', - 'description' => 'Uma única palavra seguida de um porquê curto.', - 'content' => "[Uma palavra].\n\nÉ a diferença entre [resultado A] e [resultado B].", - 'image_count' => 1, - 'image_keywords' => ['lesson', 'word', 'idea'], - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'story_workspace_peek', - 'category' => 'behind_the_scenes', - 'name' => 'Espiada no ambiente', - 'description' => 'Foto rápida de onde o trabalho acontece.', - 'content' => "Onde o trabalho acontece.\n\n[Legenda curta sobre seu espaço].", - 'image_count' => 1, - 'image_keywords' => ['workspace', 'desk', 'office'], - 'slides' => null, - ], - [ - 'slug' => 'story_meet_the_team', - 'category' => 'behind_the_scenes', - 'name' => 'Conheça o time', - 'description' => 'Apresente um membro do time em uma linha.', - 'content' => "Conheça [nome].\n\n[Função na {{brand_name}}].", - 'image_count' => 1, - 'image_keywords' => ['team', 'people', 'portrait'], - 'slides' => null, - ], - [ - 'slug' => 'story_in_progress', - 'category' => 'behind_the_scenes', - 'name' => 'Em andamento', - 'description' => 'Mostre algo que ainda está pela metade.', - 'content' => "Em andamento.\n\n[No que você está trabalhando agora].", - 'image_count' => 1, - 'image_keywords' => ['process', 'work', 'progress'], - 'slides' => null, - ], - [ - 'slug' => 'story_packing_orders', - 'category' => 'behind_the_scenes', - 'name' => 'Pedidos saindo', - 'description' => 'Mostre os pedidos saindo para entrega.', - 'content' => "Pedidos de hoje.\n\nObrigado por confiar na {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['packaging', 'orders', 'shipping'], - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'story_customer_quote', - 'category' => 'testimonial', - 'name' => 'Depoimento do cliente', - 'description' => 'Compartilhe um depoimento curto na tela.', - 'content' => "\"[Depoimento curto do cliente].\"\n\n- [Nome do cliente]", - 'image_count' => 1, - 'image_keywords' => ['testimonial', 'review', 'quote'], - 'slides' => null, - ], - [ - 'slug' => 'story_review_screenshot', - 'category' => 'testimonial', - 'name' => 'Print de avaliação', - 'description' => 'Repostar um print de uma avaliação ótima.', - 'content' => "Avaliações assim alegram a semana.\n\nObrigado, [primeiro nome do cliente].", - 'image_count' => 1, - 'image_keywords' => ['review', 'screenshot', 'feedback'], - 'slides' => null, - ], - [ - 'slug' => 'story_before_after_user', - 'category' => 'testimonial', - 'name' => 'Antes e depois do cliente', - 'description' => 'Destaque o resultado de um cliente.', - 'content' => '[Primeiro nome do cliente] saiu de [antes] para [depois] em [tempo].', - 'image_count' => 1, - 'image_keywords' => ['result', 'transformation', 'customer'], - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'story_industry_myth', - 'category' => 'industry_tip', - 'name' => 'Mito do setor', - 'description' => 'Desmonte uma crença comum no seu mercado.', - 'content' => "Mito: [crença comum].\n\nRealidade: [a verdade].", - 'image_count' => 1, - 'image_keywords' => ['myth', 'industry', 'truth'], - 'slides' => null, - ], - [ - 'slug' => 'story_industry_stat', - 'category' => 'industry_tip', - 'name' => 'Dado do setor', - 'description' => 'Solte um dado que prende atenção.', - 'content' => "[Dado].\n\nFoi por isso que criamos a {{brand_name}}.", - 'image_count' => 1, - 'image_keywords' => ['statistic', 'data', 'industry'], - 'slides' => null, - ], - [ - 'slug' => 'story_tool_we_use', - 'category' => 'industry_tip', - 'name' => 'Ferramenta que usamos', - 'description' => 'Recomende uma ferramenta para sua audiência testar.', - 'content' => "Ferramenta que usamos todo dia:\n\n[Nome da ferramenta].\n\nMotivo: [um motivo curto].", - 'image_count' => 1, - 'image_keywords' => ['tool', 'software', 'recommendation'], - 'slides' => null, - ], - [ - 'slug' => 'story_red_flag', - 'category' => 'industry_tip', - 'name' => 'Sinal de alerta', - 'description' => 'Avise os seguidores sobre um sinal de alerta no seu setor.', - 'content' => "Sinal de alerta em [setor]:\n\n[O sinal a observar].", - 'image_count' => 1, - 'image_keywords' => ['warning', 'industry', 'advice'], - 'slides' => null, - ], - - // event - [ - 'slug' => 'story_event_today', - 'category' => 'event', - 'name' => 'Evento hoje', - 'description' => 'Lembrete de última hora para um evento do mesmo dia.', - 'content' => "Hoje à noite.\n\n[Nome do evento] às [horário].\n\nToque no link.", - 'image_count' => 1, - 'image_keywords' => ['event', 'reminder'], - 'slides' => null, - ], - [ - 'slug' => 'story_event_countdown', - 'category' => 'event', - 'name' => 'Contagem regressiva', - 'description' => 'Crie expectativa com uma contagem regressiva.', - 'content' => "[X] dias para [nome do evento].\n\nResponda VAI para receber o lembrete.", - 'image_count' => 1, - 'image_keywords' => ['countdown', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'story_live_now', - 'category' => 'event', - 'name' => 'Ao vivo agora', - 'description' => 'Avise os seguidores que você está ao vivo ou no palco.', - 'content' => "Ao vivo agora.\n\n[Tema ou local].\n\nVenha dar um oi.", - 'image_count' => 1, - 'image_keywords' => ['live', 'streaming', 'event'], - 'slides' => null, - ], - [ - 'slug' => 'story_event_recap', - 'category' => 'event', - 'name' => 'Resumo do evento', - 'description' => 'Resumo rápido depois do evento acabar.', - 'content' => "[Nome do evento] terminou.\n\nObrigado a todos que foram.", - 'image_count' => 1, - 'image_keywords' => ['event', 'recap', 'crowd'], - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'story_this_or_that', - 'category' => 'engagement', - 'name' => 'Isto ou aquilo', - 'description' => 'Enquete de duas opções para toques rápidos.', - 'content' => "[Opção A] ou [Opção B]?\n\nToque para votar.", - 'image_count' => 1, - 'image_keywords' => ['poll', 'choice', 'vote'], - 'slides' => null, - ], - [ - 'slug' => 'story_question_box', - 'category' => 'engagement', - 'name' => 'Caixinha de perguntas', - 'description' => 'Abra espaço para perguntas.', - 'content' => "Me pergunte qualquer coisa sobre [tema].\n\nResponda com sua pergunta.", - 'image_count' => 1, - 'image_keywords' => ['questions', 'ama', 'conversation'], - 'slides' => null, - ], - [ - 'slug' => 'story_emoji_slider', - 'category' => 'engagement', - 'name' => 'Slider de emoji', - 'description' => 'Use o sticker de slider para medir uma sensação.', - 'content' => "Qual seu nível de empolgação com [coisa]?\n\nMova o slider.", - 'image_count' => 1, - 'image_keywords' => ['slider', 'reaction', 'engagement'], - 'slides' => null, - ], - [ - 'slug' => 'story_dm_prompt', - 'category' => 'engagement', - 'name' => 'Chamada para DM', - 'description' => 'Estimule os seguidores a mandar uma palavra-chave no DM.', - 'content' => "Quer [recurso]?\n\nResponda [palavra-chave] e eu te envio.", - 'image_count' => 1, - 'image_keywords' => ['dm', 'message', 'engagement'], - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/linkedin_page_post.php b/templates/pt-BR/linkedin_page_post.php deleted file mode 100644 index 464a34af..00000000 --- a/templates/pt-BR/linkedin_page_post.php +++ /dev/null @@ -1,342 +0,0 @@ - 'company_milestone', - 'category' => 'behind_the_scenes', - 'name' => 'Marco da empresa', - 'description' => 'Comemore um marco da empresa pela página da marca.', - 'content' => "Hoje a {{brand_name}} chegou a [marco, ex.: 1.000 clientes, 5 anos, \$X de ARR].\n\nIsso não aconteceu por causa de uma única pessoa. Aconteceu porque [time / clientes / comunidade] apareceram todos os dias.\n\nObrigado a todo mundo que fez parte dessa caminhada. Estamos só começando.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'hiring_announcement', - 'category' => 'engagement', - 'name' => 'Estamos contratando', - 'description' => 'Anuncie vagas abertas e convide candidaturas pela página da empresa.', - 'content' => "A {{brand_name}} está contratando.\n\nEstamos buscando [vaga(s)] para entrar com a gente em [time/missão].\n\nO que oferecemos:\n→ [Destaque 1]\n→ [Destaque 2]\n→ [Destaque 3]\n\nSe parece com você (ou com alguém que você conhece), candidate-se ou compartilhe → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'thought_leadership_page', - 'category' => 'industry_tip', - 'name' => 'Visão sobre o setor', - 'description' => 'Compartilhe a posição da empresa sobre uma tendência ou mudança no setor.', - 'content' => "O cenário de [setor] está mudando.\n\nO que a gente tem visto na {{brand_name}}:\n\n1. [Observação]\n2. [Observação]\n3. [Observação]\n\nO que isso significa para [público]: [implicação].\n\nO que vocês estão notando aí?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== product_launch ===== - [ - 'slug' => 'new_feature_release', - 'category' => 'product_launch', - 'name' => 'Lançamento de nova funcionalidade', - 'description' => 'Anuncie uma nova funcionalidade específica e o problema que ela resolve.', - 'content' => "Hoje colocamos [nome da funcionalidade] no ar.\n\nA versão curta: [descrição em uma linha do que ela faz].\n\nA versão mais longa: nossos clientes vinham repetindo [dor específica]. Tentamos [solução paliativa anterior] por uns [período de tempo] e nunca ficou bom. Então reescrevemos [área] do zero.\n\nAlgumas coisas que mudaram:\n[Comportamento antes] virou [comportamento depois].\n[Etapa manual] agora roda automaticamente.\n[Limite] caiu.\n\nSe quiser testar, a documentação está aqui: [link]. Se achar algo quebrado, nosso time está nos comentários.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_open_signups', - 'category' => 'product_launch', - 'name' => 'Beta aberto para inscrições', - 'description' => 'Convide clientes e prospectos para um beta público ou privado.', - 'content' => "O acesso beta para [produto/funcionalidade] está aberto.\n\nPassamos [período de tempo] rodando com [número] testadores privados. O retorno foi bom o suficiente para a gente abrir mais a porta.\n\nPara quem é: [descrição específica do usuário, ex.: times rodando >X campanhas/mês].\nPara quem ainda não é: [exclusão honesta, ex.: empresas que precisam de SSO].\n\nVamos limitar essa próxima rodada a [número] empresas para o time conseguir acompanhar cada conta de perto. As vagas vão por ordem de chegada.\n\nPeça acesso: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'integration_partnership', - 'category' => 'product_launch', - 'name' => 'Integração com parceiro', - 'description' => 'Anuncie uma nova integração ou parceria técnica.', - 'content' => "A {{brand_name}} agora se conecta com [parceiro].\n\nSe você usa os dois, pode parar com [etapa manual]. A integração lida com [fluxo de dados específico] de forma automática.\n\nO que mudou para nossos clientes em comum:\nNada de exportar [dados] e reimportar do outro lado.\n[Gatilho] em [parceiro] agora cria [ação] na {{brand_name}}.\nO mapeamento de campos é editável, então configurações personalizadas continuam funcionando.\n\nObrigado ao time da [parceiro] pelas conversas sobre a API. Guia de configuração: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'product_redesign', - 'category' => 'product_launch', - 'name' => 'Lançamento do redesign do produto', - 'description' => 'Anuncie uma reformulação relevante de UI ou produto.', - 'content' => "Redesenhamos [produto/área]. Está no ar para todo mundo hoje.\n\nNosso time de design ficou meio quieto por aqui nos últimos meses por causa disso. A [área] antiga foi crescendo de forma orgânica e acabou com [problema específico, ex.: quatro maneiras diferentes de iniciar um novo projeto]. Os clientes nos avisaram. Concordamos.\n\nO que está diferente:\nUma ação principal por tela, em vez de três.\n[Elemento antigo] foi para [novo lugar] para parar de atrapalhar.\n[Padrão específico] que ninguém usava saiu.\n\nSe alguma coisa parecer estranha nos primeiros dias, é normal. Responda aqui ou fale com nosso time em [contato] que a gente resolve.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== promotion ===== - [ - 'slug' => 'limited_time_offer', - 'category' => 'promotion', - 'name' => 'Oferta por tempo limitado', - 'description' => 'Anuncie um desconto ou oferta de preço com prazo claro.', - 'content' => "[Oferta, ex.: 25% de desconto no primeiro ano da {{brand_name}}] vai até [data específica].\n\nA gente raramente faz desconto. Esse aqui está ligado a [motivo, aniversário, fim de trimestre, marco do produto] e não vamos repetir nas mesmas condições nos próximos [período de tempo].\n\nPara quem vale: [elegibilidade, novos clientes, planos anuais, plano específico].\nPara quem não vale: [exclusão honesta].\n\nUse [código] no checkout, ou fale com nosso time se quiser ajuda para escolher um plano: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_resource_offer', - 'category' => 'promotion', - 'name' => 'Material gratuito', - 'description' => 'Promova um guia, modelo ou relatório gratuito.', - 'content' => "Fizemos um [recurso, guia, modelo, relatório de benchmark] gratuito para [público].\n\nEle aborda [tópico específico 1], [tópico específico 2] e os [número] erros que mais aparecem quando trabalhamos com [tipo de cliente alvo]. Cerca de [número] páginas, sem barreira de e-mail além do nome e e-mail corporativo.\n\nPor que é gratuito: [motivo honesto, ex.: criamos primeiro para nossos clientes, e é o tipo de coisa que rende mais quando está em mais mãos].\n\nBaixe aqui: [link]. Conta para a gente o que está faltando que a gente atualiza na próxima versão.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'referral_program_launch', - 'category' => 'promotion', - 'name' => 'Anúncio de programa de indicação', - 'description' => 'Promova um programa de indicação para clientes pela página da empresa.', - 'content' => "Lançamos um programa de indicação para clientes da {{brand_name}}.\n\nSe você indicar uma empresa que vire cliente pagante, os dois lados ganham [benefício específico, ex.: um mês grátis, \$X de crédito, liberação de funcionalidade]. Sem níveis. Sem ranking. Sem caneca.\n\nA gente resistiu por um tempo a fazer isso porque a maioria dos programas de indicação parece pirâmide disfarçada. Acabamos chegando aqui porque nosso maior canal de crescimento no ano passado foi cliente falando com cliente, e ficou estranho não dividir o ganho.\n\nDetalhes e seu link de indicação: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== educational ===== - [ - 'slug' => 'how_we_solve_problem', - 'category' => 'educational', - 'name' => 'Como abordamos um problema', - 'description' => 'Mostre como a empresa lida com um problema recorrente dos clientes.', - 'content' => "Uma pergunta que a gente recebe toda semana: [pergunta específica].\n\nA forma como pensamos sobre isso na {{brand_name}}:\n\nA maioria dos times começa com [movimento inicial comum]. Funciona até bater em [ponto específico de falha]. Quando isso acontece, você fica preso adicionando [solução paliativa] toda vez que algo muda.\n\nUm caminho diferente: [abordagem alternativa]. O preço é [custo honesto, ex.: configuração mais lenta, mais reflexão no início, mais difícil de explicar para alguém novo]. O lado bom é que [benefício específico] deixa de ser um incêndio recorrente.\n\nEscrevemos a versão longa aqui: [link]. Discorda? Os comentários estão abertos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'customer_data_insight', - 'category' => 'educational', - 'name' => 'Insight de dados de clientes', - 'description' => 'Compartilhe um padrão útil observado na base de clientes.', - 'content' => "Olhamos [métrica/comportamento] em [número] contas {{brand_name}} no último trimestre.\n\nUma coisa chamou atenção: [achado específico com número, ex.: times que fizeram X na primeira semana tiveram 3x mais chance de continuar ativos no sexto mês].\n\nEsperávamos o oposto. Nossa hipótese inicial era [suposição antiga], em parte por causa de [motivo]. Os dados não concordaram.\n\nAlguns ressaltos: isso é correlação, não causa. A amostra puxa para [segmento]. E [período de tempo] é curto.\n\nMesmo assim, se você é novo na {{brand_name}}, [recomendação prática] provavelmente vale a pena na primeira semana.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'common_mistake_breakdown', - 'category' => 'educational', - 'name' => 'Detalhamento de erro comum', - 'description' => 'Explique um erro recorrente e como evitá-lo.', - 'content' => "O erro mais comum que vemos quando times adotam [ferramenta/processo/prática]: [erro específico].\n\nGeralmente acontece assim. Um time começa com [configuração]. Em poucas semanas, eles adicionam [solução paliativa] porque [motivo]. No terceiro mês, a paliativa virou o sistema, e ninguém lembra mais o porquê.\n\nO conserto não é [resposta óbvia]. O conserto é voltar e perguntar se [suposição original] alguma vez foi verdade no caso de vocês. Metade das vezes, não foi.\n\nEscrevemos isso porque cometemos o mesmo erro internamente em [ano]. Detalhamento completo: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'tool_comparison', - 'category' => 'educational', - 'name' => 'Comparação honesta de ferramentas', - 'description' => 'Compare abordagens ou ferramentas para um caso específico, incluindo onde a empresa perde.', - 'content' => "Quando usar a {{brand_name}}, e quando não usar?\n\nA gente recebe a primeira metade dessa pergunta o tempo todo. Aqui vai a segunda metade.\n\nUse a {{brand_name}} quando [situação específica, ex.: você tem mais de X de Y, ou precisa da capacidade Z].\n\nNão use a {{brand_name}} quando [exclusão honesta, ex.: você é um único usuário com menos de X, ou seu fluxo é totalmente [categoria adjacente]]. Nesses casos, [concorrente ou abordagem alternativa] encaixa melhor de verdade, e a gente fala isso numa call de vendas.\n\nDetalhamento completo, com comparação lado a lado: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== behind_the_scenes ===== - [ - 'slug' => 'team_offsite_recap', - 'category' => 'behind_the_scenes', - 'name' => 'Resumo do offsite do time', - 'description' => 'Resuma um offsite ou all-hands recente do time.', - 'content' => "Fechamos nosso offsite em [cidade] semana passada.\n\n[Número] pessoas, [número] dias, um quadro branco que apanhou bastante. Cerca de um terço da empresa se encontrou pessoalmente pela primeira vez, o que acontece quando você cresce [de X para Y] em um ano.\n\nGastamos mais tempo em [tópico] do que tinha sido planejado e menos em [outro tópico] do que esperávamos. A conversa mais difícil foi sobre [tópico honesto, ex.: o que paramos de fazer no segundo semestre]. Não resolvemos por completo. Tudo bem.\n\nO próximo é em [local] em [mês]. Até lá, vamos ser [número] pessoas. Não sei como vai ser.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'office_or_remote_culture', - 'category' => 'behind_the_scenes', - 'name' => 'Como trabalhamos', - 'description' => 'Compartilhe o modelo de trabalho da empresa de forma honesta.', - 'content' => "Como a {{brand_name}} trabalha de verdade, já que perguntam.\n\nSomos [totalmente remotos / híbridos / com base em X e times remotos] em [número] fusos horários. Sem dias obrigatórios no escritório. Fazemos um all-hands por semana e um update assíncrono nas sextas.\n\nAs partes que a gente gosta: blocos de trabalho focado, contratação por várias regiões, agendas mais limpas.\n\nAs partes mais difíceis: o onboarding leva mais tempo do que levaria pessoalmente. Ideias novas às vezes morrem em DM. A sobreposição de horário com [região] é dura.\n\nNão estamos dizendo que é o modelo certo para toda empresa. É o que funciona para a nossa hoje.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'engineering_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Resumo de decisão de engenharia', - 'description' => 'Compartilhe uma decisão técnica ou de produto interna e o raciocínio.', - 'content' => "No mês passado [tomamos uma decisão específica, ex.: saímos do X, reescrevemos Y, matamos a funcionalidade Z].\n\nA versão curta do porquê: [motivo em uma linha].\n\nA versão mais longa. A configuração antiga estava boa quando tínhamos [número] clientes. Em [escala atual], começou a aparecer em [sintoma específico]. Tentamos [conserto intermediário] por uns [período de tempo] até concordar que não ia segurar.\n\nO preço que aceitamos pagar: [custo honesto, ex.: duas semanas de releases mais lentos, breaking change para algumas integrações].\n\nEstamos contando porque queríamos que outros times falassem mais sobre esse tipo de decisão e não só sobre as vitórias.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mistake_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Postmortem público', - 'description' => 'Compartilhe um erro, queda ou falha recente de forma honesta.', - 'content' => "Em [data], a {{brand_name}} teve [problema específico, ex.: uma queda, um bug de cobrança, um problema de dados afetando X% das contas] por cerca de [duração].\n\nO que aconteceu: [resumo técnico ou operacional em um parágrafo].\n\nQuem foi afetado: [escopo honesto, incluindo os clientes que não foram].\n\nO que fizemos: [conserto imediato e mitigação].\n\nO que estamos mudando para não acontecer da mesma forma de novo: [mudança específica, e não um genérico 'vamos fazer melhor'].\n\nSe você foi afetado e ainda não falamos diretamente, responda ou escreva para [contato]. Devemos uma conversa mais longa para algumas pessoas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== testimonial ===== - [ - 'slug' => 'customer_quote_short', - 'category' => 'testimonial', - 'name' => 'Citação curta de cliente', - 'description' => 'Compartilhe uma citação curta e específica de cliente na página da empresa.', - 'content' => "De uma conversa recente com [primeiro nome do cliente], [cargo] na [empresa]:\n\n\"[Citação do cliente, com referência a um resultado, número ou mudança específica. Evite elogios genéricos do tipo 'ótimo produto'.]\"\n\nPerguntamos se podíamos compartilhar. Disseram que sim.\n\nO contexto por trás da citação: [uma ou duas frases sobre o que estavam tentando fazer e o que mudou].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'case_study_recap', - 'category' => 'testimonial', - 'name' => 'Resumo de case', - 'description' => 'Resuma um case de cliente publicado.', - 'content' => "Novo case: [nome do cliente].\n\nAntes da {{brand_name}}, o time deles estava [situação específica, ex.: rodando X manualmente, gastando Y horas/semana em Z]. Depois de [período de tempo] usando a {{brand_name}}, [resultado específico com número].\n\nAlgumas coisas que eles fizeram e que outros clientes nem sempre tentam:\n[Tática específica do cliente].\n[Outra tática].\n[Nota honesta: algo que ainda estão entendendo].\n\nVersão completa com o fluxo real do time deles e prints: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unexpected_use_case', - 'category' => 'testimonial', - 'name' => 'Uso inesperado do produto', - 'description' => 'Destaque um uso criativo ou inesperado do produto pelos clientes.', - 'content' => "A gente não construiu a {{brand_name}} pensando em [caso de uso inesperado], mas tem cliente usando assim.\n\n[Cliente ou segmento de clientes] começou a [comportamento específico] uns [período de tempo] atrás. Notamos por causa de [sinal, ex.: pico de uso em uma funcionalidade específica, ticket de suporte pedindo X]. Quando perguntamos a eles, a resposta foi: [raciocínio do cliente parafraseado].\n\nNão está no nosso roadmap. Pode entrar em breve. Se você está fazendo algo parecido, nosso time de produto adoraria saber. Responde aqui ou escreve para [contato].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== industry_tip ===== - [ - 'slug' => 'contrarian_take', - 'category' => 'industry_tip', - 'name' => 'Opinião contrária', - 'description' => 'Defenda uma posição clara contra uma ideia popular do setor.', - 'content' => "Uma opinião que a gente leva bronca em conferências: [posição contrária, dita sem rodeios].\n\nO argumento de sempre é [posição popular]. Não está errado em todos os casos. Está errado na maioria dos casos que vemos, e o motivo é o seguinte.\n\n[Motivo 1 com exemplo específico].\n[Motivo 2 com exemplo específico].\n\nA contestação que sempre recebemos: [contra-argumento bem feito]. Faz sentido, e concordamos que vale quando [condição específica]. Fora dessa condição, o conselho de sempre custa caro para os times sem ninguém perceber.\n\nA gente aceita estar errado nessa. Conta para a gente nos comentários por que estamos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'industry_benchmark', - 'category' => 'industry_tip', - 'name' => 'Benchmark do setor', - 'description' => 'Compartilhe um benchmark ou métrica agregada da base de clientes.', - 'content' => "Benchmark rápido para [público].\n\nEm [número] contas {{brand_name}} de [setor/segmento] no último trimestre, a mediana de [métrica] foi [valor]. O percentil 90 foi [valor]. Os 25% mais baixos ficaram abaixo de [valor].\n\nSe você está abaixo da mediana, o motivo mais comum que vemos é [motivo específico]. O conserto raramente é [resposta óbvia]. Costuma ser [conserto real].\n\nSe você está acima do percentil 90, provavelmente já faz [comportamento específico], e a gente queria muito conversar com você sobre isso. Responde ou manda DM para a página.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'trend_we_disagree_with', - 'category' => 'industry_tip', - 'name' => 'Tendência com a qual discordamos', - 'description' => 'Conteste uma prática em alta no setor com argumentos.', - 'content' => "Metade dos posts de [setor] que vemos esse mês é sobre [prática em alta].\n\nA gente não vai adotar isso na {{brand_name}}, e provavelmente não vamos.\n\nO discurso é [enquadramento popular]. A versão honesta, na nossa experiência, é que funciona em [cenário restrito] e falha sem barulho em [cenário comum] por causa de [motivo específico]. Testamos uma versão disso internamente por [período de tempo] e o resultado foi [resultado específico].\n\nNão estou dizendo que ninguém deva fazer. Estou dizendo que para [público alvo], o tempo rende mais em [alternativa].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'practical_framework', - 'category' => 'industry_tip', - 'name' => 'Framework prático', - 'description' => 'Compartilhe um framework ou regra simples que o time usa internamente.', - 'content' => "Uma regra de bolso que nosso time usa para decidir [decisão específica]:\n\nSe [condição A], faça [opção 1].\nSe [condição B], faça [opção 2].\nSe não dá para saber em qual você está, provavelmente está em [opção 1] complicando à toa.\n\nIsso não é um framework com nome. Saiu de uns [período de tempo] errando a mesma decisão de jeitos um pouco diferentes. Poupa uma ou duas discussões por semana.\n\nÚtil? Inútil? Conta como vocês decidem.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== event ===== - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncie um evento, webinar ou workshop da empresa.', - 'content' => "Vamos receber [nome do evento] em [data] às [horário/fuso].\n\nFormato: [virtual / presencial em cidade / híbrido].\nPara quem é: [público específico, ex.: heads de marketing em SaaS B2B, 20-200 pessoas].\nO que vamos abordar: [tópico 1] e [tópico 2]. Sem keynote. Sem desfile de fornecedor.\n\nVamos limitar a inscrição em [número] para o Q&A funcionar de verdade. Pelos eventos passados, é na segunda metade que aparecem as coisas boas.\n\nInscreva-se: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Resumo de evento', - 'description' => 'Resuma um evento recente que a empresa organizou ou participou.', - 'content' => "[Nome do evento] terminou em [data]. Algumas coisas que vale anotar antes de esquecer.\n\nA sala ficou mais animada em [momento ou tópico específico]. Nossa hipótese era que [tópico A] ia dominar. Não dominou. [Tópico B] dominou, e a gente devia ter previsto.\n\nA pergunta mais útil que recebemos: [pergunta parafraseada]. Nossa resposta foi honesta, mas fraca. Se foi você que perguntou, a gente te deve uma resposta melhor, responde aqui.\n\nObrigado a [parceiro / espaço / palestrantes] por fazerem o evento acontecer. As gravações saem semana que vem: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'conference_attendance', - 'category' => 'event', - 'name' => 'Participação em conferência', - 'description' => 'Anuncie que o time vai estar em uma conferência futura.', - 'content' => "A {{brand_name}} vai estar na [conferência] em [cidade] de [data] a [data].\n\nVamos em [número] pessoas. Esse ano não vamos ter estande. Tentamos no ano passado e as conversas mais úteis aconteceram longe dele.\n\nSe quiser conversar:\n[Nome de pessoa do time] está por lá [dias/horários], com mais interesse em [tópico].\n[Outra pessoa do time] vai apresentar sobre [tópico] em [dia].\nJantar em [data], grupo pequeno, responde se quiser entrar.\n\nReserve um horário aqui: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== engagement ===== - [ - 'slug' => 'open_question_to_audience', - 'category' => 'engagement', - 'name' => 'Pergunta aberta ao público', - 'description' => 'Faça uma pergunta real e específica para o público da página.', - 'content' => "Uma pergunta de verdade para [público] essa semana.\n\nQuando [situação específica, ex.: você está escopando um projeto novo, escolhendo um fornecedor, decidindo o que cortar], como você decide na prática?\n\nNão a versão que entra num slide. A versão que envolve [fator honesto, ex.: quem está disponível naquela semana, em que humor o CFO está, qual ferramenta o time já conhece].\n\nA gente vem rodando uma versão interna dessa pergunta na {{brand_name}} há um mês e as respostas estão mais interessantes que qualquer framework que vimos. Manda a sua que a gente compartilha o que ouviu.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'we_want_your_feedback', - 'category' => 'engagement', - 'name' => 'Pedido de feedback', - 'description' => 'Peça opinião do público sobre uma decisão de roadmap específica.', - 'content' => "Estamos travados em uma coisa e queremos a sua opinião.\n\nPara a próxima versão da {{brand_name}}, estamos escolhendo entre dois caminhos para [área].\n\nOpção A: [direção específica, com o trade-off].\nOpção B: [direção específica, com o trade-off].\n\nOs dois são reais. Nenhum é obviamente certo. Os clientes que perguntamos estão divididos quase meio a meio, que é o pior cenário possível para um time de produto que quer entregar.\n\nSe tiver opinião, principalmente uma forte, responde aqui ou manda DM para a página. Nosso time de produto lê tudo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'community_spotlight', - 'category' => 'engagement', - 'name' => 'Destaque da comunidade', - 'description' => 'Destaque um cliente, parceiro ou membro da comunidade fazendo algo interessante.', - 'content' => "Destaque para [nome], [cargo] na [empresa].\n\nA gente reparou em [trabalho ou post específico] semana passada e acabou repassando dentro do time da {{brand_name}}. Versão curta do porquê: [motivo específico, o que fizeram que era diferente, útil ou na contramão].\n\nVá seguir, se ainda não segue. Não temos nenhum acordo comercial aqui. Eles só estão fazendo o tipo de trabalho que a gente queria ver mais gente fazendo de forma pública em [setor].\n\n[Link para o post / perfil].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'year_in_review', - 'category' => 'engagement', - 'name' => 'Retrospectiva do ano', - 'description' => 'Retrospectiva honesta de fim de ano pela página da empresa.', - 'content' => "Uma retrospectiva curta da {{brand_name}}.\n\nO bom: [vitória específica com número]. [Outra vitória específica, de preferência um resultado de cliente, e não uma métrica de vaidade].\n\nO difícil: [erro honesto, ex.: uma aposta de produto que não deu certo, uma meta de contratação que não batemos, uma meta que definimos em janeiro e abandonamos sem alarde em junho].\n\nO surpreendente: [coisa inesperada que importou, um segmento de cliente que decolou, uma funcionalidade que ninguém tinha pedido e virou peça-chave].\n\nObrigado aos [número] clientes, [número] pessoas do time e a quem respondia nossos posts às 23h pedindo para a gente entregar. O ano que vem vai ser mais estranho que esse.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/linkedin_post.php b/templates/pt-BR/linkedin_post.php deleted file mode 100644 index 359c7300..00000000 --- a/templates/pt-BR/linkedin_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'product_launch_announcement', - 'category' => 'product_launch', - 'name' => 'Anúncio de lançamento de produto', - 'description' => 'Post curto no LinkedIn anunciando um novo produto.', - 'content' => "Novidade pra compartilhar: {{brand_name}} acabou de lançar [Nome do Produto].\n\nPor que isso importa pra [seu público]:\n→ [Benefício 1]\n→ [Benefício 2]\n→ [Benefício 3]\n\nSaiba mais em [link]. Adoraríamos receber seu feedback.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'how_to_guide', - 'category' => 'educational', - 'name' => 'Guia passo a passo', - 'description' => 'Post educativo passo a passo para o LinkedIn.', - 'content' => "Como [alcançar X] em [prazo], um guia passo a passo.\n\nPasso 1: [Ação]\nPasso 2: [Ação]\nPasso 3: [Ação]\nPasso 4: [Ação]\n\nO ponto que a maioria das pessoas ignora: [insight].\n\nQual passo você acha mais difícil? Conta nos comentários.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'customer_quote', - 'category' => 'testimonial', - 'name' => 'Depoimento de cliente', - 'description' => 'Compartilhe um depoimento marcante de cliente no LinkedIn.', - 'content' => "\"[Frase do cliente sobre o resultado que ele alcançou com seu produto ou serviço.]\"\n- [Nome do Cliente], [Cargo] na [Empresa]\n\nÉ exatamente por isso que construímos a {{brand_name}}. Resultados reais para times reais.\n\nLeia a história completa → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'industry_insight', - 'category' => 'industry_tip', - 'name' => 'Insight do setor', - 'description' => 'Compartilhe uma visão atual ou opinião forte sobre seu setor.', - 'content' => "Uma coisa que a maioria do pessoal de [setor] entende errado:\n\n[Afirmação contraintuitiva ou opinião forte]\n\nPor quê? Porque [motivo].\n\nA forma mais inteligente de fazer: [caminho melhor].\n\nNa {{brand_name}}, vimos isso acontecer com centenas de [clientes/times]. Os dados são claros.\n\nQual é a sua opinião?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncie um webinar ou evento ao vivo que está chegando.', - 'content' => "📅 Reserve a data: a {{brand_name}} vai realizar [Nome do Evento] no dia [Data] às [Horário].\n\nO que esperar:\n✔ [Tema 1]\n✔ [Tema 2]\n✔ [Tema 3]\n\nVagas limitadas. Inscreva-se agora → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'community_question', - 'category' => 'engagement', - 'name' => 'Pergunta para a comunidade', - 'description' => 'Provoque a discussão com uma pergunta aberta para sua rede.', - 'content' => "Se você pudesse dar um único conselho pra alguém começando agora em [setor/cargo], qual seria?\n\nO meu: [sua resposta, seja honesto e específico]\n\nDeixa o seu nos comentários. Bora montar uma thread que vale salvar.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Product launch (3) ===== - [ - 'slug' => 'feature_release_notes', - 'category' => 'product_launch', - 'name' => 'Notas de lançamento de feature', - 'description' => 'Mostre à sua rede o que foi entregue e por que importa.', - 'content' => "Subimos [Nome da Feature] hoje.\n\nResumindo: ela faz [o que faz] pra [pra quem é]. Levou [prazo] do primeiro rascunho até a produção.\n\nO que mudou de verdade:\n• [Capacidade um, em linguagem direta]\n• [Capacidade dois, com um exemplo real]\n• [O que tiramos fora, e por quê]\n\nDebatemos [tradeoff] por semanas. No fim, escolhemos [decisão] porque [motivo]. Se você teria feito a outra escolha, quero entender o seu raciocínio.\n\nDocs e um vídeo de 4 minutos estão em [link]. Reportes de bug são bem-vindos, lemos cada um.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_invitation', - 'category' => 'product_launch', - 'name' => 'Convite para beta privado', - 'description' => 'Convide sua rede para um beta fechado com expectativas claras.', - 'content' => "Estamos abrindo [Produto/Feature] em beta privado pra um grupo pequeno. Procurando uns [N] testadores.\n\nO perfil ideal:\n• Você atua em [cargo/setor]\n• Você usa hoje [ferramenta ou fluxo] e sente [atrito específico]\n• Você tem 30 minutos por semana pra quebrar coisas e nos contar\n\nO que você ganha: acesso antecipado, contato direto com o time da {{brand_name}} e voz no que vamos construir depois. O que a gente ganha: feedback honesto, mesmo quando dói.\n\nSe encaixa em você, comenta aqui ou me chama no DM. Vamos enviar os convites nesta [dia/semana].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'milestone_update', - 'category' => 'product_launch', - 'name' => 'Marco do produto', - 'description' => 'Compartilhe um marco relevante do produto ou da empresa com números concretos.', - 'content' => "Marco discreto que batemos essa semana: a {{brand_name}} passou de [número / métrica].\n\nPra contextualizar, quando começamos [prazo] atrás, tínhamos [número inicial]. A maior parte do crescimento veio de [canal ou fator específico], não do que a gente esperava.\n\nAlgumas coisas que aprendi no caminho:\n1. [Lição um, com os números]\n2. [Lição dois, o que faríamos diferente]\n3. [Lição três sobre o time]\n\nObrigado às [N] pessoas que apostaram na gente quando isso ainda era cru. Seguimos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Promotion (3) ===== - [ - 'slug' => 'limited_time_offer', - 'category' => 'promotion', - 'name' => 'Oferta por tempo limitado', - 'description' => 'Promova um desconto ou oferta com prazo, sem cara de spam.', - 'content' => "Rodando uma promo de [% de desconto] na {{brand_name}} até [data].\n\nNão é truque de Black Friday. Tivemos um [mês/trimestre] fraco e queremos trazer [N] novos [usuários/clientes] antes de [fim do período]. Esse é o motivo honesto.\n\nSe você estava em cima do muro: [link]. Se você assinou nos últimos 30 dias, me manda um email que aplico o mesmo desconto retroativamente. É o certo a fazer.\n\nA oferta termina em [data] às [hora, fuso].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_resource_offer', - 'category' => 'promotion', - 'name' => 'Recurso gratuito', - 'description' => 'Ofereça um download ou template útil como isca de baixa fricção.', - 'content' => "Passei o fim de semana transformando nosso [tipo de recurso, checklist, template, playbook] interno em algo que dá pra compartilhar.\n\nÉ o mesmo [documento] que nosso time usa pra [caso de uso específico]. Sem firula: [N] páginas, sem enrolação, sem formulário de email.\n\nComenta com a palavra \"[palavra-chave]\" que te mando o link no DM. Se preferir pegar direto: [link].\n\nAviso: ele tem opinião. Se você discordar do meu ponto sobre [assunto específico], me conta. É assim que melhoro pra v2.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'partnership_announcement', - 'category' => 'promotion', - 'name' => 'Anúncio de parceria', - 'description' => 'Anuncie uma parceria ou integração com benefício claro pro cliente.', - 'content' => "{{brand_name}} agora está integrada com [Nome do Parceiro].\n\nO efeito prático pra [público]: você consegue [fluxo ou capacidade específica] sem [a gambiarra anterior]. Economiza cerca de [tempo/dinheiro] por [período] com base no grupo de teste inicial.\n\nEscolhemos [Parceiro] porque o time deles é obcecado por [valor compartilhado] do mesmo jeito que o nosso. Nem todo pedido de integração entra, e a maioria não entra.\n\nA configuração leva uns [N] minutos. Tutorial aqui: [link]. Se você já usa as duas ferramentas, queremos ouvir como foi.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Educational (3) ===== - [ - 'slug' => 'lesson_learned', - 'category' => 'educational', - 'name' => 'Lição de um erro', - 'description' => 'Ensine contando um erro específico e o que mudou por causa dele.', - 'content' => "Errei na casa de [N] dígitos no [ano/trimestre] passado e quero escrever sobre isso enquanto ainda dói.\n\nO contexto: estávamos [situação]. A decisão: [o que você fez]. O raciocínio na época: [por que parecia certo].\n\nO que aconteceu de verdade: [resultado, em termos concretos]. Perdemos [custo específico, dinheiro, tempo, clientes, confiança].\n\nO que eu deveria ter feito: [caminho melhor]. O motivo de eu não ter feito é [motivo honesto, ego, pressa, falta de dado].\n\nTrês coisas que mudei na minha forma de trabalhar por causa disso:\n1. [Mudança um]\n2. [Mudança dois]\n3. [Mudança três]\n\nSe você já passou por isso, sabe como é. Conta a sua nos comentários.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'framework_breakdown', - 'category' => 'educational', - 'name' => 'Framework ou modelo mental destrinchado', - 'description' => 'Explique um framework ou modelo mental específico com um exemplo concreto.', - 'content' => "Sempre volto pra um modelo mental quando penso em [tema/problema]: [Nome do Framework].\n\nA ideia é simples. [Resumo do framework em uma frase.]\n\nComo eu uso na prática: quando travo em [situação específica], me pergunto [pergunta específica que o framework provoca]. Semana passada, isso me empurrou pra [decisão que você tomou por causa dele].\n\nOnde ele falha: [limitação honesta]. Não é resposta universal pra [tipo de problema], e tratar como se fosse é o caminho pra [resultado ruim].\n\nSe quiser ler a fonte original, é [autor/livro/link]. A versão acima é a minha, com ajustes de algumas centenas de usos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'tool_comparison', - 'category' => 'educational', - 'name' => 'Comparação honesta de ferramentas', - 'description' => 'Compare duas ou três ferramentas ou abordagens com tradeoffs reais.', - 'content' => "Usei [Ferramenta A], [Ferramenta B] e [Ferramenta C] pra [tarefa] nos últimos [prazo]. Onde cada uma realmente vence.\n\n[Ferramenta A] é a escolha certa quando [situação específica]. É a mais rápida em [tarefa específica] e a pior em [tarefa específica]. Usamos pra [caso de uso].\n\n[Ferramenta B] parece menos polida, mas faz [coisa] melhor que qualquer outra que testei. Vale o desconforto se [critério].\n\n[Ferramenta C] é a escolha sem graça. Isso é elogio. É confiável, a doc foi escrita por humanos, e o time não solta breaking changes na sexta.\n\nMeu stack atual na {{brand_name}}: [resposta real]. O seu pode ser diferente se [motivo].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Behind the scenes (3) ===== - [ - 'slug' => 'team_culture_glimpse', - 'category' => 'behind_the_scenes', - 'name' => 'Momento de cultura do time', - 'description' => 'Compartilhe um momento pequeno e específico que mostra como o time trabalha de verdade.', - 'content' => "Coisinha que aconteceu na {{brand_name}} essa semana.\n\n[Pessoa do time ou cargo] notou [problema ou detalhe específico]. Daria pra ter subido assim mesmo. Em vez disso, [ação específica], o que atrasou [coisa] em [prazo].\n\nNinguém pediu. Não tinha ticket no Jira. O cliente não saberia.\n\nEssa é a parte de construir uma empresa que não cabe na página de vagas. O trabalho que ninguém vê, feito direito mesmo assim, porque é assim que as pessoas daqui são. Penso muito nisso.\n\nSe você quer trabalhar com gente assim: [link]. Se já trabalha, manda um DM pra essa pessoa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'how_we_built_it', - 'category' => 'behind_the_scenes', - 'name' => 'Como construímos', - 'description' => 'Conte a história real por trás de uma entrega recente, incluindo os becos sem saída.', - 'content' => "Como construímos [Feature/Produto] na {{brand_name}}, incluindo as partes que normalmente ficam de fora.\n\nComeçamos com [plano original]. Levamos [prazo] pra perceber que esse plano estava errado. O problema real era [problema de verdade], que só ficou visível depois de [evento gatilho].\n\nA versão 2 foi [o que tentamos depois]. Funcionou na demo e quebrou em produção em [escala ou condição]. Reescrevemos o [componente específico] duas vezes.\n\nO que de fato subiu: [solução atual]. É [reconhecimento do tradeoff, mais lenta, mais simples, menos elegante] do que a gente queria construir, e é a versão que resolve o problema do cliente.\n\nDescritivo completo com os diagramas de arquitetura: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'day_in_the_life', - 'category' => 'behind_the_scenes', - 'name' => 'Um dia no time', - 'description' => 'Mostre como é um dia real pra alguém do time.', - 'content' => "Olhei a agenda de [dia da semana] e contei: [N] reuniões, [N] horas de trabalho focado, [N] interrupções pras quais eu deveria ter dito não.\n\nO trabalho que importou de verdade:\n• [Tarefa um, e por que importou]\n• [Tarefa dois, incluindo o que te surpreendeu]\n• [Tarefa três]\n\nO que parecia urgente e não era: [exemplo honesto]. Continuo caindo nessa e estou cansado disso.\n\nAntes eu achava que a meta era um dia perfeito. Hoje acho que a meta é umas poucas horas reais e a disciplina pra protegê-las. Curioso pra saber como vocês lidam com [desafio específico do post].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Testimonial (3) ===== - [ - 'slug' => 'before_after_story', - 'category' => 'testimonial', - 'name' => 'Antes e depois de cliente', - 'description' => 'Conte a história de um cliente com números concretos do antes e depois.', - 'content' => "História rápida de um cliente da {{brand_name}} que vale compartilhar.\n\n[Cliente/Empresa] chegou na gente [prazo] atrás. O cenário na época: [métrica dolorosa específica, horas por semana, taxa de erro, churn, custo]. Já tinha tentado [abordagem anterior] e o número não tinha se mexido.\n\n[Prazo] depois, a mesma métrica está em [novo número]. A peça que fez mais diferença, segundo [Nome, cargo]: [mudança específica em como eles trabalham].\n\nO que eu gosto nessa história: não foi uma feature mágica. Foi [básico, mudança de processo, default que viraram, reunião que mataram]. A maioria das vitórias é assim e a gente não fala disso o suficiente.\n\nEstudo de caso completo com os detalhes bagunçados: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unsolicited_review', - 'category' => 'testimonial', - 'name' => 'Avaliação espontânea de cliente', - 'description' => 'Compartilhe um feedback orgânico de cliente com uma reação reflexiva.', - 'content' => "Recebi isso na nossa caixa de entrada ontem, de [Nome do Cliente] da [Empresa]:\n\n\"[Frase honesta e específica, incluindo qualquer pequena crítica ou tradeoff que ele mencionou. Avaliações reais não são só elogio.]\"\n\nAlgumas reações honestas da minha parte. A parte sobre [elogio específico] é a coisa em que mais trabalhamos, então essa pegou. A parte sobre [reclamação ou desejo específico] é justa, e já está no roadmap pra [prazo].\n\nA gente não paga por avaliação e não pede por elas. Quando uma aparece assim, leio duas vezes. Obrigado, [Nome].\n\nSe você tem uma história com a {{brand_name}}, boa, ruim ou no meio do caminho, quero ouvir.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'team_member_spotlight', - 'category' => 'testimonial', - 'name' => 'Destaque de pessoa do time', - 'description' => 'Coloque uma pessoa do time em evidência por uma contribuição concreta.', - 'content' => "Quero falar de [Nome], [cargo] na {{brand_name}}, por um minuto.\n\n[Nome] entrou [prazo] atrás. O que ele(a) toca hoje: [área ou sistema específico]. O que ele(a) fez que pouca gente faria: [história específica, decisão dura, conserto sem glamour, tradeoff em que empurrou de volta].\n\nO resultado: [resultado concreto, com número se você tiver]. O motivo de ter dado certo: o instinto de [Nome] sobre [qualidade específica], que ainda estou aprendendo com ele(a).\n\nIsso não é falsa modéstia. É um obrigado, em plataforma pública, porque essa parte do trabalho costuma acontecer no silêncio. [Nome], o time é melhor com você nele.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Industry tip (3) ===== - [ - 'slug' => 'data_point_take', - 'category' => 'industry_tip', - 'name' => 'Dado e o que ele significa', - 'description' => 'Compartilhe um dado recente de fonte real e a sua interpretação.', - 'content' => "[Fonte, relatório, estudo, dataset público] divulgou esse número semana passada: [estatística específica].\n\nA maior parte das interpretações que vi enquadra como [interpretação comum]. Acho que isso erra o ponto.\n\nQuando você corta os mesmos dados por [dimensão, segmento, geografia, tamanho de empresa, período], o quadro vira. [Subgrupo específico] está [comportamento específico], enquanto [outro subgrupo] está [comportamento diferente]. O número da manchete junta essas duas histórias numa média que não descreve nenhuma.\n\nA implicação prática pra [público]: [recomendação específica]. Não [conselho comum], porque ele se apoia numa média que não existe.\n\nLink pros dados brutos: [link]. Me diga onde estou errado.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'contrarian_take', - 'category' => 'industry_tip', - 'name' => 'Opinião contrária com argumento', - 'description' => 'Confronte uma crença comum do seu setor com um argumento específico.', - 'content' => "Opinião impopular em [setor]: [tese contrária].\n\nO conselho padrão diz [sabedoria convencional]. Segui isso por [prazo] e o resultado foi [resultado ruim ou medíocre específico].\n\nPor que isso não funciona tão bem quanto dizem: [motivo específico, incentivo, custo escondido, viés de sobrevivência, mercado mudou]. A versão que funciona pra [público] se parece mais com [abordagem alternativa].\n\nPra registro, foi o caminho que tomamos na {{brand_name}} depois de [evento gatilho]. Números desde então: [resultado específico]. Não estou dizendo que todo mundo deveria fazer assim. Estou dizendo que \"porque todo mundo diz\" é um motivo ruim pra continuar fazendo a mesma coisa.\n\nEm que pé você está nessa?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'trend_watch', - 'category' => 'industry_tip', - 'name' => 'Tendência que vale acompanhar', - 'description' => 'Coloque luz numa tendência menor antes que ela vire mainstream.', - 'content' => "Tendência discreta em [setor] que acho que vai virar pauta de todo mundo em [prazo]: [tendência específica].\n\nO sinal que estou observando: [evidência concreta, padrão de contratação, novos entrantes, mudança de preço, o que os clientes estão pedindo]. Três [empresas/times] diferentes na nossa rede fizeram [coisa específica] nos últimos [período], cada uma por conta própria.\n\nPor que acho que isso importa de fato e não é só hype: [motivo ancorado em incentivos, não em vibe]. O que me faria mudar de ideia: [contrassinal específico que eu observaria].\n\nSe você é [público], o movimento prático hoje é [ação específica]. Não um pivô que aposta a empresa. Só o suficiente pra você não ser pego de calça curta em [prazo].\n\nO que você está vendo?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Event (3) ===== - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Resumo de evento com lições', - 'description' => 'Resuma um evento que você frequentou com pontos específicos.', - 'content' => "Voltei do [Nome do Evento]. Três coisas ficaram comigo, e uma que ainda estou debatendo na cabeça.\n\nO que se sustentou: [sessão ou palestrante específico], que defendeu que [argumento específico]. A parte que eu ainda não tinha considerado: [insight específico].\n\nO que vou levar pra {{brand_name}}: [mudança concreta que você fará por causa do evento]. Pequena o suficiente pra começar semana que vem, grande o suficiente pra fazer diferença.\n\nO ponto em que discordei: [opinião específica de uma sessão]. O argumento estava bem montado, mas ignora [realidade específica]. Vou escrever isso direito.\n\nSe você estava lá, o que escapou? Sempre tem mais coisa nas conversas de corredor do que no palco principal.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'speaking_announcement', - 'category' => 'event', - 'name' => 'Anúncio de palestra', - 'description' => 'Avise que você ou alguém do time vai palestrar num evento.', - 'content' => "Vou palestrar no [Nome do Evento] no dia [data] em [local / online].\n\nO tema: \"[Título da Palestra]\". O resumo curto: [uma ou duas frases sobre o que o público vai levar de fato].\n\nO que eu não vou fazer: passar boas práticas genéricas de [tema]. Já tem palestra demais assim. O que eu vou fazer: mostrar [dado, framework ou caso] específico da {{brand_name}} que mudou como pensamos sobre [problema específico], incluindo as partes que não funcionaram.\n\nSe for estar lá, me procure, prefiro ter uma conversa de verdade do que ficar trocando cartão. Inscrições: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'webinar_invitation', - 'category' => 'event', - 'name' => 'Convite para webinar', - 'description' => 'Convide sua rede para um webinar com agenda clara e honesta.', - 'content' => "Vou apresentar um webinar de [duração, ex.: 45 minutos] com [Nome do Co-host, cargo] no dia [data].\n\nTema: [tema específico, como uma pergunta que seu público realmente faz]. Não é demo de produto. Vamos passar por [framework, dataset ou fluxo específico] que usamos na {{brand_name}}.\n\nAgenda inicial:\n• [Horário], [Tema, com um detalhe que mostra o conteúdo real]\n• [Horário], [Tema]\n• [Horário], Q&A ao vivo. Respondemos tudo, inclusive as perguntas desconfortáveis.\n\nO replay vai pra todo mundo que se inscreveu, mesmo se não der pra assistir ao vivo. Inscrição: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ===== Engagement (3) ===== - [ - 'slug' => 'poll_post', - 'category' => 'engagement', - 'name' => 'Enquete com opinião', - 'description' => 'Faça uma pergunta direta de A ou B que revela opiniões reais.', - 'content' => "Curioso pra ver como o pessoal de [público] está se dividindo nessa.\n\nQuando você decide [decisão específica], você tende a:\n\nA) [Opção A, descrita de forma concreta]\nB) [Opção B, descrita de forma concreta]\n\nNada de \"depende\" nos comentários, por favor. Escolhe uma e me diz por quê em uma frase.\n\nMinha resposta: [sua escolha honesta]. O motivo: [uma ou duas frases vindas de experiência real]. Eu defendia o oposto por [prazo] até [coisa que mudou minha cabeça].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'hot_take_invitation', - 'category' => 'engagement', - 'name' => 'Convite para opinião forte', - 'description' => 'Convide a rede a dividir uma opinião polêmica da área dela.', - 'content' => "Qual é uma opinião sua sobre [setor/cargo] que faz as pessoas te olharem torto em conferência?\n\nA minha: [opinião sua que é levemente polêmica na sua área, dita sem rodeios]. Já errei em muita coisa, mas nessa eu seguro a posição.\n\nNão estou atrás das opiniões seguras que já têm 500 carrosséis no LinkedIn. As que você diria no jantar depois do painel, quando já parou de performar.\n\nManda. Vou estar nos comentários debatendo de boa-fé.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'crowdsourced_advice', - 'category' => 'engagement', - 'name' => 'Pedido de conselho coletivo', - 'description' => 'Peça à sua rede ajuda com um problema real e específico.', - 'content' => "Pedindo o cérebro coletivo num problema real que estamos tentando resolver na {{brand_name}}.\n\nContexto: [situação específica em 2-3 frases, suficiente pra alguém qualificado ajudar de verdade]. A restrição que faz a resposta óbvia não servir: [restrição específica].\n\nO que já tentei: [opção um, e por que não encaixou]; [opção dois, e o que ela me ensinou]. Então não estou atrás dessas.\n\nSe você já resolveu algo parecido, o que funcionou? Comentário é ótimo, mas DM está aberto se for daquelas coisas que prefere não falar em público. Vou escrever sobre o que decidirmos fazer e marcar quem ajudou a moldar.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/mastodon_post.php b/templates/pt-BR/mastodon_post.php deleted file mode 100644 index b272935a..00000000 --- a/templates/pt-BR/mastodon_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'mastodon_release_note', - 'category' => 'product_launch', - 'name' => 'Notas da release', - 'description' => 'Compartilhe uma atualização aberta e transparente sobre uma release.', - 'content' => "Notas da release de {{brand_name}}:\n\n→ [O que foi entregue]\n→ [Por que importa]\n→ [O que vem a seguir]\n\nFeedback é bem-vindo. Responda ou abra uma issue.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_lessons_learned', - 'category' => 'educational', - 'name' => 'Lições aprendidas', - 'description' => 'Compartilhe algo que você aprendeu, no estilo direto do Mastodon.', - 'content' => "Algo que aprendemos em {{brand_name}} esta semana:\n\n[Lição, seja específico.]\n\nA conclusão: [princípio].\n\nTalvez seja útil para outra pessoa construindo [coisa parecida].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_open_question', - 'category' => 'engagement', - 'name' => 'Pergunta aberta', - 'description' => 'Faça uma pergunta ao fediverso e colete perspectivas.', - 'content' => "Pergunta para o fediverso:\n\n[Pergunta aberta relevante para seu público.]\n\nBoosts são bem-vindos se seus seguidores tiverem algo a dizer.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'mastodon_version_bump', - 'category' => 'product_launch', - 'name' => 'Nova versão', - 'description' => 'Anuncie uma nova versão com o diff que realmente importa.', - 'content' => "{{brand_name}} [versão] saiu.\n\nO que mudou:\n- [Correção ou recurso]\n- [Correção ou recurso]\n- [Breaking change, se houver]\n\nNotas de upgrade: [link ou instrução curta].\n\nSe algo quebrar, conte para a gente. A gente lê toda resposta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_new_feature_in_public', - 'category' => 'product_launch', - 'name' => 'Recurso novo em público', - 'description' => 'Lance um recurso e explique por que foi feito assim.', - 'content' => "Adicionamos [recurso] em {{brand_name}} hoje.\n\nPor quê: [o motivo real, em uma frase].\n\nComo funciona: [descrição curta e concreta].\n\nO código está aqui: [link]. Pull requests são bem-vindos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_beta_invite', - 'category' => 'product_launch', - 'name' => 'Convite para beta', - 'description' => 'Convide o fediverso para um beta com expectativas honestas.', - 'content' => "Procuramos beta testers para [recurso] em {{brand_name}}.\n\nEstá rústico. Algumas coisas vão quebrar. Queremos saber quais.\n\nInscrição: [link]\n\nSem NDA, sem lista de marketing, sem upsell. Só precisamos de usuários reais.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_self_host_release', - 'category' => 'product_launch', - 'name' => 'Release para self-host', - 'description' => 'Avise quem faz self-host sobre uma release com os detalhes operacionais.', - 'content' => "Aviso a quem faz self-host de {{brand_name}}: [versão] foi taggeada.\n\nMigrations: [sim/não, estimativa de tempo]\nMudanças de config: [lista ou nenhuma]\nBreaking: [lista ou nenhuma]\n\nDocs: [link]. Issues: [link]. Boosts são bem-vindos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'mastodon_paid_plan_honest', - 'category' => 'promotion', - 'name' => 'Plano pago, sem rodeios', - 'description' => 'Mencione um plano pago sem soar como propaganda.', - 'content' => "{{brand_name}} agora tem plano pago. O que você ganha: [recurso], [recurso], [recurso].\n\nO plano gratuito continua fazendo [o que sempre fez]. Não estamos tirando nada.\n\nDetalhes: [link]. Perguntas são bem-vindas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_sponsor_us', - 'category' => 'promotion', - 'name' => 'Patrocine a gente', - 'description' => 'Peça patrocínio ou doações de forma transparente.', - 'content' => "{{brand_name}} é sustentado por [número] horas de trabalho voluntário e [custo de hosting] por mês.\n\nSe você usa e quer contribuir, o link de patrocínio está aqui: [link].\n\nA gente publica um detalhamento dos gastos a cada trimestre. Sem tiers, sem brindes, só o trabalho.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_discount_for_indies', - 'category' => 'promotion', - 'name' => 'Desconto para indies', - 'description' => 'Ofereça um desconto sem dark patterns.', - 'content' => "{{brand_name}} está com [desconto] de desconto para devs solo e pequenas cooperativas até [data].\n\nSem cupom, sem cadastro de email. O preço é só mais baixo se você escolher o tier [nome do plano]. Use se ajudar.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // educational - [ - 'slug' => 'mastodon_quick_explainer', - 'category' => 'educational', - 'name' => 'Explicação rápida', - 'description' => 'Explique um conceito em linguagem clara, sem enrolação.', - 'content' => "Explicação rápida: [conceito].\n\n[Definição em uma frase.]\n\n[Uma frase sobre por que importa na prática.]\n\nSe quiser a versão longa, escrevemos aqui: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_misconception', - 'category' => 'educational', - 'name' => 'Mal-entendido comum', - 'description' => 'Corrija um mal-entendido comum com exemplos concretos.', - 'content' => "Muita gente acha que [crença comum sobre seu tema].\n\nNão é bem assim. [A situação real, com um exemplo específico.]\n\nIsso importa porque [consequência prática].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_reading_list', - 'category' => 'educational', - 'name' => 'Lista de leitura', - 'description' => 'Compartilhe uma lista de leitura curta e opinativa.', - 'content' => "Coisas que andamos lendo em {{brand_name}}:\n\n- [Título], de [autor]: [motivo em uma linha].\n- [Título], de [autor]: [motivo em uma linha].\n- [Título], de [autor]: [motivo em uma linha].\n\nResponda com o que você anda lendo. Sempre procurando indicações novas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_how_we_decided', - 'category' => 'educational', - 'name' => 'Como decidimos', - 'description' => 'Mostre o caminho de uma decisão técnica ou de produto.', - 'content' => "Como escolhemos [ferramenta ou abordagem] em {{brand_name}}:\n\nTentamos [opção A]. Deu [problema]. Tentamos [opção B]. Tinha [tradeoff].\n\nFicamos com [opção escolhida] porque [motivo]. Não é perfeito. O que ainda incomoda é [ponto fraco].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'mastodon_dev_log', - 'category' => 'behind_the_scenes', - 'name' => 'Dev log', - 'description' => 'Compartilhe o que você de fato fez essa semana.', - 'content' => "Dev log, semana de [data]:\n\nSegunda: [coisa].\nTerça: [coisa].\nQuarta: [coisa que deu errado].\nQuinta: [conserto].\nSexta: [entregou ou adiou].\n\nEsta semana é mais [próximo foco].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_postmortem', - 'category' => 'behind_the_scenes', - 'name' => 'Postmortem curto', - 'description' => 'Compartilhe um postmortem em linguagem simples.', - 'content' => "{{brand_name}} teve uma indisponibilidade em [data]. A versão curta:\n\nO que quebrou: [sistema].\nPor quê: [causa raiz].\nDuração: [tempo].\nComo consertamos: [ação].\n\nWriteup completo com timeline: [link]. Desculpa pelo transtorno.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_tooling_setup', - 'category' => 'behind_the_scenes', - 'name' => 'Nosso ferramental', - 'description' => 'Mostre as ferramentas que você de fato usa.', - 'content' => "O que {{brand_name}} usa, caso você tenha curiosidade:\n\n- Editor: [editor]\n- Linguagem: [linguagem]\n- Banco: [banco]\n- Hosting: [host]\n- CI: [ci]\n\nNada exótico. Stack chata é stack produtiva.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_team_intro', - 'category' => 'behind_the_scenes', - 'name' => 'Quem somos', - 'description' => 'Apresente as pessoas por trás do projeto.', - 'content' => "Apresentação rápida: {{brand_name}} é [número] pessoas.\n\n[Nome] cuida de [área].\n[Nome] cuida de [área].\n[Nome] cuida de [área].\n\nA gente está espalhado por [regiões]. Contratamos abertamente quando contratamos, o que é raro. Olá.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'mastodon_user_quote', - 'category' => 'testimonial', - 'name' => 'Citação de usuário', - 'description' => 'Compartilhe uma citação real, com permissão e contexto.', - 'content' => "[Username] mandou isto sobre {{brand_name}}, postado com permissão:\n\n\"[Citação real.]\"\n\nIsso fez nossa semana. Obrigado [@username] por ter tirado um tempo pra escrever.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_use_case_share', - 'category' => 'testimonial', - 'name' => 'Como alguém usa', - 'description' => 'Destaque uma forma específica de alguém usar sua ferramenta.', - 'content' => "[Pessoa ou organização] usa {{brand_name}} para [caso de uso específico].\n\nO que contaram pra gente: \"[citação curta e específica].\"\n\nSe você tem um setup que vale a pena compartilhar, responda ou mande DM. A gente gosta de coletar esses casos.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_thanks_contributor', - 'category' => 'testimonial', - 'name' => 'Obrigado a um contribuidor', - 'description' => 'Dê crédito a um contribuidor pelo nome.', - 'content' => "Agradecimento a [@username] por [contribuição específica] em {{brand_name}}.\n\nEsse tipo de trabalho não é glamouroso e é o motivo de o projeto seguir andando. Muito obrigado.\n\nO PR está aqui: [link].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'mastodon_practical_tip', - 'category' => 'industry_tip', - 'name' => 'Dica prática', - 'description' => 'Compartilhe uma dica real e específica.', - 'content' => "Dica para quem trabalha com [tópico]:\n\n[Uma dica concreta em linguagem simples.]\n\nA gente descobriu isso na marra depois de [contexto curto]. Talvez economize algumas horas de outra pessoa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_unpopular_opinion', - 'category' => 'industry_tip', - 'name' => 'Opinião impopular', - 'description' => 'Compartilhe uma posição contrária em que você acredita de verdade.', - 'content' => "Opinião que nos coloca em apuros: [crença contrária na sua área].\n\nMotivo: [o caso específico em que isso vale].\n\nA gente aceita estar errado. Se você discorda, responda com o caso que a gente lê.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_anti_pattern', - 'category' => 'industry_tip', - 'name' => 'Antipattern', - 'description' => 'Aponte um antipattern comum com cuidado.', - 'content' => "Antipattern que vemos muito em [domínio]: [o padrão].\n\nPor que machuca: [modo de falha específico].\n\nO que fazer no lugar: [alternativa]. Nem sempre, mas na maioria das vezes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_stop_doing_this', - 'category' => 'industry_tip', - 'name' => 'Pare de fazer isso', - 'description' => 'Confronte um hábito que custa tempo das pessoas.', - 'content' => "Empurrão amigável: pare de [hábito comum] ao trabalhar com [domínio].\n\nIsso custa [custo específico] e a alternativa é [alternativa], que dá [esforço].\n\nA gente fez isso por anos. A mudança é pequena e o retorno é real.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // event - [ - 'slug' => 'mastodon_event_announce', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncie um evento sem hype.', - 'content' => "{{brand_name}} estará em [evento] no dia [data] em [cidade].\n\n[Palestrante ou pessoa do time] vai falar sobre [tópico] às [horário].\n\nSe você estiver por perto, passa pra dar um oi. Boosts são bem-vindos para quem do fediverso pode estar na cidade.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_meetup_call', - 'category' => 'event', - 'name' => 'Chamada para meetup', - 'description' => 'Convide pessoas para um encontro da comunidade.', - 'content' => "Chamada da comunidade {{brand_name}} nesta [dia] às [horário UTC].\n\nPauta: [tópico], [tópico], Q&A aberto.\n\nLink: [link do vídeo]. As notas saem depois em [link]. Sem barreira de login.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_event_recap', - 'category' => 'event', - 'name' => 'Resumo de evento', - 'description' => 'Resuma um evento com aprendizados concretos.', - 'content' => "De volta de [evento]. Três coisas que ficaram com a gente:\n\n1. [Aprendizado específico].\n2. [Aprendizado específico].\n3. [Aprendizado específico].\n\nOs slides da nossa palestra estão no ar: [link]. Obrigado a quem passou na nossa mesa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'mastodon_what_are_you_using', - 'category' => 'engagement', - 'name' => 'O que você está usando', - 'description' => 'Pergunte que ferramentas ou setups as pessoas usam.', - 'content' => "Curioso sobre o que o fediverso anda usando para [tarefa específica] em [ano].\n\nA gente está em [setup atual] e é [avaliação honesta]. Quero saber por o que você trocaria e por quê.\n\nResponda com a ferramenta e uma frase sobre o tradeoff.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mastodon_show_your_work', - 'category' => 'engagement', - 'name' => 'Mostre seu trabalho', - 'description' => 'Convide as pessoas a mostrarem o que estão construindo.', - 'content' => "Thread de mostre-e-conte: o que você está construindo esta semana?\n\nA gente começa. {{brand_name}} está trabalhando em [coisa]. Está em [estágio] e a gente está travado em [problema].\n\nResponda com o seu. Boosts ajudam outras pessoas a encontrar.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/pinterest_pin.php b/templates/pt-BR/pinterest_pin.php deleted file mode 100644 index 3d6e9ae7..00000000 --- a/templates/pt-BR/pinterest_pin.php +++ /dev/null @@ -1,306 +0,0 @@ - 'pinterest_how_to', - 'category' => 'educational', - 'name' => 'Pin de tutorial', - 'description' => 'Pin passo a passo que gera salvamentos e cliques.', - 'content' => "Como [alcançar resultado] em [tempo/esforço].\n\nUm guia simples de {{brand_name}}.\n\nPasso 1: [Ação]\nPasso 2: [Ação]\nPasso 3: [Ação]\n\nTutorial completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['tutorial', 'how-to', 'guide'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_inspiration', - 'category' => 'behind_the_scenes', - 'name' => 'Painel de inspiração', - 'description' => 'Pin inspirador em torno de um tema ou estética.', - 'content' => "Inspiração de [tema], selecionada por {{brand_name}}.\n\nSalve este pin para depois.\n\nMais em → [link]", - 'image_count' => 1, - 'image_keywords' => ['inspiration', 'aesthetic', 'mood'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_product_showcase', - 'category' => 'product_launch', - 'name' => 'Vitrine de produto', - 'description' => 'Destaque um produto com uma descrição que convida ao clique.', - 'content' => "[Nome do produto] da {{brand_name}}.\n\n[Descrição curta focada em benefício, o que é, por que importa.]\n\nCompre o look → [link]", - 'image_count' => 1, - 'image_keywords' => ['product', 'showcase', 'lifestyle'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_new_arrival', - 'category' => 'product_launch', - 'name' => 'Pin de novidade', - 'description' => 'Anuncie um produto novo com palavras-chave de busca.', - 'content' => "Novidade da {{brand_name}}: [nome do produto].\n\n[Uma frase sobre o que é e para quem é.]\n\nPrincipais características:\n- [Característica 1]\n- [Característica 2]\n- [Característica 3]\n\nDisponível em [cores/tamanhos/opções].\n\nCompre a coleção [categoria] → [link]", - 'image_count' => 1, - 'image_keywords' => ['new product', 'launch', 'collection'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_collection_drop', - 'category' => 'product_launch', - 'name' => 'Pin de lançamento de coleção', - 'description' => 'Apresente uma coleção curada de produtos.', - 'content' => "A coleção [nome da coleção] chegou.\n\n{{brand_name}} montou [número] peças em torno de [tema ou estação].\n\nO que tem dentro:\n- [Tipo de item 1]\n- [Tipo de item 2]\n- [Tipo de item 3]\n\nFeita para [uso ou público].\n\nVeja a coleção completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['collection', 'lookbook', 'curated'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pre_order', - 'category' => 'product_launch', - 'name' => 'Pin de pré-venda', - 'description' => 'Gere salvamentos e pré-vendas de um produto que vem aí.', - 'content' => "Pré-venda aberta: [nome do produto].\n\nEnvio começa em [data]. Quem fizer pré-venda em {{brand_name}} ganha [vantagem: acesso antecipado, item bônus, preço travado].\n\nPor que comprar na pré-venda:\n- [Motivo 1]\n- [Motivo 2]\n\nReserve o seu → [link]", - 'image_count' => 1, - 'image_keywords' => ['pre-order', 'launch', 'early access'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_seasonal_sale', - 'category' => 'promotion', - 'name' => 'Pin de promoção sazonal', - 'description' => 'Divulgue uma promoção sazonal com desconto claro.', - 'content' => "Promoção de [estação] na {{brand_name}}: [desconto]% off em [categoria].\n\nVálido até [data final].\n\nO que está em promoção:\n- [Categoria 1]\n- [Categoria 2]\n- [Categoria 3]\n\nUse o cupom [CÓDIGO] no checkout.\n\nAproveite a promoção → [link]", - 'image_count' => 1, - 'image_keywords' => ['sale', 'discount', 'seasonal shopping'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_bundle_deal', - 'category' => 'promotion', - 'name' => 'Pin de combo', - 'description' => 'Pin de combo com preços em tópicos.', - 'content' => "O combo [nome do combo] da {{brand_name}}.\n\nLeve [item 1] + [item 2] + [item 3] juntos e economize [valor].\n\nO que está incluso:\n- [Item 1] (normalmente [preço])\n- [Item 2] (normalmente [preço])\n- [Item 3] (normalmente [preço])\n\nPreço do combo: [preço].\n\nGaranta o combo → [link]", - 'image_count' => 1, - 'image_keywords' => ['bundle', 'value pack', 'savings'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_free_shipping', - 'category' => 'promotion', - 'name' => 'Pin de frete grátis', - 'description' => 'Pin com oferta centrada em frete grátis.', - 'content' => "Frete grátis em todos os pedidos da {{brand_name}}.\n\nSem mínimo, sem cupom. Até [data final].\n\nO que colocar no carrinho:\n- [Mais vendido 1]\n- [Mais vendido 2]\n- [Mais vendido 3]\n\nCompre agora → [link]", - 'image_count' => 1, - 'image_keywords' => ['free shipping', 'offer', 'deal'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_clearance', - 'category' => 'promotion', - 'name' => 'Pin de queima de estoque', - 'description' => 'Gire o estoque de queima com um pin que vale salvar.', - 'content' => "Queima de estoque na {{brand_name}}: até [desconto]% off.\n\nÚltimas remarcações em [categoria]. Quando acabar, acabou.\n\nDestaques:\n- [Item 1], [preço]\n- [Item 2], [preço]\n- [Item 3], [preço]\n\nVeja a queima de estoque → [link]", - 'image_count' => 1, - 'image_keywords' => ['clearance', 'final sale', 'markdown'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_recipe', - 'category' => 'educational', - 'name' => 'Pin de receita', - 'description' => 'Pin de receita que vale salvar, com ingredientes e modo de preparo.', - 'content' => "[Nome da receita], pronta em [tempo].\n\nDireto da cozinha de {{brand_name}}.\n\nIngredientes:\n- [Ingrediente 1]\n- [Ingrediente 2]\n- [Ingrediente 3]\n- [Ingrediente 4]\n\nModo de preparo:\n1. [Passo 1]\n2. [Passo 2]\n3. [Passo 3]\n\nRende [número] porções. Receita completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['recipe', 'food', 'cooking'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_checklist', - 'category' => 'educational', - 'name' => 'Pin de checklist', - 'description' => 'Pin prático de checklist feito para salvar.', - 'content' => "O checklist de [tema] da {{brand_name}}.\n\n[Uma frase sobre para quem é.]\n\nO checklist:\n- [Item 1]\n- [Item 2]\n- [Item 3]\n- [Item 4]\n- [Item 5]\n\nSalve este pin para ter à mão quando precisar.\n\nBaixe a versão para imprimir → [link]", - 'image_count' => 1, - 'image_keywords' => ['checklist', 'planner', 'printable'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_beginners_guide', - 'category' => 'educational', - 'name' => 'Pin de guia para iniciantes', - 'description' => 'Pin explicativo amigável para quem está começando.', - 'content' => "[Tema] para iniciantes.\n\nSe você é novo em [tema], comece por aqui. {{brand_name}} reuniu o básico.\n\nO que você precisa saber:\n1. [Conceito 1]\n2. [Conceito 2]\n3. [Conceito 3]\n\nErro comum de iniciante: [erro].\n\nLeia o guia completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['beginner guide', 'basics', 'tutorial'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_diy_tutorial', - 'category' => 'educational', - 'name' => 'Pin de tutorial DIY', - 'description' => 'Pin de projeto faça-você-mesmo com lista de materiais.', - 'content' => "DIY [nome do projeto] em [tempo].\n\nUm projeto de fim de semana de {{brand_name}}.\n\nO que você precisa:\n- [Material 1]\n- [Material 2]\n- [Material 3]\n- [Ferramenta 1]\n\nOs passos:\n1. [Passo 1]\n2. [Passo 2]\n3. [Passo 3]\n\nCusto estimado: [valor].\n\nTutorial completo com fotos → [link]", - 'image_count' => 1, - 'image_keywords' => ['DIY', 'craft project', 'handmade'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_studio_tour', - 'category' => 'behind_the_scenes', - 'name' => 'Pin de tour pelo estúdio', - 'description' => 'Leve os seguidores para dentro do espaço de trabalho.', - 'content' => "Por dentro do estúdio de {{brand_name}}.\n\n[Uma frase sobre o que acontece aqui.]\n\nTrês coisas que você vai notar:\n- [Detalhe 1]\n- [Detalhe 2]\n- [Detalhe 3]\n\n[Uma observação sobre o espaço, a equipe ou a rotina.]\n\nMais fotos do estúdio → [link]", - 'image_count' => 1, - 'image_keywords' => ['studio', 'workspace', 'creative space'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_process_pin', - 'category' => 'behind_the_scenes', - 'name' => 'Pin de processo de produção', - 'description' => 'Mostre o ofício por trás do produto.', - 'content' => "Como {{brand_name}} faz [produto].\n\nDe [matéria-prima] até a peça pronta, cada etapa acontece [onde].\n\nO processo:\n1. [Etapa 1]\n2. [Etapa 2]\n3. [Etapa 3]\n4. [Etapa 4]\n\nTempo total por peça: [duração].\n\nVeja o processo completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['handmade', 'craft', 'process'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_founder_story', - 'category' => 'behind_the_scenes', - 'name' => 'Pin de história do fundador', - 'description' => 'Pin pessoal sobre a origem da marca.', - 'content' => "Como {{brand_name}} começou.\n\n[Nome do fundador] lançou [marca] em [ano] depois de [momento de origem].\n\n[Duas frases curtas sobre o porquê e os primeiros tempos.]\n\nO que é diferente no nosso jeito de trabalhar:\n- [Valor 1]\n- [Valor 2]\n\nLeia a história completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['founder story', 'small business', 'brand story'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_customer_review', - 'category' => 'testimonial', - 'name' => 'Pin de avaliação de cliente', - 'description' => 'Pin com citação direta de um cliente real.', - 'content' => "\"[Avaliação do cliente sobre o produto].\"\n- [Primeiro nome do cliente], [cidade ou contexto]\n\nClientes da {{brand_name}} deixam avaliações assim toda semana.\n\nO que [primeiro nome do cliente] comprou: [nome do produto].\nPor que comprou: [motivo].\n\nVeja mais avaliações → [link]", - 'image_count' => 1, - 'image_keywords' => ['customer review', 'testimonial', 'social proof'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_before_after', - 'category' => 'testimonial', - 'name' => 'Pin de antes e depois', - 'description' => 'Pin de transformação visual.', - 'content' => "Antes e depois com [produto ou serviço] da {{brand_name}}.\n\nAntes: [estado inicial].\nDepois: [resultado final].\nTempo: [duração].\n\nO que [nome do cliente] usou:\n- [Item 1]\n- [Item 2]\n\n[Uma frase sobre a reação do cliente.]\n\nVeja mais antes e depois → [link]", - 'image_count' => 1, - 'image_keywords' => ['before and after', 'transformation', 'results'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_case_study', - 'category' => 'testimonial', - 'name' => 'Pin de estudo de caso', - 'description' => 'Mini estudo de caso com números concretos.', - 'content' => "Estudo de caso: como [nome do cliente] usou {{brand_name}} para [resultado].\n\nA situação: [uma frase].\nO que tentaram: [produto ou serviço].\nO resultado: [número ou resultado específico] em [prazo].\n\nPor que funcionou:\n- [Motivo 1]\n- [Motivo 2]\n\nLeia o estudo de caso completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['case study', 'results', 'success story'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pro_tip', - 'category' => 'industry_tip', - 'name' => 'Pin de dica de profissional', - 'description' => 'Pin com uma única dica e ganho claro.', - 'content' => "Dica de profissional: [dica em uma frase].\n\nA maioria das pessoas [erro comum]. A solução é [a técnica de fato].\n\nPor que funciona: [uma frase com o motivo].\n\nQuando usar: [contexto ou cenário].\n\nMais dicas de [tema] de {{brand_name}} → [link]", - 'image_count' => 1, - 'image_keywords' => ['pro tip', 'expert advice', 'industry tips'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_common_mistakes', - 'category' => 'industry_tip', - 'name' => 'Pin de erros comuns', - 'description' => 'Lista de erros que o leitor pode evitar.', - 'content' => "[Número] erros de [tema] para evitar.\n\n{{brand_name}} vê isso toda semana. Salve o pin para não repetir.\n\nOs erros:\n1. [Erro 1], faça assim: [solução]\n2. [Erro 2], faça assim: [solução]\n3. [Erro 3], faça assim: [solução]\n\nLeia a análise completa → [link]", - 'image_count' => 1, - 'image_keywords' => ['common mistakes', 'tips', 'expert advice'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_industry_stat', - 'category' => 'industry_tip', - 'name' => 'Pin de estatística do setor', - 'description' => 'Pin baseado em dado que ancora um insight útil.', - 'content' => "[Estatística com número]% de [público] [comportamento].\nFonte: [fonte, ano].\n\nO que isso significa para você: [uma frase sobre a implicação].\n\nTrês formas como clientes da {{brand_name}} respondem:\n- [Tática 1]\n- [Tática 2]\n- [Tática 3]\n\nLeia o relatório completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['industry data', 'statistics', 'research'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_workshop', - 'category' => 'event', - 'name' => 'Pin de workshop', - 'description' => 'Pin para divulgar um workshop presencial ou online.', - 'content' => "[Nome do workshop] com {{brand_name}}.\n\n[Data] · [horário] · [local ou online].\n\nO que você vai aprender:\n- [Aprendizado 1]\n- [Aprendizado 2]\n- [Aprendizado 3]\n\nPara quem é: [público].\nVagas: [número] limitadas.\nPreço: [valor].\n\nReserve sua vaga → [link]", - 'image_count' => 1, - 'image_keywords' => ['workshop', 'class', 'learning event'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_pop_up', - 'category' => 'event', - 'name' => 'Pin de loja pop-up', - 'description' => 'Atraia público para uma loja pop-up.', - 'content' => "Loja pop-up de {{brand_name}} em [cidade].\n\n[Período] · [endereço] · [horário].\n\nO que você vai encontrar:\n- [Categoria 1]\n- [Categoria 2]\n- [Exclusivo da loja]\n\n[Uma frase sobre o que faz o dia valer a visita.]\n\nVeja como chegar e detalhes → [link]", - 'image_count' => 1, - 'image_keywords' => ['pop-up shop', 'event', 'in-person shopping'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_webinar', - 'category' => 'event', - 'name' => 'Pin de webinar', - 'description' => 'Divulgue um webinar gratuito ou pago.', - 'content' => "Webinar gratuito: [tema].\n\nApresentado por {{brand_name}} em [data] às [horário, fuso].\n\nO que vamos cobrir:\n- [Tópico 1]\n- [Tópico 2]\n- [Tópico 3]\n\nPara quem é: [público].\nGravação: enviada para todos que se inscreverem.\n\nGaranta sua vaga → [link]", - 'image_count' => 1, - 'image_keywords' => ['webinar', 'online event', 'training'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_holiday_event', - 'category' => 'event', - 'name' => 'Pin de evento de feriado', - 'description' => 'Pin de evento ou promoção temática de feriado.', - 'content' => "Evento de [feriado] da {{brand_name}}.\n\n[Data] · [local ou online].\n\nNa programação:\n- [Atividade 1]\n- [Atividade 2]\n- [Atividade 3]\n\nO que esperar: [uma frase].\nConfirme presença até [data].\n\nProgramação completa e RSVP → [link]", - 'image_count' => 1, - 'image_keywords' => ['holiday event', 'seasonal', 'celebration'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_question_pin', - 'category' => 'engagement', - 'name' => 'Pin de pergunta', - 'description' => 'Pin com pergunta que convida a comentar.', - 'content' => "[Pergunta aberta para o público].\n\n{{brand_name}} quer saber. Deixe sua resposta nos comentários.\n\nAlgumas pistas para pensar:\n- [Pista 1]\n- [Pista 2]\n- [Pista 3]\n\nVamos compartilhar as respostas mais interessantes na próxima semana.\n\nEntre na conversa → [link]", - 'image_count' => 1, - 'image_keywords' => ['question', 'community', 'discussion'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_this_or_that', - 'category' => 'engagement', - 'name' => 'Pin de isto ou aquilo', - 'description' => 'Pin de preferência lado a lado.', - 'content' => "Isto ou aquilo: [opção A] ou [opção B].\n\n{{brand_name}} quer saber qual é o seu lado. Não tem resposta errada.\n\nA favor de [opção A]: [uma frase].\nA favor de [opção B]: [uma frase].\n\nVote nos comentários. Vamos contar os votos.\n\nMais enquetes → [link]", - 'image_count' => 1, - 'image_keywords' => ['poll', 'this or that', 'preference'], - 'slides' => null, - ], - [ - 'slug' => 'pinterest_giveaway', - 'category' => 'engagement', - 'name' => 'Pin de sorteio', - 'description' => 'Pin que anuncia um sorteio com regras claras.', - 'content' => "Sorteio de {{brand_name}}: ganhe [prêmio].\n\nUm vencedor escolhido em [data].\n\nComo participar:\n1. Salve este pin.\n2. Siga {{brand_name}} no Pinterest.\n3. Comente com [pista].\n\nAberto para: [região].\nValor: [valor].\n\nRegulamento completo → [link]", - 'image_count' => 1, - 'image_keywords' => ['giveaway', 'contest', 'prize'], - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/threads_post.php b/templates/pt-BR/threads_post.php deleted file mode 100644 index 4e27e60f..00000000 --- a/templates/pt-BR/threads_post.php +++ /dev/null @@ -1,322 +0,0 @@ - 'threads_hot_take', - 'category' => 'industry_tip', - 'name' => 'Opinião polêmica', - 'description' => 'Um post curto e opinativo feito pra gerar respostas.', - 'content' => "Opinião impopular: [afirmação contraintuitiva sobre seu setor].\n\nPor que eu acho isso →\n\n[Raciocínio breve em 1 ou 2 frases.]\n\nTô errado?", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_quick_tip', - 'category' => 'educational', - 'name' => 'Dica rápida', - 'description' => 'Uma dica acionável, em tom curto e amigável.', - 'content' => "Dica rápida da {{brand_name}}:\n\n[Uma dica única, específica e acionável.]\n\nParece simples. Muda tudo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_question', - 'category' => 'engagement', - 'name' => 'Pergunta aberta', - 'description' => 'Pergunte algo pra comunidade pra puxar conversa.', - 'content' => "Pergunta sincera pra comunidade da {{brand_name}}:\n\n[Pergunta, aberta e específica o bastante pra responder.]\n\nNão tem resposta errada. Curioso pra ler as suas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // PRODUCT LAUNCH - [ - 'slug' => 'threads_product_launch_soft', - 'category' => 'product_launch', - 'name' => 'Lançamento discreto', - 'description' => 'Anúncio casual e despretensioso de algo novo.', - 'content' => "ok então. a gente lançou [nome do produto] hoje.\n\ntô trabalhando nisso há [tempo de duração] e meio que não acredito que tá no ar.\n\n[uma coisa específica que ele faz e que você tem orgulho].\n\nse você testar, me conta o que quebra.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_product_launch_story', - 'category' => 'product_launch', - 'name' => 'Por que a gente fez', - 'description' => 'História pessoal por trás do produto ou recurso novo.', - 'content' => "comecei a construir [nome do produto] porque [frustração pessoal específica].\n\nachei que ia levar um fim de semana. levou [tempo real].\n\ntá no ar agora em {{brand_name}}. honestamente ainda surpreso que funciona.\n\nadoraria saber o que você acha depois de mexer um pouco.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_product_launch_feature', - 'category' => 'product_launch', - 'name' => 'Recurso novo', - 'description' => 'Anuncia um único recurso dentro de um produto existente.', - 'content' => "coisa pequena mas tô estranhamente animado.\n\n{{brand_name}} agora [faz essa coisa específica].\n\no motivo: o pessoal ficava pedindo [a necessidade por trás]. então a gente fez.\n\ntá no ar. testa lá e me conta se é útil de verdade ou só uma coisa nova agora.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // PROMOTION - [ - 'slug' => 'threads_promo_discount', - 'category' => 'promotion', - 'name' => 'Desconto casual', - 'description' => 'Jeito tranquilo de mencionar uma promoção ou desconto.', - 'content' => "rolando [valor do desconto] off em [produto ou plano] essa semana em {{brand_name}}.\n\nnão vou fazer aquela parada de contagem regressiva. só achei melhor mencionar uma vez e deixar o pessoal decidir.\n\ncódigo: [código]. termina [data].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_promo_bundle', - 'category' => 'promotion', - 'name' => 'Combo', - 'description' => 'Promove um combo em tom relaxado.', - 'content' => "juntei [item um] e [item dois] num combo porque o pessoal ficava comprando os dois no mesmo pedido de qualquer jeito.\n\no par sai por [preço] em {{brand_name}}, que é tipo [economia] menos do que comprar separado.\n\né isso. é o post.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_promo_last_chance', - 'category' => 'promotion', - 'name' => 'Última chance', - 'description' => 'Empurrãozinho amigável de que uma oferta tá acabando.', - 'content' => "aviso amigável: [nome da oferta] termina [data ou hora].\n\nnão tô tentando ser chato. alguns de vocês pediram pra eu lembrar, então considera esse o lembrete.\n\nlink na bio se você quiser. zero ressentimento se não.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // EDUCATIONAL - [ - 'slug' => 'threads_edu_mistake', - 'category' => 'educational', - 'name' => 'Erro que eu cometi', - 'description' => 'Ensinar compartilhando um erro pessoal.', - 'content' => "cometi o mesmo erro [número] vezes antes de sacar isso:\n\n[o erro em uma frase].\n\na solução é [a solução real em palavras simples]. nada chique. só tive que parar de fazer aquilo.\n\npostando caso você esteja preso no mesmo loop.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_misconception', - 'category' => 'educational', - 'name' => 'Mito comum', - 'description' => 'Corrigir uma crença comum mas errada.', - 'content' => "o pessoal vive me falando [crença comum no seu setor].\n\nnão é assim que funciona.\n\n[o que acontece de verdade, em palavras simples].\n\npode ser óbvio pra alguns de vocês. aparentemente não pra maioria do pessoal que me mandou e-mail semana passada.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_resource', - 'category' => 'educational', - 'name' => 'Indicação de recurso', - 'description' => 'Recomenda um recurso útil com contexto pessoal.', - 'content' => "se você tá tentando aprender [tópico], para de assistir vídeo de 4 horas no youtube e lê [recurso específico].\n\nadiei isso por meses porque o título é chato. é a única coisa que realmente fez sentido pra mim.\n\né essa a indicação.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_edu_step_breakdown', - 'category' => 'educational', - 'name' => 'Passo a passo rápido', - 'description' => 'Mini passo a passo em tom de conversa.', - 'content' => "a parada de [tarefa] em 4 linhas pra quem fica perguntando:\n\n1. [passo um]\n2. [passo dois]\n3. [passo três]\n4. [passo quatro]\n\né esse o processo todo. você não precisa de um curso pra isso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // BEHIND THE SCENES - [ - 'slug' => 'threads_bts_morning', - 'category' => 'behind_the_scenes', - 'name' => 'Rotina da manhã', - 'description' => 'Espiada casual em como começa um dia de trabalho.', - 'content' => "hoje em {{brand_name}}:\n\n- café\n- olhei pra [problema específico] por uma hora\n- percebi que o bug tava na linha [número]\n- arrumei em 4 minutos\n\na proporção de pensar pra fazer nesse trabalho é genuinamente amaldiçoada.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_decision', - 'category' => 'behind_the_scenes', - 'name' => 'Decisão que a gente tomou', - 'description' => 'Compartilha uma decisão interna e o raciocínio.', - 'content' => "decidimos [decisão específica] essa semana.\n\na outra opção era [alternativa]. metade do time queria essa. eu meio que ainda quero.\n\nmas [o motivo real dessa decisão ter ganho].\n\nme pergunta daqui 3 meses se foi a escolha certa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_messy_progress', - 'category' => 'behind_the_scenes', - 'name' => 'Progresso bagunçado', - 'description' => 'Atualização honesta no meio do projeto.', - 'content' => "estado atual de [nome do projeto]:\n\n- [porcentagem] pronto\n- [coisa específica que tá funcionando]\n- [coisa específica que não tá funcionando]\n- [número] abas abertas que tô com medo de fechar\n\nlanço quando parar de me envergonhar.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_bts_team_moment', - 'category' => 'behind_the_scenes', - 'name' => 'Momento do time', - 'description' => 'Pequeno momento humano do time.', - 'content' => "[nome de alguém do time] acabou de mandar uma mensagem no slack que dizia \"[citação curta engraçada ou perspicaz]\" e agora a gente não consegue parar de citar.\n\nconstruir {{brand_name}} com essas pessoas é metade do motivo de eu ainda gostar do trabalho.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // TESTIMONIAL - [ - 'slug' => 'threads_testimonial_quote', - 'category' => 'testimonial', - 'name' => 'Frase de cliente', - 'description' => 'Compartilha uma frase real de cliente com contexto leve.', - 'content' => "recebi esse e-mail de [primeiro nome ou iniciais] ontem:\n\n\"[citação direta do cliente, 1 a 2 frases]\"\n\nli duas vezes. essa é a parte do trabalho que não aparece nas métricas.\n\nobrigado por usar {{brand_name}}. de verdade.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_testimonial_outcome', - 'category' => 'testimonial', - 'name' => 'Resultado de cliente', - 'description' => 'Fala sobre um resultado real de cliente sem se gabar.', - 'content' => "[primeiro nome do cliente] me falou ontem que [resultado específico] depois de usar {{brand_name}} por [período de tempo].\n\nnão pedi pra ela compartilhar. ela só mandou o print e disse \"achei que você ia querer ver isso.\"\n\né. quis mesmo.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_testimonial_unexpected', - 'category' => 'testimonial', - 'name' => 'Uso inesperado', - 'description' => 'Destaca um jeito surpreendente de usar o produto.', - 'content' => "não esperava por essa.\n\numa pessoa usando {{brand_name}} pra [uso inesperado]. não foi pra isso que a gente fez. aparentemente funciona.\n\nparte favorita de lançar coisas é descobrir o que o pessoal realmente faz com elas.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // INDUSTRY TIP - [ - 'slug' => 'threads_industry_observation', - 'category' => 'industry_tip', - 'name' => 'Observação do setor', - 'description' => 'Compartilha um padrão que você vem notando na sua área.', - 'content' => "coisa que eu venho notando em [setor]:\n\n[observação específica em uma frase].\n\npode ser uma mudança real. pode ser viés de seleção de quem eu falo. me conta se você tá vendo também.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_lesson', - 'category' => 'industry_tip', - 'name' => 'Lição da experiência', - 'description' => 'Uma lição duramente aprendida, sem enrolação.', - 'content' => "[número] anos em [setor] e a lição que mais demorou pra eu acreditar de verdade:\n\n[a lição em uma frase].\n\nainda me pego ignorando. aí algo quebra. aí eu lembro.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_pushback', - 'category' => 'industry_tip', - 'name' => 'Discordando do senso comum', - 'description' => 'Discorda educadamente de um conselho comum.', - 'content' => "o conselho padrão em [setor] é [conselho comum].\n\ntô fazendo o oposto há [período de tempo]. funciona melhor pra mim, pelo menos.\n\n[breve motivo].\n\nnão tô dizendo que todo mundo deveria. só que a regra não é uma regra.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_industry_prediction', - 'category' => 'industry_tip', - 'name' => 'Previsão discreta', - 'description' => 'Faz uma previsão sem se exibir.', - 'content' => "previsão pequena:\n\nem [prazo de tempo], [mudança específica no seu setor] vai ser normal.\n\nposso estar muito errado. salvando isso pra voltar e rir de mim depois.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // EVENT - [ - 'slug' => 'threads_event_announcement', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anuncia um evento próximo de forma casual.', - 'content' => "{{brand_name}} vai fazer [nome do evento] em [data].\n\n[uma ou duas frases sobre o que é de verdade e quem ia se interessar].\n\n[local ou link]. avisa um amigo se parecer a praia dele.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_event_recap', - 'category' => 'event', - 'name' => 'Recap de evento', - 'description' => 'Resumo honesto depois de um evento.', - 'content' => "voltei do [nome do evento].\n\na melhor parte foi [momento ou conversa específica].\n\na parte mais estranha foi [observação honesta].\n\nse você tava lá e a gente não conseguiu conversar, me chama. sempre tem mais coisa pra falar depois que o painel acaba.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_event_invite', - 'category' => 'event', - 'name' => 'Convite pessoal', - 'description' => 'Convite direto que parece pessoal.', - 'content' => "vou fazer um [tipo de evento] pequeno pela {{brand_name}} em [data] e quero você lá de verdade.\n\né [duração] e a gente vai falar sobre [tópico específico].\n\nconfirma em [link] se quiser entrar. tô limitando em [número] pra ficar uma conversa de verdade.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // ENGAGEMENT - [ - 'slug' => 'threads_engagement_recommendation', - 'category' => 'engagement', - 'name' => 'Pedido de indicação', - 'description' => 'Pergunta pro público por indicações.', - 'content' => "procurando indicações:\n\n[coisa específica que você precisa de indicações].\n\njá testei [opção a] e [opção b]. preciso de algo que [restrição específica].\n\nmelhor resposta ganha minha gratidão eterna. é esse o prêmio.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_engagement_this_or_that', - 'category' => 'engagement', - 'name' => 'Isso ou aquilo', - 'description' => 'Pergunta binária rápida pra puxar respostas.', - 'content' => "[opção a] ou [opção b].\n\nsem meio termo. sem \"depende\". escolhe uma e me conta por quê.\n\na versão {{brand_name}} desse debate tá rolando no chat do time e a gente tá profundamente, profundamente dividido.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'threads_engagement_confession', - 'category' => 'engagement', - 'name' => 'Confissão pequena', - 'description' => 'Compartilha algo pequeno e relacionável.', - 'content' => "confissão pequena.\n\neu ainda [hábito levemente embaraçoso ligado ao seu trabalho ou vida].\n\nme fala que não sou o único. ou me fala que sou o único. de qualquer jeito eu queria saber.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/templates/pt-BR/x_post.php b/templates/pt-BR/x_post.php deleted file mode 100644 index ce2296ad..00000000 --- a/templates/pt-BR/x_post.php +++ /dev/null @@ -1,342 +0,0 @@ - 'flash_sale', - 'category' => 'promotion', - 'name' => 'Promoção relâmpago', - 'description' => 'Post curto no X para promoção relâmpago com urgência.', - 'content' => "🔥 Promoção relâmpago na {{brand_name}}!\n\n[Desconto]% off em [produto/serviço], só nas próximas 24h.\n\nSem cupom → [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'success_story', - 'category' => 'testimonial', - 'name' => 'Caso de sucesso', - 'description' => 'Formato breve de caso de sucesso para o X.', - 'content' => "\"[Frase curta do cliente.]\"\n- @[handle]\n\nÉ por isso que a gente faz o que faz na {{brand_name}}. 🙌", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'this_or_that_poll', - 'category' => 'engagement', - 'name' => 'Isso ou aquilo', - 'description' => 'Engaje o público com uma escolha binária simples.', - 'content' => "Pergunta rápida pra galera da {{brand_name}}:\n\n[Opção A] ou [Opção B]?\n\nResponde aí com a sua escolha e o porquê 👇", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // product_launch - [ - 'slug' => 'shipped_today', - 'category' => 'product_launch', - 'name' => 'Saiu hoje', - 'description' => 'Aviso casual de release com uma mudança concreta.', - 'content' => "Saiu hoje: [feature].\n\nFaz [coisa específica] pra você parar de [gambiarra chata].\n\nJá tá no ar na {{brand_name}}.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'new_feature_one_liner', - 'category' => 'product_launch', - 'name' => 'Feature em uma linha', - 'description' => 'Pitch de uma frase para uma nova feature.', - 'content' => "{{brand_name}} agora [faz coisa específica].\n\nSe você tá [fazendo gambiarra dolorosa], testa: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'beta_invite', - 'category' => 'product_launch', - 'name' => 'Convite pro beta', - 'description' => 'Chamada aberta para testadores beta.', - 'content' => "Vamos abrir o beta de [feature] essa semana.\n\nProcurando [número] pessoas que [caso de uso].\n\nResponde aí se for o seu caso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'finally_built_it', - 'category' => 'product_launch', - 'name' => 'Finalmente saiu', - 'description' => 'Tom honesto de "demorou mas saiu".', - 'content' => "Finalmente fizemos [feature]. O pessoal pedia desde [período].\n\nJá tá no ar na {{brand_name}} hoje. Desculpa a demora.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // promotion - [ - 'slug' => 'weekend_deal', - 'category' => 'promotion', - 'name' => 'Oferta de fim de semana', - 'description' => 'Post de desconto só no fim de semana.', - 'content' => "Só no fim de semana: [desconto] off em [produto] na {{brand_name}}.\n\nCupom [CODE]. Vale até domingo à meia-noite. É só isso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'free_shipping', - 'category' => 'promotion', - 'name' => 'Frete grátis', - 'description' => 'Aviso de janela de frete grátis.', - 'content' => "Frete grátis em todo pedido na {{brand_name}} acima de R$[valor] essa semana.\n\nSem cupom, sem pegadinha. Volta ao normal segunda.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'last_call', - 'category' => 'promotion', - 'name' => 'Última chamada', - 'description' => 'Horas finais de uma promoção.', - 'content' => "Última chamada. [Nome da promo] acaba hoje às [hora].\n\nSe você tem {{brand_name}} no carrinho, é o preço mais baixo do ano: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'bundle_offer', - 'category' => 'promotion', - 'name' => 'Oferta de combo', - 'description' => 'Pitch de combo como oferta econômica.', - 'content' => "Combo novo na {{brand_name}}: [Produto A] + [Produto B] por [preço].\n\nFica [valor] mais barato que separado. Só [quantidade] unidades.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // educational - [ - 'slug' => 'one_thing_we_learned', - 'category' => 'educational', - 'name' => 'Uma coisa que aprendemos', - 'description' => 'Compartilhe uma única lição concreta.', - 'content' => "Uma coisa que aprendemos na {{brand_name}} esse mês:\n\n[Descoberta]. Achávamos [suposição antiga], mas [dado] mostrou o contrário.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'common_mistake', - 'category' => 'educational', - 'name' => 'Erro comum', - 'description' => 'Aponte um erro que as pessoas cometem.', - 'content' => "A maioria erra em [tópico] porque [erro comum].\n\nO que funciona: [contra-abordagem]. Testamos com [número] clientes.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'quick_tip', - 'category' => 'educational', - 'name' => 'Dica rápida', - 'description' => 'Dica pequena e prática.', - 'content' => "Dica rápida se você usa {{brand_name}}:\n\n[Ação] antes de [passo]. Economiza uns [tempo/resultado] pra maioria.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'myth_vs_reality', - 'category' => 'educational', - 'name' => 'Mito vs realidade', - 'description' => 'Derrube um mito do setor.', - 'content' => "Mito: [crença comum sobre tópico].\n\nRealidade: [contra-fato com número]. A gente vê isso nos dados da {{brand_name}} toda semana.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // behind_the_scenes - [ - 'slug' => 'how_we_built_it', - 'category' => 'behind_the_scenes', - 'name' => 'Como construímos', - 'description' => 'Espiada casual nos bastidores.', - 'content' => "Como fizemos [feature] na {{brand_name}}:\n\nComeçamos com [primeira tentativa]. Quebrou. Trocamos por [abordagem 2]. Foi essa que subiu.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'team_at_work', - 'category' => 'behind_the_scenes', - 'name' => 'Time em ação', - 'description' => 'Foto do que o time tá fazendo agora.', - 'content' => "O que o time da {{brand_name}} tá fazendo agora:\n\n[Pessoa/cargo] debugando [problema]. [Pessoa/cargo] no [outro projeto]. Nível de café: alto.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'mistake_we_made', - 'category' => 'behind_the_scenes', - 'name' => 'Erro que cometemos', - 'description' => 'Postmortem honesto em um tweet.', - 'content' => "A gente errou na {{brand_name}} semana passada.\n\n[O que quebrou]. Causou [impacto] pra [número] clientes. Resolvemos [como]. Desculpa quem foi afetado.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'office_moment', - 'category' => 'behind_the_scenes', - 'name' => 'Momento do escritório', - 'description' => 'Cena pequena e humana do escritório.', - 'content' => "Cena aleatória do escritório da {{brand_name}}:\n\n[Cena, ex.: designer brigando com dev por 2px de border-radius]. É assim quase todo dia, juro.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // testimonial - [ - 'slug' => 'customer_dm', - 'category' => 'testimonial', - 'name' => 'DM de cliente', - 'description' => 'Compartilhe uma DM real de cliente.', - 'content' => "Recebi essa DM de um cliente da {{brand_name}} hoje:\n\n\"[Frase curta sobre o que mudou pra ele].\"\n\nÉ a parte do trabalho que não enjoa.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'before_and_after', - 'category' => 'testimonial', - 'name' => 'Antes e depois', - 'description' => 'Números concretos de antes/depois de um cliente.', - 'content' => "[Cliente] antes da {{brand_name}}: [métrica].\n\n[Cliente] depois de [período]: [nova métrica].\n\nNada mais mudou no setup dele.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'one_line_review', - 'category' => 'testimonial', - 'name' => 'Review de uma linha', - 'description' => 'Frase curta de um cliente.', - 'content' => "\"[Frase específica do cliente, no máximo 12 palavras.]\"\n\n- [Cliente], [cargo] na [empresa]\n\nA gente não pediu pra ele escrever isso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // industry_tip - [ - 'slug' => 'hot_take', - 'category' => 'industry_tip', - 'name' => 'Opinião polêmica', - 'description' => 'Opinião forte sobre o setor.', - 'content' => "Opinião polêmica: a maioria em [setor] acha que [crença comum].\n\nDepois de [tempo] tocando a {{brand_name}}, eu penso o contrário. [Motivo].", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'overrated_underrated', - 'category' => 'industry_tip', - 'name' => 'Superestimado subestimado', - 'description' => 'Junte algo superestimado e algo subestimado.', - 'content' => "Superestimado em [setor]: [prática comum].\n\nSubestimado: [prática ignorada].\n\nA gente parou com a primeira na {{brand_name}} faz um ano.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'unpopular_opinion', - 'category' => 'industry_tip', - 'name' => 'Opinião impopular', - 'description' => 'Compartilhe uma observação contrária.', - 'content' => "Opinião impopular: [afirmação contrária sobre o setor].\n\nClientes da {{brand_name}} provam isso todo mês. O dado não é sutil.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'what_changed_my_mind', - 'category' => 'industry_tip', - 'name' => 'O que mudou minha cabeça', - 'description' => 'Momento honesto de mudar de ideia.', - 'content' => "Eu achava que [crença antiga sobre o setor].\n\nAí [evento/dado] aconteceu na {{brand_name}}. Hoje penso [nova visão]. Ainda me ajustando.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // event - [ - 'slug' => 'event_announcement', - 'category' => 'event', - 'name' => 'Anúncio de evento', - 'description' => 'Anúncio simples de evento.', - 'content' => "{{brand_name}} vai fazer [nome do evento] em [data] em [cidade].\n\n[Tópico]. Grátis, [vagas] vagas. Inscrição: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'event_recap', - 'category' => 'event', - 'name' => 'Recap de evento', - 'description' => 'Resumo curto depois de um evento.', - 'content' => "[Número] pessoas no [evento] da {{brand_name}} ontem.\n\nPergunta favorita: \"[pergunta real do público].\" Gravação sai sexta.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'webinar_reminder', - 'category' => 'event', - 'name' => 'Lembrete de webinar', - 'description' => 'Lembrete de que um webinar vai começar logo.', - 'content' => "Lembrete: webinar da {{brand_name}} sobre [tópico] começa em [tempo].\n\n[Palestrante] vai mostrar [coisa específica]. Última chance pra se inscrever: [link]", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - - // engagement - [ - 'slug' => 'open_question', - 'category' => 'engagement', - 'name' => 'Pergunta aberta', - 'description' => 'Faça uma pergunta real ao público.', - 'content' => "Pergunta sincera pra quem usa [ferramenta/categoria]:\n\nQual a única coisa que ela ainda não faz e você queria que fizesse?\n\nPergunto porque a {{brand_name}} tá trabalhando nisso.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'fill_in_the_blank', - 'category' => 'engagement', - 'name' => 'Complete a frase', - 'description' => 'Provocação leve do tipo complete a frase.', - 'content' => "Complete:\n\nA pior parte de [tarefa/tópico] é ______.\n\nLeio todas as respostas. Vamos usar pra planejar o próximo trimestre da {{brand_name}}.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], - [ - 'slug' => 'show_us_your_setup', - 'category' => 'engagement', - 'name' => 'Mostra seu setup', - 'description' => 'Peça pro pessoal compartilhar algo visual.', - 'content' => "Mostra seu [coisa, mesa, dashboard, rotina semanal].\n\nVamos destacar nossos três favoritos no perfil da {{brand_name}} semana que vem. Sem filtro.", - 'image_count' => 0, - 'image_keywords' => null, - 'slides' => null, - ], -]; diff --git a/tests/Feature/PostTemplateControllerTest.php b/tests/Feature/PostTemplateControllerTest.php deleted file mode 100644 index 6390adb5..00000000 --- a/tests/Feature/PostTemplateControllerTest.php +++ /dev/null @@ -1,179 +0,0 @@ -account = Account::factory()->create(); - $this->user = User::factory()->create([ - 'account_id' => $this->account->id, - ]); - $this->account->update(['owner_id' => $this->user->id]); - $this->workspace = Workspace::factory()->create([ - 'account_id' => $this->account->id, - 'user_id' => $this->user->id, - ]); - $this->workspace->members()->attach($this->user->id, ['role' => Role::Member->value]); - $this->user->update(['current_workspace_id' => $this->workspace->id]); - - $this->account->subscriptions()->create([ - 'type' => Account::SUBSCRIPTION_NAME, - 'stripe_id' => 'sub_test_'.fake()->uuid(), - 'stripe_status' => 'active', - 'stripe_price' => 'price_123', - ]); -}); - -test('index returns templates from the registry', function () { - $this->actingAs($this->user) - ->get(route('app.post-templates.index')) - ->assertOk() - ->assertInertia(fn ($page) => $page - ->component('posts/templates/Index') - ->has('templates.data') - ); -}); - -test('index requires authentication', function () { - $this->get(route('app.post-templates.index')) - ->assertRedirect(route('login')); -}); - -test('index filters by platform', function () { - $this->actingAs($this->user) - ->get(route('app.post-templates.index', ['platform' => 'instagram_carousel'])) - ->assertOk() - ->assertInertia(fn ($page) => $page - ->component('posts/templates/Index') - ->where('templates.data', fn ($templates) => collect($templates)->every( - fn ($t) => $t['platform'] === 'instagram_carousel' - )) - ); -}); - -test('apply creates post and returns post_id and redirect_url', function () { - Http::fake(['api.unsplash.com/*' => Http::response(['results' => []])]); - - $response = $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'success_story')) - ->assertOk(); - - expect($response->json('post_id'))->toBeString(); - expect($response->json('redirect_url'))->toContain('edit'); - - $post = $this->workspace->posts()->find($response->json('post_id')); - expect($post->created_via)->toBe(CreatedVia::Web); -}); - -test('apply interpolates brand_name in content', function () { - Http::fake(['api.unsplash.com/*' => Http::response(['results' => []])]); - - $this->workspace->update(['name' => 'Acme Corp']); - - // success_story template content references {{brand_name}} - $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'success_story')) - ->assertOk(); - - $this->assertDatabaseHas('posts', [ - 'workspace_id' => $this->workspace->id, - ]); - - $post = $this->workspace->posts()->latest()->first(); - expect($post->content)->toContain('Acme Corp'); -}); - -test('apply rejects cross-workspace social_account_id', function () { - $otherAccount = Account::factory()->create(); - $otherUser = User::factory()->create(['account_id' => $otherAccount->id]); - $otherAccount->update(['owner_id' => $otherUser->id]); - $otherWorkspace = Workspace::factory()->create([ - 'account_id' => $otherAccount->id, - 'user_id' => $otherUser->id, - ]); - - $foreignSocialAccount = SocialAccount::factory()->create([ - 'workspace_id' => $otherWorkspace->id, - ]); - - $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'success_story'), [ - 'social_account_id' => $foreignSocialAccount->id, - ]) - ->assertForbidden(); -}); - -test('apply requires authentication', function () { - $this->postJson(route('app.post-templates.apply', 'success_story')) - ->assertUnauthorized(); -}); - -test('apply returns 404 for unknown slug', function () { - $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'this-slug-does-not-exist')) - ->assertNotFound(); -}); - -test('apply leaves scheduled_at null when no date is provided', function () { - Http::fake(['api.unsplash.com/*' => Http::response(['results' => []])]); - - $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'success_story')) - ->assertOk(); - - $post = $this->workspace->posts()->latest()->first(); - expect($post->scheduled_at)->toBeNull(); -}); - -test('apply schedules the post on the date param when provided', function () { - Http::fake(['api.unsplash.com/*' => Http::response(['results' => []])]); - - $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'success_story'), [ - 'date' => '2026-06-15', - ]) - ->assertOk(); - - $post = $this->workspace->posts()->latest()->first(); - expect($post->scheduled_at->utc()->format('Y-m-d H:i:s'))->toBe('2026-06-15 09:00:00'); -}); - -test('apply rejects invalid date format', function () { - $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'success_story'), [ - 'date' => 'not-a-date', - ]) - ->assertUnprocessable() - ->assertJsonValidationErrors(['date']); -}); - -test('apply with slides creates post even when image rendering fails', function () { - // Unsplash returns no results → generator returns null → no media attached, post still created. - Http::fake(['api.unsplash.com/*' => Http::response(['results' => []])]); - - $socialAccount = SocialAccount::factory()->create([ - 'workspace_id' => $this->workspace->id, - ]); - - $response = $this->actingAs($this->user) - ->postJson(route('app.post-templates.apply', 'feature_launch_carousel'), [ - 'social_account_id' => $socialAccount->id, - ]) - ->assertOk(); - - expect($response->json('post_id'))->toBeString(); - expect($response->json('redirect_url'))->toContain('edit'); -}); diff --git a/tests/Unit/Ai/Agents/PostContentGeneratorTest.php b/tests/Unit/Ai/Agents/PostContentGeneratorTest.php index 5a42c156..5cfb4352 100644 --- a/tests/Unit/Ai/Agents/PostContentGeneratorTest.php +++ b/tests/Unit/Ai/Agents/PostContentGeneratorTest.php @@ -160,33 +160,6 @@ expect($instructions)->toContain('image_keywords'); }); -test('instructions include examples when platform context provided and templates exist', function () { - $agent = new PostContentGenerator( - workspace: Workspace::factory()->make(), - format: GeneratorFormat::Carousel, - slideCount: 3, - platformContext: 'instagram_carousel', - ); - - // The registry ships with carousel templates whose content contains - // distinctive snippets like "Swipe to see" — at least one should appear. - $instructions = $agent->instructions(); - expect( - str_contains($instructions, 'Swipe') - || str_contains($instructions, 'carousel') - || str_contains($instructions, '{{brand_name}}'), - )->toBeTrue(); -}); - -test('instructions do not include examples section when platform context is null', function () { - $agent = new PostContentGenerator( - workspace: Workspace::factory()->make(), - format: GeneratorFormat::Single, - ); - - expect($agent->instructions())->not->toContain('curated library'); -}); - test('instructions inject the platform character cap from the shared budget', function () { $agent = new PostContentGenerator( workspace: Workspace::factory()->make(), diff --git a/tests/Unit/PostTemplates/IntegrityTest.php b/tests/Unit/PostTemplates/IntegrityTest.php deleted file mode 100644 index faba138e..00000000 --- a/tests/Unit/PostTemplates/IntegrityTest.php +++ /dev/null @@ -1,184 +0,0 @@ - basename($d), $dirs); -} - -function discoverPlatforms(): array -{ - $files = glob(base_path('templates/'.Registry::DEFAULT_LOCALE).'/*.php') ?: []; - - return array_map(fn (string $f) => basename($f, '.php'), $files); -} - -it('has the same number of templates per platform across all locales', function () { - foreach (discoverPlatforms() as $platform) { - $counts = []; - foreach (discoverLocales() as $locale) { - $counts[$locale] = count(loadPlatformFile($locale, $platform)); - } - - expect(array_unique(array_values($counts)))->toHaveCount( - 1, - "Platform {$platform} has divergent counts: ".json_encode($counts), - ); - } -}); - -it('has the same set of slugs per platform across all locales', function () { - foreach (discoverPlatforms() as $platform) { - $slugsByLocale = []; - foreach (discoverLocales() as $locale) { - $slugs = collect(loadPlatformFile($locale, $platform))->pluck('slug')->sort()->values()->all(); - $slugsByLocale[$locale] = $slugs; - } - - $reference = reset($slugsByLocale); - foreach ($slugsByLocale as $locale => $slugs) { - expect($slugs)->toEqual( - $reference, - "Locale {$locale} has different slugs for platform {$platform} than the source locale", - ); - } - } -}); - -it('preserves structural fields across locales for each slug', function () { - $structural = ['category', 'image_count']; - - foreach (discoverPlatforms() as $platform) { - $byLocale = []; - foreach (discoverLocales() as $locale) { - foreach (loadPlatformFile($locale, $platform) as $row) { - $byLocale[$row['slug']][$locale] = $row; - } - } - - foreach ($byLocale as $slug => $perLocale) { - foreach ($structural as $field) { - $values = array_unique(array_column($perLocale, $field)); - expect($values)->toHaveCount( - 1, - "Slug {$slug} has divergent {$field} across locales: ".json_encode($values), - ); - } - - // Same number of slides - $slideCounts = array_unique(array_map( - fn ($t) => $t['slides'] === null ? 0 : count($t['slides']), - $perLocale, - )); - expect($slideCounts)->toHaveCount( - 1, - "Slug {$slug} has divergent slide count across locales", - ); - - // image_keywords (top-level + per-slide) must be EN-only — identical across locales - $topLevelKeywords = array_unique(array_map( - fn ($t) => json_encode($t['image_keywords']), - $perLocale, - )); - expect($topLevelKeywords)->toHaveCount( - 1, - "Slug {$slug} top-level image_keywords drifted across locales (must stay EN)", - ); - - $first = reset($perLocale); - $slidesCount = $first['slides'] === null ? 0 : count($first['slides']); - for ($i = 0; $i < $slidesCount; $i++) { - $perSlideKeywords = array_unique(array_map( - fn ($t) => json_encode(data_get($t, "slides.{$i}.image_keywords")), - $perLocale, - )); - expect($perSlideKeywords)->toHaveCount( - 1, - "Slug {$slug} slide {$i} image_keywords drifted across locales (must stay EN)", - ); - } - } - } -}); - -it('has no duplicate slugs within a single (locale, platform) file', function () { - foreach (discoverLocales() as $locale) { - foreach (discoverPlatforms() as $platform) { - $slugs = collect(loadPlatformFile($locale, $platform))->pluck('slug'); - expect($slugs->count())->toBe( - $slugs->unique()->count(), - "Duplicate slugs in templates/{$locale}/{$platform}.php", - ); - } - } -}); - -it('uses only known categories', function () { - foreach (discoverLocales() as $locale) { - foreach (discoverPlatforms() as $platform) { - foreach (loadPlatformFile($locale, $platform) as $row) { - expect(in_array($row['category'], KNOWN_CATEGORIES, true))->toBeTrue( - "Slug {$row['slug']} in templates/{$locale}/{$platform}.php uses unknown category '{$row['category']}'", - ); - } - } - } -}); - -it('has every required field on every template', function () { - $required = ['slug', 'category', 'name', 'content', 'image_count']; - $optional = ['description', 'image_keywords', 'slides']; - $expected = array_merge($required, $optional); - - foreach (discoverLocales() as $locale) { - foreach (discoverPlatforms() as $platform) { - foreach (loadPlatformFile($locale, $platform) as $i => $row) { - foreach ($required as $field) { - expect(array_key_exists($field, $row))->toBeTrue( - "templates/{$locale}/{$platform}.php row {$i} missing required field '{$field}'", - ); - } - foreach ($optional as $field) { - expect(array_key_exists($field, $row))->toBeTrue( - "templates/{$locale}/{$platform}.php row {$i} missing optional field '{$field}' (use null when unused)", - ); - } - } - } - } -}); diff --git a/tests/Unit/PostTemplates/RegistryTest.php b/tests/Unit/PostTemplates/RegistryTest.php deleted file mode 100644 index 638299b7..00000000 --- a/tests/Unit/PostTemplates/RegistryTest.php +++ /dev/null @@ -1,102 +0,0 @@ - $this->registry = new Registry); - -test('all() returns every template for the default locale', function () { - $all = $this->registry->all('en'); - - expect($all)->not->toBeEmpty(); - expect($all->first())->toBeInstanceOf(PostTemplateData::class); -}); - -test('all() with platform filter only returns templates for that platform', function () { - $carousels = $this->registry->all('en', 'instagram_carousel'); - - expect($carousels)->not->toBeEmpty(); - expect($carousels->every(fn ($t) => $t->platform === 'instagram_carousel'))->toBeTrue(); -}); - -test('find() returns the requested template by slug', function () { - $template = $this->registry->find('feature_launch_carousel', 'en'); - - expect($template)->toBeInstanceOf(PostTemplateData::class); - expect($template->slug)->toBe('feature_launch_carousel'); - expect($template->platform)->toBe('instagram_carousel'); -}); - -test('find() throws when slug does not exist', function () { - $this->registry->find('this-slug-does-not-exist', 'en'); -})->throws(TemplateNotFoundException::class); - -test('all() falls back to default locale when locale folder is missing', function () { - $missing = $this->registry->all('xx-XX'); - $en = $this->registry->all('en'); - - expect($missing->count())->toBe($en->count()); -}); - -test('find() falls back to default locale when slug missing in requested locale', function () { - // Same fallback behavior at single-template granularity. - $template = $this->registry->find('feature_launch_carousel', 'xx-XX'); - - expect($template->slug)->toBe('feature_launch_carousel'); -}); - -test('paginate() returns LengthAwarePaginator with the requested page slice', function () { - $paginator = $this->registry->paginate(locale: 'en', perPage: 5, page: 1); - - expect($paginator->perPage())->toBe(5); - expect($paginator->currentPage())->toBe(1); - expect($paginator->items())->toHaveCount(5); -}); - -test('paginate() filters by search across name and description', function () { - // "carousel" appears in many template names — should narrow but not eliminate - $results = $this->registry->paginate(locale: 'en', search: 'carousel', perPage: 100); - - expect($results->total())->toBeGreaterThan(0); - foreach ($results->items() as $template) { - $matches = stripos($template->name, 'carousel') !== false - || stripos((string) $template->description, 'carousel') !== false; - expect($matches)->toBeTrue(); - } -}); - -test('paginate() with platform filter respects pagination', function () { - $page1 = $this->registry->paginate(locale: 'en', platform: 'instagram_carousel', perPage: 2, page: 1); - $page2 = $this->registry->paginate(locale: 'en', platform: 'instagram_carousel', perPage: 2, page: 2); - - expect($page1->items())->toHaveCount(2); - expect($page1->currentPage())->toBe(1); - expect($page2->currentPage())->toBe(2); - - $page1Slugs = collect($page1->items())->pluck('slug')->all(); - $page2Slugs = collect($page2->items())->pluck('slug')->all(); - expect(array_intersect($page1Slugs, $page2Slugs))->toBeEmpty(); -}); - -test('allSlugs() returns unique slugs from default locale', function () { - $slugs = $this->registry->allSlugs(); - - expect($slugs)->not->toBeEmpty(); - expect($slugs->count())->toBe($slugs->unique()->count()); -}); - -test('allPlatforms() returns every platform filename', function () { - $platforms = $this->registry->allPlatforms(); - - expect($platforms)->toContain('instagram_carousel'); - expect($platforms)->toContain('linkedin_post'); -}); - -test('allLocales() returns every locale subdirectory', function () { - $locales = $this->registry->allLocales(); - - expect($locales)->toContain('en'); -}); diff --git a/tests/Unit/Services/Ai/TemplateContextResolverTest.php b/tests/Unit/Services/Ai/TemplateContextResolverTest.php deleted file mode 100644 index 9ce3b7d5..00000000 --- a/tests/Unit/Services/Ai/TemplateContextResolverTest.php +++ /dev/null @@ -1,35 +0,0 @@ -relevantFor('instagram_carousel', 10); - - expect($result)->not->toBeEmpty(); - expect($result->every(fn ($t) => $t->platform === 'instagram_carousel'))->toBeTrue(); -}); - -test('respects limit', function () { - $resolver = new TemplateContextResolver(app(Registry::class)); - $result = $resolver->relevantFor('linkedin_post', 2); - - expect($result->count())->toBeLessThanOrEqual(2); -}); - -test('returns empty collection for unknown platform', function () { - $resolver = new TemplateContextResolver(app(Registry::class)); - $result = $resolver->relevantFor('platform_that_does_not_exist', 3); - - expect($result)->toHaveCount(0); -}); - -test('null platform returns templates from all platforms capped to limit', function () { - $resolver = new TemplateContextResolver(app(Registry::class)); - $result = $resolver->relevantFor(null, 3); - - expect($result)->toHaveCount(3); -});