Предложение: Система оповещений

Предложение: Система оповещений
Photo by Sigmund / Unsplash

Проблема

Пользователь не знает что происходит с его активами и заявками.

Что нельзя узнать сейчас:

  • ❌ Твоя лимитная заявка исполнилась
  • ❌ Кто-то прокомментировал под твоей акцией
  • ❌ IPO персоны которую ты отслеживаешь началось
  • ❌ Цена акции которую ты держишь сильно изменилась
  • ❌ Аукцион перешёл в новый раунд
  • ❌ Твоя акция поднялась/упала на X%
  • ❌ Кто-то ответил на твой комментарий

Итог: Приходится постоянно обновлять страницу и проверять вручную.


Решение: Универсальная система оповещений

Три уровня оповещений:

  1. In-app notifications — уведомления внутри сайта
  2. Push notifications — браузерные пуши
  3. Email notifications — письма на почту (опционально)

1. In-App Notifications

1.1 Иконка с счётчиком

┌────────────────────────────────────────┐
│  PersonalShares     Portfolio   🔔 3   │
└────────────────────────────────────────┘

Поведение:

  • Красный кружок с числом непрочитанных
  • Клик → открывается панель уведомлений
  • Авто-обновление каждые 30 секунд

1.2 Панель уведомлений

┌────────────────────────────────────────────────────────┐
│  Notifications                         Mark all read   │
├────────────────────────────────────────────────────────┤
│                                                         │
│  🟢 Your limit order executed             2 min ago    │
│     Bought 10 USYK @ $150                              │
│     [View Order] [View Asset]                          │
│                                                         │
├────────────────────────────────────────────────────────┤
│                                                         │
│  💬 New comment on MNTK                   5 min ago    │
│     user_456: "Great investment!"                      │
│     [Reply] [View Thread]                              │
│                                                         │
├────────────────────────────────────────────────────────┤
│                                                         │
│  🚀 BRSKH IPO started                     1 hour ago   │
│     Clock auction now live at $100                     │
│     [Buy Now] [View Details]                           │
│                                                         │
├────────────────────────────────────────────────────────┤
│                                                         │
│  📈 USYK price alert                      2 hours ago  │
│     Price reached $155 (+10% from your avg)            │
│     [View Chart]                                       │
│                                                         │
└────────────────────────────────────────────────────────┘

Фичи:

  • ✅ Скролл для старых уведомлений
  • ✅ Авто-пометка прочитанным при просмотре
  • ✅ Кнопки быстрых действий
  • ✅ Группировка по типу (опционально)
  • ✅ Фильтр: All / Unread / Trading / Social

2. Типы уведомлений

2.1 Trading Events (Торговые события)

Order Executed (Заявка исполнена)

🟢 Your limit buy order executed
   Bought 10 USYK @ $150
   Total: $1,500
   [View Order] [View Portfolio]

Когда:

  • Лимитная заявка полностью исполнилась
  • Лимитная заявка частично исполнилась

Параметры:

  • Ticker
  • Amount
  • Price
  • Total USD

Order Partially Filled (Заявка частично исполнена)

🟡 Your limit sell order partially filled
   Sold 5 / 20 MNTK @ $95
   Remaining: 15 shares
   [View Order] [Cancel Order]

Когда:

  • Лимитная заявка исполнена частично
  • Прогресс обновился (например, было 2/20, стало 5/20)

Order Cancelled (Заявка отменена)

🔴 Your limit order was cancelled
   Sell 20 MNTK @ $95
   Reason: User cancelled
   [View History]

Когда:

  • Пользователь сам отменил заявку
  • Система отменила (insufficient balance, etc.)

IPO Allocation (IPO распределение)

🎉 Your IPO order was allocated
   USYK Clock Auction Round 3
   Bought 1 share @ $120
   [View Asset]

Когда:

  • Аукционный раунд завершился
  • Пользователь получил акции

2.2 Price Alerts (Ценовые алерты)

Price Target Reached (Цена достигла цели)

📈 USYK reached your target price
   Current: $155 (target: $150)
   Change: +10% from your avg price
   [View Chart] [Set New Alert]

Когда:

  • Цена достигла уровня который пользователь установил
  • Или: цена изменилась на X% от средней цены покупки

Настройки пользователя:

  • Установить целевую цену (target price)
  • Установить процент изменения (например, ±10%)

High Volatility (Высокая волатильность)

⚡ MNTK is moving fast!
   +15% in last hour
   Current price: $110 (was $95)
   [View Chart]

Когда:

  • Цена изменилась на ±X% за короткое время (например, ±10% за час)

2.3 IPO & Auction Events (IPO и аукционы)

New IPO Started (Новое IPO началось)

🚀 New IPO: Borys Shukhevych (BRSKH)
   Clock auction started at $100
   Round 1 of ?
   [View Details] [Buy Now]

