diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index b5d6f50..9ec5672 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -17,4 +17,4 @@ jobs: with: apiToken: ${{ secrets.CF_API_TOKEN }} accountId: ${{ secrets.CF_ACCOUNT_ID }} - command: pages deploy /tmp/deploy --project-name=ctmesh-org + command: pages deploy /tmp/deploy --project-name=ctmesh-org --branch=${{ github.ref_name }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/_redirects b/_redirects new file mode 100644 index 0000000..b76d0ed --- /dev/null +++ b/_redirects @@ -0,0 +1 @@ +/discord https://discord.gg/m4F328as3K 302 \ No newline at end of file diff --git a/index.html b/index.html index 414618e..6a87c92 100644 --- a/index.html +++ b/index.html @@ -6,14 +6,14 @@ - - + + - + @@ -21,7 +21,7 @@ - + @@ -48,7 +48,7 @@ margin: 0; padding: 0; width: 100%; - height: 100%; + min-height: 100%; } body { font-family: "Roboto", sans-serif; @@ -60,6 +60,10 @@ justify-content: center; position: relative; } + a, + a:visited { + color: #000000; + } .overlay { position: fixed; top: 0; @@ -74,6 +78,8 @@ border-radius: 30px; padding: 3em 3em 2em 3em; margin: 1em; + width: 90%; + max-width: 700px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); color: #000000; position: relative; @@ -116,23 +122,26 @@ .btn { display: flex; align-items: center; - gap: 8px; + gap: 12px; background-color: #67EA94; color: #000000; border: none; padding: 1em 1.75em; - border-radius: 15px; + border-radius: 999px; cursor: pointer; font-weight: bold; margin-top: 0.5em; font-size: 17px; text-align: left; text-decoration: none; + box-sizing: border-box; + flex: 1 1 240px; + max-width: 260px; } .btn-text { display: flex; flex-direction: column; - line-height: 0.7; + line-height: 1.1; } .btn-text small { font-size: 12px; @@ -142,16 +151,74 @@ height: 30px; filter: brightness(0); } + .btn-discord, + .btn-discord:visited { + background-color: #5865F2; + color: #ffffff; + justify-content: center; + } + .btn-discord img { + filter: brightness(0) invert(1); + } + .btn-meshcore, + .btn-meshcore:visited { + background-color: #2B3A4E; + color: #ffffff; + } + .btn-meshcore img { + filter: brightness(0) invert(1); + } + a.btn[target="_blank"]::after { + content: ""; + width: 16px; + height: 16px; + margin-left: auto; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5L8.5 3.5M5 3.5h3.5V7'/%3E%3C/svg%3E") no-repeat center; + background-size: contain; + flex-shrink: 0; + opacity: 0.4; + } + a.btn:not([target="_blank"])::after { + content: ""; + width: 16px; + height: 16px; + margin-left: auto; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 2.5L8.5 6L4 9.5'/%3E%3C/svg%3E") no-repeat center; + background-size: contain; + flex-shrink: 0; + opacity: 0.4; + } + .btn-discord::after { + display: none; + } + .btn-meshcore::after { + filter: invert(1) !important; + } .btn-group { display: flex; gap: 1em; - flex-wrap: nowrap; + flex-wrap: wrap; justify-content: center; + width: 100%; } .btn-groups { display: flex; flex-direction: column; - gap: 1em; + gap: 1.5em; + } + .section-title { + margin: 0.5em 0 0; + padding-top: 1em; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #2C2D3C; + text-align: center; + } + .section { + display: flex; + flex-direction: column; + gap: 0.75em; } .btn-small { display: inline-block; @@ -172,7 +239,6 @@ border-top: 1px solid #ccc; } .site-footer a { - color: #757684; text-decoration: none; } .site-footer a:hover { @@ -186,10 +252,7 @@ padding-top: calc(env(safe-area-inset-top, 1em)); } .splash-box { - margin-top: 1em; - margin-bottom: 1em; padding: 2em; - min-width: 350px; } .top-section { flex-direction: column; @@ -207,11 +270,17 @@ flex-direction: column; align-items: center; } + .section-title { + text-align: center; + } .btn { - width: 100%; - justify-content: center; + width: 340px; + max-width: 100%; + justify-content: flex-start; padding: 0.8em 1em; font-size: 16px; + text-align: left; + flex: none; } } @@ -219,9 +288,6 @@ @media (max-width: 480px) { .splash-box { padding: 1.5em; - margin: 1em; - width: 90%; - min-width: 250px; } .logo { width: 120px; @@ -246,55 +312,79 @@

CT Mesh

-

Connecticut Meshtastic User Group

+

Connecticut Mesh Technologies User Group

Email
-
- - Info Icon -
- Web Dashboard - Network metrics & analytics -
-
- - Map Icon -
- CT Map - Nodes seen by CT Mesh -
-
- - Globe Icon -
- Global Map - Nodes around the world -
-
+ -
- \ No newline at end of file + diff --git a/meshcore-resources.html b/meshcore-resources.html new file mode 100644 index 0000000..e366e3f --- /dev/null +++ b/meshcore-resources.html @@ -0,0 +1,279 @@ + + + + + + CT Mesh MeshCore Resources + + + + + + + + +
+
+ + CT Mesh + CT Mesh + +

MeshCore Resources

+ +

Community-run Web Tools

+
+

These tools use data reported to our MQTT server by nodes across the state.

+
    +
  • MeshCore Map NEW! - live map showing MeshCore nodes
  • +
  • MeshMapper NEW! — coverage maps for MeshCore. Contribute to the map via apps coming soon!
  • +
  • Wardrive Map - coverage maps for MeshCore. Note: MeshMapper is in testing and is replacing this soon.
  • +
  • Wardrive Contribution - upload your wardrive data to improve coverage maps
  • +
+
+ +

Official Links

+

meshcore.co.uk

+

flasher.meshcore.co.uk

+
Note: the flasher requires WebSerial or Web Bluetooth support in your browser
+ +

MQTT

+

Our MQTT broker is uplink-only and designed for fixed nodes across the state to serve as gateway nodes. Its purpose is not to bridge gaps or extend mesh coverage, but to report local traffic to our own web-based tools for analytical data and metrics to assess the mesh's performance. This role is best suited for stable, well-placed nodes with reliable coverage.

+

MeshCore MQTT uplink uses meshcoretomqtt on a Raspberry Pi or similar Linux computer with the service installed. This configuration stanza goes in your .env.local file after the first two MQTT servers that upload to analyzer.letsmesh.net. This also requires a custom firmware. See custom repeater firmware setup.

+ +
+ +
# MQTT Broker 3 - CT Mesh
+MCTOMQTT_MQTT3_ENABLED=true
+MCTOMQTT_MQTT3_SERVER=mqtt.ctmesh.org
+MCTOMQTT_MQTT3_PORT=1883
+MCTOMQTT_MQTT3_USE_TLS=false
+MCTOMQTT_MQTT3_USERNAME=meshdev
+MCTOMQTT_MQTT3_PASSWORD=large4cats
+
+ + Back to CT Mesh + +
+ + + diff --git a/meshcore.svg b/meshcore.svg new file mode 100644 index 0000000..2ecb872 --- /dev/null +++ b/meshcore.svg @@ -0,0 +1,68 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + diff --git a/meshtastic-resources.html b/meshtastic-resources.html new file mode 100644 index 0000000..aaf4a5e --- /dev/null +++ b/meshtastic-resources.html @@ -0,0 +1,313 @@ + + + + + + CT Mesh Meshtastic Resources + + + + + + + + +
+
+ + CT Mesh + CT Mesh + +

Meshtastic Resources

+ +

Community-run Web Tools

+
+

These tools use data reported to our MQTT server by nodes across the state.

+
    +
  • Meshtastic Map - live map of Meshtastic nodes CT Mesh has heard
  • +
  • Global Map - Meshtastic nodes around the world
  • +
  • Malla - deeper packet-level metrics and mesh performance insights fed from MQTT
  • +
  • PotatoMesh NEW! - packet, chat, node list, and map fed from RF on Box Mountain
  • +
  • MeshInfo legacy, partially broken - MQTT gateway setup info, secondary map, graphs, message history, etc.
  • +
+
+ +

Mesh Channels

+

Default (Primary) Channel

+

Most CT chatter occurs on the default LongFast channel.

+

Name: LongFast or (blank)

+

Key: AQ==

+

Key size: Default or 1 byte

+ +

CT's established community secondary channel

+

Name: ConnNet

+

Key: pJgk5XqJY8Ar+jSqC5W81g==

+

Key size: 128 bit

+ +

MQTT

+

Our MQTT broker is uplink-only and designed for fixed nodes across the state to serve as gateway nodes. Its purpose is not to bridge gaps or extend mesh coverage, but to report local traffic to our own map and other web-based tools for analytical data and metrics to assess the mesh's performance. This role is best suited for stable, well-placed nodes with reliable coverage. If that describes your setup, follow the steps at on this page to get set up.

+ +

Key Settings

+
+
MQTT > Enabled > ON
+MQTT > Encryption Enabled > ON
+MQTT > Map Report > OFF
+MQTT > Root Topic > msh/US/CT
+MQTT > Address > mqtt.ctmesh.org
+MQTT > Username > meshdev
+MQTT > Password > large4cats
+MQTT > TLS Enabled > OFF
+Channels > Primary Channel > Positions Enabled > ON
+Channels > Primary Channel > Approximate Location > (set as desired)
+Channels > Primary Channel > MQTT Uplink > ON
+Channels > Primary Channel > MQTT Downlink > OFF
+Settings > Modules > Neighbor Info > ON
+LoRa > Ok to MQTT > ON
+
+
Note: CT Mesh's MQTT server is bridged and uplinks to the MQTT servers for both meshtastic.liamcottle.net and meshmap.net
+ +

Infrastructure Nodes

+

Important: Infrastructure roles like ROUTER, REPEATER, ROUTER_CLIENT, or ROUTER_LATE are rarely appropriate. Unless your node is sitting on top of one of the tallest buildings in Hartford with clear line-of-sight across the region, using these roles will hurt more than help. For almost everyone, the correct choice is CLIENT. If you think you've got a node that truly warrants an infrastructure role, reach out first - we'd rather make sure it benefits the mesh than inadvertently weakens it.

+ + Back to CT Mesh + +
+ + + diff --git a/wheel.svg b/wheel.svg new file mode 100644 index 0000000..8f30de3 --- /dev/null +++ b/wheel.svg @@ -0,0 +1,2 @@ + +