How project-butler/butler works
Butler is a rental-management service for landlords, tenants, and operators, delivered through one role- and surface-aware frontend and an Express/Prisma API. The principal workflow is a landlord managing properties, units, contracts, and related records; tenants can access their contracts, while operators administer users and operations. Distinct supporting capabilities include invitations, document storage, community features, and dispute guidance. The README establishes the frontend/API relationship and major product capabilities; sampled controllers show selected API-to-service calls. Other feature-level wiring is not asserted where source was unsampled.
Main entry points: App.jsx Role-aware frontend · app.js Express API · disputes/controller.js Dispute guidance · community/controller.js Resident community
Components 23
Role-based client
- Role-aware frontend
apps/butler/src/App.jsx - Landlord screens
apps/butler/src/landlord/web/LandlordWebRoutes.jsx - Tenant screens
apps/butler/src/tenant/TenantRoutes.jsx - Admin screens
apps/butler/src/admin/AdminRoutes.jsx - Invitation flow
apps/butler/src/invite/InviteRoutes.jsx
Rental operations
- Property management
apps/api/src/domains/properties/service.js - Lease contracts
apps/api/src/domains/contracts/service.js - Building lookup
apps/api/src/domains/complexes/service.js - Ownership verification
apps/api/src/domains/ownershipVerifications/service.js - Document handling
apps/api/src/domains/documents/service.js - Tenant invitations
apps/api/src/domains/tenantInvitations/service.js
Resident support
- Resident community
apps/api/src/domains/community/controller.js - Dispute guidance
apps/api/src/domains/disputes/controller.js - Reference retrieval
apps/api/src/domains/disputes/retriever.js - Counselor chatbot
apps/api/src/domains/disputes/chatbot.js
Platform operations
- Operator services
apps/api/src/domains/admin/service.js - Activity history
apps/api/src/domains/activities/service.js
API foundation
- Express API
apps/api/src/app.js - PostgreSQL
apps/api/src/platform/prismaClient.js - Response envelope
apps/api/src/platform/respond.js
Other components
- Landlords
- Tenants
- Operators
Connections 26
- Landlords → Role-aware frontend: use
README.md - Tenants → Role-aware frontend: use
README.md - Operators → Role-aware frontend: use
README.md - Role-aware frontend → Landlord screens: routes by role
apps/butler/src/App.jsx - Role-aware frontend → Tenant screens: routes by role
apps/butler/src/App.jsx - Role-aware frontend → Admin screens: routes by role
apps/butler/src/App.jsx - Role-aware frontend → Invitation flow: routes invitations
apps/butler/src/App.jsx - Role-aware frontend → Express API: calls API
README.md - Landlord screens → Property management: requests
- Tenant screens → Lease contracts: requests
- Admin screens → Operator services: requests
- Invitation flow → Tenant invitations: requests
- Express API → Property management: routes to
- Express API → Lease contracts: routes to
- Express API → Document handling: routes to
- Express API → Resident community: routes to
- Express API → Dispute guidance: routes to
- Express API → Operator services: routes to
- Resident community → Reference retrieval: loads news
apps/api/src/domains/community/controller.js - Dispute guidance → Reference retrieval: retrieves references
apps/api/src/domains/disputes/controller.js - Dispute guidance → Counselor chatbot: asks counselor
apps/api/src/domains/disputes/controller.js - Dispute guidance → Response envelope: sends results
apps/api/src/domains/disputes/controller.js - Resident community → Response envelope: sends results
apps/api/src/domains/community/controller.js - Operator services → PostgreSQL: reads and writes
- Property management → PostgreSQL: reads and writes
- Lease contracts → PostgreSQL: reads and writes