feat: sync all BRAIN mobile changes - onboarding, cookies, legal, mobile UX, settings

- Add OnboardingWizard, BetaBanner, CookieBanner components
- Add legal pages (Privacy, Terms, Cookies)
- Update Layout with mobile topbar, sidebar drawer, plan banner
- Update SettingsPage with profile, API config, security
- Update CharacterForm with topic suggestions, niche chips
- Update EditorialCalendar with shared strategy card
- Update ContentPage with narrative technique + brief
- Update SocialAccounts with 4 platforms and token guides
- Fix CSS button color inheritance, mobile responsive
- Add backup script
- Update .gitignore for pgdata and backups

Co-Authored-By: Claude (BRAIN/StackOS) <noreply@anthropic.com>
This commit is contained in:
Michele Borraccia
2026-04-03 14:59:14 +00:00
parent 8b77f1b86b
commit 2ca8b957e9
29 changed files with 4074 additions and 2803 deletions

View File

@@ -1,5 +1,5 @@
from datetime import datetime
from typing import Optional
from typing import List, Optional
from pydantic import BaseModel
@@ -103,13 +103,23 @@ class PostResponse(BaseModel):
class GenerateContentRequest(BaseModel):
character_id: int
platform: str = "instagram"
content_type: str = "text"
platform: str = "instagram" # legacy single-platform (kept for compat)
content_type: str = "text" # legacy single type (kept for compat)
platforms: List[str] = [] # new: multi-platform (overrides platform if non-empty)
content_types: List[str] = [] # new: multi-type (overrides content_type if non-empty)
topic_hint: Optional[str] = None
include_affiliates: bool = True
provider: Optional[str] = None # override default LLM
provider: Optional[str] = None
model: Optional[str] = None
@property
def effective_platform(self) -> str:
return self.platforms[0] if self.platforms else self.platform
@property
def effective_content_type(self) -> str:
return self.content_types[0] if self.content_types else self.content_type
class GenerateImageRequest(BaseModel):
character_id: int