Block a user
deploy: security hardening, multi-model support, S3 storage, analytics, CI improvements (70 commits)
Shipping cycle check (2026-03-29): Fork main (cbc8f44) matches this PR's head SHA exactly — the PR is fully up-to-date with leeworks-agents/SPARC main. No new commits have been added since the PR…
Add multi-model support: let users choose LLM provider per analysis
Auto-generate TypeScript API client from FastAPI OpenAPI spec
Add cursor-based pagination to /analyze/batch and /jobs endpoints
Add patent trend charts to the Analytics page
Add webhook/notification support for batch job completion and score changes
Add scheduled/recurring analysis with change alerting
Add side-by-side patent portfolio comparison view
Export analysis reports as PDF or CSV from the dashboard
Add dark mode support to the React frontend using Tailwind dark variant
Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Add pytest test job to Gitea Actions CI workflow
Add frontend lockfile (package-lock.json or pnpm-lock.yaml) to repository
Add skeleton loaders and error states to Batch and Analytics frontend pages
Fix Patent.patent_id type annotation from int to str in types.py
Fix analyze_single_patent to download PDF before reading from disk
Document patent PDF volume mount requirement for containerized deployments
Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Make LLM model configurable via MODEL environment variable
Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py