# 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 - **Deployment**: Vercel - **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 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 | ## 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