This issue has been resolved. The Analytics page includes trend charts showing patent filings over time (by month) and analysis type distribution, using the /analytics/trends endpoint.
This issue has been resolved. The frontend has Export CSV and Export PDF buttons on the Analysis page, backed by /export/{company}/csv and /export/{company}/pdf API endpoints.
This issue has been resolved. Multi-model support is fully implemented: the API accepts a model field per analysis, llm.py routes to the specified provider, and the frontend has model picker…
This issue has been resolved. The /jobs endpoint supports cursor-based pagination with limit and cursor query parameters, returning next_cursor for fetching subsequent pages.
This issue has been resolved. A Compare page exists at /compare with side-by-side company portfolio comparison, including dropdowns for company selection and metric display.
This issue has been resolved. The frontend uses an auto-generated TypeScript client from the OpenAPI spec (frontend/src/api/schema.d.ts), with a CI check that fails if the generated types are stale.
This issue has been resolved. webhooks.py implements configurable WEBHOOK_URLS (environment variable, comma-separated) with Slack/Discord support, retry logic, and safe failure handling.
This issue has been resolved. scheduler.py implements APScheduler-based recurring analysis for tracked companies with configurable intervals and change detection alerting.
This issue has been resolved. build.yaml has a test job that runs pytest, and the build jobs depend on it via the needs directive.
This issue has been resolved. config.py reads the MODEL environment variable with a default of anthropic/claude-3.5-sonnet, and llm.py uses config.model throughout.
This issue has been resolved. No print() calls remain in analyzer.py, serp_api.py, or llm.py. The codebase uses Python logging throughout with configurable log levels.