Block a user
Add ruff linting and tsc type checking to CI pipeline
Export analysis reports as PDF or CSV from the dashboard
Add loading skeleton and error states to Batch and Analytics pages
Add dark mode support using Tailwind dark variant
Add and commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Add pytest test stage to CI workflow that gates the image build
Document patent PDF volume mount requirement and consider object storage for containerized deployments
Fix analyze_single_patent to download PDF before reading from disk
Fix Patent.patent_id type annotation from int to str in types.py
Make LLM model configurable via MODEL environment variable
Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Add rate limiting middleware to auth endpoints
Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Refuse startup with default JWT secret in non-development environments
Make CORS allowed origins configurable via environment variable
Remove hardcoded database credentials from docker-compose.yml
Refactor get_db_client() in auth.py to use a shared pooled connection
Persist job state in PostgreSQL so batch results survive API restarts
Fix CI: copy go.sum in Dockerfile build stage for reproducible builds
Sprint planning note: Issue #203 was created as a companion to ensure go.sum is committed and kept in sync via go mod tidy. This issue (#180) should address the Dockerfile COPY step, while #203…