# Tasks — Spec 007 Mobile Push Notifications **Status:** 📋 Backlog (draft) **Prioridade:** P1 **API alvo:** `0.9.0-desk-push-ntfy` → `0.9.1-desk-push-pwa` --- ## Fase A — ntfy por usuário (MVP) - [ ] **T001** Schema: `desk_users.ntfy_topic` estável + `push_ntfy_enabled` - [ ] **T002** Migrar lógica de `ntfy_topic` de registration-only para user profile - [ ] **T003** `GET /api/v1/push/settings` - [ ] **T004** `POST /api/v1/push/ntfy/enable` · `disable` - [ ] **T005** `POST /api/v1/push/test` (notificação teste) - [ ] **T006** UI Minha conta — seção Notificações (toggle + link + QR) - [ ] **T007** `push_service.py` — `notify_user()`, `notify_role()` - [ ] **T008** Hook: ticket Wazuh criado → push `noc` + `ops_lead` + root - [ ] **T009** Hook: pedido cadastro → push root - [ ] **T010** Rate limit push · logs · falha silenciosa - [ ] **T011** Testes manuais Android/iOS ntfy - [ ] **T012** Docs quickstart + env `DESK_NTFY_BASE_URL` ## Fase B — Web Push PWA - [ ] **T020** `manifest.json` + ícones Ligbox Ops - [ ] **T021** Service Worker `sw.js` (push + notificationclick) - [ ] **T022** Tabela `push_subscriptions` - [ ] **T023** VAPID keys (env) + `pywebpush` no requirements - [ ] **T024** `POST /api/v1/push/subscribe` · DELETE - [ ] **T025** UI «Ativar notificações neste dispositivo» - [ ] **T026** Integrar `push_service` dual-channel (ntfy + webpush) - [ ] **T027** Teste iOS Safari PWA + Android Chrome ## Fase C — Futuro (fora MVP 007) - [ ] **T030** Preferências por tipo de evento - [ ] **T031** FCM para app nativo - [ ] **T032** ntfy self-hosted (VM122 ou VM108) - [ ] **T033** OneSignal avaliação (se FCM complexo demais) --- ## Dependências - Spec 003 ✅ auth JWT - Spec 004 ✅ Minha conta UI · ntfy OTP base --- ## Env vars (previstas) ```env DESK_NTFY_BASE_URL=https://ntfy.sh DESK_VAPID_PUBLIC_KEY= DESK_VAPID_PRIVATE_KEY= DESK_VAPID_MAILTO=ligbox-ops@ligbox.com.br DESK_PUSH_ENABLED=true ```