Трекер подписок — наведите порядок в регулярных платежах
Узнайте, сколько на самом деле стоят ваши Netflix, Spotify и ещё два десятка сервисов, о которых вы забыли.
| 📊 Дашборд расходов | Итоговые траты за месяц с анимированными счётчиками и мини-графиками |
| 🔔 Напоминания о списаниях | Колокольчик уведомлений подскажет, что спишется на этой неделе |
| 🪄 «Что если…» | Отключайте подписки виртуально и сразу видьте экономию — ничего не меняя по-настоящему |
| 🎯 Лимит бюджета | Задайте месячный потолок расходов — хранится локально |
| 🤖 Умный ассистент | «Сколько я трачу в месяц?», «На чём можно сэкономить?» — отвечает на естественном языке |
| 🗂 Фильтры и категории | Музыка, кино, игры, VPN, образование — фильтруйте и находите нужное мгновенно |
| 🌓 Светлая / тёмная тема | Переключение на лету, тема запоминается |
| 🌍 Мультивалютность | RUB · USD · EUR с пересчётом в месячную стоимость |
Скриншот дашборда
┌───────────────────────────────────────────────┬──────────────────┐
│ Подписки │ Фильтры │
│ Контроль регулярных платежей │ ┌────────────┐ │
│ │ │ Категория │ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ ├────────────┤ │
│ │ ~2 400₽ │ │ 12 шт. │ │ ▂▃▅▇ │ │ │ Статус │ │
│ │ в месяц │ │ активных│ │ график │ │ └────────────┘ │
│ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │
│ ┌─────────────────────────────────────────┐ │ │
│ │ Spotify Музыка 299₽/мес 📅 3 │ │ │
│ │ iCloud+ Облако 59₽/мес 📅 9 │ │ │
│ └─────────────────────────────────────────┘ │ │
└───────────────────────────────────────────────┴──────────────────┘
| Слой | Инструменты |
|---|---|
| Ядро | React 19 + TypeScript + Vite 8 |
| Состояние | MobX 7 для UI-стора · TanStack Query для серверных данных |
| UI | Tailwind CSS · shadcn/ui · Recharts · lucide-react · Geist Variable |
| Формы | React Hook Form + Zod |
| Тесты | Vitest |
Проект построен по методологии Feature-Sliced Design:
src/
├── app/ # Инициализация: провайдеры, layout, роутинг приложения
├── pages/ # Страницы
│ └── subscriptions/
├── widgets/ # Крупные композиционные блоки
│ ├── subscriptions/ # таблица, статистика, фильтры, пустое состояние
│ └── notifications/ # колокольчик уведомлений
├── features/ # Пользовательские сценарии
│ ├── subscriptions/ # CRUD-хуки, форма подписки, стор фильтров
│ ├── whatif/ # симулятор отключения подписок
│ ├── budget/ # лимит бюджета
│ ├── notifications/ # напоминания о списаниях
│ ├── assistant/ # AI-ассистент: интенты, форматирование ответов
│ └── theme/ # светлая / тёмная тема
├── entities/ # Бизнес-сущности
│ └── subscription/ # типы, константы, расчёты, API
├── shared/ # Переиспользуемое: утилиты форматирования, анимации чисел, api-client
└── components/ui/ # Дизайн-система (shadcn/ui)
Диалоги формы подписки и «Что если» загружаются через lazy() отдельными чанками — открываются без задержки, не утяжеляя основной бандл.
# Требуется Node.js >= 20 и pnpm
corepack enable
git clone <repo-url>
cd SubTrack
pnpm install
# Запуск dev-сервера
pnpm dev| Команда | Действие |
|---|---|
pnpm dev |
Dev-сервер Vite с HMR |
pnpm build |
Проверка типов (tsc -b) + production-сборка |
pnpm test |
Прогон unit-тестов (Vitest) |
pnpm lint |
ESLint по всему проекту |
pnpm preview |
Локальный предпросмотр production-сборки |
Конфигурация для Netlify уже в репозитории (netlify.toml):
- сборка:
pnpm install --frozen-lockfile && pnpm build - публикация:
dist/ - SPA-fallback: любой маршрут отдаёт
index.html