Когда:

  • Новая персона прошла модерацию
  • IPO/аукцион запустился

Фильтр:

  • Пользователь может выбрать "уведомлять о всех IPO"
  • Или только о персонах из его watchlist

Auction Round Update (Раунд аукциона обновился)

🔄 USYK auction advanced to Round 4
   New price: $130
   Previous round had 80 buyers
   [View Auction] [Place Bid]

Когда:

  • Аукцион перешёл в следующий раунд
  • Только для акций в watchlist или где пользователь участвует

Auction Ending Soon (Аукцион скоро закончится)

⏰ USYK auction ending soon!
   Round 4 closes in 30 minutes
   Current price: $130
   [Place Final Bid]

Когда:

  • До конца раунда осталось мало времени (например, 30 минут)
  • Пользователь ещё не участвовал в этом раунде

Auction Ended (Аукцион завершился)

🏁 USYK auction has ended
   Final price: $120 (Round 3)
   Post-auction rounds starting soon
   [View Results]

Когда:

  • Аукцион завершился (не хватило buyers)
  • Или достиг максимального количества раундов

2.4 Social Events (Социальные события)

New Comment (Новый комментарий)

💬 New comment on USYK
   user_789: "Amazing performance today!"
   [Reply] [View Thread]

Когда:

  • Кто-то оставил комментарий под акцией которую ты держишь
  • Кто-то оставил комментарий на странице твоей персоны (если ты владелец)

Comment Reply (Ответ на комментарий)

💬 user_456 replied to your comment
   "I agree, USYK has strong fundamentals"
   On: USYK
   [View Thread] [Reply]

Когда:

  • Кто-то ответил на твой комментарий

Comment Like (Лайк комментария)

❤️ Your comment got 10 likes
   "USYK is undervalued right now"
   On: USYK
   [View Comment]

Когда:

  • Твой комментарий набрал N лайков (например, 10, 50, 100)

2.5 Portfolio Events (События портфеля)

Significant Portfolio Change (Значительное изменение портфеля)

📊 Your portfolio is up 15% today!
   Total value: $12,450 (+$1,625)
   Best performer: USYK (+20%)
   [View Portfolio]

Когда:

  • Портфель изменился на ±X% за день (например, ±10%)

Dividend / Payout (Выплаты)

💰 You received a dividend
   USYK: $5.00 per share
   Total: $50 (you hold 10 shares)
   [View Transaction]

Когда:

  • Персона выплатила дивиденды
  • (если в будущем будет эта фича)

2.6 System Events (Системные события)

Deposit Completed (Депозит завершён)

✅ Your deposit was processed
   Amount: $1,000 USD
   New balance: $11,000
   [View Balance]

Когда:

  • Депозит через Hyperswitch успешно обработан

Withdrawal Completed (Вывод завершён)

✅ Your withdrawal was processed
   Amount: $500 USD
   New balance: $10,500
   [View Transaction]

Когда:

  • Вывод средств завершён

Transaction Failed (Транзакция не удалась)

❌ Transaction failed
   Spot buy USYK: 10 shares @ $150
   Reason: Insufficient USD balance
   [View Details] [Add Funds]

Когда:

  • Транзакция не прошла по любой причине

3. Настройки уведомлений

3.1 Страница настроек

┌────────────────────────────────────────────────────────┐
│  Notification Settings                                  │
├────────────────────────────────────────────────────────┤
│                                                         │
│  Trading Events:                                       │
│  ☑ Order executed                    In-app  Push      │
│  ☑ Order partially filled            In-app  Push      │
│  ☑ Order cancelled                   In-app  —         │
│  ☑ IPO allocation                    In-app  Push      │
│                                                         │
│  Price Alerts:                                         │
│  ☑ Price target reached              In-app  Push      │
│  ☑ High volatility (±10%/hour)       In-app  Push      │
│  ☑ Daily portfolio summary           Email   —         │
│                                                         │
│  IPO & Auctions:                                       │
│  ☑ New IPO started                   In-app  Push      │
│  ☑ Auction round update              In-app  —         │
│  ☑ Auction ending soon (30 min)      In-app  Push      │
│  ☑ Auction ended                     In-app  —         │
│                                                         │
│  Social:                                               │
│  ☑ New comment on my assets          In-app  —         │
│  ☑ Reply to my comment               In-app  Push      │
│  ☑ Comment likes (every 10)          In-app  —         │
│                                                         │
│  Portfolio:                                            │
│  ☑ Significant change (±10%/day)     In-app  Push      │
│  ☑ Weekly portfolio report           Email   —         │
│                                                         │
│  System:                                               │
│  ☑ Deposit completed                 In-app  Email     │
│  ☑ Withdrawal completed              In-app  Email     │
│  ☑ Transaction failed                In-app  Push      │
│                                                         │
│  [Save Settings]                                       │
│                                                         │
└────────────────────────────────────────────────────────┘

