Find every tender. Price every line item. Submit before the deadline.
Four procurement portals. 19K price records. One pipeline.
Each stage has a quality gate that must pass before the bid advances. Gates prevent progression without the right data. The same pipeline drives CLI, TUI, and web console.
All sec services run under PM2 on a single machine. Shared virtualenv, shared sdk/, no Docker overhead. Each service has its own port, memory cap, and restart policy.
Every parameter has a specific reason. These values were not guessed — they were arrived at through failure analysis.
Two databases serve different purposes. harga_v8.db is the operational store. sec.db (Postgres) holds tender corpus and analytics.
| harga_v8.db (SQLite) | Bids, entities, users, workflow, approvals, RFQs, email, costing, analytics events, drop-ins, freight, CV records, seed history |
| sec.db (PostgreSQL) | 786 MB — tender corpus, buyer companies, supplier index (8.5K records), price research, document store |
| price_memory.db (SQLite) | 19K+ historical price records. Shared between yellowpages and harga via symlink. Weekly seed from awards. |
| Entity vault (SQLite) | Encrypted credentials, portal accounts, API keys per bidding entity |
| Artifact gallery (SQLite) | 821+ artifacts (technical, corporate, financial, capability docs). File storage on NAS. |
| Redis | Session cache, rate limiter counters, job sync state (optional, graceful degrade) |
Cloudflare Basic Auth at edge. HMAC session tokens with 24h expiry. CSRF middleware on all mutation endpoints (X-Requested-With check). Beacon analytics exempted.
X-Content-Type-Options: nosniff, X-Frame-Options: DENY, X-XSS-Protection: 1; mode=block. No cookie-based auth — tokens in Authorization header only.
harga.roowang.com via Cloudflare → Caddy → localhost:3647. Caddy terminates TLS. Cloudflare provides DDoS mitigation + IP filtering.
V8_INTERNAL_SECRET for inter-service auth. All sec services share a venv but authenticate via HMAC. Failsafe runs on segregated recovery plane.
Credentials vault per bidding entity (Consurv, Dyna-Segmen, Dyna-OM). Portal passwords encrypted at rest. SoftCert PINs in accounts.json (gitignored).
Dry-run default for ePerolehan submissions. Kill-switch file at data/eperolehan/eperolehan_submit.enabled. Value ceiling MYR 200K per bid.
Resource-verb pattern. Every pipeline stage has a corresponding CLI command. Same SDK, same data — works over SSH, in tmux, or via ttyd in the browser.
harga tender list — list/filter tenders by portal, status, entity. harga tender show <id> — full tender context.
harga scope run — extract items from docs. harga price auto — auto-price from memory. harga price explain — pricing rationale.
harga bid run --from stage --through stage — execute pipeline segment. harga bid resume — continue from last gate failure.
harga rfq create/send/follow-up — supplier RFQ lifecycle. harga quote ingest/compare/accept — quote management.
harga approval request/approve/reject/withdraw/list-pending — full approval workflow with audit trail.
harga ops dashboard — Textual Bloomberg-style TUI. 8-stage pipeline view. Keyboard-driven (1-8 filters, / command mode, r refresh).
The bidding OS is a federation with a shared contract layer. Each component has a single responsibility and a well-defined interface.
harga.work — the single entry point. Serves the web console and routes to the engine. Owns no data. Aggregates every product under one domain.
orkes_sec — all data, all business logic. 786 MB tender corpus, 19K pricing records, 548+ bids, full audit trail. Products call in; they don't own databases.
orkes_os — the constitution. Typed vocabulary, transition graph, audit log, safety walls. Every product imports this. Prevents disagreement on what words mean.
harga.work is the primary product. Supporting products feed data in and close loops after submission.
Tender-to-bid pipeline. CLI (harga-cli v0.3.0), TUI, and web console. The money machine.
OSINT + human intelligence layer. Relationship context, competitor intel, market signals that machines can't see.
Post-award execution. Project tracking, milestones, delivery. Closes the feedback loop from execution back to bid strategy.
Operator cockpit. Pipeline management, gallery, pricing tools, tender triage. The shared front door to engine data.