A powerful, privacy-focused web application built with Next.js 16 that allows users to track Indian mobile number locations and check if their personal data has been compromised in data breaches. Featuring an interactive map interface, real-time geocoding, and comprehensive privacy controls.
- 📱 Mobile Number Tracking: Track any Indian 10-digit mobile number location instantly
- 📧 Email Breach Check: Verify if your email has been exposed in data leaks
- 🗺️ Interactive Map: Beautiful OpenStreetMap integration with smooth zoom animations
- 🔒 Privacy-First: Hide your data from search results with one click
- ⚡ Rate Limiting: Smart IP-based daily usage limits (12 searches/day)
- 🛡️ Security: Cloudflare Turnstile CAPTCHA integration for bot protection
- 📊 Real-time Geocoding: Automatic address-to-coordinates conversion
- 🎨 Modern UI: Responsive design with smooth animations using Framer Motion
- 🔍 SEO Optimized: Schema.org markup for rich search results
- 📈 Analytics: Google Analytics integration for insights
Visit the live application: https://leakdata.org
- Technology Stack
- Prerequisites
- Local Development Setup
- Environment Variables
- Database Setup
- Cloudflare Deployment
- Project Structure
- API Documentation
- Contributing
- License
- Next.js 16 - React framework with App Router
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first CSS framework
- Framer Motion - Animation library
- React Leaflet - Interactive maps
- Next.js Edge Runtime - Serverless API routes
- Neon Postgres - Serverless PostgreSQL database
- Cloudflare Turnstile - Bot protection
- Cloudflare Pages - Static hosting and edge functions
Before you begin, ensure you have the following installed:
- Node.js (v18.17 or higher) - Download
- npm or yarn - Package manager
- Git - Version control
- Cloudflare Account - Sign up
- Neon Database Account - Sign up
- Google Analytics Account (optional) - Sign up
git clone https://github.com/yenbook/proxyearth.git
cd proxyearthnpm install
# or
yarn installCreate a .env.local file in the root directory:
cp .env.example .env.localThen edit .env.local with your actual values (see Environment Variables section).
- Create tables in your Neon database:
-- Daily usage tracking table
CREATE TABLE IF NOT EXISTS daily_usage (
ip VARCHAR(45),
date DATE DEFAULT CURRENT_DATE,
count INTEGER DEFAULT 0,
PRIMARY KEY (ip, date)
);
-- Hidden targets table (privacy)
CREATE TABLE IF NOT EXISTS hidden_targets (
id SERIAL PRIMARY KEY,
value VARCHAR(255) UNIQUE NOT NULL,
type VARCHAR(10) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);npm run dev
# or
yarn devOpen http://localhost:3000 in your browser.
Create a .env.local file with the following variables:
| Variable | Description | How to Obtain | Required |
|---|---|---|---|
DATABASE_URL |
Neon PostgreSQL connection string | Neon Dashboard → Your Project → Connection Details | ✅ Yes |
API_BASE_URL |
External data leak API endpoint | Your data provider API endpoint | ✅ Yes |
TURNSTILE_SECRET_KEY |
Cloudflare Turnstile secret key | Cloudflare Dashboard → Turnstile → Site → Secret Key | ✅ Yes |
TURNSTILE_SITE_KEY |
Cloudflare Turnstile site key | Cloudflare Dashboard → Turnstile → Site → Site Key | ✅ Yes |
NEXT_PUBLIC_GA_ID |
Google Analytics Measurement ID | Google Analytics → Admin → Property → Data Streams |
# Database
DATABASE_URL="postgresql://user:password@ep-xxx.neon.tech/neondb?sslmode=require"
# External API
API_BASE_URL="https://your-api-provider.com/search"
# Cloudflare Turnstile (CAPTCHA)
TURNSTILE_SECRET_KEY="0x4AAAAxxxxxxxxxxxxxxxxxxxxxxxx"
TURNSTILE_SITE_KEY="0x4AAAAAACFVodwOjSj0q1X0"
# Google Analytics (Optional)
NEXT_PUBLIC_GA_ID="G-071CLQ0DJV"- Go to Neon Console
- Create a new project or select an existing one
- Navigate to Dashboard → Connection Details
- Copy the connection string (select "Pooled connection")
- It should look like:
postgresql://user:password@ep-xxx.region.neon.tech/dbname?sslmode=require
- Sign up with a data breach/mobile tracking API provider
- Get your API endpoint URL from their documentation
- Example format:
https://api.provider.com/v1/search
- Go to Cloudflare Dashboard
- Navigate to Turnstile in the left sidebar
- Click Add Site
- Fill in:
- Site name:
leakdata.org(or your domain) - Domain: Your actual domain or
localhostfor development
- Site name:
- After creation, you'll see:
- Site Key → Use as
TURNSTILE_SITE_KEY(also update inRemoveDataModal.tsx) - Secret Key → Use as
TURNSTILE_SECRET_KEY
- Site Key → Use as
- Go to Google Analytics
- Create a GA4 Property if you don't have one
- Navigate to Admin → Data Streams → Web
- Copy the Measurement ID (format:
G-XXXXXXXXXX)
This project uses Neon (serverless PostgreSQL). Here's how to set it up:
# Visit https://console.neon.tech/
# Click "Create Project"
# Choose your region (closest to your users)
# Copy the connection stringThe tables are created automatically on first API call, but you can manually create them:
-- Connect to your Neon database using psql or Neon SQL Editor
-- Rate limiting table
CREATE TABLE IF NOT EXISTS daily_usage (
ip VARCHAR(45),
date DATE DEFAULT CURRENT_DATE,
count INTEGER DEFAULT 0,
PRIMARY KEY (ip, date)
);
-- Privacy control table
CREATE TABLE IF NOT EXISTS hidden_targets (
id SERIAL PRIMARY KEY,
value VARCHAR(255) UNIQUE NOT NULL,
type VARCHAR(10) NOT NULL CHECK (type IN ('mobile', 'email')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create index for faster lookups
CREATE INDEX IF NOT EXISTS idx_hidden_targets_value ON hidden_targets(value);This project is optimized for Cloudflare Pages with Edge Runtime.
- Go to Cloudflare Dashboard
- Navigate to Workers & Pages
- Click Create Application → Pages → Connect to Git
- Authorize Cloudflare to access your GitHub account
- Select the
yenbook/proxyearthrepository - Configure build settings:
- Framework preset: Next.js
- Build command:
npm run pages:build - Build output directory:
.vercel/output/static
# Install Wrangler
npm install -g wrangler
# Login to Cloudflare
wrangler login
# Deploy
npx @cloudflare/next-on-pages@latest
wrangler pages deploy .vercel/output/static --project-name=proxyearth- In Cloudflare Dashboard, go to Workers & Pages → Select your project
- Navigate to Settings → Environment Variables
- Add the following variables:
For Production:
Click Add Variables → Select Production
| Variable Name | Value | Type |
|---|---|---|
DATABASE_URL |
postgresql://user:pass@ep-xxx.neon.tech/... |
Secret ✅ |
API_BASE_URL |
https://your-api.com/search |
Secret ✅ |
TURNSTILE_SECRET_KEY |
0x4AAAAxxxxxxxx |
Secret ✅ |
Important Notes:
- Mark
DATABASE_URL,API_BASE_URL, andTURNSTILE_SECRET_KEYas secrets (encrypted) - Public variables like
TURNSTILE_SITE_KEYshould be hardcoded or in source code - Click Save after adding all variables
# Trigger deployment
git push origin main
# Or use Cloudflare Dashboard → Deployments → Retry Deployment- In Cloudflare Pages, go to Custom Domains
- Click Set up a custom domain
- Enter your domain (e.g.,
leakdata.org) - Cloudflare will automatically configure DNS
The project uses a custom build script for Cloudflare Pages:
{
"scripts": {
"pages:build": "npx @cloudflare/next-on-pages@latest"
}
}This is already configured in package.json.
proxyearth/
├── public/ # Static assets
│ ├── favicon.ico
│ └── yt-size-img.jpg # SEO image
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # API Routes (Edge Runtime)
│ │ │ ├── check/ # Data leak check endpoint
│ │ │ ├── hide/ # Privacy control endpoint
│ │ │ └── limit/ # Rate limit status endpoint
│ │ ├── layout.tsx # Root layout (SEO, Analytics)
│ │ ├── page.tsx # Home page
│ │ └── globals.css # Global styles
│ ├── components/ # React components
│ │ ├── Map.tsx # Leaflet map component
│ │ ├── MapBackground.tsx
│ │ ├── SearchBox.tsx # Search interface
│ │ ├── ResultSheet.tsx # Result display
│ │ ├── RateLimitPanel.tsx
│ │ ├── RemoveDataModal.tsx
│ │ ├── ErrorModal.tsx
│ │ ├── LoadingSteps.tsx
│ │ ├── DeepSearchTerminal.tsx
│ │ └── AboutModal.tsx
│ ├── lib/ # Utilities
│ │ ├── api.ts # API client functions
│ │ ├── db.ts # Database connection
│ │ ├── security.ts # Turnstile verification
│ │ └── utils.ts # Helper functions
│ └── hooks/ # Custom React hooks
├── .env.local # Environment variables (local)
├── .env.example # Environment template
├── next.config.ts # Next.js configuration
├── tailwind.config.ts # Tailwind CSS config
├── tsconfig.json # TypeScript config
└── package.json # Dependencies
Endpoint: GET /api/check
Query Parameters:
mobile(optional): 10-digit Indian mobile numberemail(optional): Email address
Headers:
cf-turnstile-response: Turnstile token
Response:
{
"status": "success",
"mobile": "9876543210",
"name": "ANIL KUMAR SAV",
"address": "29, REDMA, DALTONGANJ PALAMU...",
"circle": "VI DELHI",
"email": "example@email.com",
"fname": "Father Name",
"id": "123456789012",
"alt": "9123456789"
}Rate Limit Response (429):
{
"rateLimit": true
}Endpoint: POST /api/hide
Body:
{
"value": "9876543210",
"type": "mobile"
}Headers:
cf-turnstile-response: Turnstile token
Response:
{
"success": true
}Endpoint: GET /api/limit
Response:
{
"count": 5,
"limit": 12,
"remaining": 7
}Edit src/app/api/check/route.ts:
const LIMIT = 12; // Change to your desired limitEdit src/components/RemoveDataModal.tsx:
<Turnstile
siteKey="YOUR_SITE_KEY_HERE"
// ...
/>Also update in src/components/SearchBox.tsx if present.
The GA tracking code is in src/app/layout.tsx. Update the ID:
gtag('config', 'G-YOUR-GA-ID');Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Solution: Check
src/lib/security.tsand add your domain toallowedDomains
- Solution: Verify
DATABASE_URLis correct and Neon project is active
- Solution: Ensure
TURNSTILE_SECRET_KEYmatches the site key in use
- Solution: Check CSP headers in
next.config.tsallow OpenStreetMap
This project is licensed under the MIT License - see the LICENSE file for details.
yenbook
- GitHub: @yenbook
- Repository: proxyearth
For issues, questions, or suggestions:
- Create an issue: GitHub Issues
- Email: contact@leakdata.org
⭐ If you find this project useful, please consider giving it a star on GitHub!