← Назад к проектам
Недвижимость и корпоративные платформы Кейс

Персональная CRM для фрилансера — учёт клиентов, проектов, задач и аналитика

Собственная CRM-система для управления фриланс-работой: клиенты, проекты, задачи, трекинг времени, автоматический расчёт стоимости работ, аналитика по доходам, лидам и вакансиям. Стек: Symfony, Vue, PostgreSQL, Redis, ElasticSearch, RabbitMQ.

Доступные языки
Технологии 8
PHP
JavaScript
Symfony
Vue.js
PostgreSQL
Elasticsearch
Redis
RabbitMQ
Персональная CRM для фрилансера — учёт клиентов, проектов, задач и аналитика
Избранный проект ↗

О проекте

Собственная CRM-система, разработанная для управления фриланс-деятельностью. В системе я веду клиентов, завожу на них проекты и задачи, трекаю время по задачам, после чего система автоматически рассчитывает стоимость выполненных работ. Данные агрегируются по каждой задаче, проекту и клиенту, что позволяет получать полную картину по заработку на всех уровнях.

Для аналитики предусмотрен отдельный дашборд с графиками и диаграммами: можно смотреть данные по каждому дню — какие задачи выполнялись, с какими проектами и клиентами велась работа, сколько заработано за день, неделю или месяц. Помимо этого в CRM реализованы модули аналитики лидов и вакансий: можно вести лидов с характеристиками (холодный/горячий, источник привлечения и др.) и отслеживать конверсию в клиентов, а также вести вакансии со статусами и источниками, чтобы анализировать релевантность вакансий, успешность прохождения собеседований и эффективность каналов поиска.

Система построена на Symfony (backend), Vue (frontend), PostgreSQL (основная БД), Redis (кэш и сессии), ElasticSearch (поиск и аналитика), RabbitMQ (асинхронная обработка).

Персональная CRM для фрилансера

Собственная CRM-система, разработанная для управления фриланс-деятельностью. В системе я веду клиентов, завожу на них проекты и задачи, трекаю время по задачам, после чего система автоматически рассчитывает стоимость выполненных работ.

Данные агрегируются по каждой задаче, проекту и клиенту, что позволяет получать полную картину по заработку на всех уровнях. Поскольку у клиентов могут быть разные проекты, агрегация идёт как по каждому проекту отдельно, так и по клиенту в целом.

Для аналитики предусмотрен отдельный дашборд с графиками и диаграммами: можно смотреть данные по каждому дню — какие задачи выполнялись, с какими проектами и клиентами велась работа, сколько заработано за день, неделю или месяц.

Помимо этого в CRM реализованы модули аналитики лидов и аналитики вакансий:

  • Лиды: добавление лидов с характеристиками (холодный/горячий, источник привлечения и др.), отслеживание статусов и конверсии в клиентов. Отдельный таб в дашборде показывает, сколько лидов привлечено, какие у них статусы и сколько удалось сконвертировать в клиентов. Это позволяет анализировать успешность привлечения и корректировать действия.
  • Вакансии: заведение вакансий со статусами и источниками, анализ релевантности вакансий моим способностям и успешности прохождения собеседований. Отдельный таб в дашборде помогает понимать, правильно ли я ищу вакансии, с каких каналов лучше искать и как корректировать поведение на собеседованиях.

Моя роль в проекте

Full-stack разработчик и автор проекта: проектирование архитектуры, разработка backend на Symfony, frontend на Vue, настройка инфраструктуры (PostgreSQL, Redis, ElasticSearch, RabbitMQ).

Технологический стек

  • Backend: Symfony (PHP)
  • Frontend: Vue.js
  • База данных: PostgreSQL
  • Кэш и сессии: Redis
  • Поиск и аналитика: ElasticSearch
  • Очереди: RabbitMQ

Ключевые задачи

  • Проектирование доменной модели: клиенты, проекты, задачи, время, ставки
  • Трекинг времени по задачам и автоматический расчёт стоимости работ
  • Агрегация данных по задачам, проектам и клиентам
  • Дашборд с графиками и диаграммами для аналитики доходов
  • Модуль аналитики лидов с характеристиками и конверсией
  • Модуль аналитики вакансий со статусами и источниками
  • Асинхронная обработка событий через RabbitMQ
  • Поиск по данным через ElasticSearch
  • Кэширование и оптимизация выдачи через Redis

Результат

