After picking who they are, users now pick what they want to achieve with TryPost. A multi-select goal step (12 options + an exclusive "just exploring" and "something else") sits between the persona step and connect, mirroring the persona screen's style. The goals persist to a json column on users and are mirrored to PostHog on identify (onboarding_goals array plus a boolean per goal), so campaigns can be cross-tabbed against the intent they actually attracted. connect now requires both a persona and at least one goal; persona store advances to the goal step. Options are grounded in TryPost's real capabilities (publishing, AI content, brand voice, automation via API/MCP, collaboration, analytics) and copy is localized in en/es/pt-BR.
30 lines
803 B
PHP
30 lines
803 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Enums\User;
|
|
|
|
enum Goal: string
|
|
{
|
|
case SaveTime = 'save_time';
|
|
case AiContent = 'ai_content';
|
|
case PlanCalendar = 'plan_calendar';
|
|
case StayOnBrand = 'stay_on_brand';
|
|
case GrowAudience = 'grow_audience';
|
|
case DriveSales = 'drive_sales';
|
|
case ManageClients = 'manage_clients';
|
|
case TeamCollaboration = 'team_collaboration';
|
|
case AutomateApi = 'automate_api';
|
|
case TrackPerformance = 'track_performance';
|
|
case JustExploring = 'just_exploring';
|
|
case Other = 'other';
|
|
|
|
/**
|
|
* Selecting this goal means the user has no specific intent yet, so it is
|
|
* mutually exclusive with every other goal.
|
|
*/
|
|
public function isExclusive(): bool
|
|
{
|
|
return $this === self::JustExploring;
|
|
}
|
|
}
|