Files
meshcore-analyzer/docs/user-guide/customization.md
T
efiten 1881c92d6e feat: geofilter customizer tab + PUT /api/config/geo-filter (#669 M3)
Backend:
- Add PUT /api/config/geo-filter (requires X-API-Key) — saves geo_filter
  back to config.json atomically and updates in-memory config immediately,
  no restart needed
- Add SaveGeoFilter() to config.go: reads config as raw map (preserving
  _comment fields), updates geo_filter key, writes back via temp+rename
- Add writeEnabled field to GET /api/config/geo-filter response so the
  frontend can gate editing controls on server write capability
- Add Server.configDir field; wired from -config-dir flag in main.go
- Tests: TestPutConfigGeoFilter (4 cases) + TestSaveGeoFilter (3 cases)

Frontend:
- Add GeoFilter tab (🗺️) to the customizer between Display and Export
- Tab shows current polygon on a Leaflet map (read-only for all users)
- Editing controls (undo, clear, buffer km, API key input, save/remove)
  are only revealed when the server reports writeEnabled=true — i.e. the
  deployment has a write-capable apiKey configured. Public instances see
  a read-only polygon view.
- Save calls PUT /api/config/geo-filter; Remove clears the filter
- Map is destroyed on tab switch and panel close to avoid Leaflet leaks

Docs:
- Add docs/user-guide/geofilter.md (full guide: config, customizer,
  builder, prune script, API)
- Update configuration.md and customization.md with geo_filter section
- Update config.example.json _comment to mention the Customizer tab

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 13:36:48 +02: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