Skip to content
Projects

ar-webcetera/nervion has 31 GitHub stars and 0 forks. GitHot measured 0 stars in 24 hours and +1 in 7 days. Last checked 2026-11-09 07:38 UTC. Last push 2026-11-02.

How these counts are measured

Открытый трекер задач и проектов для команд и агентств. Self-hosted, NestJS + Nuxt 3 + PostgreSQL.

Measured star growth

in 24h
0
in 7 days
+1
in 15 days
Update delayed
in 1 month
Update delayed

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original
Нервион

Нервион

Открытая система управления проектами и задачами для команд и агентств.

Self-hosted или облако. Канбан и задачи, тайм-трекинг и планирование загрузки, чат и звонки, база знаний, встроенная почта, свой git и медиатека живут в одном приложении. Российская замена Jira, YouTrack и зоопарка сервисов.

License: AGPL v3 Backend: NestJS Frontend: Nuxt TypeScript PostgreSQL

🚀 Живое демо · Сайт · Документация · Лицензирование


🚀 Живое демо

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

Демо-стенд наполнен реальными примерами: проекты с канбан-досками, задачи по колонкам, тайм-трекинг и отчёты, планирование загрузки, личные и групповые чаты, база знаний, встроенная почта с папками, свой git-репозиторий с ветками и уведомления. Заходите под демо-аккаунтом одним кликом и щёлкайте по разделам.

Что это

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

Подходит как полноценное импортозамещение Jira, YouTrack, Trello, Redmine для российских команд: разворачивается на вашем сервере (данные не уходят наружу) или берётся как managed-облако.

Возможности

  • 🗂 Задачи и проекты: канбан и список, личные проекты только для создателя, быстрое создание задачи через плюс в колонке, контекстное меню карточек с удалением, флажками и управлением дедлайном, единая лента комментариев и изменений задачи, постоянные коды NRV-ID с копированием по клику и поиском по коду или номеру, приоритеты, сторипоинты, дедлайны, подзадачи, связи между задачами с подтверждением отвязки, упоминания участников проекта, спринты, гибкие фильтры и сохранённые представления.
  • ⏱ Тайм-трекинг — таймеры со стартом и паузой, ручной учёт часов, статусы записей, привязка к задачам.
  • 📊 Планирование загрузки — недельные аллокации «план/факт» по сотрудникам и проектам: видно, кто чем занят и где перегруз.
  • 📈 Отчёты — сводки по времени и задачам в разрезе проектов и людей, выгрузка в XLSX с полным текстом описаний задач (до 32 000 символов на ячейку).
  • 💬 Чат и звонки — реалтайм-чаты (личные и групповые, с вложениями и голосовыми), голосовые и видео-комнаты на каждый проект с демонстрацией экрана (WebRTC / mediasoup). Скорость голосовых сообщений общая для всех плееров в чатах и редакторе, сохраняется в браузере после перезапуска приложения.
  • 📚 База знаний (вики) — дерево страниц с бесконечной вложенностью, богатый редактор (TipTap): заголовки, списки, таблицы, цитаты, блоки кода, картинки, чек-листы.
  • 📨 Встроенная почта — приём и отправка писем, несколько изолированных ящиков, пользовательские папки и спам-фильтры, повторная отправка недоставленных писем, статусы открытия/bounce/жалоб через Postbox, привязка писем к задачам через адреса вида task+ID@.
  • 🌿 Свой git-хостинг — репозитории внутри трекера: ветки, коммиты, диффы, дерево файлов и просмотр кода, привязка к проектам.
  • 🎬 Медиатека — командные видео и фото для проектов.
  • 🔔 Уведомления — web-push, оповещения об упоминаниях, назначениях и дедлайнах.
  • 🛡 Контроль и надёжность — роли и права доступа, журнал аудита действий, health-чеки и мониторинг внешних сервисов.
  • 📘 Документированный API — полное описание OpenAPI / Swagger из коробки (/api/docs).
  • 🏠 Self-hosted и облако — полный контроль над данными на своём сервере или managed-вариант под ключ.

CRM

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

