Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Search Caltrans construction bids and set email alerts
Translation pending
AI summary · website content
BusinessPython · JavaScriptGitHub @mab899195OnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Finds Caltrans projects that fit an electrical contractor, before and after they advertise, and shows who wins them.
Out of the box it shows Districts 07/08 at $1M–$3M.
python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
.venv/bin/python -m scraper.run manual # scrape once (a few minutes the first time)
.venv/bin/python app.py # open http://127.0.0.1:5050
Locally the data lives in SQLite at data/bids.db.
| Variable | Purpose |
|---|---|
BID_FINDER_COMPANY | Your company name. It's added to the User-Agent and highlighted ("YOU") in bid results. |
BID_FINDER_CONTACT | An email or phone in the User-Agent, so Caltrans can reach you. |
DATABASE_URL | Postgres connection string. Required on Vercel. |
CRON_SECRET | Protects the daily scrape endpoint on Vercel. |
BID_FINDER_ALERT_TO | Recipient shown on the demo alert emails. |
The default districts, estimate range and keyword list are in config.py.
app.py.DATABASE_URL. Without it the app falls back to a temporary SQLite file
that is wiped whenever the function restarts.CRON_SECRET (any random string) and, optionally, BID_FINDER_COMPANY
and BID_FINDER_CONTACT.vercel.json schedules the daily scrape at 16:30 UTC, which is
9:30 a.m. Pacific in summer and 8:30 a.m. in winter. Click Refresh now
once to load data right away.On a hosted deployment, Refresh now runs at most once every 15 minutes, so visitors can't make the site hit Caltrans repeatedly. Each run stops optional downloads after 4 minutes, within Vercel's 5-minute function limit, and the next run continues where it stopped.
Edit the paths in deploy/com.caltransbidfinder.scrape.plist, then:
cp deploy/com.caltransbidfinder.scrape.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.caltransbidfinder.scrape.plist
/api/now/sp/page) for the advertised list (timespan=all), the
upcoming list (timespan=upcoming) and each project's bid items. It downloads
the public Bid Summary PDFs for results.pypdf. A+B (cost + time) contracts are supported.db.py).BID_FINDER_ALERT_TO.robots.txt disallows automated access. This tool reads it once a
day at very low volume with an identifying User-Agent. Revisit this if Caltrans
objects or publishes a feed..venv/bin/pytest
Tests run against real responses and Bid Summary PDFs saved in tests/fixtures/.