KPPP Live Tenders Dashboard
Overview
A full-stack civic-tech project that scrapes live tenders from KPPP, persists them in PostgreSQL, and presents contractor-focused dashboards with KPIs, filters, sorting, export, and alerts — turning a fragmented public procurement portal into a filterable, deduplicated tender-intelligence workflow.
Problem
Contractors must repeatedly monitor fragmented public procurement pages across Goods, Works, and Services categories, and can miss real opportunities or deadlines because of it.
Approach
Built a Puppeteer scraping pipeline with CAPTCHA handling (Tesseract OCR / 2Captcha), a cron scheduler refreshing every 30 minutes, and PostgreSQL-level deduplication on source tab and tender number, feeding a React dashboard with KPI cards, advanced filters, sorting, and auto-refresh.
Architecture
Node.js/Express API, a Puppeteer scraper, a node-cron scheduler, a PostgreSQL store, a React dashboard, optional SMTP/Twilio alerts, and a Docker-ready deployment with a Render Blueprint configuration.
Results
- Scrape cadence
- Every 30 min
Outcomes
- Functional scrape-to-dashboard pipeline used as a practical civic-tech reference, with community traction (3 GitHub stars)
- Email (SMTP) and WhatsApp (Twilio) alerts for high-value tenders, plus CSV/Excel export and Recharts analytics
Links
Related projects
QUIKTENDERS
Public tender data collected, normalized, and deduplicated into a searchable, alert-ready discovery workflow.