@@ -5,11 +5,12 @@ import JsonLd from '@/components/JsonLd';
55import { generateBreadcrumbSchema } from '@/lib/schemas/breadcrumb' ;
66
77export const metadata : Metadata = {
8- title : 'M3SHGHOST OBSERVER ' ,
8+ title : 'Denver MeshCore Analyzers ' ,
99 description :
10- 'Live network monitoring for Denver MeshCore. The M3SHGHOST OBSERVER tracks mesh network status, node activity, signal strength, and network health metrics in real-time across the Colorado Front Range.' ,
10+ 'Live network monitoring for Denver MeshCore. Our analyzers track mesh network status, node activity, signal strength, and network health metrics in real-time across the Colorado Front Range.' ,
1111 keywords : [
1212 'mesh network' ,
13+ 'analyzer' ,
1314 'observer' ,
1415 'network monitoring' ,
1516 'Denver' ,
@@ -22,19 +23,27 @@ export const metadata: Metadata = {
2223 canonical : '/observer' ,
2324 } ,
2425 openGraph : {
25- title : 'M3SHGHOST OBSERVER | Denver MeshCore' ,
26+ title : 'Denver MeshCore Analyzers ' ,
2627 description :
2728 'Live network monitoring for Denver MeshCore. Track mesh network status and node activity in real-time.' ,
2829 url : 'https://denvermc.com/observer' ,
2930 } ,
3031} ;
3132
32- const OBSERVER_URL =
33- 'https://analyzer.letsmesh.net/node/4D0CC1003DBF678DF420907F9ACD77BD71D9E4C34300F72660F6BA6A2656A868' ;
33+ const OBSERVERS = [
34+ {
35+ name : 'M3SHGHOST' ,
36+ url : 'https://analyzer.letsmesh.net/node/4D0CC1003DBF678DF420907F9ACD77BD71D9E4C34300F72660F6BA6A2656A868' ,
37+ } ,
38+ {
39+ name : 'Meadowood' ,
40+ url : 'https://analyzer.letsmesh.net/node/92D29EDD92724217FB1D42E2D6226004F70469F77D1D6D8C4B6C3B26F78B1001' ,
41+ } ,
42+ ] ;
3443
3544const breadcrumbData = generateBreadcrumbSchema ( [
3645 { name : 'Home' , url : 'https://denvermc.com' } ,
37- { name : 'Observer ' , url : 'https://denvermc.com/observer' } ,
46+ { name : 'Analyzers ' , url : 'https://denvermc.com/observer' } ,
3847] ) ;
3948
4049export default function ObserverPage ( ) {
@@ -84,75 +93,76 @@ export default function ObserverPage() {
8493 </ div >
8594
8695 < h1 className = "text-4xl md:text-5xl lg:text-6xl font-bold mb-4 font-mono tracking-tight" >
87- < span className = "text-gradient-mesh" > M3SHGH</ span >
88- < span className = "text-sunset-500" > O</ span >
89- < span className = "text-gradient-mesh" > ST</ span >
90- < span className = "text-foreground-muted" > </ span >
91- < span className = "text-mesh" > 0</ span >
92- < span className = "text-gradient-mesh" > BSERVER</ span >
96+ < span className = "text-gradient-mesh" > Denver </ span >
97+ < span className = "text-mesh" > Analyzers</ span >
9398 </ h1 >
9499
95100 < p className = "text-xl md:text-2xl text-foreground-muted mb-4" >
96101 Live network monitoring for Denver MeshCore
97102 </ p >
98103
99104 < p className = "text-foreground-muted max-w-2xl mx-auto mb-8" >
100- The M3SHGHOST OBSERVER is a dedicated monitoring node that watches over the Denver mesh network,
105+ Our analyzer nodes are dedicated monitoring stations that watch over the Denver mesh network,
101106 tracking activity, measuring performance, and ensuring network health across the Front Range.
102107 </ p >
103108
104- { /* Primary CTA */ }
105- < a
106- href = { OBSERVER_URL }
107- target = "_blank"
108- rel = "noopener noreferrer"
109- className = "inline-flex items-center gap-3 btn-accent text-lg px-8 py-4 focus-ring"
110- >
111- < svg
112- className = "h-6 w-6"
113- fill = "none"
114- stroke = "currentColor"
115- viewBox = "0 0 24 24"
116- aria-hidden = "true"
117- >
118- < path
119- strokeLinecap = "round"
120- strokeLinejoin = "round"
121- strokeWidth = { 2 }
122- d = "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
123- />
124- < path
125- strokeLinecap = "round"
126- strokeLinejoin = "round"
127- strokeWidth = { 2 }
128- d = "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
129- />
130- </ svg >
131- Open Live Analyzer
132- < svg
133- className = "h-5 w-5"
134- fill = "none"
135- stroke = "currentColor"
136- viewBox = "0 0 24 24"
137- aria-hidden = "true"
138- >
139- < path
140- strokeLinecap = "round"
141- strokeLinejoin = "round"
142- strokeWidth = { 2 }
143- d = "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
144- />
145- </ svg >
146- </ a >
109+ { /* Analyzer CTAs */ }
110+ < div className = "flex flex-col sm:flex-row gap-4 justify-center" >
111+ { OBSERVERS . map ( ( observer ) => (
112+ < a
113+ key = { observer . name }
114+ href = { observer . url }
115+ target = "_blank"
116+ rel = "noopener noreferrer"
117+ className = "inline-flex items-center gap-3 btn-accent text-lg px-6 py-4 focus-ring"
118+ >
119+ < svg
120+ className = "h-6 w-6"
121+ fill = "none"
122+ stroke = "currentColor"
123+ viewBox = "0 0 24 24"
124+ aria-hidden = "true"
125+ >
126+ < path
127+ strokeLinecap = "round"
128+ strokeLinejoin = "round"
129+ strokeWidth = { 2 }
130+ d = "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
131+ />
132+ < path
133+ strokeLinecap = "round"
134+ strokeLinejoin = "round"
135+ strokeWidth = { 2 }
136+ d = "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
137+ />
138+ </ svg >
139+ { observer . name }
140+ < svg
141+ className = "h-5 w-5"
142+ fill = "none"
143+ stroke = "currentColor"
144+ viewBox = "0 0 24 24"
145+ aria-hidden = "true"
146+ >
147+ < path
148+ strokeLinecap = "round"
149+ strokeLinejoin = "round"
150+ strokeWidth = { 2 }
151+ d = "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
152+ />
153+ </ svg >
154+ </ a >
155+ ) ) }
156+ </ div >
147157 </ div >
148158 </ section >
149159
150160
151- { /* What is the Observer Section */ }
161+ { /* What are Analyzers Section */ }
152162 < section className = "px-6 py-16" >
153163 < div className = "mx-auto max-w-6xl" >
154164 < h2 className = "text-3xl font-bold text-center mb-12 text-foreground" >
155- What is the < span className = "text-mesh" > Observer </ span > ?
165+ What are < span className = "text-mesh" > Analyzers </ span > ?
156166 </ h2 >
157167
158168 < div className = "grid grid-cols-1 md:grid-cols-3 gap-8" >
@@ -176,8 +186,8 @@ export default function ObserverPage() {
176186 </ div >
177187 < h3 className = "text-lg font-semibold text-foreground mb-2" > Network Monitoring</ h3 >
178188 < p className = "text-foreground-muted text-sm" >
179- The observer node continuously monitors network traffic, tracking messages as they propagate
180- through the Denver mesh network. It provides visibility into network activity patterns and
189+ Our analyzer nodes continuously monitor network traffic, tracking messages as they propagate
190+ through the Denver mesh network. They provide visibility into network activity patterns and
181191 communication flows.
182192 </ p >
183193 </ div >
@@ -202,7 +212,7 @@ export default function ObserverPage() {
202212 </ div >
203213 < h3 className = "text-lg font-semibold text-foreground mb-2" > Performance Metrics</ h3 >
204214 < p className = "text-foreground-muted text-sm" >
205- Track signal strength, hop counts, and message delivery rates. The observer collects
215+ Track signal strength, hop counts, and message delivery rates. The analyzers collect
206216 performance data that helps identify network bottlenecks and optimize node placement
207217 across the Front Range.
208218 </ p >
0 commit comments