A white-label SaaS platform for domain verification through DNS TXT records or HTML file uploads. Built with TypeScript, React, Express, and PostgreSQL.
- π Secure API Key Management - Bcrypt-hashed keys, visible only once at creation
- π Dual Verification Methods - DNS TXT records and HTML file upload
- π¨ White-Label Ready - Fully customizable branding and configuration
- π Webhook Support - Real-time event notifications
- π Organization Management - Multi-tenant architecture
- π Portable - Deploy anywhere with Docker or cloud platforms
- π Flexible Authentication - Works with any OIDC provider (Google, Auth0, Okta, Azure AD, etc.)
- Clone the repository
git clone <your-repo-url>
cd domain-verification-platform- Install dependencies
npm install- Set up environment variables
cp .env.example .env
# Edit .env with your configuration- Run database migrations
npm run db:push- Start development server
npm run devThe application will be available at http://localhost:5000
# Using Docker Compose (includes PostgreSQL)
docker-compose up -d
# Or build and run standalone
docker build -t domain-verify .
docker run -p 5000:5000 --env-file .env domain-verify# Application
APP_NAME="Your Brand Name"
APP_URL=https://your-domain.com
SESSION_SECRET=your-random-secret-key-here
# Database
DATABASE_URL=postgresql://user:password@host:5432/dbname
# OIDC Authentication (any provider)
OIDC_ISSUER_URL=https://accounts.google.com
OIDC_CLIENT_ID=your-client-id
OIDC_CLIENT_SECRET=your-client-secret# Customize colors, logos, and company info
BRAND_PRIMARY_COLOR=#6366f1
BRAND_ACCENT_COLOR=#8b5cf6
COMPANY_NAME="Your Company"
LOGO_URL=https://your-cdn.com/logo.png
LOGO_DARK_URL=https://your-cdn.com/logo-dark.pngSee .env.example for all available options.
The platform supports any OIDC-compatible authentication provider:
- Create OAuth 2.0 credentials in Google Cloud Console
- Set redirect URI:
https://your-domain.com/api/callback - Configure:
OIDC_ISSUER_URL=https://accounts.google.com
OIDC_CLIENT_ID=your-id.apps.googleusercontent.com
OIDC_CLIENT_SECRET=your-secret- Create a Regular Web Application in Auth0
- Set callback URL:
https://your-domain.com/api/callback - Configure:
OIDC_ISSUER_URL=https://YOUR_DOMAIN.auth0.com/
OIDC_CLIENT_ID=your-client-id
OIDC_CLIENT_SECRET=your-client-secretSee DEPLOYMENT.md for Okta, Azure AD, and other providers.
- Frontend: React 18, TypeScript, TailwindCSS, shadcn/ui
- Backend: Express.js, Node.js
- Database: PostgreSQL with Drizzle ORM
- Authentication: Passport.js with OIDC strategy
- Deployment: Docker, Vercel, Railway, Render, AWS, GCP, Azure
βββ client/ # React frontend
β βββ src/
β β βββ components/ # UI components
β β βββ pages/ # Page components
β β βββ hooks/ # Custom hooks
β β βββ lib/ # Utilities
βββ server/ # Express backend
β βββ routes.ts # API routes
β βββ auth.ts # Authentication
β βββ storage.ts # Data layer
β βββ config.ts # Configuration
βββ shared/ # Shared types
β βββ schema.ts # Database schema
βββ Dockerfile # Docker configuration
All API requests require an API key in the X-API-Key header:
curl -H "X-API-Key: your-api-key" https://your-api.com/api/v1/verificationsPOST /api/v1/verifications
Content-Type: application/json
{
"domain": "example.com",
"method": "dns" | "file"
}POST /api/v1/verifications/{id}/checkGET /api/v1/verificationsConfigure webhooks to receive real-time verification events:
{
"event": "verification.completed",
"data": {
"id": "...",
"domain": "example.com",
"status": "verified"
}
}- Docker - Containerized deployment with docker-compose
- Vercel - Serverless deployment (see DEPLOYMENT.md)
- Railway - One-click deploy with managed PostgreSQL
- Render - Auto-deploy from Git with managed database
- AWS/GCP/Azure - Enterprise cloud deployment
See DEPLOYMENT.md for detailed platform-specific instructions.
- Set strong
SESSION_SECRET(32+ characters) - Enable HTTPS/SSL
- Configure managed PostgreSQL
- Set up error tracking (Sentry, etc.)
- Configure logging and monitoring
- Set up automated backups
- Test domain verification functionality
- API keys hashed with bcrypt (10 rounds)
- Keys shown only once at creation
- Session management with PostgreSQL store
- HTTPS-only cookies in production
- OIDC authentication flow
- Organization-level isolation
Core tables:
users- User accounts with OIDC claimsorganizations- Customer organizationsapi_keys- Hashed API keys with prefix/suffixverifications- Domain verification recordswebhooks- Webhook endpoints per organizationsessions- User session storage
Run migrations:
npm run db:push # Apply schema changes
npm run db:push --force # Force sync (use carefully)npm run dev # Start development server
npm run build # Build for production
npm start # Run production build
npm run db:push # Push schema to database- TypeScript for type safety
- React hooks and functional components
- TailwindCSS for styling
- shadcn/ui component library
MIT License - Feel free to customize and deploy anywhere!
- Documentation: DEPLOYMENT.md
- Issues: Create an issue in this repository
- Email: Configure via
SUPPORT_EMAILenvironment variable
Built with β€οΈ for developers who need reliable domain verification.