Что стоит за чистотой в вашей квартире, или препарация Qlean / Qlean corporate blog / Habr

Привет, хабр. Многие слышали про наш сервис, кто-то пользовался, и вот мы созрели до того, чтобы рассказать про свою внутреннюю IT-кухню. Мы начинали в 2014 году с квартиры-офиса на Арбате (с переговоркой в кухне), 300 клиентов и организацией всего “руками”. Вся информация фиксировалась в экселе, а разработкой и не пахло. Со временем количество клиентов увеличивалось, потребовалась автоматизация, и сегодня Qlean — это зрелая компания, в которой отдел разработки насчитывает более 25 человек. Сегодня через наш сервис делается в среднем около 1000 уборок в день силами 3000 подключенных к системе исполнителей. Мы третьи в мире после зарубежных Handy и Helpling по объемам уборок, и работаем в Москве, Санкт-Петербурге и Екатеринбурге. В этом посте мы проведем экскурсию по системам нашего сервиса и проанонсируем дальнейшие темы блога.

Технологии и как мы их реализовываем


Мы не зацикливаемся на каком-то языке программирования, но исторически сложилось так, что сервис был построен на Ruby on Rails с coffeescript и прочими чудесами. Сейчас от всего этого осталось только api, а от рельс — ActiveRecord и набор стандартных гемов. Мы не сильно упарываемся в модные нынче TrailBlazer и прочее, так как стараемся писать простой и понятный код, который просто поддерживать. Помимо основного приложения у нас есть микросервисы на чистом Ruby, например, для CRM, и системы найма исполнителей, несколько сервисов на Go и парочка на Clojure. Сервисы стараемся делить по принципам DDD, то есть каждый сервис отвечает за какой-либо бизнес-процесс: найм, оплату заказа, назначение исполнителя и т.п. Язык выбираем исходя из конкретной задачи и требований. Весь фронтенд у нас на React+Redux, а мобильные приложения недавно полностью переписали на React.Native, что позволяет писать меньше кода и даёт возможность реализовывать один и тот же функционал на разных платформах (и сайт, и мобильные приложения) силами одних и тех же разработчиков. О профите и трудностях перевода нативных приложений на React.Native мы расскажем дополнительно.

Всего у нас около 30 различных сервисов, которые живут на более чем 70 виртуальных машинах, поэтому выкладка кода не самая тривиальная: мы используем Ansible, Docker и Nomad в качестве оркестратора. При выкладке прогоняется огромное количество тестов (как юнит, так и интеграционных), плюс мы всё проверяем силами QA инженеров, используем canary deploy для сложных задач, поэтому мы не боимся много и часто выкладывать. В неделю у нас в среднем 15 релизов.

А подробнее?



Система состоит из 3-х больших функциональных частей: работа с клиентами, исполнителями и распределением заказов по исполнителям.

Работа с клиентами


Для общения с клиентами у нас есть сайт и мобильное приложение. Тут в принципе всё примерно стандартно: маркетинг, маркетинг и ещё раз маркетинг. За одним большим нюансом: мы повёрнуты на аналитике, поэтому отслеживаем и анализируем все действия, что совершает пользователь. Со всех устройств эвенты поступают на микросервис на Go, который обрабатывает и складывает информацию в базу данных. Так как мы любим всё мерять, у нас сильно развита культура экспериментов и А/B тестов. Любую гипотезу мы сначала проверяем, и на механику одного и того же функционала может быть одновременно до 5 разных реализаций, начиная от каких-то мелких вещей вроде формы ввода данных кредитной карты и заканчивая моделями штрафов и подписок. У каждого эксперимента есть свой дашборд в системе аналитики (мы используем Periscope) и метрики, по которым мы сравниваем. Всегда есть контрольная группа и мы следим за тем, чтобы эксперимент был «чистым», то есть группы пользователей были максимально идентичными. Про аналитику и A/B тесты мы расскажем отдельно.

Работа с клинерами


