Files
VectorDNS/README.md

142 lines
5.0 KiB
Markdown

# 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`](https://github.com/miekg/dns) — direct UDP/TCP resolution, DNSSEC, propagation checks)
- **Deployment**: Vercel (frontend) + VPS (Go DNS API)
- **Package Manager**: Bun
## Getting Started
### Prerequisites
- [Bun](https://bun.sh) >= 1.3
- A [Supabase](https://supabase.com) project (free tier works)
- (Optional) [Resend](https://resend.com) API key for email alerts
### Setup
```bash
# 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](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](./docs/architecture.md) for details and [docs/api-spec.md](./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
- [x] Project scaffolding (Next.js 16, Tailwind v4, TypeScript)
- [x] shadcn/ui setup with dark mode (next-themes)
- [x] Landing page with domain search form
### TODO
See [ROADMAP.md](./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
```bash
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