Commit graph

1153 commits

Author SHA1 Message Date
a8339797fa feat: expand REST API with alerts, agents, org settings, members, integrations, metrics, activity endpoints 2026-02-14 11:28:57 -06:00
685e131cb9 copy: emphasize 'first 10 devices always free' across marketing page 2026-02-14 11:28:57 -06:00
75f64d0109 docs: add concrete docker-compose example to remote pollers help section
Show the actual docker-compose.yml with agent + watchtower setup.
Emphasize lightweight nature and auto-updates.
2026-02-14 11:28:57 -06:00
ab6968eb50 copy: 'You have LibreNMS' instead of 'You've got' 2026-02-14 11:28:57 -06:00
301c3c1803 fix: simplify pricing to single plan — 10 free devices, $3/device/month after
All features available to everyone. No tiered plans.
2026-02-14 11:28:57 -06:00
2c45b09588 fix: remove business plan, change pro CTA to 'get started free' 2026-02-14 11:28:57 -06:00
cd6fe453a5 fix: use hi@towerops.net consistently (was hello@ on home page) 2026-02-14 11:28:57 -06:00
f326eb5dd4 feat: require email verification before first login
- Remove auto-confirmation on registration (register_user and register_user_with_organization)
- Add deliver_user_confirmation_instructions/2 and confirm_user/1 to Accounts context
- Add verify_email_token_query/2 and by_user_and_contexts_query/2 to UserToken
- Make deliver_confirmation_email public in UserNotifier
- Send confirmation email after registration in both flows
- Block unconfirmed users at password login with helpful message
- Add UserConfirmationController with confirm/resend routes
- Add resend confirmation link to login page
- Update test fixtures to confirm users after registration
2026-02-14 11:28:57 -06:00
b897330a7e docs: add integrations and org settings sections to in-app help page 2026-02-14 11:28:57 -06:00
397271ce03 docs: update nix guide for TimescaleDB, add org settings and device monitoring docs
- nix.md: TimescaleDB now enabled for both dev and test databases
- nix.md: added troubleshooting section for TimescaleDB reinitialization
- New: docs/features/organization-settings.md (tabbed interface, all tabs documented)
- New: docs/features/device-monitoring.md (schema field reference, activity feed fields, SNMP socket management)
2026-02-14 11:28:57 -06:00
6d8c3f932b test: add stream_data property tests for org settings and integrations
- Organization changeset: name length, SNMP port range, version enum, SNMPv3 fields
- Integration changeset: sync interval validation, provider enum
- Settings LiveView: tab routing with garbage params, arbitrary name/port/community input
- All capped at max_runs: 10-50 for fast execution
2026-02-14 11:28:57 -06:00
dbed25b366 test: add stream_data property-based tests for org settings 2026-02-14 11:28:57 -06:00
95ce9ad06d refactor: org settings into tabbed interface with integrations 2026-02-14 11:28:57 -06:00
6fd643a380 feat: add TimescaleDB to nix dev shell
- Use postgresql_16.withPackages to include timescaledb extension
- Add shared_preload_libraries to PostgreSQL config
- Enable TimescaleDB for both dev and test databases
- Disable TimescaleDB telemetry in dev
2026-02-14 11:28:57 -06:00
FluxCD
e9e1a29684 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771089953-61cfd3c 2026-02-14 17:28:25 +00:00
FluxCD
61cfd3c0d3 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771089769-d9de116 2026-02-14 17:25:29 +00:00
FluxCD
d9de116a7e chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771089591-661ed97 2026-02-14 17:22:27 +00:00
FluxCD
661ed97622 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771089406-67a0b10 2026-02-14 17:19:27 +00:00
FluxCD
67a0b10ea5 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771089224-e8449f6 2026-02-14 17:16:24 +00:00
FluxCD
e8449f67e5 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771089049-3e5dce3 2026-02-14 17:13:23 +00:00
FluxCD
3e5dce35a0 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771088871-4e2910a 2026-02-14 17:10:24 +00:00
FluxCD
4e2910a1b2 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771088688-dd25098 2026-02-14 17:07:23 +00:00
b47b00d9e0
fix: exclude cert-manager and traefik resources from FluxCD kustomization
These CRDs are not available for FluxCD dry-run validation, causing the
kustomization to fail. Apply certificate.yaml and ingressroute.yaml
manually instead.
2026-02-14 11:05:20 -06:00
FluxCD
dd250980ea chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771088502-3a9fffe 2026-02-14 17:04:25 +00:00
FluxCD
3a9fffe147 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771088322-7464376 2026-02-14 17:01:20 +00:00
FluxCD
746437644b chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771088140-0c99535 2026-02-14 16:58:16 +00:00
FluxCD
0c99535682 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771087964-d16bee5 2026-02-14 16:55:16 +00:00
FluxCD
d16bee59d8 chore: update towerops image to git.mcintire.me/graham/towerops-web:main-1771086677-8d00a04 2026-02-14 16:52:18 +00:00
8d00a04187
feat: add FluxCD image automation, fix Preseem duplicate AP crash
Switch deployment pipeline from GitLab Agent kubectl to FluxCD image
automation. CI now only builds and pushes tagged images to Forgejo
registry; FluxCD detects new tags and updates the deployment manifest.

Fix Ecto.MultipleResultsError on /dashboard when a device has multiple
Preseem access point records by using limit(1) instead of Repo.get_by.
2026-02-14 10:30:12 -06:00
c37ae76ceb fix: device index uses device_role instead of nonexistent device_type, last_checked_at instead of last_seen_at; make TimescaleDB migrations conditional for dev/test 2026-02-14 10:13:03 -06:00
715a20dd09 fix: dashboard activity feed uses correct field names (summary/timestamp instead of description/inserted_at) 2026-02-14 09:57:37 -06:00
e195e5c9e8 fix: close UDP sockets in error paths to prevent fd leak
get_bulk, set, and get_multi used 'with' chains that skipped
close_socket when the operation failed, leaking file descriptors.
Over time this exhausted the fd limit causing EMFILE crashes.

Switched to case + try/after to guarantee socket cleanup.
2026-02-14 09:50:12 -06:00
12b1a64f8d fix: use atom for Ecto.Enum alert_type in activity feed query 2026-02-13 19:52:29 -06:00
0fc36524b4 fix: resolve 500 errors on /activity and /changelog
- Activity feed: use schema modules instead of string table names in Ecto
  queries to fix UUID encoding (Postgrex expected binary, got string)
- Changelog parser: remove plain hyphen from separator character class
  to prevent splitting on date hyphens (2026-02-13)
2026-02-13 19:49:12 -06:00
67eac2f1c9 fix: prevent cascading crash in error email handler when SES not configured 2026-02-13 19:44:51 -06:00
36ed7dd9cf docs: update changelogs with credo fixes, device list polish, skeletons 2026-02-13 19:35:51 -06:00
9e7ee5099d refactor: fix all credo strict issues, format all code, fix broken routes
- Fix broken route paths in dashboard (/discovery, /subscribers/trace, /config-changes)
- Fix insights empty state settings link (org-scoped route)
- Add underscores to all 86400 literals across 6 files
- Alphabetize aliases in search.ex and agent_channel.ex
- Extract changelog parser helper to reduce nesting
- Extract dashboard impact calculation to reduce nesting
- Refactor agent_channel config change detection (pattern match, extract function)
- Combine double Enum.reject into single call in trace.ex
- Fix line length in trace.ex search query
- Replace length/1 > 0 with != [] in trace_live
- Run mix format on all files
2026-02-13 19:34:40 -06:00
493b1e8001 fix: correct broken route paths in dashboard and insights templates 2026-02-13 19:27:32 -06:00
f84fda8b5b feat: polish device list with status bar, compact mode, type icons 2026-02-13 19:19:20 -06:00
b07c322dc9 docs: update changelogs with navigation and visual polish 2026-02-13 19:18:36 -06:00
bc128388ba feat: add loading skeletons and page transitions 2026-02-13 19:18:28 -06:00
ad6e9b91a3 feat: add global CSS polish — transitions, hover effects, scrollbar styling, status pulse 2026-02-13 19:17:38 -06:00
5a6643c6aa docs: update changelogs with UX polish and activity feed improvements 2026-02-13 19:13:32 -06:00
2389e11469 feat: add search trigger button with ⌘K hint in navbar 2026-02-13 19:13:11 -06:00
bfe552cb47 feat: enhance dashboard with uptime, quick actions, mini activity feed 2026-02-13 19:13:04 -06:00
88b5b55a01 feat: enhance activity feed with real-time updates, time grouping, search 2026-02-13 19:12:49 -06:00
314ed610d3 feat: add polished empty states across all pages 2026-02-13 19:11:54 -06:00
b7204b604d fix: remove experimental badges from Alerts and Network Map nav items 2026-02-13 19:11:34 -06:00
dec6f0f271 feat: rewrite marketing landing page for WISP operators
- Pain point section: disconnected tools, slow impact assessment
- WISP-specific features: impact dashboard, subscriber trace, alert triage, config tracking
- Pricing tiers: Starter (free/10 devices), Pro (/dev/mo), Business (/dev/mo)
- Use case sections: NOC, Help Desk, Owner perspectives
- Tech details: 786 device profiles, secure agent arch, SNMP v1/v2c/v3
- Updated both changelogs
2026-02-13 19:07:04 -06:00
608bad0cf6 Add What's New changelog page
- ChangelogParser: parses priv/static/changelog.txt into structured entries
- ChangelogLive: timeline view with DaisyUI styling
- Route at /changelog in authenticated scope
- What's New link in org dropdown menu
2026-02-13 19:01:19 -06:00