Block a user
Feature: scheduled/recurring patent analysis with change alerts
Feature: side-by-side comparison view for two companies patent portfolios
Feature: export analysis reports as PDF or CSV from the dashboard
CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI pipeline
CI: add pytest test job to Gitea Actions build.yaml that gates the image build
Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Frontend: add loading skeletons and error states to Batch and Analytics pages
Fix: correct Patent.patent_id type annotation from int to str in types.py
Fix: integrate PDF download step into analyze_single_patent or document the prerequisite
Config: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Config: make LLM model configurable via MODEL environment variable
feat: deploy Gitea Actions act_runner as a Kubernetes workload in the cluster
Refactor: replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Test: add JWT authentication flow tests (registration, login, protected routes, token refresh, admin endpoints)
Security: add rate limiting to /auth/login and /auth/register endpoints
Fix: persist job state in PostgreSQL so batch results survive API restarts
Fix: share a single pooled DatabaseClient instead of creating one per auth call
Security: remove plaintext database credentials from docker-compose.yml
Security: make CORS allowed origins configurable via environment variable
Security: refuse to start with default JWT secret in non-dev environments