Files
efiten 51f823bf7e feat: one-click prune nodes outside geofilter (#669 M4) (#738)
## Summary

- Adds `POST /api/admin/prune-geo-filter` endpoint — dry-run by default,
`?confirm=true` to permanently delete nodes outside the current
geofilter polygon + buffer. Requires `X-API-Key` header.
- Adds **Prune nodes** section inside the GeoFilter customizer tab
(write-access only, same `writeEnabled` gate as PUT). **Preview** lists
affected nodes; **Confirm delete** removes them.
- Adds `GetNodesForGeoPrune` and `DeleteNodesByPubkeys` DB helpers.
- Updates `docs/user-guide/geofilter.md` — documents the UI button as
primary workflow, CLI script as alternative.

> **Depends on M3** (`feat/geofilter-m3-customizer`, PR #736). Merge M3
first.

## Test plan

- [x] `cd cmd/server && go test ./...` — all pass
- [x] Customizer GeoFilter tab without `apiKey` — Prune section not
visible
- [x] With `apiKey` + polygon active — Prune section visible
- [x] **Preview** returns list of nodes outside polygon (no deletions)
- [x] **Confirm delete** removes nodes, list clears
- [x] `POST /api/admin/prune-geo-filter` without `X-API-Key` → 401
- [x] `POST /api/admin/prune-geo-filter` with no polygon configured →
400

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 03:19:31 +00:00

3.2 KiB

Customization

CoreScope includes a built-in theme customizer. Access it from Tools → Customization in the navigation menu.

[Screenshot: theme customizer panel with color pickers]

What you can customize

Branding

  • Site name — displayed in the nav bar and browser tab
  • Tagline — shown on the home page
  • Logo URL — replace the default logo
  • Favicon URL — custom browser tab icon

Theme colors (Light & Dark)

Every color in the UI is customizable:

  • Accent — primary color for links, buttons, highlights
  • Navigation — nav bar background, text, and muted text colors
  • Background — page background and content area
  • Surfaces — cards, panels, input fields, detail panes
  • Status — green (healthy), yellow (degraded), red (silent)
  • Text — primary text, muted text, borders
  • Tables — row stripe, hover, and selected row colors

Both light and dark themes are independently configurable.

Node colors

Set the color for each role: repeater, companion, room, sensor, observer. These colors appear on the map, in node badges, and throughout the UI.

Packet type colors

Customize the color for each packet type: Advert, Channel Msg, Direct Msg, ACK, Request, Response, Trace, Path.

Home page

Customize the onboarding experience:

  • Hero title and subtitle
  • Getting-started steps (emoji, title, description for each)
  • FAQ items
  • Footer links

Timestamps

  • Display mode — relative ("5 min ago") or absolute
  • Timezone — local or UTC
  • Format preset — ISO or other presets

Live preview

Changes apply instantly as you edit. You see the result in real time without saving.

Exporting a theme

Click Export JSON to download your customizations as a JSON file. This produces a config-compatible block you can paste into your config.json.

Importing a theme

Click Import JSON and paste a previously exported theme. The customizer loads all values and applies them immediately.

Resetting

Click Reset to Defaults to restore all settings to the built-in defaults.

GeoFilter (admin only)

The 🗺️ GeoFilter tab lets operators configure geographic filtering directly from the customizer. It shows the active polygon on a Leaflet map and — on servers with a write-capable apiKey — allows editing the polygon and saving back to config.json without a restart.

The editing controls are only revealed after the server confirms write access. On public deployments without an apiKey, the tab is read-only.

See Geographic Filtering for the full guide, including the API, the prune script, and the standalone GeoFilter Builder.

How it works

The customizer writes CSS custom properties (variables) to override the defaults. Exported JSON maps directly to the theme, nodeColors, branding, and home sections of config.json.

Tips

  • Start with the accent color — it cascades through buttons, links, and highlights
  • Dark mode has its own color set (themeDark), independent of light mode
  • Node colors affect the Map, Live page, and node badges everywhere
  • Export your theme before upgrading CoreScope, then re-import it after