How abzuar9658/miller-shackman-api works
Miller Schackman API is a FastAPI backend for AI-assisted real-estate lead nurturing. The main workflow receives lead activity, supports campaign enrollment and nurture orchestration, and provides administrative review and reporting; messaging, CRM sync, and listing enrichment are additional capabilities. The graph distinguishes API, application/domain, persistence, and provider/workflow layers. Edges are limited to relationships visible in excerpts, the source index, or README; unsampled internals are represented without asserted call paths.
Main entry points: start_paused_search_campaign_enrollment.py Paused-search enrollment · crm_sync_worker.py CRM sync worker · database.py PostgreSQL session · outbound_send_dispatch_worker.py Send dispatcher
Components 21
API and Workers
- HTTP API
app/interfaces/api/router.py - Inbound webhooks
app/interfaces/api/v1/webhooks.py - CRM sync worker
app/interfaces/workers/crm_sync_worker.py - Send dispatcher
app/interfaces/workers/outbound_send_dispatch_worker.py
Application and Domain
- Paused-search enrollment
app/application/use_cases/start_paused_search_campaign_enrollment.py - Lead models
app/domain/leads/__init__.py - Paused-search tracks
app/domain/campaigns/paused_search_tracks.py - Contactability policy
app/domain/compliance/contactability.py - Outbound drafting
app/domain/outbound_drafting.py - CRM sync rules
app/domain/crm_sync.py - Repository ports
app/application/ports/repositories.py - Temporal port
app/application/ports/temporal.py
Persistence
- PostgreSQL session
app/core/database.py - Enrollment repository
app/infrastructure/persistence/postgres/campaign_enrollment_repository.py - Lead repository
app/infrastructure/persistence/postgres/lead_repository.py - Workflow repository
app/infrastructure/persistence/postgres/workflow_repository.py
Provider Integrations
- Follow Up Boss
app/infrastructure/crm/follow_up_boss/client.py - StreetEasy search
app/infrastructure/listing_sources/streeteasy/client.py
Workflow and Events
- Temporal workflows
app/infrastructure/workflows/temporal/lead_nurture.py - RabbitMQ events
app/infrastructure/events/rabbitmq/publisher.py
Other components
- Admin user
Connections 18
- Admin user → HTTP API: uses
- HTTP API → Inbound webhooks: routes to
app/interfaces/api/router.py - CRM sync worker → CRM sync rules: uses rules
app/interfaces/workers/crm_sync_worker.py - CRM sync worker → Enrollment repository: uses repository
app/interfaces/workers/crm_sync_worker.py - Paused-search enrollment → Repository ports: uses ports
app/application/use_cases/start_paused_search_campaign_enrollment.py - Paused-search enrollment → Paused-search tracks: uses track rules
app/application/use_cases/start_paused_search_campaign_enrollment.py - Paused-search enrollment → Temporal port: starts workflow
app/application/use_cases/start_paused_search_campaign_enrollment.py - Enrollment repository → Paused-search enrollment: maps enrollment
app/infrastructure/persistence/postgres/campaign_enrollment_repository.py - Lead models → Contactability policy: exports policy
app/domain/leads/__init__.py - StreetEasy search → Lead models: uses lead models
app/infrastructure/listing_sources/streeteasy/client.py - Send dispatcher → Contactability policy: revalidates sends
- Send dispatcher → Outbound drafting: dispatches drafts
- Temporal workflows → Temporal port: implements workflow
- CRM sync worker → RabbitMQ events: consumes events
app/interfaces/workers/crm_sync_worker.py - Inbound webhooks → Follow Up Boss: receives CRM events
- PostgreSQL session → Repository ports: backs repositories
- Lead repository → PostgreSQL session: persists leads
- Workflow repository → PostgreSQL session: persists workflows