← Проекты для клиентов

Под ключДизайн, Laravel и Vue · 2026

Сервис ретуши фото

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

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

Роль
Дизайн, вёрстка, бэкенд, запуск
Стек
Laravel 12 · Vue 3 · Tailwind · MySQL
Сроки
Июнь – июль 2026
Кабинеты
Клиент, мастер, администратор

КлиентАнна5 монет

Заказ 1017 · 2 фотоЗавершён Принято

МастерДмитрийзаработок +200 ₽

Заказ 1017 с биржисдано за 18 мин Сдано

Админжурналдоля платформы +200 ₽

  1. −2 монеты списание за заказ 1017
  2. +200 ₽ начислено мастеру: 2 фото × 100 ₽
Одна сделка в трёх кабинетах: заказ на два фото, две монеты по 200 ₽, мастеру 100 ₽ за фото. Люди и фото выдуманы.
3
кабинета на одной платформе: клиент, мастер, администратор
7
статусов заказа и матрица допустимых переходов между ними
30
минут у мастера на заказ, потом он сам вернётся на биржу
24
часа у клиента на приёмку, дальше заказ принимается сам

Под ключ

От схемы экранов до писем, которые доходят

Работа шла этапами, каждый со своей приёмкой. После первого заказчик оставил отзыв, дальше просто шли вперёд.

  1. 01

    Проектирование и дизайн

    Структура, сценарии трёх ролей и дизайн всех экранов: публичных страниц, кабинетов клиента и мастера, админки.

  2. 02

    Вёрстка

    Сначала статикой на Vite и Tailwind, чтобы прожить интерфейс до бэкенда, потом перенос в Laravel и Vue.

  3. 03

    Бэкенд и кабинеты

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

  4. 04

    Запуск

    Сервер заказчика, HTTPS за прокси, сборка, миграции, почта, которая доходит до людей, и проверка каждого сценария.

1 этап завершен. Дизайн на высоте. Спасибо большое за проделанную работу. Идем дальше!

Заказчик на Kwork, отзыв к этапу «Проектирование и дизайн»

Жизнь заказа

Семь статусов и ни одного лишнего перехода

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

  1. Новый
  2. В работе
  3. Готово, ждёт подтверждения
  4. На доработке
  5. Проблема с фото
  6. Завершён
  7. Отменён

Заказ создан и ждёт мастера на бирже. Монеты уже списаны.

  1. null → newклиент создал заказ
  • ДоработкиТри доработки на заказ. Каждая открывает новую итерацию результата и даёт мастеру новые полчаса.
  • АвтоприёмкаЕсли клиент молчит сутки после сдачи, заказ принимается сам и мастер получает деньги. За два часа до этого клиенту приходит напоминание, ровно одно.
  • Срок мастераПолчаса на заказ и напоминание за десять минут до конца. Пропустил срок: заказ уходит обратно на биржу, а в рейтинг мастеру ставится одна звезда.
  • СпорыПроблему с фото разбирает админ: продолжить работу, попросить перезалить или отменить с возвратом монет.

Монеты

Монета вместо рубля, журнал вместо числа

Одна монета это одно фото. Клиент покупает пакеты, при регистрации получает две пробные, а за каждое фото в заказе списывается монета. Рубли считаются только целыми копейками.

Баланс не голое число, которое можно случайно перетереть: каждое движение пишется в журнал со своим типом и остатком после него, под блокировкой кошелька. Уведомление о платеже защищено трижды: уникальная запись события, уникальная задача на обработку и уникальная строка в журнале. Повтор уведомления второй раз монеты не начислит.

Баланс

2монеты

Новый клиент: две пробные монеты уже на счёте.

  1. +2Пробные монетыtrial_grant

Биржа мастеров

Кто первый нажал, того и заказ

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

Заказ 10181 фото · новый

Екатеринамастер

Взять в работуЗаказ ваш, срок 30 минут

Сергеймастер

Взять в работу409: заказ уже взят другим мастером

SELECT … FOR UPDATE на строке заказа: второй запрос ждёт первый, видит, что заказ уже не «новый», и получает 409 «Заказ уже взят другим мастером».

Биржа заказов мастера: новые заказы с превью фото, кнопки «Взять в работу» и «Открыть»
Биржа на демо-копии: превью фото, срочность, клиент и кнопка «Взять в работу».
Биржа заказов на телефоне

Деньги мастеров

Начислено, собрано в выплату, выплачено

