dinkaapp.ru
Давайте сразу так, в этой статье не будет заумных слов, и кода, это лишь история о том, как у меня получилось создать нечто большее, чем просто написание кода.
На самом деле, я очень удивился тому, что в прошлой статье, 3 человека зашли зашли ко мне в соц сеть и создали свои аккаунты, спасибо вам, безумно было приятно. На самом деле, когда я писал ту статью, я думал, а ладно, напишу, может кому нибудь понравиться задумка, и люди и в правду оценили, и на сайте, и друзья, так сказать, самые первые тестировщики, но сейчас не об этом.
3.5 месяца назад, я думал что закончил то, что начал в сентябре 2025 года, но ошибался, была проделана коласальная работа над испарвлением ошибок, прошел почти 1 год сольной разработки(и очент сильно не хватает опыта работы в команде), и скажу вам честно, до того момента, я вообще ничего не понимал в разработке(за исключением html/css), от слова совсем, и первое что мне пришло в голову, а дайка я создам свою соц сеть. На то время я работал в колледже сис.админом, и подумал, ну сейчас поиграюсь и брошу эту затею. Хех. Не бросил. Мне на столько понравилась сама концепция, люди которые работают в найме в разработке, не смогут понять этого кайфа, лишь единицы и то не все, скажу так, я кайфнул не от самого создания своего продукта, или написания кода, я кайфовал от того, что ставлю сам себе задачи, ставлю дедлайн к которому я должен успеть сделать то или иное, наверное благодаря этому у меня и получилось создать то, что я сейчас имею. Грубо говоря, я сам себе и Team Lead/DevOps/Frontend'er/backend'er, да и просто обычный человек.
Сентябрь 2025.
В прошлой статье я очень плохо расписал в целом стек технологий который я использовал.
Большинство наверное знают или слышали про Google Firebase, я начал с нее.
Скачал какой то шаблон готовый по типу next.js Admin Dashboard, почему именно такой? Да хз, по дизайну понравился, и тут начинается самое интересное, я гуглил абсолютно все что можно, от банального как установить next.js на комп, до того как запустить свой локальный сервер, что бы увидеть дизайн проекта.
Когда я впервые открыл открыл код в vscode, установил расширения, что бы ошибки показывалась, код подкрашивался. Мне повезло, в готовой сборке которую я скачал, уже стоял tailwindcss, и я сразу начал работать по нему, я и не представлял на сколько это удобная штука, буквально все пишется в одну строчку и стили все подтягиваются.
Примерно так продолжалось до ноября, я по гайдам и ИИшке, гуглил и спрашивал, а как в Firebase сделать это и вот это, что бы это появилось там? Выдавался готовый код, и самое верное решение которое было, не копировать его, а писать ручками, так сказать, руки набить, что бы понимать что и как и почему так. По итогу я так поработал, мне понравилось, было интересно в целом поработать на таком стеке бессерверных технологиях. Удобство 10/10.
Ноябрь 2025.
Я уже +- начинаю понимать что и как работает, что за что отвечает, и мною было принято решение, продолжать работать в этом же скачанном проекте.
Это была 1 ошибка. Надо было с нуля создать новый чистый проект. Но по итогогу, после того как я выбрал стек технологий, а мне очень сильно понравилась сама технология serverless, я начал искать что у нас есть похожее в рунете. Было два выбора, либо яндекс, либо вк. ВК я презираю, по этому было принято решение пробовать на яндексе.
Начинаю изучать новые технологии, в Firebase все было легко и просто, там весь код подтягивается у тебя из next'a, в яндексе такой халявы нет, я когда открыл dashboard яндекса. Честно. Я ПРОСТО АХУЕЛ. Ничего не понятно, сотни разных сервисов. Захоидишь внутрь сервера, еще больше ахуеваешь.
Я кое как нашел serverless container, и начал пробовать писать там. Само собой открываешь документацию, + спрашиваешь в телеграмм чате, в чем могут быть ошибки и тп. Поддержка Yandex Cloud на высоте. Отвечают очень быстро и стараются оперативно решить проблему.
По итогу я написал первую функцию, получения фото профиля. И казалось, что может пойти не так? На фронте уже написана легкая оболочка принятия фото, загружаю туда фото, ошибка, думаю что не так, на тот момент логами я не пользовался и не знал что это такое. Да чего греха таить, я Git'ом начал пользоваться только в январе, на праздниках, до этого у меня была папка(где нормальный код, который работает, и папка в которой боевой код, и когда боевой код был готов, он отправлялся в папку с нормальным кодом), да да я.
Вернемся к ошибке, долго я тогда голову ломал, но как оказалось потом, я просто тупой который не знал, что фото должно иметь свое место, ибо куда бы оно загружалось? Я прямо в Yandex Cloud открыл для себя новый сервис S3. Казалось бы, что может пойти не так?
Да оказывается может, я тогда башку сломал и думал, да как мне соеденить то S3 и функцию? Вроде как потом решение нашел в документации и с помощью ИИшки, ну думаю сейчас все заработает. И что вы думайте? Снова ошибка, думаю, что опять не так, и как оказалось, БД, не то что бы у меня ее не было, она была, но таблицы в ней я забыл создатать с полями, что бы БД хранился адрес на фотку. В декабре я уже довел это до ума. И получилось вот так. Да фотки из прошлого поста, но не важно.
Тут у меня уже фотки грузились в S3. Если кому интересно, вот так выглядит S3 в Яндекс клауде.
Само собой, папки за вас никто не создаст. Было все это сделано с целью перфекуционизма. Мне не нравился тот хаос который творился, потому что там все идет не в хронологическом порядке. По этому я сделал разделение на подпапки. Аватар, Баннер, фото галлереи.
И самое главное. После того как у меня это получилось сделать и фотки стали грузиться. Я не пошел делать дальше новые фичи, я стал эту доводить до ума.
Декабрь 2025.
Примерно в декабре в начале, у меня уже готовая фича с загрузкой фото. Перовое что я пошел делать, это смотреть то, какой итоговый размер получилась фотка. С учетом того что сама фотка весила примерное 2-3мб, после оптимизации изображения на фронте в webp фото весило примерно 300-400кб, при сжатии в 90%. Качество особо не портиться, но вес фото значительно падает.
Но, как говориться, доверяй но проверяй. Я пошел делать фичу в serverless функцию. Она по сей дей там и работает.
Что было самым сложным? Sharp, я матерился на всю квартиру, мне кажется меня весь дом слышал. Эта шляпа не хотела вставать класическим способом, добавления в package.json в функции, и выдавала вечные ошибки.
Это просто отродие дьявола, которые работает только в linux среде. На тот момент, у меня хоть и был мак, но я не мог понять как мне сделать так, что бы я смог загрузить Sharp в яндекс. По итогу ИИшка подсказала, и то не сразу, она тоже ниуя не понимала что я хочу от нее хех.
Но раза с 10 мы поняли друг друга, она скинула команды, которые виртуализируют мое рабочее окружение под debian, и я смог скачать готовый sharp и закинуть его в функции. Если вы спросите какие команды? Я вам уже не отвечу на это, это было в декабре, и работает по сей день, после того как я все это настроил, мною было приянто решение, не трогать эту функцию пока прям ПИЗДЕЦ не наступит. По итогу сейчас все работает и достаточно успешно. Я конечно еще подправил пару моментов там, что бы Sharp просто так не использовался, только в том случае, если с фронта приходит сырое фото в виде jpg или png, которое весит 8-9мб.
Но до редактирования этого, фото 52мб, сжалось до просто безумно космических 3мб, за счет того, что фронт сделал свое дело, и Sharp просто добил это фото. Качество осталось такое же, но фото стало весить на 90% меньше, исходного размера.
Январь 2026.
Январь начался интересно, тут я уже добавил витрину, от которой правда потом и отказался. Но в целом, как опыт тоже было интересно.
На самом деле, январь выдался довольно скучным месяцем. Нового особо ничего не вводил, фиксил старые баги, которые копились долго, и местами правил мобильный код.
Февраль 2026.
Тут я уже активно внедряю новую фичу подписок, делаю новую функцию в Яндексе, для получения подписок. В целом тоже особо ничего интересного. За исключением того, что активно начинаю думать над дизайном платформы. И проработкой авторизации.
Март 2026.
Авторизация. Это пожалуй одна из самых сложных частей которая вообще есть. Потому что эти ебаные CORS политики. Проработка refresh и access токенов, что бы пользователя не выкидывало из приложения. Эта бурмалда, заняла у меня весь март и весь апрель, что бы это все работало именно так, как и было задуманно, почему так долго? Потому что, как оказалось, Serverless функции не знают друг о друге, и там происходит ебейший расинхрон данных. Условно, у тебя может быть 5 подписчиков, и на тебя подписались, Бд данные обновила, выслала функциям, а функции такие, а у нас кеш тут старый, обновим как обновим.
По итогу, я кое как доделал авторизацию, и начал работать над дизайном.
Май 2026.
Продажа ноута и сборка пк, весь май я собирал себе пк, по этому возможности работать не было. Да и в целом на работе была запара. По этому, комп у меня появился только в июне.
Июнь 2026.
Весь июнь я просидел проиграл в игры. Я думаю это уже давала знать усталость. Я работаю на складе. И после скалада, с декабря по май, я работал без отпуска, выходные это лишь суббота/воскресенье, которые все уходили в разработку, а в будние дни вечерами кодил. По этому, я сделал себе мини отпуск, отдых от кода, бд, функций и тп.
Я просто сидел и играл.
Июль 2026.
Тут уже открылось новое дыхание в разработке, оценил все что я сделал, весь проделалнный путь. Нашел мелкие баги, нашел крупные баги. Сделал общий кеш для фронта и бека. Кстати о беке.
Помните я говорил о том, что меня бесит дикой рассинхрон в serverless? Так вот мной было приянто решение уйти окончательно с него, и на яндексе я оставил лишь бд и хранилище.
Было принято решение взять обычный vds сервак, он скромный сейчас, но в целом пока юзеров нет, хватает за глаза.
Весь код который был написал на функциях, был перенесен на сервак, теперь никаких холодных стартов, никакого рассинхрона и тп. Единственное, с чем я реально долго боролся это настройка Nginx и настройка PM2, но в целом за недельку справился.
Авнуст 2026.
Тотальная переделка дизайна.
Понравится вам дизайн или нет. В целом не важно, я делал под свое удобство. ПК версия выглядит очень сочно как по мне. Все очень хорошо гармонирует между собой. На телефоне тоже удобно, но не так силньно, все таки мобильные браузеры не заточены под соц сети. Там до сих пор есть баги, которые я так и не смог пофиксить.Но в целом если среди вас найдутся энтузиасты, готовые работать за идею, я был бы не против помощи в создании мобильных приложений.Спасибо что дочитали статью. Если вам интересно все таки больше про код послушать, или завалить какашками на сколько у меня все говняно написанно(но зато работает, если работает, не трогай), милости прошу в комментарии.
Стек технологий который используется. Ах да, еще были сделаны чаты для пользователей. Забыл про этом сказать. Но да ладно.
АУТЕНТИФИКАЦИЯ
- JWT токены с ротацией
- HttpOnly куки
- Refresh token механизм
- Авто-обновление токенов при 401
- Токен версии
ИНФРАСТРУКТУРА
- Yandex Cloud Functions
- YDB база данных
- S3 хранилище для фото
- Docker контейнеризация
- CORS настройки
- Rate limiting
- WebSocket-сервер (реалтайм-события, presence)
ФРОНТЕНД
- Next.js 13
- Адаптивный дизайн (мобилки, планшеты, десктоп)
- Кэширование (несколько уровней)
- Шиммеры и скелетоны
- Порталы для модалок
- Кастомные хуки
ФУНКЦИОНАЛ СОЦСЕТИ
- Лента подписок
- Профили пользователей
- Подписки/подписчики
- Лайки (с оптимистичным UI)
- Комментарии (с оптимистичным UI)
- Загрузка фото
- Редактирование профиля
- Поиск пользователей
- Витрина рекомендаций
- Личные сообщения в реальном времени (доставка, прочтение, статус "печатает...", presence)
ЗАЩИТА И ОПТИМИЗАЦИЯ
- Защита от XSS (HttpOnly куки)
- Защита от CSRF
- Оптимизация запросов
- Пагинация
- Кэширование на всех уровнях