
Без агентского прайса и полугода ожидания. Делаю сам, показываю процесс, называю цену до старта.
Сначала решаем, кто придёт и зачем. Потом — что он должен увидеть в первые три секунды. И только потом рисуем. Обратный порядок почти не работает: получается галерея, которой любуются и уходят.
Что и в каком порядке отвечает на вопросы посетителя
Дизайн, который усиливает ответ, а не украшает его
После запуска смотрим на цифры и правим по ним
Полный цикл: исследование, прототип, дизайн, код, запуск и поддержка. Один ответственный на всём пути.
Страница конференции, форума, концерта или открытия. Задача одна — собрать регистрации участников до даты события. Программа, спикеры, площадка с картой, форма записи с подтверждением и выгрузкой списка. Дедлайн жёсткий, поэтому такие проекты я беру в работу вне очереди и запускаю за 7–14 дней.
Форма с подтверждением и выгрузкой списка участников
Расписание, спикеры, площадка с картой проезда
Запуск к дате события, вне общей очереди
Не витрина скриншотов, а разбор: задача, решение и то, чего заказчик никогда не увидит — но за что платит.
Проект пришёл с чужого подряда: сервер уже был взломан, каталог двоился, проданные машины висели на витрине. Сначала — закрыть дыры и починить данные, потом продавать.
Красивый экран умеют нарисовать все. Разница видна там, куда заказчик не заглядывает: вес страницы, поведение формы при сбое, что происходит при наплыве.
Первым делом обнаружилось, что сервер уже был скомпрометирован через известную дыру в движке сайта. Обновил движок до версии, где её закрыли, и перевёл сборку на поддерживаемую версию среды — прежняя перестала получать обновления безопасности. Заодно убрал строку, которая печатала пароль от базы данных в журнал сервера: любой, кто получал доступ к логам, получал и доступ к базе.
Сервер стоит в России и не может достучаться до Telegram напрямую. Раньше это означало, что при любом сбое связи заявка просто оставалась в базе и о ней никто не узнавал. Сделал очередь: сайт складывает задание, бот забирает его сам и подтверждает доставку. Если бот упал на полпути — задание вернётся в очередь через минуту, всего попыток восемь с нарастающими паузами. А если активных менеджеров вообще нет, заявка уходит в запасной чат, а не растворяется.
В каталоге около ста тысяч машин, и адрес страницы можно было подобрать так, чтобы сервер попытался собрать их все разом — сайт ложился от одного запроса. Теперь за раз отдаётся не больше шестидесяти карточек, а любые кривые значения в адресе дают обычный список вместо ошибки. Проверил руками: запрос на 99 999 машин отдаёт 60, попытка подсунуть команду базе данных — обычную выдачу.
Площадка-источник отдаёт одну и ту же машину дважды — под номером объявления и под внутренним номером автомобиля, — а прежний сбор данных послушно заводил две карточки. Каждая четвёртая машина в каталоге двоилась. Убрал 38 459 лишних карточек, предварительно сохранив их копию, и закрыл саму причину тремя проверками при записи. Сейчас в каталоге 94 647 машин и 3 дубля.
Машину продали — а карточка висела на сайте вечно: проверка доходила только до новых объявлений, а до опубликованных не возвращалась никогда. Клиент звонил по машине, которой уже нет, и разговор начинался с извинений. Теперь каждое объявление переспрашивается у источника не реже раза в трое суток, и проданное уходит с витрины без участия человека.
Видео с YouTube подключались напрямую: плеер грузился вместе со страницей и сообщал YouTube о визите, даже если человек не собирался ничего смотреть. Заменил на кадр из ролика с кнопкой — плеер подключается только по нажатию. Обращений к YouTube до нажатия стало ноль вместо двух, и до запуска ролика посетителю не ставится ни одной чужой куки. Для сайта, который обязан объяснять в политике, какие данные собирает, это не мелочь.
В нише, где смету называют после работ и она вырастает вдвое, главный аргумент — фиксированная цена. Сайт должен считать её сам и до замера.
Красивый экран умеют нарисовать все. Разница видна там, куда заказчик не заглядывает: вес страницы, поведение формы при сбое, что происходит при наплыве.
Блоки появлялись по мере прокрутки — красивый приём, но держался он на браузерном механизме, который иногда просто не запускается. Проверил и увидел: в такой ситуации ни один из шести блоков не появлялся вообще, страница ниже первого экрана оставалась пустой навсегда. Добавил независимую проверку по таймеру раз в секунду и отдельное правило на случай отключённых скриптов. Теперь блоки появляются даже там, где браузер не подаёт ни одного сигнала.
Заявка уходит двумя путями подряд: сначала в служебного бота, а если он не ответил за четыре секунды — напрямую в Telegram. Если не сработал ни один путь, посетитель видит честное «не отправилось, позвоните», а не поддельное «спасибо»: текст заявки при этом целиком записывается в служебный журнал на сервере, откуда его можно достать руками. Проверил именно поломанный сценарий — сайт ответил ошибкой и сохранил заявку, а не сделал вид, что всё хорошо.
В форме есть невидимое поле-ловушка: человек его не видит и не трогает, автоматический сборщик заполняет всё подряд и выдаёт себя. Отдельно сервер сам перепроверяет имя, телефон и согласие — на слово браузеру не верит. И с одного адреса принимается не больше пяти обращений за десять минут. Проверено вживую: обычная заявка проходит, заявка робота отклоняется, шестая подряд получает отказ.
На экране шириной 375 точек главная занимала 542 — её можно было таскать вбок, часть текста уходила за край. Виновата была широкая таблица цен: в узкой раскладке она распирала всю страницу вместо того, чтобы прокручиваться внутри себя. Отдельно не помещалась шапка с названием и телефоном. Починил и перепроверил семь страниц на четырёх ширинах, от очень узкого телефона до большого монитора, — сдвига нет нигде.
Есть измеримая норма: насколько текст должен отличаться от фона, чтобы его было видно людям со слабым зрением и на солнце. Посчитал все сочетания цветов на сайте и нашёл четыре, которые норму не проходили. Худший случай — жёлтая надпись на призывной полосе в тёмной теме: она отличалась от фона в три раза меньше нормы и практически исчезала. Заменил цвета, теперь все сочетания проходят норму с запасом.
Все страницы собраны заранее, на сервере лежат готовыми файлами — на запрос он тратит около двух тысячных секунды и занимает 55 МБ памяти. Ни шрифты, ни счётчики, ни картинки не тянутся со сторонних сайтов: если у Google или у рекламной сети что-то ляжет, на скорость страницы это не повлияет никак. Отдельная причина так делать — на прошлом сайте заказчика сборка однажды сорвалась ровно из-за того, что не удалось достучаться до шрифтов Google.
Собственный сайт студии: показать метод, назвать цены до разговора и принимать заявки так, чтобы ни одна не потерялась.
Красивый экран умеют нарисовать все. Разница видна там, куда заказчик не заглядывает: вес страницы, поведение формы при сбое, что происходит при наплыве.
Раньше сообщение уходило в Telegram напрямую. Одна заявка с текстом, который Telegram не принял, — и она пропадала молча. Так потерялось девять. Теперь заявка сначала пишется в журнал на диске и только потом отправляется, а неудачные попытки повторяются по расписанию.
Ролик первого экрана весил 3 МБ, и внутри сидела звуковая дорожка на 256 кбит/с — при том что видео на сайте всегда без звука. Перекодировал в два формата без звука: 1947 КБ стали 176 КБ до подгрузки ролика.
Заголовок кэширования приходил сдвоенным: сначала «не хранить», следом «хранить месяц». Браузер берёт первое. Сайт скачивался заново при каждом визите, и заметить это можно было только по заголовкам ответа.
Цена лежала строкой в четырёх файлах — прайс и страницы услуг на двух языках. Расхождение между ними стоит доверия дороже опечатки. Теперь это числа в одном месте, а рубли и доллары выводятся из них.
Скрытое поле, которого человек не видит, и отметка времени: живой человек не заполняет форму за две секунды. Плюс ограничение частоты обращений на сервере. Ничего из этого не видно и не мешает — но заявки не тонут в мусоре.
Первый созвон — бесплатный разбор вашего текущего сайта: где теряются заявки и что чинить в первую очередь. 30 минут, из них вы выходите со сметой и планом — даже если делать будете не со мной.
Скидываю прогресс по мере его выполнения — вы видите, что происходит, и можете вмешаться до того, как станет поздно.
30 минут созвона. Разбираем задачу, аудиторию, конкурентов. Выхожу со сметой и планом.
1 деньПрототип экранов, тексты, логика заявок. Согласуем до дизайна — правки здесь бесплатны.
2–4 дняКонцепт первого экрана, потом весь макет. Анимации показываю прототипом, а не словами.
5–10 днейКод, анимации, адаптив, скорость 90+ в PageSpeed, подключение CRM и аналитики.
5–14 днейДомен, хостинг, метрики, инструкция. Месяц поддержки в подарок.
1–2 дняСозвон-бриф: разбираем задачу, я возвращаюсь со сметой и планом. Смета фиксируется до старта и не растёт по ходу. Бесплатно и ни к чему не обязывает.
Без посредников между вами и тем, кто делает работу. Отсюда и сроки, и цена, и то, что правки не упираются в регламент.
| Агентство | Я | |
|---|---|---|
| Кто отвечает за результат | Аккаунт-менеджер | Я сам, без посредников |
| Цена известна | После двух встреч | До старта, есть калькулятор |
| Цена лендинга | 150–300 тыс ₽ | от 63 000 ₽ |
| Срок лендинга | 1,5–3 месяца | 10–14 дней |
| Правки в дизайне | По регламенту | Пока не понравится |
| Кто пишет код | Подрядчик подрядчика | Я |
| Что после запуска | Новый договор | Месяц поддержки включён |
На рынке цену не показывает почти никто. Здесь — показываю. Собранная смета уедет вместе с заявкой, повторять её в переписке не придётся.
Вилка ±20%. Точную цену называю после 30-минутного брифа — бесплатно и без обязательств.
Если вопроса нет в списке — напишите в Telegram, отвечу по существу и предложу следующий шаг.
Вилка видна в калькуляторе выше — он считает по типу проекта, глубине дизайна и набору интеграций. Точную сумму называю после получасового разбора задачи: угадывать до него — значит ошибаться в обе стороны. Смета фиксируется до старта и не растёт по ходу.
Поэтапно, а не всё вперёд. Смета фиксируется до старта и делится по шагам процесса: часть при старте, остальное — по принятым этапам. В любой момент видно, что сделано, что принято и что оплачено. Точная разбивка — в смете после брифа.
Вопрос правильный, и закрыт он устройством работы, а не обещанием. Доступы к домену, хостингу и коду у вас с первого дня — сайт нельзя «взять в заложники». Каждый этап заканчивается артефактом на руках: бриф, прототип, макет, рабочая сборка. Стек стандартный, без самодельной магии — его подхватит любой разработчик. А болезнь сдвигает срок на дни, и вы узнаёте об этом сразу, а не в день сдачи.
Да, так приходят чаще всего. Структуру собираю сам на брифе, тексты пишу тоже — это отдельная строка в смете. От вас нужно понимание, кто ваш клиент и чем вы лучше соседей. Остальное вытащу вопросами.
Next.js и TypeScript, вёрстка на Tailwind, размещение на своём сервере. Не конструктор: сайт не привязан к чужой подписке, его можно развивать и переносить. Если задача проще — скажу прямо и предложу решение дешевле.
Подвоха нет, есть арифметика. В счёте агентства вы оплачиваете офис, продажника, аккаунт- и проект-менеджера и маржу студии — сама работа занимает меньшую его часть. Здесь вы платите только за работу: те же этапы делает один человек, без передачи по цепочке. Обратная сторона честная — я не возьму пять проектов одновременно, поэтому и существует очередь.
Ничем, если нужен сайт на пять экранов, который не жалко выбросить через полгода. Разница видна дальше. За двадцать тысяч собирают на шаблоне: чужая тема, десяток плагинов, конструктор с подпиской — и переделать в таком одну секцию дороже, чем сделать заново. Здесь код пишется под задачу, доступы ваши с первого дня, вес страницы измеряется, а форма проверена на живых заявках. И есть кому написать через полгода: это моя работа, а не подработка между сменами.
Первый месяц поддержки включён: правки текстов, мелкие доработки, слежу за метриками. Дальше по желанию — подписка на развитие или разовые задачи. Доступы к домену, хостингу и коду ваши с первого дня.
Вам. Макеты, тексты, код и все доступы передаются полностью. Я оставляю за собой только право показать работу в портфолио — и то, если вы не против.
Концепт первого экрана показываю до того, как отрисован весь макет. Если направление не то — меняем на этом шаге, он для того и нужен. Правки в дизайне не ограничены счётчиком: работаем, пока не станет хорошо.
Первый созвон — бесплатный разбор вашей задачи или текущего сайта. Из него вы выходите со сметой и планом, а что делать дальше — решаете сами.
Закажете сегодня — сайт готов к14 октября