What's New
Community Voting
You can now vote on services to help others find the best ones. Every ham operator can upvote or downvote any service (except their own) using their APRS passcode for authentication:
POST /api/v1/registry/WXBOT/vote
{"callsign": "KM6LYW", "passcode": 12345, "vote": "up"}Voting the same direction twice toggles the vote off. One vote per callsign per service — no ballot stuffing.
Trust Scores
Each service now has a trust score (0–100) computed from three components:
| Component | Weight | Source | |-----------|--------|--------| | Uptime | 50% | 30-day health check success rate | | Community votes | 30% | Normalized vote score (capped ±10) | | Age | 20% | Days registered / 180 (max 1.0) |
Query it at GET /api/v1/registry/{callsign}/trust.
Real-Time Events (SSE)
Connect to GET /api/v1/events with any EventSource client and receive
push notifications as things happen:
service.registered— new service joinedservice.updated— metadata changedservice.deleted— service removedservice.status_changed— health status transition (active→down, etc.)health_check.completed— health check resultvote.cast— community vote cast/changed/removed
30-second keepalive heartbeats prevent connection drops. Max 10 concurrent connections per IP.
Rate Limits
To prevent abuse, write operations are now rate-limited per callsign:
- Votes: 10 per hour per callsign + 30 requests/min per IP
- SSE: Max 10 concurrent connections per IP
- Slow consumers get dropped automatically (queue overflow protection)
Database Migration
Run alembic upgrade head to apply migration 0006 (adds the votes table).
Existing services are unaffected — voting starts from zero for all.