135 lines
3.1 KiB
Markdown
135 lines
3.1 KiB
Markdown
# Style Detection 404 Error Analysis
|
|
**Date:** October 1, 2025
|
|
**Issue:** `GET /api/style-detection/session-analyses` returning 404 Not Found
|
|
**Impact:** Low - Feature degrades gracefully, no user-facing errors
|
|
|
|
---
|
|
|
|
## 🔍 Root Cause Analysis
|
|
|
|
### **The Problem:**
|
|
|
|
**Frontend calls:**
|
|
```typescript
|
|
// Line 252 in websiteUtils.ts
|
|
const res = await fetch('/api/style-detection/session-analyses');
|
|
```
|
|
|
|
**Backend registered at:**
|
|
```python
|
|
# Line 43 in component_logic.py
|
|
router = APIRouter(prefix="/api/onboarding", tags=["component_logic"])
|
|
|
|
# Line 645 in component_logic.py
|
|
@router.get("/style-detection/session-analyses")
|
|
```
|
|
|
|
**Actual endpoint:**
|
|
```
|
|
/api/onboarding/style-detection/session-analyses
|
|
^^^^^^^^^^^^ Missing prefix!
|
|
```
|
|
|
|
**Frontend calling:**
|
|
```
|
|
/api/style-detection/session-analyses
|
|
❌ No /onboarding prefix
|
|
```
|
|
|
|
**Result:** 404 Not Found ❌
|
|
|
|
---
|
|
|
|
## 📋 What Is This Endpoint?
|
|
|
|
### **Purpose:**
|
|
Pre-fill the website URL input field with the last analyzed website from the user's session.
|
|
|
|
### **User Experience:**
|
|
```
|
|
User Journey:
|
|
1. User analyzes website: example.com (Step 2)
|
|
2. User completes onboarding
|
|
3. User starts new session / refreshes page
|
|
4. Returns to Step 2 (Website Analysis)
|
|
5. ✅ Website field auto-filled with: example.com
|
|
6. User doesn't have to type URL again
|
|
```
|
|
|
|
**UX Benefit:** Convenience feature - saves user from re-typing
|
|
|
|
---
|
|
|
|
## 🎯 Why It's Being Called
|
|
|
|
### **Location:** `WebsiteStep.tsx` (Lines 192-206)
|
|
|
|
```typescript
|
|
useEffect(() => {
|
|
// Prefill from last session analysis on mount
|
|
const loadLastAnalysis = async () => {
|
|
const result = await fetchLastAnalysis(); // ← Calls the 404 endpoint
|
|
if (result.success) {
|
|
if (result.website) {
|
|
setWebsite(result.website); // Auto-fill URL
|
|
}
|
|
if (result.analysis) {
|
|
setAnalysis(result.analysis); // Load previous analysis
|
|
}
|
|
}
|
|
};
|
|
loadLastAnalysis();
|
|
}, []);
|
|
```
|
|
|
|
**Trigger:** Component mounts (every time user visits Step 2)
|
|
|
|
---
|
|
|
|
## 📊 Current Impact
|
|
|
|
### **User Experience:**
|
|
- ✅ **No visible errors** - Error caught and handled gracefully
|
|
- ✅ **Feature fails silently** - Just doesn't pre-fill
|
|
- ✅ **User can still proceed** - Manual URL entry works fine
|
|
- ⚠️ **Slightly inconvenient** - User must re-type URL
|
|
|
|
### **System Impact:**
|
|
- ⚠️ **Backend logs pollution** - 404 errors on every Step 2 visit
|
|
- ⚠️ **Network noise** - Unnecessary failed requests
|
|
- ✅ **No crashes** - Error handled properly
|
|
|
|
**Severity:** 🟡 Low (convenience feature, not critical)
|
|
|
|
---
|
|
|
|
## 🔧 Solutions
|
|
|
|
### **Option 1: Fix Frontend URL (Quick Fix - 30 seconds)**
|
|
|
|
```typescript
|
|
// frontend/src/components/OnboardingWizard/WebsiteStep/utils/websiteUtils.ts
|
|
// Line 252
|
|
|
|
// Before:
|
|
const res = await fetch('/api/style-detection/session-analyses');
|
|
|
|
// After:
|
|
const res = await fetch('/api/onboarding/style-detection/session-analyses');
|
|
// ^^^^^^^^^^^^ Add missing prefix
|
|
```
|
|
|
|
**Pros:**
|
|
- ✅ Quick fix (1 line change)
|
|
- ✅ Restores functionality
|
|
- ✅ No breaking changes
|
|
|
|
**Cons:**
|
|
- None
|
|
|
|
**Recommendation:** ✅ **Do this**
|
|
|
|
---
|
|
|
|
### **Option 2: Update Backend Route
|