AI-native tender intelligence for procurement teams that need faster decisions, tighter rigor, and explainable supplier matches.
Heidi Tender transforms dense tender packs into ranked, defensible product recommendations by combining document understanding, governed rules, SQL-backed filtering, and explainable AI scoring.
Procurement teams spend too much time buried in PDFs, spreadsheets, supplier data, and compliance checks. Heidi Tender brings that work into one auditable flow: extract what matters, apply hard constraints, rank the best candidates, and keep the reasoning visible from start to finish.
|
Structured from messy inputs Upload tender files, archives, and technical documents, then convert unstructured material into a consistent requirement pipeline. |
Governed matching logic Blend LLM extraction, explicit business rules, and SQL execution against supplier catalog data instead of relying on vague keyword search. |
Explainable outcomes Produce shortlist-ready candidates with traceable evidence, fit logic, and operational visibility for more confident bid decisions. |
- Ingests tender packs and supporting files through a web workflow
- Extracts requirements and procurement signals from unstructured documents
- Applies field rules and hard-versus-soft constraint logic
- Generates SQL from validated hard requirements and executes it on supplier product views
- Ranks surviving candidates using soft constraints and model-assisted reasoning
- Streams job progress, step status, and system events in real time
- 7-step pipeline with explicit contracts across extraction, merge, SQL generation, execution, and ranking
- Rule Copilot with human approval so generated rule drafts can be reviewed before publication
- Snapshot-based rule binding to keep running jobs stable even when rules evolve later
- Realtime telemetry through SSE events with polling-friendly frontend behavior
- Docker-first deployment with app services, MySQL catalog bootstrap, and knowledge-base initialization
- Knowledge-base bootstrap and vector store readiness check
- Requirement extraction from tender files
- External field rule determination
- Requirement merge with hardness classification
- SQL generation from hard constraints
- SQL execution against supplier product views
- Candidate ranking using soft constraints
Next.jsfrontend for job orchestration, rule management, and monitoringFastAPIbackend for APIs, execution control, and streaming eventsPostgreSQLfor application state and versioned rule metadataMySQLfor supplier product data and SQL-backed candidate filtering- OpenAI models for extraction, reasoning, and ranking stages
- Docker and Docker Compose v2
- OpenAI API key
Create a root .env file with at least:
OPENAI_API_KEY=your_key_here
OPENAI_MODEL=gpt-5-minidocker compose up --buildUse the dedicated production stack and deployment guide:
- Environment template:
.env.prod.example - Production Compose file:
docker-compose.prod.yml - Full guide:
docs/production-deployment.md
Public deployments can enable:
- Google OIDC login
- Microsoft OIDC login
- Optional email magic-link login via Resend
- Frontend:
http://localhost:3000 - Backend API:
http://localhost:8000/api/v1 - Health check:
http://localhost:8000/health
mysqlstarts and prepares the supplier product databasemysql-initimportssrc/prepare/pim.sqlwhen initialization is neededmysql-views-initcreates or refreshesvw_bid_productsandvw_bid_specsbackendstarts after data services are readyfrontendstarts and connects to the API
created -> uploading -> ready -> running -> succeeded | failed
GET /api/v1/jobs/{job_id}/eventsstreams step and lifecycle events over SSE- Incremental event IDs support reconnect flows via
Last-Event-ID - Frontend behavior tolerates disconnects and can fall back to polling
POST /api/v1/jobsGET /api/v1/jobsPOST /api/v1/jobs/{job_id}/filePOST /api/v1/jobs/{job_id}/archivePOST /api/v1/jobs/{job_id}/startGET /api/v1/jobs/{job_id}GET /api/v1/jobs/{job_id}/result
GET /api/v1/rules/currentGET /api/v1/rules/versionsPOST /api/v1/rules/draftPOST /api/v1/rules/generatePOST /api/v1/rules/generate/streamPOST /api/v1/rules/{version_id}/publish
GET /api/v1/settings/modelPUT /api/v1/settings/modelGET /api/v1/stats/dashboard
GET /api/v1/auth/optionsGET /api/v1/auth/login/googleGET /api/v1/auth/callback/googleGET /api/v1/auth/login/microsoftGET /api/v1/auth/callback/microsoftPOST /api/v1/auth/magic-link/requestGET /api/v1/auth/magic-link/verifyGET /api/v1/auth/sessionPOST /api/v1/auth/logout
cd src/web/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -r ../../requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000cd src/web/frontend
npm install
npm run devpython3 -m pytest tests src/web/backend/tests- This project currently focuses on Swiss tender workflows and lighting product matching
- The platform is independent and not affiliated with
simap.ch


