A domain availability comparison tool that lets you search once and compare prices across multiple registrars instantly.
Enter a domain name and Domainak checks availability and pricing across 6 major registrars simultaneously:
- GoDaddy
- Namecheap
- Porkbun
- Dynadot
- Hostinger
- Spaceship
Results are displayed with filtering (available only) and sorting (by price or name) options.
Frontend
- React 19 + TypeScript
- Vite
- React Router
- Motion (animations)
Backend
- Express 5 + TypeScript
- Puppeteer Real Browser (web scraping with anti-bot bypass)
- Rate limiting (15 req/min per IP)
domainak/
├── frontend/ # React SPA
│ └── src/
│ ├── pages/ # Landing + Results pages
│ └── components/
├── backend/ # Express API
│ └── src/
│ ├── controllers/
│ ├── services/
│ │ └── registrars/ # Scraper for each registrar
│ └── routes/
Registrars block cloud servers, so the hosted site at domainak.netlify.app is a staged demo. For real prices, run it on your machine:
git clone https://github.com/Json604/domainak && cd domainak && npm startOn Windows PowerShell (which doesn't take &&, and blocks npm.ps1 by default):
git clone https://github.com/Json604/domainak; cd domainak; npm.cmd startNext time, just run npm start (PowerShell: npm.cmd start) inside the domainak folder. Run git pull first to get updates; new dependencies are installed automatically.
That installs everything (on the first run, and again after updates), builds, starts the app and opens http://localhost:8000. You need Git, Node.js 20.19+ or 22.12+ and Google Chrome. On Linux without a desktop, also install xvfb (sudo apt install xvfb) so Chrome has a virtual screen. While Domainak runs, a real Chrome sits minimized in your Dock/taskbar: each search happens there in a background window, so nothing pops up or steals focus. The results page shows the search live as each registrar answers.
npm start -- --no-open skips opening the browser. Port 8000 taken? PORT=8001 npm start (PowerShell: $env:PORT=8001; npm.cmd start). The server only listens on this machine, and Google Analytics is only on the hosted demo: your searches stay on your computer.
cd backend && npm install && npm run dev # API on http://localhost:8000
cd frontend && npm install && npm run dev # UI on http://localhost:5173VITE_APP_MODE switches the frontend between live (real backend, the default) and demo (the staged story, used in production via frontend/.env.production).
GET /search?q={domain}&country={CC}
Search for domain availability across all registrars. country (optional, ISO code like IN) picks Hostinger's site for that country so its price is local; GoDaddy picks its country site from your IP by itself. The other four registrars price in USD worldwide. The results page sends the country it reads from your browser's timezone.
Example:
GET /search?q=example.com
Response (result holds one settled promise per registrar):
{
"success": true,
"data": {
"domain": "example.com",
"result": [
{
"status": "fulfilled",
"value": {
"registrar": "Spaceship",
"status": "Available",
"price": "$8.88",
"amount": 8.88,
"currency": "USD"
}
}
]
}
}price is what the registrar displays; amount + currency (ISO 4217) are the same price in machine-readable form.
GET /rates
Daily exchange rates (units per 1 USD, cached 12h) that the results page uses to show every price in the visitor's currency, guessed from the browser's timezone and language and changeable with the picker. Rates by Exchange Rate API.
GET /search/stream?q={domain}
The same search as Server-Sent Events: progress events (queued, stage, per-registrar phase and result) as it runs, then done with the full result or failure. The results page uses this for the live story.
Frontend
npm run dev- Start dev servernpm run build- Production buildnpm run lint- Run ESLint
Backend
npm run dev- Start with hot reloadnpm run start- Production mode
Repo root
npm start- Install, build and run everything locally
MIT