Block a user
Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Add side-by-side patent portfolio comparison view for two companies
Add export functionality to download analysis results as PDF or CSV
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 frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
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 attempting local file read
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 integration tests covering full auth flow
Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Persist async batch job state in PostgreSQL so job results survive API restarts
Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Replace hardcoded database credentials in docker-compose.yml with .env file reference
Make CORS allowed origins configurable via environment variable
Add startup check to refuse default JWT secret in non-development environments
docs: write post-deployment smoke test runbook for gitea-mobile on Talos cluster
Triage: P3 priority. Documentation task. Assigned to @tech-writer. Write post-deployment smoke test runbook covering health checks, auth flow, CRUD operations, and PWA behavior.