Skip to content

Commit 5962cf4

Browse files
committed
UPDATED - RED_EYE_LEAD_HUNTER
A high-performance, dark-themed Chrome Extension for automated lead extraction from Google Maps.
1 parent c6a16bc commit 5962cf4

91 files changed

Lines changed: 14298 additions & 2 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?

HOST.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Hosting Guide for RED-EYE LEAD-HUNTER
2+
3+
This project is built using **Vite + React**. Below are the step-by-step instructions to host your website on popular platforms.
4+
5+
---
6+
7+
## 1. Vercel (Recommended)
8+
Vercel is the easiest platform for React/Vite projects.
9+
10+
1. **Push your code** to a GitHub, GitLab, or Bitbucket repository.
11+
2. Go to [Vercel](https://vercel.com/) and sign in with your Git provider.
12+
3. Click **"Add New"** > **"Project"**.
13+
4. Import your `RED-EYE-LEAD-HUNTER` repository.
14+
5. Vercel will automatically detect Vite. Ensure the settings are:
15+
* **Framework Preset:** `Vite`
16+
* **Build Command:** `npm run build`
17+
* **Output Directory:** `dist`
18+
6. Click **"Deploy"**. Your site will be live in seconds!
19+
20+
---
21+
22+
## 2. Netlify
23+
Netlify is another excellent choice for static site hosting.
24+
25+
1. Push your code to GitHub.
26+
2. Login to [Netlify](https://www.netlify.com/).
27+
3. Click **"Add new site"** > **"Import an existing project"**.
28+
4. Choose your Git provider and select your repository.
29+
5. Set the following build settings:
30+
* **Build command:** `npm run build`
31+
* **Publish directory:** `dist`
32+
6. Click **"Deploy site"**.
33+
7. *(Optional)* To fix React Router 404 issues on page refresh, create a `public/_redirects` file with:
34+
```text
35+
/* /index.html 200
36+
```
37+
38+
---
39+
40+
## 3. GitHub Pages
41+
GitHub Pages is free and integrated directly into your repository.
42+
43+
### Option A: Using GitHub Actions (Easiest)
44+
1. Go to your repository on GitHub.
45+
2. Click **Settings** > **Pages**.
46+
3. Under **Build and deployment** > **Source**, select **"GitHub Actions"**.
47+
4. GitHub will suggest a "Static HTML" or "Vite" workflow. Search for "Vite" or use the official Vite starter workflow.
48+
49+
### Option B: Manual Deploy (gh-pages branch)
50+
1. Install the `gh-pages` package:
51+
```bash
52+
npm install gh-pages --save-dev
53+
```
54+
2. Add these scripts to your `package.json`:
55+
```json
56+
"predeploy": "npm run build",
57+
"deploy": "gh-pages -d dist"
58+
```
59+
3. Run `npm run deploy`.
60+
4. In GitHub Settings > Pages, set the source to the `gh-pages` branch.
61+
62+
---
63+
64+
## 4. Hostinger / Shared Hosting (cPanel)
65+
If you are using Hostinger or any shared hosting with a File Manager/FTP.
66+
67+
1. **Install dependencies and build your project locally:**
68+
Open your terminal in the project folder and run:
69+
```bash
70+
npm install
71+
npm run build
72+
```
73+
2. **Locate the build folder:**
74+
This will create a `dist` folder in your project directory.
75+
3. **Upload to Hostinger:**
76+
* Log in to your **hPanel** (Hostinger Control Panel).
77+
* Go to **File Manager**.
78+
* Open the `public_html` folder.
79+
* **Upload all contents** from your local `dist` folder directly into `public_html`.
80+
4. **Fix React Router (404 on refresh):**
81+
If your app has multiple pages/routes, create a file named `.htaccess` in the `public_html` folder and paste this:
82+
```apache
83+
<IfModule mod_rewrite.c>
84+
RewriteEngine On
85+
RewriteBase /
86+
RewriteRule ^index\.html$ - [L]
87+
RewriteCond %{REQUEST_FILENAME} !-f
88+
RewriteCond %{REQUEST_FILENAME} !-d
89+
RewriteRule . /index.html [L]
90+
</IfModule>
91+
```
92+
93+
94+
---
95+
96+
## Important Build Notes
97+
* **Build Command:** `npm run build`
98+
* **Output Folder:** `dist`
99+
* **Environment Variables:** If you have an `.env` file, make sure to add those variables in the Hosting Provider's dashboard (e.g., Vercel Project Settings > Environment Variables).
100+
101+
---
102+
103+
## Premium Custom Domain
104+
If you have a custom domain (e.g., `www.redeye-leads.com`):
105+
1. Go to the **Domain Settings** of your hosting provider (Vercel/Netlify).
106+
2. Add your domain.
107+
3. Update your domain's **DNS records** (A record or CNAME) as instructed by the provider.

README.md

Lines changed: 223 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,223 @@
1-
# RED-EYE-LEAD-HUNTER
2-
A high-performance, dark-themed Chrome Extension for automated lead extraction from Google Maps.
1+
<p align="center">
2+
<img src="public/banner.png" alt="RED EYE Banner" width="75%">
3+
</p>
4+
5+
<h1 align="center">👁️ RED EYE LEAD HUNTER</h1>
6+
7+
<p align="center">
8+
<strong>A high-performance, dark-themed Chrome Extension for automated lead extraction from Google Maps.</strong>
9+
</p>
10+
11+
<p align="center">
12+
<img src="https://img.shields.io/badge/Manifest-V3-red?style=for-the-badge&logo=googlechrome" alt="Manifest V3">
13+
<img src="https://img.shields.io/badge/React-18-61DAFB?style=for-the-badge&logo=react" alt="React 18">
14+
<img src="https://img.shields.io/badge/Vite-5-646CFF?style=for-the-badge&logo=vite" alt="Vite 5">
15+
<img src="https://img.shields.io/badge/Tailwind-CSS-38B2AC?style=for-the-badge&logo=tailwind-css" alt="Tailwind CSS">
16+
<img src="https://img.shields.io/badge/TypeScript-Ready-3178C6?style=for-the-badge&logo=typescript" alt="TypeScript">
17+
</p>
18+
19+
---
20+
21+
## 📖 Overview
22+
23+
**RED EYE** is a sophisticated lead generation tool designed for outreach specialists, marketing agencies, and sales professionals. It automates the tedious process of harvesting business contact information from Google Maps, transforming raw search results into structured, actionable CSV data.
24+
25+
Unlike generic scrapers, RED EYE is built with a "Deep Scrape" engine that navigates into individual business profiles to extract elusive data points like emails and social media links, all while maintaining a polite, human-like interaction pattern.
26+
27+
---
28+
29+
## ✨ Key Features
30+
31+
- 🚀 **Automated Extraction**: Smart auto-scrolling with randomized delays (1.2s – 2.6s) to mimic human behavior.
32+
- 🧠 **Deep Scrape Engine**: Programmatically interacts with side panels to harvest emails, social links (IG/FB), and WhatsApp numbers.
33+
- 📞 **Smart WhatsApp Fallback**: Intelligently constructs `wa.me` links from localized phone numbers when direct links are missing.
34+
- 🧹 **Zero-Noise Data**: Automatic deduplication based on unique Name + Address pairs.
35+
- 📥 **One-Click Export**: Downloads UTF‑8 BOM encoded CSVs, ensuring perfect compatibility with Microsoft Excel.
36+
- 🎯 **Advanced Filtering**: Instantly isolate businesses without websites — a goldmine for web design and SEO agencies.
37+
- 🎨 **Premium UI/UX**: Features a draggable, dark-themed cyberpunk interface injected directly into the Google Maps DOM.
38+
39+
---
40+
41+
## 🛠️ Technical Stack
42+
43+
### Browser Extension
44+
- **Engine**: Vanilla JavaScript (ES6+)
45+
- **Standard**: Chrome Manifest V3
46+
- **State Management**: `chrome.storage.local` for persistence across sessions.
47+
- **Messaging**: Asynchronous message passing between Content Scripts and Background Service Workers.
48+
49+
### Landing Page & Dashboard
50+
- **Framework**: React 18 with TypeScript
51+
- **Bundler**: Vite 5
52+
- **Styling**: Tailwind CSS & shadcn/ui
53+
- **Icons**: Lucide React
54+
55+
---
56+
57+
## 🧠 Technical Challenges & Solutions
58+
59+
### 1. Handling Dynamic DOM Virtualization
60+
**Challenge**: Google Maps uses aggressive DOM virtualization, meaning elements are destroyed and recreated as you scroll.
61+
**Solution**: Implemented a robust `MutationObserver` and custom polling logic to ensure the scraper consistently finds data even when the browser recycles DOM nodes.
62+
63+
### 2. Rate Limiting & Bot Detection
64+
**Challenge**: Scraping too fast triggers CAPTCHAs or temporary blocks.
65+
**Solution**: Developed a randomized delay algorithm and localized interaction points to simulate natural human scrolling and clicking patterns.
66+
67+
### 3. Data Normalization
68+
**Challenge**: Business details vary wildly in format (e.g., phone numbers, addresses).
69+
**Solution**: Used regular expressions and string parsing logic to clean and standardize fields like `Country`, `City`, and `WhatsApp` links for reliable outreach use.
70+
71+
---
72+
73+
## 📁 Project Structure
74+
75+
```bash
76+
RED-EYE-LEAD-HUNTER
77+
├── 📁 extension
78+
│ ├── 📁 icons
79+
│ │ └── 🖼️ icon.png
80+
│ ├── 📄 background.js
81+
│ ├── 📄 content.js
82+
│ ├── ⚙️ manifest.json
83+
│ ├── 🌐 popup.html
84+
│ ├── 📄 popup.js
85+
│ └── 🎨 styles.css
86+
├── 📁 public
87+
│ ├── 🖼️ banner.png
88+
│ ├── 🖼️ favicon.png
89+
│ ├── 📦 red-eye.zip
90+
│ ├── 🖼️ placeholder.svg
91+
│ └── 📄 robots.txt
92+
├── 📁 src
93+
│ ├── 📁 assets
94+
│ │ └── 🖼️ red-eye-logo.png
95+
│ ├── 📁 components
96+
│ │ ├── 📁 ui
97+
│ │ │ ├── 📄 accordion.tsx
98+
│ │ │ ├── 📄 alert-dialog.tsx
99+
│ │ │ ├── 📄 alert.tsx
100+
│ │ │ ├── 📄 aspect-ratio.tsx
101+
│ │ │ ├── 📄 avatar.tsx
102+
│ │ │ ├── 📄 badge.tsx
103+
│ │ │ ├── 📄 breadcrumb.tsx
104+
│ │ │ ├── 📄 button.tsx
105+
│ │ │ ├── 📄 calendar.tsx
106+
│ │ │ ├── 📄 card.tsx
107+
│ │ │ ├── 📄 carousel.tsx
108+
│ │ │ ├── 📄 chart.tsx
109+
│ │ │ ├── 📄 checkbox.tsx
110+
│ │ │ ├── 📄 collapsible.tsx
111+
│ │ │ ├── 📄 command.tsx
112+
│ │ │ ├── 📄 context-menu.tsx
113+
│ │ │ ├── 📄 dialog.tsx
114+
│ │ │ ├── 📄 drawer.tsx
115+
│ │ │ ├── 📄 dropdown-menu.tsx
116+
│ │ │ ├── 📄 form.tsx
117+
│ │ │ ├── 📄 hover-card.tsx
118+
│ │ │ ├── 📄 input-otp.tsx
119+
│ │ │ ├── 📄 input.tsx
120+
│ │ │ ├── 📄 label.tsx
121+
│ │ │ ├── 📄 menubar.tsx
122+
│ │ │ ├── 📄 navigation-menu.tsx
123+
│ │ │ ├── 📄 pagination.tsx
124+
│ │ │ ├── 📄 popover.tsx
125+
│ │ │ ├── 📄 progress.tsx
126+
│ │ │ ├── 📄 radio-group.tsx
127+
│ │ │ ├── 📄 resizable.tsx
128+
│ │ │ ├── 📄 scroll-area.tsx
129+
│ │ │ ├── 📄 select.tsx
130+
│ │ │ ├── 📄 separator.tsx
131+
│ │ │ ├── 📄 sheet.tsx
132+
│ │ │ ├── 📄 sidebar.tsx
133+
│ │ │ ├── 📄 skeleton.tsx
134+
│ │ │ ├── 📄 slider.tsx
135+
│ │ │ ├── 📄 sonner.tsx
136+
│ │ │ ├── 📄 switch.tsx
137+
│ │ │ ├── 📄 table.tsx
138+
│ │ │ ├── 📄 tabs.tsx
139+
│ │ │ ├── 📄 textarea.tsx
140+
│ │ │ ├── 📄 toast.tsx
141+
│ │ │ ├── 📄 toaster.tsx
142+
│ │ │ ├── 📄 toggle-group.tsx
143+
│ │ │ ├── 📄 toggle.tsx
144+
│ │ │ ├── 📄 tooltip.tsx
145+
│ │ │ └── 📄 use-toast.ts
146+
│ │ └── 📄 NavLink.tsx
147+
│ ├── 📁 hooks
148+
│ │ ├── 📄 use-mobile.tsx
149+
│ │ └── 📄 use-toast.ts
150+
│ ├── 📁 lib
151+
│ │ └── 📄 utils.ts
152+
│ ├── 📁 pages
153+
│ │ ├── 📄 Index.tsx
154+
│ │ └── 📄 NotFound.tsx
155+
│ ├── 📁 test
156+
│ │ ├── 📄 example.test.ts
157+
│ │ └── 📄 setup.ts
158+
│ ├── 🎨 App.css
159+
│ ├── 📄 App.tsx
160+
│ ├── 🎨 index.css
161+
│ ├── 📄 main.tsx
162+
│ └── 📄 vite-env.d.ts
163+
├── ⚙️ .gitignore
164+
├── 📝 HOST.md
165+
├── 📝 README.md
166+
├── 📄 bun.lockb
167+
├── ⚙️ components.json
168+
├── 📄 eslint.config.js
169+
├── 🌐 index.html
170+
├── ⚙️ package-lock.json
171+
├── ⚙️ package.json
172+
├── 📄 postcss.config.js
173+
├── 📄 tailwind.config.ts
174+
├── ⚙️ tsconfig.app.json
175+
├── ⚙️ tsconfig.json
176+
├── ⚙️ tsconfig.node.json
177+
├── 📄 vite.config.ts
178+
└── 📄 vitest.config.ts
179+
```
180+
181+
---
182+
183+
## 🚀 Installation (Developer Mode)
184+
185+
1. Download the latest **`red-eye.zip`** from the landing page.
186+
2. Extract the archive to a local folder.
187+
3. Navigate to `chrome://extensions` in your browser.
188+
4. Enable **"Developer mode"** in the top-right corner.
189+
5. Click **"Load unpacked"** and select the `extension/` folder or the extracted directory.
190+
191+
---
192+
193+
## 🧑‍💻 Usage
194+
195+
1. Visit [Google Maps](https://www.google.com/maps).
196+
2. Search for a niche (e.g., *"Web Design in New York"*).
197+
3. The **RED EYE** panel will appear on the right.
198+
4. Toggle **Deep Scrape** for full contact harvesting.
199+
5. Press **Start** and watch your lead list grow in real-time.
200+
6. Click **Export CSV** when you're ready to start your campaign.
201+
202+
---
203+
204+
## 👨‍💻 Meet the Developer
205+
206+
**MD SAMIUR RAHMAN TANIM**
207+
*Developed by Vibe Coding for Time Save using Lovable*
208+
209+
<p align="left">
210+
<a href="https://github.com/CodeWithTanim"><img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white" alt="GitHub"></a>
211+
<a href="https://linkedin.com/in/codewithtanim"><img src="https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white" alt="LinkedIn"></a>
212+
<a href="https://youtube.com/@CodeWithTanim"><img src="https://img.shields.io/badge/YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white" alt="YouTube"></a>
213+
<a href="https://facebook.com/CodeWithTanim"><img src="https://img.shields.io/badge/Facebook-1877F2?style=for-the-badge&logo=facebook&logoColor=white" alt="Facebook"></a>
214+
<a href="https://instagram.com/CodeWithTanim"><img src="https://img.shields.io/badge/Instagram-E4405F?style=for-the-badge&logo=instagram&logoColor=white" alt="Instagram"></a>
215+
</p>
216+
217+
---
218+
219+
## ⚖️ Disclaimer & License
220+
221+
This tool is for educational and research purposes. Users are responsible for complying with Google's Terms of Service and local privacy laws (GDPR/CCPA).
222+
223+
**License**: MIT

bun.lockb

240 KB
Binary file not shown.

components.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "https://ui.shadcn.com/schema.json",
3+
"style": "default",
4+
"rsc": false,
5+
"tsx": true,
6+
"tailwind": {
7+
"config": "tailwind.config.ts",
8+
"css": "src/index.css",
9+
"baseColor": "slate",
10+
"cssVariables": true,
11+
"prefix": ""
12+
},
13+
"aliases": {
14+
"components": "@/components",
15+
"utils": "@/lib/utils",
16+
"ui": "@/components/ui",
17+
"lib": "@/lib",
18+
"hooks": "@/hooks"
19+
}
20+
}

0 commit comments

Comments
 (0)