Talana Labs делает продукты, которыми люди пользуются каждый день, чтобы интернет работал так, как должен. Продуктов несколько: часть связана в общую сеть, часть развивается самостоятельно.
Ты попадёшь в продуктовую команду одного из направлений. Продукт живёт в Telegram — Mini App плюс бот: пользователь выбирает услугу, оплачивает её с внутреннего баланса, получает результат и управляет им прямо в мини-аппе. Всё развивается быстро: в бэклоге одновременно находятся и новые фичи, и задачи по улучшению кодовой базы.
Работа идёт под руководством тимлида: он расставляет приоритеты, проводит ревью и помогает в спорных ситуациях. После постановки макрозадач декомпозиция, защита решения, реализация и доведение до продакшена остаются на тебе. Нужен человек, который самостоятельно ведёт фичу от схемы БД и миграции до рабочего экрана в Mini App в уже существующей кодовой базе.
AI (Cursor, Claude или другой) у нас — привычный рабочий инструмент, и пользоваться им нужно. Но архитектуру на аутсорс AI-моделям не отдают: диффы проверяешь перед отправкой на ревью, существующие абстракции не обходишь и не коммитишь то, чего сам не понимаешь. На ревью решение защищаешь сам, а не ссылаешься на AI.
Чем предстоит заниматься
Вести фичи целиком: от схемы БД и миграции до экрана в Mini App в существующей кодовой базе.
Разрабатывать новые пользовательские и административные фичи.
Улучшать кодовую базу: проводить рефакторинг, выравнивать абстракции, устранять прежние костыли.
Исправлять баги, в том числе на стыке оплаты, внешнего провайдера, фронтенда и бэкенда.
Профилировать узкие места: запросы, рендеры, очереди, синхронизацию данных с провайдером.
Писать тесты (модульные, интеграционные, при необходимости нагрузочные) как обязательную часть работы над фичей.
Что мы ожидаем
Уровень
Senior. Middle, Junior и Intern на этой позиции не рассматриваем.
TypeScript
Уверенное владение TypeScript: дженерики, discriminated unions, сужение типов, работа в strict-режиме без обхода типизации через as any.
Умение читать и развивать чужой модульный код, а не переписывать слой под себя в первом же PR.
Git: осмысленные коммиты, понятные PR, умение разрешать конфликты в монорепозитории.
Backend
NestJS: модули, DI, guards, pipes, interceptors, фоновые processors.
PostgreSQL на практике: транзакции, уникальные ограничения, индексы по делу, статусы сущностей, идемпотентные вебхуки, понимание того, что произойдёт при повторной доставке события.
Query builder / SQL: готовность работать с query builder без ORM.
Интеграции с внешними HTTP API: подписи / HMAC, пагинация, маппинг внешней модели во внутреннюю, таймауты и обработка ошибок.
Очереди (BullMQ + Redis) и понимание того, чего нельзя делать синхронно в HTTP-запросе.
Frontend
React: хуки, контекст, store.
Маршрутизация (React Router), серверное состояние (TanStack Query).
Vite, Tailwind + shadcn/ui, аккуратная вёрстка под мобильный WebView.
Тесты UI-логики (Testing Library / Vitest или аналоги), готовность внедрить тестовый контур, если его ещё нет.
Понимание экосистемы Telegram как продуктового канала: Mini App и бот.
Что для нас важно в работе
Общаться конструктивно: если с чем-то не согласен, приходишь к тимлиду с аргументами, а не молча нарушаешь конвенции.
Поддерживать качество: типы, понятные PR, тесты на рискованные места, отсутствие мёртвого кода.
Принимать решения в условиях неполного ТЗ, не откладывать задачу на неделю ради анализа и не ждать идеальной спецификации.
Отличать решение на час от решения на несколько дней.
Самостоятельно эскалировать блокеры: неясные продуктовые требования, пробелы в доменной модели, финансовые риски, сомнения в гайдлайнах.
Писать коротко и по делу: контекст, варианты, рекомендация, что уже сделано.
Не пропадать в задаче — статус должен быть понятен без дополнительных расспросов.
Защищать свои технические решения на ревью: отвечать на вопросы и задавать свои.
Закрывать задачу целиком — и фронтенд, и бэкенд, когда это необходимо.
Кого мы не ищем
Frontend-only или backend-only разработчика без готовности закрыть соседний слой в рамках той же задачи.
Человека, которому нужна пошаговая постановка каждой задачи.
Того, кто месяцами проектирует сервисы, но не доводит фичи до мержа.
Разработчика, который каждое изменение начинает с внедрения нового фреймворка, ORM или state-менеджера.
Тех, кто игнорирует гайдлайны, не обсуждает решения с тимлидом и не умеет их защищать.
Исполнителя, который бездумно переносит сгенерированный AI код без понимания его работы.
Тех, кто считает тесты, Docker и работу с манифестами Kubernetes чужими задачами.
Формат работы
Стек: Nx + pnpm-монорепозиторий, TypeScript strict, Node.js / NestJS, React + React Router + Telegraf + TanStack, PostgreSQL, Docker, Kubernetes (самостоятельно настраивать не придётся — есть DevOps, но иногда разбираться в инфраструктуре необходимо).
Режим: удалённая работа, асинхронное взаимодействие с понятными статусами задач. Регулярная связь с тимлидом, вопросы решаются по ходу работы.
Язык: русский (рассмотрим и кандидатов с хорошим английским). Интерфейс продукта — RU / EN.
Стек и домен уже заданы: ты их развиваешь, а не выбираешь заново.
Без зоопарка микросервисов: несколько отдельных процессов с общей доменной моделью и shared-пакетами.
Есть гайдлайны разработки (архитектура, стиль, границы модулей, работа с AI, Git). Их нужно читать и соблюдать. Если гайдлайн мешает решению задачи, это повод обсудить его с тимлидом, а не молча обойти.
Что предлагаем
Оклад на уровне рынка с пересмотром по итогам Performance Review.
Команду сильных инженеров, сплочённых идеей создания цифровых продуктов.
Удалённую работу, полный рабочий день с гибким графиком.
Компенсацию расходов на обучение.