Полноценная персональная CRM, которая закрывает учёт клиентов, проектов и задач, автоматизирует расчёт заработка и даёт аналитику по доходам, лидам и вакансиям. Система помогает принимать решения на основе данных: какие каналы привлечения лидов эффективны, какие вакансии релевантны, сколько заработано за день/неделю/месяц.

Что я сделал

01

Нужно было спроектировать модель, которая связывает клиентов, проекты, задачи, трекинг вре...

Задача

Нужно было спроектировать модель, которая связывает клиентов, проекты, задачи, трекинг времени и ставки так, чтобы данные корректно агрегировались на всех уровнях и не дублировались.

Решение

  • Спроектировал сущности: Клиент → Проект → Задача → Запись времени → Расчёт стоимости.
  • Продумал связи и правила каскадного поведения.
  • Заложил гибкость по ставкам (почасовая, фиксированная, по проекту).
  • Реализовал миграции и индексы в PostgreSQL.

Результаты

  • Чистая и расширяемая доменная модель.
  • Корректная агрегация данных по задачам, проектам и клиентам.
  • Основа для аналитики и отчётности.

02

Требовалось удобно трекать время по задачам и автоматически рассчитывать сумму за выполнен...

Задача

Требовалось удобно трекать время по задачам и автоматически рассчитывать сумму за выполнение, без ручных вычислений и ошибок.

Решение

  • Реализовал трекинг времени с привязкой к задаче и дате.
  • Добавил автоматический расчёт стоимости на основе ставки и затраченного времени.
  • Обеспечил пересчёт при изменении ставки или времени.
  • Вынес тяжёлые пересчёты в асинхронные задачи через RabbitMQ.

Результаты

  • Автоматический и точный расчёт заработка.
  • Прозрачная история времени и стоимости по каждой задаче.
  • Отсутствие ручных вычислений.

03

Нужно было получать суммы за работы на разных уровнях: по задаче, по проекту, по клиенту....

Задача

Нужно было получать суммы за работы на разных уровнях: по задаче, по проекту, по клиенту. При этом у клиента может быть несколько проектов, а у проекта — множество задач.

Решение

  • Реализовал агрегацию данных на уровне задач, проектов и клиентов.
  • Добавил пересчёт агрегатов при изменениях (время, ставки, статусы).
  • Кэшировал агрегаты в Redis для быстрой выдачи.
  • Обеспечил консистентность данных между уровнями.

Результаты

  • Полные данные по заработку на всех уровнях.
  • Быстрая выдача агрегатов благодаря кэшу.
  • Единая картина по клиентам и проектам.

04

Для аналитики требовался наглядный дашборд с графиками и диаграммами, который показывает д...

Задача

Для аналитики требовался наглядный дашборд с графиками и диаграммами, который показывает данные по дням: какие задачи выполнялись, с какими проектами и клиентами, сколько заработано за день/неделю/месяц.

Решение

  • Реализовал backend-агрегации для временных срезов (день/неделя/месяц).
  • Построил frontend на Vue с графиками и диаграммами.
  • Добавил фильтры по клиентам, проектам и периодам.
  • Оптимизировал запросы и кэшировал тяжёлые агрегаты.

Результаты

  • Наглядная аналитика доходов по дням, неделям и месяцам.
  • Быстрый доступ к данным по клиентам и проектам.
  • Основа для принятия решений на основе данных.

05

Нужно было вести лидов с характеристиками (холодный/горячий, источник привлечения и др.) и...

Задача

Нужно было вести лидов с характеристиками (холодный/горячий, источник привлечения и др.) и анализировать, сколько лидов привлечено, какие у них статусы и сколько конвертировано в клиентов.

Решение

  • Реализовал CRUD для лидов с гибкими характеристиками.
  • Добавил статусы и источники привлечения.
  • Реализовал конверсию лида в клиента.
  • Построил отдельный таб аналитики лидов в дашборде.

Результаты

  • Прозрачная воронка лидов и конверсия в клиентов.
  • Понимание, какие каналы привлечения работают лучше.
  • Возможность корректировать действия по привлечению.

06

Требовалось вести вакансии со статусами и источниками и анализировать, насколько вакансии...

Задача

Требовалось вести вакансии со статусами и источниками и анализировать, насколько вакансии релевантны моим способностям и насколько успешно я прохожу собеседования.

