A custom CRM system built to manage my freelance activity. In the system I keep clients, create projects and tasks for them, track time on tasks, and the system automatically calculates the cost of completed work. Data is aggregated per task, project, and client, which provides a complete picture of earnings at every level.
For analytics, there is a dedicated dashboard with charts and diagrams: I can view data for each day — which tasks were completed, which projects and clients I worked with, and how much I earned per day, week, or month. In addition, the CRM includes lead analytics and job application analytics modules: I can manage leads with attributes (cold/hot, source, etc.) and track conversion into clients, as well as manage job applications with statuses and sources to analyze how relevant the positions are to my skills, how well I perform in interviews, and which search channels work best.
The system is built on Symfony (backend), Vue (frontend), PostgreSQL (primary DB), Redis (cache and sessions), ElasticSearch (search and analytics), and RabbitMQ (asynchronous processing).
Personal CRM for a Freelancer
A custom CRM system built to manage my freelance activity. In the system I keep clients, create projects and tasks for them, track time on tasks, and the system automatically calculates the cost of completed work.
Data is aggregated per task, project, and client, which provides a complete picture of earnings at every level. Since clients can have multiple projects, aggregation is performed both per project and per client as a whole.
For analytics, there is a dedicated dashboard with charts and diagrams: I can view data for each day — which tasks were completed, which projects and clients I worked with, and how much I earned per day, week, or month.
In addition, the CRM includes lead analytics and job application analytics modules:
- Leads: adding leads with attributes (cold/hot, source, etc.), tracking statuses and conversion into clients. A dedicated tab in the dashboard shows how many leads were acquired, their statuses, and how many were converted into clients. This enables analysis of lead acquisition performance and adjustment of actions.
- Job applications: managing vacancies with statuses and sources, analyzing how relevant positions are to my skills and how well I perform in interviews. A dedicated tab in the dashboard helps me understand whether I am searching for jobs correctly, which channels work best, and how to adjust my interview behavior.
My Role in the Project
Full-stack developer and project author: architecture design, backend development on Symfony, frontend on Vue, infrastructure setup (PostgreSQL, Redis, ElasticSearch, RabbitMQ).
Technology Stack
- Backend: Symfony (PHP)
- Frontend: Vue.js
- Database: PostgreSQL
- Cache and Sessions: Redis
- Search and Analytics: ElasticSearch
- Queues: RabbitMQ
Key Tasks
- Designing the domain model: clients, projects, tasks, time, rates
- Time tracking on tasks and automatic calculation of work cost
- Data aggregation per task, project, and client
- Dashboard with charts and diagrams for income analytics
- Lead analytics module with attributes and conversion
- Job application analytics module with statuses and sources
- Asynchronous event processing via RabbitMQ
- Search across data via ElasticSearch
- Caching and output optimization via Redis
Outcome
A fully functional personal CRM that covers client, project, and task management, automates earnings calculation, and provides analytics on income, leads, and job applications. The system helps make data-driven decisions: which lead acquisition channels are effective, which vacancies are relevant, and how much was earned per day, week, or month.