π Domainstack - Domain Intelligence Tool
Domainstack is an all-in-one app for exploring domain names. Search any domain (e.g., github.com) and get instant insights including WHOIS/RDAP lookups, DNS records, SSL certificates, HTTP headers, hosting details, geolocation, and SEO signals.
- Instant domain reports: Registration, DNS, certificates, HTTP headers, hosting & email, and geolocation.
- SEO insights: Extract titles, meta tags, social previews, canonical data, and
robots.txtsignals. - Screenshots & favicons: Server-side screenshots and favicon extraction, cached in Postgres with Vercel Blob storage.
- Fast, private, no sign-up required for reports: Live fetches with intelligent multi-layer caching.
- Domain tracking dashboard: Sign in with GitHub to track domains you own, verify ownership, and receive expiration alerts.
- Pro tier subscriptions: Upgrade via Polar for expanded domain tracking limits (50 vs 5 domains).
- Email notifications: Configurable alerts for domain expiration, SSL certificate expiration, subscription lifecycle, and verification status changes.
- Reliable data pipeline: Postgres persistence with per-table TTLs (Drizzle) and event-driven background revalidation (Inngest).
- Advanced dashboard: Domain filtering by status/health/TLD, URL-persisted filters, bulk archive/delete actions, and sortable table/grid views.
- Dynamic configuration: Vercel Edge Config for runtime-adjustable domain suggestions and tier limits without redeployment.
- Next.js 16 (App Router) + React 19 + TypeScript
- Tailwind CSS v4 + shadcn/ui components
- tRPC API with TanStack Query for data fetching and optimistic updates
- TanStack Table for sortable dashboard table view
- Vercel Postgres + Drizzle ORM with connection pooling
- Better Auth for authentication with GitHub OAuth
- Polar for subscription payments and customer portal (Pro tier)
- Inngest for event-driven background jobs (revalidation, expiry checks, domain re-verification)
- Resend + React Email for transactional email notifications
- Vercel Edge Config for runtime configuration (domain suggestions, tier limits)
- Vercel Blob for favicon/screenshot storage with Postgres metadata caching
- rdapper for RDAP lookups with WHOIS fallback
- Puppeteer (with
@sparticuz/chromiumon Vercel) for server-side screenshots - Mapbox for IP geolocation maps
- PostHog for analytics and error tracking with sourcemap uploads and reverse proxy
- OpenTelemetry via
@vercel/otelfor distributed tracing - Vitest with React Testing Library and Biome for lint/format
git clone https://github.com/jakejarvis/domainstack.io.git
cd domainstack.io
pnpm installCreate .env.local and populate required variables:
cp .env.example .env.localpnpm db:generate # generate SQL from schema
pnpm db:migrate # apply migrations to local Postgres
pnpm db:seed # seed database (if needed)The dev script uses concurrently to automatically start all local services and the Next.js dev server together:
pnpm devThis single command boots:
- Postgres on
localhost:5432 - Inngest dev server on
http://localhost:8288 - Next.js dev server on
http://localhost:3000
Open http://localhost:3000. Press Ctrl+C to stop all services at once.
Note
On Linux, if host.docker.internal isn't available, add extra_hosts to the Inngest service in docker-compose.yml:
extra_hosts: ["host.docker.internal:host-gateway"]pnpm dev # start all local services (Docker) + Next.js dev server
pnpm build # compile production bundle
pnpm start # serve compiled output for smoke tests
pnpm lint # Biome lint/format checks
pnpm format # apply Biome formatting
pnpm typecheck # tsc --noEmit
pnpm test # Vitest (watch mode)
pnpm test:run # Vitest (single run)
pnpm test:ui # Vitest UI
pnpm test:coverage # Vitest with coverage report
# Drizzle
pnpm db:generate # generate SQL migrations from schema
pnpm db:push # push the current schema to the database
pnpm db:migrate # apply migrations to the database
pnpm db:studio # open Drizzle Studio
pnpm db:seed # run seed script (scripts/db/seed.ts)Toybrick by Ary Prasetyo from Noun Project (CC BY 3.0)
