| Groq for n8n agent nodes, not Gemini |
Gemini produced "too many requests" and "service unavailable" errors under repeated sequential calls. Groq on llama-3.3-70b-versatile proved reliable under the same load and significantly faster |
| Allowlist for LinkedIn geography, not blocklist |
A blocklist requires knowing every non-target country subdomain in advance. An allowlist requires knowing only the five target subdomains — everything else blocked by default |
| Partial unique index on email, not unique constraint |
Supabase unique constraint treats two null values as equal — rejecting the second null-email prospect as a duplicate. Partial index enforces uniqueness only when email IS NOT NULL |
| has_full_name gate before Hunter Email Finder |
Hunter's Email Finder by Name returns 400 error when first_name equals last_name — which happens when a single-word name is split. The IF gate prevents the API call |
| Domain-aware email filtering |
Prospect domain emails always pass through regardless of blocked domain list — prevents legitimate business emails from being filtered |
| Semi-manual email send |
Every outreach email is written and sent by Rohit manually. This is a positioning decision, not a limitation. The system does the research. The human does the relationship |
| Service role key in n8n, anon key in Lovable |
n8n writes using the service role key (bypasses RLS). Lovable reads using the anon key (subject to RLS). Public dashboard link cannot modify data |
| Six-API email waterfall |
No single email finding API has comprehensive coverage. Running Prospeo, Hunter, and Snov in waterfall sequence maximises coverage without significantly increasing cost since each only fires when the previous returned nothing |
| Dual trigger on W0 |
Cron handles daily automation. Manual webhook enables ad-hoc sourcing runs. Both paths converge at the same processing logic |
| SplitInBatches loop output, not done output |
Done output fires only after all items are exhausted and carries no data. Loop output fires once per item with data. Always connect processing nodes to loop output |