trypost/app/Http/Controllers/App
Paulo Castellano 287c27b792 feat: add brand configuration step to onboarding
After users pick their persona (role), they now land on a new Brand
step that collects the same fields available in Settings → Workspace
→ Brand: website, description, tone, voice notes, and content
language. When they continue, every AI-generated post for this
workspace already has sensible defaults — before the user's first
post is ever drafted.

Flow:
Role (persona) → Brand (new) → Connections → Subscription → Completed.
A 'Skip for now' button on the brand step advances to Connections
without touching the workspace (defaults stay at their seed values).

Backend:
- Setup enum gets a new Brand case slotted between Role and
  Connections with matching stepNumber updates.
- OnboardingController::brand() renders the form pre-filled from the
  current workspace. storeBrand() validates via a new
  StoreBrandRequest form request and writes the fields onto the
  workspace, then advances setup. skipBrand() just advances.
- storeRole() redirects to brand instead of account. enforceStep()
  knows how to redirect users whose setup is Brand.
- Three new routes: GET /onboarding/brand, POST /onboarding/brand,
  POST /onboarding/brand/skip.

Frontend:
- New Brand.vue page mirrors the Settings brand form but inside the
  onboarding AuthLayout. Tone + language sit side by side, both
  selects take full width. Translations added to en, pt-BR, and es.
- Wayfinder regenerated so the page can import storeBrand / skipBrand.

Tests:
- Renamed 'redirects to step2' → 'redirects to brand step' and
  assert new setup.
- Added six new tests covering brand step auth, redirects, render,
  successful store, validation of tone and content_language, and
  skip.
- Updated UserSetupTest for the new enum case + reshuffled step
  numbers.
2026-04-16 11:00:16 -03:00
..
Settings fix: update monthlyCount() callers to pass UsageType enum 2026-04-16 09:29:37 -03:00
AnalyticsController.php feat: add YouTube Analytics with 7 channel metrics 2026-04-14 13:10:27 -03:00
ApiKeyController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00
AssetController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
BillingController.php fix: self-host billing bypass, Facebook API metrics migration, X token refresh, and duplicate social accounts 2026-04-15 09:46:18 -03:00
Controller.php refactor: restructure to Actions, subdomain routes (app/api), API tokens 2026-03-29 19:24:28 -03:00
GiphyController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
MediaController.php fix: API scheduled_at validation, redirect allowlist, UUID model_id, UpdatePost transaction, safe resolveModel 2026-04-01 13:21:22 -03:00
NotificationController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00
OnboardingController.php feat: add brand configuration step to onboarding 2026-04-16 11:00:16 -03:00
PostAssistantController.php fix: apply code review — enforce quota server-side, project conventions 2026-04-16 10:22:55 -03:00
PostCommentController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
PostController.php feat: add CommentsTab component with replies, reactions, and real-time 2026-04-15 20:15:29 -03:00
UnsplashController.php feat: complete AI assistant with custom services and brand config 2026-04-16 09:25:08 -03:00
WorkspaceController.php feat: introduce Account entity as billing owner and refactor architecture 2026-04-14 22:22:04 -03:00
WorkspaceHashtagController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00
WorkspaceInviteController.php feat: introduce Account entity as billing owner and refactor architecture 2026-04-14 22:22:04 -03:00
WorkspaceLabelController.php refactor: code review fixes — policies, enums, data_get, tests 2026-03-31 00:40:18 -03:00