vault backup: 2026-04-29 14:14:13
This commit is contained in:
324
Archive/Projects/Pulse/Architecture.md
Normal file
324
Archive/Projects/Pulse/Architecture.md
Normal file
@@ -0,0 +1,324 @@
|
||||
# Pulse — Архитектура проекта
|
||||
|
||||
## Обзор
|
||||
|
||||
**Pulse** — персональное productivity-приложение для управления задачами, привычками и напоминаниями с интеграцией Telegram-бота.
|
||||
|
||||
## Технологический стек
|
||||
|
||||
### Backend (pulse-api)
|
||||
- **Язык:** Go 1.22
|
||||
- **Web-фреймворк:** chi/v5
|
||||
- **База данных:** PostgreSQL 16
|
||||
- **ORM:** sqlx (raw SQL + struct mapping)
|
||||
- **Аутентификация:** JWT (access 15 мин / refresh 365 дней)
|
||||
- **Email:** Resend API
|
||||
- **Telegram:** go-telegram-bot-api/v5
|
||||
- **Scheduler:** robfig/cron/v3
|
||||
- **Контейнеризация:** Docker + Docker Compose
|
||||
|
||||
### Frontend (pulse-web)
|
||||
- **Фреймворк:** React 18
|
||||
- **Сборщик:** Vite 5
|
||||
- **Стили:** TailwindCSS
|
||||
- **Состояние:** Zustand (auth), TanStack Query (data fetching)
|
||||
- **Анимации:** Framer Motion
|
||||
- **Иконки:** Lucide React
|
||||
- **Контейнеризация:** nginx:alpine
|
||||
|
||||
### Инфраструктура
|
||||
- **Хостинг:** VM Ubuntu (192.168.31.60)
|
||||
- **Reverse proxy:** Nginx Proxy Manager
|
||||
- **SSL:** Let's Encrypt (auto-renew)
|
||||
- **Git:** Gitea (git.digital-home.site)
|
||||
- **Домены:**
|
||||
- API: api.digital-home.site
|
||||
- Web: pulse.digital-home.site
|
||||
|
||||
## Структура Backend
|
||||
|
||||
```
|
||||
homelab-api/
|
||||
├── cmd/api/
|
||||
│ └── main.go # Точка входа, инициализация
|
||||
├── internal/
|
||||
│ ├── bot/
|
||||
│ │ ├── bot.go # Telegram bot, long polling
|
||||
│ │ └── handlers.go # Обработчики команд и callback
|
||||
│ ├── config/
|
||||
│ │ └── config.go # Загрузка переменных окружения
|
||||
│ ├── handler/
|
||||
│ │ ├── auth.go # Регистрация, логин, JWT
|
||||
│ │ ├── habits.go # CRUD привычек
|
||||
│ │ ├── health.go # Health check
|
||||
│ │ ├── profile.go # Профиль пользователя
|
||||
│ │ └── tasks.go # CRUD задач
|
||||
│ ├── middleware/
|
||||
│ │ └── auth.go # JWT middleware
|
||||
│ ├── model/
|
||||
│ │ ├── habit.go # Модель привычки
|
||||
│ │ ├── task.go # Модель задачи
|
||||
│ │ └── user.go # Модель пользователя
|
||||
│ ├── repository/
|
||||
│ │ ├── db.go # Подключение к PostgreSQL
|
||||
│ │ ├── habit.go # SQL-запросы для привычек
|
||||
│ │ ├── task.go # SQL-запросы для задач
|
||||
│ │ └── user.go # SQL-запросы для пользователей
|
||||
│ ├── scheduler/
|
||||
│ │ └── scheduler.go # Cron jobs для уведомлений
|
||||
│ └── service/
|
||||
│ ├── auth.go # Бизнес-логика авторизации
|
||||
│ ├── email.go # Отправка email через Resend
|
||||
│ ├── habit.go # Бизнес-логика привычек
|
||||
│ └── task.go # Бизнес-логика задач
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
├── go.mod
|
||||
└── go.sum
|
||||
```
|
||||
|
||||
## Структура Frontend
|
||||
|
||||
```
|
||||
pulse-web/
|
||||
├── public/
|
||||
│ └── favicon.svg # Иконка молния ⚡
|
||||
├── src/
|
||||
│ ├── api/
|
||||
│ │ ├── client.js # Axios instance + interceptors
|
||||
│ │ ├── habits.js # API привычек
|
||||
│ │ ├── profile.js # API профиля
|
||||
│ │ └── tasks.js # API задач
|
||||
│ ├── components/
|
||||
│ │ ├── CreateHabitModal.jsx
|
||||
│ │ ├── CreateTaskModal.jsx
|
||||
│ │ ├── EditHabitModal.jsx
|
||||
│ │ ├── EditTaskModal.jsx
|
||||
│ │ └── Navigation.jsx # Нижняя навигация
|
||||
│ ├── pages/
|
||||
│ │ ├── ForgotPassword.jsx
|
||||
│ │ ├── Habits.jsx # Управление привычками
|
||||
│ │ ├── Home.jsx # Главная (сегодня)
|
||||
│ │ ├── Login.jsx
|
||||
│ │ ├── Register.jsx
|
||||
│ │ ├── ResetPassword.jsx
|
||||
│ │ ├── Settings.jsx # Настройки профиля
|
||||
│ │ ├── Stats.jsx # Статистика
|
||||
│ │ ├── Tasks.jsx # Управление задачами
|
||||
│ │ └── VerifyEmail.jsx
|
||||
│ ├── store/
|
||||
│ │ └── auth.js # Zustand store для авторизации
|
||||
│ ├── App.jsx # Роутинг
|
||||
│ ├── index.css # Глобальные стили
|
||||
│ └── main.jsx # Entry point
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
├── index.html
|
||||
├── nginx.conf
|
||||
├── package.json
|
||||
├── tailwind.config.js
|
||||
└── vite.config.js
|
||||
```
|
||||
|
||||
## База данных
|
||||
|
||||
### Таблицы
|
||||
|
||||
```sql
|
||||
-- Пользователи
|
||||
users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
username VARCHAR(100) NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
email_verified BOOLEAN DEFAULT FALSE,
|
||||
telegram_chat_id BIGINT,
|
||||
notifications_enabled BOOLEAN DEFAULT TRUE,
|
||||
timezone VARCHAR(50) DEFAULT 'Europe/Moscow',
|
||||
morning_reminder_time TIME DEFAULT '09:00',
|
||||
evening_reminder_time TIME DEFAULT '21:00',
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
)
|
||||
|
||||
-- Задачи
|
||||
tasks (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES users(id),
|
||||
title VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
icon VARCHAR(10) DEFAULT '📋',
|
||||
color VARCHAR(7) DEFAULT '#6B7280',
|
||||
due_date DATE,
|
||||
priority INTEGER DEFAULT 0, -- 0=none, 1=low, 2=medium, 3=high
|
||||
reminder_time TIME,
|
||||
completed_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
)
|
||||
|
||||
-- Привычки
|
||||
habits (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES users(id),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
icon VARCHAR(10) DEFAULT '✨',
|
||||
color VARCHAR(7) DEFAULT '#10B981',
|
||||
frequency VARCHAR(20) DEFAULT 'daily', -- daily, weekly, custom
|
||||
target_days INTEGER[], -- [1,3,5] для пн,ср,пт
|
||||
target_count INTEGER DEFAULT 1,
|
||||
reminder_time TIME,
|
||||
archived BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
)
|
||||
|
||||
-- Логи привычек
|
||||
habit_logs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
habit_id INTEGER REFERENCES habits(id),
|
||||
user_id INTEGER REFERENCES users(id),
|
||||
date DATE NOT NULL,
|
||||
count INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
)
|
||||
|
||||
-- Email токены
|
||||
email_tokens (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES users(id),
|
||||
token VARCHAR(255) NOT NULL,
|
||||
type VARCHAR(50) NOT NULL, -- verification, password_reset
|
||||
expires_at TIMESTAMP NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
)
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Авторизация
|
||||
| Method | Endpoint | Описание |
|
||||
|--------|----------|----------|
|
||||
| POST | /auth/register | Регистрация |
|
||||
| POST | /auth/login | Вход |
|
||||
| POST | /auth/refresh | Обновить токены |
|
||||
| POST | /auth/verify-email | Подтвердить email |
|
||||
| POST | /auth/forgot-password | Запросить сброс пароля |
|
||||
| POST | /auth/reset-password | Сбросить пароль |
|
||||
|
||||
### Профиль (требует JWT)
|
||||
| Method | Endpoint | Описание |
|
||||
|--------|----------|----------|
|
||||
| GET | /profile | Получить профиль |
|
||||
| PUT | /profile | Обновить профиль |
|
||||
|
||||
### Задачи (требует JWT)
|
||||
| Method | Endpoint | Описание |
|
||||
|--------|----------|----------|
|
||||
| GET | /tasks | Список задач |
|
||||
| GET | /tasks/today | Задачи на сегодня |
|
||||
| POST | /tasks | Создать задачу |
|
||||
| GET | /tasks/{id} | Получить задачу |
|
||||
| PUT | /tasks/{id} | Обновить задачу |
|
||||
| DELETE | /tasks/{id} | Удалить задачу |
|
||||
| POST | /tasks/{id}/complete | Отметить выполненной |
|
||||
| POST | /tasks/{id}/uncomplete | Снять отметку |
|
||||
|
||||
### Привычки (требует JWT)
|
||||
| Method | Endpoint | Описание |
|
||||
|--------|----------|----------|
|
||||
| GET | /habits | Список привычек |
|
||||
| POST | /habits | Создать привычку |
|
||||
| GET | /habits/{id} | Получить привычку |
|
||||
| PUT | /habits/{id} | Обновить привычку |
|
||||
| DELETE | /habits/{id} | Удалить (архивировать) |
|
||||
| POST | /habits/{id}/log | Отметить выполнение |
|
||||
| GET | /habits/{id}/logs | История выполнений |
|
||||
| DELETE | /habits/{id}/logs/{logId} | Удалить запись |
|
||||
| GET | /habits/stats | Общая статистика |
|
||||
| GET | /habits/{id}/stats | Статистика привычки |
|
||||
|
||||
## Telegram Bot
|
||||
|
||||
### Команды
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| /start | Показать Chat ID |
|
||||
| /tasks | Задачи на сегодня |
|
||||
| /habits | Привычки на сегодня |
|
||||
| /help | Справка |
|
||||
|
||||
### Inline кнопки
|
||||
- ✅ Выполнено — отмечает задачу/привычку
|
||||
- 🗑 Удалить — удаляет задачу
|
||||
- ⏰ +30 мин — откладывает напоминание
|
||||
|
||||
### Уведомления
|
||||
1. **Утреннее** (настраивается): задачи и привычки на сегодня
|
||||
2. **Вечернее** (настраивается): итоги дня
|
||||
3. **Индивидуальные**: по reminder_time каждой задачи/привычки
|
||||
|
||||
## Docker Compose
|
||||
|
||||
### Backend (homelab-api)
|
||||
```yaml
|
||||
services:
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
POSTGRES_USER: homelab
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_DB: homelab
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- backend
|
||||
|
||||
api:
|
||||
build: .
|
||||
environment:
|
||||
- DATABASE_URL=postgres://homelab:${DB_PASSWORD}@db:5432/homelab?sslmode=disable
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
- RESEND_API_KEY=${RESEND_API_KEY}
|
||||
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
||||
depends_on:
|
||||
- db
|
||||
networks:
|
||||
- backend
|
||||
- services_proxy
|
||||
```
|
||||
|
||||
### Frontend (pulse-web)
|
||||
```yaml
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
networks:
|
||||
- services_proxy
|
||||
```
|
||||
|
||||
## Дизайн
|
||||
|
||||
### Цвета
|
||||
- **Primary (Deep Teal):** #115E59
|
||||
- **Accent (Burnished Amber):** #F59E0B
|
||||
- **Surface:** #F8FAFC
|
||||
- **Text:** #1E293B
|
||||
|
||||
### Шрифты
|
||||
- **Body:** Inter (Google Fonts)
|
||||
|
||||
### UI-компоненты
|
||||
- Карточки с тенями и закруглениями (rounded-2xl)
|
||||
- Backdrop blur для header
|
||||
- Framer Motion анимации
|
||||
- Inline кнопки в Telegram
|
||||
|
||||
## Репозитории
|
||||
|
||||
- **Backend:** https://git.digital-home.site/daniil/pulse-api
|
||||
- **Frontend:** https://git.digital-home.site/daniil/pulse-web
|
||||
|
||||
---
|
||||
*Создано: 2026-02-06*
|
||||
66
Archive/Projects/Pulse/Notifications.md
Normal file
66
Archive/Projects/Pulse/Notifications.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Pulse — Система уведомлений
|
||||
|
||||
## Telegram бот
|
||||
|
||||
**Бот:** @pulse_tracking_bot
|
||||
**Токен:** `8440343622:AAFM0gaI3Uaqj10WcEIPYf70zWo41kSB2So`
|
||||
|
||||
### Функционал
|
||||
- При `/start` бот отправляет пользователю его `chat_id`
|
||||
- `/tasks` — задачи на сегодня с кнопками
|
||||
- `/habits` — привычки на сегодня с кнопками
|
||||
- Inline кнопки: "✅ Выполнено", "🗑 Удалить", "⏰ +30 мин"
|
||||
|
||||
## Профиль пользователя
|
||||
|
||||
### Настройки
|
||||
- Telegram Chat ID
|
||||
- Уведомления вкл/выкл
|
||||
- Часовой пояс
|
||||
- Время утреннего уведомления (default: 09:00)
|
||||
- Время вечернего уведомления (default: 21:00)
|
||||
|
||||
## Логика уведомлений
|
||||
|
||||
### Утреннее уведомление
|
||||
- Время: настраивается в профиле (default 09:00)
|
||||
- Содержит: задачи на сегодня, привычки на сегодня
|
||||
|
||||
### Вечернее уведомление (итоги дня)
|
||||
- Время: настраивается в профиле (default 21:00)
|
||||
- Содержит:
|
||||
- 📋 Задачи: ✅ выполнено / ⬜ осталось
|
||||
- 🎯 Привычки: ✅ выполнено / ⬜ осталось
|
||||
- Список невыполненных привычек
|
||||
- Мотивационное сообщение
|
||||
|
||||
### Индивидуальные напоминания
|
||||
- Для каждой задачи/привычки можно установить `reminder_time`
|
||||
- Если к этому времени не выполнено → push в Telegram
|
||||
- Кнопки: "✅ Выполнено", "⏰ +30 мин"
|
||||
|
||||
## Интеграция с Cosmo (OpenClaw)
|
||||
|
||||
### Workflow
|
||||
- **Задачи от Даниила** → Cosmo создаёт в Pulse API
|
||||
- **Привычки** → Cosmo создаёт в Pulse API
|
||||
- **Встречи/события** → Google Calendar (gog)
|
||||
- **Уведомления** → приходят в @pulse_tracking_bot
|
||||
|
||||
### API для Cosmo
|
||||
```bash
|
||||
# Создать задачу
|
||||
curl -X POST https://api.digital-home.site/tasks \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"title":"...", "due_date":"2026-02-10", "reminder_time":"09:00"}'
|
||||
|
||||
# Создать привычку
|
||||
curl -X POST https://api.digital-home.site/habits \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"...", "frequency":"daily", "reminder_time":"17:00"}'
|
||||
```
|
||||
|
||||
---
|
||||
*Обновлено: 2026-02-06*
|
||||
148
Archive/Projects/Pulse/Telegram-Bot.md
Normal file
148
Archive/Projects/Pulse/Telegram-Bot.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# Pulse — Telegram Bot
|
||||
|
||||
Бот как полноценный интерфейс к Pulse. Управление задачами и привычками без захода на сайт.
|
||||
|
||||
## Авторизация
|
||||
|
||||
### Связка аккаунта
|
||||
1. Пользователь отправляет `/start`
|
||||
2. Бот отвечает: "Привет! Твой chat_id: `123456789`. Добавь его в настройках профиля на сайте."
|
||||
3. После привязки бот может отправлять уведомления и принимать команды
|
||||
|
||||
### Альтернатива: Magic Link
|
||||
- `/login` → бот отправляет одноразовую ссылку для входа
|
||||
- Или код подтверждения, который вводишь на сайте
|
||||
|
||||
## Команды
|
||||
|
||||
### Задачи
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/tasks` | Список задач на сегодня (все) |
|
||||
| `/tasks remaining` | Только невыполненные задачи |
|
||||
| `/tasks all` | Все активные задачи |
|
||||
| `/task <текст>` | Создать новую задачу |
|
||||
| `/done <id>` | Отметить задачу выполненной |
|
||||
| `/undone <id>` | Снять отметку выполнения |
|
||||
|
||||
**Примеры:**
|
||||
```
|
||||
/task Купить молоко
|
||||
/task Позвонить врачу !высокий @завтра
|
||||
/done 15
|
||||
```
|
||||
|
||||
**Флаги при создании:**
|
||||
- `!высокий` / `!средний` / `!низкий` — приоритет
|
||||
- `@сегодня` / `@завтра` / `@10.02` — дедлайн
|
||||
- `🔔17:00` — напоминание
|
||||
|
||||
### Привычки
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/habits` | Привычки на сегодня |
|
||||
| `/habits all` | Все привычки |
|
||||
| `/check <id>` | Отметить привычку выполненной |
|
||||
| `/uncheck <id>` | Снять отметку |
|
||||
|
||||
**Примеры:**
|
||||
```
|
||||
/habits
|
||||
/check 3
|
||||
```
|
||||
|
||||
### Статистика
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/stats` | Краткая статистика (выполнено сегодня, streak) |
|
||||
| `/stats week` | Статистика за неделю |
|
||||
|
||||
### Настройки
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/settings` | Текущие настройки уведомлений |
|
||||
| `/notify on` / `/notify off` | Вкл/выкл уведомления |
|
||||
| `/morning 09:00` | Установить время утреннего уведомления |
|
||||
|
||||
## Inline кнопки
|
||||
|
||||
Для удобства бот отправляет сообщения с кнопками:
|
||||
|
||||
### Список задач
|
||||
```
|
||||
📋 Задачи на сегодня:
|
||||
|
||||
1. [ ] Купить молоко
|
||||
2. [ ] Позвонить врачу (!)
|
||||
3. [✓] Оплатить счета
|
||||
|
||||
[✅ Отметить] [➕ Новая задача]
|
||||
```
|
||||
|
||||
При нажатии "Отметить" → показать список для выбора.
|
||||
|
||||
### Уведомление о привычке
|
||||
```
|
||||
🔔 Напоминание: Гитара 🎸
|
||||
|
||||
Время заниматься! (17:00)
|
||||
|
||||
[✅ Выполнено] [⏰ Напомни через 30 мин]
|
||||
```
|
||||
|
||||
## Быстрые ответы
|
||||
|
||||
Бот понимает текст без команд в контексте:
|
||||
- После `/tasks` можно просто написать "купить хлеб" → создаст задачу
|
||||
- После показа списка можно написать "1" → отметит задачу #1
|
||||
|
||||
## Архитектура
|
||||
|
||||
### Хранение состояния
|
||||
- Redis или in-memory map для user states
|
||||
- Состояния: `idle`, `awaiting_task_text`, `awaiting_habit_check`
|
||||
|
||||
### Обработка команд
|
||||
```go
|
||||
type BotHandler struct {
|
||||
taskService *service.TaskService
|
||||
habitService *service.HabitService
|
||||
userService *service.UserService
|
||||
}
|
||||
|
||||
func (h *BotHandler) HandleUpdate(update tgbotapi.Update) {
|
||||
// роутинг команд
|
||||
}
|
||||
```
|
||||
|
||||
### Связь с основным API
|
||||
- Бот использует те же сервисы что и HTTP API
|
||||
- Авторизация по telegram_chat_id → user_id
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Команды работают только для привязанных аккаунтов
|
||||
- Rate limiting на создание задач
|
||||
- Логирование действий через бота
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] Базовые команды: /start, /tasks, /habits
|
||||
- [ ] Создание задач через /task
|
||||
- [ ] Отметка выполнения: /done, /check
|
||||
- [ ] Inline кнопки для быстрых действий
|
||||
- [ ] Контекстные быстрые ответы
|
||||
- [ ] Настройки через бота
|
||||
|
||||
## Приоритет реализации
|
||||
|
||||
1. **MVP:** /start, /tasks, /habits, /done, /check
|
||||
2. **v1.1:** Создание задач, inline кнопки
|
||||
3. **v1.2:** Быстрые ответы, статистика, настройки
|
||||
|
||||
---
|
||||
*Создано: 2026-02-06*
|
||||
298
Archive/Projects/Pulse/competitors-analysis.md
Normal file
298
Archive/Projects/Pulse/competitors-analysis.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# Анализ конкурентов для Pulse App
|
||||
|
||||
**Дата:** 15 февраля 2026
|
||||
**Цель:** Понять рынок habit tracker приложений и сформировать стратегию развития Pulse
|
||||
|
||||
---
|
||||
|
||||
## 📊 1. Сравнительная таблица
|
||||
|
||||
### Базовая информация
|
||||
|
||||
| Приложение | Платформы | Рейтинг | Загрузки | Целевая аудитория |
|
||||
|------------|-----------|---------|----------|-------------------|
|
||||
| **Habitify** | iOS, Android, Web, macOS, watchOS | 4.7★ | 3M+ | Продуктивные профессионалы, кросс-платформенные пользователи |
|
||||
| **Atoms** | iOS only | 4.5★ | 500K+ | Фанаты книги "Atomic Habits", premium сегмент |
|
||||
| **Streaks** | iOS, macOS, watchOS, Vision Pro | 4.8★ | 2M+ | Apple ecosystem пользователи, минималисты |
|
||||
| **Habitica** | iOS, Android, Web | 4.3★ | 10M+ | Геймеры, молодёжь, любители RPG |
|
||||
| **Loop Habit Tracker** | Android | 4.7★ | 5M+ | Privacy-focused, open-source энтузиасты |
|
||||
| **Fabulous** | iOS, Android | 4.6★ | 10M+ | Self-improvement seekers, wellness-focused |
|
||||
| **Done** | iOS only | 4.6★ | 500K+ | Простые пользователи, фокус на гибкости |
|
||||
| **Productive** | iOS only | 4.7★ | 3M+ | Пользователи iOS ищущие guided experience |
|
||||
| **Way of Life** | iOS, Android | 4.6★ | 1M+ | Data-driven пользователи, аналитики |
|
||||
| **HabitNow** | Android only | 4.6★ | 5M+ | Android пользователи, budget-conscious |
|
||||
|
||||
### Модель монетизации
|
||||
|
||||
| Приложение | Free план | Месяц | Год | Lifetime | Trial |
|
||||
|------------|-----------|-------|-----|----------|-------|
|
||||
| **Habitify** | 15 check-ins/нед | $4.99 | $34.99 | $64.99 | 7 дней |
|
||||
| **Atoms** | 1-3 привычки | $10 | $70 | — | 28 дней |
|
||||
| **Streaks** | — | — | — | $4.99 (one-time) | — |
|
||||
| **Habitica** | Полный функционал | $4.99 | $47.99 | — | — |
|
||||
| **Loop** | Полный (open-source) | Бесплатно | — | — | — |
|
||||
| **Fabulous** | Ограниченные journeys | $3.33 | $39.99 | — | 7 дней |
|
||||
| **Done** | Ограничено привычек | — | — | $24.99-$99.99* | — |
|
||||
| **Productive** | Ограничено | $6.99 | $34.99 | — | 7 дней |
|
||||
| **Way of Life** | 3 привычки | $4.99 | ~$30 | $49.99 | — |
|
||||
| **HabitNow** | 7 привычек | — | — | $11.99 | — |
|
||||
|
||||
*Done часто со скидками до 95%
|
||||
|
||||
### Ключевые функции
|
||||
|
||||
| Приложение | Daily | Weekly | Custom | Напоминания | Статистика | Виджеты | Watch | Health интеграция | Gamification | Социальные | Оффлайн |
|
||||
|------------|-------|--------|--------|-------------|------------|---------|-------|-------------------|--------------|------------|---------|
|
||||
| **Habitify** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Стрики | ❌ | ✅ |
|
||||
| **Atoms** | ✅ | ❌ | ❌ | ✅ | Базовая | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
|
||||
| **Streaks** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Стрики | Sharing | ✅ |
|
||||
| **Habitica** | ✅ | ❌ | ✅ | ✅ | Базовая | ❌ | ❌ | ❌ | 🎮 RPG полная | Parties/Guilds | ❌ |
|
||||
| **Loop** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | Стрики/Score | ❌ | ✅ |
|
||||
| **Fabulous** | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | Journeys | Circles | ❌ |
|
||||
| **Done** | ✅ | ✅ | ✅ | Premium | ✅ | ✅ | ❌ | ❌ | Стрики | ❌ | ✅ |
|
||||
| **Productive** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | Challenges | ❌ | ✅ |
|
||||
| **Way of Life** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | Chains | ❌ | ✅ |
|
||||
| **HabitNow** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | Стрики | ❌ | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 💰 2. Анализ монетизации
|
||||
|
||||
### Популярные модели
|
||||
|
||||
1. **Freemium с подпиской** (Habitify, Productive, Fabulous)
|
||||
- Free: ограниченное количество привычек или функций
|
||||
- Premium: $3-7/месяц или $30-40/год
|
||||
- Самая распространённая модель
|
||||
|
||||
2. **One-time purchase** (Streaks, HabitNow, Done)
|
||||
- $5-15 единоразово
|
||||
- Привлекает пользователей, не любящих подписки
|
||||
- Работает для iOS (Apple Store friendly)
|
||||
|
||||
3. **Open-source / Free** (Loop, Habitica Free)
|
||||
- Монетизация через donations или premium косметику
|
||||
- Привлекает privacy-conscious аудиторию
|
||||
|
||||
4. **Premium-first** (Atoms)
|
||||
- Высокая цена ($70-120/год)
|
||||
- Бренд автора (James Clear)
|
||||
- Узкая, но платёжеспособная аудитория
|
||||
|
||||
### Средние цены на рынке
|
||||
|
||||
| Тип | Диапазон | Среднее |
|
||||
|-----|----------|---------|
|
||||
| Месячная подписка | $3.33 - $10 | **$5-6** |
|
||||
| Годовая подписка | $30 - $70 | **$35-40** |
|
||||
| Lifetime | $25 - $100 | **$50-65** |
|
||||
| One-time (iOS) | $5 - $12 | **$6** |
|
||||
|
||||
### Что работает лучше
|
||||
|
||||
- **7-дневный trial** — стандарт индустрии
|
||||
- **Ограничение количества привычек** в free версии (3-7)
|
||||
- **Lifetime purchase** как upsell для лояльных пользователей
|
||||
- **Скидки 50-80%** на lifetime при запуске и праздниках
|
||||
|
||||
---
|
||||
|
||||
## ✅ 3. Must-have функции (базовый стандарт)
|
||||
|
||||
Функции, которые есть у **всех топовых приложений** — без них не конкурентоспособны:
|
||||
|
||||
### Типы привычек
|
||||
- ✅ **Daily habits** — ежедневные привычки
|
||||
- ✅ **Weekly habits** — X раз в неделю
|
||||
- ✅ **Custom schedule** — гибкое расписание (вт, чт, сб)
|
||||
|
||||
### Напоминания
|
||||
- ✅ **Push-уведомления** с выбором времени
|
||||
- ✅ **Несколько напоминаний** на одну привычку
|
||||
- ✅ **Smart reminders** (location-based — опционально)
|
||||
|
||||
### Отслеживание прогресса
|
||||
- ✅ **Streak counter** — текущая серия
|
||||
- ✅ **Calendar view** — визуализация выполнения
|
||||
- ✅ **Completion rate** — процент выполнения
|
||||
- ✅ **Graphs/Charts** — тренды за период
|
||||
|
||||
### UX
|
||||
- ✅ **Quick check-in** — отметка в 1-2 тапа
|
||||
- ✅ **Home screen widgets**
|
||||
- ✅ **Dark mode**
|
||||
- ✅ **Offline mode**
|
||||
|
||||
### Персонализация
|
||||
- ✅ **Icons/Emoji** для привычек
|
||||
- ✅ **Цветовая кодировка**
|
||||
- ✅ **Categories/Groups**
|
||||
|
||||
---
|
||||
|
||||
## 🌟 4. Differentiators (уникальные фичи лидеров)
|
||||
|
||||
### Habitify — Cross-platform sync
|
||||
- Бесшовная синхронизация между iOS, Android, Web, Mac, Watch
|
||||
- Один аккаунт везде — редкость на рынке
|
||||
|
||||
### Streaks — Apple Health интеграция
|
||||
- Автоматическая отметка привычек через HealthKit
|
||||
- "Walked 10K steps" → автоматически отмечено
|
||||
- Apple Watch complications
|
||||
|
||||
### Habitica — Full RPG gamification
|
||||
- Аватар, уровни, экипировка, питомцы
|
||||
- Parties для совместных квестов
|
||||
- Boss battles зависят от выполнения привычек
|
||||
- Единственное приложение с глубокой геймификацией
|
||||
|
||||
### Fabulous — Science-based coaching
|
||||
- "Journeys" — пошаговые программы изменений
|
||||
- Основано на исследованиях Duke University
|
||||
- Аудио-коучинг и медитации
|
||||
- Больше похоже на wellness app, чем на трекер
|
||||
|
||||
### Loop — Open-source & Privacy
|
||||
- Полностью бесплатное, нет рекламы
|
||||
- Данные только локально
|
||||
- "Habit Score" — уникальная формула силы привычки
|
||||
- Export в CSV/SQLite
|
||||
|
||||
### Atoms — Author brand power
|
||||
- James Clear (15M+ книг продано)
|
||||
- Daily Lessons из книги "Atomic Habits"
|
||||
- Premium positioning ($120/год)
|
||||
|
||||
### Way of Life — Flexible streaks
|
||||
- "Chains" с custom длиной (5 дней подряд, потом перерыв)
|
||||
- "Red chains" — отслеживание плохих серий
|
||||
- Journal notes к каждой записи
|
||||
|
||||
---
|
||||
|
||||
## 🚀 5. Рекомендации для Pulse
|
||||
|
||||
### Текущие преимущества Pulse
|
||||
- ✅ **Interval habits** (каждые N дней) — есть не у всех
|
||||
- ✅ **Freeze period** — уникальная фича
|
||||
- ✅ **Backfill** (отметка за прошлые дни) — важно
|
||||
- ✅ **Telegram bot** — уникальная интеграция
|
||||
- ✅ **Утренний/вечерний брифинг** — редкость
|
||||
- ✅ **Tasks + Habits** в одном месте
|
||||
- ✅ **PWA** — работает везде без app store
|
||||
|
||||
### Quick Wins (1-2 недели каждая)
|
||||
|
||||
| Фича | Сложность | Impact | Почему |
|
||||
|------|-----------|--------|--------|
|
||||
| **Home screen widgets** | Medium | High | Must-have, все топы имеют |
|
||||
| **Dark mode** | Easy | Medium | Ожидаемый стандарт |
|
||||
| **Улучшенная статистика** | Medium | High | Графики, calendar heatmap |
|
||||
| **Streak badges/rewards** | Easy | Medium | Простая геймификация |
|
||||
| **Categories/Groups** | Easy | Medium | Организация привычек |
|
||||
| **Emoji picker** | Easy | Low | UX улучшение |
|
||||
|
||||
### Для конкуренции с топами (1-3 месяца)
|
||||
|
||||
| Фича | Сложность | Impact | Референс |
|
||||
|------|-----------|--------|----------|
|
||||
| **Native iOS app** | High | Very High | Streaks, Done |
|
||||
| **Native Android app** | High | Very High | HabitNow, Loop |
|
||||
| **Apple Watch / WearOS** | High | Medium | Streaks, Habitify |
|
||||
| **Apple Health / Google Fit** | Medium | High | Streaks — автоотметка |
|
||||
| **Cloud sync** | Medium | High | Habitify |
|
||||
| **Onboarding flow** | Medium | High | Fabulous — лучший |
|
||||
| **Export (CSV/JSON)** | Easy | Medium | Loop, Way of Life |
|
||||
|
||||
### Уникальные фичи (не делает никто или почти никто)
|
||||
|
||||
| Идея | Конкуренты | Potential |
|
||||
|------|------------|-----------|
|
||||
| **Telegram-first трекер** | Никто | 🔥 Huge — уникальная ниша |
|
||||
| **AI habit suggestions** | Atoms (примитивно) | High — персонализация |
|
||||
| **Voice check-in** (голосовые сообщения) | Никто | Medium — accessibility |
|
||||
| **Habit templates marketplace** | Никто полноценно | Medium |
|
||||
| **Family/Team habits** | Habitica (parties) | Medium — accountability |
|
||||
| **Smart scheduling** (AI) | Reclaim.ai (calendar) | High — но сложно |
|
||||
| **Habit chains** (привычки зависят друг от друга) | Никто | Medium |
|
||||
| **Location-based triggers** | Некоторые примитивно | Medium |
|
||||
| **Mood correlation** | Way of Life (notes) | Medium — insights |
|
||||
|
||||
### Модель монетизации для Pulse
|
||||
|
||||
**Рекомендуемая стратегия:**
|
||||
|
||||
```
|
||||
FREE TIER:
|
||||
├── До 5 привычек
|
||||
├── До 10 задач
|
||||
├── Базовая статистика
|
||||
├── Telegram бот (уведомления)
|
||||
└── PWA доступ
|
||||
|
||||
PREMIUM ($4.99/мес или $29.99/год):
|
||||
├── Unlimited привычки и задачи
|
||||
├── Расширенная статистика (графики, heatmaps)
|
||||
├── Widgets (когда будут)
|
||||
├── Custom themes
|
||||
├── Export данных
|
||||
├── Priority support
|
||||
└── Утренний/вечерний брифинг (AI-улучшенный)
|
||||
|
||||
LIFETIME: $49.99 (launch price $29.99)
|
||||
```
|
||||
|
||||
**Почему эта модель:**
|
||||
- Цена ниже Habitify ($35/год) и Productive ($35/год)
|
||||
- Конкурентна с HabitNow ($12 lifetime)
|
||||
- Telegram-first = низкие costs = можно быть дешевле
|
||||
- Lifetime привлекает early adopters
|
||||
|
||||
---
|
||||
|
||||
## 📈 Roadmap предложение
|
||||
|
||||
### Phase 1: Foundation (Q1 2026)
|
||||
- [ ] Dark mode
|
||||
- [ ] Улучшенная статистика (графики)
|
||||
- [ ] Calendar heatmap view
|
||||
- [ ] Categories для привычек
|
||||
- [ ] Export CSV
|
||||
|
||||
### Phase 2: Engagement (Q2 2026)
|
||||
- [ ] Streak badges и rewards
|
||||
- [ ] PWA widgets (если поддержка браузеров улучшится)
|
||||
- [ ] Onboarding flow
|
||||
- [ ] Telegram inline buttons (quick check-in)
|
||||
|
||||
### Phase 3: Growth (Q3 2026)
|
||||
- [ ] Native iOS app
|
||||
- [ ] Apple Health integration
|
||||
- [ ] Apple Watch app
|
||||
- [ ] Premium tier launch
|
||||
|
||||
### Phase 4: Differentiation (Q4 2026)
|
||||
- [ ] AI habit suggestions
|
||||
- [ ] Native Android app
|
||||
- [ ] Google Fit integration
|
||||
- [ ] Habit templates library
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Ключевые выводы
|
||||
|
||||
1. **Рынок насыщен**, но большинство приложений похожи
|
||||
2. **Telegram-интеграция** — уникальное преимущество Pulse
|
||||
3. **Freeze period** и **interval habits** — сильные дифференциаторы
|
||||
4. **Must-have**: widgets, dark mode, лучшая статистика
|
||||
5. **Native apps** важны для mainstream, но PWA достаточно для MVP
|
||||
6. **Freemium модель** работает лучше всего
|
||||
7. **$30-40/год** — sweet spot для подписки
|
||||
8. **Gamification** работает для узкой аудитории (Habitica)
|
||||
9. **Cross-platform sync** — killer feature для серьёзных пользователей
|
||||
10. **Apple Health автоотметка** — wow-фактор для iOS пользователей
|
||||
|
||||
---
|
||||
|
||||
*Документ подготовлен на основе анализа 10 приложений, публичных обзоров, и данных app store на февраль 2026.*
|
||||
Reference in New Issue
Block a user