NeoProspector uses a full-stack architecture based on Next.js 15, where the dashboard, API routes, authentication, scraping workflows, CSV import, and database persistence live inside a single application.
The platform runs on Dokploy using Docker-based infrastructure, with Traefik handling reverse proxy and SSL certificates through Let's Encrypt. The application connects to a persistent PostgreSQL 16 database using Prisma 7 and the native PostgreSQL adapter.
For lead generation, the system integrates with an Apify Google Maps scraping actor and OpenStreetMap Nominatim for geocoding. This architecture supports prospect database creation, external data imports, secure authentication, and dashboard-based metrics.
- Frontend Stack
- The frontend was built with Next.js 15, React, and the App Router. The dashboard uses a modern dark UI focused on productivity, inspired by tools like Airtable, with responsive layouts, glassmorphism-style cards, micro-interactions, and a clear visual hierarchy. The interface allows users to launch new prospecting searches, view key metrics, manage lead databases, import CSV files, and navigate between sections such as dashboard, databases, prospecting agent, and configuration. CSV files are processed client-side using PapaParse before being sent in batches to the backend for import and mapping.
- Backend Stack
- The backend is implemented using Next.js API Routes. It manages authentication, scraping requests, CSV imports, lead database administration, and data updates. Key endpoints: POST /api/scrape — starts the geocoding process and launches asynchronous executions using the Apify Google Maps actor. POST /api/import — receives CSV-processed data and maps flexible columns into the Prisma lead model. GET / PATCH / DELETE /api/jobs — manages prospecting databases and their associated leads. POST /api/auth/login — handles persistent authentication using signed JWTs and HTTP-only cookies.
- Database Stack
- PostgreSQL 16 is used as the persistent database layer. The application uses Prisma 7 with @prisma/adapter-pg and the native pg connection pool. The database stores users, scraping jobs, and individual leads. Each user can create multiple prospecting databases, and each database can contain multiple leads with information such as business name, phone number, rating, review count, category, address, city, website, and Google Maps URL. Production migrations are handled safely using prisma migrate deploy, avoiding destructive operations such as force-reset.
- Automation Stack
- NeoProspector automates the creation of structured lead databases from niche and location-based searches. The workflow starts when the user enters a business category and a target zone. The system geocodes the location using OpenStreetMap Nominatim, runs the Apify actor to collect Google Maps data, processes the response, normalizes the fields, and stores the results as a lead database. The platform also automates CSV imports, allowing external lead data to be uploaded, processed, mapped, and stored inside the same dashboard.
- AI Stack
- NeoProspector is designed as an intelligent prospecting workflow rather than a traditional manual search tool. The current intelligence layer focuses on automated data collection, geocoding, lead structuring, CSV processing, and dashboard-based analysis. The architecture can be extended with AI-based features such as lead enrichment, prospect scoring, business classification, website analysis, contact prioritization, and automated opportunity detection.
- Deployment Stack
- The platform is deployed on Dokploy using Docker-based infrastructure. Traefik handles reverse proxy routing and automatic SSL certificates through Let's Encrypt for prospector.diabolicalservices.tech. A startup script runs when the application container starts. This process applies pending Prisma migrations, runs the admin seed to ensure required dependencies exist, and then starts the Next.js server. PostgreSQL runs as a separate persistent container with a mounted Docker volume, ensuring that lead data remains available even if the VPS restarts or the application is redeployed.