Telegram Mini App + бот, которые дробят книгу/статью на небольшие порции и присылают их по расписанию — читать понемногу, не теряя фокус.
- Фронтенд — Vue 3 + Vite.
- Бэкенд — Vercel serverless-функции (Node.js).
- БД — Postgres (Neon), клиент
@neondatabase/serverless. - Бот — Telegram Bot API напрямую (без библиотек, через
fetch). - ИИ-дробление текста — Google Gemini (бесплатный тариф, не истекает).
- Извлечение статей по ссылке —
jsdom+@mozilla/readability. - Планировщик доставки — внешний cron-job.org (встроенный Vercel Cron на бесплатном тарифе ограничен раз в сутки, этого недостаточно).
api/— Vercel serverless-функции (роуты): тонкие обработчики, вся логика — вserver/.server/— бэкенд: репозитории (БД), дробление текста (Gemini), Telegram, извлечение статей по ссылке.src/— фронтенд (Vue 3 + Vite), сама мини-аппа.tests/— тесты серверной логики (node:test, без внешних зависимостей).scripts/— разовые операционные скрипты (миграция БД, регистрация вебхука/команд бота).public/— статика Vite.
npm install
npm run dev # фронтенд локально (api/ бьёт в прод через прокси в vite.config.js)
npm test # тесты серверной логики
npm run migrate # прогнать server/db/schema.sql на базу из .env.local
npm run set-webhook # зарегистрировать вебхук бота в Telegram
npm run set-commands # зарегистрировать /start, /help в меню ботаСекреты — в .env.local (не в git). Список нужных переменных — в
DEVLOG.local.md.
Для монетизации через Telegram Stars дополнительно нужен
TELEGRAM_STARS_PRO_PRICE (целое число звёзд, по умолчанию 250).
OWNER_TELEGRAM_ID/VITE_OWNER_TELEGRAM_ID — единственный "владелец"
проекта, заданный переменными окружения (подстраховка от блокировки самого
себя). Владелец может назначать дополнительных админов по username через
настройки приложения (нужно, чтобы назначаемый уже хоть раз открывал
приложение) — у них появляется доступ к режиму разработчика (кнопка
"Отправить порцию сейчас"), но не к управлению другими админами.
Пуш в master на GitHub → автодеплой на Vercel. Рассылка порций идёт по
внешнему крону (cron-job.org), который дёргает /api/cron/deliver каждые
15 минут — встроенный Vercel Cron на бесплатном тарифе ограничен раз в сутки.