Мастер зарабатывает в момент, когда клиент принял заказ: ставка за фото задаётся в админке. Админ собирает начисленное за период в одну выплату, и мастер получает уведомление, когда деньги ушли.

  1. 01Начислено

    Клиент принял заказ: мастеру начислено по ставке за каждое фото.

  2. 02Выплата за период

    Админ выбирает период и способ: начисления за него собираются в одну выплату и больше ни в какую не попадут.

  3. 03Выплачено

    Когда деньги ушли, выплата получает статус «выплачена», а мастер одно уведомление и запись в истории.

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

Админка

Платформа целиком на одном экране

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

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

Сводка платформы, выручка за 30 дней и заказы, которые требуют внимания.

Все заказы: фильтры по статусам, поиск по клиенту, мастеру и номеру, фото, монеты, оценка

Все заказы с фильтрами, поиском и пометками.

Проблемные заказы: причина, мастер, клиент и решение

Споры по фото: продолжить работу, попросить перезалить или отменить с возвратом монет.

Выплаты мастерам: период, фото, сумма, способ, статус

Выплаты мастерам за период: запланирована, в обработке, выплачена.

Платежи клиентов: пакет, сумма, способ, статус

Платежи клиентов за пакеты монет со статусами провайдера.

Мастера: рейтинг, выполненные заказы, доработки, жалобы

Мастера с рейтингом, нагрузкой, доработками и жалобами.

Журнал действий администраторов с пользователями

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

Обращения в поддержку от клиентов и мастеров

Переписка с клиентами и мастерами в одном месте.

Запуск

Один Laravel, два лица и сервер заказчика

Публичные страницы отдаются сервером, чтобы их видели поисковики, а кабинеты работают как приложение на Vue внутри того же Laravel. Один домен, одна сессия, никаких отдельных фронтенда и бэкенда.

Публичная частьBlade, серверная валидация форм, SEOВход, регистрация, восстановление пароляТексты страниц и FAQ из админки
Laravel 12заказы · монеты · оплата · биржа · выплаты · уведомленияSanctum: cookie-сессия для кабинетов
Кабинеты на Vue 3Клиент: заказы, баланс, поддержкаМастер: биржа, заказы, заработок, статистикаАдмин: всё остальное
  • Сервер за прокси.Сервер заказчика отдаёт сайт через nginx перед Apache. Laravel доверяет прокси и строит ссылки только по HTTPS, иначе куки и редиректы ломаются.
  • Сборка без Node на сервере.Фронтенд собирается заранее, на сервер уходит готовая сборка, зависимости ставятся без dev-пакетов, кеши конфигурации и маршрутов прогреваются.
  • Почта, которая доходит.Тестовое письмо прямо с сервера крупный почтовик отклонил как спам. Разобрались, а не гадали: почта домена жила у другого хостинга, и SPF разрешал отправку только его серверам. Решение: слать уведомления через SMTP того хостинга, тогда SPF проходит без единой правки DNS.
  • Каждый сценарий руками браузера.Перед сдачей девятнадцать сценариев прогонялись в браузере: вход, заказ, покупка пакета, удаление пользователей, приглашения, выплаты, поддержка. Плюс 73 автотеста: заказы и монеты, уведомления, контент.
  • Уведомления по вкусу.23 типа событий, и каждый сам выбирает, где их получать: в кабинете или на почту. Письмо уходит после коммита транзакции, и упавшая почта не ломает саму операцию.
  • Настройки без деплоя.Ставка мастера, лимиты фото, срок автоприёмки, число доработок и напоминания меняются в админке. У каждого начисления остаётся ставка, по которой оно сделано.

Кабинет клиента

Заказ за минуту, результат в кабинете

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

Страница заказа: исходные фото, комментарий, результат, детали заказа и мастер
Страница заказа: исходники, результат, доработки и мастер с рейтингом.
Рабочая область клиента на телефоне
Баланс и тарифы на телефоне
Заработок мастера на телефоне

Что я вынес из проекта

Сервис работает у заказчика. Название и адрес по моему решению не указываю.

  1. Деньги считаются журналом.Баланс как сумма движений с уникальными ключами переживает и двойные уведомления, и ошибки в коде.
  2. Правила заказа в одном месте.Матрица переходов отвечает на вопрос «а так можно?» раньше, чем его задаст пользователь.
  3. Под ключ значит до письма во входящих.Запуск заканчивается не на деплое, а когда уведомления реально доходят до людей.
Следующий проектПервозданная Россия

Давайте знакомиться

Хорошие проекты
начинаются
с разговора.

Нужен технический партнёр, помощь команде или решение для рабочего процесса? Расскажите, что хотите изменить — обсудим, чем я могу помочь.

@work_ilyaЛично мне в Telegram
Илья Болясов
Илья БолясовРазработчик. Технический партнёр.