Мини‑приложение для Telegram, позволяющее хранить, редактировать и использовать карты лояльности магазинов в виде штрихкодов.
- ✅ Добавление карт лояльности (название магазина + номер штрихкода)
- ✅ Ручной ввод номера штрихкода
- ✅ Отображение штрихкода (Code128) при нажатии на карту
- ✅ Редактирование карты (название, штрихкод, цвет)
- ✅ Удаление карты с подтверждением
- ✅ Хранение данных в
localStorageна устройстве пользователя - ✅ Экспорт всех карт в JSON
- ✅ Импорт карт из JSON (файл или вставка текста)
- ✅ Ограничение доступа по Telegram user ID
- ✅ Адаптация под тему Telegram (цвета берутся из
--tg-theme-*) - ✅ Аккуратный UI:
- отдельная панель с кнопками «Импорт / Экспорт / Редактирование»
- панель по умолчанию свернута, открывается кнопкой‑стрелкой
- иконки на кнопках через Lucide (SVG)
ВАЖНО: в текущей версии нет сканирования штрихкода с камеры (библиотека
jsQRудалена и функционал отключён). Номера вводятся только вручную.
- HTML5
- CSS3
- JavaScript (vanilla)
- Telegram WebApp API
- JsBarcode — генерация штрихкодов Code128
- Lucide — SVG‑иконки (через CDN)
localStorage— хранение карт на стороне клиента
Приложение может работать только для выбранных Telegram‑пользователей.
В начале app.js задан список разрешённых id:
const ALLOWED_TELEGRAM_IDS = '23600704'; // список ID через запятую
Проверка выполняется через tg.initDataUnsafe.user.id:
- если
user.idне найден или не входит в списокALLOWED_TELEGRAM_IDS, выводится сообщение вида
«Доступ к приложению ограничен. Обратитесь к владельцу бота.»
и основной интерфейс не инициализируется; - если список пустой (
'') — доступ разрешён всем.
Чтобы добавить новые разрешённые ID, отредактируйте строку:
const ALLOWED_TELEGRAM_IDS = ',123456789,987654321';
и заново задеплойте приложение.
- Главный экран:
- заголовок «Мои карты лояльности»;
- справа — кнопка с иконкой Lucide
chevrons-down/chevrons-up, которая разворачивает/сворачивает панель действий.
- Панель действий (по умолчанию скрыта):
- кнопка «Импорт» с иконкой
upload; - кнопка «Экспорт» с иконкой
download; - кнопка «Режим редактирования» с иконкой
square-pen.
- кнопка «Импорт» с иконкой
- При сворачивании панели автоматически выключается режим редактирования (подсветка кнопки и жёлтый лейбл исчезают).
- Режим редактирования:
- при включении подсвечивается кнопка ✏️ и показывается жёлтый текст «Режим редактирования: нажмите на карту, чтобы изменить или удалить её»;
- нажатие на карту в этом режиме открывает окно редактирования/удаления.
- Окно просмотра карты:
- верхняя цветная полоса (цвет карты) с названием и крестиком закрытия;
- белый блок со штрихкодом и номером;
- закрытие по нажатию на крестик или на белую область.
- Окно редактирования:
- изменение названия, штрихкода и цвета;
- кнопка «Удалить карту» с подтверждением.
Иконки Lucide подключаются через CDN в index.html:
<script src="https://unpkg.com/lucide@latest"></script>
<script src="app.js"></script>
В кнопках используются атрибуты data-lucide:
<button class="icon-btn header-toggle-btn" id="actionsToggleBtn">
</button>
<button class="icon-btn" id="importBtn">
</button>
<button class="icon-btn" id="exportBtn">
</button>
<button class="icon-btn" id="editModeToggleBtn">
</button>
В конце app.js иконки инициализируются:
if (window.lucide?.createIcons) {
window.lucide.createIcons();
}
При смене состояния кнопки раскрытия панели код обновляет иконку chevrons-down → chevrons-up и переинициализирует её только в пределах этой кнопки.
- Клонируйте репозиторий:
git clone ...
- Отредактируйте при необходимости список разрешённых Telegram ID в
app.js:
const ALLOWED_TELEGRAM_IDS = '122765504';
- Задеплойте статические файлы (
index.html,app.js,styles.css) на любой хостинг (например, Netlify, GitHub Pages и т.п.). - Создайте Telegram‑бота через
@BotFather. - В настройках бота укажите URL вашего хостинга в качестве WebApp‑URL.
- Откройте бота в Telegram и запустите мини‑приложение.
- Откройте мини‑приложение через Telegram‑бота.
- При необходимости разверните панель действий (кнопка со стрелкой справа от заголовка).
- Нажмите «+ Добавить карту»:
- введите название магазина;
- введите номер штрихкода;
- выберите цвет карты;
- сохраните.
- Нажмите на карту, чтобы увидеть штрихкод и номер.
- Для редактирования:
- откройте панель действий;
- включите «Режим редактирования» (✏️);
- нажмите на нужную карту — откроется окно редактирования;
- при необходимости нажмите «Удалить карту» и подтвердите.
MIT