Любой сервис строится на исполнителях. В нашем случае исполнители приходят в квартиры клиентов, так что их качество и профессионализм очень важны. Прежде чем стать нашим клинером, человеку надо пройти несколько процедур: собеседование, проверку службы безопасности, инструктаж и тест на знание регламентов, выдачу инвентаря. До недавнего времени все эти процедуры происходили полностью в оффлайне, что накладывало свои ограничения на запуск сервиса в других регионах: нужен склад, нужен офис, нужен отдельный колл-центр. Сейчас же мы экспериментируем с полностью автоматизированной системой найма и снабжения исполнителя. И если с наймом проблем не возникло, то со снабжением ещё предстоит долгий путь: мы пока не умеем автоматически контролировать инвентарь клинера. В любом случае основные наши страхи пока не оправдались: система удалённого найма не влияет на качество исполнителей и сервиса. Поэтому мы будем развиваться в этом направлении дальше.

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

Распределение заказов


Вообще, с распределением заказов связан наш основной челлендж. Основные мотивации клинера работать через систему — стабильный заработок и гарантированный поток заказов. Кажется, что всё просто: назначил клинеров на заказ и вперёд, пусть машут шваброй. На деле оказывается, что кто-то готов убираться только по средам после обеда, кто-то не любит кошек и балконы, а кто-то хочет убирать только трёшки в Бутово. Со стороны клиентов тоже есть предпочтения, но другого характера: мы должны минимизировать количество разных клинеров, в идеале за 10 заказов клиенту должно приезжать 2-3 клинера, ведь мало кому понравится, что его постельное бельё трогает 50 незнакомых людей в год. Получается, что система должна учитывать все эти предпочтения и подбирать заказы по наилучшему совпадению. Казалось бы, классическая задача о назначениях но, так как исполнитель может отказаться от назначенного заказа, который ему не понравился, задача становится нетривиальной. А если учесть, что клиент может внезапно вообще перенести или отменить заказ, то мы получаем очень жёсткие требования на быстродействие алгоритма. Мы используем сложные модели, предсказывающие вероятность отмены заказа, вероятность выхода клинера на конкретный заказ и автоматически подбираем клинеру заказ на который она скорее всего согласится по истории её предыдущих заказов. Наша следующая статья как раз прольёт свет на эту тему.

В любом случае, после назначения остаётся какое-то количество неразобранных заказов, они разбираются самими клинерами через приложение. Сейчас мы тестируем модель с аукционом и динамической ценой в зависимости от количества отказов от конкретного заказа. После ручного забора остаётся уже незначительное количество неразобранных заказов. За сутки до заказа наш колл-центр вручную прозванивает наиболее подходящих исполнителей, чтобы клиенты не остались без клинера. Иногда случается и такое, что мы не можем подобрать исполнителя вообще никак (в основном из-за поздних переносов), но мы работаем над минимизацией этого параметра (сейчас до 5 заказов в день остаются без исполнителей).

На самом деле существует ещё множество деталей системы: собственная CRM, работа со складом, но для короткой обзорной статьи уже и так много информации.

Будем рады ответить на ваши вопросы.



Промокод на первую уборку для пользователей хабра: habr
Github

Как Qlean использует Machine Learning? / Qlean corporate blog / Habr

Каждый день поступает все больше заказов, и их нужно как-то распределять по исполнителям. Вроде ничего сложного: пришёл заказ – отдай его клинеру. Но не всё так просто, как кажется. У наших клинеров нет фиксированного графика работы, они могут работать, когда захотят, отказываться практически от любых заказов (и это клинеры, увы, делают довольно часто). Поэтому распределение заказов – одна из самых сложных задач, над которой мы работаем.

ОСНОВНЫЕ ПРОБЛЕМЫ


Одна из самых больших проблем – это ручное распределение. У нас скапливается много заказов, которые нужно оперативно распределить. Откуда берутся эти заказы?
  • Клиент может заказать уборку в последний момент, прямо на сегодняшний день.
  • Клиент может перенести заказ на любой день.
  • Клинер может соскочить с заказа в последний момент.

Такие заказы мы называем “горящие”. Их бывает достаточно много, и надеяться на то, что клинеры разберут их в приложении не стоит. Поэтому мы распределяем их вручную. Сотрудники колл-центра обзванивают клинеров и предлагают им заказы. Это трудоемкий процесс, требующий времени и ресурсов.

