mirror of
https://github.com/DevVoxel/VectorDNS.git
synced 2026-02-27 05:47:38 +00:00
d91b94d648fa7c59aee72bc8c74b3e4cb966bb9f
VectorDNS
DNS lookup, WHOIS, and domain monitoring tool. Search nameservers, check domain availability, and track DNS record changes over time.
Features
- DNS Record Lookup — Query A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, and SRV records for any domain
- WHOIS Lookup — View registrar, registration/expiration dates, nameservers, and domain status
- Domain Availability — Check if a domain is registered or available via IANA RDAP
- Domain Monitoring — Save domains to a dashboard, track DNS changes over time, get alerts when records change
- Change Detection — Daily automated re-checks with visual diffs showing what changed
- Notifications — In-app notification feed + email alerts via Resend
- Dark Mode — Dark theme by default with light mode toggle
Tech Stack
- Framework: Next.js 16 (App Router) + React 19
- Language: TypeScript (strict mode)
- Styling: Tailwind CSS v4 + shadcn/ui
- Auth & Database: Supabase (auth, Postgres, RLS, realtime)
- DNS: Tangerine (DNS-over-HTTPS via Cloudflare/Google)
- WHOIS: whoiser (RDAP-based, free)
- Email: Resend
- DNS API: Go microservice on VPS (
miekg/dns— direct UDP/TCP resolution, DNSSEC, propagation checks) - Deployment: Vercel (frontend) + VPS (Go DNS API)
- Package Manager: Bun
Getting Started
Prerequisites
Setup
# Clone and install
git clone https://github.com/DevVoxel/VectorDNS.git
cd vectordns
bun install
# Configure environment
cp .env.local.example .env.local
# Fill in your Supabase URL, anon key, and other values
# Run database migrations
# (see supabase/migrations/ once they exist)
# Start dev server
bun dev
Open http://localhost:3000 to see the app.
Environment Variables
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Yes | Your Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Yes | Supabase anonymous/public key |
SUPABASE_SERVICE_ROLE_KEY |
Yes | Service role key (for cron jobs) |
CRON_SECRET |
Yes | Secret to authenticate Vercel cron requests |
RESEND_API_KEY |
No | Resend API key for email notifications |
Architecture
VectorDNS uses a hybrid architecture: Next.js on Vercel for the frontend, and a Go microservice on a VPS for DNS resolution and monitoring. See docs/architecture.md for details and docs/api-spec.md for the Go API spec.
Project Structure
app/
page.tsx # Landing page with search
layout.tsx # Root layout (theme, fonts, metadata)
globals.css # Tailwind v4 + shadcn/ui CSS vars
lookup/[domain]/page.tsx # DNS results page (public)
auth/ # Login, signup, OAuth callback
dashboard/ # Authenticated domain tracking
api/
dns/lookup/ # DNS record lookup endpoint
whois/lookup/ # WHOIS lookup endpoint
availability/check/ # Domain availability endpoint
domains/ # Saved domains CRUD
cron/check-domains/ # Daily re-check (Vercel cron)
notifications/ # Notification endpoints
components/
ui/ # shadcn/ui components
layout/ # Header, footer, sidebar
lookup/ # Search form, record displays
dashboard/ # Domain list, detail, diff views
lib/
dns/ # Tangerine DNS service
whois/ # whoiser WHOIS service
availability/ # RDAP availability service
monitoring/ # Change detection + snapshot logic
notifications/ # Notification service
email/ # Resend email functions
supabase/ # Server/client/middleware clients
auth/ # Auth server actions
types/ # Shared TypeScript types
supabase/
migrations/ # SQL schema + RLS policies
Current Status
Done
- Project scaffolding (Next.js 16, Tailwind v4, TypeScript)
- shadcn/ui setup with dark mode (next-themes)
- Landing page with domain search form
TODO
See ROADMAP.md for the full phased build plan. Next up:
- TypeScript type definitions (
lib/types/) - Supabase schema + migrations + RLS
- DNS / WHOIS / availability service layers
- API routes for public lookups
- Supabase auth (GitHub, Google, email, magic link)
- DNS results page (
/lookup/[domain]) - Dashboard with domain tracking
- Change detection + daily cron
- Notifications (in-app + email)
Scripts
bun dev # Start development server
bun run build # Production build
bun start # Start production server
bun lint # Run ESLint
bun test # Run integration tests
License
GPL-2.0
Languages
TypeScript
95.7%
CSS
3.9%
JavaScript
0.4%