Commit graph

518 commits

Author SHA1 Message Date
b656e015bf Beacon power in mW, settings tweaks
- Rename beacons.power_watts to power_mw (migration multiplies existing
  values by 1000); form/list/show all relabeled to "Power (mW)"
- Fix Add-monitor button alignment on /users/settings by rendering the
  label above and putting the input and button in a plain flex row so
  the input wrapper margin no longer offsets the button
- Extend the settings page re-auth window from 10 minutes to 24 hours
2026-04-08 12:45:35 -05:00
FluxCD
f236ec147f chore: update prop image to git.mcintire.me/graham/prop:main-1775669757-ff3537e [skip ci] 2026-04-08 17:37:05 +00:00
913411a26d Merge branch 'main' of github.com:North-Texas-Microwave-Society/w5isp-prop 2026-04-08 12:35:46 -05:00
FluxCD
413baa69b5 chore: update prop image to git.mcintire.me/graham/prop:main-1775666639-70c1862 [skip ci] 2026-04-08 12:35:19 -05:00
FluxCD
feb979bcc5 chore: update prop image to git.mcintire.me/graham/prop:main-1775665838-309a504 [skip ci] 2026-04-08 12:35:19 -05:00
FluxCD
f2cd3688fc chore: update prop image to git.mcintire.me/graham/prop:main-1775662797-a0d06ed [skip ci] 2026-04-08 12:35:19 -05:00
FluxCD
cf2e91bd21 chore: update prop image to git.mcintire.me/graham/prop:main-1775661716-623a57b [skip ci] 2026-04-08 12:35:19 -05:00
FluxCD
5ae1fa2285 chore: update prop image to git.mcintire.me/graham/prop:main-1775657188-23b8dd0 [skip ci] 2026-04-08 12:35:19 -05:00
FluxCD
47f167b111 chore: update prop image to git.mcintire.me/graham/prop:main-1775601551-6cb6cf2 [skip ci] 2026-04-08 12:35:18 -05:00
e4fb422402 Dock map controls to right sidebar with collapsible panel
- Move controls (band selector, grid toggle, nav links) to a docked
  right sidebar on desktop, keep floating overlay on mobile
- Point detail panel floats over the map bottom-left instead of inside
  the narrow sidebar
- Add collapse/expand toggle for the sidebar
- Add auth links (login/logout/settings) to sidebar
- Wrap public live routes in live_session with UserAuth on_mount
- Use daisyUI menu lists for sidebar navigation
2026-04-08 12:35:00 -05:00
2feedc0bd1 Dock map controls to right sidebar with collapsible panel
- Move controls (band selector, grid toggle, nav links) to a docked
  right sidebar on desktop, keep floating overlay on mobile
- Point detail panel floats over the map bottom-left instead of inside
  the narrow sidebar
- Add collapse/expand toggle for the sidebar
- Add auth links (login/logout/settings) to sidebar
- Wrap public live routes in live_session with UserAuth on_mount
- Use daisyUI menu lists for sidebar navigation
2026-04-08 12:34:36 -05:00
ee9275e0b9 Add /beacons CRUD and /users admin page
Beacons:
- Scaffolded with phx.gen.live then reworked so reads are public
  and mutations go through a live_session gated by the new
  :require_admin on_mount hook in UserAuth
- Beacon schema stores frequency (MHz), callsign, grid, lat/lon,
  power (W), and height above ground (m); grid auto-derives from
  lat/lon when left blank via Maidenhead.from_latlon
- Adds Maidenhead.from_latlon/3 so we can compute grids locally
  instead of hitting an external API

Users admin page:
- /users and /users/:id/edit (admin-only) for listing, editing
  (callsign/name/email/is_admin), and deleting other users
- Adds Accounts.list_users, admin_update_user, delete_user, and
  a dedicated admin_changeset on the User schema
- Nav gains a "Users" link for admins and a "Beacons" link for
  everyone
2026-04-08 12:01:45 -05:00
ddec874c38 Add /beacons CRUD and /users admin page
Beacons:
- Scaffolded with phx.gen.live then reworked so reads are public
  and mutations go through a live_session gated by the new
  :require_admin on_mount hook in UserAuth
- Beacon schema stores frequency (MHz), callsign, grid, lat/lon,
  power (W), and height above ground (m); grid auto-derives from
  lat/lon when left blank via Maidenhead.from_latlon
- Adds Maidenhead.from_latlon/3 so we can compute grids locally
  instead of hitting an external API

Users admin page:
- /users and /users/:id/edit (admin-only) for listing, editing
  (callsign/name/email/is_admin), and deleting other users
