Language: English | 中文
Self-hosted deal monitoring service with source adapters, deterministic rules, storage, scheduling, and notification hooks.
PriceReader monitors configured public sources, normalizes items, evaluates deterministic rules, stores matches, and can notify downstream services.
- Source adapter architecture
- Runtime source and rule configuration APIs
- Keyword, spec, and price ceiling rules
- Scheduler, source health checks, and pause/resume controls
- Stored item, evaluation, match, muted item, and notification views
- Users maintaining private deal watchlists
- Developers adding source adapters or rule logic
- Self-hosters who want local control over notifications
- Bypassing source terms of service
- Public deployment without auth
- Committing real watchlists, cookies, or notification URLs
Ready to use:
- Run locally with SQLite and example config
- Run full test suite with pytest
- Use Docker on port 8000
- Replace example rules with your private config
You must provide locally:
- Your own
config.ymlbased onconfig.example.yml - Allowed source URLs and polling intervals
- Optional notification webhook URL
- Network/proxy settings if required by your environment
cp .env.example .env
cp config.example.yml config.yml
python -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
pytest
uvicorn app.main:app --reloadFor Python projects on Windows, activate the virtual environment with .venv\Scripts\Activate.ps1 instead of . .venv/bin/activate.
cp .env.example .env
cp config.example.yml config.yml
cp docker-compose.example.yml docker-compose.yml
docker compose up --build
curl http://localhost:8000/healthz- Install Python 3.11.
- Create a virtual environment and run
pip install -e ".[dev]". - Copy
config.example.ymlto a private config file. - Set
PRICEREADER_CONFIGto that file and runuvicorn app.main:app --reload.
PRICEREADER_CONFIG: path to your private config fileDATABASE_URL: SQLite or other supported database URLNOTIFY_WEBHOOK_URL: optional notification endpointHTTP_PROXY,HTTPS_PROXY: optional proxy settingsLOG_LEVEL: runtime log verbosity
GET /healthzfor health checksGET /api/v1/summaryfor dashboard summaryGET/PUT/POST/DELETE /api/v1/sources*for source configGET/PUT/POST/DELETE /api/v1/rules*for rule configPOST /api/v1/sync/run-allto run sync/evaluation
pytest
python -m compileall app tests| Path | Purpose |
|---|---|
app/main.py |
FastAPI app entrypoint |
app/api/routes.py |
Runtime API routes |
app/ |
Adapters, extraction, storage, rules, notifications, scheduler |
tests/ |
Behavior and API tests |
config.example.yml |
Public-safe config template |
| Topic | English | Chinese |
|---|---|---|
| Deployment | docs/DEPLOYMENT.md | docs/DEPLOYMENT.zh-CN.md |
| Usage/API examples | docs/USAGE_EXAMPLES.md | docs/USAGE_EXAMPLES.zh-CN.md |
| Screenshots | docs/SCREENSHOTS.md | docs/SCREENSHOTS.zh-CN.md |
| AI handoff | docs/AI_HANDOFF.md | docs/AI_HANDOFF.zh-CN.md |
| Roadmap | docs/ROADMAP.md | docs/ROADMAP.zh-CN.md |
| Changelog | CHANGELOG.md | CHANGELOG.zh-CN.md |
This public release was prepared with Codex using GPT-5.4 and GPT-5.5 assistance. The source code, docs, and public-release cleanup were reviewed for public sharing, but this is a community project and not an official OpenAI product.
Good next tasks for an AI coding assistant:
- Add new source adapters
- Add UI tests for runtime config editing
- Improve duplicate/mute workflows
- Add auth and audit logging for shared deployments
Do not commit real .env files, API keys, webhook secrets, cookies, private media, production databases, logs, generated artifacts, or personal data. Start from the example config files and keep private values outside Git.
MIT