Каналы:

  • In-app: Всегда включено, показывается в иконке 🔔
  • Push: Браузерное уведомление (требует разрешения)
  • Email: Письмо на почту (для важных событий)

3.2 Умные настройки

Do Not Disturb (Не беспокоить)

┌────────────────────────────────────────┐
│  Do Not Disturb                        │
├────────────────────────────────────────┤
│                                         │
│  ☑ Enable quiet hours                  │
│  └─ From: [22:00] To: [08:00]          │
│                                         │
│  ☑ Pause push notifications            │
│  ☐ Pause email notifications           │
│  ☐ Pause all notifications             │
│                                         │
│  Exceptions (always notify):           │
│  ☑ Critical price alerts (±20%)        │
│  ☑ Large order executions (>$1,000)    │
│  ☑ System security alerts              │
│                                         │
└────────────────────────────────────────┘

Frequency Control (Контроль частоты)

┌────────────────────────────────────────┐
│  Notification Frequency                │
├────────────────────────────────────────┤
│                                         │
│  Batch similar notifications:          │
│  ☑ Group partial fills                 │
│     "3 orders partially filled"        │
│     instead of 3 separate              │
│                                         │
│  ☑ Daily digest mode                   │
│     Send one summary at [09:00]        │
│     instead of real-time               │
│                                         │
│  ☐ Weekly digest only                  │
│                                         │
└────────────────────────────────────────┘

4. Push Notifications (Браузерные)

4.1 Запрос разрешения

┌────────────────────────────────────────────────┐
│  Enable Push Notifications?                    │
│                                                 │
│  Get instant alerts when:                      │
│  • Your orders are executed                    │
│  • Someone comments on your shares             │
│  • New IPOs start                              │
│  • Price targets are reached                   │
│                                                 │
│  [Enable Notifications] [Maybe Later]          │
└────────────────────────────────────────────────┘

Когда показывать:

  • После первой успешной сделки
  • Или когда пользователь устанавливает первый price alert

4.2 Формат пуша

Пример 1: Order executed

PersonalShares
🟢 Order executed: Bought 10 USYK @ $150
Click to view details

Пример 2: Price alert

PersonalShares
📈 USYK reached $155 (+10%)
Click to view chart

Пример 3: New comment

PersonalShares
💬 New comment on USYK: "Great investment!"
Click to reply

5. Email Notifications

5.1 Order Executed Email

Subject: ✅ Your order was executed - Bought 10 USYK

────────────────────────────────────────

Hi user_789,

Your limit order was executed:

Order Details:
• Type: Limit Buy
• Asset: USYK (Oleksandr Usyk)
• Amount: 10 shares
• Price: $150.00 per share
• Total: $1,500.00

Execution:
• Matched at: 2025-10-14 18:45:23
• Average price: $150.00

Your Portfolio:
• USYK holdings: 10 shares
• Total value: $1,500
• Available USD: $8,500

[View Order Details] [View Portfolio]

────────────────────────────────────────

PersonalShares
Invest in people you believe in

[Unsubscribe] [Notification Settings]

5.2 Daily Digest Email

Subject: 📊 Your PersonalShares Daily Summary - Oct 14, 2025

────────────────────────────────────────

Hi user_789,

Here's what happened today:

Portfolio Performance:
• Total value: $12,450 (+8.5% today)
• Best performer: USYK +15%
• Worst performer: BRSKH -2%

Trading Activity:
• 2 orders executed
  ✅ Bought 10 USYK @ $150
  ✅ Sold 5 MNTK @ $95
• 1 active limit order
  ⏸️ Sell 20 MNTK @ $100

New Notifications:
• 3 new comments on your assets
• BRSKH IPO started
• USYK reached your price target

[View Full Portfolio] [Trading Dashboard]

────────────────────────────────────────

Sent daily at 9:00 AM
[Change frequency] [Unsubscribe]

6. Технический стек

Backend:

// Таблица notifications
{
  id: uuid,
  user_id: string,
  type: 'order_executed' | 'comment_new' | 'ipo_started' | ...,
  title: string,
  message: string,
  data: jsonb,  // {ticker, amount, price, ...}
  read: boolean,
  created_at: timestamp
}

// Таблица notification_settings
{
  user_id: string,
  type: string,
  in_app: boolean,
  push: boolean,
  email: boolean
}

// Таблица push_subscriptions
{
  user_id: string,
  endpoint: string,
  keys: jsonb  // для Web Push API
}

API:

// Получить уведомления
GET /api/notifications?limit=20&offset=0&filter=unread

// Пометить прочитанным
POST /api/notifications/:id/read

// Пометить все прочитанными
POST /api/notifications/read-all

// Настройки
GET /api/notifications/settings
PUT /api/notifications/settings

