Block a user
Feature: webhook/notification support for batch job completion and score change alerts
Feature: scheduled/recurring patent analysis with alerts on significant changes
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) and tsc --noEmit (TypeScript) linting to Gitea Actions workflow
CI: add pytest test stage to Gitea Actions workflow that gates image builds
Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Frontend: add dark mode support using Tailwind dark variant
Frontend: add loading skeletons and error states to Batch and Analytics pages
chore: diagnose and fix CI runner availability — all builds stuck in queued/cancelled
Sprint planning update: Created #95 as a concrete actionable fix — update the runs-on label in the workflow to match the actual registered runner label. This is the fastest path to unblocking…
Bug: fix Patent.patent_id type annotation — change from int to str in types.py
fix: update CI workflow runs-on label to match available Gitea Actions runner
Bug: analyze_single_patent does not download PDF before reading it from disk
Backend: document volume mount requirement for patents/ PDF storage directory
Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Backend: make LLM model configurable via MODEL environment variable
Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Tests: add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Security: add rate limiting to /auth/login and /auth/register endpoints
Persist async job state to PostgreSQL so batch results survive API restarts