В день распределяется от 50 заказов вручную, в сезон случается и вовсе адище – может быть и 300. Это занимает много времени и ресурсов.

Другая проблема – невыполненные заказы. Каждый день мы не выполняем примерно 2% заказов потому, что не можем или не успеваем найти на них клинеров. Если мы их не выполняем, дарим клиенту бесплатную уборку. Каждый день мы дарим около 20 бесплатных уборок, а в сезон эта цифра может достигать 200-300.

Как мы решаем эти проблемы?

1. Клинерское приложение

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

Эти ленты различаются для разных сегментов клинеров. Например, клинеры-новички никогда не увидят заказы наших постоянных клиентов. Эту видимость мы регулируем матрицей. Числа означают, за какое время клинер видит заказ в приложении.

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

2. Автоназначение

Вместе со стремительным ростом заказов, растет и число “плохих” заказов. “Плохие” – это те, которые в конечном итоге не состоятся или будут отменены. Нам нужно было что-то с этим делать, и поэтому мы решили немного хайпануть и заюзать ML, чтобы предсказать такие заказы.

Особенно мудрить мы не стали. Придумали около 30 различных признаков: время от момента создания заказа, время с последнего заказа, сколько клиент до этого отменял заказов, сколько он принес нам денег за всё время и так далее.

Взяли готовые библиотеки

import numpy as np import pandas as pd from sklearn.ensemble import GradientBoostingClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import roc_auc_score

Загрузили фичи
features = pd.read_csv('train/train.csv', header = 0)
X = features.drop(['cancel'], axis=1)
y = features.cancel

Разделили выборку на обучающую и тестовую
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8, random_state=1234)

Обучили градиентным бустингом
gb_clf = GradientBoostingClassifier(learning_rate=0.2, n_estimators=70, max_depth=3, verbose=False, random_state=241)
gb_clf.fit(X_train, y_train)

Проверили на тестовой выборке
y_true = y_test
y_pred = final_gb_clf.predict_proba(X_test)[:,1]
roc_auc=roc_auc_score(y_true, y_pred)

roc-auc: 0.881929812245

Сделали прогноз

features = pd.read_csv('predict_features.csv', header = 0, index_col='order_id')
y_predict = gb_clf.predict_proba(features)[:,1]
print(y_pred)

Получили неплохую roc-auc = 0.88. И закинули в продакшн.

Теперь каждое утро нам в базу данных падает оценка вероятности отмены заказа.
Экспертным путем мы выбрали пороговое значение для оценки вероятности: 0.7.
Теперь мы активно используем модель в наших бизнес-процессах. Например, такие плохие заказы обзваниваем заранее и у них отдельный флоу в клинерском приложении.

Для разных тестов мы иногда её вырубаем, и это влияет на наши бизнес-метрики.
Например, 7 апреля словили кучу невыполненных заказов, потому что до этого выключили модель.

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

Запилили им расписание. Но, как в итоге оказалось, клинеры в принципе его не соблюдают. А заставлять их – противоречит нашим устоям.

Еще раз заюзали ML. Сделали аналогичную модель, но предсказывающую нам вероятность выхода клинера на работу. Теперь у нас крутятся две модельки, каждый день мы имеем актуальную инфу о заказах и клинерах и можем их распределять.

Алгоритм

Ищем заказы, которые нужно распределить, вычищаем из них “плохие” c помощью полученной оценки вероятности отмены. Подбираем потом на каждый заказ клинеров. Сначала тех, которых хочет видеть клиент – избранных – и назначаем их на заказ. Если все они заняты, то подбираем других клинеров, которые уже были у клиента, но просто не были никак оценены. Если и они заняты, просто ищем ближайшего свободного клинера.

Результаты

Мы ожидали существенного снижения ручного распределения и нам удалось его снизить в два раза. Также мы думали, что автоназначение снизит нам процент невыполненных заказов, но этого не произошло, так как основной вклад в решение этой задачи внесла модель оценки вероятности отмены заказы.

Выводы