- Adds Accounts.list_users, admin_update_user, delete_user, and
  a dedicated admin_changeset on the User schema
- Nav gains a "Users" link for admins and a "Beacons" link for
  everyone
2026-04-08 12:01:34 -05:00
FluxCD
5e4a306fb2 chore: update prop image to git.mcintire.me/graham/prop:main-1775666639-70c1862 [skip ci] 2026-04-08 16:44:49 +00:00
eaef5b0178 Add is_admin flag, auto-grant to graham@mcintire.me
Adds a boolean is_admin column (default false) and has the
registration changeset auto-set it to true when the email matches
graham@mcintire.me (case-insensitive). The migration also backfills
the flag for an existing row with that email.
2026-04-08 11:43:52 -05:00
ea5fdd6479 Add is_admin flag, auto-grant to graham@mcintire.me
Adds a boolean is_admin column (default false) and has the
registration changeset auto-set it to true when the email matches
graham@mcintire.me (case-insensitive). The migration also backfills
the flag for an existing row with that email.
2026-04-08 11:41:43 -05:00
FluxCD
a9c72b3ead chore: update prop image to git.mcintire.me/graham/prop:main-1775665838-309a504 [skip ci] 2026-04-08 16:32:46 +00:00
355bed178d Add beacon monitor registration and fix prod SMTP
Users can now register beacon monitors on the settings page. Each
monitor gets a unique random token the remote program will use to
authenticate its reports. Name is the only user-supplied field for
now; more will be added as the monitor protocol is defined.

Also adds :gen_smtp to deps. Swoosh's SMTP adapter depends on
:mimemail which lives in that package, and production was 500'ing
when trying to send confirmation emails without it.
2026-04-08 11:30:28 -05:00
0a0154137d Add beacon monitor registration and fix prod SMTP
Users can now register beacon monitors on the settings page. Each
monitor gets a unique random token the remote program will use to
authenticate its reports. Name is the only user-supplied field for
now; more will be added as the monitor protocol is defined.

Also adds :gen_smtp to deps. Swoosh's SMTP adapter depends on
:mimemail which lives in that package, and production was 500'ing
when trying to send confirmation emails without it.
2026-04-08 11:29:50 -05:00
FluxCD
50d4c0b52f chore: update prop image to git.mcintire.me/graham/prop:main-1775662797-a0d06ed [skip ci] 2026-04-08 15:41:32 +00:00
27170b5139 Merge auth links into main nav and lower password min to 8
- Register/Log in (or callsign/Settings/Log out) now live next to
  the Map/Path/Rover links in the main header instead of a separate
  top menu bar
- Add on_mount in UserAuth to assign current_scope on LiveView mount,
  and pass current_scope through to Layouts.app from every LiveView
- Drop the old top <ul> from root.html.heex
- Password minimum lowered from 12 to 8 characters
2026-04-08 10:39:51 -05:00
a8995bb43b Merge auth links into main nav and lower password min to 8
- Register/Log in (or callsign/Settings/Log out) now live next to
  the Map/Path/Rover links in the main header instead of a separate
  top menu bar
- Add on_mount in UserAuth to assign current_scope on LiveView mount,
  and pass current_scope through to Layouts.app from every LiveView
- Drop the old top <ul> from root.html.heex
- Password minimum lowered from 12 to 8 characters
2026-04-08 10:39:30 -05:00
FluxCD
f75d0e7f54 chore: update prop image to git.mcintire.me/graham/prop:main-1775661716-623a57b [skip ci] 2026-04-08 15:26:29 +00:00
1d86e287b2 Add password auth with callsign + email confirmation
Generated Accounts context, User schema, and controllers via
phx.gen.auth. Adapted it for password-only login with required
email confirmation:

- Users have callsign (unique, uppercased), name, email, password
- Registration form fields: callsign, name, email, password, confirm
- Magic-link login path removed; login is email + password only
- After register, a confirmation email is sent and login is blocked
  until the account is confirmed via the token URL
- Confirmation link logs the user in on first use
- SMTP2GO configured as the outgoing mailer in k8s prod
2026-04-08 10:21:40 -05:00
e6aab62ea8 Show grid squares by default on rover planner 2026-04-08 10:21:40 -05:00
adaa17719a Add password auth with callsign + email confirmation
Generated Accounts context, User schema, and controllers via
phx.gen.auth. Adapted it for password-only login with required
email confirmation:

- Users have callsign (unique, uppercased), name, email, password
- Registration form fields: callsign, name, email, password, confirm
- Magic-link login path removed; login is email + password only
- After register, a confirmation email is sent and login is blocked
  until the account is confirmed via the token URL
