Why I built this
I run a small environmental health company in Abuja. Tenders reach us as a PDF from a portal and a screenshot of the posting page, and they pile up in folders. Two things cost us bids: a closing date read wrong, and a compliance certificate like PENCOM or NSITF that expires before the closing date but after anyone last looked at it. There is a third, quieter problem. Postings get edited after publication. A deadline moves or a requirement appears, and once you have downloaded the page you have no way to prove what it said when you decided to bid.
What it does
Tender Vault is a skill for UGOS. You point it at two folders on the NAS: the tenders you downloaded, and your certificates. It reads each tender for the reference, buyer, closing date, eligibility requirements and submission method. It compares a posting with an earlier version of the same reference, so an extension or an added requirement is reported instead of missed. It reads the posting screenshot and the certificate scans with local vision. Then it puts the two together: it notices that a certificate expires before a closing date, and it notices when the page shows a different deadline from the document, naming both instead of choosing one. Every file is fingerprinted with SHA-256, tagged open, closing-soon, closed, expired-certificate or needs-review, archived by closing month after approval, and recorded in a bid ledger.
How I built it
A parent SKILL.md delegates to four registered UGOS experts. ug-document reads tenders and compares versions. ug-photo reads posting screenshots and certificate scans. ug-filesystem, ug-filemgr and file-workflow fingerprint, tag and archive. ug-knowledge keeps the ledger. Steps 1 to 3 are read-only. Nothing is written until the user approves the exact file list, and originals are never moved or deleted.
What was hard
Real tender documents are messier than examples. My first date reader missed "deadline for Application submission is: 7th August 2026", because of the words between "for" and "submission" and the ordinal in the day. I found it by running the extractor over a 45 page Kenyan prequalification document and a 103 page South African tender. Both now parse correctly.
What I tested
A local dry run over those two real tender PDFs and four live UNDP notices confirmed extraction, closing windows, certificate expiry against a closing date, revision detection, the approval gate, tamper detection and empty folder handling. What is left for the NAS is OCR on real certificate scans.
Built With
- document-analysis