v0.0.18: Alert History & the Acceptable-Use Guard
Keep every alert a scan produced, decide domain suitability at signup, get server-side error monitoring, and track position history per engine.
Alerts with a history
Server-Side Alert History
Every finding a scan derives now becomes a durable record you can page back through, not just a notification at the moment of the scan. The Alerts page reads that history: each occurrence stays attached to the scan that produced it, read state is per member (mark it read and it stays read for you, not for the whole workspace), and nothing is lost when you leave the page and come back.
Background Work Is Actionable
Activity, domains, prompts, content gaps, recommendations and reports each gained an action surface: a stuck job can be retried from where it failed, a monitoring loop shows what it is doing while it runs, and a gap you have acted on stays visibly acted on.
Trust & safety
Acceptable-Use Domain Screening
New projects are screened against known adult, gambling and drug lists before they can be tracked, with a hard block on adult content and a soft flag on the other categories. The blocklists refresh nightly, and IPQualityScore adds a second, independent tier when it is configured. A screened-out domain can appeal the decision; an operator resolution is recorded and honoured.
Observability
Server-Side Error Monitoring
Every failure the platform classifies (benign or alert) is now captured server-side with its severity, so a swallowed error in a cron or worker is visible instead of being a log line nobody reads. Capture is error-only and fails open: unset, it is a no-op.
Per-Tenant Feature Flags
New capabilities can be gated per workspace behind a feature-flag registry, with audience and rollout control, the mechanism that shipped the enterprise-readiness evaluation without touching the code paths of existing customers.
Deeper ranking history
Per-Engine Position History
The Rankings page gained a per-engine position timeline, stat-card deltas against the previous scan, and query search with drill-down, so a movement in your aggregate position can be traced to which engine moved and which query moved it.
Schema tools grow up
Editable Facts, Site-Level @graph, Auto-Detection
The schema generator can now edit facts in place, emit a site-level @graph, auto-detect the entity type, score completeness and cover LocalBusiness and Event: a validator that checks structure rather than only well-formedness.
Search Console insights become actions
The Search ↔ AI gap analysis in the Search page is now actionable: a page or query that Google ranks but engines do not cite offers a next step instead of a bare finding.
The dashboard overhaul
Every page passed an honesty and actionability pass: skeleton loading instead of page collapse, error and empty states that say what happened, delta semantics that cannot misread, optimistic toggles with real polling, cap surfacing where a plan wall stops you, and confirmations on destructive actions.
Under the hood
- Server-side Sentry capture wired into the error-classification seam (
reportError), with the decision recorded indocs/observability-decision.md. - DB low-severity invariants: type-scoped scan slots, signup slug retry, and a payment-failure ledger that survives an account purge.
- The landing-page accessibility findings closed, and the three red UI/type gates greened.
- Customer-facing claims corrected in the pricing FAQ, the credit email, the homepage FAQ and the API docs.
- Engine add-on purchase UI for Agency workspaces, with plan types single-sourced.
Want to shape what we build next?
See what we're building next, and tell us what you need.

