Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

feat: add a world map of nodes by region

オープン
#42 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@yigitdot がすでに取り組んでいます。

2026年9月30日 から。

  • #45 @yigitdot による — オープン

評価

難易度
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 の本文から書いたものです。

説明

enhancement

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 reads useStats() via regionsView and owns its copy, with an emptyLabel switch (explicit return type, no default) for loading / unindexed / error / catching-up / empty ok, and the blinking Cursor while loading.
  • Placed in or beside the by-region section; composed in app/page.tsx.
  • Colors from tokens (--accent-green scaled for node count or bytes, muted neutrals for countries without nodes), working in light and dark.
  • UNKNOWN_REGION has 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 を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

decdn/stats のほかの issue

decdn/stats の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。