121 lines
3.6 KiB
Markdown
121 lines
3.6 KiB
Markdown
# NotifyPulse V2
|
|
|
|
A fast, polished Windows background notification app with a desktop Web UI and a **mobile PWA** for wallpaper delivery.
|
|
|
|
---
|
|
|
|
## What's new in V2
|
|
|
|
| Feature | V1 | V2 |
|
|
|---|---|---|
|
|
| Architecture | Monolithic single file | Modular: backend + `/ui` + `/pwa` |
|
|
| PWA support | ❌ | ✅ iOS + Android |
|
|
| Mobile wallpaper push | ❌ | ✅ Lockscreen + Background |
|
|
| Settings persistence | Config file only | `settings.json` + live UI |
|
|
| Settings options | Name + interval + stretch | +opacity, +duration, +sound, +hotkey, +auth token, +startup behavior |
|
|
| Poll speed | 5s file watch / 1s UI | 4s file watch / 1s UI / 3s countdown |
|
|
| CORS | ❌ | ✅ (needed for PWA) |
|
|
| API | Basic | Extended: `/api/fire_now`, `/api/entries` CRUD, `/api/log`, `/api/pwa/*` |
|
|
| Desktop UI | Inline HTML in .py | Separate `ui/index.html` (sidebar layout) |
|
|
|
|
---
|
|
|
|
## Folder structure
|
|
|
|
```
|
|
NotifyPulse/
|
|
├── notifier.py ← Main app
|
|
├── make_ico.py ← Icon generator
|
|
├── requirements.txt
|
|
├── build.bat
|
|
├── ui/
|
|
│ └── index.html ← Desktop Web UI
|
|
└── pwa/
|
|
├── index.html ← Mobile PWA
|
|
├── manifest.json
|
|
└── sw.js ← Service Worker
|
|
```
|
|
|
|
Config lives in `%APPDATA%\Roaming\NotifyPulse\`:
|
|
```
|
|
NotifyPulse/
|
|
├── notifications.txt ← Your entries (auto-reload on save)
|
|
├── settings.json ← Persisted settings
|
|
├── icon.png ← Optional custom icon
|
|
├── wallpapers/ ← PC wallpapers
|
|
├── Overlay/ ← Screen overlay images
|
|
└── Mobile/
|
|
├── Lockscreen.jpg ← Mobile lock screen image
|
|
└── Background.jpg ← Mobile home screen background
|
|
```
|
|
|
|
---
|
|
|
|
## Quick start
|
|
|
|
```bat
|
|
pip install -r requirements.txt
|
|
python make_ico.py
|
|
python notifier.py
|
|
```
|
|
|
|
Or build an `.exe`:
|
|
```bat
|
|
build.bat
|
|
```
|
|
|
|
---
|
|
|
|
## Mobile PWA setup
|
|
|
|
1. Start NotifyPulse on your PC.
|
|
2. Find your PC's local IP (e.g. `192.168.1.50`).
|
|
3. On your phone, open: `http://192.168.1.50:5000/pwa`
|
|
4. **iOS**: tap Share → Add to Home Screen
|
|
5. **Android**: tap ⋮ → Install App
|
|
|
|
The PWA polls the PC every 4 seconds. When a `change.wallpaper.mobile` entry fires (or you click "Request New Wallpaper"), the PWA instantly receives the `Lockscreen` and `Background` images and lets you save them to your camera roll.
|
|
|
|
---
|
|
|
|
## notifications.txt syntax
|
|
|
|
```
|
|
@name My App Name
|
|
@interval 10 30 # min/max minutes
|
|
|
|
# Weighted random (picks by % weight)
|
|
Take a break! | 35%
|
|
Drink water! | 30%
|
|
|
|
# Daily at fixed time
|
|
Morning standup | 09:00
|
|
End of day | 17:30
|
|
|
|
# Special commands
|
|
change.wallpaper | 20% # change PC wallpaper
|
|
change.wallpaper.mobile | 10% # push new wallpaper to phone
|
|
show.overlay | 15% # fullscreen image overlay (6s)
|
|
show.overlay.10 | 10% # overlay for 10s
|
|
```
|
|
|
|
---
|
|
|
|
## API reference
|
|
|
|
| Method | Endpoint | Description |
|
|
|---|---|---|
|
|
| GET | `/api/state` | Full app state |
|
|
| POST | `/api/pause` | Toggle pause |
|
|
| POST | `/api/fire_now` | Fire random entry now |
|
|
| GET/POST | `/api/entries` | Read/write notifications.txt |
|
|
| GET/POST | `/api/settings` | Read/write settings |
|
|
| GET | `/api/log` | Event log |
|
|
| POST | `/api/test_notification` | Send test toast |
|
|
| POST | `/api/test_wallpaper` | Test PC wallpaper change |
|
|
| POST | `/api/test_overlay` | Test screen overlay |
|
|
| POST | `/api/test_mobile_wallpaper` | Push mobile wallpaper |
|
|
| POST | `/api/pwa/ping` | PWA heartbeat |
|
|
| GET | `/api/pwa/wallpaper` | PWA polls for pending wallpaper |
|
|
| POST | `/api/pwa/trigger_wallpaper` | PWA requests new wallpaper |
|