# 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 |