Не бойтесь использовать ML в своих задачах — сделать простую модель не составляет труда. На написание моделей у нас ушло всего пару дней работы одного аналитика. Зато теперь мы можем использовать её в наших бизнес-процессах.

Задавайте вопросы в комментариях, будем рады на них ответить.

Qlean.ru — Результаты анализа сайта

Авторитет страницы оценка 42%

Показатель отказов оценка 0%

Тег Title 57 символов

Уборка квартир в Москве: заказать уборку квартиры в Qlean

Метаописание 189 символов

Qlean — услуги по уборке частных квартир в Москве и области. Цены фиксированные и зависят от количества комнат. Узнайте, сколько стоит уборка вашей квартиры на нашем сайте или в приложении.

Главный URL-адрес 16 символов

https://qlean.ru

Описание Содержимое страницы

Уборка квартир в Москве: заказать уборку квартиры в QleanДля домаДля офисаМоскваМоскваСанкт-ПетербургЕкатеринбургНовосибирскКазаньВойтиУборкаХимчисткаСтирка и глажкаПоддерживающаяГенеральнаяПосле ремонтаМытьё оконЗагородные домаМоскваМоскваСанкт-Пете…

Meta Keywords 2 обнаружено

Облако слов Основные ключевые слова

уборка14 квартиры12 уборки10 поверхности8 дома8 уборку8 моем7 протираем7 если6 qlean6

Плотность ключевых слов Плотность ключевых слов является одним из основных терминов в SEO

Ключевые слова Частота 3аголовок Описание Домен h2 h3
уборка 14
квартиры 12
уборки 10
поверхности 8
дома 8
уборку 8
моем 7
протираем 7
если 6
qlean 6

Вид сайта в Google Так выглядит сайта в поиске Google

Уборка квартир в Москве: заказать уборку квартиры в Qlean

https://qlean.ru

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

Robots.txt Файл найден

Sitemap.xml Файл не найден

Размер страницы Соотношение кода и текста

Размер документа: ~297.05 KB

Размер кода: ~100.57 KB

Размер текста: ~196.48 KB Отношение: 66.14%

Qlean.ur — Результаты анализа сайта

Скорость на ноутбуках оценка 0%

Скорость на мобильных устройствах оценка 0%

Авторитет домена оценка 0%

Удобство/юзабилити оценка 0%

Авторитет страницы оценка 0%

Показатель отказов оценка 0%

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

Заголовок сайта

Внимание! Заголовок не оптимизирован. Заголовком страницы выступает тег title, который является ключевым в SEO-структуре сайта. Тот заголовок, который прописан в теге title, и выдаётся в результатах поисковой машины.

Описание сайта

Внимание! Описание сайта не оптимизировано. Описание страницы отображается в мета-теге description. Для каждой страницы должно быть своё описание. Важность описания страницы в том, что поисковая система может использовать его для создания сниппетов.

Robots.txt

Отлично! На вашем сайте есть robots.txt

Sitemap.xml

Отлично! На вашем сайте есть карта (sitemap)

SSL сертификат

Внимание! Ваш сайт не защищен SSL (HTTPS). Для продвижения сайтов коммерческой направленности важна конфиденциальность обмена информацией между сервером и посетителями. Это повышает лояльность потенциальных клиентов к ресурсу

Скорость загрузки

Внимание! Ваш сайт загружается очень медленно на стационарных устройствах. Нужно ускорить загрузку.

Скорость на мобильных

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

Заголовки

Внимание! Ваша страница не содержит заголовков h2 и h3. Заголовки h2 и h3 помогают указать поисковым системам важные темы вашей страницы

Реестр запрещённых сайтов

Внимание! Ваш сайт занесен в Реестр запрещённых сайтов

W3C валиадатор

Отлично! На вашем сайте нет ошибок W3C

Ускоренные мобильные страницы (AMP)

Внимание ! Ваш сайт не имеет AMP версию. AMP – это технология ускоренных мобильных страниц, которая разрабатывается независимыми разработчиками и активно продвигается компанией Google.

Авторитет домена

Внимание! Домен авторитет вашего сайта низкий. Нужно иметь авторитет более 25.

Сжатие GZIP

