Loan Management System¶
A multi-tenant loan management system for loan origination, servicing, collections, and accounting. Built with Django and React, it supports multiple lending program types (installment loans, leases, lines of credit) through a plugin-based architecture, with double-entry ledger accounting, portfolio management, regulatory compliance, and automated workflows.
Key Capabilities¶
- Loan Origination --- Borrower onboarding, loan applications, underwriting, approval workflows
- Loan Servicing --- Amortization, payment processing, fee management, modifications, forbearance, deferments
- Collections --- Delinquency tracking, collection queues, dunning sequences, promise-to-pay
- Case Management --- Support cases, supercases (bulk), campaigns, borrower interactions
- Financial Accounting --- Double-entry general ledger with journal entries
- Portfolio Management --- Portfolio grouping, snapshots, investor assignments, loan tape generation
- Compliance --- Regulatory rule engine, compliance monitors, credit reporting
- Communications --- Multi-channel templated messaging (email, SMS, letter, in-app)
- Document Management --- Upload, generation, storage (S3/local providers)
- Borrower Self-Service Portal --- Loan viewing, payments, autopay, document access, support, hardship applications
Tech Stack¶
| Layer | Technology |
|---|---|
| Language | Python 3.13+ (fully typed, mypy strict + django-stubs) |
| Framework | Django 5.x |
| API | django-ninja-extra (async class-based controllers) |
| Database | PostgreSQL 16+ via psycopg 3 |
| Multi-tenancy | django-pgschemas (schema-per-tenant) |
| Auth | django-allauth (headless, session-based) |
| Authorization | django-guardian (object-level permissions) |
| Audit | django-pghistory (PostgreSQL trigger-based) |
| Money | django-money (MoneyField) |
| Task queue | Celery + Redis (Canvas for workflows) |
| Admin Frontend | React 18+ / TypeScript / react-admin / Vite |
| Borrower Portal | React 18+ / TypeScript / MUI / React Query / Vite |
| Testing | pytest-django (backend), Vitest (frontend) |
| Documentation | MkDocs with Material theme |
| Deployment | Render.com |
Project Structure¶
lms/
├── docs/ # MkDocs documentation project
│ ├── mkdocs.yml
│ ├── pyproject.toml
│ └── src/
├── backend/
│ ├── config/ # Django settings, urls, asgi, celery
│ │ └── settings/ # base.py, development.py, production.py, test.py
│ ├── apps/ # 22+ Django apps + subapps
│ │ ├── tenants/ # Public schema: tenant + domain models
│ │ ├── main/ # Main schema: LMS home (admin, allauth)
│ │ ├── users/ # Main + Tenant schemas: custom user model
│ │ ├── auth/ # Authentication controllers (allauth wrapper)
│ │ ├── tasks/ # Attachable task management
│ │ ├── notes/ # Attachable notes
│ │ ├── webhooks/ # Webhook subscriptions + event delivery
│ │ ├── contacts/ # Addresses, emails, phones (generic FK)
│ │ ├── borrowers/ # Borrower profiles + loan parties
│ │ ├── programs/ # Lending programs + loan products
│ │ ├── loans/ # Loan records + lifecycle
│ │ ├── amortization/ # Amortization schedules
│ │ ├── servicing/ # Modifications, forbearance, deferments, payoff, suspense
│ │ ├── payments/ # Payment processing (Authorize.Net, Stripe)
│ │ ├── fees/ # Fee schedules + management
│ │ ├── collateral/ # Collateral items, liens, valuations
│ │ ├── collections/ # Delinquency, queues, dunning, actions
│ │ ├── ledger/ # Double-entry general ledger
│ │ ├── disbursements/ # Loan funding
│ │ ├── documents/ # Document storage (S3, local)
│ │ ├── portfolio/ # Portfolio management + snapshots
│ │ ├── reporting/ # Report generators
│ │ ├── compliance/ # Regulatory compliance rule engines
│ │ ├── communications/ # Templated messaging (SendGrid, SMTP, Twilio)
│ │ ├── cases/ # Case management, supercases, campaigns
│ │ ├── operations/ # Event-sourced loan replay
│ │ ├── providers/ # Provider config + registry
│ │ └── portal/ # Borrower portal backend API
│ ├── common/ # Shared utilities (no models, no migrations)
│ └── tests/
├── frontend/
│ ├── admin/ # Admin dashboard (react-admin)
│ │ └── src/
│ │ ├── admin/ # 50+ react-admin resource screens
│ │ ├── providers/ # Data provider, auth provider, i18n
│ │ └── components/ # Shared components
│ └── borrower/ # Borrower self-service portal
│ └── src/
│ ├── pages/ # 17 pages
│ ├── hooks/ # React Query hooks
│ ├── api/ # HTTP client + portal API
│ └── components/ # 25+ components
├── docker-compose.yml
├── render.yaml
└── spec.md
Quick Start¶
Backend¶
cd backend
uv sync --extra dev # Install dependencies + dev tools
cp .env.example .env # Configure environment
uv run python manage.py migrateschema -as # Run migrations (all schemas)
uv run python manage.py runserver # Dev server
Frontend (Admin Dashboard)¶
Frontend (Borrower Portal)¶
Documentation¶
cd docs
uv sync # Install docs dependencies
uv run mkdocs serve # Dev server at http://127.0.0.1:8000/
Running Tests¶
# Backend
cd backend
uv run pytest # All backend tests (1200+)
uv run pytest apps/loans/ # App-specific tests
uv run ruff check . # Lint
uv run mypy . # Type check
# Frontend (Admin)
cd frontend/admin
npm run test # All frontend tests (360+)
npm run lint # ESLint
# Frontend (Borrower Portal)
cd frontend/borrower
npm run test # Portal tests
npm run lint # ESLint
Documentation Sections¶
- Getting Started --- Installation, configuration, quick start guide, project structure
- Architecture --- System design, multi-tenancy, layered architecture, provider pattern, async patterns
- Domain Guide --- Business logic by domain: loans, payments, fees, servicing, collections, ledger, and more
- API Reference --- Complete REST API documentation for all 400+ endpoints
- Admin Dashboard --- react-admin frontend: data provider, auth, resource screens, components, testing
- Borrower Portal --- Borrower self-service: pages, API hooks, components, branding, authentication
- Security --- Tenant isolation, authentication, data protection, audit trail, input validation
- Internationalization --- Backend/frontend i18n, localization, adding languages
- Operations --- Deployment, Docker, Celery, database management, monitoring
- Development --- Contributing, testing guide, code conventions, adding apps and providers
- Reference --- Model reference, choices/enums, chart of accounts, webhook events, Celery Beat schedule