AI-powered communication orchestration for real estate sales.
EstateCraft evolves traditional CRM outreach into an enterprise-ready platform with provider-based voice and SMS automation. Dial is the first production voice provider; Twilio and others can be added without scattering vendor code.
- Lead scoring with automatic voice call triggers
- Provider-based architecture (
IVoiceProvider) - Dial integration for outbound AI voice + SMS fallback
- Call status tracking, retry logic, communication timeline
- Voice activity dashboard and voice rules configuration UI
- 100 leads, 20 agents, properties — Summit Ridge Realty sample data
- Node.js >= 18
- Docker & Docker Compose
- npm >= 9
git clone <repo-url>
cd estatecraft
cp .env.example .env
npm install
npm run docker:up
npm run db:migrate
npm run db:seed# API + Dashboard (login via svc-api /api/auth — no separate auth process required)
npm run dev
# Optional: standalone auth service (deprecated; same Prisma User table)
npm run dev:auth| Service | URL |
|---|---|
| Dashboard | http://localhost:5173 |
| API (includes auth) | http://localhost:3000 |
| Auth (optional/legacy) | http://localhost:3001 |
Auth is database-backed and multi-tenant. Workspaces live at {slug}.estatecraft.io. Roles: ADMIN / MANAGER see all leads in their tenant; AGENT sees only assigned leads. Pro/Enterprise require SSO. Each tenant brings their own Dial account.
| Tenant slug | Region / plan | Role | Password | |
|---|---|---|---|---|
summit-ridge |
US / Starter | Admin | admin@summitridge.demo | password |
summit-ridge |
US / Starter | Manager | manager@summitridge.demo | password |
summit-ridge |
US / Starter | Agent | agent1@summitridge.demo | password |
coastal-homes |
EU / Pro (SSO) | Admin | admin@coastalhomes.demo | SSO (or TENANT_SSO_PASSWORD_BYPASS=true) |
See .env.example for the full list. Key variables:
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
local Postgres | PostgreSQL connection |
JWT_SECRET |
dev secret | Must match across api + auth |
VOICE_PROVIDER |
mock |
mock, dial, or twilio |
DIAL_API_KEY |
— | Required when VOICE_PROVIDER=dial |
SKIP_INFRA |
false |
Skip RabbitMQ/Redis (use on Vercel) |
Never commit secrets. Use .env locally and Vercel environment variables in production.
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel
# Set production env vars in Vercel dashboard:
# DATABASE_URL, JWT_SECRET, VOICE_PROVIDER, CORS_ORIGINS, SKIP_INFRA=trueBuild command (configured in vercel.json): npm run build:vercel
Provision a PostgreSQL database (Neon, Supabase, or Vercel Postgres) and set DATABASE_URL. Run migrations:
npm run db:migrate # prisma migrate deploy (versioned)
npm run db:seedIf you previously used prisma db push on an existing database, baseline the initial migration once:
cd infra-migrations && npx prisma migrate resolve --applied 20260810100000_init| Doc | Description |
|---|---|
| docs/ARCHITECTURE.md | Architecture diagrams |
| docs/SAAS_DEPLOYMENT_STRATEGY.md | Multi-tenant SaaS roadmap |
| docs/DIAL_INTEGRATION.md | Dial setup guide |
| docs/API.md | REST API reference |
| docs/DEMO_SCRIPT.md | 5-minute prospect walkthrough |
| docs/TEST_STRATEGY.md | Dummy data + mock + Dial live call testing |
| docs/FUTURE_ENHANCEMENTS.md | Roadmap |
estatecraft/
├── api/ # Vercel serverless entry
├── webapp-dashboard/ # React dashboard
├── svc-api/ # API gateway
├── svc-auth/ # Authentication
├── svc-engagement/ # Communication orchestrator + Dial provider
├── svc-qualifier/ # Lead scoring engine
├── lib-shared/ # Shared types and events
├── infra-migrations/ # Prisma schema + seed
└── docs/
EstateCraft is an open platform for AI-assisted real estate outreach: lead scoring, outbound voice calls, SMS fallback, and a live dashboard.
Quick local try
cp .env.example .env && pnpm installpnpm run docker:up && pnpm run db:migrate && pnpm run db:seedpnpm run dev→ http://localhost:5173
Demo login:admin@summitridge.demo/password
Fork the repo, run the Summit Ridge demo data, swap VOICE_PROVIDER=mock
for Dial when you’re ready for live calls. Issues and PRs welcome.
MIT