A CRM that automates the full property appraisal cycle — from client request submission to report delivery — replacing manual phone/email coordination between clients, inspectors, and appraisers with a single web platform.
A request moves through a linear lifecycle, with each stage owned by a dedicated service:
New → In Progress → Inspection Scheduled → Inspection Completed → Appraisal → Report Sent → Closed
Roles: Client · Inspector · Appraiser · Administrator
Event-driven microservices with Database-per-Service: each service owns its PostgreSQL and Redis, communicates through Apache Kafka domain events, and publishes them via a transactional outbox. Consumers are idempotent (Redis-based deduplication). Authentication and RBAC are handled by Keycloak (JWT).
| Repository | Description |
|---|---|
| request-service | Appraisal request lifecycle — CRUD, linear state machine, Kafka events |
| inspect-service | Property inspection stage — scheduling, results, photo storage (S3) |
| review-service | Appraiser review stage — valuation report drafting and approval |
| notification-service | Consumes domain events, delivers email / SMS / in-app / push notifications |
| frontend | React 19 + TypeScript monorepo — client portal and back-office apps |
| infra | Shared infrastructure — Kafka, Keycloak (custom themes), Kafka UI |
Go · PostgreSQL · Redis · Apache Kafka · Keycloak · TypeScript · React · S3 · Docker Compose · Caddy
All repositories are licensed under Apache 2.0.