public uptime monitoring + (soon) observability with events saved to PDS
1# cuteuptime 2 3Cute uptime monitoring using your PDS to store events. 4Demo: [https://uptime.wisp.place](https://uptime.wisp.place) 5![Screenshot](README.png) 6 7## Project Structure 8 9- **`worker/`** - Background Bun worker that monitors services and publishes uptime checks 10- **`web/`** - Static web svelte dashboard that displays uptime statistics 11- **`lexicon/`** - AT Protocol lexicon definitions for the uptime check record type 12 13## Quick Start 14 15### 1. Configure the Worker 16 17```bash 18cd worker 19cp config.example.json config.json 20``` 21 22Edit `config.json`: 23 24```json 25{ 26 "pds": "https://bsky.social", 27 "identifier": "your.handle.bsky.social", 28 "password": "your-app-password", 29 "checkInterval": 300, 30 "services": [ 31 { 32 "groupName": "Production", 33 "name": "API Server", 34 "url": "https://api.example.com/health", 35 "method": "GET", 36 "timeout": 10000, 37 "expectedStatus": 200 38 } 39 ] 40} 41``` 42 43**Important:** Use an app password, not your main account password. Generate one at: https://bsky.app/settings/app-passwords 44 45### 2. Run the Worker 46 47```bash 48cd worker 49bun install 50bun run dev 51``` 52 53The worker will: 54- Check each service at the configured interval 55- Publish results to your AT Protocol PDS 56- Continue running until you stop it 57 58### 3. Configure the Web Dashboard 59 60```bash 61cd web 62cp config.example.json config.json 63``` 64 65Edit `config.json`: 66 67```json 68{ 69 "pds": "https://bsky.social", 70 "did": "did:plc:your-did-here" 71} 72``` 73 74To find your DID, visit: https://bsky.app/profile/[your-handle] and look in the URL or use the AT Protocol explorer. 75 76### 4. Build and Deploy the Web Dashboard 77 78```bash 79cd web 80npm install 81npm run build 82``` 83 84The built static site will be in `web/dist/`. Deploy it to any static hosting: 85 86- **Wisp Place**: Drag and drop the `dist` folder 87- **GitHub Pages**: Push to `gh-pages` branch 88- **Netlify**: Drag and drop the `dist` folder 89- **Vercel**: Connect your repo and set build directory to `web/dist` 90- **Cloudflare Pages**: Connect your repo 91 92## Configuration 93 94### Worker Configuration 95 96| Field | Description | 97|-------|-------------| 98| `pds` | Your PDS URL (usually `https://bsky.social`) | 99| `identifier` | Your AT Protocol handle | 100| `password` | Your app password | 101| `checkInterval` | Seconds between checks (e.g., 300 = 5 minutes) | 102| `services` | Array of services to monitor | 103 104### Service Configuration 105 106| Field | Description | 107|-------|-------------| 108| `groupName` | Optional group name (e.g., "Production", "Staging") | 109| `name` | Service display name | 110| `url` | URL to check | 111| `method` | HTTP method (GET, POST, etc.) | 112| `timeout` | Request timeout in milliseconds | 113| `expectedStatus` | Expected HTTP status code (optional) | 114 115### Web Configuration 116 117| Field | Description | 118|-------|-------------| 119| `pds` | PDS URL to fetch records from | 120| `did` | DID of the account publishing uptime checks | 121 122**Note:** The web config is injected at build time, so you need to rebuild after changing it. 123 124## Features 125 126- ✅ Looks cute 127- ✅ No database required just use your pds 128- ✅ Service grouping support 129- ✅ Response time tracking 130- ✅ Auto-refresh every x configurable minutes 131 132## Development 133 134### Worker Development 135 136```bash 137cd worker 138bun run dev 139``` 140 141### Web Development 142 143```bash 144cd web 145npm run dev 146``` 147 148Visit http://localhost:5173 to see the dashboard. 149 150MIT