https://github.com/zpeleg/cheap-here
· scanned 2026-06-16 01:13 UTC (2 months, 1 week ago)
21 raw signals (0 security + 21 graph)
Last scanned 2 months, 1 week ago · v1 · 19 actionable findings from 1 signal source. 2 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 120 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
setChainNames |
software | healthy | frontend/src/chains.js:setChainNames |
chainName |
software | healthy | frontend/src/chains.js:chainName |
formatUpdated |
software | healthy | frontend/src/App.jsx:formatUpdated |
App |
software | healthy | frontend/src/App.jsx:App |
handleStoreSelect |
software | healthy | frontend/src/App.jsx:handleStoreSelect |
salePrice |
software | healthy | frontend/src/components/ItemsTable.jsx:salePrice |
effectivePrice |
software | healthy | frontend/src/components/ItemsTable.jsx:effectivePrice |
dealPct |
software | healthy | frontend/src/components/ItemsTable.jsx:dealPct |
savedVsMedian |
software | healthy | frontend/src/components/ItemsTable.jsx:savedVsMedian |
storeCount |
software | healthy | frontend/src/components/ItemsTable.jsx:storeCount |
otherChainPrices |
software | healthy | frontend/src/components/ItemsTable.jsx:otherChainPrices |
cheapestOtherPrice |
software | healthy | frontend/src/components/ItemsTable.jsx:cheapestOtherPrice |
formatISODate |
software | healthy | frontend/src/components/ItemsTable.jsx:formatISODate |
ItemsTable |
software | healthy | frontend/src/components/ItemsTable.jsx:ItemsTable |
hide |
software | healthy | frontend/src/components/ItemsTable.jsx:hide |
showChainTip |
software | healthy | frontend/src/components/ItemsTable.jsx:showChainTip |
toggleChainTip |
software | healthy | frontend/src/components/ItemsTable.jsx:toggleChainTip |
toggleSort |
software | healthy | frontend/src/components/ItemsTable.jsx:toggleSort |
ChainPricesTip |
software | healthy | frontend/src/components/ItemsTable.jsx:ChainPricesTip |
SaleModal |
software | healthy | frontend/src/components/ItemsTable.jsx:SaleModal |
StoreSelector |
software | healthy | frontend/src/components/StoreSelector.jsx:StoreSelector |
download |
software | healthy | etl/scraper.py:27 |
_run |
software | healthy | etl/scraper.py:40 |
load_city_names |
software | healthy | etl/cities.py:17 |
resolve_city |
software | healthy | etl/cities.py:21 |
normalize_store_id |
software | healthy | etl/db.py:21 |
__init__ |
software | healthy | etl/db.py:77 |
create_schema |
software | healthy | etl/db.py:80 |
load_price_csv |
software | dead | etl/db.py:125 |
load_promo_csv |
software | dead | etl/db.py:162 |
active_promos_per_branch |
software | healthy | etl/db.py:181 |
load_store_csv |
software | dead | etl/db.py:215 |
load_store_rows |
software | healthy | etl/db.py:239 |
latest_per_branch |
software | healthy | etl/db.py:251 |
branches |
software | healthy | etl/db.py:268 |
close |
software | healthy | etl/db.py:286 |
_read_csv |
software | healthy | etl/db.py:290 |
_select_columns |
software | healthy | etl/db.py:310 |
_promo_number |
software | healthy | etl/db.py:318 |
_promo_date |
software | healthy | etl/db.py:331 |
_coerce_list |
software | healthy | etl/db.py:342 |
_flatten_promo_rows |
software | healthy | etl/db.py:352 |
_resolve_chains |
software | healthy | etl/config.py:17 |
load_config |
software | healthy | etl/config.py:25 |
_findtext_ci |
software | healthy | etl/stores_xml.py:40 |
_clean |
software | healthy | etl/stores_xml.py:49 |
store_xml_paths |
software | healthy | etl/stores_xml.py:53 |
parse_stores_xml |
software | healthy | etl/stores_xml.py:60 |
load_stores_from_xml |
software | healthy | etl/stores_xml.py:91 |
_item |
software | healthy | etl/test_export.py:7 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
TASKS.md |
software | healthy | TASKS.md |
Makefile |
software | healthy | Makefile |
todo.md |
software | healthy | todo.md |
vite.config.js |
software | healthy | frontend/vite.config.js |
tailwind.config.js |
software | healthy | frontend/tailwind.config.js |
package.json |
software | healthy | frontend/package.json |
index.html |
software | healthy | frontend/index.html |
package-lock.json |
software | healthy | frontend/package-lock.json |
postcss.config.js |
software | healthy | frontend/postcss.config.js |
index.css |
software | healthy | frontend/src/index.css |
chains.js |
software | healthy | frontend/src/chains.js |
App.jsx |
software | healthy | frontend/src/App.jsx |
main.jsx |
software | healthy | frontend/src/main.jsx |
ItemsTable.jsx |
software | healthy | frontend/src/components/ItemsTable.jsx |
StoreSelector.jsx |
software | healthy | frontend/src/components/StoreSelector.jsx |
scraper.py |
software | healthy | etl/scraper.py |
cities.py |
software | healthy | etl/cities.py |
db.py |
software | healthy | etl/db.py |
config.py |
software | healthy | etl/config.py |
stores_xml.py |
software | healthy | etl/stores_xml.py |
chains.py |
software | healthy | etl/chains.py |
stores.json |
software | healthy | etl/stores.json |
test_export.py |
software | healthy | etl/test_export.py |
export.py |
software | healthy | etl/export.py |
cbs_cities.json |
software | healthy | etl/cbs_cities.json |
pyproject.toml |
software | healthy | etl/pyproject.toml |
convert.py |
software | healthy | etl/convert.py |
main.py |
software | healthy | etl/main.py |
requirements.txt |
software | healthy | etl/requirements.txt |
pipeline.yml |
software | healthy | .github/workflows/pipeline.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
frontend |
software | healthy | frontend |
src |
software | healthy | frontend/src |
components |
software | healthy | frontend/src/components |
etl |
software | healthy | etl |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
| Label | Layer | Status | Path |
|---|---|---|---|
BranchItem |
software | healthy | etl/db.py:34 |
StoreInfo |
software | healthy | etl/db.py:50 |
PromoItem |
software | healthy | etl/db.py:60 |
Store |
software | healthy | etl/db.py:76 |
Config |
software | healthy | etl/config.py:10 |
| Label | Layer | Status | Path |
|---|---|---|---|
prices |
data | healthy | etl/db.py |
stores |
data | healthy | etl/db.py |
promos |
data | healthy | etl/db.py |
| Label | Layer | Status | Path |
|---|---|---|---|
port:18 |
network | healthy | .github/workflows/pipeline.yml |
port:04 |
network | healthy | .github/workflows/pipeline.yml |
port:20 |
network | healthy | .github/workflows/pipeline.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
App |
frontend | healthy | frontend/src/App.jsx |
ItemsTable |
frontend | healthy | frontend/src/components/ItemsTable.jsx |
StoreSelector |
frontend | healthy | frontend/src/components/StoreSelector.jsx |
| Label | Layer | Status | Path |
|---|---|---|---|
GITHUB_TOKEN |
cicd | healthy | — |
CLOUDFLARE_ACCOUNT_ID |
cicd | healthy | — |
CLOUDFLARE_API_TOKEN |
cicd | healthy | — |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-0jk09a95 |
software | healthy | /tmp/repobility-clone-0jk09a95 |
| Label | Layer | Status | Path |
|---|---|---|---|
sqlite |
data | healthy | etl/main.py |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::pipeline |
cicd | healthy | .github/workflows/pipeline.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
pipeline |
cicd | healthy | .github/workflows/pipeline.yml |
This page is publicly accessible at:
https://repobility.com/scan/aa8bd1c1-f6e2-4ba8-a6fa-90df529ace90/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/aa8bd1c1-f6e2-4ba8-a6fa-90df529ace90/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.