Раздел /crm доступен администраторам и открывает единый канбан сделок. Вкладки «Компании» и «Контакты» содержат справочники. У сделок нет табличного представления; на телефоне используется горизонтальная прокрутка колонок и полноэкранная карточка.

Карточка сделки содержит сумму, этап, клиента, контакты, ответственного, источник, описание, комментарии и историю. Следующее действие вычисляется по ближайшей незавершённой коммерческой задаче со сроком. Это та же задача, что отображается в трекере; фильтр «Направление» переключает продажи и производство. Коммерческие задачи доступны только администраторам и не поддерживают биллинг, таймлог или повторения. Производственную задачу можно связать со сделкой без раскрытия коммерческих данных сотрудникам.

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

Миграция 1790500000000-add-crm создаёт CRM и этапы, добавляет задачам направление и связь со сделкой, сохраняет существующие задачи производственными и расширяет бюджет проектов до numeric(12,2). Обычный механизм миграций backend применяет её при запуске. Доступ к CRM и коммерческим событиям проверяется на сервере. Файлы с префиксом crm/ имеют private ACL и открываются через /api/files/raw после авторизации администратора; политика бакета не должна предоставлять публичное чтение этого префикса.

Интеграционные проверки запускаются с CRM_TEST_DATABASE_URL, указывающим только на отдельную тестовую PostgreSQL-базу с crm_test в имени: pnpm --filter backend exec jest --runInBand crm.integration.spec. Проверки применяют миграции и создают тестовые данные. Без этой переменной набор пропускается.

Скриншоты интерфейса

Канбан-доска Карточка задачи
Канбан Карточка задачи
Планирование загрузки Графики работы
Планирование Графики работы
Чат База знаний
Чат База знаний
Встроенная почта Свой git-хостинг
Почта Git
Мониторинг сервисов Журнал изменений
Мониторинг Changelog

Кому подходит

  • Студиям и агентствам — проекты клиентов, загрузка команды, учёт часов и рентабельность, общение по проекту в одном месте.
  • Продуктовым командам — канбан и спринты, база знаний, обсуждения и созвоны без переключения между сервисами.
  • Распределённым командам — реалтайм-чаты и голосовые комнаты на проект с демонстрацией экрана, push-уведомления, всё с минимальной задержкой.
  • Компаниям с требованиями к данным — self-hosted на своём сервере, данные не покидают периметр.

Почему Нервион

  • Один инструмент вместо десятка. Задачи, время, планирование, чат, звонки, вики, почта и git не размазаны по внешним сервисам, а живут вместе.
  • Данные у вас. Self-hosted разворачивается на вашем железе. Никакой привязки к чужому облаку.
  • Импортозамещение. Рабочая российская замена Jira, YouTrack, Trello, Confluence без валютных платежей и риска отключения.
  • Без лимита пользователей на self-hosted: open-source под AGPLv3 бесплатна для любой команды.
  • Открытый код. Можно аудировать, дорабатывать под себя и контрибьютить.

Настройка этапов задач

Администратор открывает шестерёнку рядом с переключателем "Канбан / Неделя / Список" и выбирает "Настроить воронку". В меню с тремя точками пункт "Добавить этап после" создаёт этап сразу после выбранной колонки. В этом режиме доступны переименование нажатием на название и перетаскивание за ручку в заголовке. Плейсхолдер показывает место вставки, у края доска прокручивается автоматически. Перемещение влево или вправо и удаление доступны через меню с тремя точками. Для перемещения с клавиатуры используйте клавиши влево и вправо на ручке колонки. Изменения остаются черновиком до нажатия "Готово". Эта кнопка сохраняет этапы, порядок и перенос задач одной транзакцией для всей команды. "Отменить" полностью сбрасывает черновик. Во время настройки вместо переключателя видов отображаются только "Отменить" и "Готово". После выхода переключатель возвращается. Уход со страницы отменяет несохранённые изменения. При одновременном изменении этапов другим пользователем сохранение отклоняется, чтобы не затереть его правки.

