Block a user
Add side-by-side patent portfolio comparison view
Export analysis reports as PDF or CSV from the dashboard
test: add unit tests for in-memory cache TTL and invalidation in gitea/client.go
Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Add pytest test job to Gitea Actions CI workflow
Add dark mode support using Tailwind dark variant
Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Add loading/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
test: add integration tests for GET /settings and POST /settings handlers
Document patent PDF storage volume mount and consider object storage path
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
Add JWT authentication tests (registration, login, protected routes, token refresh, admin)
Add rate limiting to /auth/login and /auth/register endpoints
Persist async job state in PostgreSQL to survive API restarts
Refactor get_db_client() in auth.py to use a shared connection pool
Remove hardcoded database credentials from docker-compose.yml