From deea4564e2971181ca8dbf1fc0f6e915e2cd5312 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Tue, 23 Jun 2026 16:19:58 -0300 Subject: [PATCH 1/3] feat(onboarding): add Developer persona option Adds a Developer option to the onboarding persona step (after Freelancer), with labels in all three locales (Developer / Desarrollador / Desenvolvedor) and an IconCode glyph in the persona grid. The option flows to the frontend via Persona::cases() and is accepted by the existing enum validation. --- app/Enums/User/Persona.php | 1 + lang/en/onboarding.php | 1 + lang/es/onboarding.php | 1 + lang/pt-BR/onboarding.php | 1 + resources/js/pages/onboarding/Index.vue | 2 ++ tests/Unit/Enums/PersonaTest.php | 2 +- 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Enums/User/Persona.php b/app/Enums/User/Persona.php index 4b1f6cb6..78949d10 100644 --- a/app/Enums/User/Persona.php +++ b/app/Enums/User/Persona.php @@ -8,6 +8,7 @@ enum Persona: string { case Creator = 'creator'; case Freelancer = 'freelancer'; + case Developer = 'developer'; case Startup = 'startup'; case Agency = 'agency'; case SmallBusiness = 'small_business'; diff --git a/lang/en/onboarding.php b/lang/en/onboarding.php index 071288cf..1c1e8a7e 100644 --- a/lang/en/onboarding.php +++ b/lang/en/onboarding.php @@ -9,6 +9,7 @@ 'personas' => [ 'creator' => 'Creator', 'freelancer' => 'Freelancer', + 'developer' => 'Developer', 'startup' => 'Startup', 'agency' => 'Agency', 'small_business' => 'Small business', diff --git a/lang/es/onboarding.php b/lang/es/onboarding.php index eed12c9c..f1189a31 100644 --- a/lang/es/onboarding.php +++ b/lang/es/onboarding.php @@ -9,6 +9,7 @@ 'personas' => [ 'creator' => 'Creador', 'freelancer' => 'Freelancer', + 'developer' => 'Desarrollador', 'startup' => 'Startup', 'agency' => 'Agencia', 'small_business' => 'Pequeña empresa', diff --git a/lang/pt-BR/onboarding.php b/lang/pt-BR/onboarding.php index 408270a8..e1a5f5fc 100644 --- a/lang/pt-BR/onboarding.php +++ b/lang/pt-BR/onboarding.php @@ -9,6 +9,7 @@ 'personas' => [ 'creator' => 'Criador', 'freelancer' => 'Freelancer', + 'developer' => 'Desenvolvedor', 'startup' => 'Startup', 'agency' => 'Agência', 'small_business' => 'Pequena empresa', diff --git a/resources/js/pages/onboarding/Index.vue b/resources/js/pages/onboarding/Index.vue index 1041930c..fdca63d2 100644 --- a/resources/js/pages/onboarding/Index.vue +++ b/resources/js/pages/onboarding/Index.vue @@ -6,6 +6,7 @@ import { IconBuildingSkyscraper, IconBuildingStore, IconCheck, + IconCode, IconDots, IconRocket, IconUser, @@ -26,6 +27,7 @@ const form = useForm({ persona: props.selected ?? '' }); const personaMeta: Record = { creator: { icon: IconUser, color: 'text-rose-600' }, freelancer: { icon: IconBriefcase, color: 'text-amber-600' }, + developer: { icon: IconCode, color: 'text-cyan-600' }, startup: { icon: IconRocket, color: 'text-violet-700' }, agency: { icon: IconBuildingSkyscraper, color: 'text-blue-700' }, small_business: { icon: IconBuildingStore, color: 'text-emerald-600' }, diff --git a/tests/Unit/Enums/PersonaTest.php b/tests/Unit/Enums/PersonaTest.php index e73e907a..47bafc00 100644 --- a/tests/Unit/Enums/PersonaTest.php +++ b/tests/Unit/Enums/PersonaTest.php @@ -6,7 +6,7 @@ test('persona values are stable', function () { expect(array_map(fn (Persona $persona): string => $persona->value, Persona::cases())) - ->toBe(['creator', 'freelancer', 'startup', 'agency', 'small_business', 'other']); + ->toBe(['creator', 'freelancer', 'developer', 'startup', 'agency', 'small_business', 'other']); }); test('every persona has an onboarding label in every locale', function (string $locale) { From ea2d3d86c84110d1888487f72e4744ba585efd31 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Wed, 24 Jun 2026 09:31:33 -0300 Subject: [PATCH 2/3] feat(onboarding): add Marketer and Online store personas Completes the persona grid to a 3x3 with two high-value segments: Marketer (in-house marketing / social media, a scheduling tool's core user) and Online store (e-commerce). Labels in all three locales, with IconSpeakerphone and IconShoppingBag glyphs. Other stays last. --- app/Enums/User/Persona.php | 2 ++ lang/en/onboarding.php | 2 ++ lang/es/onboarding.php | 2 ++ lang/pt-BR/onboarding.php | 2 ++ resources/js/pages/onboarding/Index.vue | 4 ++++ tests/Unit/Enums/PersonaTest.php | 2 +- 6 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/Enums/User/Persona.php b/app/Enums/User/Persona.php index 78949d10..00c5c62e 100644 --- a/app/Enums/User/Persona.php +++ b/app/Enums/User/Persona.php @@ -12,5 +12,7 @@ enum Persona: string case Startup = 'startup'; case Agency = 'agency'; case SmallBusiness = 'small_business'; + case Marketer = 'marketer'; + case OnlineStore = 'online_store'; case Other = 'other'; } diff --git a/lang/en/onboarding.php b/lang/en/onboarding.php index 1c1e8a7e..7a41f12e 100644 --- a/lang/en/onboarding.php +++ b/lang/en/onboarding.php @@ -13,6 +13,8 @@ 'startup' => 'Startup', 'agency' => 'Agency', 'small_business' => 'Small business', + 'marketer' => 'Marketer', + 'online_store' => 'Online store', 'other' => 'Other', ], 'connect' => [ diff --git a/lang/es/onboarding.php b/lang/es/onboarding.php index f1189a31..cb9b3fc3 100644 --- a/lang/es/onboarding.php +++ b/lang/es/onboarding.php @@ -13,6 +13,8 @@ 'startup' => 'Startup', 'agency' => 'Agencia', 'small_business' => 'Pequeña empresa', + 'marketer' => 'Marketing', + 'online_store' => 'Tienda online', 'other' => 'Otro', ], 'connect' => [ diff --git a/lang/pt-BR/onboarding.php b/lang/pt-BR/onboarding.php index e1a5f5fc..8e1694ff 100644 --- a/lang/pt-BR/onboarding.php +++ b/lang/pt-BR/onboarding.php @@ -13,6 +13,8 @@ 'startup' => 'Startup', 'agency' => 'Agência', 'small_business' => 'Pequena empresa', + 'marketer' => 'Marketing', + 'online_store' => 'Loja online', 'other' => 'Outro', ], 'connect' => [ diff --git a/resources/js/pages/onboarding/Index.vue b/resources/js/pages/onboarding/Index.vue index fdca63d2..376c9d09 100644 --- a/resources/js/pages/onboarding/Index.vue +++ b/resources/js/pages/onboarding/Index.vue @@ -9,6 +9,8 @@ import { IconCode, IconDots, IconRocket, + IconShoppingBag, + IconSpeakerphone, IconUser, } from '@tabler/icons-vue'; import { trans } from 'laravel-vue-i18n'; @@ -31,6 +33,8 @@ const personaMeta: Record startup: { icon: IconRocket, color: 'text-violet-700' }, agency: { icon: IconBuildingSkyscraper, color: 'text-blue-700' }, small_business: { icon: IconBuildingStore, color: 'text-emerald-600' }, + marketer: { icon: IconSpeakerphone, color: 'text-fuchsia-600' }, + online_store: { icon: IconShoppingBag, color: 'text-teal-600' }, other: { icon: IconDots, color: 'text-sky-600' }, }; diff --git a/tests/Unit/Enums/PersonaTest.php b/tests/Unit/Enums/PersonaTest.php index 47bafc00..b0eb2c38 100644 --- a/tests/Unit/Enums/PersonaTest.php +++ b/tests/Unit/Enums/PersonaTest.php @@ -6,7 +6,7 @@ test('persona values are stable', function () { expect(array_map(fn (Persona $persona): string => $persona->value, Persona::cases())) - ->toBe(['creator', 'freelancer', 'developer', 'startup', 'agency', 'small_business', 'other']); + ->toBe(['creator', 'freelancer', 'developer', 'startup', 'agency', 'small_business', 'marketer', 'online_store', 'other']); }); test('every persona has an onboarding label in every locale', function (string $locale) { From f87d1a0498424e94920acfb7a2072043d6288d8b Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Wed, 24 Jun 2026 09:45:44 -0300 Subject: [PATCH 3/3] feat(onboarding): consistent persona labels and broader prompt The persona options mix individual roles (creator, developer, marketer) with organization types (startup, agency, store), but the prompt only asked what describes 'you'. Make it read intentionally: - Broaden the prompt to 'you or your business'. - Creator -> Content creator and Marketer -> a proper role label (es/pt: Profesional/Profissional de marketing) so the role group is consistent. --- lang/en/onboarding.php | 4 ++-- lang/es/onboarding.php | 6 +++--- lang/pt-BR/onboarding.php | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lang/en/onboarding.php b/lang/en/onboarding.php index 7a41f12e..c0808aae 100644 --- a/lang/en/onboarding.php +++ b/lang/en/onboarding.php @@ -4,10 +4,10 @@ return [ 'title' => 'Welcome to TryPost', - 'description' => 'Tell us what best describes you so we can tailor your experience.', + 'description' => 'Tell us what best describes you or your business so we can tailor your experience.', 'continue' => 'Continue', 'personas' => [ - 'creator' => 'Creator', + 'creator' => 'Content creator', 'freelancer' => 'Freelancer', 'developer' => 'Developer', 'startup' => 'Startup', diff --git a/lang/es/onboarding.php b/lang/es/onboarding.php index cb9b3fc3..cb5ff7ba 100644 --- a/lang/es/onboarding.php +++ b/lang/es/onboarding.php @@ -4,16 +4,16 @@ return [ 'title' => 'Bienvenido a TryPost', - 'description' => 'Cuéntanos qué te describe mejor para personalizar tu experiencia.', + 'description' => 'Cuéntanos qué te describe mejor a ti o a tu negocio para personalizar tu experiencia.', 'continue' => 'Continuar', 'personas' => [ - 'creator' => 'Creador', + 'creator' => 'Creador de contenido', 'freelancer' => 'Freelancer', 'developer' => 'Desarrollador', 'startup' => 'Startup', 'agency' => 'Agencia', 'small_business' => 'Pequeña empresa', - 'marketer' => 'Marketing', + 'marketer' => 'Profesional de marketing', 'online_store' => 'Tienda online', 'other' => 'Otro', ], diff --git a/lang/pt-BR/onboarding.php b/lang/pt-BR/onboarding.php index 8e1694ff..350ecf80 100644 --- a/lang/pt-BR/onboarding.php +++ b/lang/pt-BR/onboarding.php @@ -4,16 +4,16 @@ return [ 'title' => 'Bem-vindo ao TryPost', - 'description' => 'Conte o que melhor te descreve para personalizarmos sua experiência.', + 'description' => 'Conte o que melhor descreve você ou seu negócio para personalizarmos sua experiência.', 'continue' => 'Continuar', 'personas' => [ - 'creator' => 'Criador', + 'creator' => 'Criador de conteúdo', 'freelancer' => 'Freelancer', 'developer' => 'Desenvolvedor', 'startup' => 'Startup', 'agency' => 'Agência', 'small_business' => 'Pequena empresa', - 'marketer' => 'Marketing', + 'marketer' => 'Profissional de marketing', 'online_store' => 'Loja online', 'other' => 'Outro', ],