smoke-tracker/README.md
Primakov Alexandr Alexandrovich 4d7bd1a77e Update README.md to enhance feature descriptions and add test user information
- Renamed "Статистика" to "Дневная статистика" and added "Сводная статистика" section with detailed metrics and visualizations.
- Included a pre-configured test user for quick start and clarified registration requirements.
- Updated API endpoints section to reflect the new summary statistics endpoint.
- Enhanced the statistics page description with new features and metrics for user comparison.
2025-11-17 14:36:25 +03:00

212 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Smoke Tracker
Веб-приложение для отслеживания привычки курения с визуализацией статистики.
## 📋 Описание
Smoke Tracker - это приложение для самоконтроля и отслеживания количества выкуренных сигарет. Позволяет вести учет, просматривать статистику по дням и анализировать динамику изменения привычки.
## ✨ Возможности
- **Регистрация и авторизация** - безопасная система входа с JWT токенами
- **Учет сигарет** - быстрое добавление записей о выкуренных сигаретах
- **История** - просмотр последних записей с возможностью фильтрации
- **Дневная статистика** - визуализация данных по дням с помощью графиков
- **Сводная статистика** - сравнение ваших показателей со средними значениями других пользователей
- График по дням недели
- Сравнение с другими пользователями
- Метрики активности
- **Адаптивный дизайн** - работает на всех устройствах
## 🛠 Технологии
### Frontend
- **React 18** - библиотека для построения UI
- **TypeScript** - типизированный JavaScript
- **Chakra UI v3** - компонентная библиотека
- **React Router v6** - маршрутизация
- **React Hook Form** - управление формами
- **Zod** - валидация схем
- **Recharts** - графики и визуализация
- **Axios** - HTTP клиент
- **date-fns** - работа с датами
### Backend (для локальной разработки)
- **Express.js** - API stubs
- **In-memory storage** - хранение данных в памяти
### Build Tools
- **Bro.js CLI** - конфигурация и сборка
## 🚀 Быстрый старт
### Установка зависимостей
```bash
npm install
```
### Запуск в режиме разработки
```bash
npm start
```
Приложение будет доступно по адресу, указанному в конфигурации Bro.js.
### Сборка для продакшена
```bash
npm run build
```
## ⚙️ Конфигурация
### API Endpoints
Конфигурация API определяется в `bro.config.js`:
```javascript
config['smoke-tracker.api'] = './stubs/api/index.js' // для локальной разработки
// или
config['smoke-tracker.api'] = 'https://api.example.com' // для продакшена
```
### Локальная разработка
Для локальной разработки используются API stubs в `./stubs/api/index.js`. Данные хранятся в памяти и сбрасываются при перезапуске сервера.
### Стейджинг/Продакшн
На стейджинге и продакшене значение конфигурации должно указывать на реальный backend API.
## 📁 Структура проекта
```
smoke-tracker/
├── src/
│ ├── __data__/ # Константы и конфигурация
│ │ └── urls.ts # Маршруты приложения
│ ├── api/ # API клиент
│ │ └── client.ts # Axios instance с interceptors
│ ├── components/ # Переиспользуемые компоненты
│ │ ├── ui/ # UI компоненты
│ │ │ └── field.tsx # Custom Field component
│ │ └── ProtectedRoute.tsx
│ ├── contexts/ # React Context
│ │ └── AuthContext.tsx
│ ├── pages/ # Страницы приложения
│ │ ├── auth/ # Авторизация
│ │ │ ├── signin.tsx
│ │ │ └── signup.tsx
│ │ ├── main/ # Главная страница
│ │ ├── tracker/ # Страница учета
│ │ └── stats/ # Страница статистики
│ ├── types/ # TypeScript типы
│ │ └── api.ts # API типы
│ ├── app.tsx # Корневой компонент
│ ├── dashboard.tsx # Роутинг
│ └── index.tsx # Entry point
├── stubs/
│ └── api/
│ └── index.js # Mock API для разработки
├── memory-bank/
│ └── API.md # Документация API
├── bro.config.js # Конфигурация Bro.js
└── package.json
```
## 🔐 Авторизация
Приложение использует JWT токены для авторизации:
1. При входе/регистрации токен сохраняется в `localStorage`
2. Токен автоматически добавляется во все API запросы через Axios interceptor
3. При истечении токена пользователь перенаправляется на страницу входа
4. Защищенные маршруты доступны только авторизованным пользователям
### Тестовые данные для локальной разработки
Для быстрого старта доступен предустановленный тестовый пользователь:
- **Логин:** `testuser`
- **Пароль:** `test1234`
Вы также можете создать нового пользователя через форму регистрации.
Минимальные требования для регистрации:
- Логин: минимум 3 символа
- Пароль: минимум 4 символа
## 📊 API
Полная документация API доступна в файле [`memory-bank/API.md`](./memory-bank/API.md).
### Основные endpoints:
- `POST /auth/signup` - Регистрация
- `POST /auth/signin` - Вход
- `POST /cigarettes/log` - Добавить запись о сигарете
- `GET /cigarettes` - Получить список записей
- `GET /cigarettes/stats/daily` - Получить статистику по дням
- `GET /stats/summary` - Получить сводную статистику (индивидуальную и общую)
## 🎨 UI/UX
### Макеты страниц
#### Страницы авторизации
- Отдельный чистый layout
- Центрированная форма
- Без header/sidebar
- Валидация в реальном времени
- Информативные сообщения об ошибках
#### Основные страницы
- Header с информацией о пользователе
- Навигация между разделами
- Адаптивный grid layout
#### Страница учета
- Быстрая форма добавления записи
- Список последних записей
- Фильтрация по датам
#### Страница статистики
- Две вкладки: "Дневная статистика" и "Сводная статистика"
- **Дневная статистика:**
- Интерактивный линейный график по дням (Recharts)
- Выбор периода
- Основные метрики (среднее, максимум, общее количество)
- **Сводная статистика:**
- Сравнение индивидуальных показателей с общими
- Метрики: дневное среднее (вы vs все), дней с данными, активных пользователей
- Столбчатая диаграмма по дням недели
- Таблица с детальной статистикой по дням недели
## 🧪 Разработка
### Добавление новых API endpoints
1. Добавьте типы в `src/types/api.ts`
2. Добавьте метод в `src/api/client.ts`
3. Обновите mock в `stubs/api/index.js`
### Добавление новых страниц
1. Создайте компонент в `src/pages/`
2. Добавьте маршрут в `src/__data__/urls.ts`
3. Обновите роутинг в `src/dashboard.tsx`
## 📝 Лицензия
MIT
## 👥 Автор
Alex
---
**Примечание**: Это приложение создано для образовательных целей и самоконтроля. Курение вредит вашему здоровью.