Block a user
Feature: Cursor-based pagination for /analyze/batch and /jobs endpoints
Feature: Patent trend charts in Analytics page (filing frequency and category distribution)
Feature: Webhook/notification support for batch job completion and score changes
Feature: Scheduled/recurring analysis with change alerts
Feature: Side-by-side patent portfolio comparison view
Feature: Export analysis reports as PDF or CSV from the dashboard
CI: Add ruff linting and tsc --noEmit type checking to CI pipeline
CI: Add pytest test stage to Gitea Actions build workflow
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
Backend: Fix Patent.patent_id type annotation from int to str in types.py
Backend: Fix analyze_single_patent to download PDF before reading from disk
Backend: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Backend: Make LLM model configurable via MODEL environment variable
chore: verify Flux image automation loop — ImagePolicy picks up new tags and updates deployment manifest
Backend: Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Test: Add JWT authentication flow tests to test_api.py
Security: Add rate limiting middleware to /auth/login and /auth/register
Fix: Persist async job state in PostgreSQL so batch results survive API restarts
Fix: Share a single pooled DatabaseClient instead of creating one per auth call