Внимание! Ваш сайт не использует сжатие GZIP. Сжатие ресурсов с помощью функций gzip или deflate позволяет сократить объем данных, передаваемых по сети.

Фавикон

Отлично! Ваш сайт, кажется, имеет favicon.

Битые ссылки

Отлично! У вас нет битых ссылок Просмотр ссылок

Первые 0 ссылки Отношение Состояние HTTP

Создать сайт клининговой компании (серо-голубой)

Порядок обработки персональных данных
Основные понятия
Сайт — umi.ru, а также все его поддомены. 
Пользователь — посетитель Сайта.
Юми — Общество с ограниченной ответственностью «Юми» ИНН 7841432763 КПП 781301001 ОГРН 1107847313243 адрес: 197198, г. Санкт-Петербург, ул. Красного Курсанта, д.25, лит.Ж.
Услуги — сервисы, доступные Пользователю через функциональные возможности программного обеспечения «Система управления сайтами UMI.CMS» (далее – ПО) посредством использования встроенных в ПО инструментов и служб. 
Клиент — владелец неисключительной лицензии ПО или покупатель других Услуг Юми. 
Персональные данные — любая информация, относящаяся к определенному физическому лицу. 
Заказ — оформление платежного документа для покупки продуктов Юми.

Соглашение

Юми обязуется обеспечить конфиденциальность и сохранность персональных данных, полученных от Пользователя в соответствии с ФЗ-152 «О персональных данных». Юми вправе использовать технологию «cookies». Cookies не содержат конфиденциальную информацию. Пользователь настоящим дает согласие на сбор, анализ и использование cookies, в том числе третьими лицами для целей формирования статистики и оптимизации рекламных сообщений. При регистрации на Сайте Пользователь предоставляет следующую информацию: фамилия, имя, отчество, телефон, адрес электронной почты. При оформлении заказа на Сайте, помимо регистрационных данных, Пользователь предоставляет дополнительную информацию: почтовый адрес. Предоставляя свои персональные данные, Пользователь соглашается, что Юми вправе идентифицировать Пользователя как Клиента и использовать их для выполнения обязательств перед Пользователем — оформить и выполнить заказ Услуг, открыть дополнительные возможности сайта, оказать техническую поддержку, предоставить какие-либо эксклюзивные условия для Пользователя (накопительные или разовые скидки, расширенный сервис поддержки, промо-акции и т.д.). Также Юми вправе использовать персональные данные Пользователя для продвижения Услуг Юми и Услуг компаний партнеров, проведения электронных и SMS опросов, контроля результатов маркетинговых акций, клиентской поддержки, проведения розыгрышей призов среди Пользователей, контроля удовлетворенности Пользователя, а также качества услуг, оказываемых Юми.Юми имеет право отправлять информационные, в том числе рекламные сообщения, на электронную почту и мобильный телефон Пользователя с его согласия, выраженного посредством совершения им действий, однозначно идентифицирующих этого Пользователя и позволяющих достоверно установить его волеизъявление на получение сообщения.

Юми вправе передать персональную информацию Пользователя третьим лицам в следующих случаях:
— пользователь выразил свое согласие на такие действия; 
— передача необходима в рамках использования Пользователем определенного Сервиса либо для оказания услуг Пользователю; 
— при использовании Пользователем Услуг компаний партнеров данные о Пользователе могут передаваться для обработки на условиях и для целей, определённых в пользовательских соглашениях об использовании дополнительных Услуг компаний партнеров; 
— передача предусмотрена российским или иным применимым законодательством в рамках установленной законодательством процедуры; 
— передача происходит в рамках продажи или иной передачи бизнеса (полностью или частично), при этом к приобретателю переходят все обязательства по соблюдению условий настоящего раздела применительно к полученной им персональной информации;
— в целях обеспечения возможности защиты прав и законных интересов Юми, его аффилированных лиц и/или третьих лиц в случаях, когда Пользователь нарушает условия лицензионного договора и/или требования действующего законодательства. 
Пользователь вправе отказаться от получения рекламной и другой информации без объяснения причин отказа путем информирования Юми о своем отказе посредством направления сообщения, составленного в свободной форме и отправленного на электронный адрес Юми: suр[email protected]
Информирующие сообщения о заказе и этапах его обработки отправляются автоматически и не могут быть отклонены Пользователем.

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