Решение

  • Реализовал CRUD для вакансий со статусами и источниками.
  • Добавил отслеживание этапов: отклик → собеседование → результат.
  • Построил отдельный таб аналитики вакансий в дашборде.
  • Добавил аналитику по каналам поиска и успешности собеседований.

Результаты

  • Понимание, правильно ли я ищу вакансии.
  • Данные о том, с каких каналов лучше искать.
  • Возможность корректировать поведение на собеседованиях.

07

Пересчёты агрегатов, обновление аналитики и расчёт стоимости — тяжёлые операции, которые н...

Задача

Пересчёты агрегатов, обновление аналитики и расчёт стоимости — тяжёлые операции, которые нельзя выполнять синхронно в HTTP-цикле без потери отзывчивости.

Решение

  • Спроектировал очереди событий для изменений времени, ставок, статусов.
  • Реализовал воркеры на Symfony Messenger + RabbitMQ.
  • Добавил retry-политики, dead-letter queue и мониторинг.
  • Обеспечил идемпотентность обработчиков.

Результаты

  • Быстрый отклик интерфейса независимо от фоновых операций.
  • Устойчивость к сбоям и пиковым нагрузкам.
  • Масштабируемая обработка событий.

08

Быстрый поиск по клиентам, проектам, задачам, лидам и вакансиям, а также гибкая аналитика...

Задача

Быстрый поиск по клиентам, проектам, задачам, лидам и вакансиям, а также гибкая аналитика требовали специализированного поискового движка вместо тяжёлых SQL-запросов.

Решение

  • Настроил индексы ElasticSearch под ключевые сущности.
  • Реализовал синхронизацию данных через RabbitMQ-события.
  • Добавил поисковые запросы с фильтрами и агрегациями.
  • Оптимизировал маппинги и реиндексацию.

Результаты

  • Быстрый поиск по всем сущностям CRM.
  • Гибкая аналитика для дашбордов.
  • Снижение нагрузки на PostgreSQL.

09

Дашборд и агрегаты по клиентам, проектам и задачам — часто запрашиваемые данные, которые т...

Задача

Дашборд и агрегаты по клиентам, проектам и задачам — часто запрашиваемые данные, которые тяжело считать каждый раз заново.

Решение

  • Внедрил кэширование горячих данных и агрегатов в Redis.
  • Настроил инвалидацию кэша по событиям (изменение времени, ставок, статусов).
  • Использовал Redis для сессий и распределённых блокировок.
  • Добавил мониторинг hit/miss и времени отклика.

Результаты

  • Быстрая выдача дашборда и агрегатов.
  • Снижение нагрузки на PostgreSQL.
  • Стабильная работа под нагрузкой.

10

Для аналитики и разбора спорных ситуаций требовалось отслеживать все изменения по клиентам...

Задача

Для аналитики и разбора спорных ситуаций требовалось отслеживать все изменения по клиентам, проектам, задачам, лидам и вакансиям.

Решение

  • Спроектировал схему аудит-лога с привязкой к сущности, пользователю и действию.
  • Реализовал асинхронную запись аудита через RabbitMQ.
  • Добавил инструменты поиска и выгрузки аудит-логов (ElasticSearch).
  • Обеспечил неизменяемость записей.

Результаты

  • Полный аудит изменений в CRM.
  • Быстрый разбор спорных ситуаций.
  • Основа для аналитики поведения.

11

CRM используется ежедневно, и сбои в очередях, индексации или кэше критичны для учёта врем...

Задача

CRM используется ежедневно, и сбои в очередях, индексации или кэше критичны для учёта времени и заработка.

Решение

  • Настроил сбор метрик по RabbitMQ, Redis, ElasticSearch и PostgreSQL.
  • Реализовал алерты на аномалии (рост DLQ, задержки индексации, ошибки воркеров).
  • Добавил дашборды для мониторинга состояния системы.
  • Интегрировал логирование критичных операций.

Результаты

  • Быстрое обнаружение и реакция на инциденты.
  • Снижение времени простоя.
  • Прозрачность состояния системы.

Технологии и темы

Теги проекта

#Symfony #PHP #Vue.js #PostgreSQL #Redis #ElasticSearch #RabbitMQ #CRM #Freelance #Time Tracking #Analytics #Dashboard #Lead Management #Job Tracking #Symfony Messenger #Async Processing #High Load #REST API #Audit Logging
04
Начать проект

Нужен аналогичный технический подход?

Давайте обсудим ваш проект, архитектуру и наилучший технологический стек для него.

Давайте обсудим ↗