VectorDNS Feature Plan
Decisions captured for current and future development.
Auth & User System
| Feature |
Decision |
Priority |
| OAuth providers |
GitHub + Google |
MVP |
| Email/password + magic link |
Yes |
MVP |
| Team/org accounts |
Yes, eventually — shared watchlists, role-based access (admin/viewer) |
Future |
| User API keys |
No — Go server is internal, called only by the Next.js backend |
N/A |
Schema implications (teams)
- Future
teams table with membership + roles
saved_domains will need an optional team_id foreign key
- RLS policies will need team-aware variants
DNS & Monitoring
| Feature |
Decision |
Priority |
| Check intervals |
Daily (MVP), then hourly/daily/weekly selectable |
MVP → Near-term |
| Realtime monitoring |
Not now — possible distant future |
Deferred |
| Custom resolvers |
Fixed resolvers (Google 8.8.8.8, Cloudflare 1.1.1.1) by default; user-specified resolvers as future feature |
MVP → Future |
| Propagation checks |
Query multiple resolvers and compare results |
Near-term |
| DNSSEC validation |
Basic AD flag check (current), deep chain validation later |
MVP → Future |
Go server implications
- Scheduler needed for flexible intervals (hourly/daily/weekly per domain)
- Resolver list should be configurable, not hardcoded (prep for custom resolvers)
- Propagation endpoint: query N resolvers in parallel, return per-resolver results
Alert Channels
| Channel |
Priority |
| In-app notification feed |
MVP |
| Email (Resend) |
MVP |
| Webhooks (user-configured URL) |
Near-term |
| Slack integration |
Future |
| Discord integration |
Future |
Schema implications
notification_channels table: user_id, type (email/webhook/slack/discord), config (jsonb), enabled
- Webhook: store URL + optional secret for HMAC signing
- Slack/Discord: store webhook URL or OAuth token
Dashboard & UX
| Feature |
Decision |
Priority |
| Domain organization |
Tags (current) + folders/groups |
Near-term |
| Public sharing |
Shareable links for domain DNS snapshots |
Near-term |
| Data export |
CSV + JSON for DNS history, saved domains, notifications |
Near-term |
| Bulk operations |
Add/remove/re-check multiple domains at once |
Future |
| Search & filter |
Filter by tag, folder, record type, change status |
Near-term |
Schema implications (folders)
domain_folders table: id, user_id, name, created_at
saved_domains gets an optional folder_id foreign key
- RLS policies for folder ownership
Schema implications (public sharing)
shared_snapshots table: id, saved_domain_id, share_token (unique), dns_snapshot (jsonb), expires_at, created_at
- Public access via token — no auth required to view
Infrastructure
| Feature |
Decision |
Priority |
| Billing/paid tiers |
Freemium — free tier with limits, paid for more domains/features/intervals |
Future |
| DNS caching |
Redis — external cache for TTL-based DNS result caching |
Near-term |
| Self-hosting |
Go server only — provide Dockerfile + docker-compose for the DNS API |
Near-term |
| Next.js hosting |
Vercel only, not self-hostable |
— |
Freemium tier structure (draft)
- Free: 5 monitored domains, daily checks, in-app + email alerts
- Pro: 50 domains, hourly checks, webhooks, folders, export
- Team: everything in Pro + team accounts, shared watchlists
Go server additions needed
- Redis client (go-redis) for caching layer
- Cache middleware: check Redis before querying DNS, store with TTL
- docker-compose.yml with Go server + Redis for self-hosting
- Rate limiting per API key / tier (when billing is added)
Summary of future schema additions
These tables will be needed as features are built:
| Table |
For |
teams |
Team/org accounts |
team_members |
Membership + roles |
domain_folders |
Folder organization |
shared_snapshots |
Public shareable links |
notification_channels |
Webhook/Slack/Discord config |
subscriptions |
Billing tier tracking |