Приложение для педагога: расписание занятий, деньги за них и уведомления о том, что в расписании поменялось. Данные приходят из YClients — той же системы, где центр ведёт запись, — но живут на телефоне и открываются мгновенно, без ожидания сети.
Главное отличие от кабинета YClients в браузере: приложение считает деньги педагога, а не выручку филиала, и знает про перенос, отмену и «не пришёл» раньше, чем об этом успеют сказать. Расписание на неделю, сколько выйдет за месяц, что изменилось со вчера — на одном экране.
Требования: Android 7.0 и новее.
Готовые сборки — на странице релизов:
скачать neiro-<версия>.apk, открыть на телефоне, один раз разрешить
установку из этого источника. Дальше приложение обновляет себя само —
как именно. Что изменилось от версии к версии —
CHANGELOG.md.
Начиная с 0.1.1 приложение обновляет себя само: замечает новую версию, сообщает уведомлением и по согласию ставит её одним нажатием. Версии старше обновляются файлом со страницы релизов — поверх старой, данные сохраняются.
Сборка из исходников — Android Studio или ./gradlew assembleDebug; что нужно
положить рядом, описано в быстром старте.
- Календарь месяца — занятия, суммы по дням, быстрый переход к сегодня, выбор месяца оверлеем.
- День целиком — таймлайн занятий, статусы «подтвердил / пришёл / не пришёл», правка вручную, перенос.
- Деньги — расчёт по ставкам с учётом налога, годовая статистика и графики по месяцам, разделение факта и прогноза.
- Уведомления — напоминание перед занятием, утренний и вечерний дайджест, и главное: push о новой записи, отмене и переносе — их присылает собственный сервис событий, приложение не опрашивает YClients само.
- Архив — своя история занятий помимо YClients: офлайн-правки, экспорт и импорт JSON, журнал уведомлений.
- Офлайн — всё читается из локального хранилища; синхронизация нужна для обновления, а не для запуска.
Что сделано и что в планах — TODO.md.
Релиз выпускается сам при слиянии PR в main: версия поднимается, тег
ставится, GitHub Actions собирает подписанный APK, считает контрольную сумму и
публикует релиз с описанием изменений. Разряд версии задаётся меткой PR —
как это устроено.
О вышедшей версии приложение узнаёт сразу: сервер neiro-push рассылает push
в ту же минуту, когда релиз опубликован. Push не дошёл — приложение и само
спрашивает GitHub раз в сутки и при открытии. Нашло — показывает уведомление;
по согласию скачивает APK, сверяет SHA256 и подпись со своей, и ставит
поверх. Настройки, календарь и архив остаются на месте.
На Android 12+ обновление приложения самого себя проходит без системного
диалога — согласия, которое пользователь уже дал, достаточно.
Механика целиком — docs/updater/: архитектура, релизы, ограничения.
-
local.properties— SDK, адрес и ключ сервиса Neiro (см. yclients-integration.md):NEIRO_PUSH_API_BASE_URL=https://push.neiro.greemlab.ru NEIRO_PUSH_API_KEY=<API_KEY из ~/neiro-push/.env>
-
app/google-services.json— для FCM (push-setup.md § Firebase). -
Сборка — Android Studio / Gradle на машине разработчика.
Без local.properties приложение соберётся, но вход не пройдёт: сервис
неизвестен. Без google-services.json соберётся тоже — с выключенным FCM,
локальный режим и синхронизация при этом работают.
Публичный URL: https://push.neiro.greemlab.ru
Приложение работает с третьим поколением сервиса — neiro-push (маршрут /v1,
порт 8012). Два прежних поколения погашены: server/ — 02.08.2026,
neiro-push-events (/v2) — 13.08.2026. Их код лежит в истории git
(разбор работ).
Сервис и его эксплуатация — docs/neiro-push/.
Приложение работает с чужими данными — расписанием и именами учеников, — и поэтому важно, где они лежат.
На телефоне: расписание, имена учеников, статусы занятий, ставки и расчёт денег, архив и журнал уведомлений. Всё это локальное хранилище приложения; оно не выгружается никуда, кроме экспорта в JSON, который вы делаете сами и сами решаете, куда положить файл.
На сервере владельца: токены YClients (partner_token, user_token) и
FCM-токены устройств. Сервер — Raspberry Pi владельца проекта, не облако:
именно он ходит в YClients вместо телефона и присылает push об изменениях.
Пароль от YClients не хранится нигде — он используется один раз при входе.
Устройство отзывается кнопкой в дашборде, после чего его токен перестаёт
работать.
Чего нет вовсе: аналитики, трекеров, рекламы, сбора статистики использования. Из сторонних SDK в приложении только Firebase Cloud Messaging — он нужен, чтобы доставлять push, и знает лишь токен устройства, а не содержимое расписания.
Устройство целиком — docs/neiro-push/ARCHITECTURE.md.
| Тема | Документ | О чём |
|---|---|---|
| Релизы и самообновление | docs/updater/ | Версии, выпуск по тегам, как приложение обновляет себя, риски и план работ |
Сервис neiro-push (текущий) |
docs/neiro-push/ | Токены YClients на сервере, приложение ходит через прокси: архитектура, API, деплой, порядок запуска |
| YClients API | docs/yclients-integration.md | Вход, сетевой слой, синхронизация, local.properties |
| Архив | docs/archive/ | Закрытые аудиты, старая переработка и оба погашенных поколения push-сервиса — история, не руководство |
| Скриншоты | docs/screenshots.md | Что снимать, требования README и RuStore, скрипт разбора кадров |
| Боковая панель | docs/profile-drawer.md | Drawer профиля, жесты, файлы в коде |
| Оформление | docs/appearance.md | Тема, палитры, семантические цвета и стеклянный вид: что где живёт и почему |
| Аудит | docs/audit/METHODIKA.md | Как проводить аудит: границы, чек-листы по областям, формат пакета, история прошлых аудитов |
| Последний аудит | docs/archive/audit-14.08.26/ | Пакет от 14.08.2026: 18 находок, все закрыты; отчёт о прогоне, архитектура на дату |
| Что осталось доделать | docs/next/ | Доводка после перехода на neiro-push: шесть этапов с планом работ |
| Дорожная карта | TODO.md | Что сделано и что в планах |
app/ Android-приложение (Kotlin, Compose)
app/.../push/ Регистрация FCM, приём push
app/.../update/ Самообновление (по плану docs/updater/)
neiro-push/ Сервис на Pi: токены и прокси YClients (по плану docs/neiro-push/)
scripts/ Версия, скриншоты, генерация иконки
docs/ Документация
| Файл | Содержимое |
|---|---|
local.properties |
SDK, NEIRO_PUSH_*, подпись release |
app/google-services.json |
Firebase |
.signing/ |
Ключи публикации |
~/neiro-push/.env на Pi |
API_KEY, ADMIN_API_KEY, шифрование токенов, YCLIENTS_PARTNER_TOKEN |
~/neiro-push/secrets/ на Pi |
FCM service account JSON |
Ключей YClients в сборке нет: partner_token и user_token живут только на
Pi, приложение ходит к ним через прокси (docs/neiro-push/).
Те же значения, что нужны сборке релиза, лежат в секретах GitHub Actions —
список в docs/updater/RELEASE.md. Ключ
подписи (.jks) незаменим: без него обновить уже установленное приложение
нечем.
Пишет и ведёт проект Greem4. Приложение личное,
сделано под конкретную работу конкретного педагога — но исходники открыты,
разбор устройства есть в docs/.
Приложение личное, но исходники открыты: сообщения о проблемах и предложения приветствуются. Как собрать, как оформить коммит и что стоит обсудить до кода — CONTRIBUTING.md.
Нашли дыру в безопасности — не в публичный issue, а приватно, кнопкой «Report a vulnerability» во вкладке Security: SECURITY.md.
Код распространяется по лицензии MIT — брать, менять и использовать можно, сохранив уведомление об авторстве. Полный текст — LICENSE.