Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
Ranked tender opportunities for Ontario and Québec contractors, with every disqualifying clause cited to its page.
Translation pending
BusinessPython · TypeScriptGitHub @AbdulAliMamnunOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
AI-powered tender intelligence for Canadian contractors — opportunity recommendations, citation-verified compliance, and bid risk simulation.
Taken from the repository README
Loading the full README.
Read the full README ↗Citation-verified compliance intelligence for Canadian public tenders.
Under Canada's Contract A framework, one missed mandatory clause voids an otherwise winning bid. Estimators read 34–93-page tender packages under deadline pressure, and the clauses that disqualify them are often buried deep — page 75 of a 93-page RFT. TenderSentry extracts every mandatory requirement, proves each one with a verbatim quote and true page number, and tells a contractor whether they can even submit.
Every displayed requirement carries a verbatim quote and a true page number, verified by exact-substring match against the source PDF. If the model's quote can't be found on the cited page, the requirement is repaired or dropped — never shown. No hallucinated compliance advice, ever.
flowchart LR
A[Tender PDF] --> B[Page-tagged<br/>provenance store]
B --> C[Map-reduce extraction<br/>GPT-4o, temperature 0]
C --> D{Hallucination guard<br/>exact-substring check}
D -->|quote verified| E[Phase classifier]
D -->|not found| X[Dropped<br/>never displayed]
E --> F[Qualification engine<br/>rules + LLM judge]
F --> G[Bid board<br/>quote + page on every card]
The entire codebase was built through Codex working against written specs across the Build Week window. That spec-first workflow produced the extraction pipeline, hallucination guard, phase classifier, qualification engine, Streamlit UI, and accompanying test suite.
The configured OpenAI model is gpt-4o. It is used for map-reduce requirement extraction, phase classification, and the fuzzy qualification judge. All three call sites use temperature 0 and JSON-object response mode. Extracted requirements then pass through the hallucination guard: each verbatim quote is normalized and checked against its cited source page, cross-page repair is attempted when necessary, and any quote that still cannot be verified is dropped before classification, qualification, or display.
| Tender | Pages | Extracted | Verified | Dropped by guard | Verdict |
|---|---|---|---|---|---|
| Federal crane rental RFSO | 55 | 98 | 92 | 6 | No bid (fax submission required) |
| Muskoka Lakes T-2026-31 | 34 | 33 | 31 | 2 | No bid (physical delivery required) |
| Augusta PW-2026-04 | 65 | 88 | 87 | 1 | No bid (physical delivery to clerk's office) |
| Kincardine CS-2025-01 | 93 | 79 | 76 | 3 | Review (33 items for human judgment) |
12 fabricated or unverifiable requirements were caught and dropped by the guard before any human saw them.
Buried clauses it surfaced, with citations:
pip install -r requirements.txt
cp .env.example .env # add your OPENAI_API_KEY
python3 -m extract.pipeline <tender_id> --force # extraction + verification
python3 -m match.engine <tender_id> --force # qualification
streamlit run ui/app.py
Tender PDFs live in data/tenders/<tender_id>/raw/. The firm profile is data/profile.json.
data/ is committed, and what regeneratesCommitted, because something downstream reads it and could not rebuild it:
| Path | Why it is in git |
|---|---|
data/tendersentry-slim.db | The daily refresh runs against it. A projection of the full database, rebuilt by scripts/build_slim_db.py after every retrain, and stamped with the source it came from. |
data/statcan/bcpi-*.json | The 4 KB price-index slice the scale estimator deflates with. |
model/artifacts/scale-estimator.* | The fitted estimators. Published band figures are unreproducible without them. |
web/data/** | The serving artifacts the site imports statically. |
Gitignored, because each is a cache or a working file that regenerates on demand:
data/tendersentry.db (the full database), data/seao/ (downloaded weekly OCDS
files), data/model_cache/ (sentence-transformer vectors), data/statcan/*.csv,
data/rankings/, data/census/.
data/open_tender_notices.csv was tracked and is now gitignored.
docs/STATE-20260830.md §10 left this open as UNVERIFIED; it is answered. Nothing
reads it as data. Both references — ingest/canadabuys.py:334 and
notices/canadabuys.py:130 — pass it to fetch_notices_csv as a download
destination, and that function re-downloads whenever the file on disk is older than
24 hours (ingest/canadabuys.py:42). It is a download cache, exactly like
data/seao/. Keeping it tracked was actively harmful: the daily workflow stages only
web/data and the slim database, so the committed copy would have frozen at its
2026-07-29 state while the database it fed moved on — 6 MB in git disagreeing with
everything derived from it. Regenerate with
python3 -m notices.ingest --source canadabuys.
bonding_capacity in <region>) is downgraded to fuzzy judgment with a logged warning.Built solo during OpenAI Build Week, July 2026.