"Открыто", "Выполняется" и "Закрыто" нельзя удалить или переименовать. Остальные этапы можно удалить с подтверждением. Если в этапе есть задачи, нужно выбрать этап для переноса. Переносятся все производственные задачи, включая скрытые фильтрами; перенос и удаление выполняются одной транзакцией. Закрытие при переносе учитывается в датах закрытия и фиксированной выручке. Коммерческие задачи сохраняют свою отдельную фиксированную воронку.

Миграция 1792627200000-add-editable-task-stages сохраняет существующие этапы, переводит статус задачи в строковый ключ и добавляет справочник этапов. Пользовательские этапы доступны в фильтрах, карточках и формах создания задач.

Технологии

Монорепозиторий на pnpm + turbo.

  • Backend: NestJS, TypeORM, PostgreSQL, WebRTC (mediasoup), WebSockets.
  • Frontend: Nuxt 3 (Vue 3), Pinia, TipTap, SCSS.
  • Инфраструктура: Docker / Docker Compose, S3-совместимое хранилище, OpenAPI / Swagger.

Быстрый старт (Docker)

Полный комплект (PostgreSQL + API + веб-приложение) одной командой:

cp apps/backend/.env.example apps/backend/.env   # работает из коробки, секреты заполнять не обязательно
docker compose up --build

Откройте http://localhost:3000 — фронтенд, API на http://localhost:3026, документация API на http://localhost:3026/api/docs. Чистая БД создаётся штатной initial migration, последующие миграции накатываются при старте. Секрет подписи токенов генерируется сам, отдельно настраивать его не нужно.

Запуск без Docker

pnpm i
cp apps/backend/.env.example apps/backend/.env
cp apps/frontend/.env.example apps/frontend/.env
# заполнить .env, поднять PostgreSQL, затем:
pnpm --filter backend dev
pnpm --filter frontend dev

Для production без Docker собирайте приложения и запускайте apps/backend/dist/main.js и apps/frontend/.output/server/index.mjs. Nuxt SSR может обращаться к локальному backend через NUXT_API_INTERNAL_URL=http://127.0.0.1:3026, а браузер — через публичный NUXT_PUBLIC_API_URL. Backend также нужен исполняемый mediasoup-worker, указанный абсолютным путём в MEDIASOUP_WORKER_BIN.

Подробнее — в docs/development.md.

Docker-сборка frontend устанавливает зависимости с --frozen-lockfile и использует apps/frontend/pnpm-lock.yaml вместе с настройками .npmrc. При изменении зависимостей обновляйте и коммитьте соответствующий lockfile.

API и документация

