Первый день нового проекта — что я ставлю и в каком порядке
11 сентября 2026 г.
4 мин
18

Первый день нового проекта — что я ставлю и в каком порядке

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

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

Правило, по которому я выбираю

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

Не «это современно». Не «так все делают». Не «в вакансиях требуют». Причина. Вроде «я умею это чинить в три часа ночи» или «если авторы завтра разойдутся, я останусь с работающим кодом».

Звучит банально, но это сито отсеивает 70% того, что хочется поставить. Попробуйте ответить на вопрос, зачем в вашем проекте лежит половина зависимостей.

Фронтенд

Next.js, React, TypeScript. Причина простая: я знаю, как это ломается.

Это, кстати, недооценённый критерий. Все выбирают инструмент по тому, как он работает, а надо выбирать ещё и по тому, как он падает. У Next.js есть набор своих неприятных мест - кэширование, которое живёт своей жизнью, сборка, которая иногда требует снести .next и начать заново, граница между серверным и клиентским кодом, об которую регулярно спотыкаешься. Я все эти грабли знаю по именам. С новым фреймворком я бы знакомился с его граблями заново, и это происходило бы ровно в дедлайн.

TypeScript даже не обсуждается. Не ради «типобезопасности» из статей, а ради очень приземлённой вещи: через полгода я открою собственный код и не буду гадать, что лежит в этом объекте. Проект без типов - это проект, который ты пишешь дважды.

Стили - CSS Modules.

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

Причина: я хочу, чтобы разметка читалась. Когда у элемента 14 утилитарных классов в строке, я вижу инструкцию по сборке, а не структуру страницы. Мне важнее открыть компонент через полгода и за 5 секунд понять, что тут происходит, чем сэкономить эти пять секунд при написании.

Плюс с модулями у меня нет ещё одного слоя, который надо обновлять и конфигурировать. CSS я и так знаю.

Это не универсальный совет. В команде фронтендеров с общей дизайн-системой я бы, наверное, решил иначе.

Состояние - по возможности никакого.

Главный вопрос не «Redux или что-то полегче», а «нужно ли вообще хранить это на клиенте».

Фильтры, поиск, пагинация - в URL. Это не хитрость, это бесплатно даёт рабочую кнопку «назад» и возможность прислать коллеге ссылку на то, что ты видишь. Данные с сервера - на сервере, в серверных компонентах, а не в сторе, который потом надо руками синхронизировать с реальностью.

После этого остаётся совсем тонкий слой: открытые модалки, черновик формы, корзина. На это хватает одной маленькой библиотеки, а часто и обычного контекста.

Глобальный стор в проекте на две недели - это почти всегда не решение задачи, а перенос архитектуры с прошлой работы.

Бэкенд

Node.js и PostgreSQL. Тут коротко, потому что про постгрес я уже писал отдельно и повторяться не хочу.

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

Каждый элемент инфраструктуры должен сначала доказать, что он нужен. Доказательством считается медленный запрос в логе, а не ощущение, что «в продакшне так принято».

Деплой

Свой VPS, nginx, PM2.

Знаю, что сейчас принято иначе - одна кнопка, и оно само. Я пробовал, и для многих задач это правильно. Но я предпочитаю оставаться на своем.

Когда всё лежит, я могу зайти по SSH и посмотреть. Не написать в поддержку, не читать статус-страницу - зайти и посмотреть.

Порядок - вот что важнее списка

Первый день я трачу не на компоненты. Я трачу его на то, чтобы пустая страница с текстом «привет» открылась на боевом домене.

Пустая. С доменом, сертификатом, процессом в PM2, конфигом nginx и базой, в которую приложение умеет сходить. Ноль функциональности, весь путь до продакшна пройден.

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

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

Интерфейс - последним. Он единственный, что можно переделать за вечер.


Настоящее преимущество нового проекта заключается в скорости, а не в новизне.