Tokens
Track, visualize, and compete on AI coding assistant token usage across Claude Code, Cursor, OpenCode, Codex, Gemini, Kimi, and Qwen. The Kardashev Scale for AI Devs.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A map-based portal of near-real-time conditions for oyster growers in Thorndyke Bay (Hood Canal, WA): tides and low-tide work windows, weather and marine alerts, radar, rain, water quality and the LiveOcean water forecast, shellfish status, and Sentinel-2 satellite imagery. The map also shows the farm layout, tide-height lines, geotagged farm photos, and on-farm temperature sensors. See PLAN.md for the full roadmap.
It started as the Phase 1 MVP (public data only) and now includes the first Phase 2 pieces (farm sensors via The Things Network). It is a static site with no server or database:
GitHub Actions: update.yml (every ~20 min)
└─ ingest/fetch.py → pulls NOAA, NWS, WA DOH, NANOOS/IOOS, IEM, LiveOcean, The Things Network
└─ writes web/data/*.json
└─ GitHub Pages serves web/ (MapLibre map + uPlot charts)
GitHub Actions: imagery.yml (twice daily)
└─ imagery/run.py → Sentinel-2 products on the imagery-data branch, copied into web/data/imagery/
Python 3.9+ with only the standard library, no installs needed.
python3 ingest/fetch.py
python3 serve.py
Then open http://localhost:8000. Re-run fetch.py to refresh the data. --only tides forecast fetches a subset.
Tests:
python3 -m unittest discover ingest/tests
ingest/
config.py site location, station IDs, NWS grid/zone
fetch.py runs every source, writes web/data/*.json + meta.json
sources/ one module per data source
common.py shared helpers: HTTP, time parsing, unit conversion
tides.py NOAA CO-OPS predictions (Lofall 9445088)
nws.py NWS gridded forecast, alerts (PZZ135), surface observations
rain.py observed rain: Stage IV at the site + CoCoRaHS gauges (via IEM)
sun.py sunrise/sunset (computed)
doh.py WA DOH biotoxin status + commercial growing areas
water.py NANOOS/IOOS ERDDAP water temp, salinity, oxygen
liveocean.py UW LiveOcean model surface temp/salinity nowcast + forecast via OPeNDAP
(shown as the "Water forecast" card and map markers; see docs/liveocean-plan.md)
sensors.py farm LoRaWAN temperature nodes via The Things Network
(SENSORS_MOCK=1 python3 ingest/fetch.py --only sensors for fake data;
adding gateways and sensors: docs/sensors.md)
archive_sensors.py appends every sensor reading to monthly CSVs on the sensor-data branch
tests/ unittest tests (sensor archive, LiveOcean ingest, HOBO archive)
imagery/ satellite pipeline (needs numpy/rasterio: pip install -r imagery/requirements.txt)
run.py Sentinel-2 true color + clear-sky % + tide at capture -> imagery.json
grid.py shared UTM 10N 10 m grid every sensor/model output is resampled onto
(shown as the "Satellite view" map layer and Satellite card; see docs/imagery-plan.md)
stac.py STAC scene search with catalog fallback and retries
s2.py Sentinel-2 L2A: tiles -> scenes, read onto the grid, clear-sky stats, true color
settings.py catalogs, lookback/retention days, clear-sky thresholds
baseline/ scripts run by hand; outputs are committed to web/baseline/ and not re-run by CI
(pip install -r baseline/requirements.txt)
liveocean_climatology.py LiveOcean monthly climatology (2014-2024) at the model cells:
surface + bottom temp/salinity/oxygen -> liveocean_climatology.json (one-off)
tide_contours.py tide-height lines (ft MLLW) from the NOAA NCEI Puget Sound DEM
-> tide_contours.geojson (one-off)
hobo_archive.py archival HOBO loggers in the Step 4 bag (2024-26) -> thorndyke_hobo.json
(stdlib only; re-run after each logger download; see docs/archival-temperature-plan.md)
photos/ farm photos for the map (originals git-ignored; see photos/README.md)
build.py geotagged photos -> web/photos/ copies + photos.geojson (needs Pillow)
web/
index.html map (radar, satellite, farm layout, tide lines, photos, sensors) +
"Today at Thorndyke" panel
tides.html low-tide work-window calendar with .ics export
about.html data sources and freshness
farm-layout.geojson hand-drawn farm layout shown on the map
baseline/ committed static data (not regenerated by the workflow)
photos/ web copies of farm photos + photos.geojson (from photos/build.py)
js/, css/, icon.svg, manifest.webmanifest
docs/ plans (LiveOcean, imagery, archival temperature), sensor how-to, solar gateway assembly
.github/workflows/update.yml scheduled fetch + Pages deploy (copies the imagery-data branch in,
archives sensor readings to the sensor-data branch)
.github/workflows/imagery.yml twice-daily imagery build -> imagery-data branch
ingest/sources/<name>.py with a fetch() -> dict function that returns JSON-serializable data.
A source that needs its previous output or another source's output takes fetch(ctx) instead
and is listed in WITH_CONTEXT.SOURCES in ingest/fetch.py.load("<name>") from web/js/common.js.A failing source never blocks the others. In CI the previously published file is reused, and the page shows how old the data is.
main, every ~20 minutes, and on demand (Actions → Run workflow).GitHub turns off scheduled workflows in public repos after 60 days with no commits. Push a commit or re-enable the workflow when that happens.
Advisory only. Official harvest closures come from the WA Department of Health.