Весь API описан через OpenAPI / Swagger. После запуска интерактивная документация доступна по адресу /api/docs (например http://localhost:3026/api/docs), машинное описание — /api/docs-json. Авторизация поддерживается как по cookie-сессии, так и по API-токену для внешних интеграций.

Структура

  • apps/backend — API (NestJS + TypeORM, PostgreSQL)
  • apps/frontend — веб-приложение (Nuxt 3 / Vue)
  • packages/contracts — общие типы и контракты backend ↔ frontend

Конфигурация

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

Секреты (помечены [secret]) не коммитятся: реальные .env в .gitignore, в репозитории только .env.example.

Push-уведомления на Android

Установка иконки на рабочий стол сама по себе не включает уведомления. Откройте приложение по HTTPS, войдите в аккаунт и нажмите "Разрешить" в баннере. Подключение подтверждается сообщением "Уведомления включены" только после сохранения подписки на сервере. При сбое можно повторить попытку; "Не сейчас" скрывает баннер на сутки. При разрешённых уведомлениях приложение автоматически повторяет подключение и перепроверяет подписку каждые пять минут во время работы.

На backend должны быть заданы VAPID_PUBLIC_KEY и VAPID_PRIVATE_KEY одной пары. Сохраняйте их между перезапусками и обновлениями. Публичный ключ доступен через /api/push/vapid-public-key, обработчик уведомлений через /sw.js. Смена пары ключей требует повторного открытия приложения пользователями.

В профиле галочка "Push-уведомления" управляет подпиской текущего устройства. Отключение сохраняется в этом браузере, блокирует автоподключение и синхронизируется между вкладками. При запрете браузера попытка включения показывает тост с инструкцией по разрешениям. "Проверить уведомления" отправляет push через backend только на текущую подписку авторизованного пользователя (POST /api/push/test). Успешный ответ означает принятие сообщения push-сервисом, а не подтверждённый показ на телефоне. Результат теста и ошибки показываются тостами; истёкшая подписка удаляется.

Для проверки сверните установленное приложение и отправьте ему сообщение из другого аккаунта. Если уведомления заблокированы, разрешите их в настройках сайта в браузере и в настройках уведомлений Android для браузера или приложения. Если подписка подключена, но доставки нет, проверьте ошибки Push failed в логах backend и доступность push-сервиса из сети сервера и телефона.

При настроенном NUXT_PUBLIC_SENTRY_DSN ошибки подключения, отключения и теста попадают в GlitchTip. Фильтр: feature:web_push; тег push_stage показывает этап сбоя, error_name тип ошибки, http_status код ответа (0, если ответа нет). Контекст push содержит разрешение браузера, наличие сети, режим PWA и контроль Service Worker. Endpoint, ключи подписки, исходный текст ошибки и breadcrumbs не передаются. Одинаковый сбой отправляется не чаще раза в пять минут в одной вкладке. Отказ пользователя в разрешении не считается ошибкой. Для диагностики повторите действие после обновления приложения и найдите событие по времени. Отправка требует доступного GlitchTip; блокировщик может её остановить. Уведомления разработчикам настраиваются правилами оповещений проекта GlitchTip.

Проверка восстановления подписок: node --experimental-strip-types --test apps/frontend/tests/push-subscription.test.mjs (Node.js 22.6+). Проверка управления из профиля: node apps/frontend/tests/push-store.test.mjs.

Контроль почтовых событий

При настроенных SENTRY_DSN (GlitchTip/Sentry) и POSTBOX_CONFIGURATION_SET backend каждые 5 минут проверяет отправленные через Postbox письма за последние 24 часа. Если для письма старше 15 минут нет ни одного события, отправляется ошибка mail-delivery-events-missing. Повтор — не чаще раза в час на процесс; без исходящих писем тревоги нет. Отсутствие открытия само по себе не считается сбоем. Отдельная ошибка mail-delivery-monitor-failed сообщает о невозможности выполнить проверку. В события не включаются адреса, текст писем или данные подключения. Доставка уведомлений пользователям зависит от правил оповещений проекта GlitchTip. Проверка работает, пока запущен backend, и не заменяет внешний мониторинг доступности приложения или облачных ресурсов в периоды без отправок.

Дорожная карта

Проект активно развивается. В планах: расширение интеграций, мобильные клиенты, гибкие автоматизации и шаблоны процессов. Предложения и голосование за фичи — через issues.

Внедрение под ключ

Не хотите разворачивать и поддерживать сами? Команда Webcetera поставит и настроит Нервион на вашем сервере, перенесёт данные из Jira или другого трекера, сделает интеграции и возьмёт сопровождение (или managed-облако).

Лицензия

Open-core: исходный код под AGPLv3 (LICENSE). Доступна отдельная коммерческая лицензия для закрытых продуктов и SaaS без copyleft-обязательств — см. LICENSING.md.

Контрибьюторам

Конвенции и архитектурные правила — в AGENTS.md. Вклад принимается на условиях CLA.md (подписывается в один клик при первом PR). Баг-репорты и идеи — в issues.

FAQ

Это правда бесплатно? Да, self-hosted-версия под AGPLv3 бесплатна и без лимита на число пользователей. Платная только опциональная коммерческая лицензия (для закрытых продуктов) и внедрение под ключ.

Можно держать данные только у себя? Да, это основной сценарий: разворачиваете на своём сервере, данные не уходят наружу.

Это замена Jira? Да, Нервион закрывает типовые сценарии Jira, YouTrack, Trello и Confluence в одном приложении, плюс чат, звонки, почту и git.

Какая нужна инфраструктура? Docker и PostgreSQL. Для голосовых и видео-комнат используется WebRTC (mediasoup), для файлов и медиа — S3-совместимое хранилище.

Есть API? Да, полностью документированный REST API с OpenAPI / Swagger и поддержкой API-токенов.

Explore related projects