OI
All work
2024–present★ Featured build

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

Tech stack

PythonDjango 5Django REST FrameworkInertia DjangoReact 19TypeScriptCeleryRedisPostgreSQLDaphneVite 6Tailwind CSS v4StripePytestPlaywrightDockerGitHub Actions