Skip to content

jspires-edgewater/bd-opportunity-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

219 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BD Command Center

A full-stack business development operating system for government contract capture teams.
Live demo: https://bd.edgewatertech.net

CI Python FastAPI PostgreSQL Docker AWS


BD Command Center replaces a collection of Excel workbooks and Access databases with a governed, web-based pipeline tool for business development teams pursuing government contracts. It monitors over a dozen federal procurement sources, normalizes incoming opportunities through an AI-assisted review inbox, tracks active pursuits through proposal submission, and surfaces AI-generated intelligence via a RAG pipeline built on a searchable past performance and proposal document library.

Features

Opportunity Intake

  • Monitors 15+ sources: SAM.gov API, USAspending.gov, DOE/NNSA lab procurement sites (Pantex, ORNL, UCOR, WIPP, PNNL, CNS, LANL, NREL, N3B, SCMC, and more), and regional manager Excel uploads
  • Multi-tier scraping pipeline: direct HTTP → Trafilatura → Jina AI Reader (JS rendering) → Groq/Ollama/Anthropic LLM extraction
  • Review inbox gates every incoming item before it enters the tracked pipeline
  • AI Opportunity Brief generated on first open: work scope, timeline, ROM estimate, bid context, evidence cited
  • Bulk approve with auto-populated fields from pre-extracted source data

Pipeline Management

  • Full pursuit lifecycle: Identified → Qualifying → Pursuing → Proposal → Awarded / No Bid
  • Capture timeline combining activity notes, BD task events, document uploads, and AI events
  • Stage aging indicators (>30 days stale, >14 days for high-priority) with executive exceptions dashboard
  • Pwin% tracking and weighted pipeline value on analytics
  • Quick-log notes from pipeline list without leaving the page
  • Recompete flag with predecessor contract linkage

RAG Pipeline & AI Analysis

  • Solicitation PDFs chunked and indexed in pgvector (768-dim via Ollama nomic-embed-text); semantic search retrieves relevant past performance and proposal passages as grounded LLM context
  • Agentic procurement analysis: parses RFP/solicitation documents, generates Fit Score, Compliance Matrix, Win Themes, and Proposal Outline against program requirements
  • AI Opportunity Brief on every inbox item: work scope, timeline, ROM estimate, bid context, evidence cited — with DOE/NNSA capture-style structured output
  • All AI outputs land as draft — domain experts accept or reject before they affect pipeline decisions
  • LLM provider cascade: Groq → Ollama → Anthropic (configurable; no vendor lock-in)

Past Performance Database

  • Import from Excel, CSV, or Access (.accdb)
  • CPARS ratings (Overall, Quality, Schedule, Cost Control, Management) with color-coded display
  • Attach PDFs per record; each document indexed for semantic AI context
  • "Promote to Past Performance" one-click workflow from won opportunities

CRM

  • Organizations (customers, partners, competitors, agencies) with bulk import
  • Contact roles per opportunity (capture manager, proposal lead, incumbent, etc.)
  • Teaming agreement status and partner capability profiles
  • Source yield analytics: per-source funnel from Approved → Pursued → Won

Admin & Governance

  • Role-based access: Viewer / Editor / Admin
  • Admin invites new users by email; user sets their own password via branded invite link
  • SAM.gov NAICS codes managed in-app (add/remove, auto-seeded from config)
  • Saved watchlists with email alerts on new matches
  • Full audit log, source health monitoring, and data quality flags

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      Ingest Layer                           │
│  SAM.gov API │ Website Scrapers │ Regional Uploads │ Manual  │
└──────────────────────────┬──────────────────────────────────┘
                           │ V2 Intake Contract
                           ▼
┌─────────────────────────────────────────────────────────────┐
│              Review Inbox (Human Gate)                      │
│  AI Brief generation │ Pre-extracted fields │ Bulk approve  │
└──────────────────────────┬──────────────────────────────────┘
                           │ Approval
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                  Tracked Pipeline                           │
│  V2Opportunity + V2Pursuit │ Dates │ Contacts │ Tasks       │
└──────────┬───────────────────────────────┬──────────────────┘
           │ PDF upload / auto-fetch        │ Past Performance
           ▼                               ▼
┌──────────────────────┐    ┌──────────────────────────────── ┐
│  Document Intelligence│    │      Past Performance DB        │
│  pypdf → pgvector    │    │  CPARS ratings │ PDF indexing   │
│  Groq/Ollama/Anthropic│    │  Semantic similarity search     │
└──────────────────────┘    └─────────────────────────────────┘

Stack: Python 3.14, FastAPI, SQLAlchemy, Alembic, PostgreSQL 17 + pgvector, Jinja2, Docker Compose, AWS EC2 + RDS


Quick Start (Local)

Prerequisites: Docker Desktop, Python 3.14

# Clone and set up the environment
git clone https://github.com/jspires-edgewater/bd-opportunity-monitor.git
cd bd-opportunity-monitor
python -m venv .venv
.venv\Scripts\activate          # Windows
# source .venv/bin/activate     # macOS/Linux
pip install -r requirements.txt

# Configure environment
cp .env.example .env
# Edit .env — set APP_SECRET_KEY, APP_ADMIN_PASSWORD, and optionally GROQ_API_KEY

# Start the database and run migrations
docker compose up -d db
alembic upgrade head

# Start the app
python -m bd_opportunity_monitor --serve
# Open http://localhost:8080

Default local login: admin / the password you set in .env

With Docker Compose (full stack)

docker compose up -d
# App runs at http://localhost:8080

Seed demo data

python -m bd_opportunity_monitor --seed-pilot-data

Environment Variables

Copy .env.example to .env and fill in the required values. Key variables:

Variable Required Description
DATABASE_URL Yes PostgreSQL connection string
APP_SECRET_KEY Yes Random secret for session signing
APP_ADMIN_PASSWORD Yes Initial admin account password
APP_BASE_URL Yes Full URL of the app (used in emails)
GROQ_API_KEY Recommended LLM provider for AI briefs and scraping
SAM_GOV_API_KEY Recommended SAM.gov opportunity ingestion
SMTP_* Optional Email notifications and user invites
OPENAI_API_KEY Optional Higher-quality embeddings (1536-dim)

See .env.example for the full list with comments.


Deployment

The production instance runs on AWS EC2 with Docker Compose and a Caddy HTTPS sidecar. The target production architecture is ECS Fargate + RDS PostgreSQL + S3 + EventBridge + CloudWatch.

See docs/ecs-deployment-readiness.md for the full ECS readiness checklist.

Security hardening included:

  • Non-root container (uid 10001)
  • Fail-closed production config (startup blocked when insecure defaults present)
  • CSP + HSTS headers, request-body size guard (60 MB), upload extension allowlist
  • PBKDF2-600k password hashing, login lockout, no user enumeration on reset
  • /docs, /redoc, /openapi.json disabled in shared mode

CLI Reference

# Ingestion
python -m bd_opportunity_monitor --refresh-v2-sam --sam-posted-from MM/dd/yyyy --sam-posted-to MM/dd/yyyy
python -m bd_opportunity_monitor --refresh-v2-usaspending --usaspending-start-date YYYY-MM-DD --usaspending-end-date YYYY-MM-DD

# Document intelligence
python -m bd_opportunity_monitor --reembed-documents

# Alerts
python -m bd_opportunity_monitor --send-alerts

# Diagnostics
python -m bd_opportunity_monitor --verify-v2
python -m bd_opportunity_monitor --audit-v2-data-model
python -m bd_opportunity_monitor --audit-source-field-coverage

Project Structure

bd_opportunity_monitor/
├── webapp.py                  # All FastAPI routes
├── config.py                  # Environment variable config
├── auth.py                    # Password hashing, session tokens
├── ingest/                    # Scrapers, LLM extraction, normalization
├── services/                  # Core service layer
└── v2/                        # V2 domain layer (canonical)
    ├── models.py              # SQLAlchemy models
    ├── workflow.py            # Approval and review workflow
    ├── sam_gov.py             # SAM.gov API ingestion
    ├── document_intelligence.py  # PDF storage, AI analysis
    ├── embedding_service.py   # Ollama/OpenAI embedding dispatch
    └── notification_email.py  # Assignment and alert emails

Full data model documentation: DATA_MODEL_V2.md
Architecture details: docs/architecture.md


License

Internal use — Edgewater Technical Associates. Not licensed for public distribution.

About

AI-assisted BD pipeline for government contract capture: FastAPI, PostgreSQL/pgvector, Docker, AWS

Topics

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages