From 433b0d6ebd71a8103d780021117ba79f39cd2006 Mon Sep 17 00:00:00 2001 From: Yves Gugger Date: Thu, 18 Dec 2025 15:37:24 +0100 Subject: [PATCH] fix: Yield dashboard + Forge UI improvements Yield: - Safely handle partner relationship to prevent errors Forge: - AI mode now default for Trader/Tycoon users - AI mode button moved to left (primary position) - "Describe your..." label now bright purple - Textarea border brighter for better visibility --- backend/app/api/yield_domains.py | 10 ++- .../src/components/hunt/BrandableForgeTab.tsx | 66 +++++++++---------- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/backend/app/api/yield_domains.py b/backend/app/api/yield_domains.py index e95a805..cf14fb6 100644 --- a/backend/app/api/yield_domains.py +++ b/backend/app/api/yield_domains.py @@ -774,6 +774,14 @@ async def list_partners( def _domain_to_response(domain: YieldDomain) -> YieldDomainResponse: """Convert YieldDomain model to response schema.""" + # Safely get partner name + partner_name = None + try: + if domain.partner: + partner_name = domain.partner.name + except Exception: + pass + return YieldDomainResponse( id=domain.id, domain=domain.domain, @@ -781,7 +789,7 @@ def _domain_to_response(domain: YieldDomain) -> YieldDomainResponse: detected_intent=domain.detected_intent, intent_confidence=domain.intent_confidence, active_route=domain.active_route, - partner_name=domain.partner.name if domain.partner else None, + partner_name=partner_name, landing_template=getattr(domain, "landing_template", None), landing_headline=getattr(domain, "landing_headline", None), landing_intro=getattr(domain, "landing_intro", None), diff --git a/frontend/src/components/hunt/BrandableForgeTab.tsx b/frontend/src/components/hunt/BrandableForgeTab.tsx index 6f79969..3927d8d 100644 --- a/frontend/src/components/hunt/BrandableForgeTab.tsx +++ b/frontend/src/components/hunt/BrandableForgeTab.tsx @@ -47,8 +47,8 @@ export function BrandableForgeTab({ showToast }: { showToast: (msg: string, type const tier = (subscription?.tier || '').toLowerCase() const hasAI = tier === 'trader' || tier === 'tycoon' - // Mode selection - const [mode, setMode] = useState<'pattern' | 'ai'>('pattern') + // Mode selection - AI mode by default if available + const [mode, setMode] = useState<'pattern' | 'ai'>(hasAI ? 'ai' : 'pattern') // Config const [pattern, setPattern] = useState('cvcvc') @@ -143,7 +143,35 @@ export function BrandableForgeTab({ showToast }: { showToast: (msg: string, type {/* Mode Selector */}
- {/* Pattern Mode */} + {/* AI Mode - First/Left */} + + + {/* Pattern Mode - Second/Right */}
{mode === 'pattern' &&
} - - {/* AI Mode */} -
{/* Config Panel */} @@ -236,13 +236,13 @@ export function BrandableForgeTab({ showToast }: { showToast: (msg: string, type ) : (
- Describe Your Identity Concept + Describe Your Identity Concept