smoke-tracker/README.md
Primakov Alexandr Alexandrovich 9b224ef4b7 Add README.md for Smoke Tracker application
- Introduced comprehensive documentation for the Smoke Tracker web application.
- Included project description, features, technologies used, and setup instructions.
- Detailed API endpoints and local development configuration.
- Provided UI/UX design guidelines and development notes for future enhancements.
2025-11-17 13:55:55 +03:00

196 lines
7.7 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. Защищенные маршруты доступны только авторизованным пользователям
### Тестовые данные для локальной разработки
Создайте пользователя через форму регистрации или используйте API напрямую.
Минимальные требования:
- Логин: минимум 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` - Получить статистику по дням
## 🎨 UI/UX
### Макеты страниц
#### Страницы авторизации
- Отдельный чистый layout
- Центрированная форма
- Без header/sidebar
- Валидация в реальном времени
- Информативные сообщения об ошибках
#### Основные страницы
- Header с информацией о пользователе
- Навигация между разделами
- Адаптивный grid layout
#### Страница учета
- Быстрая форма добавления записи
- Список последних записей
- Фильтрация по датам
#### Страница статистики
- Интерактивный график (Recharts)
- Выбор периода
- Сводная статистика
## 🧪 Разработка
### Добавление новых 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
---
**Примечание**: Это приложение создано для образовательных целей и самоконтроля. Курение вредит вашему здоровью.