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...
- Discover — runs targeted searches of public web sources for buyer signals across product categories (sofas, wardrobes, beds, kitchen cabinets, office/hotel/salon/construction furniture). Surfaces only genuinely public pages.
- Qualify & score — batches evidence to Gemini, which returns strict JSON: opportunity requirement, location, optional contact fields (only when public), 0–100 intent score, optional opportunity value, confidence, and reject reasons.
- Store — qualified leads (intent ≥ 50) are written to the val's SQLite DB with a SHA-256 deduplication key; re-surfaced duplicates are counted and skipped, not re-stored. Hunt history is recorded too.
- Act — each lead carries a
wa.meoutreach 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 viaDeno.env.get("GEMINI_API_KEY")— never hardcoded.MARKET_SOURCES(optional) — comma-separated direct public URLs to hunt instead of search.MIN_INTENT_SCORE(optional, default50) — minimum intent score to store a lead.QUERY_LIMIT(optional, default60) — 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 (formstatus=new|contacted|quoted|closed|rejected)GET /api/hunts— hunt historyGET /api/stats— counts by status/location + latest huntGET /api/config— config status
The worker runs automatically on a cron (every 4 hours, UTC). It can also be triggered from
the dashboard / POST /api/hunt, or run manually.
- Gemini API key read via
Deno.env.get()(secure). ✓ - Real public-source discovery + Gemini qualification + scoring. ✓
- SHA-256 deduplication; duplicates counted, not stored twice. ✓
- Leads + hunt history persisted in project-scoped SQLite. ✓
- Dashboard renders saved leads and latest hunt from the DB. ✓
- WhatsApp outreach deep links use IS-REAL business line
09160726032(2349160726032) and reference https://is-real-modern-furniture-gr29qv.v2.appdeploy.ai/ ✓ - Strict no-fabrication rules enforced in the Gemini prompt and storage layer. ✓