Block a user
Docs: document MODEL, SERP_CACHE_TTL_HOURS, LOG_LEVEL in .env.example
CI: add pytest test job to Gitea Actions workflow that gates the image build
Frontend: commit a package lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Bug: analyze_single_patent assumes PDF already exists locally -- integrate download step or document prerequisite
Bug: fix Patent.patent_id type annotation in types.py -- should be str, not int
Tests: add JWT authentication flow tests covering registration, login, protected routes, and admin endpoints
Security: move database credentials out of docker-compose.yml into .env or Docker secrets
Bug: persist async job state to PostgreSQL so batch results survive API restarts
Security: refuse to start with default JWT secret in non-development environments
Security: make CORS allowed-origins configurable via environment variable
Bug: get_db_client() in auth.py creates a new DatabaseClient on every call, exhausting the connection pool
Security: add rate limiting to /auth/login and /auth/register endpoints
Backend: make LLM model configurable via MODEL environment variable instead of hardcoding claude-3.5-sonnet
Backend: expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Docs: document patent PDF storage volume mount requirement (or add S3/MinIO support)
Frontend: add dark mode support using Tailwind dark variant
Frontend: add loading skeletons and error states to Batch and Analytics pages
Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Feature: export analysis reports as PDF or CSV from the dashboard
Feature: side-by-side patent portfolio comparison view for two companies