Block a user
Add startup check to reject default JWT secret in non-dev environments
Add per-analysis LLM provider selection and output comparison (multi-model support)
Document or migrate patent PDF storage to a volume mount or object storage
Auto-generate TypeScript API client from FastAPI OpenAPI spec
Add cursor-based pagination to /analyze/batch and /jobs endpoints
Add patent filing frequency and technology category trend charts to Analytics page
Add webhook/notification support for batch job completion and score change alerts
Add scheduled/recurring analysis with alerting on significant changes
Add side-by-side patent portfolio comparison view for two companies
Export analysis reports as PDF or CSV from the dashboard
Add pytest test job to Gitea Actions CI workflow to gate image builds
Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Add loading states and user-friendly error messages to Batch and Analytics pages
Fix Patent.patent_id type annotation from int to str in types.py
Fix analyze_single_patent to download PDF before attempting to read from disk
Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Make LLM model name configurable via MODEL environment variable
Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints