[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-79242":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":13,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":14,"rankGlobal":8,"rankLanguage":8,"license":15,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":18,"hasPages":16,"topics":19,"createdAt":8,"pushedAt":8,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":13,"starSnapshotCount":13,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},79242,"FormCmsPortal","appledog-xyz\u002FFormCmsPortal","appledog-xyz",null,"Python",105,1940,151,0,46.86,"GNU Affero General Public License v3.0",false,"main",true,[],"2026-06-12 04:01:24","# PolyWeather Pro\n\nProduction weather-intelligence stack for temperature settlement markets.\n\nOfficial dashboard: [polyweather-pro.vercel.app](https:\u002F\u002Fpolyweather-pro.vercel.app\u002F)\n中文说明: [README_ZH.md](README_ZH.md)\n\nPublic docs center: `\u002Fdocs\u002Fintro` on the main site (bilingual product documentation, including intraday analysis, calibrated probability, model stack, TAF, settlement sources, history, and extension).\n\n## Product Screenshots\n\n### Global Dashboard\n\n![PolyWeather global dashboard](docs\u002Fimages\u002Fdemo_map.png)\n\n### City Analysis (Ankara)\n\n![PolyWeather Ankara analysis](docs\u002Fimages\u002Fdemo_ankara.png)\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=yangyuan-zhen\u002FPolyWeather&type=Date)](https:\u002F\u002Fstar-history.com\u002F#yangyuan-zhen\u002FPolyWeather&Date)\n\n## Product Status (2026-05-23)\n\n- Subscription live: `Pro Monthly 10 USDC`.\n- Points system live: earn via group chat, welcome bonus (+20), first-message-of-day bonus (+2), weekly participation rewards.\n- `\u002Fcity` and `\u002Fdeb` now free (daily cap 10 each); points redeemable for payment discount (`500 pts = 1 USDC`, max `3 USDC`).\n- Weekly leaderboard rewards restructured: smaller point bonuses for winners (200\u002F100\u002F50), all active users receive participation rewards.\n- Onchain checkout live: Polygon contract checkout (USDC \u002F USDC.e).\n- Auto-reconciliation live: event listener + periodic confirm loop.\n- Ops dashboard live: `\u002Fops` for memberships, leaderboard, manual point grants, and payment incident triage.\n- Lightweight observability live: `\u002Fhealthz`, `\u002Fapi\u002Fsystem\u002Fstatus`, `\u002Fmetrics`.\n- Runtime state, cache, and core offline training\u002Fbackfill flows now use SQLite as the primary path; legacy JSON\u002FJSONL files remain only for migration, export, and explicit fallback input.\n- EMOS\u002FCRPS calibration is wired and trainable, but production should stay on `legacy` or `emos_shadow`; `emos_primary` is only for candidates that pass local offline evaluation and manual rollout.\n- Intraday analysis is now positioned as a professional meteorology read: headline, confidence, base\u002Fupside\u002Fdownside paths, next observation point, evidence chain, failure modes, and confirmation rules.\n- Intraday modal now blocks stale cached detail during refresh, so users do not briefly trade off old city\u002Fdate data before full detail arrives.\n- City decision cards now include the AI airport read: METAR, DEB, model cluster, and the AI expected-high center are resolved before mapping the result to temperature buckets.\n- AI airport reads now use in-page memory cache, browser `localStorage`, and backend short-TTL cache; returning from another dashboard tab restores existing stream text or final results before any new request is needed.\n- Market bucket matching now uses the full `all_buckets` surface and strict exact \u002F range \u002F or-higher \u002F or-lower direction checks, reducing bad matches to unreasonable tail buckets.\n- The card label “model-market difference” means `model probability - market-implied probability`; positive values indicate weather probability above market pricing, while negative values indicate the YES is already priced more fully.\n- Calibrated model probability is now the primary probability panel. It shows the active production probability engine (legacy Gaussian or EMOS), while model consensus remains a secondary reference.\n- Non-Hong Kong airport cities now ingest `TAF` and parse `FM \u002F TEMPO \u002F BECMG \u002F PROB30\u002F40`.\n- Temperature chart now overlays `TAF Timing` markers near the expected peak window.\n- Trade cue now combines upper-air structure, `TAF`, market crowding, and `edge_percent`.\n- Browser extension now uses `DEB` for multi-day forecast and stays positioned as a lightweight lead-in to the main site.\n- Official nearby-network layer now covers `MGM` (Turkey), `CMA\u002FNMC` (Mainland China), `JMA AMeDAS` (Japan), `AMOS` (Korea, runway-level, Seoul\u002FBusan), `HKO` (Hong Kong), and `CWA` (Taiwan).\n- Tokyo now ingests Haneda `JMA AMeDAS` 10-minute temperature as the official enhancement layer.\n- Frontend design system overhauled: unified CSS token system, eliminated `!important` abuse (134→49 in light theme), consolidated breakpoints (18→10), migrated hardcoded colors to CSS variables, added ARIA attributes and focus-visible keyboard navigation. See `docs\u002Ffrontend-ui-design-review.md` for the full audit trail.\n\n## License & Commercial Boundary\n\nThis repository is licensed under **GNU AGPL-3.0 only** from `2026-03-30` onward.\n\n- Public in repo: weather aggregation, core analysis, dashboard, bot baseline, and standard payment flow.\n- Not included in this repository: private production data, internal operating thresholds, commercial risk rules, pricing strategy details, and growth tooling.\n- Trademark, brand, domain, production databases, and hosted-service operations are **not** granted by the code license.\n\nSee: [AGPL-3.0 & Commercial Boundary](docs\u002FOPEN_CORE_POLICY.md)\n\n## Core Capabilities\n\n- Aggregates observations and forecasts for 51 monitored cities.\n- Uses DEB (Dynamic Error Balancing) to blend multi-model highs.\n- Generates settlement-oriented calibrated probability buckets (`mu` + bucket distribution) via legacy Gaussian or EMOS\u002FCRPS calibration.\n- Adds city decision cards that combine AI airport reads, expected-high centers, full market-bucket mapping, and model-market difference in one view.\n- Reuses one analysis core across web dashboard and Telegram bot.\n- Adds payment audit trails, replay tooling, and incident visibility in ops.\n- Adds peak-window-oriented intraday analysis with meteorology headline, path buckets, evidence chain, invalidation rules, and confirmation rules.\n- Adds airport-side `TAF` timing overlays and airport suppression\u002Fdisruption interpretation for non-Hong Kong airport cities.\n- Adds official nearby-network and runway-level enhancement layers for China, Japan, Korea (AMOS runway sensors for Seoul\u002FBusan), Hong Kong, Taiwan, and Turkey without replacing airport settlement anchors.\n\n## Reference Architecture\n\n```mermaid\nflowchart LR\n    U[\"Users (Web \u002F Telegram)\"] --> FE[\"Next.js Frontend (Vercel)\"]\n    U --> BOT[\"Telegram Bot (VPS)\"]\n    FE --> API[\"FastAPI \u002Fweb\u002Fapp.py\"]\n    BOT --> API\n\n    API --> WX[\"Weather Collector\"]\n    WX --> METAR[\"Aviation Weather (METAR)\"]\n    WX --> TAF[\"Aviation Weather (TAF)\"]\n    WX --> MGM[\"MGM (Turkey station network)\"]\n    WX --> OM[\"Open-Meteo\"]\n    WX --> JMA[\"JMA AMeDAS (Japan)\"]\n    WX --> AMOS[\"AMOS runway sensors (Korea)\"]\n    WX --> HKO[\"HKO \u002F CWA \u002F NOAA \u002F Official settlement sources\"]\n\n    API --> ANA[\"DEB + Trend + Probability + Market Scan\"]\n    ANA --> PAY[\"Payment State (Intent + Event + Confirm Loop)\"]\n    ANA --> STATE[\"SQLite runtime state\"]\n```\n\n## Monitored Cities (51)\n\n- Europe \u002F Middle East \u002F Africa: Ankara, Istanbul, Moscow, London, Paris, Munich, Milan, Warsaw, Madrid, Tel Aviv, Amsterdam, Helsinki, Lagos, Cape Town, Jeddah\n- APAC: Seoul, Busan, Hong Kong, Lau Fau Shan, Taipei, Shanghai, Beijing, Qingdao, Wuhan, Chengdu, Chongqing, Shenzhen, Guangzhou, Singapore, Tokyo, Kuala Lumpur, Jakarta, Manila, Wellington\n- Americas: Toronto, New York, Los Angeles, San Francisco, Aurora, Austin, Houston, Chicago, Dallas, Miami, Atlanta, Seattle, Mexico City, Buenos Aires, Sao Paulo, Panama City\n- South Asia: Lucknow, Karachi\n\n## Quick Start\n\n### Backend + Bot (Docker)\n\n```bash\ndocker compose up -d --build\n```\n\n### Frontend (local)\n\n```bash\ncd frontend\nnpm ci\nnpm run dev\n```\n\n## Recent Highlights\n\n- Airport-linked contracts use the METAR \u002F airport primary observing site as the settlement anchor. Wunderground pages are reference\u002Fhistory pages, not stations.\n- Taipei and Shenzhen retain their explicitly configured station history pages for reconciliation, but the docs avoid describing Wunderground itself as a physical station.\n- Hong Kong keeps `HKO` official readings in dashboard and history, without falling back to airport METAR lines.\n- Intraday analysis now separates meteorology conclusion, evidence chain, invalidation rules, confirmation rules, calibrated probability, and market reference.\n- `TAF` is used as an airport-side confirmation layer, not as the main temperature model.\n- Calibrated probability uses legacy Gaussian (default) or EMOS\u002FCRPS when evaluated; model vote counts remain an explanatory consensus line, not the final probability.\n- Browser extension remains a lightweight monitoring + basic-bias product, while the site holds the full analysis experience.\n\n## Runtime Data (Recommended on VPS)\n\nUse external runtime storage to avoid SQLite\u002Fgit conflicts:\n\n```env\nPOLYWEATHER_RUNTIME_DATA_DIR=\u002Fvar\u002Flib\u002Fpolyweather\nPOLYWEATHER_DB_PATH=\u002Fvar\u002Flib\u002Fpolyweather\u002Fpolyweather.db\nPOLYWEATHER_STATE_STORAGE_MODE=sqlite\n```\n\n## EMOS Local Training\n\nDo not run full EMOS retraining on a small VPS. The VPS should collect data and load approved calibration files; training should run on a local\u002Fdev machine using a copied production SQLite database:\n\n```powershell\nscp root@38.54.27.70:\u002Fvar\u002Flib\u002Fpolyweather\u002Fpolyweather.db E:\\web\\PolyWeather\\data\\polyweather-prod.db\n$env:POLYWEATHER_DB_PATH=\"E:\\web\\PolyWeather\\data\\polyweather-prod.db\"\n$env:POLYWEATHER_RUNTIME_DATA_DIR=\"E:\\web\\PolyWeather\\artifacts\\local_runtime\"\npython scripts\\auto_retrain_probability_calibration.py --verbose --snapshot-limit 50000\n```\n\nPromote a generated `default.json` only when `auto_retrain_report.json` has `ready_for_promotion=true`, and prefer `emos_shadow` before enabling `emos_primary`.\n\n## Ops Verification\n\n### Health \u002F system status \u002F metrics\n\n```bash\ncurl http:\u002F\u002F127.0.0.1:8000\u002Fhealthz\ncurl http:\u002F\u002F127.0.0.1:8000\u002Fapi\u002Fsystem\u002Fstatus\ncurl http:\u002F\u002F127.0.0.1:8000\u002Fmetrics\n```\n\n### Frontend cache headers\n\n```bash\n.\u002Fscripts\u002Fvalidate_frontend_cache.sh \"https:\u002F\u002Fpolyweather-pro.vercel.app\"\n```\n\n### Payment auto-reconciliation logs\n\n```bash\ndocker compose logs -f polyweather | egrep \"payment event loop started|payment confirm loop started|payment auto-confirmed\"\n```\n\n### Payment runtime\n\n```bash\ncurl http:\u002F\u002F127.0.0.1:8000\u002Fapi\u002Fpayments\u002Fruntime\n```\n\n## Telegram Commands\n\n| Command | Purpose |\n| :-- | :-- |\n| `\u002Fcity \u003Cname>` | City real-time analysis |\n| `\u002Fdeb \u003Cname>` | DEB historical reconciliation |\n| `\u002Ftop` | User leaderboard |\n| `\u002Fid` | Show current chat ID |\n| `\u002Fdiag` | Startup diagnostics |\n| `\u002Fhelp` | Help and usage |\n\n## Documentation Index\n\n- Chinese overview: [README_ZH.md](README_ZH.md)\n- Chinese API guide: [docs\u002FAPI_ZH.md](docs\u002FAPI_ZH.md)\n- TAF signal guide (ZH): [docs\u002FTAF_SIGNAL_ZH.md](docs\u002FTAF_SIGNAL_ZH.md)\n- Model stack & DEB (ZH): [docs\u002FMODEL_STACK_AND_DEB_ZH.md](docs\u002FMODEL_STACK_AND_DEB_ZH.md)\n- Commercialization: [docs\u002FCOMMERCIALIZATION.md](docs\u002FCOMMERCIALIZATION.md)\n- AGPL-3.0 policy: [docs\u002FOPEN_CORE_POLICY.md](docs\u002FOPEN_CORE_POLICY.md)\n- Supabase setup (ZH): [docs\u002FSUPABASE_SETUP_ZH.md](docs\u002FSUPABASE_SETUP_ZH.md)\n- Configuration & secrets (ZH): [docs\u002FCONFIGURATION_ZH.md](docs\u002FCONFIGURATION_ZH.md)\n- Frontend deployment (ZH): [docs\u002FFRONTEND_DEPLOYMENT_ZH.md](docs\u002FFRONTEND_DEPLOYMENT_ZH.md)\n- Tech debt (ZH): [docs\u002FTECH_DEBT_ZH.md](docs\u002FTECH_DEBT_ZH.md)\n- Airport realtime sources: [docs\u002FAIRPORT_REALTIME_SOURCES.md](docs\u002FAIRPORT_REALTIME_SOURCES.md)\n- Airport market monitor (ZH): [docs\u002FAIRPORT_MARKET_MONITOR_ZH.md](docs\u002FAIRPORT_MARKET_MONITOR_ZH.md)\n- Services overview (ZH): [docs\u002FSERVICES_ZH.md](docs\u002FSERVICES_ZH.md)\n- Payment verification: [docs\u002Fpayments\u002FPOLYGONSCAN_VERIFY.md](docs\u002Fpayments\u002FPOLYGONSCAN_VERIFY.md)\n- Payment audit: [docs\u002Fpayments\u002FPAYMENT_AUDIT_ZH.md](docs\u002Fpayments\u002FPAYMENT_AUDIT_ZH.md)\n- Payment V2 upgrade: [docs\u002Fpayments\u002FPAYMENT_UPGRADE_V2_ZH.md](docs\u002Fpayments\u002FPAYMENT_UPGRADE_V2_ZH.md)\n- Ops admin guide: [docs\u002FOPS_ADMIN_ZH.md](docs\u002FOPS_ADMIN_ZH.md)\n- Monitoring guide (ZH): [docs\u002FMONITORING_ZH.md](docs\u002FMONITORING_ZH.md)\n- Deep research report: [docs\u002Fdeep-research-report.md](docs\u002Fdeep-research-report.md)\n- Release process: [RELEASE.md](RELEASE.md)\n- Changelog: [CHANGELOG.md](CHANGELOG.md)\n\n## Version\n\n- Version: `v1.7.0`\n- Last Updated: `2026-05-23`\n","PolyWeather Pro 是一个面向温度结算市场的生产级天气智能平台。它采用Python开发，具备全球和城市级别的天气分析功能，包括实时气象数据、历史记录、模型校准概率等。该平台提供详细的日内分析报告，支持多语言文档，并通过SQLite数据库优化了运行时状态管理和离线训练流程。此外，它还集成了基于区块链的支付系统和自动对账机制，确保交易的安全性和透明度。PolyWeather Pro 适用于需要高精度天气预测及市场分析的专业气象服务场景，如能源交易、农业规划等领域。",2,"2026-06-01 03:48:13","CREATED_QUERY"]