Veci CRM
A production multi-tenant CRM built from scratch for Veci Technologies — Django 5, domain-driven monolith across 20+ bounded contexts, Celery workers, WebSocket support via Daphne, live in production.
Role
Freelance Software Engineer
Capacity
Solo build · ongoing maintenance
Year
2024–present
Stack size
17 tools
Overview
Veci CRM is a full-featured, multi-tenant customer relationship management platform designed and built from scratch as a freelance engagement for Veci Technologies, which I continue to maintain. The platform is built on Django 5 as a domain-driven modular monolith inside a uv workspace, covering 20+ bounded contexts: Leads, Contacts, Organisations, Deals, Pipelines, Activities, Notes, Attachments, Custom Fields, Products, Quotes, Invoices, Automations, Email, Imports, Exports, Notifications, Audit, Comments, Files, Reports, Tags, API Keys, and Webhook Endpoints. Shared infrastructure is split into internal packages (workspace-kernel, audit, scheduling-kernel, locale-kernel, byof-kernel, dispatch-kernel, observability, notification-kernel) consumed by the CRM app. Multi-tenancy is enforced at the query layer via workspace-scoped managers applied globally. The Inertia Django + React 19 + TypeScript frontend is bundled with Vite 6 and Tailwind CSS v4. Django REST Framework handles the API layer, with Celery + Redis for async task processing (bulk CSV/XLSX import, email ingestion, notifications). The platform runs under Daphne for ASGI/WebSocket support, with Whitenoise for static files. Stripe handles payment collection. Pytest + Playwright cover unit, integration, and E2E testing.
Responsibilities
- Designed the entire platform architecture from scratch: domain-driven Django monolith, internal uv workspace packages for shared infrastructure, and Docker deployment.
- Implemented workspace-scoped multi-tenancy enforced at the query layer via global workspace managers, keeping tenant data isolated across all 20+ domains.
- Built 20+ domain modules each with isolated models, serializers, actions, and policies — keeping business logic testable and domain boundaries clean.
- Developed a role-based permissions system per workspace with Django authentication, API key management, and webhook endpoint management.
- Wired Celery + Redis workers for async heavy-lifting: bulk CSV/XLSX import, email/reply ingestion, and notification dispatch.
- Integrated Daphne ASGI server for WebSocket support alongside Whitenoise for static file serving, and Stripe for payment collection.
- Built the React 19 + TypeScript frontend via Inertia Django and Vite 6, with Tailwind CSS v4 and a custom component library.
- Maintained full test coverage with Pytest for Django and Playwright for E2E; deployed and maintains both staging and production environments.
Highlights
- Domain-driven Django monolith across 20+ bounded contexts — each domain fully isolated
- Workspace-scoped multi-tenancy enforced at the query layer
- Celery workers for high-throughput CSV/XLSX import and email ingestion
- Live in production with active ongoing maintenance