- Confirmation link logs the user in on first use
- SMTP2GO configured as the outgoing mailer in k8s prod
2026-04-08 10:21:16 -05:00
FluxCD
e1af2e7045 chore: update prop image to git.mcintire.me/graham/prop:main-1775657188-23b8dd0 [skip ci] 2026-04-08 14:09:11 +00:00
5d22a11091 Show grid squares by default on rover planner 2026-04-08 09:08:24 -05:00
27deb02bc7 Add grid squares toggle to rover planner
Extract shared Maidenhead grid overlay into maidenhead_grid.js so both
the main map and rover planner use the same implementation. Wire up the
toggle_grid event and checkbox on the rover page matching the main map.
2026-04-08 09:06:09 -05:00
75fd05a6d1 Simplify rover planner: remove grid toggle and coverage calculation 2026-04-08 09:06:09 -05:00
b4594fa71f Add grid squares toggle to rover planner
Extract shared Maidenhead grid overlay into maidenhead_grid.js so both
the main map and rover planner use the same implementation. Wire up the
toggle_grid event and checkbox on the rover page matching the main map.
2026-04-08 09:04:44 -05:00
803516f0b0 Simplify rover planner: remove grid toggle and coverage calculation 2026-04-08 08:57:12 -05:00
FluxCD
b705609329 chore: update prop image to git.mcintire.me/graham/prop:main-1775601551-6cb6cf2 [skip ci] 2026-04-07 22:40:18 +00:00
1bee565d04 Add HRRR propagation overlay to rover planner map 2026-04-07 17:39:03 -05:00
cafa1c1a34 Add HRRR propagation overlay to rover planner map 2026-04-07 17:38:41 -05:00
FluxCD
0cb9583003 chore: update prop image to git.mcintire.me/graham/prop:main-1775600837-79a20d9 [skip ci] 2026-04-07 17:38:41 -05:00
FluxCD
13791b4c5a chore: update prop image to git.mcintire.me/graham/prop:main-1775600060-b84517b [skip ci] 2026-04-07 17:38:41 -05:00
FluxCD
31fe3b8861 chore: update prop image to git.mcintire.me/graham/prop:main-1775600837-79a20d9 [skip ci] 2026-04-07 22:28:15 +00:00
941182ce7b Render rover grid overlay above coverage using custom pane 2026-04-07 17:27:09 -05:00
f25055aa88 Render rover grid overlay above coverage using custom pane 2026-04-07 17:26:40 -05:00
FluxCD
dadd07846a chore: update prop image to git.mcintire.me/graham/prop:main-1775599523-c36abbe [skip ci] 2026-04-07 17:26:40 -05:00
FluxCD
286910752f chore: update prop image to git.mcintire.me/graham/prop:main-1775600060-b84517b [skip ci] 2026-04-07 22:15:12 +00:00
0f885f5c13 Match rover grid toggle to main map's checkbox style 2026-04-07 17:14:11 -05:00
b795544db0 Match rover grid toggle to main map's checkbox style 2026-04-07 17:14:01 -05:00
FluxCD
a8acd8181b chore: update prop image to git.mcintire.me/graham/prop:main-1775599523-c36abbe [skip ci] 2026-04-07 22:06:10 +00:00
14f864c85d Show 'Press ESC to close' hint on map and weather pages
Subtle hint appears in top-right corner (desktop only) when the
detail panel is open. Fades in when panel shows, fades out on ESC.
Hidden on mobile where the X button is more appropriate.
2026-04-07 17:05:19 -05:00
FluxCD
b7e2bc7fe7 chore: update prop image to git.mcintire.me/graham/prop:main-1775599089-5777138 [skip ci] 2026-04-07 17:05:19 -05:00
cdbb47bf1b Show 'Press ESC to close' hint on map and weather pages
Subtle hint appears in top-right corner (desktop only) when the
detail panel is open. Fades in when panel shows, fades out on ESC.
Hidden on mobile where the X button is more appropriate.
2026-04-07 17:05:15 -05:00
FluxCD
33ebaf33a6 chore: update prop image to git.mcintire.me/graham/prop:main-1775599089-5777138 [skip ci] 2026-04-07 21:59:07 +00:00
db2ac29bb7 Use proper Maidenhead grid overlay on rover page
Extract GridSquare class and updateGridOverlay from propagation_map_hook
into shared maidenhead_grid.js module. Rover map now shows the same
zoom-adaptive Maidenhead grid overlay as the main /map page — red
rectangles with labels that switch between field (2-char) and square
(4-char) based on zoom level. Updates on pan/zoom.

Toggle button hides/shows the grid overlay.
2026-04-07 16:58:06 -05:00