# IDEAS_BACKLOG.md

**Propósito**: lista corta de items concretos pendientes que no están en
`PHASE_35_PLAN.md`. Cosas que se descubrieron como gaps pero NO bloquean el flujo
principal. Si tenés tiempo, agarrá uno desde acá.

**Convención**:
- 🔴 P1 = afecta funcionalidad core hoy
- 🟡 P2 = mejora cobertura/UX significativa
- 🟢 P3 = nice to have

Cada item: contexto, costo en horas, blockers, criterio "done".

---

## 🟡 1. 26 FL counties que NO usan realauction.com

**Contexto**: probe a `https://www.realauction.com/clients` confirmó que 41 de los 67 condados FL usan realforeclose.com. Los 26 restantes están en otras plataformas (parking pages en realauction = no client). Mayormente counties pequeños/rurales pero también algunos importantes como Monroe (Keys), Collier (Naples), Okaloosa (Destin), St. Johns (St. Augustine).

**Counties pendientes**:
Bradford, Collier, Columbia, DeSoto, Dixie, Franklin, Gadsden, Glades, Hamilton,
Hardee, Hendry, Hernando, Highlands, Holmes, Jefferson, Lafayette, Levy, Liberty,
Madison, Monroe, Okaloosa, St. Johns, Sumter, Taylor, Union, Wakulla.

**Plataformas a investigar**: Govease, ClerkAuction.com, ServiceLink Auction, sistemas in-house del clerk.

**Esfuerzo**: ~30 min por county para identificar plataforma + 2-3h por plataforma nueva para integrar engine.
**Done cuando**: top 5 prioritarios (Monroe, Collier, Okaloosa, St. Johns, Hernando) tienen scraper funcional.

---

## 🟢 2. Property Researcher agent — prompt tuning

**Contexto**: framework `property_researcher.py` + `agent_tools.py` están construidos. El test con Wake County NC mostró que qwen2.5:14b sigue la estrategia inicial bien (lookup_portal → web_search → fetch_url) pero se queda atrapado en loops de fetch sin llamar `extract_with_local_llm` ni `finish()`. 10/10 iteraciones sin terminar limpio en el test.

**Posibles fixes** (probar en orden):
1. Mejor system prompt con flow paso-a-paso explícito + few-shot examples
2. Force `extract_with_local_llm` después de cada `fetch_url` exitoso (regla en prompt)
3. Cambiar al modelo Coordinator (qwen2.5:32b, 19GB) — más reasoning power
4. Implementar "judge" — un segundo LLM evalúa si la iteración avanzó, si no → corrige el plan

**Esfuerzo**: 2-4h iteraciones de prompt + tests.
**Done cuando**: agente completa research de 1 deal NC con `finish()` + ≥2 portales descubiertos guardados en `portal_directory.json`.

---

## 🟢 3. Firecrawl `/extract` como fallback para counties non-FL

**Contexto**: alternativa al PropertyResearcher agent. Firecrawl `/extract` toma una URL + JSON schema y devuelve data extraída via su LLM. 4 credits por deal completo ≈ $0.004. Buena solución para los counties non-FL donde no tenemos scraper.

**Pipeline propuesto**:
```python
def fetch_deal_anywhere(address, county, state):
    # 1 cred: descubrir portal
    portal = firecrawl_search(f"property appraiser {county} county {state}")
    # 1 cred: scrape PA
    pa_data = firecrawl_extract(portal_url, schema=PA_SCHEMA)
    # 1 cred: descubrir court
    court_portal = firecrawl_search(f"court records {county} {state}")
    # 1 cred: scrape court
    court_data = firecrawl_extract(court_portal, schema=COURT_SCHEMA)
    return pa_data | court_data  # ~4 credits
```

**Budget impact**: 4 cred × 250 deals/mes = 1000 cred, justo en límite. Solo activar para counties non-FL.

**Esfuerzo**: ~2h implementación + 1h testing.
**Done cuando**: deal de Virginia (Fairfax) procesado correctamente con verdict + plaintiff + owner extraídos.

---

## 🟢 4. PA fetchers extendidos (Duval, Miami-Dade street photos)

**Contexto**: solo Broward PA tiene foto exterior real funcional vía `bcpa.net`. Miami-Dade y Duval solo exponen aerial map + sketch (verificado). Algunos counties más pequeños podrían tener street photos.

**Counties a probar**:
- Hillsborough: probablemente sí (high-volume)
- Orange: probablemente sí
- Pinellas, Lee, Brevard, Volusia: probable
- Counties más pequeños: usualmente sketch-only

**Esfuerzo**: ~20 min por county para probe + 30 min para integrar al `pa_photo_lookup.py`.
**Done cuando**: al menos 3 counties más con foto exterior funcional + entries en `_FETCHERS` dict.

---

## 🟢 5. HUD PropertyDetails photo extraction

**Contexto**: HUD Homestore search-list page no incluye foto. La página individual `/PropertyDetails?caseNumber=X` SÍ podría tener foto (no investigado a fondo aún). Probe inicial mostró Cloudinary placeholders `NoImage.jpg` para todos.

**Pendiente verificar**:
- ¿Todos los HUD listings son NoImage o solo los que vi?
- ¿Hay listings que SÍ tienen foto del HUD photographer program?
- ¿Vale la pena el per-deal fetch (39 deals × 1 Playwright call ≈ 5 min)?

**Esfuerzo**: ~1h probe + decisión + posible integración.
**Done cuando**: documentado si HUD tiene fotos reales para algún subset, o confirmado que es siempre NoImage.

---

## 🟡 6. Cards UX — feedback loop on Pre-screening result freshness

**Contexto**: pre-screening result se persiste en `st.session_state[f"prescreen_result_{deal_id}"]`. Si re-corrés pre-screening, sobrescribe. Pero si el deal data cambió (re-scrape), la card sigue mostrando el result viejo.

**Pendiente**:
- Mostrar `run_at` timestamp en la pre-screening result box
- Botón "Re-correr pre-screening" cuando hay un result viejo
- Invalidar automáticamente si el deal fue re-scrapeado post-pre-screening

**Esfuerzo**: ~1h.
**Done cuando**: card muestra "Pre-screening generado hace 2h" + botón Re-run visible.

---

## Cómo trabajar este backlog

1. Cuando arranques nueva sesión, leé este archivo + `PHASE_35_PLAN.md`
2. Si Phase 3.5 está en curso, prioridad es esa
3. Si Phase 3.5 está bloqueada o terminada, agarrá item P1/P2 de acá
4. Marcar como ✅ acá cuando se completa + linkear commit hash
5. Mover a tabla "Done" al final del archivo

## Done (historial)

_(vacío — agregar conforme completemos items)_
