Project: Lenci V0.2.0 R1
2026-02-28 22:15:42
Issue Description On the Arabic (RTL) UI, the “Generation completed” toast shows English text (e.g., “Generation completed”, “View”, “Dismiss”) instead of Arabic translations. Additionally, the View button inside the toast does not perform any action (it doesn’t navigate to the generated image, open a modal, scroll to results, or focus the generated item). This results in: Localization mismatch (English UI fragments in Arabic experience). Broken primary CTA (“View” is the most important action in the toast, but it’s non-functional). Expected Behavior When the app language is Arabic, the toast content and buttons must be fully localized (Arabic strings + RTL-friendly layout). Clicking View should reliably take the user to the generated output using the intended behavior (e.g., open the generated image viewer, navigate to “Generated Results”, or scroll/focus the created item). The toast should remain accessible and functional regardless of the current section the user is in (as long as the generated output exists). Acceptance Criteria With Arabic selected: Toast title and message are displayed in Arabic (no English fallback strings). View and Dismiss labels are Arabic and correctly rendered in RTL. Clicking View triggers a visible outcome every time: Option A: Opens the generated image in a viewer/lightbox, or Option B: Navigates to the page/section where the generated image is listed, or Option C: Scrolls to and highlights/focuses the generated item in the current page. If the generated output is not available (edge case), clicking View shows a clear localized message (Arabic) explaining that the result is not ready yet, instead of failing silently. No console errors are produced when clicking View in Arabic mode.
api-DnxV09yk.js:1 [PerformanceService] Initialized
api-DnxV09yk.js:1 [PerformanceService] Auto-initialized, session: session_1772316684253_9pey1o393
creditHistoryService-Dglymeu_.js:1 🚀 [AuthContext] Initializing authentication...
creditHistoryService-Dglymeu_.js:1 ✅ [AuthContext] Session found for user: ash4-test-lenci@25hraf.com
creditHistoryService-Dglymeu_.js:1 🔍 [AuthContext] Fetching profile for user: ash4-test-lenci@25hraf.com 5bfe0858-56fe-4629-9b3c-d4995974d65d
main-CWxUIURF.js:9837 [AutoSave] Draft restored for apparel
creditHistoryService-Dglymeu_.js:1 ✅ [AuthContext] User profile loaded from API: {id: '5bfe0858-56fe-4629-9b3c-d4995974d65d', email: 'ash4-test-lenci@25hraf.com', email_verified: true, display_name: 'ash f', avatar_url: null, …}
creditHistoryService-Dglymeu_.js:1 📊 [AuthContext] Final user profile: {id: '5bfe0858-56fe-4629-9b3c-d4995974d65d', email: 'ash4-test-lenci@25hraf.com', plan: 'pro', generationsUsed: 0, creditsBalance: '108.38'}
creditHistoryService-Dglymeu_.js:1 ✅ [AuthContext] User profile set in state
creditHistoryService-Dglymeu_.js:1 [WS] Connected
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 0, stage: 'Starting generation...', generationType: 'apparel'}
main-CWxUIURF.js:9575 🎬 Starting Apparel Generation
main-CWxUIURF.js:9575 📊 Current Scene State: {lighting: 'Flat & Even', lightingId: 'l7', background: 'Modern Loft', backgroundId: 'b5', backgroundType: 'scene', …}
main-CWxUIURF.js:9575 📊 Current Apparel Controls: {shotType: 'Back View', shotTypeId: 'st2', expression: 'Neutral', expressionId: 'e1', cameraAngle: 'Eye-Level', …}
main-CWxUIURF.js:9575 🎨 AI Concept Applied: Yes (ID: p06)
main-CWxUIURF.js:9575 🎯🎯🎯 REGULAR GENERATION PATH - Full apparelControls State: {shotType: 'Back View', shotTypeId: 'st2', shotTypeDesc: 'in a full-body shot from the back to showcase the rear of the garment, shot at eye-level.', expression: 'Neutral', expressionId: 'e1', …}
main-CWxUIURF.js:9575 🎯🎯🎯 REGULAR GENERATION PATH - Passing to promptService: {shotType: 'Back View', shotTypeDesc: 'in a full-body shot from the back to showcase the rear of the garment, shot at eye-level.', expression: 'Neutral', expressionDesc: 'a neutral, high-fashion expression.', sceneBackground: 'Modern Loft', …}
main-CWxUIURF.js:9300 🎨 PromptService - Custom prompt exists: false
main-CWxUIURF.js:9470 🎯 APPAREL CONTROLS: {shotType: 'Back View', shotTypeDesc: 'in a full-body shot from the back to showcase the rear of the garment, shot at eye-level.', expression: 'Neutral', expressionDesc: 'a neutral, high-fashion expression.'}
main-CWxUIURF.js:9574 📤 FINAL PROMPT BEING SENT TO GEMINI (First 1000 chars): **Face & Body Preservation (CRITICAL):**
Maintain the model's exact facial features, skin tone, body proportions, and hair. No beautification, no aging, no smoothing, no feature changes. The person must be recognizably identical to the reference. For female models: preserve ALL natural details (skin texture, pores, wrinkles, freckles, moles) — zero beautification. Only clothing and pose should change.
**MASTER PHOTOSHOOT DIRECTIVE — NON-NEGOTIABLE RULES:**
1. **FACIAL IDENTITY IS SACRED:** The face from the reference is ABSOLUTE and UNTOUCHABLE. No exceptions — especially for female models.
2. **STRICT MODULARITY:** MODEL, APPAREL, POSE, and SCENE instructions are independent. Do not infer details from one to another.
3. **INPUTS ARE LAW:** Follow text descriptions and image assets as the definitive source of truth.
4. **APPAREL ACCURACY:** Apparel design, pattern, and color come *exclusively* from provided apparel images.
5. **PERSON IN APPAREL IMAGE ≠ MODEL:** Apparel images ma
main-CWxUIURF.js:9574 📤 Prompt includes background: false
main-CWxUIURF.js:9574 📤 Prompt includes lighting: false
main-CWxUIURF.js:9574 📤 Total prompt length: 8935 characters
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 0, stage: 'Starting generation...', generationType: 'apparel', estimatedTimeRemaining: 25}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 5, stage: 'Generating image 1 of 1...', generationType: 'apparel', estimatedTimeRemaining: 0.019}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 10, stage: 'Uploading images for image 1...', generationType: 'apparel', estimatedTimeRemaining: 0.108}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 0, stage: 'Starting generation...', generationType: 'apparel', estimatedTimeRemaining: 25}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 20, stage: 'Uploading images...', generationType: 'apparel', estimatedTimeRemaining: 0}
main-CWxUIURF.js:8330 📡 Calling server endpoint: /api/imaging/process (Gemini)
main-CWxUIURF.js:8330 ⚙️ Settings: {shotType: {…}, cameraAngle: {…}, focalLength: {…}, aperture: {…}, lighting: {…}, …}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 40, stage: 'Processing with AI...', generationType: 'apparel', estimatedTimeRemaining: 0}
main-CWxUIURF.js:8330 📦 Compressing images for upload...
main-CWxUIURF.js:8330 ✅ Images compressed successfully
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {stage: 'Credits reserved, generating image...', progress: 30, generationType: 'apparel', estimatedTimeRemaining: 0.487}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {stage: 'AI is generating your image...', progress: 60, generationType: 'apparel', estimatedTimeRemaining: 0.488}
main-CWxUIURF.js:8330 ✅ Server returned data via SSE (attempt 1/4)
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 70, stage: 'Rendering image...', generationType: 'apparel', estimatedTimeRemaining: 3.8905714285714286}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 90, stage: 'Finalizing...', generationType: 'apparel', estimatedTimeRemaining: 1.0086666666666666}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 95, stage: 'Image received, still processing...', generationType: 'apparel', estimatedTimeRemaining: 0.47778947368421143}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 75, stage: 'Image 1 generated', generationType: 'apparel', estimatedTimeRemaining: 3.030666666666667}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 90, stage: 'Image 1 complete', generationType: 'apparel', estimatedTimeRemaining: 1.0108888888888892}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 90, stage: 'Finalizing...', generationType: 'apparel', estimatedTimeRemaining: 1.0108888888888892}
main-CWxUIURF.js:8324 [ProgressTracking] Emitting progress: {progress: 100, stage: 'Complete', generationType: 'apparel', estimatedTimeRemaining: 0}
main-CWxUIURF.js:8330 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
processImages @ main-CWxUIURF.js:8330
await in processImages
(anonymous) @ main-CWxUIURF.js:8769
generatePhotoshootImage @ main-CWxUIURF.js:8769
(anonymous) @ main-CWxUIURF.js:9575
generateAsset @ main-CWxUIURF.js:9575
await in generateAsset
onClick @ main-CWxUIURF.js:9777
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 [PerformanceService] Skipping sync of 17 metrics (Supabase migration - not persisted)
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 POST https://test-lenci.siyadatech.studio/api/generation-jobs/a44b3c2c-559d-4f8c-81ef-bc1a7aceb2f4/claim 404 (Not Found)
tt @ api-DnxV09yk.js:1
await in tt
rt @ api-DnxV09yk.js:1
(anonymous) @ main-CWxUIURF.js:9814
c @ main-CWxUIURF.js:9814
Mf @ LanguageContext-D5j2HYtZ.js:48
(anonymous) @ LanguageContext-D5j2HYtZ.js:48
Iu @ LanguageContext-D5j2HYtZ.js:48
gc @ LanguageContext-D5j2HYtZ.js:48
Dc @ LanguageContext-D5j2HYtZ.js:49
dv @ LanguageContext-D5j2HYtZ.js:49
api-DnxV09yk.js:1 [PerformanceService] Skipping sync of 11 metrics (Supabase migration - not persisted)