How onellan/openbid works
OpenBid is a self-hosted, multi-tenant South African tender aggregation and tracking platform. Users access tender and workspace features through the Go web application; a separate worker synchronizes configured tender sources, queues document extraction, and supports Smart Keyword filtering. Extracted tender details are stored for search and tenant workflows, while configured alerts can be sent by email. The README documents the four-service deployment and extraction modes; sampled source confirms session persistence and the extraction client, but not every route-level call, so uncertain wiring is omitted.
Main entry points: store.go Persistence interface · runner.go Sync and extraction worker · app.go Web application · alerts.go Alerts
Components 20
Web Access
- Web application
internal/app/app.go - Authentication
internal/auth/session.go - Workspace actions
internal/app/workspace.go - Source scheduling
internal/app/admin.go
Tender Ingestion
- Sync and extraction worker
internal/worker/runner.go - Tender source adapters
internal/source/source.go - Extraction jobs
internal/store/store.go - Extractor client
internal/extract/client.go - Document extractor
extractor/app.py
Tender Intelligence
- Smart Keyword rules
internal/app/smart_keywords.go - Keyword evaluator
internal/smartkeywords/evaluator.go - Tender search
internal/app/keyword_search.go - Tender lifecycle
internal/tenderstate/expiry.go
State and Alerts
- Persistence interface
internal/store/store.go - SQLite database
internal/store/sqlitestore.go - Alerts
internal/app/alerts.go - Email service
internal/mail/service.go
Other components
- Tenant user
- Tender source sites
- SMTP provider
Connections 24
- Tenant user → Web application: uses
- Web application → Authentication: authenticates
- Web application → Workspace actions: serves
- Web application → Source scheduling: manages schedules
- Source scheduling → Persistence interface: reads and writes
- Sync and extraction worker → Tender source adapters: fetches tenders
- Tender source adapters → Tender source sites: requests listings
- Sync and extraction worker → Persistence interface: records sync
- Sync and extraction worker → Keyword evaluator: checks extraction rules
- Sync and extraction worker → Extraction jobs: queues extraction
- Extraction jobs → Persistence interface: persists jobs
- Sync and extraction worker → Extractor client: requests extraction
- Extractor client → Document extractor: posts document URL
- Document extractor → Tender source sites: fetches documents
- Smart Keyword rules → Persistence interface: manages rules
- Tender search → Persistence interface: queries tenders
- Workspace actions → Persistence interface: reads and writes
- Sync and extraction worker → Tender lifecycle: checks expiry
- Sync and extraction worker → Persistence interface: persists tenders
- Alerts → Persistence interface: loads alert data
- Alerts → Email service: sends notifications
- Email service → SMTP provider: sends email
- Persistence interface → SQLite database: reads and writes
- Authentication → Persistence interface: loads sessions