// Подписка на пуши
POST /api/notifications/push/subscribe
DELETE /api/notifications/push/unsubscribe

Frontend:

// Polling для in-app notifications (каждые 30 сек)
setInterval(fetchNotifications, 30000)

// Web Push API
navigator.serviceWorker.register('/sw.js')
  .then(reg => reg.pushManager.subscribe({...}))

// Показ пуша
self.addEventListener('push', (event) => {
  const data = event.data.json()
  self.registration.showNotification(data.title, {
    body: data.message,
    icon: '/icon.png',
    badge: '/badge.png',
    data: data.payload
  })
})

7. Roadmap разработки

Неделя 1-2: Базовая инфраструктура

  • ✅ Таблицы notifications, notification_settings
  • ✅ API для получения/создания уведомлений
  • ✅ Иконка 🔔 с счётчиком непрочитанных
  • ✅ Панель уведомлений (dropdown)

Неделя 3-4: Trading events

  • ✅ Order executed notifications
  • ✅ Order partially filled
  • ✅ Order cancelled
  • ✅ IPO allocation

Неделя 5-6: Price alerts & IPO events

  • ✅ Price target reached
  • ✅ High volatility alerts
  • ✅ New IPO started
  • ✅ Auction round updates

Неделя 7-8: Social & Push

  • ✅ Comment notifications
  • ✅ Reply notifications
  • ✅ Browser push notifications
  • ✅ Service Worker setup

Неделя 9-10: Email & Settings

  • ✅ Email notifications
  • ✅ Daily/weekly digests
  • ✅ Notification settings page
  • ✅ Do Not Disturb режим

8. Примеры сценариев

Сценарий 1: Трейдер с лимитными заявками

1. User_789 устанавливает лимитную заявку:
   Sell 20 USYK @ $155

2. Через час цена достигает $155
   → In-app: 🟢 "Your order was executed"
   → Push: "Sold 20 USYK @ $155"

3. Пользователь кликает на уведомление
   → Открывается страница Order Details

4. Видит полную информацию:
   → 20 shares sold
   → $3,100 received
   → Portfolio updated

Сценарий 2: Инвестор следит за IPO

1. User_456 добавляет BRSKH в watchlist

2. Оператор запускает IPO для BRSKH
   → In-app: 🚀 "BRSKH IPO started"
   → Push: "Clock auction at $100"

3. Аукцион переходит в Round 2
   → In-app: 🔄 "Round 2 started at $110"
   (не пуш, т.к. не критично)

4. До конца раунда 30 минут
   → Push: ⏰ "Round 2 ending in 30 min"

5. Пользователь покупает 1 share

6. Аукцион завершается
   → In-app: 🎉 "You got 1 BRSKH @ $110"
   → Email: "Your IPO allocation"

Сценарий 3: Владелец персоны

1. User_123 владеет персоной MNTK

2. User_456 оставляет комментарий на MNTK
   → In-app: 💬 "New comment on MNTK"
   (не пуш, т.к. не критично)

3. User_789 отвечает на комментарий User_456
   → In-app для User_456: 💬 "Reply to your comment"
   → Push для User_456: "user_789 replied"

4. Комментарий User_456 набирает 10 лайков
   → In-app: ❤️ "Your comment got 10 likes"

Метрики успеха

Engagement:

  • CTR на уведомления: > 30%
  • Время реакции: < 5 минут
  • Push opt-in rate: > 50%

Retention:

  • Пользователи с включенными пушами: +20% retention
  • Возвраты после уведомления: > 40%

TL;DR

Проблема: Пользователь не знает когда его заявки исполнились, когда под его акцией оставили комментарий, когда началось IPO.

Решение: Универсальная система оповещений с тремя каналами:

  1. In-app — иконка 🔔 с панелью уведомлений
  2. Push — браузерные пуши для критичных событий
  3. Email — дайджесты и важные события

Типы уведомлений:

  • ✅ Trading: заявки исполнились/отменились/частично исполнились
  • ✅ Price alerts: цена достигла цели, высокая волатильность
  • ✅ IPO: новые аукционы, раунды, окончания
  • ✅ Social: комментарии, ответы, лайки
  • ✅ Portfolio: значительные изменения, дайджесты
  • ✅ System: депозиты, выводы, ошибки

Настройки:

  • Гранулярный контроль: каждый тип = свой канал
  • Do Not Disturb режим
  • Частота уведомлений (real-time / digest)

Результат:

  • ✅ Пользователь всегда в курсе
  • ✅ Не пропускает важные события
  • ✅ Возвращается на платформу чаще
  • ✅ Выше engagement и retention

Срок разработки: 10 недель (базовый функционал за 4 недели)

Приоритет: 🔥 Высокий — без оповещений пользователи пропускают исполнения заявок и теряют возможности.