Skip to content

feewwee39-dev/tg-mini-app

Repository files navigation

Telegram Mini App — онлайн-запись для салонов

Полноценное Telegram мини-приложение для онлайн-записи в маникюрный салон. Клиент открывает бота, выбирает услугу → дату → время → подтверждает, получает уведомление. Владелец управляет расписанием и записями через встроенную панель администратора.

Стек: Node.js + Express + Telegraf + SQLite (бэкенд) / React 18 + Vite (фронтенд)


Возможности

Клиентский поток (6 экранов)

  1. Каталог — список услуг с ценами и описанием
  2. Выбор даты — доступные дни календарём
  3. Выбор времени — слоты с учётом занятых
  4. Подтверждение — итог записи перед отправкой
  5. Успех — подтверждение записи с деталями
  6. Отзыв — форма отзыва после визита

Панель администратора

  • Записи — все предстоящие записи, отмена одним кликом
  • День — расписание на конкретный день
  • Отзывы — все оставленные отзывы

Бот

  • Уведомления клиенту при записи и напоминание за сутки
  • Уведомление владельца при новой записи
  • Проверка прав администратора через Telegram initData (HMAC-SHA256)

Архитектура

├── index.js              # Express + Telegraf, webhook/polling auto-detect
├── db/
│   ├── database.js       # SQLite init + schema
│   └── seed.js           # Начальные данные (услуги, слоты)
├── routes/
│   ├── designs.js        # GET /api/designs — услуги
│   ├── slots.js          # GET /api/slots — доступные слоты
│   ├── bookings.js       # POST/GET /api/bookings
│   ├── admin.js          # GET /api/admin — только для администратора
│   └── reviews.js        # POST /api/reviews
└── webapp/               # React 18 + Vite
    └── src/
        ├── App.jsx
        ├── screens/      # Catalog, DatePick, TimePick, Confirm, Success, Review
        └── admin/        # AdminBookings, AdminDay, AdminReviews

Webhook / Polling: в production index.js автоматически определяет URL хостинга (WEBHOOK_URLRENDER_EXTERNAL_URLKOYEB_PUBLIC_DOMAIN) и переключается в webhook-режим. Локально работает через polling.


Локальный запуск

git clone https://github.com/feewwee39-dev/tg-mini-app.git
cd tg-mini-app

cp .env.example .env
# Заполните .env: BOT_TOKEN, ADMIN_CHAT_ID, WEBAPP_URL

npm install
npm run build        # сборка React-приложения

# Туннель для Telegram (нужен HTTPS)
# Вариант 1: cloudflared
cloudflared tunnel --url http://localhost:3000
# Вариант 2: ngrok
ngrok http 3000

# Обновите WEBAPP_URL в .env на URL туннеля, затем:
npm start

Деплой на Render (бесплатно)

  1. Fork репозитория → New Web Service на render.com
  2. Build Command: npm run build
  3. Start Command: npm start
  4. Environment Variables:
Переменная Значение
BOT_TOKEN Токен от @BotFather
ADMIN_CHAT_ID Ваш Telegram ID (узнать через @userinfobot)
WEBAPP_URL https://your-app.onrender.com

Render автоматически определяется как production — бот переключится в webhook-режим.

Альтернативы: Railway, Koyeb

Работает без изменений. Koyeb авто-подхватывает KOYEB_PUBLIC_DOMAIN.


Переменные окружения

Скопируйте .env.example в .env:

BOT_TOKEN=        # Токен от @BotFather
ADMIN_CHAT_ID=    # Ваш Telegram ID
PORT=3000         # Порт Express (по умолчанию 3000)
WEBAPP_URL=       # HTTPS-URL приложения (туннель локально / домен в prod)
# WEBHOOK_URL=    # Переопределение URL вебхука (необязательно)

Технологии

Слой Технология
Runtime Node.js >= 22
HTTP сервер Express 4
Telegram Bot Telegraf 4
БД SQLite (better-sqlite3)
Работа с датами Luxon
Фронтенд React 18 + Vite
Деплой Render / Railway / Koyeb

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages