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
Five related changes, all driven by the same goal: make paying customers
see exactly what they're paying for, and make our privacy story honest
enough to hold up against a line-by-line audit.
### Past-due grace countdown (backend + frontend)
`GET /api/nodes/plan` now returns `grace_days_remaining`,
`grace_expires_at`, and `grace_window_days`. The dashboard past-due
banner renders a live "N days left" countdown while in grace and flips
to a deeper-red "Grace period expired" variant once caps tighten.
Previously the ToS promised 7 days but the UI was silent — the first
signal a user got was cameras going dark.
Banner picks up `role="status"` + `aria-live="polite"` so screen
readers announce state changes.
### subscription.updated clears past-due on a paid plan
If a customer upgraded to fix a past-due state, `effective_plan_for_caps`
kept returning "free_org" until the next paymentAttempt.updated webhook
trickled in — their newly-paid plan stayed capped at free-tier limits
for as long as Clerk took to re-deliver. Now any subscription.* event
landing on pro/business clears `payment_past_due` + `payment_past_due_at`
immediately (Clerk wouldn't mark the subscription active without the
card having gone through).
### Custom 429 handler
Replaces slowapi's bare `{"detail": "429 ..."}` with a structured body
(`error`, `message`, `limit`, `retry_after_seconds`) and a proper
`Retry-After: 60` header. Off-the-shelf HTTP clients now back off
correctly without special-casing.
### /docs#api-rate-limits
New sidebar entry + full section documenting every REST rate limit,
MCP per-key budgets, SSE subscriber caps, payload caps, and pagination
bounds. Also fixes the outdated "429 MCP only" claim in the Error
Format subsection — 429 applies to REST routes too, now with docs.
### /security page
New public page at `/security` (linked from the footer) covering the
privacy architecture: what lives on-device vs in cloud, AES-256-GCM
encryption posture (now including recordings — see the paired CloudNode
commit), motion detection running locally via FFmpeg scene-change
(not any cloud ML service), third-party list, law-enforcement policy,
and the deletion cascade. Every claim cites the implementing file so
"open source you can verify" isn't just marketing.
All 226 backend tests pass; frontend builds clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments