feat: add a world map of nodes by region
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 22/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- react, typescript
- Área
- data-visualization, frontend
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- TypeScript
- Estrellas
- 2
- Forks
- 0
- Merge medio
- 9 h 7 min
- PR fusionados (30 d)
- 53
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de decdn/stats
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
Todos los issues de decdn/stats
Issues similares
-
area:agent-view area:tui bug platform:macos
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
anthropics/claude-code#104558 ·
Los mantenedores suelen responder en 1 día
-
[CURRICULUM] computation fakdAbiertoupdater
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
UniversityOfHelsinkiCS/oodikone#5141 ·
-
maintanance
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
inmanta/web-console#7606 ·
Los mantenedores suelen responder en 1 día
-
bug skills
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
equinor/fusion-framework#5846 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 74/100