You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+67-13Lines changed: 67 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,8 @@ Real-time monitoring of San Francisco's Muni Metro subway using OpenCV-based com
6
6
7
7
URL: https://munimet.ro
8
8
9
+
Current status: [](https://munimet.ro)
10
+
9
11
This project was "vibe coded" using Anthropic's Claude Code. Uses deterministic computer vision analysis; no ML models or external AI services required.
10
12
11
13
## Quick Start
@@ -62,21 +64,19 @@ See [deploy/README.md](deploy/README.md) for detailed deployment instructions.
62
64
63
65
### Credentials Setup (Optional)
64
66
65
-
To enable Bluesky status posting, configure credentials:
67
+
To enable social media posting and webhook notifications:
66
68
67
69
```bash
68
-
# Local development - saves to .env file
69
-
python3 scripts/setup/setup-credentials.py
70
+
# Social media credentials (Bluesky, Mastodon)
71
+
python3 scripts/setup/setup-credentials.py # Local (.env file)
72
+
python3 scripts/setup/setup-credentials.py --cloud # Google Cloud Secret Manager
70
73
71
-
# Cloud deployment - saves to Google Cloud Secret Manager
python scripts/setup/manage-webhooks.py --test # Send a test notification
279
+
```
280
+
281
+
Slack, Discord, and Teams URLs are auto-detected and receive platform-native payloads (rich embeds, action buttons, etc.). All other URLs receive a generic JSON payload:
282
+
283
+
```json
284
+
{
285
+
"status": "yellow",
286
+
"previous_status": "green",
287
+
"description": "Uh oh: Muni's not feeling well",
288
+
"delay_summaries": ["Westbound delay at Powell"],
289
+
"timestamp": "2026-03-01T12:00:00",
290
+
"url": "https://munimet.ro",
291
+
"badge_url": "https://munimet.ro/badge.svg"
292
+
}
293
+
```
294
+
295
+
### RSS Feed
296
+
297
+
Subscribe to status changes via RSS at `https://munimet.ro/feed.xml`. Works with any RSS reader, and can be bridged to Slack or Discord using their built-in RSS integrations.
298
+
299
+
### Social Media
300
+
301
+
Follow [@munimetro.bsky.social](https://bsky.app/profile/munimetro.bsky.social) on Bluesky or [@MuniMetro@mastodon.social](https://mastodon.social/@MuniMetro) on Mastodon for status updates.
302
+
249
303
## Development Workflow
250
304
251
305
1.**Collect Data** - Run `download_muni_image.py` periodically
Embeddable status badge (shields.io style). Shows current system status as a small SVG image suitable for embedding in READMEs, dashboards, or external sites.
187
+
188
+
**Response** (200 OK): SVG image
189
+
190
+
**Example**:
191
+
192
+
```markdown
193
+
[](https://munimet.ro)
0 commit comments