What we have shipped, newest first. Only released changes appear here.
Category leadership foundations
Phase D
Campaigns: group links into folders, filter the links table by campaign, and see a per-campaign scan rollup.
Destination safety check: every link is screened on create and update; dangerous schemes and private or internal hosts are flagged and served behind a warning page instead of silently breaking.
Live view: a dashboard page that streams your most recent scans and refreshes automatically.
Print Kit: generate a printable PDF sheet of QR codes and short URLs for a campaign or a selected set of links, rendered entirely in your browser.
Reserved short IDs: custom back-halves that collide with a site route (for example "status") are now rejected at creation, so a custom link can never resolve to the wrong page.
Enterprise procurement foundations
Phase C
Viewer role: invite read-only members who can see links and analytics but cannot change them.
Scoped API keys: restrict a key to specific permissions such as read-only or analytics-only access.
Scan-data retention: set a retention window after which old scan events become purge-eligible.
Honest single sign-on and a trust pack that documents our security posture without overstating it.
Redirect quality of service
Phase B
Faster redirects: hot links are cached, so repeat scans resolve with less database work.
Reliable webhooks: failed scan webhooks are retried with signed, verifiable payloads.
Public status page at /status with a real database connectivity check.
Bot filtering: known crawlers no longer inflate your scan counts or burn a scan limit.
Trust, authorization, and correctness
Phase A
Closed authorization gaps so every link, scan, and export is scoped to your workspace.
Hardened destination handling to reject script-executing URL schemes across every create path.
Correctness fixes to scan accounting and link protection (password, expiry, scan limit).
Viewer-local time
Analytics
Dashboard timestamps now render in your timezone instead of server UTC.
Analytics charts bucket by viewer-local days, so daily totals line up with your calendar.