Veci CRM
A production multi-tenant CRM built from scratch for Veci Technologies — Laravel 13, domain-driven architecture across 20+ bounded contexts, Go microservices for import and email ingestion, live in production.
Role
Freelance Software Engineer
Capacity
Solo build · ongoing maintenance
Year
2024–present
Stack size
18 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 Laravel 13 with a domain-driven monorepo structure 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. Each domain follows a strict five-file structure — Actions, Queries, Models, Policies, Events — keeping business logic isolated and testable. Multi-tenancy is enforced through a BelongsToWorkspace trait and a global WorkspaceScope applied to every query, with ULID public IDs exposed to the client and integer PKs kept internal. The Inertia.js v3 + React 19 + TypeScript frontend uses shadcn/ui components and Tailwind CSS v4. Authentication uses Laravel Fortify with a five-role Spatie permissions system scoped per workspace. Two Go microservices handle the heavy-lifting data tasks: a CSV/XLSX importer worker and an email/reply ingestion service, both integrated into the Laravel queue via named channels. Laravel Horizon provides real-time queue monitoring across five named queues. The full stack runs in Docker Compose with PHP-FPM, Nginx, PostgreSQL, Redis, and Mailpit for local dev. The test suite uses Pest v4 with Larastan level-6 static analysis enforced in CI via GitHub Actions. Both staging and production environments are live and actively maintained.
Responsibilities
- Designed the entire platform architecture from scratch: multi-tenant monorepo, domain-driven structure, Go microservices, and infrastructure.
- Implemented workspace-scoped multi-tenancy with a BelongsToWorkspace trait, global WorkspaceScope, and ULID public IDs throughout the API surface.
- Built 20+ domain modules (Leads, Contacts, Deals, Pipelines, Quotes, Invoices, Automations, etc.) each following a strict Actions/Queries/Policies/Events structure.
- Developed a five-role Spatie permissions system per workspace with Laravel Fortify authentication, API key management, and webhook endpoints.
- Built Go microservices for CSV/XLSX bulk import and email/reply ingestion, integrated into the Laravel queue via five named channels.
- Set up Laravel Horizon for real-time queue monitoring, Pest v4 test suite, and Larastan level-6 static analysis enforced in CI.
- Configured and deployed Docker Compose infrastructure (PHP-FPM, Nginx, PostgreSQL, Redis, Mailpit) and maintains both staging and production environments.
Highlights
- Domain-driven architecture across 20+ bounded contexts — each domain fully isolated and independently testable
- Workspace-scoped multi-tenancy enforced at the query layer with zero tenant data leakage
- Go microservices for high-throughput CSV/XLSX import and email ingestion
- Live in production at crm.vecitechnologies.net with active ongoing maintenance