fix: Conservative FMV valuations - no more inflated prices!

- Reduced base prices to realistic restoration project values
  * Griswold #8:  →  (60% reduction)
  * Wagner #8:  →  (58% reduction)
  * Lodge #8:  →  (69% reduction)
- Added condition detection:
  * Restored items: 1.5x FMV (deserves premium)
  * Damaged/cracked: 0.5x FMV (realistic discount)
- Now finding 6 real deals instead of 40+ questionable ones
- Deals are now TRULY exceptional (80%+ off realistic values)
- No more false positives from inflated FMV
This commit is contained in:
2026-04-10 11:52:54 -04:00
parent 71790242f6
commit 30703bfd45
9 changed files with 1074 additions and 263 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -5,15 +5,17 @@ Determines fair market value and calculates discount percentage
"""
import re
# Base price ranges for common cast iron items (in good condition)
# Base price ranges for common cast iron items (RESTORATION PROJECT prices - conservative)
# These are realistic "as-is" prices, not restored retail values
BASE_PRICES = {
'griswold': {'skillet': 150, 'griddle': 200, 'dutch_oven': 250, 'pot': 120, 'pan': 100},
'wagner': {'skillet': 120, 'griddle': 180, 'dutch_oven': 220, 'pot': 100, 'pan': 90},
'wapak': {'skillet': 180, 'griddle': 220, 'dutch_oven': 280, 'pot': 150, 'pan': 130},
'birmingham': {'skillet': 160, 'griddle': 190, 'dutch_oven': 240, 'pot': 130, 'pan': 110},
'lodge': {'skillet': 80, 'griddle': 120, 'dutch_oven': 150, 'pot': 70, 'pan': 60},
'victor': {'skillet': 140, 'griddle': 170, 'dutch_oven': 210, 'pot': 120, 'pan': 100},
'default': {'skillet': 100, 'griddle': 150, 'dutch_oven': 200, 'pot': 80, 'pan': 70}
'griswold': {'skillet': 60, 'griddle': 80, 'dutch_oven': 100, 'pot': 50, 'pan': 45},
'wagner': {'skillet': 50, 'griddle': 70, 'dutch_oven': 90, 'pot': 45, 'pan': 40},
'wapak': {'skillet': 70, 'griddle': 90, 'dutch_oven': 110, 'pot': 60, 'pan': 55},
'birmingham': {'skillet': 65, 'griddle': 85, 'dutch_oven': 105, 'pot': 55, 'pan': 50},
'lodge': {'skillet': 25, 'griddle': 40, 'dutch_oven': 60, 'pot': 30, 'pan': 25},
'victor': {'skillet': 55, 'griddle': 75, 'dutch_oven': 95, 'pot': 50, 'pan': 45},
'unmarked': {'skillet': 30, 'griddle': 45, 'dutch_oven': 60, 'pot': 35, 'pan': 30},
'default': {'skillet': 40, 'griddle': 60, 'dutch_oven': 80, 'pot': 40, 'pan': 35}
}
# Size multipliers
@@ -82,6 +84,18 @@ def calculate_fmv(title):
return round(fmv, 2)
def has_restoration_keywords(title):
"""Check if title mentions restoration work"""
title_lower = title.lower()
keywords = ['restored', 'restoration', 'refinished', 'seasoned', 'new condition', 'excellent condition']
return any(kw in title_lower for kw in keywords)
def has_damage_keywords(title):
"""Check if title mentions damage"""
title_lower = title.lower()
keywords = ['crack', 'cracked', 'broken', 'chip', 'damaged', 'warp', 'warped']
return any(kw in title_lower for kw in keywords)
def is_good_deal(price, title, min_discount=50):
"""
Determine if an item is a good deal
@@ -89,6 +103,14 @@ def is_good_deal(price, title, min_discount=50):
"""
fmv = calculate_fmv(title)
# Adjust FMV based on condition keywords
if has_restoration_keywords(title):
# Restored items are worth more
fmv = fmv * 1.5
elif has_damage_keywords(title):
# Damaged items are worth less
fmv = fmv * 0.5
if price <= 0 or fmv <= 0:
return False, 0, fmv

View File

@@ -1,5 +1,5 @@
{
"last_check": "2026-04-10T07:09:01.012534",
"last_check": "2026-04-10T10:09:06.314350",
"processed": 0,
"upgraded": 0,
"processed_ids": [

View File

@@ -74,3 +74,5 @@ Error: All models failed (3): nvidia/qwen/qwen3.5-397b-a17b: session file locked
[Thu Apr 9 09:01:35 EDT 2026] Completed with exit code: 0
[Thu Apr 9 09:01:57 EDT 2026] Starting daily marketing content generation
[Thu Apr 9 09:01:57 EDT 2026] Completed with exit code: 0
[Fri Apr 10 09:00:20 EDT 2026] Starting daily marketing content generation
[Fri Apr 10 09:00:20 EDT 2026] Completed with exit code: 0

View File

@@ -2872,3 +2872,17 @@ No new leads found
[Fri Apr 10 07:17:33 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 08:00:02 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 08:00:02 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 08:17:32 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 08:17:32 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 09:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 09:00:01 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 09:17:40 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 09:17:40 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 10:00:02 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 10:00:02 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 10:17:33 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 10:17:33 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 11:00:02 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 11:00:02 EDT 2026] Response size: 7791 bytes
[Fri Apr 10 11:18:09 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding
[Fri Apr 10 11:18:09 EDT 2026] Response size: 7791 bytes

View File

@@ -2297,3 +2297,31 @@
[2026-04-10T12:00:02Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T12:00:02Z] Processing calc submissions...
[2026-04-10T12:00:02Z] Check complete. Next run at 2026-04-10T09:00:EDT
[2026-04-10T12:17:31Z] Starting lead monitor check
[2026-04-10T12:17:32Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T12:17:32Z] Processing calc submissions...
[2026-04-10T12:17:32Z] Check complete. Next run at 2026-04-10T09:17:EDT
[2026-04-10T13:00:00Z] Starting lead monitor check
[2026-04-10T13:00:01Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T13:00:01Z] Processing calc submissions...
[2026-04-10T13:00:01Z] Check complete. Next run at 2026-04-10T10:00:EDT
[2026-04-10T13:17:39Z] Starting lead monitor check
[2026-04-10T13:17:40Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T13:17:40Z] Processing calc submissions...
[2026-04-10T13:17:40Z] Check complete. Next run at 2026-04-10T10:17:EDT
[2026-04-10T14:00:01Z] Starting lead monitor check
[2026-04-10T14:00:02Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T14:00:02Z] Processing calc submissions...
[2026-04-10T14:00:02Z] Check complete. Next run at 2026-04-10T11:00:EDT
[2026-04-10T14:17:32Z] Starting lead monitor check
[2026-04-10T14:17:33Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T14:17:33Z] Processing calc submissions...
[2026-04-10T14:17:33Z] Check complete. Next run at 2026-04-10T11:17:EDT
[2026-04-10T15:00:01Z] Starting lead monitor check
[2026-04-10T15:00:02Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T15:00:02Z] Processing calc submissions...
[2026-04-10T15:00:02Z] Check complete. Next run at 2026-04-10T12:00:EDT
[2026-04-10T15:18:07Z] Starting lead monitor check
[2026-04-10T15:18:09Z] ROI Calc submissions response: 7791 bytes
[2026-04-10T15:18:09Z] Processing calc submissions...
[2026-04-10T15:18:09Z] Check complete. Next run at 2026-04-10T12:18:EDT

View File

@@ -1,7 +1,7 @@
{
"processed_leads": [],
"processed_calc_ids": [1, 2, 3, 4],
"last_check": "2026-04-10T12:00:02Z",
"last_check": "2026-04-10T15:18:09Z",
"status": "active",
"notes": "Hourly monitoring enabled. Next check in 60 minutes."
}

View File

@@ -1,9 +1,9 @@
# Self-Improving Heartbeat State
last_heartbeat_started_at: 2026-04-10T11:04:00Z
last_heartbeat_started_at: 2026-04-10T15:47:00Z
last_reviewed_change_at: 2026-03-26T12:20:00Z
last_heartbeat_result: HEARTBEAT_OK
## Last actions
- 2026-04-10 11:04Z: Heartbeat check - no changes in self-improving files since last review
- 2026-04-10 15:47Z: Heartbeat check - no changes in self-improving files since last review
- Sales-lead agent: ✅ Cron executed at 04:17 AM, 3 leads detected (john@example.com, jane@example123.com, smith@example.com)
- Marketing-content agent: ✅ Last run Apr 9 09:01 AM completed successfully. No new content since then.
- Marketing-content agent: ✅ Today's 9:00 AM run completed successfully. No new content produced since last check.