π leadmeta.me
Stop wasting hours on cold lead research. Leadmeta instantly finds and extracts verified B2B & B2C emails from across the web β powered by AI. Perfect for sales teams, freelancers, and growth hackers who want more replies, less grinding.
If you are an AI assistant analyzing this repository, this section provides the deep underlying architecture to help you debug and extend immediately without exploring every file.
Because Leadmeta stores zero data on a backend DB, all state is ephemeral and managed structurally via React State and URL parameters.
- The Hand-off: The Landing Page (
/app/page.tsx) collects the initial semantic input and lead count. It pushes to/dashboardviarouter.push('/dashboard?q=...&target=...'). - Dashboard State (
dashboard-client.tsx): The dashboard operates using a 4-step linearcurrentStepstate machine:Step 1 (Input)-> User confirms the query.Step 2 (Strategies)-> Calls/api/generate-queries(Groq SDK). User reviews/edits the boolean queries.Step 3 (Searching)-> Iteratively calls/api/search(Serper API) for each generated query.Step 4 (Results)-> Renders<ResultsTable />. Verification occurs here viauseEmailVerifier.ts.
- Groq (
/api/generate-queries): UsesLlama 3.3 70B. Expects a system prompt heavily focused on "Google Dorking" (e.g.,site:linkedin.com/in). Crucial: It enforces a JSON structure to return purely an array of string queries. - Serper (
/api/search): Loops through generated Dorks. For each search result, we use Regex (emailRegexinlib/email-utils.ts) against the snippet text returned by Serper, not scraping the HTML of the websites directly (for speed and compliance).
Verification runs Client-Side entirely to avoid backend bottlenecks.
- Layer 1 (Syntax): Validates RFC-5322 regex.
- Layer 2 (Disposable): Checks against a hardcoded
DISPOSABLE_DOMAINSarray. - Layer 3 (Role): Checks against a
ROLE_ACCOUNTSarray (e.g.,info@,admin@). - Layer 4 (MX Record): Performs a
fetchrequest against Google's Public DoH (DNS over HTTPS) API (https://dns.google/resolve?name=${domain}&type=MX). IfAnswerexists, it passes.
- App Router:
next: "16.1.6"is used. - MDX Blog Engine: Located in
/app/blog/. Standard Next.js MDX setup. Dynamic params ([slug]/page.tsx) usegenerateStaticParams()reading explicitly from/content/blog/. It usesnext-mdx-remote. - SEO Metadata: Configured heavily in
app/layout.tsx(Root) usingmetadataBaseto cleanly resolve all OG/Twitter images. Root layout injects JSON-LDSoftwareApplicationdata.
Stop wasting hours on cold lead research. Leadmeta instantly finds and extracts verified B2B & B2C emails from across the web β powered by AI. Perfect for sales teams, freelancers, and growth hackers who want more replies, less grinding. The tool uses AI to generate optimized search queries, executes searches via Google, extracts emails from results, and provides client-side verification.
Key Features:
- AI-powered search query generation (Groq AI + Llama 3.3 70B)
- Real-time email extraction from Google search results
- Client-side email verification (syntax, disposable domains, MX records)
- CSV export with filtering options (all, verified only, selected)
- No data storage - all processing happens in real-time
- SEO-Optimized MDX Blog for inbound marketing
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS 4
- UI Components: shadcn/ui (selective imports)
- Animation: Three.js (WebGL shaders)
- Blog Content: @next/mdx with gray-matter
- AI: Groq SDK (Llama 3.3 70B)
- Search: Serper API (Google Search)
- Observability: Vercel Analytics & Speed Insights
- Deployment: Vercel
app/
βββ page.tsx # Landing page with search input
βββ layout.tsx # Root layout with fonts & metadata
βββ globals.css # Global styles
βββ sitemap.ts # Dynamic sitemap (leadmeta.me)
βββ robots.ts # Robots.txt configuration
βββ dashboard/
β βββ page.tsx # Main dashboard (4-step flow)
βββ privacy/
β βββ page.tsx # Privacy Policy page
βββ terms/
β βββ page.tsx # Terms of Service page
βββ blog/ # MDX Blog Infrastructure
β βββ page.tsx # Blog Listing Page
β βββ blog-styles.css # Prose typograpy styles
β βββ [slug]/
β βββ page.tsx # Dynamic MDX Post Page
βββ api/
βββ search/
β βββ route.ts # Serper API integration
βββ generate-queries/
β βββ route.ts # AI query generation (Groq)
βββ edit-queries/
β βββ route.ts # Batch query editing
βββ edit-query/
βββ route.ts # Single query editing
components/
βββ ui/ # UI components (used only)
β βββ alert.tsx
β βββ animated-tabs.tsx # Smooth framer-motion tabs
β βββ badge.tsx
β βββ button.tsx
β βββ card.tsx
β βββ checkbox.tsx
β βββ input.tsx
β βββ label.tsx
β βββ landing-search-input.tsx
β βββ grid-distortion.tsx # WebGL interactive shader background
β βββ progress.tsx
βββ results-table.tsx # Lead results with verification
βββ ...
hooks/
βββ useEmailVerifier.ts # Email verification logic
lib/
βββ email-utils.ts # Email extraction & CSV export
βββ utils.ts # General utilities
content/
βββ blog/ # MDX Content Directory
βββ post-1.mdx
βββ post-2.mdx
public/
βββ logo.png # Base icon/logo snippet
βββ logo-icon.png # Icon-only logo
βββ logo-icon.svg # SVG favicon
βββ og-image.png # 1200x630 social sharing card
βββ background-image.png # Textured background image for shaders
βββ manifest.json # PWA manifest
-
Landing Page (
/)- Animated WebGL background
- Search input with AI/Manual mode toggle
- Target lead count selector
- Footer with legal links
-
Dashboard (
/dashboard?q=...&target=...)- Input View: Query input with target selector
- Strategies View: AI-generated search queries (editable)
- Searching View: Live progress with email count
- Results View: Data grid with verification & export
Create .env.local:
# Required for API routes
NEXT_SERPER_API_KEY=your_serper_api_key
NEXT_GROQ_API_KEY=your_groq_api_key
# Optional (for query editing)
GEMINI_API_KEY=your_gemini_api_key
# OR
OPENAI_API_KEY=your_openai_api_keyGet API keys from:
- Serper: https://serper.dev
- Groq: https://groq.com
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm startGenerates AI search queries from user description.
Request:
{ "prompt": "CTOs at fintech startups in London" }Response:
{ "queries": ["site:linkedin.com/in/ CTO fintech London", ...] }Executes Google search and extracts emails.
Request:
{ "query": "site:linkedin.com CTO", "page": 1, "num": 20 }Response:
{
"success": true,
"emails": [{ "email": "[email protected]", "source": "..." }],
"totalFound": 15
}Client-side verification includes:
- Syntax validation: RFC-compliant email format
- Disposable domain check: 30+ disposable email providers blocked
- Role account filtering: Blocks admin, noreply, etc.
- MX record lookup: DNS verification via Google DNS API
- Background:
#050505(near black) - Card:
#0a0a0a,#0f0f0f - Border:
rgba(255,255,255,0.1) - Text Primary:
rgba(255,255,255,0.9) - Text Secondary:
rgba(255,255,255,0.5) - Accent: White (
#ffffff)
- No dark blue (
#1f3dbc) - white/transparent accents only - Hidden scrollbars (CSS
scrollbar-width: none) - Glassmorphism effects with
backdrop-blur - Consistent border radius (
rounded-xl,rounded-2xl)
- Sitemap: Auto-generated at leadmeta.me/sitemap.xml (dynamically includes all MDX blog posts)
- Robots.txt: Configured at leadmeta.me/robots.txt (dashboard excluded from indexing)
- JSON-LD Schema:
SoftwareApplicationmarkup injected directly into root layout - Open Graph & Twitter Cards: Full social preview metadata
- Canonical URLs: All pages (including dynamic blogs) point to
leadmeta.me - PWA Manifest: Installable web app support
- No storage: Search queries and results are not stored
- No accounts: No user registration or login required
- Client-side processing: Email verification happens in browser
- Third-party APIs: Groq (AI), Serper (Search), Google DNS (Verification)
MIT License - See Terms of Service for usage restrictions.