Telegram Mini App для отслеживания дней по странам и планирования поездок с учётом правил резиденции.
- Учёт дней по странам: Отслеживание фактических дней пребывания
- Прогноз доступных дней: Расчёт оставшихся дней по правилам (90/180, 183 дня и др.)
- Планировщик поездок: Проверка доступности планируемых поездок
- Импорт/Экспорт: CSV загрузка и выгрузка поездок
- Локальная приватность: Данные хранятся локально с опциональной синхронизацией
- Frontend: Next.js 15 + App Router, React, TypeScript
- Backend: Next.js API Routes, Prisma ORM
- Database: SQLite (dev) / PostgreSQL (prod)
- Telegram: WebApp SDK, HMAC валидация initData
- Rules Engine: Модульная система расчёта правил резиденции
/app
/(webapp) # Страницы Mini App
/api # API эндпоинты
/core
/rules # Движок правил и расчётов
/tests # Unit тесты
/components # React компоненты
/lib # Утилиты и конфигурация
/prisma # Схема базы данных
/scripts # Скрипты для БД
git clone <repository-url>
cd nomaddays
pnpm installcp env.example .env.localЗаполните .env.local:
BOT_TOKEN=your_telegram_bot_token
WEBAPP_SECRET=your_webapp_secret
DATABASE_URL="file:./dev.db"# Генерация Prisma клиента
pnpm db:generate
# Создание и миграция БД
pnpm db:migrate
# Заполнение начальными данными
pnpm db:seed# Разработка
pnpm dev
# Сборка
pnpm build
# Продакшн
pnpm start- Напишите @BotFather в Telegram
- Создайте нового бота:
/newbot - Получите
BOT_TOKEN
- Отправьте BotFather:
/setmenubutton - Выберите вашего бота
- Выберите "Configure Menu Button"
- Введите URL:
https://your-domain.com/ - Введите текст кнопки: "NomadDays"
- Отправьте BotFather:
/mybots - Выберите вашего бота
- Bot Settings → API Token
- Скопируйте
WEBAPP_SECRET
# Запуск тестов
pnpm test
# Тесты в режиме watch
pnpm test:watch- Скользящее окно: N дней из M дней (например, 90/180)
- Календарный год: Максимум дней в году
- Скользящие 12 месяцев: 183 дня в любые 12 месяцев
- Максимум вне страны: Для тестов резиденции
Все лимиты настраиваются в core/rules/presets.ts:
KZ_RESIDENCY_TEST: {
name: 'Тест резиденции РК',
maxDaysOutside: 183, // TODO: Уточнить актуальное значение
calendarYear: true
}- Подключите репозиторий к Vercel
- Настройте переменные окружения:
BOT_TOKENWEBAPP_SECRETDATABASE_URL(PostgreSQL)
- Деплой автоматический при push в main
- Railway: Поддерживает PostgreSQL
- Render: Бесплатный PostgreSQL
- DigitalOcean: App Platform + Managed Database
- Откройте бота в Telegram
- Нажмите кнопку "NomadDays"
- Авторизуйтесь через Telegram
- Добавьте поездки или импортируйте CSV
- Настройте активные правила
- Используйте планировщик для проверки доступности
- Валидация Telegram initData через HMAC-SHA256
- Проверка подписи на сервере
- Локальное хранение данных по умолчанию
- Опциональная облачная синхронизация
pnpm dev # Запуск в режиме разработки
pnpm build # Сборка проекта
pnpm start # Запуск продакшн версии
pnpm lint # Проверка ESLint
pnpm format # Форматирование Prettier
pnpm test # Запуск тестов
pnpm db:studio # Prisma Studio- Создайте правило в
core/rules/presets.ts - Добавьте логику в
core/rules/engine.ts - Напишите тесты в
core/tests/rules.spec.ts - Обновите типы в
core/rules/types.ts
MIT License
- Issues: GitHub Issues
- Документация: README.md
- Telegram: @your_username