Skip to content

V0.3#1

Merged
michelangelomo merged 15 commits intomainfrom
v0.3
Apr 10, 2026
Merged

V0.3#1
michelangelomo merged 15 commits intomainfrom
v0.3

Conversation

@michelangelomo
Copy link
Copy Markdown
Member

No description provided.

michelangelomo and others added 12 commits April 5, 2026 23:47
…ink filtering

  - Add `high_resolution` boolean field to Node model, schema, and DB migration
    (default true); wire it through coverage API instead of hardcoding false
  - Include `high_resolution` in _RF_FIELDS so toggling it invalidates coverage cache
  - Fix pathfinder: skip links between nodes on different frequencies
  - Fix LoRa SNR threshold check: each direction now checked against its own
    receiver's spreading-factor threshold (was using RX SF for both directions)
  - Add pathfinder warning in path result message when nodes are still computing coverage
  - Fix SPLAT! longitude encoding: clamp 360.0 → 0.0 for prime meridian edge case
  - Fix colorbar array construction: remove erroneous list() wrapping before .astype()
  - Add model_validator to CoveragePredictionRequest ensuring min_dbm < max_dbm
  - Add test suite: test_coverage.py and test_pathfinder.py
Replaces hardcoded allow_origins=["*"] with a comma-separated env var,
defaulting to http://localhost:5173 for local development.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add asyncio.Lock with double-check pattern for OIDC discovery, JWKS,
and display name caches in auth.py. Add threading.Lock for the clutter
height cache in clutter.py.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add X-Frame-Options, X-Content-Type-Options, Referrer-Policy,
Permissions-Policy, and Content-Security-Policy headers. CSP allows
inline styles for Bootstrap/Leaflet and tile server origins for map tiles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Initialize Alembic with async SQLAlchemy support. Create two historical
migrations capturing the existing schema. Replace inline ALTER TABLE
statements in the lifespan with alembic upgrade head at startup.
Bind-mount alembic files in docker-compose for dev convenience.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Runs ruff linting, pytest with PostgreSQL service container, Docker
build validation on PRs, and image publish to ghcr.io on push to main.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ADME

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Introduces a guided 4-step wizard at /try that lets anyone simulate
their LoRa node coverage without signing up. No data is persisted —
the GeoTIFF is returned directly from a new public endpoint and
rendered ephemerally on a Leaflet map.

Backend (POST /api/try/simulate):
- No auth required; radius capped at try_max_radius_km (default 3 km),
  standard resolution only, results never written to DB
- In-memory sliding-window rate limiter (default 6 req/IP/hour)
- asyncio.Semaphore limits concurrent SPLAT! processes (default 2)
- New config settings: try_rate_limit_per_hour, try_max_radius_km,
  try_max_concurrent

Frontend (/try route):
- Step 1: click-to-place location on full-screen Leaflet map
- Step 2: hardware picker with Recommended badges on Heltec V3 and
  RAK4631, plus a quick-select shortcut and search filter
- Step 3: antenna height slider with floor-based hints (≈3 m/floor),
  environment selector with icons, simplified Fast/Balanced/Long Range
  preset toggle
- Step 4: spinner with animated progress steps, plasma colormap legend,
  share card with Copy link button, and locale-aware CTA linking to
  olografix.org membership page (IT/EN)
- Shareable URL: all settings encoded as query params; opening a shared
  link pre-fills the form and auto-runs the simulation
- flyToBounds animation after simulation using georaster metadata bounds
- Full EN + IT translations; "Test Your Coverage" link added to the
  main app navbar

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a dedicated section explaining the 4-step wizard, the public
/api/try/simulate endpoint constraints (radius cap, rate limit,
concurrency guard, no persistence), shareable URL behaviour, and the
three new TRY_* environment variables. Also adds the Coverage Tester
to the key features table and the configuration reference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
michelangelomo and others added 2 commits April 10, 2026 14:26
georaster creates Web Workers from blob: URLs via URL.createObjectURL().
Without worker-src blob: the CSP fell back to default-src 'self', silently
blocking the worker. The worker was constructed but never responded, leaving
parseGeoraster() awaiting forever and the loading badge stuck on mobile.
unsafe-eval was already needed by the bundled georaster code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a corsOrigins value that is injected into the backend via a ConfigMap
key and env var. Defaults to the ingress host (scheme derived from
ingress.tls.enabled), so existing deployments need no changes. Override
with a comma-separated list when the API must be reachable from additional
origins.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@michelangelomo michelangelomo merged commit 80663be into main Apr 10, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant