A production market-intelligence worker that continuously scans public web sources for genuine furniture-buying opportunities in Nigeria (Lagos, Ogun, Ibadan, Abuja), qualifies them with Gemini, scores purchase intent, and stores them as actionable sales leads — with a live dashboard and WhatsApp outreach links.
No fabricated buyers, contacts, prices, evidence, or opportunities. Ever. All contact details and values come only from public evidence surfaced by the hunter; anything not publicly stated is stored as empty.
Dashboard + API: https://is-real-sales-os.val.run/
Rendering mermaid diagram...
wa.me outreach link to IS-REAL's business WhatsApp
0916 072 6032, prefilled with an evidence-driven message referencing the prospect's
requirement and IS-REAL's site.| File | Type | Role |
|---|---|---|
market-hunter.ts | interval | Scheduled worker, runs on cron, logs structured results |
lib/hunter.ts | script | Orchestrator: discovery → Gemini → storage, SQLite schema, query helpers |
lib/sources.ts | script | Public-source discovery + parsing |
lib/gemini.ts | script | Gemini qualification/scoring (reads GEMINI_API_KEY) |
index.ts | http | Hono dashboard + API (manual hunt, leads, hunts, stats) |
GEMINI_API_KEY (required) — Google AI Studio key used to qualify/score leads.
Read securely at runtime via Deno.env.get("GEMINI_API_KEY") — never hardcoded.MARKET_SOURCES (optional) — comma-separated direct public URLs to hunt instead of search.MIN_INTENT_SCORE (optional, default 50) — minimum intent score to store a lead.QUERY_LIMIT (optional, default 60) — max search queries per hunt.👉 Add GEMINI_API_KEY here: https://www.val.town/x/isrealmodernfurniture/is-real-ai-sales-os/environment-variables?key=GEMINI_API_KEY
GET / — live dashboard (real leads + hunt history)POST /api/hunt — run a market hunt now (manual trigger)GET /api/leads?status=&location=&q=&order= — list leadsGET /api/leads/:id — single leadPOST /api/leads/:id/status — set lead status (form status=new|contacted|quoted|closed|rejected)GET /api/hunts — hunt historyGET /api/stats — counts by status/location + latest huntGET /api/config — config statusThe worker runs automatically on a cron (every 4 hours, UTC). It can also be triggered from
the dashboard / POST /api/hunt, or run manually.
Deno.env.get() (secure). ✓09160726032 (2349160726032)
and reference https://is-real-modern-furniture-gr29qv.v2.appdeploy.ai/ ✓