2025-12-19 - 2026-06-19
Overview
46 Pull requests merged by 1 user
Merged
#1682 Add rate limit stats to admin panel
Merged
#1681 Add cursor-based pagination to /analyze/batch and /jobs
Merged
#1680 Add stricter input validation for company names
Merged
#1679 Update ROADMAP.md: mark completed P1 and P2 items as done
Merged
#1667 Add tests for tracked company admin endpoints and scheduler
Merged
#1668 Add API tests for export endpoints (CSV and PDF)
Merged
#1666 Add webhook integration tests for retry logic and payloads
Merged
#1663 Add S3/MinIO storage backend tests for storage.py
Merged
#1662 Add test coverage for analyze_single_patent auto-download path
Merged
#1664 Update ROADMAP.md to reflect completed work and add next-horizon items
Merged
#1665 Refactor scheduler.py to use pooled DatabaseClient
Merged
#1628 Fix remaining dark mode issue in Analysis page prose block
Merged
#1627 Expand JWT auth integration tests to 33 cases
Merged
#1568 ci: enable ruff linting and pytest in CI pipeline
Merged
#1374 docs: document patent PDF volume mount requirement
Merged
#1348 feat: theme-aware chart colors for dark/light mode
Merged
#1015 Add model allow-list validation to analysis endpoints
Merged
#443 Generate TypeScript API client from OpenAPI spec
Merged
#353 feat: add model picker UI and wire model param through backend
Merged
#352 feat: add loading skeletons and error states to Batch page
Merged
#269 CI: add tsc --noEmit TypeScript type checking to test job
Merged
#270 Docs: document MODEL, SERP_CACHE_TTL_HOURS, LOG_LEVEL in .env.example
Merged
#171 feat: add PDF export for analysis reports
Merged
#64 feat: add multi-model support for per-analysis LLM selection
Merged
#63 feat: add OpenAPI TypeScript client generation setup
Merged
#62 feat: add patent trend charts to the Analytics page
Merged
#61 feat: add side-by-side patent portfolio comparison view
Merged
#58 feat: add S3/MinIO object storage support for patent PDFs
Merged
#66 feat: add webhook notification support for job completion
Merged
#65 feat: implement scheduled/recurring analysis with change alerting
Merged
#60 feat: add CSV export for company analysis results
Merged
#57 feat: add dark/light mode toggle with localStorage persistence
Merged
#59 feat: add cursor-based pagination to /jobs endpoint
Merged
#56 feat: add loading skeletons and error retry to Batch and Analytics
Merged
#55 fix: auto-download patent PDF in analyze_single_patent
Merged
#54 feat: add structured logging to serp_api.py
Merged
#53 ci: add tsc --noEmit TypeScript type checking to CI pipeline
Merged
#32 ci: add pytest and ruff linting to CI workflow
Merged
#29 feat: configurable LLM model, SERP cache TTL, structured logging, fix type
Merged
#30 refactor(db): shared pooled DatabaseClient singleton
Merged
#28 feat(auth): add rate limiting to login and register endpoints
Merged
#34 feat(jobs): persist async batch job state in PostgreSQL
Merged
#31 docs: patent PDF storage docs, FileNotFoundError, frontend lockfile
Merged
#35 test(auth): add comprehensive JWT authentication test suite
Merged
#27 feat(security): JWT startup guard, configurable CORS, externalize DB creds
Merged
#3 chore: add ROADMAP.md for SPARC application development
9 Pull requests proposed by 1 user
Proposed
#1687 Add user-level API key generation for programmatic access
Proposed
#1688 fix: enforce max_length=128 and validate GET /analyze/batch company_name filter
Proposed
#1689 Add POST /export/batch endpoint for multi-company ZIP download
Proposed
#1690 Move webhook delivery to background task queue
Proposed
#1692 Add LLM-based patent classification tagging by technology domain
Proposed
#1693 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Proposed
#1694 Add rate limiting dashboard to admin panel
Proposed
#1695 Add historical analysis diffing between runs for same company
Proposed
#1696 Add multi-tenant support with owner_id isolation
1631 Issues closed from 2 users
Closed
#1683 Persist async job state to PostgreSQL so batch results survive API restarts
Closed
#1675 Add rate limit status and usage statistics to the admin panel
Closed
#1669 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1670 Add stricter input validation for company names on analysis endpoints
Closed
#1678 Update ROADMAP.md to mark completed P1 and P2 items as done
Closed
#1656 Add tests for tracked company admin endpoints and scheduler integration
Closed
#1655 Add API tests for export endpoints (/export/{company_name} and /export/{company_name}/pdf)
Closed
#1657 Add webhook integration tests covering retry logic and Slack/Discord payload format
Closed
#1660 Add S3/MinIO storage backend tests for storage.py
Closed
#1661 Add test coverage for analyze_single_patent auto-download path
Closed
#1659 Update ROADMAP.md to reflect completed work and add next-horizon items
Closed
#1658 Refactor scheduler.py to use the application-level pooled DatabaseClient
Closed
#1652 Add patent trend charts to Analytics page (filing frequency and tech category distribution)
Closed
#1653 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1654 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1649 Implement scheduled/recurring analysis with change alerting
Closed
#1650 Add webhook/notification support for batch job completion and score changes
Closed
#1651 Add multi-model LLM support so users can choose provider per analysis
Closed
#1646 Add ruff linting and tsc type checking to CI pipeline
Closed
#1647 Export analysis reports as PDF or CSV from the dashboard
Closed
#1648 Add side-by-side patent portfolio comparison view
Closed
#1642 Add loading skeleton and error states to Batch and Analytics pages
Closed
#1643 Add dark mode support using Tailwind dark variant
Closed
#1644 Add and commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Closed
#1645 Add pytest test stage to CI workflow that gates the image build
Closed
#1640 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1641 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1637 Make LLM model configurable via MODEL environment variable
Closed
#1638 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1639 Document patent PDF volume mount requirement and consider object storage for containerized deployments
Closed
#1634 Add rate limiting middleware to auth endpoints
Closed
#1635 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1636 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1629 Refuse startup with default JWT secret in non-development environments
Closed
#1630 Make CORS allowed origins configurable via environment variable
Closed
#1631 Remove hardcoded database credentials from docker-compose.yml
Closed
#1632 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#1633 Persist job state in PostgreSQL so batch results survive API restarts
Closed
#1605 Add Tailwind dark mode support across the frontend
Closed
#1624 Add JWT auth integration tests covering registration, login, protected routes, and admin endpoints
Closed
#1625 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1626 Make LLM model configurable via MODEL environment variable
Closed
#1622 Persist async job state to PostgreSQL so job results survive API restarts
Closed
#1623 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1621 Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Closed
#1619 Make CORS allowed origins configurable via environment variable
Closed
#1620 Remove hardcoded database credentials from docker-compose.yml
Closed
#1618 Add startup check to reject default JWT secret in non-development environments
Closed
#1610 Add side-by-side company patent portfolio comparison view
Closed
#1609 Export analysis reports as PDF or CSV from the dashboard
Closed
#1614 Add patent filing trend charts to the Analytics page
Closed
#1611 Add scheduled/recurring analysis with alerting on significant changes
Closed
#1612 Add webhook/notification support for batch job completion and score changes
Closed
#1604 Add skeleton loaders and user-friendly error states to Batch and Analytics pages
Closed
#1613 Add per-analysis LLM provider selection (multi-model support)
Closed
#1615 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1616 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1617 Evaluate object storage (S3/MinIO) for patent PDF persistence in containerized deployments
Closed
#1607 Add pytest test stage to Gitea Actions build workflow
Closed
#1608 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1603 Integrate PDF download step in analyze_single_patent and document volume mount requirement
Closed
#1606 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1602 Fix Patent.patent_id type annotation: change int to str in types.py
Closed
#1600 Make LLM model configurable via MODEL environment variable
Closed
#1601 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1598 Add JWT flow tests: registration, login, protected routes, token refresh, and admin endpoints
Closed
#1599 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1597 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1594 Remove hardcoded database credentials from docker-compose.yml
Closed
#1595 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#1596 Persist async job state in PostgreSQL to survive API restarts
Closed
#1592 Add startup check to refuse default JWT secret in non-dev environments
Closed
#1593 Make CORS allowed origins configurable via environment variable
Closed
#1559 Add pytest test stage to Gitea Actions build workflow
Closed
#1560 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1591 Add multi-model support: let users choose LLM provider per analysis
Closed
#1589 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1590 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1588 Add patent filing trend charts to the Analytics page
Closed
#1586 Add scheduled/recurring analysis with alerting on significant changes
Closed
#1587 Add webhook/notification support for batch job completion and score changes
Closed
#1584 Export analysis reports as PDF or CSV from the dashboard
Closed
#1585 Add side-by-side company patent portfolio comparison view
Closed
#1581 Add loading/error states (skeleton loaders) to Batch and Analytics pages
Closed
#1583 Add Tailwind dark mode support across the frontend
Closed
#1580 Document patent PDF storage volume mount and integrate download step in analyze_single_patent
Closed
#1582 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1573 Persist async job state in PostgreSQL to survive API restarts
Closed
#1574 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1575 Add JWT flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1576 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1578 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1577 Make LLM model configurable via MODEL environment variable
Closed
#1572 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#1570 Make CORS allowed origins configurable via environment variable
Closed
#1571 Remove hardcoded database credentials from docker-compose.yml
Closed
#1579 Fix Patent.patent_id type annotation: change int to str in types.py
Closed
#1569 Add startup check to refuse default JWT secret in non-dev environments
Closed
#1557 Add skeleton loaders and error states to Batch and Analytics pages
Closed
#1556 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1549 Persist async job state in PostgreSQL to survive API restarts
Closed
#1562 Add side-by-side patent portfolio comparison view
Closed
#1563 Implement scheduled/recurring analysis with change alerts
Closed
#1552 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1565 Add patent trend charts to Analytics page
Closed
#1545 Add startup check to refuse default JWT secret in non-dev environments
Closed
#1553 Make LLM model selection configurable via MODEL environment variable
Closed
#1564 Add webhook/notification support for batch job completion and score changes
Closed
#1567 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1546 Make CORS allowed origins configurable via environment variable
Closed
#1550 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1558 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1561 Export analysis reports as PDF or CSV from the dashboard
Closed
#1566 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1547 Remove hardcoded database credentials from docker-compose.yml
Closed
#1551 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1554 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1555 Fix Patent.patent_id type annotation: change int to str in types.py
Closed
#1548 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1544 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1543 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1542 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Closed
#1541 Add webhook/notification support for batch job completion and score changes
Closed
#1540 Implement scheduled/recurring analysis with change alerts
Closed
#1539 Add side-by-side patent portfolio comparison view
Closed
#1538 Export analysis reports as PDF or CSV from the dashboard
Closed
#1537 Add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI
Closed
#1536 Add pytest test stage to Gitea Actions CI workflow that gates the build
Closed
#1535 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1534 Add loading and error states to Batch and Analytics pages
Closed
#1533 Document patent PDF volume mount requirement and integrate download step in analyze_single_patent
Closed
#1532 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1531 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1530 Make LLM model configurable via MODEL environment variable
Closed
#1529 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1527 Add rate limiting middleware to auth endpoints
Closed
#1525 Refactor auth.py to use a shared pooled DatabaseClient instead of creating one per call
Closed
#1522 Refuse to start with default JWT secret in non-development environments
Closed
#1523 Make CORS allowed origins configurable via environment variable
Closed
#1528 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Closed
#1526 Persist job status in PostgreSQL so batch results survive API restarts
Closed
#1524 Remove hardcoded database credentials from docker-compose.yml
Closed
#1518 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1520 Implement dark mode using Tailwind dark variant across all frontend pages
Closed
#1513 Add side-by-side patent portfolio comparison view
Closed
#1516 Add patent trend charts to the Analytics page (filing frequency and technology categories over time)
Closed
#1521 Allow users to choose LLM provider per analysis (multi-model support)
Closed
#1508 Add loading states and error messages to Batch and Analytics frontend pages
Closed
#1502 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1519 Document patent PDF storage volume requirement or migrate to object storage (S3/MinIO)
Closed
#1517 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1515 Add webhook/notification support for batch job completion and score changes
Closed
#1514 Implement scheduled/recurring analysis with change alerting
Closed
#1512 Add PDF and CSV export for analysis reports from the dashboard
Closed
#1511 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1510 Add pytest test job to Gitea Actions build workflow
Closed
#1509 Add frontend lockfile (package-lock.json or pnpm-lock.yaml) to repository
Closed
#1506 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1507 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1505 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1504 Make LLM model configurable via MODEL environment variable
Closed
#1503 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1501 Add rate limiting middleware to /auth/login and /auth/register endpoints
Closed
#1500 Persist async job state in PostgreSQL so job results survive API restarts
Closed
#1499 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Closed
#1498 Move database credentials out of docker-compose.yml into .env / Docker secrets
Closed
#1497 Make CORS allowed origins configurable via environment variable
Closed
#1496 Add startup check to reject default JWT secret in non-development environments
Closed
#1491 Feature: Patent trend charts showing filing frequency and technology category distribution over time
Closed
#1490 Feature: Webhook/notification support for batch job completion and score change alerts
Closed
#1487 Feature: Export analysis reports as PDF or CSV from the dashboard
Closed
#1488 Feature: Side-by-side comparison view for two companies patent portfolios
Closed
#1489 Feature: Scheduled/recurring analysis with alerting on significant changes
Closed
#1492 Feature: Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1493 Feature: Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1494 Frontend: Implement dark mode using Tailwind dark variant
Closed
#1495 Feature: Multi-model support — let users choose LLM provider per analysis
Closed
#1485 CI: Add pytest test job to build.yaml that gates the Docker image build
Closed
#1481 Bug: analyze_single_patent reads PDF from disk without downloading it first
Closed
#1479 Backend: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1477 Backend: Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1486 CI: Add ruff (Python) and tsc --noEmit (TypeScript) linting/type-checking to CI
Closed
#1478 Backend: Make LLM model configurable via MODEL environment variable
Closed
#1480 Docs: Document patent PDF volume mount requirement for containerized deployments
Closed
#1482 Bug: Fix Patent.patent_id type annotation — should be str, not int
Closed
#1483 Frontend: Add skeleton loaders and error states to Batch and Analytics pages
Closed
#1484 Frontend: Commit a package-lock.json or pnpm-lock.yaml for reproducible builds
Closed
#1470 Security: Refuse to start with default JWT secret in non-dev environments
Closed
#1471 Security: Make CORS allowed origins configurable via environment variable
Closed
#1472 Security: Replace hardcoded DB credentials in docker-compose.yml with .env file
Closed
#1473 Refactor: Share a single pooled DatabaseClient instead of creating one per request in auth.py
Closed
#1474 Reliability: Persist batch job state in PostgreSQL so it survives API restarts
Closed
#1476 Test: Add JWT auth flow tests (registration, login, protected routes, token refresh, admin endpoints)
Closed
#1475 Security: Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1469 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1468 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1467 Add patent trend charts to the Analytics page (filing frequency and category distribution over time)
Closed
#1466 Let users choose LLM provider per analysis and compare outputs (multi-model support)
Closed
#1465 Add webhook/notification support for job completion and score change events
Closed
#1464 Implement scheduled/recurring analysis with change alerting
Closed
#1463 Add side-by-side patent portfolio comparison view
Closed
#1462 Allow users to export analysis reports as PDF or CSV from the dashboard
Closed
#1461 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1460 Add pytest test job to Gitea Actions CI workflow that gates the image build
Closed
#1459 Commit a package-lock.json or pnpm-lock.yaml to ensure reproducible frontend builds
Closed
#1458 Add dark mode support using Tailwind dark: variant
Closed
#1457 Add loading skeletons and error states to Batch and Analytics pages
Closed
#1456 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1455 Fix analyze_single_patent to download PDF before reading it from disk
Closed
#1454 Document patents/ volume mount requirement and evaluate object storage path
Closed
#1453 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1452 Make LLM model configurable via MODEL environment variable
Closed
#1451 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1450 Add JWT flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1449 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1448 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#1447 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1446 Move database credentials out of docker-compose.yml into .env or Docker secrets
Closed
#1445 Make CORS allowed origins configurable via environment variable
Closed
#1443 Refuse to start with default JWT secret in non-dev environments
Closed
#1444 Make CORS allowed origins configurable via environment variable
Closed
#1442 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1441 Add API cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1440 Add webhook/notification support for job completion and score changes
Closed
#1439 Implement scheduled/recurring analysis with change alerts
Closed
#1438 Add side-by-side comparison view for two companies patent portfolios
Closed
#1437 Export analysis reports as PDF or CSV from the dashboard
Closed
#1436 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1435 Add pytest test job to Gitea Actions workflow before image build
Closed
#1434 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1433 Add loading and error states to Batch and Analytics pages
Closed
#1432 Document patent PDF storage volume mount requirement and evaluate object storage
Closed
#1431 Fix Patent.patent_id type annotation from int to str
Closed
#1430 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1429 Expose SERP cache TTL as a configurable environment variable
Closed
#1428 Make LLM model configurable via MODEL environment variable
Closed
#1427 Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Closed
#1426 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1425 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1424 Persist async job state in PostgreSQL to survive API restarts
Closed
#1423 Refactor get_db_client() to use a shared pooled DatabaseClient
Closed
#1422 Replace plain-text database credentials in docker-compose.yml with env file or secrets
Closed
#1421 Make CORS allowed origins configurable via environment variable
Closed
#1420 Refuse startup with default JWT secret in non-development environments
Closed
#1419 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1418 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1417 Add side-by-side patent portfolio comparison view
Closed
#1416 Add PDF and CSV export for analysis reports
Closed
#1415 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1414 Add pytest test job to Gitea Actions CI workflow
Closed
#1413 Commit a frontend lockfile to ensure reproducible builds
Closed
#1412 Add loading states and error messages to Batch and Analytics pages
Closed
#1411 Fix analyze_single_patent to download PDF before attempting to read it
Closed
#1410 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1409 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1408 Make LLM model configurable via MODEL environment variable
Closed
#1407 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1406 Add JWT authentication tests covering registration, login, and protected routes
Closed
#1405 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1404 Persist async job state in PostgreSQL so jobs survive API restarts
Closed
#1403 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1402 Move database credentials out of docker-compose.yml into .env file
Closed
#1401 Make CORS allowed origins configurable via environment variable
Closed
#1400 Refuse to start when default JWT secret is used in non-dev environments
Closed
#1399 Allow per-analysis LLM provider selection and output comparison (multi-model support)
Closed
#1397 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1396 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1395 Add patent trend charts to Analytics page (filing frequency and technology categories over time)
Closed
#1394 Add webhook/notification support for batch job completion and score changes
Closed
#1393 Implement scheduled/recurring analysis with change alerting
Closed
#1392 Add side-by-side patent portfolio comparison view for two companies
Closed
#1391 Export analysis results as PDF or CSV from the dashboard
Closed
#1398 Add dark mode support to the frontend using Tailwind dark variant
Closed
#1390 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1389 Add pytest test job to Gitea Actions CI workflow
Closed
#1388 Commit frontend package lockfile to ensure reproducible builds
Closed
#1387 Add skeleton loaders and error states to Batch and Analytics pages
Closed
#1386 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1385 Document patents/ volume mount requirement and fix analyze_single_patent missing download step
Closed
#1384 Expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Closed
#1383 Make LLM model selection configurable via MODEL environment variable
Closed
#1382 Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Closed
#1381 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1379 Persist async batch job state to PostgreSQL instead of in-memory dict
Closed
#1378 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1380 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1377 Remove plain-text database credentials from docker-compose.yml
Closed
#1376 Make CORS allowed-origins configurable via environment variable
Closed
#1375 Add startup check to reject default JWT secret in non-dev environments
Closed
#1360 Document patent PDF volume mount requirement for containerized deployments
Closed
#1367 Export analysis reports as PDF or CSV from the dashboard
Closed
#1368 Side-by-side comparison view for two companies patent portfolios
Closed
#1369 Scheduled/recurring analysis with alerting on significant changes
Closed
#1370 Webhook/notification support for batch job completion and score changes
Closed
#1371 Patent trend charts: filing frequency and technology category distribution over time
Closed
#1372 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1373 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1357 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1358 Make LLM model configurable via MODEL environment variable
Closed
#1359 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1361 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1362 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1363 Add loading and error states to Batch and Analytics pages
Closed
#1364 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1365 Add pytest test job to CI workflow that gates the image build
Closed
#1366 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1354 Persist job state to PostgreSQL so batch results survive API restarts
Closed
#1356 Add JWT auth flow tests for registration, login, protected routes, and admin endpoints
Closed
#1355 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1350 Refuse to start with default JWT secret in non-development environments
Closed
#1351 Make CORS allowed origins configurable via environment variable
Closed
#1352 Replace plaintext database credentials in docker-compose.yml with .env file reference
Closed
#1353 Fix get_db_client() in auth.py to use a shared pooled DatabaseClient
Closed
#1324 Frontend: apply Tailwind dark mode variants across the dashboard
Closed
#1349 Repo Manager: triage summary for 25 agent-ready issues (2026-03-30)
Closed
#1345 Docs: document patent PDF volume mount requirement (and evaluate object storage path)
Closed
#1332 Feature: patent trend charts on Analytics page (filing frequency and technology categories over time)
Closed
#1327 Feature: export analysis reports as PDF or CSV from the dashboard
Closed
#1328 Feature: side-by-side patent portfolio comparison view
Closed
#1329 Feature: scheduled/recurring analysis with change alerts
Closed
#1330 Feature: webhook/notification support for batch job completion and score changes
Closed
#1331 Feature: multi-model support — let users select LLM provider per analysis
Closed
#1334 Feature: auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1333 Feature: cursor-based pagination for /analyze/batch and /jobs endpoints
Closed
#1322 Frontend: add skeleton loaders and error states to Batch and Analytics pages
Closed
#1325 CI: add pytest test job to Gitea Actions build.yaml that gates image builds
Closed
#1326 CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI
Closed
#1341 Test: add JWT auth flow tests (registration, login, protected routes, token refresh, admin endpoints)
Closed
#1340 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#1339 Bug: persist async job state to PostgreSQL so job results survive API restarts
Closed
#1338 Bug: fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#1335 Security: refuse to start with default JWT secret in non-development environments
Closed
#1336 Security: make CORS allowed origins configurable via environment variable
Closed
#1337 Security: remove hardcoded database credentials from docker-compose.yml
Closed
#1342 Refactor: replace print() calls in analyzer.py, serp_api.py, and llm.py with structured logging
Closed
#1343 Config: make LLM model selection configurable via MODEL environment variable
Closed
#1344 Config: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1346 Bug: analyze_single_patent silently fails if PDF is not already downloaded
Closed
#1347 Bug: fix Patent.patent_id type annotation in types.py (int -> str)
Closed
#1321 Backend: document patent PDF storage and volume mount requirements for containerized deployments
Closed
#1320 Backend: fix Patent.patent_id type annotation from int to str in types.py
Closed
#1319 Backend: document or fix analyze_single_patent assuming PDF already exists on disk
Closed
#1323 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1318 Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1317 Backend: make LLM model configurable via MODEL environment variable
Closed
#1316 Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1315 Test: add JWT authentication flow tests to test_api.py
Closed
#1314 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#1313 Fix: persist job state to PostgreSQL so async batch results survive API restarts
Closed
#1312 Fix: share a single pooled DatabaseClient instead of creating one per request in auth.py
Closed
#1311 Security: remove plaintext database credentials from docker-compose.yml
Closed
#1310 Security: make CORS allowed origins configurable via environment variable
Closed
#1309 Security: refuse to start with default JWT secret in non-development environments
Closed
#1307 Support multi-model LLM selection per analysis (GPT-4o, Gemini, Claude)
Closed
#1306 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1305 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1304 Add patent trend charts to Analytics page (filing frequency and technology categories over time)
Closed
#1303 Add webhook/notification support for batch job completion and score changes
Closed
#1302 Implement scheduled/recurring patent analysis with change alerting
Closed
#1301 Add side-by-side patent portfolio comparison view
Closed
#1300 Export analysis reports as PDF or CSV from the dashboard
Closed
#1308 Implement dark mode using Tailwind dark variant
Closed
#1299 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1298 Add pytest test job to Gitea Actions CI workflow
Closed
#1297 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1296 Add loading states and error messages to Batch and Analytics pages
Closed
#1295 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1294 Document patent PDF volume mount requirement and integrate download step in analyze_single_patent
Closed
#1293 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1292 Make LLM model selection configurable via MODEL environment variable
Closed
#1291 Replace print() calls with structured logging in analyzer, serp_api, and llm modules
Closed
#1290 Add JWT authentication tests covering full auth flow
Closed
#1289 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1288 Persist async job state in PostgreSQL instead of in-memory dict
Closed
#1287 Refactor get_db_client() in auth.py to use shared connection pool
Closed
#1286 Remove plaintext database credentials from docker-compose.yml
Closed
#1285 Make CORS allowed origins configurable via environment variable
Closed
#1284 Enforce non-default JWT secret on startup
Closed
#1283 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1282 Add patent trend charts to the Analytics page (filing frequency and category distribution)
Closed
#1281 Add export feature: download analysis results as PDF or CSV from the dashboard
Closed
#1280 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1279 Add pytest test job to Gitea Actions CI workflow that gates image build
Closed
#1278 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1277 Add loading and error states to Batch and Analytics pages
Closed
#1276 Integrate PDF download step into analyze_single_patent or document the prerequisite clearly
Closed
#1275 Fix Patent.patent_id type annotation from int to str
Closed
#1274 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1272 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1273 Make LLM model configurable via MODEL environment variable
Closed
#1270 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1271 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1269 Persist job state in PostgreSQL so batch results survive API restarts
Closed
#1268 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1267 Replace hardcoded database credentials in docker-compose.yml with .env file
Closed
#1266 Make CORS allowed origins configurable via environment variable
Closed
#1265 Refuse to start with default JWT secret in non-development environments
Closed
#1239 Refuse startup with default JWT secret in non-dev environments
Closed
#1258 Add patent trend charts to the Analytics page (filing frequency and category distribution)
Closed
#1259 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1250 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1251 Add loading states and error messages to Batch and Analytics pages
Closed
#1252 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1253 Add pytest test stage to Gitea Actions CI workflow
Closed
#1254 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1255 Export analysis reports as PDF or CSV from the dashboard
Closed
#1256 Add side-by-side patent portfolio comparison view
Closed
#1257 Add webhook/notification support for job completion and score change alerts
Closed
#1249 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1248 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1243 Persist async job state to PostgreSQL so jobs survive API restarts
Closed
#1242 Fix DatabaseClient connection leak in auth.py get_db_client()
Closed
#1241 Remove hardcoded database credentials from docker-compose.yml
Closed
#1240 Make CORS allowed origins configurable via environment variable
Closed
#1247 Make LLM model selectable via MODEL environment variable
Closed
#1246 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1245 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1244 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1264 Add multi-model support: let users choose LLM provider per analysis
Closed
#1261 Add Tailwind dark mode support to the frontend
Closed
#1260 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1263 Add scheduled/recurring analysis with change alerting
Closed
#1262 Document patent PDF volume mount or add S3/MinIO storage backend
Closed
#1237 Implement dark mode using Tailwind dark variant
Closed
#1238 Add per-analysis multi-model support: let users choose LLM provider in the UI
Closed
#1236 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1235 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1234 Add patent trend charts: filing frequency and technology category distribution over time
Closed
#1233 Add webhook/notification support for batch job completion and score changes
Closed
#1232 Implement scheduled/recurring patent analysis with alerts on significant changes
Closed
#1231 Add side-by-side comparison view for two companies patent portfolios
Closed
#1230 Add export feature: download analysis results as PDF or CSV from the dashboard
Closed
#1226 Add skeleton loaders and error states to Batch and Analytics pages
Closed
#1223 Document patents/ directory volume mount requirement for containerised deployments
Closed
#1219 Add auth test coverage: JWT registration, login, protected routes, and admin endpoints
Closed
#1228 Add pytest test stage to Gitea Actions build.yaml that gates the image build
Closed
#1229 Add ruff (Python) and tsc --noEmit (TypeScript) linting/type-check jobs to CI
Closed
#1227 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1224 Fix analyze_single_patent to download PDF before reading, or document prerequisite clearly
Closed
#1225 Fix Patent.patent_id type annotation in types.py from int to str
Closed
#1220 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1221 Make LLM model configurable via MODEL environment variable in llm.py
Closed
#1222 Expose SERP_CACHE_TTL_HOURS as an environment variable in config.py
Closed
#1218 Add rate limiting middleware to /auth/login and /auth/register endpoints
Closed
#1217 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#1216 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#1213 Add startup check to refuse default JWT secret in non-dev environments
Closed
#1214 Make CORS allowed origins configurable via environment variable
Closed
#1215 Remove hardcoded PostgreSQL credentials from docker-compose.yml
Closed
#1188 Add webhook/notification support for batch job completion and innovation score changes
Closed
#1212 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1211 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1210 Add export to PDF/CSV for analysis reports from the dashboard
Closed
#1209 Document patent PDF volume mount requirement and add S3/MinIO storage option
Closed
#1208 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1207 Add pytest test job to Gitea Actions CI workflow
Closed
#1206 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1205 Add loading skeletons and error states to Batch and Analytics pages
Closed
#1204 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1203 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1202 Expose SERP cache TTL as a configurable environment variable
Closed
#1201 Make LLM model configurable via MODEL environment variable
Closed
#1200 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1199 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Closed
#1198 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1197 Persist async job state in PostgreSQL so results survive API restarts
Closed
#1196 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1195 Remove hardcoded database credentials from docker-compose.yml
Closed
#1194 Make CORS allowed origins configurable via environment variable
Closed
#1193 Refuse to start with default JWT secret in non-development environments
Closed
#1181 Add dark mode support using Tailwind dark variant
Closed
#1180 Add loading states and error messages to Batch and Analytics pages
Closed
#1171 Persist async job state in PostgreSQL instead of in-memory dict
Closed
#1192 Add multi-model support to allow per-analysis LLM provider selection
Closed
#1191 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1190 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1189 Add patent filing trend charts to the Analytics page
Closed
#1187 Add scheduled/recurring analysis for tracked companies
Closed
#1186 Add side-by-side patent portfolio comparison view
Closed
#1185 Export analysis results as PDF or CSV from the dashboard
Closed
#1184 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1183 Add pytest test job to Gitea Actions CI workflow
Closed
#1182 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1179 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1178 Fix analyze_single_patent to download PDF before attempting local file read
Closed
#1177 Document patent PDF volume mount requirement and evaluate object storage option
Closed
#1176 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1175 Make LLM model configurable via MODEL environment variable
Closed
#1174 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1173 Add JWT auth tests covering registration, login, protected routes, and admin endpoints
Closed
#1172 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1170 Fix get_db_client() in auth.py to use a shared connection pool
Closed
#1169 Remove hardcoded database credentials from docker-compose.yml
Closed
#1168 Make CORS allowed origins configurable via environment variable
Closed
#1167 Refuse startup with default JWT secret in non-development environments
Closed
#1166 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1165 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1164 Add patent trend charts to the Analytics page
Closed
#1163 Add per-analysis LLM provider selection (GPT-4o, Gemini, Claude)
Closed
#1162 Add webhook/notification support for batch job completion and score changes
Closed
#1161 Implement scheduled/recurring analysis for tracked companies
Closed
#1160 Add side-by-side patent portfolio comparison view
Closed
#1159 Export analysis results as PDF or CSV from the dashboard
Closed
#1158 Add Tailwind dark mode variant to the frontend
Closed
#1157 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1156 Document or implement patent PDF storage for containerized deployments
Closed
#1155 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1154 Add loading states and error messages to Batch and Analytics pages
Closed
#1153 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1152 Make LLM model and SERP cache TTL configurable via environment variables
Closed
#1151 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1150 Add ruff linting and tsc type-checking to CI
Closed
#1149 Add pytest job to CI workflow that gates image builds
Closed
#1148 Add JWT flow tests covering registration, login, protected routes, and admin endpoints
Closed
#1147 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1146 Persist async job state to PostgreSQL so batch results survive API restarts
Closed
#1145 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#1144 Move database credentials out of docker-compose.yml into .env
Closed
#1143 Make CORS allowed origins configurable via environment variable
Closed
#1142 Refuse startup with default JWT secret in non-development environments
Closed
#1139 Add patent trend charts to Analytics page (filing frequency and technology category distribution)
Closed
#1138 Add per-analysis LLM provider selection (multi-model support)
Closed
#1135 Add side-by-side patent portfolio comparison view for two companies
Closed
#1134 Add export feature: download analysis results as PDF or CSV from the dashboard
Closed
#1137 Add webhook/notification support for batch job completion and significant score changes
Closed
#1136 Implement scheduled/recurring analysis for tracked companies with change alerts
Closed
#1140 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1141 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1131 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1130 Add loading states and error messages to Batch and Analytics frontend pages
Closed
#1133 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1132 Add pytest test job to Gitea Actions CI workflow that gates the image build
Closed
#1126 Make LLM model configurable via MODEL environment variable
Closed
#1127 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1125 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1128 Fix analyze_single_patent to download PDF before reading from disk, or document prerequisite
Closed
#1129 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1124 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1122 Persist async batch job state to PostgreSQL so it survives API restarts
Closed
#1123 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1120 Remove hardcoded database credentials from docker-compose.yml
Closed
#1121 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#1119 Make CORS allowed origins configurable via environment variable
Closed
#1118 Add startup check to reject default JWT secret in non-dev environments
Closed
#1111 Export analysis reports as PDF or CSV from the dashboard
Closed
#1112 Add side-by-side patent portfolio comparison view
Closed
#1113 Add scheduled/recurring analysis with change alerting
Closed
#1114 Add webhook/notification support for batch job completion and score changes
Closed
#1115 Add patent trend charts (filing frequency and tech category distribution) to Analytics page
Closed
#1116 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1097 Refactor get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#1095 Make CORS allowed origins configurable via environment variable
Closed
#1104 Document patent PDF volume mount requirement and consider object storage path
Closed
#1109 Add pytest test job to Gitea Actions CI workflow
Closed
#1110 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1105 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1102 Make LLM model configurable via MODEL environment variable
Closed
#1117 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1106 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1099 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1101 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1103 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1100 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1096 Move database credentials out of docker-compose.yml into .env file
Closed
#1094 Refuse startup with default JWT secret in non-development environments
Closed
#1098 Persist async job state in PostgreSQL so it survives API restarts
Closed
#1107 Add loading and error states to Batch and Analytics frontend pages
Closed
#1108 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1092 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1093 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1090 Add multi-model support to let users choose LLM provider per analysis
Closed
#1091 Add patent trend charts to Analytics page (filing frequency and technology distribution)
Closed
#1074 Add JWT auth tests covering registration, login, protected routes, and admin endpoints
Closed
#1075 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#1076 Make LLM model configurable via MODEL environment variable
Closed
#1077 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1070 Replace hardcoded DB credentials in docker-compose.yml with .env file references
Closed
#1071 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#1072 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#1073 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Closed
#1078 Document patent PDF volume mount requirement and evaluate object storage (S3/MinIO)
Closed
#1079 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1089 Add webhook/notification support for batch job completion and score change alerts
Closed
#1088 Add scheduled/recurring analysis with change alerting
Closed
#1085 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1084 Add pytest test job to Gitea Actions CI workflow that gates the image build
Closed
#1087 Add side-by-side patent portfolio comparison view
Closed
#1086 Add PDF and CSV export for analysis reports from the dashboard
Closed
#1081 Add loading states and error messages to Batch and Analytics frontend pages
Closed
#1080 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1083 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1082 Add dark mode support using Tailwind dark variant
Closed
#1069 Make CORS allowed origins configurable via environment variable
Closed
#1068 Add startup check to reject default JWT secret in non-dev environments
Closed
#1052 Document patent PDF volume mount requirement and consider object storage for containerized deployments
Closed
#1067 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1066 Implement cursor-based pagination for /analyze/batch and /jobs endpoints
Closed
#1065 Add patent trend charts to the Analytics page (filing frequency and technology category over time)
Closed
#1064 Support multiple LLM providers per analysis with per-request model selection
Closed
#1063 Add webhook/notification support for job completion and score change events
Closed
#1062 Implement scheduled/recurring analysis with change alerts
Closed
#1061 Add side-by-side comparison view for two companies patent portfolios
Closed
#1060 Export analysis reports as PDF or CSV from the dashboard
Closed
#1059 Add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI
Closed
#1058 Add pytest test job to Gitea Actions CI workflow that gates the image build
Closed
#1057 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#1056 Implement dark mode using Tailwind dark variant across the frontend
Closed
#1055 Add loading skeleton and error states to Batch and Analytics pages
Closed
#1054 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1053 Fix analyze_single_patent to download PDF before reading from disk
Closed
#1051 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1050 Make LLM model configurable via MODEL environment variable
Closed
#1049 Replace print() calls in analyzer.py, serp_api.py, and llm.py with structured logging
Closed
#1048 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Closed
#1047 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1046 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#1045 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#1044 Move database credentials out of docker-compose.yml and into .env
Closed
#1043 Make CORS allowed origins configurable via environment variable
Closed
#1042 Refuse to start with default JWT secret in non-development environments
Closed
#1041 Multi-model support: let users choose LLM provider per analysis and compare outputs
Closed
#1038 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1037 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1036 Add patent trend charts to Analytics page (filing frequency and category distribution)
Closed
#1035 Add webhook/notification support for batch job completion and score changes
Closed
#1034 Implement scheduled/recurring analysis with alerts on significant changes
Closed
#1033 Add side-by-side patent portfolio comparison view for two companies
Closed
#1032 Export analysis reports as PDF or CSV from the dashboard
Closed
#1039 Document or migrate patent PDF storage to object storage (S3/MinIO)
Closed
#1031 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1030 Add pytest test job to CI workflow that gates image builds
Closed
#1040 Add dark mode support to the frontend (Tailwind dark variant)
Closed
#1029 Commit a frontend lockfile to ensure reproducible builds
Closed
#1028 Add loading and error states to Batch and Analytics pages
Closed
#1027 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#1026 Fix analyze_single_patent: download PDF before attempting local file read
Closed
#1025 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#1024 Make LLM model configurable via MODEL environment variable
Closed
#1023 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#1022 Add JWT flow integration tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#1021 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#1020 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#1019 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#1018 Remove hardcoded database credentials from docker-compose.yml
Closed
#1017 Make CORS allowed origins configurable via environment variable
Closed
#1016 Refuse startup with default JWT secret in non-development environments
Closed
#1013 Add multi-model support: let users choose LLM provider per analysis
Closed
#1014 Add dark mode support using Tailwind dark variant
Closed
#1011 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#1012 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#1010 Add patent filing trend charts to the Analytics page
Closed
#1009 Add webhook/notification support for job completion and score changes
Closed
#1008 Implement scheduled/recurring analysis with change alerts
Closed
#1007 Add side-by-side patent portfolio comparison view
Closed
#1006 Export analysis reports as PDF or CSV from the dashboard
Closed
#1002 Add loading and error states to Batch and Analytics pages
Closed
#1000 Document patent PDF volume mount and integrate download step in analyze_single_patent
Closed
#1005 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#1004 Add pytest test stage to Gitea Actions build workflow
Closed
#1003 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Closed
#1001 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#999 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#998 Make LLM model configurable via MODEL environment variable
Closed
#997 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#996 Add JWT flow and admin endpoint tests to test_api.py
Closed
#995 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#994 Persist job state in PostgreSQL so batch results survive API restarts
Closed
#993 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#992 Remove hardcoded database credentials from docker-compose.yml
Closed
#991 Make CORS allowed origins configurable via environment variable
Closed
#990 Refuse to start with default JWT secret in non-dev environments
Closed
#989 Add multi-model support: let users choose LLM provider per analysis
Closed
#988 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#987 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#986 Add patent trend charts to the Analytics page
Closed
#985 Add webhook/notification support for batch job completion and score changes
Closed
#984 Add scheduled/recurring analysis with change alerts
Closed
#983 Add side-by-side patent portfolio comparison view
Closed
#982 Export analysis reports as PDF or CSV from the dashboard
Closed
#981 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#980 Add pytest test job to Gitea Actions CI workflow
Closed
#979 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#978 Add dark mode support using Tailwind dark variant
Closed
#977 Add loading skeletons and error states to Batch and Analytics pages
Closed
#976 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#975 Fix analyze_single_patent to download PDF before reading from disk
Closed
#974 Document patents/ volume mount requirement and evaluate object storage for PDF storage
Closed
#973 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#972 Make LLM model configurable via MODEL environment variable
Closed
#971 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#970 Add auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#969 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#968 Persist async job state in PostgreSQL so it survives API restarts
Closed
#967 Refactor get_db_client() to use a shared pooled DatabaseClient
Closed
#966 Move database credentials out of docker-compose.yml into .env
Closed
#965 Make CORS allowed origins configurable via environment variable
Closed
#964 Refuse startup with default JWT secret in non-dev environments
Closed
#963 Multi-model support: let users choose LLM provider per analysis
Closed
#962 Add scheduled/recurring analysis for tracked companies
Closed
#961 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#960 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#959 Add patent filing trend charts to the Analytics page
Closed
#958 Add webhook/notification support for job completion and score change alerts
Closed
#957 Add side-by-side comparison view for two companies patent portfolios
Closed
#956 Export analysis reports as PDF or CSV from the dashboard
Closed
#955 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#954 Add pytest test job to Gitea Actions CI workflow
Closed
#953 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Closed
#952 Add loading and error states to Batch and Analytics frontend pages
Closed
#951 Document or fix analyze_single_patent: PDF must be downloaded before analysis
Closed
#950 Fix Patent.patent_id type annotation: str not int
Closed
#949 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#948 Make LLM model configurable via MODEL environment variable
Closed
#947 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#946 Add JWT auth tests: registration, login, protected routes, and admin endpoints
Closed
#945 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#944 Persist async job state in PostgreSQL instead of in-memory dict
Closed
#943 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#942 Remove hardcoded database credentials from docker-compose.yml
Closed
#941 Make CORS allowed origins configurable via environment variable
Closed
#940 Refuse to start with default JWT secret in non-development environments
Closed
#921 Add Tailwind dark mode support to the frontend
Closed
#939 Add ruff linting and tsc type-checking to CI
Closed
#938 Add pytest test stage to Gitea Actions CI workflow
Closed
#937 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#935 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#936 Add loading states and error messages to Batch and Analytics pages
Closed
#934 Fix analyze_single_patent to download PDF before attempting local file read
Closed
#933 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#931 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#932 Make LLM model selection configurable via MODEL environment variable
Closed
#930 Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Closed
#929 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#928 Persist job state in PostgreSQL so batch results survive API restarts
Closed
#927 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#926 Replace hardcoded DB credentials in docker-compose.yml with .env file reference
Closed
#925 Make CORS allowed origins configurable via environment variable
Closed
#924 Add startup check to reject default JWT secret in non-dev environments
Closed
#923 Add per-analysis LLM provider selection and output comparison (multi-model support)
Closed
#922 Document or migrate patent PDF storage to a volume mount or object storage
Closed
#920 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#919 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#917 Add webhook/notification support for batch job completion and score change alerts
Closed
#918 Add patent filing frequency and technology category trend charts to Analytics page
Closed
#916 Add scheduled/recurring analysis with alerting on significant changes
Closed
#915 Add side-by-side patent portfolio comparison view for two companies
Closed
#914 Export analysis reports as PDF or CSV from the dashboard
Closed
#912 Add pytest test job to Gitea Actions CI workflow to gate image builds
Closed
#913 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#911 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#910 Add loading states and user-friendly error messages to Batch and Analytics pages
Closed
#909 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#908 Fix analyze_single_patent to download PDF before attempting to read from disk
Closed
#907 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#906 Make LLM model name configurable via MODEL environment variable
Closed
#905 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#904 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#903 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#902 Persist async job state in PostgreSQL so job status survives API restarts
Closed
#901 Fix get_db_client() in auth.py to reuse a shared connection pool
Closed
#900 Remove hardcoded database credentials from docker-compose.yml
Closed
#898 Refuse startup with default JWT secret in non-development environments
Closed
#899 Make CORS allowed origins configurable via environment variable
Closed
#888 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#889 CI: add pytest test job to Gitea Actions build.yaml that gates the image build
Closed
#880 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#881 Test: add JWT authentication flow tests (registration, login, protected routes, token refresh, admin endpoints)
Closed
#882 Refactor: replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#883 Config: make LLM model configurable via MODEL environment variable
Closed
#884 Config: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#885 Fix: integrate PDF download step into analyze_single_patent or document the prerequisite
Closed
#886 Fix: correct Patent.patent_id type annotation from int to str in types.py
Closed
#887 Frontend: add loading skeletons and error states to Batch and Analytics pages
Closed
#879 Fix: persist job state in PostgreSQL so batch results survive API restarts
Closed
#878 Fix: share a single pooled DatabaseClient instead of creating one per auth call
Closed
#875 Security: refuse to start with default JWT secret in non-dev environments
Closed
#877 Security: remove plaintext database credentials from docker-compose.yml
Closed
#876 Security: make CORS allowed origins configurable via environment variable
Closed
#893 Feature: scheduled/recurring patent analysis with change alerts
Closed
#892 Feature: side-by-side comparison view for two companies patent portfolios
Closed
#891 Feature: export analysis reports as PDF or CSV from the dashboard
Closed
#890 CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI pipeline
Closed
#897 Feature: auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#896 Feature: cursor-based pagination for /analyze/batch and /jobs endpoints
Closed
#895 Feature: patent trend charts on Analytics page (filing frequency, technology category distribution)
Closed
#894 Feature: webhook and notification support for completed batch jobs and score changes
Closed
#859 Document patent PDF volume mount requirement for containerized deployments
Closed
#874 Add multi-model support: let users choose LLM provider per analysis
Closed
#873 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#872 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#871 Add patent trend charts to the Analytics page
Closed
#870 Add webhook/notification support for batch job completion and score changes
Closed
#869 Add scheduled/recurring analysis with change alerting
Closed
#868 Add side-by-side patent portfolio comparison view
Closed
#867 Export analysis reports as PDF or CSV from the dashboard
Closed
#866 Add dark mode support to the React frontend using Tailwind dark variant
Closed
#865 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#864 Add pytest test job to Gitea Actions CI workflow
Closed
#863 Add frontend lockfile (package-lock.json or pnpm-lock.yaml) to repository
Closed
#862 Add skeleton loaders and error states to Batch and Analytics frontend pages
Closed
#861 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#860 Fix analyze_single_patent to download PDF before reading from disk
Closed
#858 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#857 Make LLM model configurable via MODEL environment variable
Closed
#856 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#855 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#854 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#853 Persist async job state in PostgreSQL so results survive API restarts
Closed
#852 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Closed
#849 Refuse to start with default JWT secret in non-development environments
Closed
#851 Remove hardcoded database credentials from docker-compose.yml
Closed
#850 Make CORS allowed origins configurable via environment variable
Closed
#848 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#847 Add cursor-based pagination to batch and jobs list endpoints
Closed
#846 Add patent trend charts (filing frequency and tech category distribution over time)
Closed
#845 Add multi-model LLM support so users can choose provider per analysis
Closed
#844 Add webhook and notification support for job completion and score changes
Closed
#843 Add scheduled recurring analysis with change alerting
Closed
#842 Add side-by-side comparison view for two companies patent portfolios
Closed
#841 Export analysis reports as PDF or CSV from the dashboard
Closed
#840 Document or implement object storage for patent PDF files
Closed
#839 Add Tailwind dark mode variant across frontend pages
Closed
#838 Add ruff linting and tsc type-checking to CI workflow
Closed
#837 Add pytest test job to Gitea Actions build.yaml that gates the image build
Closed
#836 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#835 Add loading states and error messages to Batch and Analytics pages
Closed
#834 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#833 Fix analyze_single_patent to download PDF before reading it from disk
Closed
#832 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#831 Make LLM model configurable via MODEL environment variable
Closed
#830 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#829 Add JWT authentication flow tests (registration, login, protected routes, token refresh, admin)
Closed
#828 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Closed
#827 Persist async job state in PostgreSQL so jobs survive API restarts
Closed
#826 Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Closed
#825 Move database credentials out of docker-compose.yml into .env file
Closed
#824 Make CORS allowed origins configurable via environment variable
Closed
#798 Refuse to start with default JWT secret in non-development environments
Closed
#808 Document patent PDF storage volume requirement and add S3/MinIO option
Closed
#801 Fix DatabaseClient connection pooling in auth.py
Closed
#800 Remove hardcoded database credentials from docker-compose.yml
Closed
#799 Make CORS allowed origins configurable via environment variable
Closed
#821 Add patent trend charts to the Analytics page
Closed
#820 Add per-analysis multi-model selection (GPT-4o, Gemini, Claude)
Closed
#817 Add side-by-side company patent portfolio comparison view
Closed
#815 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#813 Commit a frontend package lockfile for reproducible builds
Closed
#810 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#823 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#822 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#819 Add webhook and notification support for batch job completion
Closed
#818 Add scheduled recurring analysis for tracked companies
Closed
#816 Add export functionality for analysis reports (PDF and CSV)
Closed
#814 Add pytest test job to Gitea Actions CI workflow
Closed
#812 Add dark mode support using Tailwind dark variant
Closed
#811 Add skeleton loaders and error states to Batch and Analytics pages
Closed
#809 Fix analyze_single_patent to download PDF before attempting to read it
Closed
#807 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#806 Make LLM model selection configurable via MODEL environment variable
Closed
#805 Replace print() calls with structured Python logging
Closed
#804 Add tests for JWT authentication flow and admin-only endpoints
Closed
#803 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#802 Persist async batch job state to PostgreSQL
Closed
#797 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#796 Add export feature: download analysis results as PDF or CSV from the dashboard
Closed
#795 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#794 Add pytest test job to Gitea Actions build.yaml that gates image builds
Closed
#793 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#792 Add loading skeletons and error states to Batch and Analytics pages
Closed
#791 Fix analyze_single_patent to download PDF before attempting local file read
Closed
#790 Fix Patent.patent_id type annotation: change int to str in types.py
Closed
#789 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#788 Make LLM model configurable via MODEL environment variable
Closed
#787 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#786 Add JWT authentication tests: registration, login, protected routes, and admin endpoints
Closed
#785 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Closed
#784 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#783 Refactor get_db_client() in auth.py to use a shared pooled database connection
Closed
#782 Move database credentials out of docker-compose.yml into .env / Docker secrets
Closed
#781 Make CORS allowed origins configurable via environment variable
Closed
#780 Refuse to start with default JWT secret in non-development environments
Closed
#779 Add multi-model support to let users choose LLM provider per analysis
Closed
#778 Add webhook/notification support for batch job completion and score change alerts
Closed
#777 Add scheduled/recurring analysis with alerts on significant changes
Closed
#776 Support object storage (S3/MinIO) for patent PDFs in containerized deployments
Closed
#775 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#774 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#773 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Closed
#772 Add side-by-side patent portfolio comparison view for two companies
Closed
#771 Add export functionality to download analysis results as PDF or CSV
Closed
#754 Implement dark mode using Tailwind dark variant
Closed
#759 Persist async batch job state in PostgreSQL so job results survive API restarts
Closed
#761 Add JWT authentication integration tests covering full auth flow
Closed
#767 Add loading skeletons and error states to Batch and Analytics pages
Closed
#770 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#769 Add pytest test job to Gitea Actions CI workflow that gates the image build
Closed
#762 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#768 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#766 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#765 Fix analyze_single_patent to download PDF before attempting local file read
Closed
#764 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#763 Make LLM model configurable via MODEL environment variable
Closed
#760 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Closed
#758 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Closed
#757 Replace hardcoded database credentials in docker-compose.yml with .env file reference
Closed
#756 Make CORS allowed origins configurable via environment variable
Closed
#755 Add startup check to refuse default JWT secret in non-development environments
Closed
#751 Add patent filing frequency and technology category trend charts to the Analytics page
Closed
#746 Add loading skeletons and error states to Batch and Analytics pages
Closed
#753 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#752 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#750 Allow users to download analysis results as PDF or CSV from the dashboard
Closed
#749 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI pipeline
Closed
#748 Add pytest test stage to Gitea Actions workflow to gate image builds
Closed
#747 Commit a frontend package lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#745 Fix analyze_single_patent to download PDF before reading from disk, or document the prerequisite
Closed
#744 Fix Patent.patent_id type annotation in types.py from int to str
Closed
#743 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#742 Make LLM model selection configurable via MODEL environment variable
Closed
#741 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#740 Add test coverage for JWT auth flow: registration, login, protected routes, and admin endpoints
Closed
#739 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#738 Persist async batch job state in PostgreSQL instead of in-memory dict
Closed
#737 Fix get_db_client() in auth.py to reuse a shared pooled database connection
Closed
#736 Remove plaintext database credentials from docker-compose.yml
Closed
#735 Make CORS allowed origins configurable via environment variable
Closed
#734 Refuse to start with default JWT secret in non-development environments
Closed
#733 Refuse to start with default JWT secret in non-development environments
Closed
#732 Feature: Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#731 Feature: Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#730 Feature: Add patent trend charts to Analytics page (filing frequency and category distribution)
Closed
#729 Feature: Webhook/notification support for batch job completion and score changes
Closed
#728 Feature: Scheduled/recurring analysis with alerting on significant changes
Closed
#727 Feature: Side-by-side comparison view for two companies patent portfolios
Closed
#726 Feature: Export analysis reports as PDF or CSV from the dashboard
Closed
#725 CI: Add ruff linting and tsc --noEmit type checking to CI pipeline
Closed
#724 CI: Add pytest test job to Gitea Actions build workflow
Closed
#723 Feature: Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#722 Feature: Add loading states and error messages to Batch and Analytics pages
Closed
#721 Bug: Fix Patent.patent_id type annotation from int to str in types.py
Closed
#720 Bug: analyze_single_patent does not download PDF before reading from disk
Closed
#719 Docs: Document patent PDF volume mount requirement and consider object storage path
Closed
#718 Feature: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#717 Feature: Make LLM model selection configurable via MODEL environment variable
Closed
#716 Refactor: Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#715 Test: Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Closed
#714 Security: Add rate limiting to /auth/login and /auth/register endpoints
Closed
#713 Bug: Persist async job state in PostgreSQL so results survive API restarts
Closed
#712 Bug: Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#711 Security: Remove hardcoded database credentials from docker-compose.yml
Closed
#710 Security: Make CORS allowed origins configurable via environment variable
Closed
#709 Security: Refuse to start with default JWT secret in non-dev environments
Closed
#708 Add multi-model support: let users choose LLM provider per analysis
Closed
#707 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#706 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#705 Add patent trend charts to the Analytics page
Closed
#704 Add webhook/notification support for batch job completion and score changes
Closed
#703 Add scheduled/recurring analysis with change alerting
Closed
#702 Add side-by-side patent portfolio comparison view
Closed
#701 Export analysis reports as PDF or CSV from the dashboard
Closed
#700 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#699 Add pytest test job to CI workflow that gates the image build
Closed
#698 Add and commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Closed
#697 Add dark mode support using Tailwind dark variant
Closed
#696 Add loading and error states to Batch and Analytics pages
Closed
#695 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#694 Fix analyze_single_patent to download PDF before reading from disk
Closed
#693 Document patent PDF volume mount requirement and evaluate object storage path
Closed
#692 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#691 Make LLM model configurable via MODEL environment variable
Closed
#690 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#689 Add JWT auth flow tests: registration, login, protected routes, token refresh, and admin endpoints
Closed
#688 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#687 Persist async job state in PostgreSQL to survive API restarts
Closed
#686 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#685 Remove hardcoded database credentials from docker-compose.yml
Closed
#684 Make CORS allowed origins configurable via environment variable
Closed
#683 Refuse startup with default JWT secret in non-development environments
Closed
#682 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#681 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#680 Add patent filing trend charts to the Analytics page
Closed
#679 Add webhook/notification support for batch job completion and score changes
Closed
#678 Implement scheduled/recurring analysis for tracked companies
Closed
#677 Add side-by-side patent portfolio comparison view
Closed
#676 Export analysis reports as PDF or CSV from the dashboard
Closed
#675 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#674 Add pytest test job to Gitea Actions CI workflow
Closed
#673 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#672 Add loading states and error messages to Batch and Analytics pages
Closed
#671 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#670 Fix analyze_single_patent to download PDF before attempting to read it
Closed
#669 Expose SERP cache TTL as a SERP_CACHE_TTL_HOURS environment variable
Closed
#668 Make LLM model configurable via MODEL environment variable
Closed
#667 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#666 Add JWT auth integration tests (registration, login, protected routes, admin endpoints)
Closed
#665 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#664 Persist async job state to PostgreSQL so batch results survive API restarts
Closed
#663 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#662 Remove plaintext database credentials from docker-compose.yml
Closed
#661 Make CORS allowed origins configurable via environment variable
Closed
#660 Add startup check to reject default JWT secret in non-dev environments
Closed
#659 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#658 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#657 Add patent filing trend charts to the Analytics page
Closed
#656 Add webhook/notification support for batch job completion and score changes
Closed
#655 Implement scheduled/recurring patent analysis with change alerts
Closed
#654 Add side-by-side patent portfolio comparison view
Closed
#653 Export analysis reports as PDF or CSV from the dashboard
Closed
#652 Add ruff and tsc --noEmit linting/type checking to CI
Closed
#651 Add pytest test stage to Gitea Actions CI workflow
Closed
#650 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Closed
#649 Add loading states and error messages to Batch and Analytics pages
Closed
#648 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#647 Document patent PDF volume mount requirement and path assumptions
Closed
#646 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#645 Make LLM model configurable via MODEL environment variable
Closed
#644 Replace print() calls with structured logging in analyzer, serp_api, and llm modules
Closed
#643 Add JWT auth integration tests (registration, login, protected routes, admin)
Closed
#642 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#641 Persist async job state in PostgreSQL instead of in-memory dict
Closed
#640 Refactor get_db_client() to use a shared pooled connection
Closed
#639 Remove hardcoded database credentials from docker-compose.yml
Closed
#638 Make CORS allowed origins configurable via environment variable
Closed
#637 Add startup check to reject default JWT secret in production
Closed
#636 Multi-model LLM support: let users select provider per analysis
Closed
#635 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#634 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#633 Add patent trend charts to the Analytics page
Closed
#632 Add webhook/notification support for completed jobs and score changes
Closed
#631 Scheduled/recurring analysis with alerts on significant changes
Closed
#630 Add side-by-side patent portfolio comparison view
Closed
#629 Export analysis reports as PDF or CSV from the dashboard
Closed
#628 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#627 Add pytest test job to Gitea Actions CI workflow
Closed
#626 Add dark mode support using Tailwind dark variant
Closed
#625 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#624 Add loading/error states to Batch and Analytics frontend pages
Closed
#623 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#622 Fix analyze_single_patent to download PDF before reading from disk
Closed
#621 Document patent PDF storage volume mount and consider object storage path
Closed
#620 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#619 Make LLM model configurable via MODEL environment variable
Closed
#618 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#617 Add JWT authentication tests (registration, login, protected routes, token refresh, admin)
Closed
#616 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#615 Persist async job state in PostgreSQL to survive API restarts
Closed
#614 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#613 Remove hardcoded database credentials from docker-compose.yml
Closed
#612 Make CORS allowed origins configurable via environment variable
Closed
#611 Refuse startup with default JWT secret in non-dev environments
Closed
#610 Add dark mode support to frontend using Tailwind dark: variants
Closed
#607 Commit frontend lockfile for reproducible builds
Closed
#594 Refuse to start with default JWT secret in non-dev environments
Closed
#604 Fix analyze_single_patent to download PDF before reading from disk
Closed
#605 Fix Patent.patent_id type annotation: change int to str in types.py
Closed
#606 Add loading states and error messages to Batch and Analytics pages
Closed
#609 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#595 Make CORS allowed origins configurable via environment variable
Closed
#596 Remove plain-text DB credentials from docker-compose.yml
Closed
#597 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#599 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#600 Add JWT auth flow tests (registration, login, protected routes, token refresh, admin)
Closed
#601 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#602 Make LLM model configurable via MODEL environment variable
Closed
#608 Add pytest test job to Gitea Actions CI workflow
Closed
#598 Persist async job state to PostgreSQL so jobs survive API restarts
Closed
#603 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#574 Add JWT authentication tests: registration, login, protected routes, and admin endpoints
Closed
#575 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#576 Make LLM model configurable via MODEL environment variable
Closed
#577 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#570 Remove hardcoded postgres credentials from docker-compose.yml
Closed
#571 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#572 Persist async job state in PostgreSQL to survive API restarts
Closed
#573 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#578 Document patent PDF volume mount and add object storage option for containerized deployments
Closed
#579 Fix analyze_single_patent to download PDF before attempting to read from disk
Closed
#589 Add webhook/notification support for batch job completion and score change alerts
Closed
#588 Add scheduled/recurring analysis with alerting on significant score changes
Closed
#585 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#584 Add pytest test job to Gitea Actions CI workflow
Closed
#587 Add side-by-side comparison view for two companies patent portfolios
Closed
#586 Add PDF and CSV export for analysis reports from the dashboard
Closed
#581 Add loading skeletons and error states to Batch and Analytics pages
Closed
#580 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#583 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#582 Add dark mode support using Tailwind dark: variants
Closed
#569 Make CORS allowed origins configurable via environment variable
Closed
#568 Add startup check to reject default JWT secret in non-dev environments
Closed
#592 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#593 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#590 Add per-analysis LLM provider selection and multi-model output comparison
Closed
#591 Add patent filing frequency and technology category trend charts to Analytics page
Closed
#562 Add dark mode support to frontend using Tailwind dark variant
Closed
#567 Add patent trend charts to Analytics page (filing frequency and technology category over time)
Closed
#566 Add per-analysis LLM provider selection (GPT-4o, Gemini, Claude) with output comparison
Closed
#561 Document patent PDF volume mount requirement and evaluate S3/MinIO for containerized storage
Closed
#565 Add webhook/notification support for batch job completion and score change events
Closed
#564 Add scheduled/recurring analysis with change alerts for tracked companies
Closed
#563 Add side-by-side patent portfolio comparison view for two companies
Closed
#558 Add export functionality for analysis reports (PDF and CSV download)
Closed
#546 Persist async job state in PostgreSQL to survive API restarts
Closed
#560 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#559 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#557 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#556 Add pytest test job to Gitea Actions CI workflow that gates image builds
Closed
#555 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#554 Add loading states and error messages to Batch and Analytics frontend pages
Closed
#553 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#552 Fix analyze_single_patent to download PDF before reading from disk
Closed
#551 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#550 Make LLM model configurable via MODEL environment variable
Closed
#549 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#548 Add JWT authentication integration tests covering login, protected routes, and admin endpoints
Closed
#547 Add rate limiting middleware to /auth/login and /auth/register endpoints
Closed
#545 Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Closed
#544 Move database credentials out of docker-compose.yml into .env file
Closed
#543 Make CORS allowed origins configurable via environment variable
Closed
#542 Add startup check refusing default JWT secret in non-dev environments
Closed
#541 Feature: multi-model support allowing users to choose LLM provider per analysis
Closed
#540 Feature: auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#539 Feature: cursor-based pagination for /analyze/batch and /jobs endpoints
Closed
#538 Feature: patent trend charts showing filing frequency and category distribution over time
Closed
#537 Feature: webhook/notification support for batch job completion and score change alerts
Closed
#536 Feature: scheduled/recurring patent analysis with alerts on significant changes
Closed
#535 Feature: side-by-side comparison view for two companies patent portfolios
Closed
#534 Feature: export analysis reports as PDF or CSV from the dashboard
Closed
#533 CI: add ruff (Python) and tsc --noEmit (TypeScript) linting to Gitea Actions workflow
Closed
#532 CI: add pytest test stage to Gitea Actions workflow that gates image builds
Closed
#531 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#530 Frontend: add dark mode support using Tailwind dark variant
Closed
#529 Frontend: add loading skeletons and error states to Batch and Analytics pages
Closed
#528 Bug: fix Patent.patent_id type annotation — change from int to str in types.py
Closed
#527 Bug: analyze_single_patent does not download PDF before reading it from disk
Closed
#526 Backend: document volume mount requirement for patents/ PDF storage directory
Closed
#525 Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#524 Backend: make LLM model configurable via MODEL environment variable
Closed
#523 Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#522 Tests: add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Closed
#521 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#520 Persist async job state to PostgreSQL so batch results survive API restarts
Closed
#519 Fix: share a single pooled DatabaseClient instead of creating one per request in auth.py
Closed
#518 Security: remove hardcoded database credentials from docker-compose.yml
Closed
#517 Security: make CORS allowed origins configurable via environment variable
Closed
#516 Security: refuse to start with default JWT secret in non-dev environments
Closed
#490 Add startup check to reject default JWT secret in non-dev environments
Closed
#491 Make CORS allowed origins configurable via environment variable
Closed
#492 Replace hardcoded database credentials in docker-compose.yml with .env file
Closed
#493 Refactor auth.py to use a shared pooled DatabaseClient instead of creating one per call
Closed
#494 Persist batch job state in PostgreSQL so job results survive API restarts
Closed
#495 Add rate limiting middleware to /auth/login and /auth/register endpoints
Closed
#496 Add JWT authentication tests covering the full auth flow
Closed
#497 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#498 Make LLM model configurable via MODEL environment variable
Closed
#499 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#500 Fix analyze_single_patent to download PDF before reading from disk
Closed
#501 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#502 Document patent PDF volume mount requirement and evaluate object storage options
Closed
#503 Add loading states and error messages to Batch and Analytics pages
Closed
#504 Commit a frontend lockfile to ensure reproducible builds
Closed
#505 Add pytest test stage to Gitea Actions CI workflow
Closed
#506 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#507 Add export functionality: download analysis results as PDF or CSV
Closed
#508 Add side-by-side patent portfolio comparison view
Closed
#509 Implement scheduled/recurring patent analysis with change alerts
Closed
#510 Add webhook/notification support for batch job completion and score changes
Closed
#511 Add patent filing trend charts to the Analytics page
Closed
#512 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#513 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#514 Add dark mode support to the frontend using Tailwind dark variant
Closed
#515 Add per-analysis LLM provider selection (multi-model support)
Closed
#489 Feature: Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#488 Feature: Cursor-based pagination for /analyze/batch and /jobs endpoints
Closed
#487 Feature: Patent trend charts in Analytics page (filing frequency and category distribution)
Closed
#486 Feature: Webhook/notification support for batch job completion and score changes
Closed
#485 Feature: Scheduled/recurring analysis with change alerts
Closed
#484 Feature: Side-by-side patent portfolio comparison view
Closed
#483 Feature: Export analysis reports as PDF or CSV from the dashboard
Closed
#482 CI: Add ruff linting and tsc --noEmit type checking to CI pipeline
Closed
#481 CI: Add pytest test stage to Gitea Actions build workflow
Closed
#480 Frontend: Commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#479 Frontend: Add loading skeletons and error states to Batch and Analytics pages
Closed
#478 Backend: Fix Patent.patent_id type annotation from int to str in types.py
Closed
#477 Backend: Fix analyze_single_patent to download PDF before reading from disk
Closed
#476 Backend: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#475 Backend: Make LLM model configurable via MODEL environment variable
Closed
#474 Backend: Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Closed
#473 Test: Add JWT authentication flow tests to test_api.py
Closed
#472 Security: Add rate limiting middleware to /auth/login and /auth/register
Closed
#471 Fix: Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#470 Fix: Share a single pooled DatabaseClient instead of creating one per auth call
Closed
#469 Security: Remove hardcoded database credentials from docker-compose.yml
Closed
#468 Security: Make CORS allowed origins configurable via environment variable
Closed
#467 Security: Add startup check to reject default JWT secret in non-dev environments
Closed
#464 Add patent filing trend charts to the Analytics page
Closed
#463 Add webhook/notification support for batch job completion and score changes
Closed
#462 Implement scheduled/recurring analysis with change alerts
Closed
#461 Add side-by-side patent portfolio comparison view for two companies
Closed
#460 Allow users to export analysis reports as PDF or CSV from the dashboard
Closed
#456 Add loading skeletons and error states to Batch and Analytics pages
Closed
#455 Document patent PDF volume mount requirement and fix analyze_single_patent download step
Closed
#466 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#465 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#459 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#458 Add pytest test stage to CI workflow that gates the Docker image build
Closed
#457 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#454 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#453 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#452 Make LLM model configurable via MODEL environment variable
Closed
#451 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#450 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#449 Add rate limiting middleware to auth endpoints
Closed
#448 Persist job state in PostgreSQL so batch results survive API restarts
Closed
#447 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#446 Remove hardcoded database credentials from docker-compose.yml
Closed
#445 Make CORS allowed origins configurable via environment variable
Closed
#444 Add startup check to refuse default JWT secret in non-development environments
Closed
#426 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#442 Add ruff linting and tsc type checking to CI
Closed
#441 Add pytest test job to Gitea Actions CI workflow
Closed
#440 Commit a frontend lockfile to ensure reproducible builds
Closed
#439 Add loading states and error messages to Batch and Analytics pages
Closed
#438 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#437 Fix analyze_single_patent to download PDF before reading from disk
Closed
#436 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#435 Make LLM model configurable via MODEL environment variable
Closed
#434 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#433 Add JWT authentication tests covering full auth flow
Closed
#432 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#431 Persist async batch job state to PostgreSQL to survive API restarts
Closed
#430 Fix get_db_client() in auth.py to use a shared pooled database connection
Closed
#429 Remove hardcoded database credentials from docker-compose.yml
Closed
#428 Make CORS allowed origins configurable via environment variable
Closed
#427 Refuse startup with default JWT secret in non-development environments
Closed
#414 Add loading/error states (skeleton loaders and error messages) to Batch and Analytics pages
Closed
#425 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#424 Add patent trend charts to Analytics page (filing frequency and technology categories over time)
Closed
#423 Add multi-model LLM support: let users choose provider per analysis
Closed
#422 Add webhook/notification support for batch job completion and score changes
Closed
#421 Implement scheduled/recurring analysis with change alerting
Closed
#420 Add side-by-side patent portfolio comparison view
Closed
#419 Export analysis reports as PDF or CSV from the dashboard
Closed
#418 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#417 Add pytest test job to Gitea Actions CI workflow to gate image builds
Closed
#416 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#415 Add dark mode support using Tailwind dark: variant
Closed
#413 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#412 Fix analyze_single_patent to download PDF before reading from disk
Closed
#411 Document patent PDF storage volume mount and evaluate object storage options
Closed
#410 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#409 Make LLM model configurable via MODEL environment variable
Closed
#408 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#406 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#407 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#405 Persist async job state to PostgreSQL so batch results survive API restarts
Closed
#402 Make CORS allowed origins configurable via environment variable
Closed
#403 Remove hardcoded database credentials from docker-compose.yml
Closed
#404 Fix get_db_client() to use a shared pooled DatabaseClient instead of per-call instantiation
Closed
#401 Add startup check to refuse default JWT secret in non-dev environments
Closed
#370 Document patent PDF volume mount requirement and consider object storage path
Closed
#400 Multi-model support: let users choose LLM provider per analysis and compare outputs
Closed
#399 Add dark mode support using Tailwind dark variant
Closed
#398 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#396 Add patent trend charts to Analytics page (filing frequency and technology category over time)
Closed
#397 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#395 Add webhook/notification support for batch job completion and innovation score changes
Closed
#394 Implement scheduled/recurring analysis for tracked companies
Closed
#393 Add side-by-side comparison view for two companies patent portfolios
Closed
#392 Export analysis reports as PDF or CSV from the dashboard
Closed
#388 Add loading and error states to Batch and Analytics pages
Closed
#382 Add JWT auth integration tests: registration, login, protected routes, token refresh, admin-only endpoints
Closed
#380 Persist job state in PostgreSQL so batch results survive API restarts
Closed
#391 Add ruff linting and tsc type checking to CI
Closed
#390 Add pytest test stage to Gitea Actions build.yaml to gate image builds on passing tests
Closed
#389 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#387 Fix type annotation: Patent.patent_id should be str, not int
Closed
#386 Fix: analyze_single_patent must download PDF before attempting to read it from disk
Closed
#385 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#384 Make LLM model configurable via MODEL environment variable
Closed
#383 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#381 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Closed
#379 Security: remove plaintext database credentials from docker-compose.yml
Closed
#378 Security: make CORS allowed origins configurable via environment variable
Closed
#377 Security: refuse to start with default JWT secret in non-development environments
Closed
#357 Fix: share a single pooled DatabaseClient instead of creating one per get_db_client() call
Closed
#369 CI: add ruff (Python) and tsc --noEmit (TypeScript) linting to Gitea Actions
Closed
#368 CI: add pytest test stage to Gitea Actions workflow that gates the image build
Closed
#361 Add loading skeletons and error states to Analytics page
Closed
#360 Add auth/JWT integration tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#363 Make LLM model configurable via MODEL environment variable
Closed
#362 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#365 Fix: analyze_single_patent must download the PDF before attempting to read it from disk
Closed
#364 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#367 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Closed
#366 Fix: correct Patent.patent_id type annotation from int to str in types.py
Closed
#358 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#359 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#354 Security: refuse to start with default JWT secret in non-dev environments
Closed
#355 Security: make CORS allowed origins configurable via environment variable
Closed
#356 Security: remove plaintext database credentials from docker-compose.yml
Closed
#376 Add scheduled/recurring analysis with alerts on significant score changes
Closed
#374 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#375 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#372 Add side-by-side comparison view for two companies patent portfolios
Closed
#373 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Closed
#371 Export analysis reports as PDF or CSV from the dashboard
Closed
#348 Add webhook/notification support for batch job completion and score changes
Closed
#351 Multi-model LLM support: let users choose provider per analysis and compare outputs
Closed
#343 Add loading skeletons and error states to Batch processing page
Closed
#347 Implement scheduled/recurring patent analysis with change alerts
Closed
#350 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#341 Document patent PDF volume mount and integrate download step in analyze_single_patent
Closed
#338 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#339 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#332 Export analysis reports as PDF or CSV from the dashboard
Closed
#333 Add patent trend charts to Analytics page
Closed
#330 Add loading skeletons and error states to Analytics page
Closed
#331 Implement dark mode across all frontend pages
Closed
#336 Make CORS allowed origins configurable via environment variable
Closed
#337 Remove hardcoded database credentials from docker-compose.yml
Closed
#334 Add side-by-side company patent portfolio comparison view
Closed
#335 Refuse startup with default JWT secret in non-development environments
Closed
#329 Make LLM model configurable via MODEL environment variable
Closed
#328 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#327 Persist job state in PostgreSQL to survive API restarts
Closed
#326 Fix get_db_client() in auth.py to use singleton pattern properly
Closed
#349 Add cursor-based pagination to /analyze/batch and /jobs API endpoints
Closed
#346 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#345 Add pytest test job to Gitea Actions CI workflow
Closed
#344 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#342 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#340 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#325 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#324 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#323 Add patent filing trend charts to the Analytics page
Closed
#322 Add side-by-side patent portfolio comparison view
Closed
#321 Export analysis reports as PDF or CSV from the dashboard
Closed
#320 Add ruff linting and tsc type checking to CI
Closed
#319 Add pytest test job to Gitea Actions CI workflow to gate image builds
Closed
#318 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#317 Add loading and error states to Batch and Analytics frontend pages
Closed
#316 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#315 Fix analyze_single_patent to download PDF before attempting local read
Closed
#314 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#313 Make LLM model configurable via MODEL environment variable
Closed
#312 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#311 Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Closed
#310 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#309 Persist async job state to PostgreSQL so results survive API restarts
Closed
#308 Fix get_db_client() in auth.py to use a shared connection pool
Closed
#307 Remove hardcoded database credentials from docker-compose.yml
Closed
#306 Make CORS allowed origins configurable via environment variable
Closed
#305 Add startup check to reject default JWT secret in non-dev environments
Closed
#304 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#303 Add API pagination to /analyze/batch and /jobs endpoints
Closed
#302 Add side-by-side patent portfolio comparison view
Closed
#301 Export analysis reports as PDF or CSV from the dashboard
Closed
#300 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#299 Add pytest test job to Gitea Actions CI workflow
Closed
#298 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#297 Add skeleton loaders and error states to Batch and Analytics pages
Closed
#296 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#295 Fix analyze_single_patent to download PDF before reading from disk
Closed
#294 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#293 Make LLM model configurable via MODEL environment variable
Closed
#292 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#291 Add JWT authentication tests (registration, login, protected routes, admin)
Closed
#290 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#289 Persist job state to PostgreSQL so batch results survive API restarts
Closed
#288 Refactor get_db_client() in auth.py to use a shared connection pool
Closed
#287 Remove plaintext DB credentials from docker-compose.yml
Closed
#286 Make CORS allowed origins configurable via environment variable
Closed
#285 Add startup check to reject default JWT secret in non-dev environments
Closed
#260 CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI workflow
Closed
#283 Frontend: commit a package lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Closed
#284 CI: add pytest test job to Gitea Actions workflow that gates the image build
Closed
#281 Bug: fix Patent.patent_id type annotation in types.py -- should be str, not int
Closed
#277 Tests: add JWT authentication flow tests covering registration, login, protected routes, and admin endpoints
Closed
#282 Bug: analyze_single_patent assumes PDF already exists locally -- integrate download step or document prerequisite
Closed
#273 Security: move database credentials out of docker-compose.yml into .env or Docker secrets
Closed
#275 Bug: persist async job state to PostgreSQL so batch results survive API restarts
Closed
#271 Security: refuse to start with default JWT secret in non-development environments
Closed
#272 Security: make CORS allowed-origins configurable via environment variable
Closed
#274 Bug: get_db_client() in auth.py creates a new DatabaseClient on every call, exhausting the connection pool
Closed
#276 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#279 Backend: make LLM model configurable via MODEL environment variable instead of hardcoding claude-3.5-sonnet
Closed
#280 Backend: expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Closed
#253 Docs: document patent PDF storage volume mount requirement (or add S3/MinIO support)
Closed
#256 Frontend: add loading skeletons and error states to Batch and Analytics pages
Closed
#257 Frontend: add dark mode support using Tailwind dark variant
Closed
#278 Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Closed
#261 Feature: export analysis reports as PDF or CSV from the dashboard
Closed
#262 Feature: side-by-side patent portfolio comparison view for two companies
Closed
#263 Feature: scheduled/recurring analysis with alerts on significant changes
Closed
#264 Feature: webhook/notification support for batch job completion and score changes
Closed
#265 Feature: multi-model support — let users choose LLM provider per analysis
Closed
#266 Feature: patent trend charts — filing frequency and technology category distribution over time
Closed
#267 Feature: add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#268 DX: auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#254 Bug: analyze_single_patent does not download PDF before reading it from disk
Closed
#259 CI: add pytest test job to Gitea Actions workflow that gates the build
Closed
#258 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#247 Bug: persist job state to PostgreSQL so batch results survive API restarts
Closed
#245 Security: remove hardcoded database credentials from docker-compose.yml
Closed
#255 Bug: fix Patent.patent_id type annotation — should be str not int
Closed
#252 Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#251 Backend: make LLM model configurable via MODEL environment variable
Closed
#250 Backend: replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#249 Tests: add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Closed
#248 Security: add rate limiting to /auth/login and /auth/register endpoints
Closed
#246 Bug: refactor get_db_client() in auth.py to use a shared connection pool
Closed
#244 Security: make CORS allowed origins configurable via environment variable
Closed
#243 Security: refuse startup with default JWT secret in non-dev environments
Closed
#242 Add dark mode support using Tailwind dark variant
Closed
#241 Document patent PDF volume mount or migrate storage to S3/MinIO for containerized deployments
Closed
#240 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#239 Add pytest test job to CI workflow that gates image build
Closed
#238 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#237 Add skeleton loaders and error states to Batch and Analytics frontend pages
Closed
#236 Document or fix analyze_single_patent PDF download prerequisite
Closed
#235 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#234 Expose SERP cache TTL as a SERP_CACHE_TTL_HOURS environment variable
Closed
#233 Make LLM model configurable via MODEL environment variable
Closed
#232 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#231 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Closed
#230 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#229 Persist async job state to PostgreSQL to survive API restarts
Closed
#228 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Closed
#227 Move database credentials out of docker-compose.yml into a .env file
Closed
#226 Make CORS allowed origins configurable via environment variable
Closed
#225 Add startup check to refuse default JWT secret in non-development environments
Closed
#224 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#223 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#222 Add patent filing trend charts to Analytics page
Closed
#221 Add webhook/notification support for batch job completion and score changes
Closed
#220 Implement scheduled/recurring analysis with change alerts
Closed
#219 Add side-by-side patent portfolio comparison view
Closed
#218 Export analysis reports as PDF or CSV from the dashboard
Closed
#217 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#216 Add pytest test job to Gitea Actions CI workflow
Closed
#215 Commit a frontend lockfile to ensure reproducible builds
Closed
#214 Add loading skeletons and error states to Batch and Analytics pages
Closed
#213 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#212 Fix analyze_single_patent to download PDF before attempting to read it from disk
Closed
#211 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#210 Make LLM model configurable via MODEL environment variable
Closed
#209 Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Closed
#208 Add JWT authentication tests covering full token lifecycle
Closed
#207 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#206 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#205 Fix get_db_client() to use a shared connection pool instead of creating a new client per call
Closed
#204 Move database credentials out of docker-compose.yml into .env
Closed
#203 Make CORS allowed origins configurable via environment variable
Closed
#202 Refuse startup with default JWT secret in non-dev environments
Closed
#85 Add PDF export for analysis reports (CSV already implemented)
Closed
#176 Persist async job state in PostgreSQL to survive API restarts
Closed
#186 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#172 Refuse to start with default JWT secret in non-development environments
Closed
#173 Make CORS allowed origins configurable via environment variable
Closed
#174 Move database credentials out of docker-compose.yml into .env file
Closed
#175 Refactor get_db_client() in auth.py to use a shared pooled connection
Closed
#177 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#181 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#180 Make LLM model configurable via MODEL environment variable
Closed
#184 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#188 Add ruff linting and tsc type checking to CI
Closed
#187 Add pytest test job to CI workflow that gates the image build
Closed
#197 Add dark mode support using Tailwind dark variant
Closed
#194 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#190 Add scheduled/recurring analysis with alerts on significant changes
Closed
#191 Add webhook/notification support for batch job completion and score changes
Closed
#198 Add side-by-side comparison view for two companies' patent portfolios
Closed
#199 Add multi-model support: let users choose LLM provider per analysis
Closed
#178 Add JWT auth flow tests (registration, login, protected routes, admin)
Closed
#179 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#200 Add patent trend charts to Analytics page (filing frequency and tech category distribution)
Closed
#201 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#183 Fix analyze_single_patent to download PDF before reading from disk
Closed
#182 Document or fix patent PDF storage for containerised deployments
Closed
#185 Add skeleton loaders and error states to Batch and Analytics pages
Closed
#196 Implement dark mode using Tailwind dark variant
Closed
#195 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#193 Add patent trend charts (filing frequency and category distribution over time)
Closed
#192 Add per-analysis model selection to allow comparing LLM provider outputs
Closed
#189 Add side-by-side patent portfolio comparison view for two companies
Closed
#90 Add cursor-based pagination to /analyze/batch endpoint (/jobs already done)
Closed
#170 Add dark mode support using Tailwind dark variant
Closed
#169 Document volume mount requirement for patents/ directory or add S3/MinIO storage backend
Closed
#168 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#167 Add patent filing frequency and technology category trend charts to Analytics page
Closed
#166 Add per-analysis LLM provider selection and output comparison (multi-model support)
Closed
#165 Add webhook/notification support for batch job completion and score changes
Closed
#164 Add scheduled/recurring analysis with alerts on significant changes
Closed
#163 Add side-by-side patent portfolio comparison view
Closed
#162 Add ruff linting and tsc --noEmit type checking to CI
Closed
#161 Add pytest test stage to Gitea Actions CI workflow before image build
Closed
#160 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#159 Add loading/error states to Batch and Analytics frontend pages
Closed
#158 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#157 Fix analyze_single_patent to download PDF before reading from disk
Closed
#156 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#155 Make LLM model configurable via MODEL environment variable
Closed
#154 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#153 Add JWT auth tests: registration, login, protected routes, token refresh, admin endpoints
Closed
#152 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#150 Fix get_db_client() in auth.py to reuse a pooled DatabaseClient
Closed
#151 Persist async job state to PostgreSQL so jobs survive API restarts
Closed
#149 Move PostgreSQL credentials out of docker-compose.yml into .env file
Closed
#147 Refuse startup with default JWT secret in non-development environments
Closed
#148 Make CORS allowed origins configurable via environment variable
Closed
#131 Refuse startup with default JWT secret in non-development environments
Closed
#132 Make CORS allowed origins configurable via environment variable
Closed
#133 Remove hardcoded database credentials from docker-compose.yml
Closed
#134 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#135 Persist async job state in PostgreSQL so results survive API restart
Closed
#136 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#137 Add JWT authentication tests: registration, login, protected routes, admin endpoints
Closed
#138 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#139 Make LLM model configurable via MODEL environment variable
Closed
#140 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#141 Fix analyze_single_patent to download PDF before reading from disk
Closed
#142 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#143 Add loading and error states to Batch and Analytics frontend pages
Closed
#144 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#145 Add pytest test job to Gitea Actions CI workflow
Closed
#146 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#129 Add pytest test job to Gitea Actions CI workflow
Closed
#130 Add ruff linting and tsc type checking to CI
Closed
#128 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#126 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#127 Add loading and error states to Batch and Analytics frontend pages
Closed
#124 Make LLM model and SERP cache TTL configurable via environment variables
Closed
#125 Fix analyze_single_patent to download PDF before reading from disk
Closed
#122 Add JWT auth flow tests: registration, login, protected routes, token refresh, and admin endpoints
Closed
#123 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#120 Persist async job state in PostgreSQL so results survive API restarts
Closed
#121 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#119 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#117 Make CORS allowed origins configurable via environment variable
Closed
#118 Remove hardcoded database credentials from docker-compose.yml
Closed
#116 Add startup check that refuses to boot with default JWT secret in production
Closed
#115 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#113 Add multi-model support: let users choose LLM provider per analysis
Closed
#114 Add patent trend charts to Analytics page (filing frequency and technology category distribution)
Closed
#111 Implement scheduled/recurring analysis with alerting on significant changes
Closed
#112 Add webhook/notification support for batch job completion and score change alerts
Closed
#110 Add side-by-side comparison view for two companies patent portfolios
Closed
#108 Document patents/ volume mount requirement and evaluate object storage (S3/MinIO) for containerized deployments
Closed
#109 Add dark mode support using Tailwind dark variant
Closed
#106 Add pytest test stage to Gitea Actions CI workflow that gates image builds
Closed
#107 Add ruff linting and tsc type checking to CI workflow
Closed
#104 Add loading states and error messages to Batch and Analytics pages
Closed
#105 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#102 Fix analyze_single_patent to download PDF before reading from disk
Closed
#103 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#101 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#99 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#100 Make LLM model configurable via MODEL environment variable
Closed
#97 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#98 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Closed
#95 Fix get_db_client() in auth.py to use a shared pooled database connection
Closed
#96 Persist job state to PostgreSQL so batch results survive API restarts
Closed
#93 Make CORS allowed origins configurable via environment variable
Closed
#94 Move database credentials out of docker-compose.yml into .env file
Closed
#92 Add startup check that refuses to run with default JWT secret in non-dev environments
Closed
#91 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#89 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Closed
#88 Add webhook/notification support for batch job completion and score changes
Closed
#87 Implement scheduled/recurring patent analysis with change alerts
Closed
#86 Add side-by-side patent portfolio comparison view
Closed
#84 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Closed
#83 Add pytest test job to Gitea Actions CI workflow
Closed
#82 Commit a frontend lockfile to ensure reproducible builds
Closed
#81 Implement dark mode using Tailwind dark variant
Closed
#80 Add loading skeletons and error states to Batch and Analytics pages
Closed
#79 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#78 Fix analyze_single_patent to download PDF before reading from disk
Closed
#77 Document patents/ volume mount requirement and evaluate object storage for containerized deployments
Closed
#76 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#75 Make LLM model configurable via MODEL environment variable
Closed
#74 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#73 Add JWT auth integration tests covering registration, login, and protected routes
Closed
#72 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#71 Persist batch job status in PostgreSQL so job state survives API restarts
Closed
#70 Refactor get_db_client() in auth.py to reuse a pooled DatabaseClient
Closed
#69 Move database credentials out of docker-compose.yml into .env file
Closed
#68 Make CORS allowed origins configurable via environment variable
Closed
#67 Add startup check to refuse default JWT secret in non-dev environments
Closed
#37 Add multi-model support: allow users to choose LLM provider per analysis
Closed
#26 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Closed
#24 Add patent trend charts to the Analytics page
Closed
#21 Add side-by-side patent portfolio comparison view
Closed
#38 Add S3/MinIO object storage support for patent PDF files
Closed
#23 Add webhook/notification support for job completion and score changes
Closed
#22 Implement scheduled/recurring analysis with change alerting
Closed
#20 Export analysis results as PDF or CSV from the dashboard
Closed
#33 Add dark mode support to the frontend using Tailwind dark variant
Closed
#25 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Closed
#16 Add loading and error states to Batch and Analytics frontend pages
Closed
#36 Fix analyze_single_patent to download PDF before reading from disk
Closed
#46 Add structured Python logging to serp_api.py (print() calls remain after PR #29)
Closed
#52 Add tsc --noEmit TypeScript type checking to CI pipeline (ruff done in PR #32, tsc outstanding)
Closed
#50 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Closed
#51 Add pytest test job to Gitea Actions CI workflow to gate image builds on passing tests
Closed
#48 Expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Closed
#49 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#45 Add JWT auth flow tests covering registration, login, protected routes, token refresh, and admin endpoints
Closed
#47 Make LLM model configurable via MODEL environment variable instead of hardcoding claude-3.5-sonnet
Closed
#43 Persist async job state in PostgreSQL so batch results survive API restarts
Closed
#44 Add rate limiting middleware to /auth/login and /auth/register endpoints
Closed
#41 Replace hardcoded DB credentials in docker-compose.yml with .env file reference
Closed
#42 Fix get_db_client() in auth.py to use a shared pooled connection instead of creating a new client per call
Closed
#40 Make CORS allowed origins configurable via environment variable
Closed
#39 Add startup check to refuse default JWT secret in non-dev environments
Closed
#19 Add ruff linting and tsc type checking to CI workflow
Closed
#18 Add pytest test stage to Gitea Actions CI workflow
Closed
#13 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Closed
#14 Fix Patent.patent_id type annotation from int to str in types.py
Closed
#11 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Closed
#12 Make LLM model configurable via MODEL environment variable
Closed
#7 Refactor get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Closed
#9 Add rate limiting to /auth/login and /auth/register endpoints
Closed
#8 Persist async batch job state in PostgreSQL so it survives API restarts
Closed
#17 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Closed
#15 Document patent PDF storage volume mount requirement and clarify analyze_single_patent prerequisite
Closed
#10 Add JWT authentication tests covering registration, login, protected routes, refresh, and admin access
Closed
#6 Move database credentials out of docker-compose.yml and into .env / Docker secrets
Closed
#5 Make CORS allowed origins configurable via environment variable
Closed
#4 Add startup check to refuse default JWT secret in non-development environments
Closed
#2 chore: add ROADMAP.md for SPARC application development
Closed
#1 Deploy to Talos
1641 Issues created by 1 user
Opened
#1 Deploy to Talos
Opened
#2 chore: add ROADMAP.md for SPARC application development
Opened
#4 Add startup check to refuse default JWT secret in non-development environments
Opened
#5 Make CORS allowed origins configurable via environment variable
Opened
#6 Move database credentials out of docker-compose.yml and into .env / Docker secrets
Opened
#7 Refactor get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#8 Persist async batch job state in PostgreSQL so it survives API restarts
Opened
#9 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#10 Add JWT authentication tests covering registration, login, protected routes, refresh, and admin access
Opened
#11 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#12 Make LLM model configurable via MODEL environment variable
Opened
#13 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#14 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#15 Document patent PDF storage volume mount requirement and clarify analyze_single_patent prerequisite
Opened
#16 Add loading and error states to Batch and Analytics frontend pages
Opened
#17 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#18 Add pytest test stage to Gitea Actions CI workflow
Opened
#19 Add ruff linting and tsc type checking to CI workflow
Opened
#20 Export analysis results as PDF or CSV from the dashboard
Opened
#21 Add side-by-side patent portfolio comparison view
Opened
#22 Implement scheduled/recurring analysis with change alerting
Opened
#23 Add webhook/notification support for job completion and score changes
Opened
#24 Add patent trend charts to the Analytics page
Opened
#25 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#26 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#33 Add dark mode support to the frontend using Tailwind dark variant
Opened
#36 Fix analyze_single_patent to download PDF before reading from disk
Opened
#37 Add multi-model support: allow users to choose LLM provider per analysis
Opened
#38 Add S3/MinIO object storage support for patent PDF files
Opened
#39 Add startup check to refuse default JWT secret in non-dev environments
Opened
#40 Make CORS allowed origins configurable via environment variable
Opened
#41 Replace hardcoded DB credentials in docker-compose.yml with .env file reference
Opened
#42 Fix get_db_client() in auth.py to use a shared pooled connection instead of creating a new client per call
Opened
#43 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#44 Add rate limiting middleware to /auth/login and /auth/register endpoints
Opened
#45 Add JWT auth flow tests covering registration, login, protected routes, token refresh, and admin endpoints
Opened
#46 Add structured Python logging to serp_api.py (print() calls remain after PR #29)
Opened
#47 Make LLM model configurable via MODEL environment variable instead of hardcoding claude-3.5-sonnet
Opened
#48 Expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Opened
#49 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#50 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Opened
#51 Add pytest test job to Gitea Actions CI workflow to gate image builds on passing tests
Opened
#52 Add tsc --noEmit TypeScript type checking to CI pipeline (ruff done in PR #32, tsc outstanding)
Opened
#67 Add startup check to refuse default JWT secret in non-dev environments
Opened
#68 Make CORS allowed origins configurable via environment variable
Opened
#69 Move database credentials out of docker-compose.yml into .env file
Opened
#70 Refactor get_db_client() in auth.py to reuse a pooled DatabaseClient
Opened
#71 Persist batch job status in PostgreSQL so job state survives API restarts
Opened
#72 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#73 Add JWT auth integration tests covering registration, login, and protected routes
Opened
#74 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#75 Make LLM model configurable via MODEL environment variable
Opened
#76 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#77 Document patents/ volume mount requirement and evaluate object storage for containerized deployments
Opened
#78 Fix analyze_single_patent to download PDF before reading from disk
Opened
#79 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#80 Add loading skeletons and error states to Batch and Analytics pages
Opened
#81 Implement dark mode using Tailwind dark variant
Opened
#82 Commit a frontend lockfile to ensure reproducible builds
Opened
#83 Add pytest test job to Gitea Actions CI workflow
Opened
#84 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#85 Add PDF export for analysis reports (CSV already implemented)
Opened
#86 Add side-by-side patent portfolio comparison view
Opened
#87 Implement scheduled/recurring patent analysis with change alerts
Opened
#88 Add webhook/notification support for batch job completion and score changes
Opened
#89 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Opened
#90 Add cursor-based pagination to /analyze/batch endpoint (/jobs already done)
Opened
#91 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#92 Add startup check that refuses to run with default JWT secret in non-dev environments
Opened
#93 Make CORS allowed origins configurable via environment variable
Opened
#94 Move database credentials out of docker-compose.yml into .env file
Opened
#95 Fix get_db_client() in auth.py to use a shared pooled database connection
Opened
#96 Persist job state to PostgreSQL so batch results survive API restarts
Opened
#97 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#98 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Opened
#99 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#100 Make LLM model configurable via MODEL environment variable
Opened
#101 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#102 Fix analyze_single_patent to download PDF before reading from disk
Opened
#103 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#104 Add loading states and error messages to Batch and Analytics pages
Opened
#105 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#106 Add pytest test stage to Gitea Actions CI workflow that gates image builds
Opened
#107 Add ruff linting and tsc type checking to CI workflow
Opened
#108 Document patents/ volume mount requirement and evaluate object storage (S3/MinIO) for containerized deployments
Opened
#109 Add dark mode support using Tailwind dark variant
Opened
#110 Add side-by-side comparison view for two companies patent portfolios
Opened
#111 Implement scheduled/recurring analysis with alerting on significant changes
Opened
#112 Add webhook/notification support for batch job completion and score change alerts
Opened
#113 Add multi-model support: let users choose LLM provider per analysis
Opened
#114 Add patent trend charts to Analytics page (filing frequency and technology category distribution)
Opened
#115 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#116 Add startup check that refuses to boot with default JWT secret in production
Opened
#117 Make CORS allowed origins configurable via environment variable
Opened
#118 Remove hardcoded database credentials from docker-compose.yml
Opened
#119 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#120 Persist async job state in PostgreSQL so results survive API restarts
Opened
#121 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#122 Add JWT auth flow tests: registration, login, protected routes, token refresh, and admin endpoints
Opened
#123 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#124 Make LLM model and SERP cache TTL configurable via environment variables
Opened
#125 Fix analyze_single_patent to download PDF before reading from disk
Opened
#126 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#127 Add loading and error states to Batch and Analytics frontend pages
Opened
#128 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#129 Add pytest test job to Gitea Actions CI workflow
Opened
#130 Add ruff linting and tsc type checking to CI
Opened
#131 Refuse startup with default JWT secret in non-development environments
Opened
#132 Make CORS allowed origins configurable via environment variable
Opened
#133 Remove hardcoded database credentials from docker-compose.yml
Opened
#134 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#135 Persist async job state in PostgreSQL so results survive API restart
Opened
#136 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#137 Add JWT authentication tests: registration, login, protected routes, admin endpoints
Opened
#138 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#139 Make LLM model configurable via MODEL environment variable
Opened
#140 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#141 Fix analyze_single_patent to download PDF before reading from disk
Opened
#142 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#143 Add loading and error states to Batch and Analytics frontend pages
Opened
#144 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#145 Add pytest test job to Gitea Actions CI workflow
Opened
#146 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#147 Refuse startup with default JWT secret in non-development environments
Opened
#148 Make CORS allowed origins configurable via environment variable
Opened
#149 Move PostgreSQL credentials out of docker-compose.yml into .env file
Opened
#150 Fix get_db_client() in auth.py to reuse a pooled DatabaseClient
Opened
#151 Persist async job state to PostgreSQL so jobs survive API restarts
Opened
#152 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#153 Add JWT auth tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#154 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#155 Make LLM model configurable via MODEL environment variable
Opened
#156 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#157 Fix analyze_single_patent to download PDF before reading from disk
Opened
#158 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#159 Add loading/error states to Batch and Analytics frontend pages
Opened
#160 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#161 Add pytest test stage to Gitea Actions CI workflow before image build
Opened
#162 Add ruff linting and tsc --noEmit type checking to CI
Opened
#163 Add side-by-side patent portfolio comparison view
Opened
#164 Add scheduled/recurring analysis with alerts on significant changes
Opened
#165 Add webhook/notification support for batch job completion and score changes
Opened
#166 Add per-analysis LLM provider selection and output comparison (multi-model support)
Opened
#167 Add patent filing frequency and technology category trend charts to Analytics page
Opened
#168 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#169 Document volume mount requirement for patents/ directory or add S3/MinIO storage backend
Opened
#170 Add dark mode support using Tailwind dark variant
Opened
#172 Refuse to start with default JWT secret in non-development environments
Opened
#173 Make CORS allowed origins configurable via environment variable
Opened
#174 Move database credentials out of docker-compose.yml into .env file
Opened
#175 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#176 Persist async job state in PostgreSQL to survive API restarts
Opened
#177 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#178 Add JWT auth flow tests (registration, login, protected routes, admin)
Opened
#179 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#180 Make LLM model configurable via MODEL environment variable
Opened
#181 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#182 Document or fix patent PDF storage for containerised deployments
Opened
#183 Fix analyze_single_patent to download PDF before reading from disk
Opened
#184 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#185 Add skeleton loaders and error states to Batch and Analytics pages
Opened
#186 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#187 Add pytest test job to CI workflow that gates the image build
Opened
#188 Add ruff linting and tsc type checking to CI
Opened
#189 Add side-by-side patent portfolio comparison view for two companies
Opened
#190 Add scheduled/recurring analysis with alerts on significant changes
Opened
#191 Add webhook/notification support for batch job completion and score changes
Opened
#192 Add per-analysis model selection to allow comparing LLM provider outputs
Opened
#193 Add patent trend charts (filing frequency and category distribution over time)
Opened
#194 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#195 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#196 Implement dark mode using Tailwind dark variant
Opened
#197 Add dark mode support using Tailwind dark variant
Opened
#198 Add side-by-side comparison view for two companies' patent portfolios
Opened
#199 Add multi-model support: let users choose LLM provider per analysis
Opened
#200 Add patent trend charts to Analytics page (filing frequency and tech category distribution)
Opened
#201 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#202 Refuse startup with default JWT secret in non-dev environments
Opened
#203 Make CORS allowed origins configurable via environment variable
Opened
#204 Move database credentials out of docker-compose.yml into .env
Opened
#205 Fix get_db_client() to use a shared connection pool instead of creating a new client per call
Opened
#206 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#207 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#208 Add JWT authentication tests covering full token lifecycle
Opened
#209 Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Opened
#210 Make LLM model configurable via MODEL environment variable
Opened
#211 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#212 Fix analyze_single_patent to download PDF before attempting to read it from disk
Opened
#213 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#214 Add loading skeletons and error states to Batch and Analytics pages
Opened
#215 Commit a frontend lockfile to ensure reproducible builds
Opened
#216 Add pytest test job to Gitea Actions CI workflow
Opened
#217 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#218 Export analysis reports as PDF or CSV from the dashboard
Opened
#219 Add side-by-side patent portfolio comparison view
Opened
#220 Implement scheduled/recurring analysis with change alerts
Opened
#221 Add webhook/notification support for batch job completion and score changes
Opened
#222 Add patent filing trend charts to Analytics page
Opened
#223 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#224 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#225 Add startup check to refuse default JWT secret in non-development environments
Opened
#226 Make CORS allowed origins configurable via environment variable
Opened
#227 Move database credentials out of docker-compose.yml into a .env file
Opened
#228 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Opened
#229 Persist async job state to PostgreSQL to survive API restarts
Opened
#230 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#231 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Opened
#232 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#233 Make LLM model configurable via MODEL environment variable
Opened
#234 Expose SERP cache TTL as a SERP_CACHE_TTL_HOURS environment variable
Opened
#235 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#236 Document or fix analyze_single_patent PDF download prerequisite
Opened
#237 Add skeleton loaders and error states to Batch and Analytics frontend pages
Opened
#238 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#239 Add pytest test job to CI workflow that gates image build
Opened
#240 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#241 Document patent PDF volume mount or migrate storage to S3/MinIO for containerized deployments
Opened
#242 Add dark mode support using Tailwind dark variant
Opened
#243 Security: refuse startup with default JWT secret in non-dev environments
Opened
#244 Security: make CORS allowed origins configurable via environment variable
Opened
#245 Security: remove hardcoded database credentials from docker-compose.yml
Opened
#246 Bug: refactor get_db_client() in auth.py to use a shared connection pool
Opened
#247 Bug: persist job state to PostgreSQL so batch results survive API restarts
Opened
#248 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#249 Tests: add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Opened
#250 Backend: replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#251 Backend: make LLM model configurable via MODEL environment variable
Opened
#252 Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#253 Docs: document patent PDF storage volume mount requirement (or add S3/MinIO support)
Opened
#254 Bug: analyze_single_patent does not download PDF before reading it from disk
Opened
#255 Bug: fix Patent.patent_id type annotation — should be str not int
Opened
#256 Frontend: add loading skeletons and error states to Batch and Analytics pages
Opened
#257 Frontend: add dark mode support using Tailwind dark variant
Opened
#258 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#259 CI: add pytest test job to Gitea Actions workflow that gates the build
Opened
#260 CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI workflow
Opened
#261 Feature: export analysis reports as PDF or CSV from the dashboard
Opened
#262 Feature: side-by-side patent portfolio comparison view for two companies
Opened
#263 Feature: scheduled/recurring analysis with alerts on significant changes
Opened
#264 Feature: webhook/notification support for batch job completion and score changes
Opened
#265 Feature: multi-model support — let users choose LLM provider per analysis
Opened
#266 Feature: patent trend charts — filing frequency and technology category distribution over time
Opened
#267 Feature: add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#268 DX: auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#271 Security: refuse to start with default JWT secret in non-development environments
Opened
#272 Security: make CORS allowed-origins configurable via environment variable
Opened
#273 Security: move database credentials out of docker-compose.yml into .env or Docker secrets
Opened
#274 Bug: get_db_client() in auth.py creates a new DatabaseClient on every call, exhausting the connection pool
Opened
#275 Bug: persist async job state to PostgreSQL so batch results survive API restarts
Opened
#276 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#277 Tests: add JWT authentication flow tests covering registration, login, protected routes, and admin endpoints
Opened
#278 Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#279 Backend: make LLM model configurable via MODEL environment variable instead of hardcoding claude-3.5-sonnet
Opened
#280 Backend: expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Opened
#281 Bug: fix Patent.patent_id type annotation in types.py -- should be str, not int
Opened
#282 Bug: analyze_single_patent assumes PDF already exists locally -- integrate download step or document prerequisite
Opened
#283 Frontend: commit a package lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Opened
#284 CI: add pytest test job to Gitea Actions workflow that gates the image build
Opened
#285 Add startup check to reject default JWT secret in non-dev environments
Opened
#286 Make CORS allowed origins configurable via environment variable
Opened
#287 Remove plaintext DB credentials from docker-compose.yml
Opened
#288 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#289 Persist job state to PostgreSQL so batch results survive API restarts
Opened
#290 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#291 Add JWT authentication tests (registration, login, protected routes, admin)
Opened
#292 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#293 Make LLM model configurable via MODEL environment variable
Opened
#294 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#295 Fix analyze_single_patent to download PDF before reading from disk
Opened
#296 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#297 Add skeleton loaders and error states to Batch and Analytics pages
Opened
#298 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#299 Add pytest test job to Gitea Actions CI workflow
Opened
#300 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#301 Export analysis reports as PDF or CSV from the dashboard
Opened
#302 Add side-by-side patent portfolio comparison view
Opened
#303 Add API pagination to /analyze/batch and /jobs endpoints
Opened
#304 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#305 Add startup check to reject default JWT secret in non-dev environments
Opened
#306 Make CORS allowed origins configurable via environment variable
Opened
#307 Remove hardcoded database credentials from docker-compose.yml
Opened
#308 Fix get_db_client() in auth.py to use a shared connection pool
Opened
#309 Persist async job state to PostgreSQL so results survive API restarts
Opened
#310 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#311 Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Opened
#312 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#313 Make LLM model configurable via MODEL environment variable
Opened
#314 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#315 Fix analyze_single_patent to download PDF before attempting local read
Opened
#316 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#317 Add loading and error states to Batch and Analytics frontend pages
Opened
#318 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#319 Add pytest test job to Gitea Actions CI workflow to gate image builds
Opened
#320 Add ruff linting and tsc type checking to CI
Opened
#321 Export analysis reports as PDF or CSV from the dashboard
Opened
#322 Add side-by-side patent portfolio comparison view
Opened
#323 Add patent filing trend charts to the Analytics page
Opened
#324 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#325 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#326 Fix get_db_client() in auth.py to use singleton pattern properly
Opened
#327 Persist job state in PostgreSQL to survive API restarts
Opened
#328 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#329 Make LLM model configurable via MODEL environment variable
Opened
#330 Add loading skeletons and error states to Analytics page
Opened
#331 Implement dark mode across all frontend pages
Opened
#332 Export analysis reports as PDF or CSV from the dashboard
Opened
#333 Add patent trend charts to Analytics page
Opened
#334 Add side-by-side company patent portfolio comparison view
Opened
#335 Refuse startup with default JWT secret in non-development environments
Opened
#336 Make CORS allowed origins configurable via environment variable
Opened
#337 Remove hardcoded database credentials from docker-compose.yml
Opened
#338 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#339 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#340 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#341 Document patent PDF volume mount and integrate download step in analyze_single_patent
Opened
#342 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#343 Add loading skeletons and error states to Batch processing page
Opened
#344 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#345 Add pytest test job to Gitea Actions CI workflow
Opened
#346 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#347 Implement scheduled/recurring patent analysis with change alerts
Opened
#348 Add webhook/notification support for batch job completion and score changes
Opened
#349 Add cursor-based pagination to /analyze/batch and /jobs API endpoints
Opened
#350 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#351 Multi-model LLM support: let users choose provider per analysis and compare outputs
Opened
#354 Security: refuse to start with default JWT secret in non-dev environments
Opened
#355 Security: make CORS allowed origins configurable via environment variable
Opened
#356 Security: remove plaintext database credentials from docker-compose.yml
Opened
#357 Fix: share a single pooled DatabaseClient instead of creating one per get_db_client() call
Opened
#358 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#359 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#360 Add auth/JWT integration tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#361 Add loading skeletons and error states to Analytics page
Opened
#362 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#363 Make LLM model configurable via MODEL environment variable
Opened
#364 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#365 Fix: analyze_single_patent must download the PDF before attempting to read it from disk
Opened
#366 Fix: correct Patent.patent_id type annotation from int to str in types.py
Opened
#367 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) to ensure reproducible builds
Opened
#368 CI: add pytest test stage to Gitea Actions workflow that gates the image build
Opened
#369 CI: add ruff (Python) and tsc --noEmit (TypeScript) linting to Gitea Actions
Opened
#370 Document patent PDF volume mount requirement and consider object storage path
Opened
#371 Export analysis reports as PDF or CSV from the dashboard
Opened
#372 Add side-by-side comparison view for two companies patent portfolios
Opened
#373 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Opened
#374 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#375 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#376 Add scheduled/recurring analysis with alerts on significant score changes
Opened
#377 Security: refuse to start with default JWT secret in non-development environments
Opened
#378 Security: make CORS allowed origins configurable via environment variable
Opened
#379 Security: remove plaintext database credentials from docker-compose.yml
Opened
#380 Persist job state in PostgreSQL so batch results survive API restarts
Opened
#381 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Opened
#382 Add JWT auth integration tests: registration, login, protected routes, token refresh, admin-only endpoints
Opened
#383 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#384 Make LLM model configurable via MODEL environment variable
Opened
#385 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#386 Fix: analyze_single_patent must download PDF before attempting to read it from disk
Opened
#387 Fix type annotation: Patent.patent_id should be str, not int
Opened
#388 Add loading and error states to Batch and Analytics pages
Opened
#389 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#390 Add pytest test stage to Gitea Actions build.yaml to gate image builds on passing tests
Opened
#391 Add ruff linting and tsc type checking to CI
Opened
#392 Export analysis reports as PDF or CSV from the dashboard
Opened
#393 Add side-by-side comparison view for two companies patent portfolios
Opened
#394 Implement scheduled/recurring analysis for tracked companies
Opened
#395 Add webhook/notification support for batch job completion and innovation score changes
Opened
#396 Add patent trend charts to Analytics page (filing frequency and technology category over time)
Opened
#397 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#398 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#399 Add dark mode support using Tailwind dark variant
Opened
#400 Multi-model support: let users choose LLM provider per analysis and compare outputs
Opened
#401 Add startup check to refuse default JWT secret in non-dev environments
Opened
#402 Make CORS allowed origins configurable via environment variable
Opened
#403 Remove hardcoded database credentials from docker-compose.yml
Opened
#404 Fix get_db_client() to use a shared pooled DatabaseClient instead of per-call instantiation
Opened
#405 Persist async job state to PostgreSQL so batch results survive API restarts
Opened
#406 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#407 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#408 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#409 Make LLM model configurable via MODEL environment variable
Opened
#410 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#411 Document patent PDF storage volume mount and evaluate object storage options
Opened
#412 Fix analyze_single_patent to download PDF before reading from disk
Opened
#413 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#414 Add loading/error states (skeleton loaders and error messages) to Batch and Analytics pages
Opened
#415 Add dark mode support using Tailwind dark: variant
Opened
#416 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#417 Add pytest test job to Gitea Actions CI workflow to gate image builds
Opened
#418 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#419 Export analysis reports as PDF or CSV from the dashboard
Opened
#420 Add side-by-side patent portfolio comparison view
Opened
#421 Implement scheduled/recurring analysis with change alerting
Opened
#422 Add webhook/notification support for batch job completion and score changes
Opened
#423 Add multi-model LLM support: let users choose provider per analysis
Opened
#424 Add patent trend charts to Analytics page (filing frequency and technology categories over time)
Opened
#425 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#426 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#427 Refuse startup with default JWT secret in non-development environments
Opened
#428 Make CORS allowed origins configurable via environment variable
Opened
#429 Remove hardcoded database credentials from docker-compose.yml
Opened
#430 Fix get_db_client() in auth.py to use a shared pooled database connection
Opened
#431 Persist async batch job state to PostgreSQL to survive API restarts
Opened
#432 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#433 Add JWT authentication tests covering full auth flow
Opened
#434 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#435 Make LLM model configurable via MODEL environment variable
Opened
#436 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#437 Fix analyze_single_patent to download PDF before reading from disk
Opened
#438 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#439 Add loading states and error messages to Batch and Analytics pages
Opened
#440 Commit a frontend lockfile to ensure reproducible builds
Opened
#441 Add pytest test job to Gitea Actions CI workflow
Opened
#442 Add ruff linting and tsc type checking to CI
Opened
#444 Add startup check to refuse default JWT secret in non-development environments
Opened
#445 Make CORS allowed origins configurable via environment variable
Opened
#446 Remove hardcoded database credentials from docker-compose.yml
Opened
#447 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#448 Persist job state in PostgreSQL so batch results survive API restarts
Opened
#449 Add rate limiting middleware to auth endpoints
Opened
#450 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#451 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#452 Make LLM model configurable via MODEL environment variable
Opened
#453 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#454 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#455 Document patent PDF volume mount requirement and fix analyze_single_patent download step
Opened
#456 Add loading skeletons and error states to Batch and Analytics pages
Opened
#457 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#458 Add pytest test stage to CI workflow that gates the Docker image build
Opened
#459 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#460 Allow users to export analysis reports as PDF or CSV from the dashboard
Opened
#461 Add side-by-side patent portfolio comparison view for two companies
Opened
#462 Implement scheduled/recurring analysis with change alerts
Opened
#463 Add webhook/notification support for batch job completion and score changes
Opened
#464 Add patent filing trend charts to the Analytics page
Opened
#465 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#466 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#467 Security: Add startup check to reject default JWT secret in non-dev environments
Opened
#468 Security: Make CORS allowed origins configurable via environment variable
Opened
#469 Security: Remove hardcoded database credentials from docker-compose.yml
Opened
#470 Fix: Share a single pooled DatabaseClient instead of creating one per auth call
Opened
#471 Fix: Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#472 Security: Add rate limiting middleware to /auth/login and /auth/register
Opened
#473 Test: Add JWT authentication flow tests to test_api.py
Opened
#474 Backend: Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Opened
#475 Backend: Make LLM model configurable via MODEL environment variable
Opened
#476 Backend: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#477 Backend: Fix analyze_single_patent to download PDF before reading from disk
Opened
#478 Backend: Fix Patent.patent_id type annotation from int to str in types.py
Opened
#479 Frontend: Add loading skeletons and error states to Batch and Analytics pages
Opened
#480 Frontend: Commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#481 CI: Add pytest test stage to Gitea Actions build workflow
Opened
#482 CI: Add ruff linting and tsc --noEmit type checking to CI pipeline
Opened
#483 Feature: Export analysis reports as PDF or CSV from the dashboard
Opened
#484 Feature: Side-by-side patent portfolio comparison view
Opened
#485 Feature: Scheduled/recurring analysis with change alerts
Opened
#486 Feature: Webhook/notification support for batch job completion and score changes
Opened
#487 Feature: Patent trend charts in Analytics page (filing frequency and category distribution)
Opened
#488 Feature: Cursor-based pagination for /analyze/batch and /jobs endpoints
Opened
#489 Feature: Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#490 Add startup check to reject default JWT secret in non-dev environments
Opened
#491 Make CORS allowed origins configurable via environment variable
Opened
#492 Replace hardcoded database credentials in docker-compose.yml with .env file
Opened
#493 Refactor auth.py to use a shared pooled DatabaseClient instead of creating one per call
Opened
#494 Persist batch job state in PostgreSQL so job results survive API restarts
Opened
#495 Add rate limiting middleware to /auth/login and /auth/register endpoints
Opened
#496 Add JWT authentication tests covering the full auth flow
Opened
#497 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#498 Make LLM model configurable via MODEL environment variable
Opened
#499 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#500 Fix analyze_single_patent to download PDF before reading from disk
Opened
#501 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#502 Document patent PDF volume mount requirement and evaluate object storage options
Opened
#503 Add loading states and error messages to Batch and Analytics pages
Opened
#504 Commit a frontend lockfile to ensure reproducible builds
Opened
#505 Add pytest test stage to Gitea Actions CI workflow
Opened
#506 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#507 Add export functionality: download analysis results as PDF or CSV
Opened
#508 Add side-by-side patent portfolio comparison view
Opened
#509 Implement scheduled/recurring patent analysis with change alerts
Opened
#510 Add webhook/notification support for batch job completion and score changes
Opened
#511 Add patent filing trend charts to the Analytics page
Opened
#512 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#513 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#514 Add dark mode support to the frontend using Tailwind dark variant
Opened
#515 Add per-analysis LLM provider selection (multi-model support)
Opened
#516 Security: refuse to start with default JWT secret in non-dev environments
Opened
#517 Security: make CORS allowed origins configurable via environment variable
Opened
#518 Security: remove hardcoded database credentials from docker-compose.yml
Opened
#519 Fix: share a single pooled DatabaseClient instead of creating one per request in auth.py
Opened
#520 Persist async job state to PostgreSQL so batch results survive API restarts
Opened
#521 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#522 Tests: add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Opened
#523 Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#524 Backend: make LLM model configurable via MODEL environment variable
Opened
#525 Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#526 Backend: document volume mount requirement for patents/ PDF storage directory
Opened
#527 Bug: analyze_single_patent does not download PDF before reading it from disk
Opened
#528 Bug: fix Patent.patent_id type annotation — change from int to str in types.py
Opened
#529 Frontend: add loading skeletons and error states to Batch and Analytics pages
Opened
#530 Frontend: add dark mode support using Tailwind dark variant
Opened
#531 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#532 CI: add pytest test stage to Gitea Actions workflow that gates image builds
Opened
#533 CI: add ruff (Python) and tsc --noEmit (TypeScript) linting to Gitea Actions workflow
Opened
#534 Feature: export analysis reports as PDF or CSV from the dashboard
Opened
#535 Feature: side-by-side comparison view for two companies patent portfolios
Opened
#536 Feature: scheduled/recurring patent analysis with alerts on significant changes
Opened
#537 Feature: webhook/notification support for batch job completion and score change alerts
Opened
#538 Feature: patent trend charts showing filing frequency and category distribution over time
Opened
#539 Feature: cursor-based pagination for /analyze/batch and /jobs endpoints
Opened
#540 Feature: auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#541 Feature: multi-model support allowing users to choose LLM provider per analysis
Opened
#542 Add startup check refusing default JWT secret in non-dev environments
Opened
#543 Make CORS allowed origins configurable via environment variable
Opened
#544 Move database credentials out of docker-compose.yml into .env file
Opened
#545 Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Opened
#546 Persist async job state in PostgreSQL to survive API restarts
Opened
#547 Add rate limiting middleware to /auth/login and /auth/register endpoints
Opened
#548 Add JWT authentication integration tests covering login, protected routes, and admin endpoints
Opened
#549 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#550 Make LLM model configurable via MODEL environment variable
Opened
#551 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#552 Fix analyze_single_patent to download PDF before reading from disk
Opened
#553 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#554 Add loading states and error messages to Batch and Analytics frontend pages
Opened
#555 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#556 Add pytest test job to Gitea Actions CI workflow that gates image builds
Opened
#557 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#558 Add export functionality for analysis reports (PDF and CSV download)
Opened
#559 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#560 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#561 Document patent PDF volume mount requirement and evaluate S3/MinIO for containerized storage
Opened
#562 Add dark mode support to frontend using Tailwind dark variant
Opened
#563 Add side-by-side patent portfolio comparison view for two companies
Opened
#564 Add scheduled/recurring analysis with change alerts for tracked companies
Opened
#565 Add webhook/notification support for batch job completion and score change events
Opened
#566 Add per-analysis LLM provider selection (GPT-4o, Gemini, Claude) with output comparison
Opened
#567 Add patent trend charts to Analytics page (filing frequency and technology category over time)
Opened
#568 Add startup check to reject default JWT secret in non-dev environments
Opened
#569 Make CORS allowed origins configurable via environment variable
Opened
#570 Remove hardcoded postgres credentials from docker-compose.yml
Opened
#571 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#572 Persist async job state in PostgreSQL to survive API restarts
Opened
#573 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#574 Add JWT authentication tests: registration, login, protected routes, and admin endpoints
Opened
#575 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#576 Make LLM model configurable via MODEL environment variable
Opened
#577 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#578 Document patent PDF volume mount and add object storage option for containerized deployments
Opened
#579 Fix analyze_single_patent to download PDF before attempting to read from disk
Opened
#580 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#581 Add loading skeletons and error states to Batch and Analytics pages
Opened
#582 Add dark mode support using Tailwind dark: variants
Opened
#583 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#584 Add pytest test job to Gitea Actions CI workflow
Opened
#585 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#586 Add PDF and CSV export for analysis reports from the dashboard
Opened
#587 Add side-by-side comparison view for two companies patent portfolios
Opened
#588 Add scheduled/recurring analysis with alerting on significant score changes
Opened
#589 Add webhook/notification support for batch job completion and score change alerts
Opened
#590 Add per-analysis LLM provider selection and multi-model output comparison
Opened
#591 Add patent filing frequency and technology category trend charts to Analytics page
Opened
#592 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#593 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#594 Refuse to start with default JWT secret in non-dev environments
Opened
#595 Make CORS allowed origins configurable via environment variable
Opened
#596 Remove plain-text DB credentials from docker-compose.yml
Opened
#597 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#598 Persist async job state to PostgreSQL so jobs survive API restarts
Opened
#599 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#600 Add JWT auth flow tests (registration, login, protected routes, token refresh, admin)
Opened
#601 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#602 Make LLM model configurable via MODEL environment variable
Opened
#603 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#604 Fix analyze_single_patent to download PDF before reading from disk
Opened
#605 Fix Patent.patent_id type annotation: change int to str in types.py
Opened
#606 Add loading states and error messages to Batch and Analytics pages
Opened
#607 Commit frontend lockfile for reproducible builds
Opened
#608 Add pytest test job to Gitea Actions CI workflow
Opened
#609 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#610 Add dark mode support to frontend using Tailwind dark: variants
Opened
#611 Refuse startup with default JWT secret in non-dev environments
Opened
#612 Make CORS allowed origins configurable via environment variable
Opened
#613 Remove hardcoded database credentials from docker-compose.yml
Opened
#614 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#615 Persist async job state in PostgreSQL to survive API restarts
Opened
#616 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#617 Add JWT authentication tests (registration, login, protected routes, token refresh, admin)
Opened
#618 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#619 Make LLM model configurable via MODEL environment variable
Opened
#620 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#621 Document patent PDF storage volume mount and consider object storage path
Opened
#622 Fix analyze_single_patent to download PDF before reading from disk
Opened
#623 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#624 Add loading/error states to Batch and Analytics frontend pages
Opened
#625 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#626 Add dark mode support using Tailwind dark variant
Opened
#627 Add pytest test job to Gitea Actions CI workflow
Opened
#628 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#629 Export analysis reports as PDF or CSV from the dashboard
Opened
#630 Add side-by-side patent portfolio comparison view
Opened
#631 Scheduled/recurring analysis with alerts on significant changes
Opened
#632 Add webhook/notification support for completed jobs and score changes
Opened
#633 Add patent trend charts to the Analytics page
Opened
#634 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#635 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#636 Multi-model LLM support: let users select provider per analysis
Opened
#637 Add startup check to reject default JWT secret in production
Opened
#638 Make CORS allowed origins configurable via environment variable
Opened
#639 Remove hardcoded database credentials from docker-compose.yml
Opened
#640 Refactor get_db_client() to use a shared pooled connection
Opened
#641 Persist async job state in PostgreSQL instead of in-memory dict
Opened
#642 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#643 Add JWT auth integration tests (registration, login, protected routes, admin)
Opened
#644 Replace print() calls with structured logging in analyzer, serp_api, and llm modules
Opened
#645 Make LLM model configurable via MODEL environment variable
Opened
#646 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#647 Document patent PDF volume mount requirement and path assumptions
Opened
#648 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#649 Add loading states and error messages to Batch and Analytics pages
Opened
#650 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Opened
#651 Add pytest test stage to Gitea Actions CI workflow
Opened
#652 Add ruff and tsc --noEmit linting/type checking to CI
Opened
#653 Export analysis reports as PDF or CSV from the dashboard
Opened
#654 Add side-by-side patent portfolio comparison view
Opened
#655 Implement scheduled/recurring patent analysis with change alerts
Opened
#656 Add webhook/notification support for batch job completion and score changes
Opened
#657 Add patent filing trend charts to the Analytics page
Opened
#658 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#659 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#660 Add startup check to reject default JWT secret in non-dev environments
Opened
#661 Make CORS allowed origins configurable via environment variable
Opened
#662 Remove plaintext database credentials from docker-compose.yml
Opened
#663 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#664 Persist async job state to PostgreSQL so batch results survive API restarts
Opened
#665 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#666 Add JWT auth integration tests (registration, login, protected routes, admin endpoints)
Opened
#667 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#668 Make LLM model configurable via MODEL environment variable
Opened
#669 Expose SERP cache TTL as a SERP_CACHE_TTL_HOURS environment variable
Opened
#670 Fix analyze_single_patent to download PDF before attempting to read it
Opened
#671 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#672 Add loading states and error messages to Batch and Analytics pages
Opened
#673 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#674 Add pytest test job to Gitea Actions CI workflow
Opened
#675 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#676 Export analysis reports as PDF or CSV from the dashboard
Opened
#677 Add side-by-side patent portfolio comparison view
Opened
#678 Implement scheduled/recurring analysis for tracked companies
Opened
#679 Add webhook/notification support for batch job completion and score changes
Opened
#680 Add patent filing trend charts to the Analytics page
Opened
#681 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#682 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#683 Refuse startup with default JWT secret in non-development environments
Opened
#684 Make CORS allowed origins configurable via environment variable
Opened
#685 Remove hardcoded database credentials from docker-compose.yml
Opened
#686 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#687 Persist async job state in PostgreSQL to survive API restarts
Opened
#688 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#689 Add JWT auth flow tests: registration, login, protected routes, token refresh, and admin endpoints
Opened
#690 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#691 Make LLM model configurable via MODEL environment variable
Opened
#692 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#693 Document patent PDF volume mount requirement and evaluate object storage path
Opened
#694 Fix analyze_single_patent to download PDF before reading from disk
Opened
#695 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#696 Add loading and error states to Batch and Analytics pages
Opened
#697 Add dark mode support using Tailwind dark variant
Opened
#698 Add and commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Opened
#699 Add pytest test job to CI workflow that gates the image build
Opened
#700 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#701 Export analysis reports as PDF or CSV from the dashboard
Opened
#702 Add side-by-side patent portfolio comparison view
Opened
#703 Add scheduled/recurring analysis with change alerting
Opened
#704 Add webhook/notification support for batch job completion and score changes
Opened
#705 Add patent trend charts to the Analytics page
Opened
#706 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#707 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#708 Add multi-model support: let users choose LLM provider per analysis
Opened
#709 Security: Refuse to start with default JWT secret in non-dev environments
Opened
#710 Security: Make CORS allowed origins configurable via environment variable
Opened
#711 Security: Remove hardcoded database credentials from docker-compose.yml
Opened
#712 Bug: Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#713 Bug: Persist async job state in PostgreSQL so results survive API restarts
Opened
#714 Security: Add rate limiting to /auth/login and /auth/register endpoints
Opened
#715 Test: Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Opened
#716 Refactor: Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#717 Feature: Make LLM model selection configurable via MODEL environment variable
Opened
#718 Feature: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#719 Docs: Document patent PDF volume mount requirement and consider object storage path
Opened
#720 Bug: analyze_single_patent does not download PDF before reading from disk
Opened
#721 Bug: Fix Patent.patent_id type annotation from int to str in types.py
Opened
#722 Feature: Add loading states and error messages to Batch and Analytics pages
Opened
#723 Feature: Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#724 CI: Add pytest test job to Gitea Actions build workflow
Opened
#725 CI: Add ruff linting and tsc --noEmit type checking to CI pipeline
Opened
#726 Feature: Export analysis reports as PDF or CSV from the dashboard
Opened
#727 Feature: Side-by-side comparison view for two companies patent portfolios
Opened
#728 Feature: Scheduled/recurring analysis with alerting on significant changes
Opened
#729 Feature: Webhook/notification support for batch job completion and score changes
Opened
#730 Feature: Add patent trend charts to Analytics page (filing frequency and category distribution)
Opened
#731 Feature: Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#732 Feature: Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#733 Refuse to start with default JWT secret in non-development environments
Opened
#734 Refuse to start with default JWT secret in non-development environments
Opened
#735 Make CORS allowed origins configurable via environment variable
Opened
#736 Remove plaintext database credentials from docker-compose.yml
Opened
#737 Fix get_db_client() in auth.py to reuse a shared pooled database connection
Opened
#738 Persist async batch job state in PostgreSQL instead of in-memory dict
Opened
#739 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#740 Add test coverage for JWT auth flow: registration, login, protected routes, and admin endpoints
Opened
#741 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#742 Make LLM model selection configurable via MODEL environment variable
Opened
#743 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#744 Fix Patent.patent_id type annotation in types.py from int to str
Opened
#745 Fix analyze_single_patent to download PDF before reading from disk, or document the prerequisite
Opened
#746 Add loading skeletons and error states to Batch and Analytics pages
Opened
#747 Commit a frontend package lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#748 Add pytest test stage to Gitea Actions workflow to gate image builds
Opened
#749 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI pipeline
Opened
#750 Allow users to download analysis results as PDF or CSV from the dashboard
Opened
#751 Add patent filing frequency and technology category trend charts to the Analytics page
Opened
#752 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#753 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#754 Implement dark mode using Tailwind dark variant
Opened
#755 Add startup check to refuse default JWT secret in non-development environments
Opened
#756 Make CORS allowed origins configurable via environment variable
Opened
#757 Replace hardcoded database credentials in docker-compose.yml with .env file reference
Opened
#758 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Opened
#759 Persist async batch job state in PostgreSQL so job results survive API restarts
Opened
#760 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Opened
#761 Add JWT authentication integration tests covering full auth flow
Opened
#762 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#763 Make LLM model configurable via MODEL environment variable
Opened
#764 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#765 Fix analyze_single_patent to download PDF before attempting local file read
Opened
#766 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#767 Add loading skeletons and error states to Batch and Analytics pages
Opened
#768 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#769 Add pytest test job to Gitea Actions CI workflow that gates the image build
Opened
#770 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#771 Add export functionality to download analysis results as PDF or CSV
Opened
#772 Add side-by-side patent portfolio comparison view for two companies
Opened
#773 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Opened
#774 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#775 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#776 Support object storage (S3/MinIO) for patent PDFs in containerized deployments
Opened
#777 Add scheduled/recurring analysis with alerts on significant changes
Opened
#778 Add webhook/notification support for batch job completion and score change alerts
Opened
#779 Add multi-model support to let users choose LLM provider per analysis
Opened
#780 Refuse to start with default JWT secret in non-development environments
Opened
#781 Make CORS allowed origins configurable via environment variable
Opened
#782 Move database credentials out of docker-compose.yml into .env / Docker secrets
Opened
#783 Refactor get_db_client() in auth.py to use a shared pooled database connection
Opened
#784 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#785 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Opened
#786 Add JWT authentication tests: registration, login, protected routes, and admin endpoints
Opened
#787 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#788 Make LLM model configurable via MODEL environment variable
Opened
#789 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#790 Fix Patent.patent_id type annotation: change int to str in types.py
Opened
#791 Fix analyze_single_patent to download PDF before attempting local file read
Opened
#792 Add loading skeletons and error states to Batch and Analytics pages
Opened
#793 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#794 Add pytest test job to Gitea Actions build.yaml that gates image builds
Opened
#795 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#796 Add export feature: download analysis results as PDF or CSV from the dashboard
Opened
#797 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#798 Refuse to start with default JWT secret in non-development environments
Opened
#799 Make CORS allowed origins configurable via environment variable
Opened
#800 Remove hardcoded database credentials from docker-compose.yml
Opened
#801 Fix DatabaseClient connection pooling in auth.py
Opened
#802 Persist async batch job state to PostgreSQL
Opened
#803 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#804 Add tests for JWT authentication flow and admin-only endpoints
Opened
#805 Replace print() calls with structured Python logging
Opened
#806 Make LLM model selection configurable via MODEL environment variable
Opened
#807 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#808 Document patent PDF storage volume requirement and add S3/MinIO option
Opened
#809 Fix analyze_single_patent to download PDF before attempting to read it
Opened
#810 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#811 Add skeleton loaders and error states to Batch and Analytics pages
Opened
#812 Add dark mode support using Tailwind dark variant
Opened
#813 Commit a frontend package lockfile for reproducible builds
Opened
#814 Add pytest test job to Gitea Actions CI workflow
Opened
#815 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#816 Add export functionality for analysis reports (PDF and CSV)
Opened
#817 Add side-by-side company patent portfolio comparison view
Opened
#818 Add scheduled recurring analysis for tracked companies
Opened
#819 Add webhook and notification support for batch job completion
Opened
#820 Add per-analysis multi-model selection (GPT-4o, Gemini, Claude)
Opened
#821 Add patent trend charts to the Analytics page
Opened
#822 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#823 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#824 Make CORS allowed origins configurable via environment variable
Opened
#825 Move database credentials out of docker-compose.yml into .env file
Opened
#826 Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Opened
#827 Persist async job state in PostgreSQL so jobs survive API restarts
Opened
#828 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Opened
#829 Add JWT authentication flow tests (registration, login, protected routes, token refresh, admin)
Opened
#830 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#831 Make LLM model configurable via MODEL environment variable
Opened
#832 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#833 Fix analyze_single_patent to download PDF before reading it from disk
Opened
#834 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#835 Add loading states and error messages to Batch and Analytics pages
Opened
#836 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#837 Add pytest test job to Gitea Actions build.yaml that gates the image build
Opened
#838 Add ruff linting and tsc type-checking to CI workflow
Opened
#839 Add Tailwind dark mode variant across frontend pages
Opened
#840 Document or implement object storage for patent PDF files
Opened
#841 Export analysis reports as PDF or CSV from the dashboard
Opened
#842 Add side-by-side comparison view for two companies patent portfolios
Opened
#843 Add scheduled recurring analysis with change alerting
Opened
#844 Add webhook and notification support for job completion and score changes
Opened
#845 Add multi-model LLM support so users can choose provider per analysis
Opened
#846 Add patent trend charts (filing frequency and tech category distribution over time)
Opened
#847 Add cursor-based pagination to batch and jobs list endpoints
Opened
#848 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#849 Refuse to start with default JWT secret in non-development environments
Opened
#850 Make CORS allowed origins configurable via environment variable
Opened
#851 Remove hardcoded database credentials from docker-compose.yml
Opened
#852 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Opened
#853 Persist async job state in PostgreSQL so results survive API restarts
Opened
#854 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#855 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#856 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#857 Make LLM model configurable via MODEL environment variable
Opened
#858 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#859 Document patent PDF volume mount requirement for containerized deployments
Opened
#860 Fix analyze_single_patent to download PDF before reading from disk
Opened
#861 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#862 Add skeleton loaders and error states to Batch and Analytics frontend pages
Opened
#863 Add frontend lockfile (package-lock.json or pnpm-lock.yaml) to repository
Opened
#864 Add pytest test job to Gitea Actions CI workflow
Opened
#865 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#866 Add dark mode support to the React frontend using Tailwind dark variant
Opened
#867 Export analysis reports as PDF or CSV from the dashboard
Opened
#868 Add side-by-side patent portfolio comparison view
Opened
#869 Add scheduled/recurring analysis with change alerting
Opened
#870 Add webhook/notification support for batch job completion and score changes
Opened
#871 Add patent trend charts to the Analytics page
Opened
#872 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#873 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#874 Add multi-model support: let users choose LLM provider per analysis
Opened
#875 Security: refuse to start with default JWT secret in non-dev environments
Opened
#876 Security: make CORS allowed origins configurable via environment variable
Opened
#877 Security: remove plaintext database credentials from docker-compose.yml
Opened
#878 Fix: share a single pooled DatabaseClient instead of creating one per auth call
Opened
#879 Fix: persist job state in PostgreSQL so batch results survive API restarts
Opened
#880 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#881 Test: add JWT authentication flow tests (registration, login, protected routes, token refresh, admin endpoints)
Opened
#882 Refactor: replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#883 Config: make LLM model configurable via MODEL environment variable
Opened
#884 Config: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#885 Fix: integrate PDF download step into analyze_single_patent or document the prerequisite
Opened
#886 Fix: correct Patent.patent_id type annotation from int to str in types.py
Opened
#887 Frontend: add loading skeletons and error states to Batch and Analytics pages
Opened
#888 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#889 CI: add pytest test job to Gitea Actions build.yaml that gates the image build
Opened
#890 CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI pipeline
Opened
#891 Feature: export analysis reports as PDF or CSV from the dashboard
Opened
#892 Feature: side-by-side comparison view for two companies patent portfolios
Opened
#893 Feature: scheduled/recurring patent analysis with change alerts
Opened
#894 Feature: webhook and notification support for completed batch jobs and score changes
Opened
#895 Feature: patent trend charts on Analytics page (filing frequency, technology category distribution)
Opened
#896 Feature: cursor-based pagination for /analyze/batch and /jobs endpoints
Opened
#897 Feature: auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#898 Refuse startup with default JWT secret in non-development environments
Opened
#899 Make CORS allowed origins configurable via environment variable
Opened
#900 Remove hardcoded database credentials from docker-compose.yml
Opened
#901 Fix get_db_client() in auth.py to reuse a shared connection pool
Opened
#902 Persist async job state in PostgreSQL so job status survives API restarts
Opened
#903 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#904 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#905 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#906 Make LLM model name configurable via MODEL environment variable
Opened
#907 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#908 Fix analyze_single_patent to download PDF before attempting to read from disk
Opened
#909 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#910 Add loading states and user-friendly error messages to Batch and Analytics pages
Opened
#911 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#912 Add pytest test job to Gitea Actions CI workflow to gate image builds
Opened
#913 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#914 Export analysis reports as PDF or CSV from the dashboard
Opened
#915 Add side-by-side patent portfolio comparison view for two companies
Opened
#916 Add scheduled/recurring analysis with alerting on significant changes
Opened
#917 Add webhook/notification support for batch job completion and score change alerts
Opened
#918 Add patent filing frequency and technology category trend charts to Analytics page
Opened
#919 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#920 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#921 Add Tailwind dark mode support to the frontend
Opened
#922 Document or migrate patent PDF storage to a volume mount or object storage
Opened
#923 Add per-analysis LLM provider selection and output comparison (multi-model support)
Opened
#924 Add startup check to reject default JWT secret in non-dev environments
Opened
#925 Make CORS allowed origins configurable via environment variable
Opened
#926 Replace hardcoded DB credentials in docker-compose.yml with .env file reference
Opened
#927 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#928 Persist job state in PostgreSQL so batch results survive API restarts
Opened
#929 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#930 Add JWT auth flow tests covering registration, login, protected routes, and admin endpoints
Opened
#931 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#932 Make LLM model selection configurable via MODEL environment variable
Opened
#933 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#934 Fix analyze_single_patent to download PDF before attempting local file read
Opened
#935 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#936 Add loading states and error messages to Batch and Analytics pages
Opened
#937 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#938 Add pytest test stage to Gitea Actions CI workflow
Opened
#939 Add ruff linting and tsc type-checking to CI
Opened
#940 Refuse to start with default JWT secret in non-development environments
Opened
#941 Make CORS allowed origins configurable via environment variable
Opened
#942 Remove hardcoded database credentials from docker-compose.yml
Opened
#943 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#944 Persist async job state in PostgreSQL instead of in-memory dict
Opened
#945 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#946 Add JWT auth tests: registration, login, protected routes, and admin endpoints
Opened
#947 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#948 Make LLM model configurable via MODEL environment variable
Opened
#949 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#950 Fix Patent.patent_id type annotation: str not int
Opened
#951 Document or fix analyze_single_patent: PDF must be downloaded before analysis
Opened
#952 Add loading and error states to Batch and Analytics frontend pages
Opened
#953 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Opened
#954 Add pytest test job to Gitea Actions CI workflow
Opened
#955 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#956 Export analysis reports as PDF or CSV from the dashboard
Opened
#957 Add side-by-side comparison view for two companies patent portfolios
Opened
#958 Add webhook/notification support for job completion and score change alerts
Opened
#959 Add patent filing trend charts to the Analytics page
Opened
#960 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#961 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#962 Add scheduled/recurring analysis for tracked companies
Opened
#963 Multi-model support: let users choose LLM provider per analysis
Opened
#964 Refuse startup with default JWT secret in non-dev environments
Opened
#965 Make CORS allowed origins configurable via environment variable
Opened
#966 Move database credentials out of docker-compose.yml into .env
Opened
#967 Refactor get_db_client() to use a shared pooled DatabaseClient
Opened
#968 Persist async job state in PostgreSQL so it survives API restarts
Opened
#969 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#970 Add auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#971 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#972 Make LLM model configurable via MODEL environment variable
Opened
#973 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#974 Document patents/ volume mount requirement and evaluate object storage for PDF storage
Opened
#975 Fix analyze_single_patent to download PDF before reading from disk
Opened
#976 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#977 Add loading skeletons and error states to Batch and Analytics pages
Opened
#978 Add dark mode support using Tailwind dark variant
Opened
#979 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#980 Add pytest test job to Gitea Actions CI workflow
Opened
#981 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#982 Export analysis reports as PDF or CSV from the dashboard
Opened
#983 Add side-by-side patent portfolio comparison view
Opened
#984 Add scheduled/recurring analysis with change alerts
Opened
#985 Add webhook/notification support for batch job completion and score changes
Opened
#986 Add patent trend charts to the Analytics page
Opened
#987 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#988 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#989 Add multi-model support: let users choose LLM provider per analysis
Opened
#990 Refuse to start with default JWT secret in non-dev environments
Opened
#991 Make CORS allowed origins configurable via environment variable
Opened
#992 Remove hardcoded database credentials from docker-compose.yml
Opened
#993 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#994 Persist job state in PostgreSQL so batch results survive API restarts
Opened
#995 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#996 Add JWT flow and admin endpoint tests to test_api.py
Opened
#997 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#998 Make LLM model configurable via MODEL environment variable
Opened
#999 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1000 Document patent PDF volume mount and integrate download step in analyze_single_patent
Opened
#1001 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1002 Add loading and error states to Batch and Analytics pages
Opened
#1003 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Opened
#1004 Add pytest test stage to Gitea Actions build workflow
Opened
#1005 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1006 Export analysis reports as PDF or CSV from the dashboard
Opened
#1007 Add side-by-side patent portfolio comparison view
Opened
#1008 Implement scheduled/recurring analysis with change alerts
Opened
#1009 Add webhook/notification support for job completion and score changes
Opened
#1010 Add patent filing trend charts to the Analytics page
Opened
#1011 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1012 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1013 Add multi-model support: let users choose LLM provider per analysis
Opened
#1014 Add dark mode support using Tailwind dark variant
Opened
#1016 Refuse startup with default JWT secret in non-development environments
Opened
#1017 Make CORS allowed origins configurable via environment variable
Opened
#1018 Remove hardcoded database credentials from docker-compose.yml
Opened
#1019 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1020 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#1021 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1022 Add JWT flow integration tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1023 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1024 Make LLM model configurable via MODEL environment variable
Opened
#1025 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1026 Fix analyze_single_patent: download PDF before attempting local file read
Opened
#1027 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1028 Add loading and error states to Batch and Analytics pages
Opened
#1029 Commit a frontend lockfile to ensure reproducible builds
Opened
#1030 Add pytest test job to CI workflow that gates image builds
Opened
#1031 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1032 Export analysis reports as PDF or CSV from the dashboard
Opened
#1033 Add side-by-side patent portfolio comparison view for two companies
Opened
#1034 Implement scheduled/recurring analysis with alerts on significant changes
Opened
#1035 Add webhook/notification support for batch job completion and score changes
Opened
#1036 Add patent trend charts to Analytics page (filing frequency and category distribution)
Opened
#1037 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1038 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1039 Document or migrate patent PDF storage to object storage (S3/MinIO)
Opened
#1040 Add dark mode support to the frontend (Tailwind dark variant)
Opened
#1041 Multi-model support: let users choose LLM provider per analysis and compare outputs
Opened
#1042 Refuse to start with default JWT secret in non-development environments
Opened
#1043 Make CORS allowed origins configurable via environment variable
Opened
#1044 Move database credentials out of docker-compose.yml and into .env
Opened
#1045 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#1046 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#1047 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1048 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Opened
#1049 Replace print() calls in analyzer.py, serp_api.py, and llm.py with structured logging
Opened
#1050 Make LLM model configurable via MODEL environment variable
Opened
#1051 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1052 Document patent PDF volume mount requirement and consider object storage for containerized deployments
Opened
#1053 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1054 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1055 Add loading skeleton and error states to Batch and Analytics pages
Opened
#1056 Implement dark mode using Tailwind dark variant across the frontend
Opened
#1057 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1058 Add pytest test job to Gitea Actions CI workflow that gates the image build
Opened
#1059 Add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI
Opened
#1060 Export analysis reports as PDF or CSV from the dashboard
Opened
#1061 Add side-by-side comparison view for two companies patent portfolios
Opened
#1062 Implement scheduled/recurring analysis with change alerts
Opened
#1063 Add webhook/notification support for job completion and score change events
Opened
#1064 Support multiple LLM providers per analysis with per-request model selection
Opened
#1065 Add patent trend charts to the Analytics page (filing frequency and technology category over time)
Opened
#1066 Implement cursor-based pagination for /analyze/batch and /jobs endpoints
Opened
#1067 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1068 Add startup check to reject default JWT secret in non-dev environments
Opened
#1069 Make CORS allowed origins configurable via environment variable
Opened
#1070 Replace hardcoded DB credentials in docker-compose.yml with .env file references
Opened
#1071 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#1072 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#1073 Add rate limiting middleware to auth endpoints to prevent brute-force attacks
Opened
#1074 Add JWT auth tests covering registration, login, protected routes, and admin endpoints
Opened
#1075 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1076 Make LLM model configurable via MODEL environment variable
Opened
#1077 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1078 Document patent PDF volume mount requirement and evaluate object storage (S3/MinIO)
Opened
#1079 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1080 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1081 Add loading states and error messages to Batch and Analytics frontend pages
Opened
#1082 Add dark mode support using Tailwind dark variant
Opened
#1083 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1084 Add pytest test job to Gitea Actions CI workflow that gates the image build
Opened
#1085 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1086 Add PDF and CSV export for analysis reports from the dashboard
Opened
#1087 Add side-by-side patent portfolio comparison view
Opened
#1088 Add scheduled/recurring analysis with change alerting
Opened
#1089 Add webhook/notification support for batch job completion and score change alerts
Opened
#1090 Add multi-model support to let users choose LLM provider per analysis
Opened
#1091 Add patent trend charts to Analytics page (filing frequency and technology distribution)
Opened
#1092 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1093 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1094 Refuse startup with default JWT secret in non-development environments
Opened
#1095 Make CORS allowed origins configurable via environment variable
Opened
#1096 Move database credentials out of docker-compose.yml into .env file
Opened
#1097 Refactor get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#1098 Persist async job state in PostgreSQL so it survives API restarts
Opened
#1099 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1100 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1101 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1102 Make LLM model configurable via MODEL environment variable
Opened
#1103 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1104 Document patent PDF volume mount requirement and consider object storage path
Opened
#1105 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1106 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1107 Add loading and error states to Batch and Analytics frontend pages
Opened
#1108 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1109 Add pytest test job to Gitea Actions CI workflow
Opened
#1110 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1111 Export analysis reports as PDF or CSV from the dashboard
Opened
#1112 Add side-by-side patent portfolio comparison view
Opened
#1113 Add scheduled/recurring analysis with change alerting
Opened
#1114 Add webhook/notification support for batch job completion and score changes
Opened
#1115 Add patent trend charts (filing frequency and tech category distribution) to Analytics page
Opened
#1116 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1117 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1118 Add startup check to reject default JWT secret in non-dev environments
Opened
#1119 Make CORS allowed origins configurable via environment variable
Opened
#1120 Remove hardcoded database credentials from docker-compose.yml
Opened
#1121 Fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#1122 Persist async batch job state to PostgreSQL so it survives API restarts
Opened
#1123 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1124 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1125 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1126 Make LLM model configurable via MODEL environment variable
Opened
#1127 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1128 Fix analyze_single_patent to download PDF before reading from disk, or document prerequisite
Opened
#1129 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1130 Add loading states and error messages to Batch and Analytics frontend pages
Opened
#1131 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1132 Add pytest test job to Gitea Actions CI workflow that gates the image build
Opened
#1133 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1134 Add export feature: download analysis results as PDF or CSV from the dashboard
Opened
#1135 Add side-by-side patent portfolio comparison view for two companies
Opened
#1136 Implement scheduled/recurring analysis for tracked companies with change alerts
Opened
#1137 Add webhook/notification support for batch job completion and significant score changes
Opened
#1138 Add per-analysis LLM provider selection (multi-model support)
Opened
#1139 Add patent trend charts to Analytics page (filing frequency and technology category distribution)
Opened
#1140 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1141 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1142 Refuse startup with default JWT secret in non-development environments
Opened
#1143 Make CORS allowed origins configurable via environment variable
Opened
#1144 Move database credentials out of docker-compose.yml into .env
Opened
#1145 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#1146 Persist async job state to PostgreSQL so batch results survive API restarts
Opened
#1147 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1148 Add JWT flow tests covering registration, login, protected routes, and admin endpoints
Opened
#1149 Add pytest job to CI workflow that gates image builds
Opened
#1150 Add ruff linting and tsc type-checking to CI
Opened
#1151 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1152 Make LLM model and SERP cache TTL configurable via environment variables
Opened
#1153 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1154 Add loading states and error messages to Batch and Analytics pages
Opened
#1155 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1156 Document or implement patent PDF storage for containerized deployments
Opened
#1157 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1158 Add Tailwind dark mode variant to the frontend
Opened
#1159 Export analysis results as PDF or CSV from the dashboard
Opened
#1160 Add side-by-side patent portfolio comparison view
Opened
#1161 Implement scheduled/recurring analysis for tracked companies
Opened
#1162 Add webhook/notification support for batch job completion and score changes
Opened
#1163 Add per-analysis LLM provider selection (GPT-4o, Gemini, Claude)
Opened
#1164 Add patent trend charts to the Analytics page
Opened
#1165 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1166 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1167 Refuse startup with default JWT secret in non-development environments
Opened
#1168 Make CORS allowed origins configurable via environment variable
Opened
#1169 Remove hardcoded database credentials from docker-compose.yml
Opened
#1170 Fix get_db_client() in auth.py to use a shared connection pool
Opened
#1171 Persist async job state in PostgreSQL instead of in-memory dict
Opened
#1172 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1173 Add JWT auth tests covering registration, login, protected routes, and admin endpoints
Opened
#1174 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1175 Make LLM model configurable via MODEL environment variable
Opened
#1176 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1177 Document patent PDF volume mount requirement and evaluate object storage option
Opened
#1178 Fix analyze_single_patent to download PDF before attempting local file read
Opened
#1179 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1180 Add loading states and error messages to Batch and Analytics pages
Opened
#1181 Add dark mode support using Tailwind dark variant
Opened
#1182 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1183 Add pytest test job to Gitea Actions CI workflow
Opened
#1184 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1185 Export analysis results as PDF or CSV from the dashboard
Opened
#1186 Add side-by-side patent portfolio comparison view
Opened
#1187 Add scheduled/recurring analysis for tracked companies
Opened
#1188 Add webhook/notification support for batch job completion and innovation score changes
Opened
#1189 Add patent filing trend charts to the Analytics page
Opened
#1190 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1191 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1192 Add multi-model support to allow per-analysis LLM provider selection
Opened
#1193 Refuse to start with default JWT secret in non-development environments
Opened
#1194 Make CORS allowed origins configurable via environment variable
Opened
#1195 Remove hardcoded database credentials from docker-compose.yml
Opened
#1196 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1197 Persist async job state in PostgreSQL so results survive API restarts
Opened
#1198 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1199 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Opened
#1200 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1201 Make LLM model configurable via MODEL environment variable
Opened
#1202 Expose SERP cache TTL as a configurable environment variable
Opened
#1203 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1204 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1205 Add loading skeletons and error states to Batch and Analytics pages
Opened
#1206 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1207 Add pytest test job to Gitea Actions CI workflow
Opened
#1208 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1209 Document patent PDF volume mount requirement and add S3/MinIO storage option
Opened
#1210 Add export to PDF/CSV for analysis reports from the dashboard
Opened
#1211 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1212 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1213 Add startup check to refuse default JWT secret in non-dev environments
Opened
#1214 Make CORS allowed origins configurable via environment variable
Opened
#1215 Remove hardcoded PostgreSQL credentials from docker-compose.yml
Opened
#1216 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#1217 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#1218 Add rate limiting middleware to /auth/login and /auth/register endpoints
Opened
#1219 Add auth test coverage: JWT registration, login, protected routes, and admin endpoints
Opened
#1220 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1221 Make LLM model configurable via MODEL environment variable in llm.py
Opened
#1222 Expose SERP_CACHE_TTL_HOURS as an environment variable in config.py
Opened
#1223 Document patents/ directory volume mount requirement for containerised deployments
Opened
#1224 Fix analyze_single_patent to download PDF before reading, or document prerequisite clearly
Opened
#1225 Fix Patent.patent_id type annotation in types.py from int to str
Opened
#1226 Add skeleton loaders and error states to Batch and Analytics pages
Opened
#1227 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1228 Add pytest test stage to Gitea Actions build.yaml that gates the image build
Opened
#1229 Add ruff (Python) and tsc --noEmit (TypeScript) linting/type-check jobs to CI
Opened
#1230 Add export feature: download analysis results as PDF or CSV from the dashboard
Opened
#1231 Add side-by-side comparison view for two companies patent portfolios
Opened
#1232 Implement scheduled/recurring patent analysis with alerts on significant changes
Opened
#1233 Add webhook/notification support for batch job completion and score changes
Opened
#1234 Add patent trend charts: filing frequency and technology category distribution over time
Opened
#1235 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1236 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1237 Implement dark mode using Tailwind dark variant
Opened
#1238 Add per-analysis multi-model support: let users choose LLM provider in the UI
Opened
#1239 Refuse startup with default JWT secret in non-dev environments
Opened
#1240 Make CORS allowed origins configurable via environment variable
Opened
#1241 Remove hardcoded database credentials from docker-compose.yml
Opened
#1242 Fix DatabaseClient connection leak in auth.py get_db_client()
Opened
#1243 Persist async job state to PostgreSQL so jobs survive API restarts
Opened
#1244 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1245 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1246 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1247 Make LLM model selectable via MODEL environment variable
Opened
#1248 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1249 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1250 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1251 Add loading states and error messages to Batch and Analytics pages
Opened
#1252 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1253 Add pytest test stage to Gitea Actions CI workflow
Opened
#1254 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1255 Export analysis reports as PDF or CSV from the dashboard
Opened
#1256 Add side-by-side patent portfolio comparison view
Opened
#1257 Add webhook/notification support for job completion and score change alerts
Opened
#1258 Add patent trend charts to the Analytics page (filing frequency and category distribution)
Opened
#1259 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1260 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1261 Add Tailwind dark mode support to the frontend
Opened
#1262 Document patent PDF volume mount or add S3/MinIO storage backend
Opened
#1263 Add scheduled/recurring analysis with change alerting
Opened
#1264 Add multi-model support: let users choose LLM provider per analysis
Opened
#1265 Refuse to start with default JWT secret in non-development environments
Opened
#1266 Make CORS allowed origins configurable via environment variable
Opened
#1267 Replace hardcoded database credentials in docker-compose.yml with .env file
Opened
#1268 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1269 Persist job state in PostgreSQL so batch results survive API restarts
Opened
#1270 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1271 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1272 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1273 Make LLM model configurable via MODEL environment variable
Opened
#1274 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1275 Fix Patent.patent_id type annotation from int to str
Opened
#1276 Integrate PDF download step into analyze_single_patent or document the prerequisite clearly
Opened
#1277 Add loading and error states to Batch and Analytics pages
Opened
#1278 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1279 Add pytest test job to Gitea Actions CI workflow that gates image build
Opened
#1280 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1281 Add export feature: download analysis results as PDF or CSV from the dashboard
Opened
#1282 Add patent trend charts to the Analytics page (filing frequency and category distribution)
Opened
#1283 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1284 Enforce non-default JWT secret on startup
Opened
#1285 Make CORS allowed origins configurable via environment variable
Opened
#1286 Remove plaintext database credentials from docker-compose.yml
Opened
#1287 Refactor get_db_client() in auth.py to use shared connection pool
Opened
#1288 Persist async job state in PostgreSQL instead of in-memory dict
Opened
#1289 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1290 Add JWT authentication tests covering full auth flow
Opened
#1291 Replace print() calls with structured logging in analyzer, serp_api, and llm modules
Opened
#1292 Make LLM model selection configurable via MODEL environment variable
Opened
#1293 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1294 Document patent PDF volume mount requirement and integrate download step in analyze_single_patent
Opened
#1295 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1296 Add loading states and error messages to Batch and Analytics pages
Opened
#1297 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1298 Add pytest test job to Gitea Actions CI workflow
Opened
#1299 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1300 Export analysis reports as PDF or CSV from the dashboard
Opened
#1301 Add side-by-side patent portfolio comparison view
Opened
#1302 Implement scheduled/recurring patent analysis with change alerting
Opened
#1303 Add webhook/notification support for batch job completion and score changes
Opened
#1304 Add patent trend charts to Analytics page (filing frequency and technology categories over time)
Opened
#1305 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1306 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1307 Support multi-model LLM selection per analysis (GPT-4o, Gemini, Claude)
Opened
#1308 Implement dark mode using Tailwind dark variant
Opened
#1309 Security: refuse to start with default JWT secret in non-development environments
Opened
#1310 Security: make CORS allowed origins configurable via environment variable
Opened
#1311 Security: remove plaintext database credentials from docker-compose.yml
Opened
#1312 Fix: share a single pooled DatabaseClient instead of creating one per request in auth.py
Opened
#1313 Fix: persist job state to PostgreSQL so async batch results survive API restarts
Opened
#1314 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#1315 Test: add JWT authentication flow tests to test_api.py
Opened
#1316 Backend: replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1317 Backend: make LLM model configurable via MODEL environment variable
Opened
#1318 Backend: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1319 Backend: document or fix analyze_single_patent assuming PDF already exists on disk
Opened
#1320 Backend: fix Patent.patent_id type annotation from int to str in types.py
Opened
#1321 Backend: document patent PDF storage and volume mount requirements for containerized deployments
Opened
#1322 Frontend: add skeleton loaders and error states to Batch and Analytics pages
Opened
#1323 Frontend: commit a lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1324 Frontend: apply Tailwind dark mode variants across the dashboard
Opened
#1325 CI: add pytest test job to Gitea Actions build.yaml that gates image builds
Opened
#1326 CI: add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI
Opened
#1327 Feature: export analysis reports as PDF or CSV from the dashboard
Opened
#1328 Feature: side-by-side patent portfolio comparison view
Opened
#1329 Feature: scheduled/recurring analysis with change alerts
Opened
#1330 Feature: webhook/notification support for batch job completion and score changes
Opened
#1331 Feature: multi-model support — let users select LLM provider per analysis
Opened
#1332 Feature: patent trend charts on Analytics page (filing frequency and technology categories over time)
Opened
#1333 Feature: cursor-based pagination for /analyze/batch and /jobs endpoints
Opened
#1334 Feature: auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1335 Security: refuse to start with default JWT secret in non-development environments
Opened
#1336 Security: make CORS allowed origins configurable via environment variable
Opened
#1337 Security: remove hardcoded database credentials from docker-compose.yml
Opened
#1338 Bug: fix get_db_client() in auth.py to reuse a shared pooled DatabaseClient
Opened
#1339 Bug: persist async job state to PostgreSQL so job results survive API restarts
Opened
#1340 Security: add rate limiting to /auth/login and /auth/register endpoints
Opened
#1341 Test: add JWT auth flow tests (registration, login, protected routes, token refresh, admin endpoints)
Opened
#1342 Refactor: replace print() calls in analyzer.py, serp_api.py, and llm.py with structured logging
Opened
#1343 Config: make LLM model selection configurable via MODEL environment variable
Opened
#1344 Config: expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1345 Docs: document patent PDF volume mount requirement (and evaluate object storage path)
Opened
#1346 Bug: analyze_single_patent silently fails if PDF is not already downloaded
Opened
#1347 Bug: fix Patent.patent_id type annotation in types.py (int -> str)
Opened
#1349 Repo Manager: triage summary for 25 agent-ready issues (2026-03-30)
Opened
#1350 Refuse to start with default JWT secret in non-development environments
Opened
#1351 Make CORS allowed origins configurable via environment variable
Opened
#1352 Replace plaintext database credentials in docker-compose.yml with .env file reference
Opened
#1353 Fix get_db_client() in auth.py to use a shared pooled DatabaseClient
Opened
#1354 Persist job state to PostgreSQL so batch results survive API restarts
Opened
#1355 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1356 Add JWT auth flow tests for registration, login, protected routes, and admin endpoints
Opened
#1357 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1358 Make LLM model configurable via MODEL environment variable
Opened
#1359 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1360 Document patent PDF volume mount requirement for containerized deployments
Opened
#1361 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1362 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1363 Add loading and error states to Batch and Analytics pages
Opened
#1364 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1365 Add pytest test job to CI workflow that gates the image build
Opened
#1366 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1367 Export analysis reports as PDF or CSV from the dashboard
Opened
#1368 Side-by-side comparison view for two companies patent portfolios
Opened
#1369 Scheduled/recurring analysis with alerting on significant changes
Opened
#1370 Webhook/notification support for batch job completion and score changes
Opened
#1371 Patent trend charts: filing frequency and technology category distribution over time
Opened
#1372 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1373 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1375 Add startup check to reject default JWT secret in non-dev environments
Opened
#1376 Make CORS allowed-origins configurable via environment variable
Opened
#1377 Remove plain-text database credentials from docker-compose.yml
Opened
#1378 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1379 Persist async batch job state to PostgreSQL instead of in-memory dict
Opened
#1380 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1381 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1382 Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Opened
#1383 Make LLM model selection configurable via MODEL environment variable
Opened
#1384 Expose SERP_CACHE_TTL_HOURS as a configurable environment variable
Opened
#1385 Document patents/ volume mount requirement and fix analyze_single_patent missing download step
Opened
#1386 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1387 Add skeleton loaders and error states to Batch and Analytics pages
Opened
#1388 Commit frontend package lockfile to ensure reproducible builds
Opened
#1389 Add pytest test job to Gitea Actions CI workflow
Opened
#1390 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1391 Export analysis results as PDF or CSV from the dashboard
Opened
#1392 Add side-by-side patent portfolio comparison view for two companies
Opened
#1393 Implement scheduled/recurring analysis with change alerting
Opened
#1394 Add webhook/notification support for batch job completion and score changes
Opened
#1395 Add patent trend charts to Analytics page (filing frequency and technology categories over time)
Opened
#1396 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1397 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1398 Add dark mode support to the frontend using Tailwind dark variant
Opened
#1399 Allow per-analysis LLM provider selection and output comparison (multi-model support)
Opened
#1400 Refuse to start when default JWT secret is used in non-dev environments
Opened
#1401 Make CORS allowed origins configurable via environment variable
Opened
#1402 Move database credentials out of docker-compose.yml into .env file
Opened
#1403 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1404 Persist async job state in PostgreSQL so jobs survive API restarts
Opened
#1405 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1406 Add JWT authentication tests covering registration, login, and protected routes
Opened
#1407 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1408 Make LLM model configurable via MODEL environment variable
Opened
#1409 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1410 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1411 Fix analyze_single_patent to download PDF before attempting to read it
Opened
#1412 Add loading states and error messages to Batch and Analytics pages
Opened
#1413 Commit a frontend lockfile to ensure reproducible builds
Opened
#1414 Add pytest test job to Gitea Actions CI workflow
Opened
#1415 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1416 Add PDF and CSV export for analysis reports
Opened
#1417 Add side-by-side patent portfolio comparison view
Opened
#1418 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1419 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1420 Refuse startup with default JWT secret in non-development environments
Opened
#1421 Make CORS allowed origins configurable via environment variable
Opened
#1422 Replace plain-text database credentials in docker-compose.yml with env file or secrets
Opened
#1423 Refactor get_db_client() to use a shared pooled DatabaseClient
Opened
#1424 Persist async job state in PostgreSQL to survive API restarts
Opened
#1425 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1426 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1427 Replace print() calls with structured Python logging in analyzer, serp_api, and llm modules
Opened
#1428 Make LLM model configurable via MODEL environment variable
Opened
#1429 Expose SERP cache TTL as a configurable environment variable
Opened
#1430 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1431 Fix Patent.patent_id type annotation from int to str
Opened
#1432 Document patent PDF storage volume mount requirement and evaluate object storage
Opened
#1433 Add loading and error states to Batch and Analytics pages
Opened
#1434 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1435 Add pytest test job to Gitea Actions workflow before image build
Opened
#1436 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1437 Export analysis reports as PDF or CSV from the dashboard
Opened
#1438 Add side-by-side comparison view for two companies patent portfolios
Opened
#1439 Implement scheduled/recurring analysis with change alerts
Opened
#1440 Add webhook/notification support for job completion and score changes
Opened
#1441 Add API cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1442 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1443 Refuse to start with default JWT secret in non-dev environments
Opened
#1444 Make CORS allowed origins configurable via environment variable
Opened
#1445 Make CORS allowed origins configurable via environment variable
Opened
#1446 Move database credentials out of docker-compose.yml into .env or Docker secrets
Opened
#1447 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1448 Persist async job state in PostgreSQL so batch results survive API restarts
Opened
#1449 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1450 Add JWT flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1451 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1452 Make LLM model configurable via MODEL environment variable
Opened
#1453 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1454 Document patents/ volume mount requirement and evaluate object storage path
Opened
#1455 Fix analyze_single_patent to download PDF before reading it from disk
Opened
#1456 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1457 Add loading skeletons and error states to Batch and Analytics pages
Opened
#1458 Add dark mode support using Tailwind dark: variant
Opened
#1459 Commit a package-lock.json or pnpm-lock.yaml to ensure reproducible frontend builds
Opened
#1460 Add pytest test job to Gitea Actions CI workflow that gates the image build
Opened
#1461 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1462 Allow users to export analysis reports as PDF or CSV from the dashboard
Opened
#1463 Add side-by-side patent portfolio comparison view
Opened
#1464 Implement scheduled/recurring analysis with change alerting
Opened
#1465 Add webhook/notification support for job completion and score change events
Opened
#1466 Let users choose LLM provider per analysis and compare outputs (multi-model support)
Opened
#1467 Add patent trend charts to the Analytics page (filing frequency and category distribution over time)
Opened
#1468 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1469 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1470 Security: Refuse to start with default JWT secret in non-dev environments
Opened
#1471 Security: Make CORS allowed origins configurable via environment variable
Opened
#1472 Security: Replace hardcoded DB credentials in docker-compose.yml with .env file
Opened
#1473 Refactor: Share a single pooled DatabaseClient instead of creating one per request in auth.py
Opened
#1474 Reliability: Persist batch job state in PostgreSQL so it survives API restarts
Opened
#1475 Security: Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1476 Test: Add JWT auth flow tests (registration, login, protected routes, token refresh, admin endpoints)
Opened
#1477 Backend: Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1478 Backend: Make LLM model configurable via MODEL environment variable
Opened
#1479 Backend: Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1480 Docs: Document patent PDF volume mount requirement for containerized deployments
Opened
#1481 Bug: analyze_single_patent reads PDF from disk without downloading it first
Opened
#1482 Bug: Fix Patent.patent_id type annotation — should be str, not int
Opened
#1483 Frontend: Add skeleton loaders and error states to Batch and Analytics pages
Opened
#1484 Frontend: Commit a package-lock.json or pnpm-lock.yaml for reproducible builds
Opened
#1485 CI: Add pytest test job to build.yaml that gates the Docker image build
Opened
#1486 CI: Add ruff (Python) and tsc --noEmit (TypeScript) linting/type-checking to CI
Opened
#1487 Feature: Export analysis reports as PDF or CSV from the dashboard
Opened
#1488 Feature: Side-by-side comparison view for two companies patent portfolios
Opened
#1489 Feature: Scheduled/recurring analysis with alerting on significant changes
Opened
#1490 Feature: Webhook/notification support for batch job completion and score change alerts
Opened
#1491 Feature: Patent trend charts showing filing frequency and technology category distribution over time
Opened
#1492 Feature: Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1493 Feature: Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1494 Frontend: Implement dark mode using Tailwind dark variant
Opened
#1495 Feature: Multi-model support — let users choose LLM provider per analysis
Opened
#1496 Add startup check to reject default JWT secret in non-development environments
Opened
#1497 Make CORS allowed origins configurable via environment variable
Opened
#1498 Move database credentials out of docker-compose.yml into .env / Docker secrets
Opened
#1499 Refactor get_db_client() in auth.py to use a shared pooled DatabaseClient
Opened
#1500 Persist async job state in PostgreSQL so job results survive API restarts
Opened
#1501 Add rate limiting middleware to /auth/login and /auth/register endpoints
Opened
#1502 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1503 Replace print() calls with structured Python logging in analyzer.py, serp_api.py, and llm.py
Opened
#1504 Make LLM model configurable via MODEL environment variable
Opened
#1505 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1506 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1507 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1508 Add loading states and error messages to Batch and Analytics frontend pages
Opened
#1509 Add frontend lockfile (package-lock.json or pnpm-lock.yaml) to repository
Opened
#1510 Add pytest test job to Gitea Actions build workflow
Opened
#1511 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1512 Add PDF and CSV export for analysis reports from the dashboard
Opened
#1513 Add side-by-side patent portfolio comparison view
Opened
#1514 Implement scheduled/recurring analysis with change alerting
Opened
#1515 Add webhook/notification support for batch job completion and score changes
Opened
#1516 Add patent trend charts to the Analytics page (filing frequency and technology categories over time)
Opened
#1517 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1518 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1519 Document patent PDF storage volume requirement or migrate to object storage (S3/MinIO)
Opened
#1520 Implement dark mode using Tailwind dark variant across all frontend pages
Opened
#1521 Allow users to choose LLM provider per analysis (multi-model support)
Opened
#1522 Refuse to start with default JWT secret in non-development environments
Opened
#1523 Make CORS allowed origins configurable via environment variable
Opened
#1524 Remove hardcoded database credentials from docker-compose.yml
Opened
#1525 Refactor auth.py to use a shared pooled DatabaseClient instead of creating one per call
Opened
#1526 Persist job status in PostgreSQL so batch results survive API restarts
Opened
#1527 Add rate limiting middleware to auth endpoints
Opened
#1528 Add JWT authentication tests covering registration, login, protected routes, and admin endpoints
Opened
#1529 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1530 Make LLM model configurable via MODEL environment variable
Opened
#1531 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1532 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1533 Document patent PDF volume mount requirement and integrate download step in analyze_single_patent
Opened
#1534 Add loading and error states to Batch and Analytics pages
Opened
#1535 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1536 Add pytest test stage to Gitea Actions CI workflow that gates the build
Opened
#1537 Add ruff (Python linting) and tsc --noEmit (TypeScript type checking) to CI
Opened
#1538 Export analysis reports as PDF or CSV from the dashboard
Opened
#1539 Add side-by-side patent portfolio comparison view
Opened
#1540 Implement scheduled/recurring analysis with change alerts
Opened
#1541 Add webhook/notification support for batch job completion and score changes
Opened
#1542 Add patent trend charts to Analytics page (filing frequency and category distribution over time)
Opened
#1543 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1544 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1545 Add startup check to refuse default JWT secret in non-dev environments
Opened
#1546 Make CORS allowed origins configurable via environment variable
Opened
#1547 Remove hardcoded database credentials from docker-compose.yml
Opened
#1548 Refactor get_db_client() in auth.py to use a shared connection pool
Opened
#1549 Persist async job state in PostgreSQL to survive API restarts
Opened
#1550 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1551 Add JWT authentication tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1552 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1553 Make LLM model selection configurable via MODEL environment variable
Opened
#1554 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1555 Fix Patent.patent_id type annotation: change int to str in types.py
Opened
#1556 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1557 Add skeleton loaders and error states to Batch and Analytics pages
Opened
#1558 Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1559 Add pytest test stage to Gitea Actions build workflow
Opened
#1560 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1561 Export analysis reports as PDF or CSV from the dashboard
Opened
#1562 Add side-by-side patent portfolio comparison view
Opened
#1563 Implement scheduled/recurring analysis with change alerts
Opened
#1564 Add webhook/notification support for batch job completion and score changes
Opened
#1565 Add patent trend charts to Analytics page
Opened
#1566 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1567 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1569 Add startup check to refuse default JWT secret in non-dev environments
Opened
#1570 Make CORS allowed origins configurable via environment variable
Opened
#1571 Remove hardcoded database credentials from docker-compose.yml
Opened
#1572 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#1573 Persist async job state in PostgreSQL to survive API restarts
Opened
#1574 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1575 Add JWT flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1576 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1577 Make LLM model configurable via MODEL environment variable
Opened
#1578 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1579 Fix Patent.patent_id type annotation: change int to str in types.py
Opened
#1580 Document patent PDF storage volume mount and integrate download step in analyze_single_patent
Opened
#1581 Add loading/error states (skeleton loaders) to Batch and Analytics pages
Opened
#1582 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1583 Add Tailwind dark mode support across the frontend
Opened
#1584 Export analysis reports as PDF or CSV from the dashboard
Opened
#1585 Add side-by-side company patent portfolio comparison view
Opened
#1586 Add scheduled/recurring analysis with alerting on significant changes
Opened
#1587 Add webhook/notification support for batch job completion and score changes
Opened
#1588 Add patent filing trend charts to the Analytics page
Opened
#1589 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1590 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1591 Add multi-model support: let users choose LLM provider per analysis
Opened
#1592 Add startup check to refuse default JWT secret in non-dev environments
Opened
#1593 Make CORS allowed origins configurable via environment variable
Opened
#1594 Remove hardcoded database credentials from docker-compose.yml
Opened
#1595 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#1596 Persist async job state in PostgreSQL to survive API restarts
Opened
#1597 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1598 Add JWT flow tests: registration, login, protected routes, token refresh, and admin endpoints
Opened
#1599 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1600 Make LLM model configurable via MODEL environment variable
Opened
#1601 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1602 Fix Patent.patent_id type annotation: change int to str in types.py
Opened
#1603 Integrate PDF download step in analyze_single_patent and document volume mount requirement
Opened
#1604 Add skeleton loaders and user-friendly error states to Batch and Analytics pages
Opened
#1605 Add Tailwind dark mode support across the frontend
Opened
#1606 Commit frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Opened
#1607 Add pytest test stage to Gitea Actions build workflow
Opened
#1608 Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Opened
#1609 Export analysis reports as PDF or CSV from the dashboard
Opened
#1610 Add side-by-side company patent portfolio comparison view
Opened
#1611 Add scheduled/recurring analysis with alerting on significant changes
Opened
#1612 Add webhook/notification support for batch job completion and score changes
Opened
#1613 Add per-analysis LLM provider selection (multi-model support)
Opened
#1614 Add patent filing trend charts to the Analytics page
Opened
#1615 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1616 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1617 Evaluate object storage (S3/MinIO) for patent PDF persistence in containerized deployments
Opened
#1618 Add startup check to reject default JWT secret in non-development environments
Opened
#1619 Make CORS allowed origins configurable via environment variable
Opened
#1620 Remove hardcoded database credentials from docker-compose.yml
Opened
#1621 Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Opened
#1622 Persist async job state to PostgreSQL so job results survive API restarts
Opened
#1623 Add rate limiting to /auth/login and /auth/register endpoints
Opened
#1624 Add JWT auth integration tests covering registration, login, protected routes, and admin endpoints
Opened
#1625 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1626 Make LLM model configurable via MODEL environment variable
Opened
#1629 Refuse startup with default JWT secret in non-development environments
Opened
#1630 Make CORS allowed origins configurable via environment variable
Opened
#1631 Remove hardcoded database credentials from docker-compose.yml
Opened
#1632 Refactor get_db_client() in auth.py to use a shared pooled connection
Opened
#1633 Persist job state in PostgreSQL so batch results survive API restarts
Opened
#1634 Add rate limiting middleware to auth endpoints
Opened
#1635 Add JWT auth flow tests: registration, login, protected routes, token refresh, admin endpoints
Opened
#1636 Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py
Opened
#1637 Make LLM model configurable via MODEL environment variable
Opened
#1638 Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Opened
#1639 Document patent PDF volume mount requirement and consider object storage for containerized deployments
Opened
#1640 Fix analyze_single_patent to download PDF before reading from disk
Opened
#1641 Fix Patent.patent_id type annotation from int to str in types.py
Opened
#1642 Add loading skeleton and error states to Batch and Analytics pages
Opened
#1643 Add dark mode support using Tailwind dark variant
Opened
#1644 Add and commit a frontend lockfile (package-lock.json or pnpm-lock.yaml)
Opened
#1645 Add pytest test stage to CI workflow that gates the image build
Opened
#1646 Add ruff linting and tsc type checking to CI pipeline
Opened
#1647 Export analysis reports as PDF or CSV from the dashboard
Opened
#1648 Add side-by-side patent portfolio comparison view
Opened
#1649 Implement scheduled/recurring analysis with change alerting
Opened
#1650 Add webhook/notification support for batch job completion and score changes
Opened
#1651 Add multi-model LLM support so users can choose provider per analysis
Opened
#1652 Add patent trend charts to Analytics page (filing frequency and tech category distribution)
Opened
#1653 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1654 Auto-generate TypeScript API client from FastAPI OpenAPI spec
Opened
#1655 Add API tests for export endpoints (/export/{company_name} and /export/{company_name}/pdf)
Opened
#1656 Add tests for tracked company admin endpoints and scheduler integration
Opened
#1657 Add webhook integration tests covering retry logic and Slack/Discord payload format
Opened
#1658 Refactor scheduler.py to use the application-level pooled DatabaseClient
Opened
#1659 Update ROADMAP.md to reflect completed work and add next-horizon items
Opened
#1660 Add S3/MinIO storage backend tests for storage.py
Opened
#1661 Add test coverage for analyze_single_patent auto-download path
Opened
#1669 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1670 Add stricter input validation for company names on analysis endpoints
Opened
#1671 Add historical analysis diffing to show changes between runs for the same company
Opened
#1672 Add LLM-based patent classification tagging by technology domain
Opened
#1673 Add user-level API key generation for programmatic access without JWT refresh
Opened
#1674 Add batch export endpoint to download analysis results for multiple companies as a ZIP archive
Opened
#1675 Add rate limit status and usage statistics to the admin panel
Opened
#1676 Move webhook delivery to a background task queue to avoid blocking the scheduler
Opened
#1677 Add multi-tenant support to scope analysis results and tracked companies per user/org
Opened
#1678 Update ROADMAP.md to mark completed P1 and P2 items as done
Opened
#1683 Persist async job state to PostgreSQL so batch results survive API restarts
Opened
#1684 Add cursor-based pagination to /analyze/batch and /jobs endpoints
Opened
#1685 Add stricter input validation for company names on analysis endpoints
Opened
#1686 Add rate limiting dashboard to surface usage statistics in the admin panel
Opened
#1691 Fix stale issue references in ROADMAP.md P2 section