Block a user
Feature: Add patent trend charts to Analytics page (filing frequency and category distribution)
Feature: Webhook/notification support for batch job completion and score changes
Feature: Scheduled/recurring analysis with alerting on significant changes
Feature: Side-by-side comparison view for two companies patent portfolios
Feature: Export analysis reports as PDF or CSV from the dashboard
CI: Add ruff linting and tsc --noEmit type checking to CI pipeline
CI: Add pytest test job to Gitea Actions build workflow
Feature: Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Feature: Add loading states and error messages to Batch and Analytics pages
Bug: Fix Patent.patent_id type annotation from int to str in types.py
Bug: analyze_single_patent does not download PDF before reading from disk
test: add integration tests for GET / dashboard handler
Docs: Document patent PDF volume mount requirement and consider object storage path
Feature: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Feature: Make LLM model selection configurable via MODEL environment variable
Refactor: Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Test: Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Security: Add rate limiting to /auth/login and /auth/register endpoints
Bug: Persist async job state in PostgreSQL so results survive API restarts
Bug: Refactor get_db_client() in auth.py to use a shared connection pool