diff --git a/public/nodes.js b/public/nodes.js
index 7613706d..dc2c449d 100644
--- a/public/nodes.js
+++ b/public/nodes.js
@@ -82,6 +82,11 @@
}
let lastHeard = localStorage.getItem('meshcore-nodes-last-heard') || '';
let statusFilter = localStorage.getItem('meshcore-nodes-status-filter') || 'all';
+ // 'all' | 'domestic' | 'foreign' — domestic/foreign split on the `foreign`
+ // flag (#730 geo_filter classification: self-reported GPS outside the
+ // configured box). The unfiltered node list can be dominated by foreign
+ // nodes, making it hard to see which ones are actually local.
+ let geoScope = localStorage.getItem('meshcore-nodes-geo-scope') || 'all';
let wsHandler = null;
let detailMap = null;
@@ -1236,6 +1241,9 @@
return getNodeStatus(role, lastMs) === statusFilter;
});
}
+ // Geo scope filter (domestic vs foreign, #730 `foreign` flag)
+ if (geoScope === 'domestic') filtered = filtered.filter(n => !n.foreign);
+ else if (geoScope === 'foreign') filtered = filtered.filter(n => n.foreign);
nodes = filtered;
// Defensive filter: hide nodes with obviously corrupted data
@@ -1304,6 +1312,11 @@
+
+
+
+
+