Skip to content

Releases: TheLinuxGuy-ssh/Duskmeter

v0.1.5 — UI Overhaul: Scientific Dashboard

Choose a tag to compare

@TheLinuxGuy-ssh TheLinuxGuy-ssh released this 03 Aug 13:30
f6ac088

This release transforms Duskmeter from a standard web dashboard into a tool that feels purpose-built for astronomical research. Every UI change was driven by one question: what would a scientist actually need to see and do?


Site Detail Panel

Before: A centered modal with a dark backdrop. Selecting a site replaced the map entirely with a scrollable popup. Spatial context was lost. Closing the panel returned the map to its starting position.

After: A floating panel inside the map container with equal margins on all three sides. The map is always visible and active behind the panel. Selecting a site zooms the map to that location and slides the panel in from the right. Clicking empty map space or pressing Escape dismisses the panel and returns the map to the default global view. Dragging the map to pan does not trigger dismissal.

The panel itself is redesigned for data density:

  • Compact 2-column metrics grid (Bortle, Radiance, VIIRS Trend, Corrected ±uncertainty, Calibration source, Spectral divergence)
  • Alerts grouped by severity with color-coded compact layout instead of a flat icon list
  • Trend chart and Bayesian assessment inline, not hidden behind sections

Mobile: The panel fills the screen with equal margins on all sides, positioned below the fixed header.

Map Theme Switching

Before: The Leaflet tile layer was hardcoded to Carto dark tiles. The dashboard theme toggle changed nothing on the map.

After: The map subscribes to the theme store. Switching to light mode loads Carto light_all tiles. Switching to dark mode loads Carto dark_all tiles. Night-vision mode keeps dark tiles and applies a red multiply blend overlay (rgba(80,0,0,0.25)) — the same approach used by Stellarium and professional observatory software to preserve dark-adapted vision.

Alerts Page

Before: A flat list of 45 alert cards. No grouping, no statistics, no way to jump from an alert to the affected site's data.

After:

  • Summary stat bar: Critical count, Warning count, Information count, and number of affected sites
  • Grouped by severity: Collapsible sections. Critical alerts expanded by default, warning and information collapsed
  • Grouped by site within each severity: Alerts are nested under their site name, so you can see at a glance which locations have the most problems
  • Navigable: Clicking a site name in the alert list selects it in the sidebar and navigates to the dashboard, immediately showing the site's data and location on the map

Dashboard Interactions

  • Clicking empty space on the map dismisses the detail panel and returns to global view
  • Clicking map markers, popups, or zoom controls does not dismiss the panel
  • Dragging the map to pan does not dismiss the panel
  • Escape key dismisses the panel
  • The Refresh button reloads site data and alerts from the public API without requiring authentication
  • The Refresh button is disabled while a refresh is in progress, with visual feedback (faded, wait cursor)

Public-Facing Design

  • No authentication required to view data, browse sites, or read alerts
  • Acknowledge buttons removed from alerts — this is a public monitoring tool, not a user dashboard
  • Refresh button works for everyone — re-fetches cached data from the API. Background sync and assessment run on the server scheduler
  • Admin endpoints (ingest, force sync) remain protected behind Authorization: Bearer token

Security

  • Five security headers set on every response: CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy
  • Content Security Policy allows Google Fonts and SvelteKit's inline hydration script
  • Brute force protection on admin token authentication (20 attempts per IP per 15 minutes)
  • Admin token accepted via Authorization: Bearer header (query parameter support as fallback)
  • Error messages sanitized — internal details logged server-side, generic messages returned to clients

Under the Hood

  • Detail panel uses Svelte fly transition from the right edge
  • Map tile layer fully replaced on theme change; night-vision overlay uses CSS mix-blend-mode: multiply
  • Map returns to default view [20, 20] at zoom 2 via flyTo with 600ms duration when panel is dismissed
  • Alerts page uses $derived reactive filtering for severity groups with a Set-based collapsible state

Refresh button Fix, UI Improvements

Choose a tag to compare

@TheLinuxGuy-ssh TheLinuxGuy-ssh released this 03 Aug 10:16
e64329a
Merge pull request #45 from TheLinuxGuy-ssh/personal

Refresh button Fix, UI Improvements

Refresh button updates, to handle sync state, Increased rate limits for API

Choose a tag to compare

@TheLinuxGuy-ssh TheLinuxGuy-ssh released this 03 Aug 09:30
ec6a2ee
Merge pull request #44 from TheLinuxGuy-ssh/personal

Refresh button updates, to handle sync state, Increased rate limits f…

Dockerfile Optimisations, Security Header issue fixed, SQLite database bind mount fix for docker container

Choose a tag to compare

@TheLinuxGuy-ssh TheLinuxGuy-ssh released this 03 Aug 08:58
d904695
Merge pull request #43 from TheLinuxGuy-ssh/personal

Dockerfile Optimisations, Security Header issue fixed, SQLite databas…

Beta Release Ready

Choose a tag to compare

@TheLinuxGuy-ssh TheLinuxGuy-ssh released this 02 Aug 18:36
6775cff
Merge pull request #42 from TheLinuxGuy-ssh/personal

Docker Build Fix