feat: add a world map of nodes by region
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 22/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- react, typescript
調査の方向性
Start with blocks/by-region.tsx and regionsView in lib/regions.ts to see the RegionRow shape, then app/page.tsx for composition and CLAUDE.md for the build-and-render check. Pull request #45 is already open against this issue, so check it before writing anything. Done means a map shades countries from the existing data, shows every status label, works in light and dark at phone width, and passes pnpm typecheck && pnpm lint.
索引モデルが issue の本文から書いたものです。
説明
Problem
The page shows where the network's nodes are only as the by-region table (blocks/by-region.tsx): alpha-2 codes sorted by node count. There's no geographic view, so coverage (which continents have nodes, where the gaps are) takes reading the whole table.
Solution
Add a world map that shades each country by the data lib/regions.ts already derives (regionsView → RegionRow: code, nodes, bytesServed, cacheHit). No indexer or schema change is needed: regions and nodes in the stats file are keyed by the operator's declared alpha-2 region.
Follow the existing layering:
- A
"use client"block that readsuseStats()viaregionsViewand owns its copy, with anemptyLabelswitch (explicit return type, nodefault) forloading/unindexed/error/catching-up/ emptyok, and the blinkingCursorwhile loading. - Placed in or beside the
by-regionsection; composed inapp/page.tsx. - Colors from tokens (
--accent-greenscaled for node count or bytes, muted neutrals for countries without nodes), working in light and dark. UNKNOWN_REGIONhas no country; leave it off the map (the table still lists it).- Works at phone width.
Open questions:
- What the shading encodes: nodes, bytes served, or cache hit.
- Map data source and size: a bundled TopoJSON/GeoJSON (e.g. world-atlas 110m) vs. a pre-rendered SVG in
public/; keep the static export light. - Hover/tap detail (country name via
Intl.DisplayNames, as the table does).
Verify
pnpm typecheck && pnpm lint, then check each status in the built page (see CLAUDE.md: build with NEXT_PUBLIC_STATS_URL pointed at a local CORS server and render out/ with headless Chromium), in light and dark and at phone width.
🤖 Generated with Claude Code
- 主要言語
- TypeScript
- スター
- 2
- フォーク
- 0
- 平均マージ
- 10時間 46分
- マージ済み PR(30日)
- 37
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
decdn/stats のほかの issue
-
bug good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
feature frontend indexer
難易度 5/5 1週間以上 初心者へのやさしさ 39/100
メンテナーはふだん 1 日以内に返信
-
feature frontend indexer
難易度 3/5 1〜2日 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
feat: mark Labs nodes and pools, and show external nodes and external bytes as their own countersオープンenhancement
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
area:plugins area:security area:skills bug has repro
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
anthropics/claude-code#105911 ·
メンテナーはふだん 1 日以内に返信
-
openspec-apply-change skill: when blocked, may select a ready artifact unrelated to missingArtifactsオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Fission-AI/OpenSpec#2165 ·
メンテナーはふだん 1 日以内に返信
-
🐞 bug 🧐 unconfirmed
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
Tencent/tdesign-vue-next#7032 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
gnosis/gnosis_vpn#661 ·
メンテナーはふだん 1 日以内に返信
-
content-freshness: staleOwnedContent doc comments still say 'complete receipt' (follow-up to #7912)オープンtriage:bug-verified
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
メンテナーはふだん 1 日以内に返信