Как мы создавали сайт для клининговой компании

📅 25-05-2019 | Истории

Предыстория

Сайт для этой компании мы уже создавали ранее. Где-то пару-тройку лет назад.
Он быстро вышел в топ Яндекса по многим запросам. Он был создан на Joomla 3.

сайт для клининговой компании

Тексты для сайта мы разделили, я согласился написать штук 5 или 6 по своей схеме, остальные заказали у «SEO-копирайтера».
Решили протестировать чьи тексты работают лучше)

В итоге все мои тексты вышли в ТОП, а тексты копирайтера мы так ни разу в ТОПе не увидели.

Я нисколько не хвалюсь, просто я действительно тогда ответственно подошёл к текстам и семантическому ядру.

Ещё помогло что структура сайта была сделана простой и понятной. А шаблон был уникальный, создан с нуля.

В общем сайт был сделан и передан заказчику + даны рекомендации.

НО, владельцы сайтов они такие) 
Рекомендации не соблюдают, терпения у них нет, хотят чтобы было всё и сразу и всё в таком духе.

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

Владелец: «Эх, не нравиться мне заголовок в поиске, дай-ка поменяю…»

На самом деле: Яндекс проиндексировал изменения, но выдачу ещё не обновил.

Владелец: «Что-то страница не поднимается…, дай-ка я ещё поменяю…»

На самом деле: Снова Яндекс ещё не обновил базу, а уже новые изменения, снова переиндексация… 

В итоге от текстов осталось совсем немного моего авторства)

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

Я уж молчу сколько раз потом менялась структура сайта.
Главная под какой только запрос не затачивалась… Яндекс сам уже запарился под какой запрос продвигался сайт)

В итоге сайт растерял свои позции, и теперь уже там полная неразбериха.
На главной лендинг на SP Page Builder, на других страницах — обычный шаблон, ещё страницы лендинга, и т.д. 
Чёткой структуры нет.

Поэтому решили создать новый сайт на новом домене.

Анализ рынка

Без анализа рынка, поисковой выдачи и сайтов конурентов можно вообще не начинать создание сайта.
Он будет НЕ эффектвиный и НЕ конкурентно-способный.

Была изучена поисковая выдача по запросам: химчистка ковролина, — ковров, — на дому и т.д.
Смотрели именно органическую выдачу, не рекламу!
Выяснили сильные и слабые стороны конкурентов, и в оценили уровень конкуренции в общем.

анализ конкурентов

 

Начало разработки

Критерии были такие:

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

Поэтому решено было содавать собственную CMS под задачи, на PHP и MySQL.
Наработки по CMS уже были, поэтому время разработки немного сократится.

UPD: админка уже создана, основной функционал уже работает)

Продолжение следует.

Сделать сайт для клининговой компании

  • Цена договорная

    Дизайн-проект квартиры

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

    Анфиса К. Пискарёвский проспект, 1, Санкт-Петербург

  • 1 100 руб

    ТАРГЕТОЛОГ / ПРОГРАММИСТ: настроить Facebook Pixel…

    Дано: есть сайт, построен на платформе Shopify. Установлено два Пикселя. Не уверена правильно ли работает Пиксель, все ли правильно настроено. Пиксель на сайт устанавливался автоматически через интеграцию…

    Марина Р.

  • 7 000 руб

    Сделать визуализацию в 3д

    Кабинет офиса 38 м2. Фото, обмеры, пример в приложениии. Материалы и дизайн подобраны. Мебель та, что есть. Дополнительные материалы для работы отправлю на почту. Всего 3-4 рендера.

    Татьяна

  • Цена договорная

    Создание макета из картона

    Кукурузник У2, для конкурса песни- на сцену, "с человека"

    Наталья

  • 900 руб

    Оформить группу в вк

    Оформить группу сделать рекламные посты

    Софья Г.

  • Отправить ответ

    avatar
      Подписаться  
    Уведомление о