Block a user
Add side-by-side patent portfolio comparison view
Allow users to export analysis reports as PDF or CSV from the dashboard
Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Add pytest test job to Gitea Actions CI workflow that gates the image build
Commit a package-lock.json or pnpm-lock.yaml to ensure reproducible frontend builds
Add dark mode support using Tailwind dark: variant
Add loading skeletons and error states 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 reading it from disk
Document patents/ volume mount requirement and evaluate 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 flow tests: registration, login, protected routes, token refresh, admin endpoints
Add rate limiting to /auth/login and /auth/register endpoints
Persist async job state in PostgreSQL so batch results survive API restarts
Refactor get_db_client() in auth.py to use a shared connection pool
Move database credentials out of docker-compose.yml into .env or Docker secrets
Make CORS allowed origins configurable via environment variable
chore: validate dark mode and mobile-first CSS layout on real devices