AI-powered domain management app that connects to Cloudflare and Porkbun APIs to fetch and manage DNS records.
- Multi-Provider Support: Connect to both Cloudflare and Porkbun
- Unified Dashboard: View all your domains from multiple providers in one place
- DNS Record Management: Create, update, and delete DNS records
- Natural Language Interface: Use Gemini AI to manage domains with natural language commands
- Secure Credential Storage: API keys stored locally in SQLite database
- Node.js 18 or higher
- npm or yarn
- Clone the repository:
git clone <repository-url>
cd domain-manager- Install dependencies:
npm install- Copy the environment file:
cp .env.example .env- (Optional) Add your API keys to
.envor configure them through the Settings page.
npm run devThis starts both the backend server (port 3001) and frontend dev server (port 5173).
npm run build
npm start- Go to Cloudflare Dashboard
- Create an API token with the following permissions:
- Zone:Zone:Read
- Zone:DNS:Edit
- Enter the token in Settings
- Go to Porkbun API Settings
- Enable API access and generate API keys
- Enter both the API Key and Secret Key in Settings
- Go to Google AI Studio
- Create an API key
- Enter the key in Settings to enable natural language commands
The dashboard displays all your domains from connected providers. Click on a domain to view and manage its DNS records.
When Gemini is configured, you can use natural language commands like:
- "List all my domains"
- "Show DNS records for example.com"
- "Add an A record for api.example.com pointing to 192.168.1.1"
- "Delete the TXT record for _dmarc.example.com"
- "Create an MX record with priority 10"
- Click on a domain in the dashboard
- View existing records
- Click "Add Record" to create a new DNS record
- Click "Delete" on any record to remove it
GET /api/domains- List all domains from all providersGET /api/domains/:provider- List domains from specific providerGET /api/domains/:provider/:domainId/records- List DNS recordsPOST /api/domains/:provider/:domainId/records- Create DNS recordPUT /api/domains/:provider/:domainId/records/:recordId- Update DNS recordDELETE /api/domains/:provider/:domainId/records/:recordId- Delete DNS record
GET /api/settings/credentials- Get credentials statusPOST /api/settings/credentials/cloudflare- Set Cloudflare credentialsPOST /api/settings/credentials/porkbun- Set Porkbun credentialsPOST /api/settings/credentials/gemini- Set Gemini API keyDELETE /api/settings/credentials/:provider- Remove credentials
POST /api/ai/command- Execute natural language commandPOST /api/ai/suggest- Get DNS record suggestionsGET /api/ai/history- Get command history
- Backend: Node.js, Express, TypeScript
- Frontend: React, TypeScript, Tailwind CSS, shadcn/ui
- Database: SQLite (better-sqlite3)
- AI: Google Gemini 2.5 Flash
- APIs: Cloudflare API v4, Porkbun API v3
domain-manager/
├── src/
│ ├── server/
│ │ ├── index.ts # Express server entry point
│ │ ├── types/ # TypeScript types
│ │ ├── services/ # Business logic
│ │ │ ├── cloudflare.ts # Cloudflare API integration
│ │ │ ├── porkbun.ts # Porkbun API integration
│ │ │ ├── ai.ts # Gemini AI service
│ │ │ ├── database.ts # SQLite database
│ │ │ └── domainManager.ts # Unified domain manager
│ │ └── routes/ # API routes
│ └── client/
│ ├── main.tsx # React entry point
│ ├── App.tsx # Main app component
│ ├── lib/ # Utilities and API client
│ ├── components/ # React components
│ │ └── ui/ # shadcn/ui components
│ └── pages/ # Page components
├── public/ # Static assets
├── package.json
└── README.md
- API credentials are stored locally in an SQLite database
- The database file (
domain-manager.db) is gitignored - Never commit
.envfiles or API keys to version control - Use environment variables for production deployments
MIT