yakmesh 2.8.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +637 -0
- package/CONTRIBUTING.md +42 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/adapters/adapter-mlv-bible/README.md +124 -0
- package/adapters/adapter-mlv-bible/index.js +400 -0
- package/adapters/chat-mod-adapter.js +532 -0
- package/adapters/content-adapter.js +273 -0
- package/content/api.js +50 -41
- package/content/index.js +2 -2
- package/content/store.js +355 -173
- package/dashboard/index.html +19 -3
- package/database/replication.js +117 -37
- package/docs/CRYPTO-AGILITY.md +204 -0
- package/docs/MTLS-RESEARCH.md +367 -0
- package/docs/NAMCHE-SPEC.md +681 -0
- package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
- package/docs/PRECISION-DISCLOSURE.md +96 -0
- package/docs/README.md +76 -0
- package/docs/ROADMAP-2.4.0.md +447 -0
- package/docs/ROADMAP-2.5.0.md +244 -0
- package/docs/SECURITY-AUDIT-REPORT.md +306 -0
- package/docs/SST-INTEGRATION.md +712 -0
- package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
- package/docs/TERNARY-AUDIT-REPORT.md +247 -0
- package/docs/TME-FAQ.md +221 -0
- package/docs/WHITEPAPER.md +623 -0
- package/docs/adapters.html +1001 -0
- package/docs/advanced-systems.html +1045 -0
- package/docs/annex.html +1046 -0
- package/docs/api.html +970 -0
- package/docs/business/response-templates.md +160 -0
- package/docs/c2c.html +1225 -0
- package/docs/cli.html +1332 -0
- package/docs/configuration.html +1248 -0
- package/docs/darshan.html +1085 -0
- package/docs/dharma.html +966 -0
- package/docs/docs-bundle.html +1075 -0
- package/docs/docs.css +3120 -0
- package/docs/docs.js +556 -0
- package/docs/doko.html +969 -0
- package/docs/geo-proof.html +858 -0
- package/docs/getting-started.html +840 -0
- package/docs/gumba-tutorial.html +1144 -0
- package/docs/gumba.html +1098 -0
- package/docs/index.html +914 -0
- package/docs/jhilke.html +1312 -0
- package/docs/karma.html +1100 -0
- package/docs/katha.html +1037 -0
- package/docs/lama.html +978 -0
- package/docs/mandala.html +1067 -0
- package/docs/mani.html +964 -0
- package/docs/mantra.html +967 -0
- package/docs/mesh.html +1409 -0
- package/docs/nakpak.html +869 -0
- package/docs/namche.html +928 -0
- package/docs/nav-order.json +53 -0
- package/docs/prahari.html +1043 -0
- package/docs/prism-bash.min.js +1 -0
- package/docs/prism-javascript.min.js +1 -0
- package/docs/prism-json.min.js +1 -0
- package/docs/prism-tomorrow.min.css +1 -0
- package/docs/prism.min.js +1 -0
- package/docs/privacy.html +699 -0
- package/docs/quick-reference.html +1181 -0
- package/docs/sakshi.html +1402 -0
- package/docs/sandboxing.md +386 -0
- package/docs/seva.html +911 -0
- package/docs/sherpa.html +871 -0
- package/docs/studio.html +860 -0
- package/docs/stupa.html +995 -0
- package/docs/tailwind.min.css +2 -0
- package/docs/tattva.html +1332 -0
- package/docs/terms.html +686 -0
- package/docs/time-server-deployment.md +166 -0
- package/docs/time-sources.html +1392 -0
- package/docs/tivra.html +1127 -0
- package/docs/trademark-policy.html +686 -0
- package/docs/tribhuj.html +1183 -0
- package/docs/trust-security.html +1029 -0
- package/docs/tutorials/backup-recovery.html +654 -0
- package/docs/tutorials/dashboard.html +604 -0
- package/docs/tutorials/domain-setup.html +605 -0
- package/docs/tutorials/host-website.html +456 -0
- package/docs/tutorials/mesh-network.html +505 -0
- package/docs/tutorials/mobile-access.html +445 -0
- package/docs/tutorials/privacy.html +467 -0
- package/docs/tutorials/raspberry-pi.html +600 -0
- package/docs/tutorials/security-basics.html +539 -0
- package/docs/tutorials/share-files.html +431 -0
- package/docs/tutorials/troubleshooting.html +637 -0
- package/docs/tutorials/trust-karma.html +419 -0
- package/docs/tutorials/yak-protocol.html +456 -0
- package/docs/tutorials.html +1034 -0
- package/docs/vani.html +1270 -0
- package/docs/webserver.html +809 -0
- package/docs/yak-protocol.html +940 -0
- package/docs/yak-timeserver-design.md +475 -0
- package/docs/yakapp.html +1015 -0
- package/docs/ypc27.html +1069 -0
- package/docs/yurt.html +1344 -0
- package/embedded-docs/bundle.js +334 -74
- package/gossip/protocol.js +247 -27
- package/identity/key-resolver.js +262 -0
- package/identity/machine-seed.js +632 -0
- package/identity/node-key.js +669 -368
- package/identity/tribhuj-ratchet.js +506 -0
- package/knowledge-base.js +37 -8
- package/launcher/yakmesh.bat +62 -0
- package/launcher/yakmesh.sh +70 -0
- package/mesh/annex.js +462 -108
- package/mesh/beacon-broadcast.js +113 -1
- package/mesh/darshan.js +1718 -0
- package/mesh/gumba.js +1567 -0
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +1012 -0
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/rate-limiter.js +127 -15
- package/mesh/seva.js +526 -0
- package/mesh/sherpa-discovery.js +89 -8
- package/mesh/sybil-defense.js +19 -5
- package/mesh/temporal-encoder.js +4 -3
- package/mesh/vani.js +1364 -0
- package/mesh/yurt.js +1340 -0
- package/models/entropy-sentinel.onnx +0 -0
- package/models/karma-trust.onnx +0 -0
- package/models/manifest.json +43 -0
- package/models/sakshi-anomaly.onnx +0 -0
- package/oracle/code-proof-protocol.js +7 -6
- package/oracle/codebase-lock.js +257 -28
- package/oracle/index.js +74 -15
- package/oracle/ma902-snmp.js +678 -0
- package/oracle/module-sealer.js +5 -3
- package/oracle/network-identity.js +16 -0
- package/oracle/packet-checksum.js +201 -0
- package/oracle/sst.js +579 -0
- package/oracle/ternary-144t.js +714 -0
- package/oracle/ternary-ml.js +481 -0
- package/oracle/time-api.js +239 -0
- package/oracle/time-source.js +137 -47
- package/oracle/validation-oracle-hardened.js +1111 -1071
- package/oracle/validation-oracle.js +4 -2
- package/oracle/ypc27.js +211 -0
- package/package.json +20 -3
- package/protocol/yak-handler.js +35 -9
- package/protocol/yak-protocol.js +28 -13
- package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
- package/reference/cpp/yakmesh_ypc27.cpp +179 -0
- package/sbom.json +87 -0
- package/scripts/security-audit.mjs +264 -0
- package/scripts/update-docs-nav.js +194 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +517 -0
- package/security/doko-identity.js +193 -143
- package/security/domain-consensus.js +86 -85
- package/security/fs-hardening.js +620 -0
- package/security/hardware-attestation.js +5 -3
- package/security/hybrid-trust.js +227 -87
- package/security/karma-rate-limiter.js +692 -0
- package/security/khata-protocol.js +22 -21
- package/security/khata-trust-integration.js +277 -150
- package/security/memory-safety.js +635 -0
- package/security/mesh-auth.js +11 -10
- package/security/mesh-revocation.js +373 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +460 -3
- package/security/sangha.js +770 -0
- package/security/secure-config.js +473 -0
- package/security/silicon-parity.js +13 -10
- package/security/steadywatch.js +1142 -0
- package/security/strike-system.js +32 -3
- package/security/temporal-signing.js +488 -0
- package/security/trit-commitment.js +464 -0
- package/server/crypto/annex.js +247 -0
- package/server/darshan-api.js +343 -0
- package/server/index.js +3259 -362
- package/server/komm-api.js +668 -0
- package/utils/accel.js +2273 -0
- package/utils/ternary-id.js +79 -0
- package/utils/verify-worker.js +57 -0
- package/webserver/index.js +95 -5
- package/assets/yakmesh-logo.png +0 -0
- package/assets/yakmesh-logo.svg +0 -80
- package/assets/yakmesh-logo2.png +0 -0
- package/assets/yakmesh-logo2sm.png +0 -0
- package/assets/ymsm.png +0 -0
- package/website/assets/silhouettes/adapters.svg +0 -107
- package/website/assets/silhouettes/api-endpoints.svg +0 -115
- package/website/assets/silhouettes/atomic-clock.svg +0 -83
- package/website/assets/silhouettes/base-camp.svg +0 -81
- package/website/assets/silhouettes/bridge.svg +0 -69
- package/website/assets/silhouettes/docs-bundle.svg +0 -113
- package/website/assets/silhouettes/doko-basket.svg +0 -70
- package/website/assets/silhouettes/fortress.svg +0 -93
- package/website/assets/silhouettes/gateway.svg +0 -54
- package/website/assets/silhouettes/gears.svg +0 -93
- package/website/assets/silhouettes/globe-satellite.svg +0 -67
- package/website/assets/silhouettes/karma-wheel.svg +0 -137
- package/website/assets/silhouettes/lama-council.svg +0 -141
- package/website/assets/silhouettes/mandala-network.svg +0 -169
- package/website/assets/silhouettes/mani-stones.svg +0 -149
- package/website/assets/silhouettes/mantra-wheel.svg +0 -116
- package/website/assets/silhouettes/mesh-nodes.svg +0 -113
- package/website/assets/silhouettes/nakpak.svg +0 -56
- package/website/assets/silhouettes/peak-lightning.svg +0 -73
- package/website/assets/silhouettes/sherpa.svg +0 -69
- package/website/assets/silhouettes/stupa-tower.svg +0 -119
- package/website/assets/silhouettes/tattva-eye.svg +0 -78
- package/website/assets/silhouettes/terminal.svg +0 -74
- package/website/assets/silhouettes/webserver.svg +0 -145
- package/website/assets/silhouettes/yak.svg +0 -78
- package/website/assets/yakmesh-logo.png +0 -0
- package/website/assets/yakmesh-logo.webp +0 -0
- package/website/assets/yakmesh-logo128x140.webp +0 -0
- package/website/assets/yakmesh-logo2.png +0 -0
- package/website/assets/yakmesh-logo2.svg +0 -51
- package/website/assets/yakmesh-logo40x44.webp +0 -0
- package/website/assets/yakmesh.gif +0 -0
- package/website/assets/yakmesh.ico +0 -0
- package/website/assets/yakmesh.jpg +0 -0
- package/website/assets/yakmesh.pdf +0 -0
- package/website/assets/yakmesh.png +0 -0
- package/website/assets/yakmesh.svg +0 -70
- package/website/assets/yakmesh128.webp +0 -0
- package/website/assets/yakmesh32.png +0 -0
- package/website/assets/yakmesh32.svg +0 -65
- package/website/assets/yakmesh32o.ico +0 -2
- package/website/assets/yakmesh32o.svg +0 -65
- package/website/assets/yakmesh32o.svgz +0 -0
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="tutorials">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<link rel="icon" href="../favicon.ico" sizes="32x32">
|
|
7
|
+
<link rel="icon" href="../icon.svg" type="image/svg+xml">
|
|
8
|
+
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
|
|
9
|
+
<title>Running on Raspberry Pi - YAKMESH Tutorials</title>
|
|
10
|
+
<meta name="description" content="Set up a dedicated always-on YAKMESH node on a Raspberry Pi. Complete hardware and software guide.">
|
|
11
|
+
|
|
12
|
+
<link rel="stylesheet" href="../tailwind.min.css">
|
|
13
|
+
<link rel="stylesheet" href="../prism-tomorrow.min.css">
|
|
14
|
+
<link rel="stylesheet" href="../docs.css">
|
|
15
|
+
<style>
|
|
16
|
+
.theme-accent { color: #10b981; }
|
|
17
|
+
.theme-accent-hover:hover { color: #34d399; }
|
|
18
|
+
.theme-badge { background: rgba(16, 185, 129, 0.2); color: #34d399; }
|
|
19
|
+
.theme-border { border-color: #10b981; }
|
|
20
|
+
.theme-callout { background: rgba(16, 185, 129, 0.1); border-color: #059669; }
|
|
21
|
+
.active-link { background: rgba(16, 185, 129, 0.2) !important; color: #34d399 !important; }
|
|
22
|
+
.tutorial-card { background: rgba(30, 41, 59, 0.5); border: 1px solid #334155; border-radius: 0.75rem; padding: 1.5rem; margin-bottom: 1.5rem; }
|
|
23
|
+
.step-number { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; background: #10b981; color: white; border-radius: 50%; font-weight: bold; margin-right: 0.75rem; flex-shrink: 0; }
|
|
24
|
+
.step-header { display: flex; align-items: center; margin-bottom: 1rem; }
|
|
25
|
+
</style>
|
|
26
|
+
</head>
|
|
27
|
+
<body class="bg-mountain-900 text-white min-h-screen">
|
|
28
|
+
|
|
29
|
+
<nav class="docs-sidebar" id="sidebar">
|
|
30
|
+
<a href="../index.html" class="sidebar-logo">
|
|
31
|
+
<span class="logo-icon">🏔️</span>
|
|
32
|
+
<span class="logo-text">Yakmesh</span>
|
|
33
|
+
</a>
|
|
34
|
+
<a href="/dashboard" class="sidebar-dashboard-link"><span>📊</span> <span>Dashboard</span></a>
|
|
35
|
+
<ul class="sidebar-nav">
|
|
36
|
+
<li><a href="../index.html"><span>🏠</span> <span>Overview</span></a></li>
|
|
37
|
+
<li><a href="../getting-started.html"><span>🚀</span> <span>Getting Started</span></a></li>
|
|
38
|
+
<li><a href="../tutorials.html"><span>📖</span> <span>Tutorials</span></a></li>
|
|
39
|
+
<li><a href="../yak-protocol.html"><span class="yak-icon"></span> <span>YAK://</span></a></li>
|
|
40
|
+
<li><a href="../annex.html"><span>🌉</span> <span>ANNEX</span></a></li>
|
|
41
|
+
<li><a href="../nakpak.html"><span>🎒</span> <span>NAKPAK</span></a></li>
|
|
42
|
+
<li><a href="../namche.html"><span>🚪</span> <span>NAMCHE</span></a></li>
|
|
43
|
+
<li><a href="../doko.html"><span>🧺</span> <span>DOKO</span></a></li>
|
|
44
|
+
<li><a href="../sherpa.html"><span>🧗</span> <span>SHERPA</span></a></li>
|
|
45
|
+
<li><a href="../mandala.html"><span>🌐</span> <span>MANDALA</span></a></li>
|
|
46
|
+
<li><a href="../mantra.html"><span>🕉️</span> <span>MANTRA</span></a></li>
|
|
47
|
+
<li><a href="../gumba.html"><span>🛕</span> <span>GUMBA</span></a></li>
|
|
48
|
+
<li><a href="../yurt.html"><span>🏕️</span> <span>YURT</span></a></li>
|
|
49
|
+
<li><a href="../katha.html"><span>💬</span> <span>KATHA</span></a></li>
|
|
50
|
+
<li><a href="../vani.html"><span>🎙️</span> <span>VANI</span></a></li>
|
|
51
|
+
<li><a href="../darshan.html"><span>👁️</span> <span>DARSHAN</span></a></li>
|
|
52
|
+
<li><a href="../stupa.html"><span>🛕</span> <span>STUPA</span></a></li>
|
|
53
|
+
<li><a href="../lama.html"><span>🔮</span> <span>LAMA</span></a></li>
|
|
54
|
+
<li><a href="../mani.html"><span>⏱️</span> <span>MANI</span></a></li>
|
|
55
|
+
<li><a href="../karma.html"><span>☯️</span> <span>KARMA</span></a></li>
|
|
56
|
+
<li><a href="../tattva.html"><span>🔯</span> <span>TATTVA</span></a></li>
|
|
57
|
+
<li><a href="../tribhuj.html"><span>🔺</span> <span>TRIBHUJ</span></a></li>
|
|
58
|
+
<li><a href="../ypc27.html"><span>🔐</span> <span>YPC-27</span></a></li>
|
|
59
|
+
<li><a href="../sakshi.html"><span>👁️</span> <span>SAKSHI</span></a></li>
|
|
60
|
+
<li><a href="../geo-proof.html"><span>🌍</span> <span>PRAMAAN</span></a></li>
|
|
61
|
+
<li><a href="../trust-security.html"><span>🔒</span> <span>SURAKSHA</span></a></li>
|
|
62
|
+
<li><a href="../docs-bundle.html"><span>📚</span> <span>GRANTH</span></a></li>
|
|
63
|
+
<li><a href="../api.html"><span>📡</span> <span>API</span></a></li>
|
|
64
|
+
<li><a href="../adapters.html"><span>🔌</span> <span>Adapters</span></a></li>
|
|
65
|
+
<li><a href="../studio.html"><span>🎨</span> <span>Studio</span></a></li>
|
|
66
|
+
<li><a href="../quick-reference.html"><span>📋</span> <span>Quick Ref</span></a></li>
|
|
67
|
+
</ul>
|
|
68
|
+
</nav>
|
|
69
|
+
|
|
70
|
+
<button class="sidebar-toggle" id="sidebarToggle" title="Toggle sidebar">
|
|
71
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
72
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 19l-7-7 7-7m8 14l-7-7 7-7" />
|
|
73
|
+
</svg>
|
|
74
|
+
</button>
|
|
75
|
+
|
|
76
|
+
<div class="sidebar-overlay" id="sidebarOverlay"></div>
|
|
77
|
+
|
|
78
|
+
<main class="docs-main" id="mainContent">
|
|
79
|
+
<div class="docs-content">
|
|
80
|
+
|
|
81
|
+
<!-- Breadcrumb -->
|
|
82
|
+
<nav class="mb-6">
|
|
83
|
+
<a href="../tutorials.html" class="text-mountain-400 hover:text-white transition">← Back to Tutorials</a>
|
|
84
|
+
</nav>
|
|
85
|
+
|
|
86
|
+
<!-- Page Header -->
|
|
87
|
+
<div class="mb-8">
|
|
88
|
+
<div class="flex items-center gap-3 mb-2">
|
|
89
|
+
<span class="text-4xl">🍓</span>
|
|
90
|
+
<h1 class="text-4xl font-bold">Running on Raspberry Pi</h1>
|
|
91
|
+
<span class="theme-badge text-xs px-2 py-1 rounded-full">20 min</span>
|
|
92
|
+
</div>
|
|
93
|
+
<p class="theme-accent text-lg">Set up a dedicated always-on YAKMESH node</p>
|
|
94
|
+
<p class="text-mountain-300 mt-2">
|
|
95
|
+
Turn a Raspberry Pi into a 24/7 YAKMESH node. Low power, always connected, perfect for mesh networking.
|
|
96
|
+
</p>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<!-- What You'll Learn -->
|
|
100
|
+
<div class="tutorial-card">
|
|
101
|
+
<h2 class="text-xl font-bold mb-4">📋 What You'll Learn</h2>
|
|
102
|
+
<ul class="space-y-2 text-mountain-300">
|
|
103
|
+
<li>• Choose the right Raspberry Pi hardware</li>
|
|
104
|
+
<li>• Install and configure Raspberry Pi OS</li>
|
|
105
|
+
<li>• Install Node.js on ARM architecture</li>
|
|
106
|
+
<li>• Install and configure YAKMESH</li>
|
|
107
|
+
<li>• Set up auto-start on boot with systemd</li>
|
|
108
|
+
<li>• Optimize for low power and reliability</li>
|
|
109
|
+
</ul>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<!-- Hardware Requirements -->
|
|
113
|
+
<div class="tutorial-card">
|
|
114
|
+
<div class="step-header">
|
|
115
|
+
<span class="step-number">1</span>
|
|
116
|
+
<h2 class="text-xl font-bold">Hardware Requirements</h2>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<h3 class="font-semibold text-lg mb-3">Recommended Hardware</h3>
|
|
120
|
+
<div class="overflow-x-auto mb-6">
|
|
121
|
+
<table class="w-full text-sm">
|
|
122
|
+
<thead>
|
|
123
|
+
<tr class="border-b border-mountain-700">
|
|
124
|
+
<th class="text-left py-2 px-3">Component</th>
|
|
125
|
+
<th class="text-left py-2 px-3">Minimum</th>
|
|
126
|
+
<th class="text-left py-2 px-3">Recommended</th>
|
|
127
|
+
</tr>
|
|
128
|
+
</thead>
|
|
129
|
+
<tbody class="text-mountain-300">
|
|
130
|
+
<tr class="border-b border-mountain-800">
|
|
131
|
+
<td class="py-2 px-3 font-semibold">Raspberry Pi Model</td>
|
|
132
|
+
<td class="py-2 px-3">Pi 3B+ (1GB)</td>
|
|
133
|
+
<td class="py-2 px-3 theme-accent">Pi 4 (4GB) or Pi 5</td>
|
|
134
|
+
</tr>
|
|
135
|
+
<tr class="border-b border-mountain-800">
|
|
136
|
+
<td class="py-2 px-3 font-semibold">Storage</td>
|
|
137
|
+
<td class="py-2 px-3">16GB microSD</td>
|
|
138
|
+
<td class="py-2 px-3 theme-accent">32GB+ microSD or SSD</td>
|
|
139
|
+
</tr>
|
|
140
|
+
<tr class="border-b border-mountain-800">
|
|
141
|
+
<td class="py-2 px-3 font-semibold">Power Supply</td>
|
|
142
|
+
<td class="py-2 px-3">5V 2.5A</td>
|
|
143
|
+
<td class="py-2 px-3 theme-accent">5V 3A (USB-C for Pi 4/5)</td>
|
|
144
|
+
</tr>
|
|
145
|
+
<tr class="border-b border-mountain-800">
|
|
146
|
+
<td class="py-2 px-3 font-semibold">Cooling</td>
|
|
147
|
+
<td class="py-2 px-3">Heatsinks</td>
|
|
148
|
+
<td class="py-2 px-3 theme-accent">Active fan or case with fan</td>
|
|
149
|
+
</tr>
|
|
150
|
+
<tr class="border-b border-mountain-800">
|
|
151
|
+
<td class="py-2 px-3 font-semibold">Network</td>
|
|
152
|
+
<td class="py-2 px-3">WiFi</td>
|
|
153
|
+
<td class="py-2 px-3 theme-accent">Ethernet (more reliable)</td>
|
|
154
|
+
</tr>
|
|
155
|
+
</tbody>
|
|
156
|
+
</table>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="theme-callout rounded-lg p-4 border">
|
|
160
|
+
<p class="font-semibold theme-accent mb-1">💡 Why Pi 4 with 4GB+?</p>
|
|
161
|
+
<p class="text-sm text-mountain-300">
|
|
162
|
+
YAKMESH uses post-quantum cryptography which requires more memory than classical crypto.
|
|
163
|
+
The Pi 4's improved CPU and RAM handle ML-DSA-65 signatures efficiently.
|
|
164
|
+
</p>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<!-- OS Setup -->
|
|
169
|
+
<div class="tutorial-card">
|
|
170
|
+
<div class="step-header">
|
|
171
|
+
<span class="step-number">2</span>
|
|
172
|
+
<h2 class="text-xl font-bold">Install Raspberry Pi OS</h2>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<h3 class="font-semibold text-lg mb-3">Download and Flash</h3>
|
|
176
|
+
<ol class="list-decimal list-inside space-y-3 text-mountain-300 mb-4">
|
|
177
|
+
<li>Download <a href="https://www.raspberrypi.com/software/" class="theme-accent theme-accent-hover" target="_blank">Raspberry Pi Imager</a></li>
|
|
178
|
+
<li>Insert your microSD card into your computer</li>
|
|
179
|
+
<li>Open Raspberry Pi Imager and select:
|
|
180
|
+
<ul class="list-disc list-inside ml-6 mt-2 space-y-1">
|
|
181
|
+
<li><strong>OS:</strong> Raspberry Pi OS Lite (64-bit) - no desktop needed</li>
|
|
182
|
+
<li><strong>Storage:</strong> Your microSD card</li>
|
|
183
|
+
</ul>
|
|
184
|
+
</li>
|
|
185
|
+
<li>Click the gear icon (⚙️) for advanced options:
|
|
186
|
+
<ul class="list-disc list-inside ml-6 mt-2 space-y-1">
|
|
187
|
+
<li>Set hostname: <code class="bg-mountain-800 px-1 rounded">yakmesh-node</code></li>
|
|
188
|
+
<li>Enable SSH with password or public key</li>
|
|
189
|
+
<li>Set username and password</li>
|
|
190
|
+
<li>Configure WiFi (if not using Ethernet)</li>
|
|
191
|
+
<li>Set locale and timezone</li>
|
|
192
|
+
</ul>
|
|
193
|
+
</li>
|
|
194
|
+
<li>Click Write and wait for completion</li>
|
|
195
|
+
</ol>
|
|
196
|
+
|
|
197
|
+
<h3 class="font-semibold text-lg mb-3">First Boot</h3>
|
|
198
|
+
<pre class="language-bash mb-4"><code># Insert SD card into Pi and power on
|
|
199
|
+
# Wait 2-3 minutes for first boot to complete
|
|
200
|
+
# Find your Pi's IP address from your router, or use:
|
|
201
|
+
ping yakmesh-node.local
|
|
202
|
+
|
|
203
|
+
# SSH into your Pi
|
|
204
|
+
ssh pi@yakmesh-node.local
|
|
205
|
+
# Enter your password when prompted</code></pre>
|
|
206
|
+
|
|
207
|
+
<h3 class="font-semibold text-lg mb-3">Initial System Update</h3>
|
|
208
|
+
<pre class="language-bash"><code># Update package lists and upgrade
|
|
209
|
+
sudo apt update && sudo apt upgrade -y
|
|
210
|
+
|
|
211
|
+
# Install essential tools
|
|
212
|
+
sudo apt install -y curl git build-essential
|
|
213
|
+
|
|
214
|
+
# Reboot to apply any kernel updates
|
|
215
|
+
sudo reboot</code></pre>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<!-- Install Node.js -->
|
|
219
|
+
<div class="tutorial-card">
|
|
220
|
+
<div class="step-header">
|
|
221
|
+
<span class="step-number">3</span>
|
|
222
|
+
<h2 class="text-xl font-bold">Install Node.js on ARM</h2>
|
|
223
|
+
</div>
|
|
224
|
+
<p class="text-mountain-300 mb-4">
|
|
225
|
+
YAKMESH requires Node.js 20 or later. We'll use NodeSource for the latest ARM builds.
|
|
226
|
+
</p>
|
|
227
|
+
|
|
228
|
+
<h3 class="font-semibold text-lg mb-3">Install Node.js 22 LTS</h3>
|
|
229
|
+
<pre class="language-bash mb-4"><code># Add NodeSource repository for Node.js 22
|
|
230
|
+
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
231
|
+
|
|
232
|
+
# Install Node.js
|
|
233
|
+
sudo apt install -y nodejs
|
|
234
|
+
|
|
235
|
+
# Verify installation
|
|
236
|
+
node --version # Should show v22.x.x
|
|
237
|
+
npm --version # Should show 10.x.x</code></pre>
|
|
238
|
+
|
|
239
|
+
<h3 class="font-semibold text-lg mb-3">Alternative: Using nvm (Node Version Manager)</h3>
|
|
240
|
+
<pre class="language-bash"><code># Install nvm
|
|
241
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
|
242
|
+
|
|
243
|
+
# Reload shell
|
|
244
|
+
source ~/.bashrc
|
|
245
|
+
|
|
246
|
+
# Install Node.js 22
|
|
247
|
+
nvm install 22
|
|
248
|
+
nvm use 22
|
|
249
|
+
nvm alias default 22</code></pre>
|
|
250
|
+
|
|
251
|
+
<div class="theme-callout rounded-lg p-4 border mt-4">
|
|
252
|
+
<p class="font-semibold theme-accent mb-1">⚠️ ARM Architecture Note</p>
|
|
253
|
+
<p class="text-sm text-mountain-300">
|
|
254
|
+
Raspberry Pi uses ARM64 (aarch64) architecture. All npm packages with native bindings
|
|
255
|
+
will be compiled during installation, which may take longer than on x86.
|
|
256
|
+
</p>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
<!-- Install YAKMESH -->
|
|
261
|
+
<div class="tutorial-card">
|
|
262
|
+
<div class="step-header">
|
|
263
|
+
<span class="step-number">4</span>
|
|
264
|
+
<h2 class="text-xl font-bold">Install YAKMESH</h2>
|
|
265
|
+
</div>
|
|
266
|
+
|
|
267
|
+
<h3 class="font-semibold text-lg mb-3">Create Project Directory</h3>
|
|
268
|
+
<pre class="language-bash mb-4"><code># Create a dedicated directory
|
|
269
|
+
mkdir -p ~/yakmesh
|
|
270
|
+
cd ~/yakmesh
|
|
271
|
+
|
|
272
|
+
# Initialize npm project
|
|
273
|
+
npm init -y
|
|
274
|
+
|
|
275
|
+
# Install YAKMESH
|
|
276
|
+
npm install yakmesh</code></pre>
|
|
277
|
+
|
|
278
|
+
<h3 class="font-semibold text-lg mb-3">Initialize Node</h3>
|
|
279
|
+
<pre class="language-bash mb-4"><code># Generate node identity and config
|
|
280
|
+
npx yakmesh init
|
|
281
|
+
|
|
282
|
+
# This creates:
|
|
283
|
+
# - yakmesh.config.js (configuration)
|
|
284
|
+
# - data/ directory (node data and keys)</code></pre>
|
|
285
|
+
|
|
286
|
+
<h3 class="font-semibold text-lg mb-3">Configure for Pi</h3>
|
|
287
|
+
<p class="text-mountain-300 mb-3">
|
|
288
|
+
Edit <code class="bg-mountain-800 px-2 py-1 rounded">yakmesh.config.js</code> for optimal Pi performance:
|
|
289
|
+
</p>
|
|
290
|
+
<pre class="language-javascript"><code>// yakmesh.config.js - Raspberry Pi optimized
|
|
291
|
+
export default {
|
|
292
|
+
node: {
|
|
293
|
+
name: 'pi-yakmesh-node',
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
server: {
|
|
297
|
+
host: '0.0.0.0', // Accept connections from network
|
|
298
|
+
port: 3000,
|
|
299
|
+
},
|
|
300
|
+
|
|
301
|
+
websocket: {
|
|
302
|
+
port: 9001,
|
|
303
|
+
},
|
|
304
|
+
|
|
305
|
+
// Reduce memory usage on constrained devices
|
|
306
|
+
performance: {
|
|
307
|
+
maxPeers: 50, // Limit peer connections
|
|
308
|
+
cacheSize: '256mb', // Reduce cache for 1GB Pi
|
|
309
|
+
gcInterval: 300000, // Garbage collect every 5 min
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
// Enable logging to file for debugging
|
|
313
|
+
logging: {
|
|
314
|
+
level: 'info',
|
|
315
|
+
file: './data/yakmesh.log',
|
|
316
|
+
},
|
|
317
|
+
};</code></pre>
|
|
318
|
+
|
|
319
|
+
<h3 class="font-semibold text-lg mb-3">Test Run</h3>
|
|
320
|
+
<pre class="language-bash"><code># Start YAKMESH to verify it works
|
|
321
|
+
npx yakmesh start
|
|
322
|
+
|
|
323
|
+
# You should see the startup messages
|
|
324
|
+
# Press Ctrl+C to stop for now</code></pre>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<!-- Auto-start with systemd -->
|
|
328
|
+
<div class="tutorial-card">
|
|
329
|
+
<div class="step-header">
|
|
330
|
+
<span class="step-number">5</span>
|
|
331
|
+
<h2 class="text-xl font-bold">Auto-Start on Boot (systemd)</h2>
|
|
332
|
+
</div>
|
|
333
|
+
<p class="text-mountain-300 mb-4">
|
|
334
|
+
Create a systemd service so YAKMESH starts automatically when the Pi boots.
|
|
335
|
+
</p>
|
|
336
|
+
|
|
337
|
+
<h3 class="font-semibold text-lg mb-3">Create Service File</h3>
|
|
338
|
+
<pre class="language-bash mb-4"><code># Create the systemd service file
|
|
339
|
+
sudo nano /etc/systemd/system/yakmesh.service</code></pre>
|
|
340
|
+
|
|
341
|
+
<p class="text-mountain-300 mb-3">Paste this content:</p>
|
|
342
|
+
<pre class="language-bash mb-4"><code>[Unit]
|
|
343
|
+
Description=YAKMESH Node
|
|
344
|
+
Documentation=https://yakmesh.com/docs
|
|
345
|
+
After=network-online.target
|
|
346
|
+
Wants=network-online.target
|
|
347
|
+
|
|
348
|
+
[Service]
|
|
349
|
+
Type=simple
|
|
350
|
+
User=pi
|
|
351
|
+
WorkingDirectory=/home/pi/yakmesh
|
|
352
|
+
ExecStart=/usr/bin/npx yakmesh start
|
|
353
|
+
Restart=always
|
|
354
|
+
RestartSec=10
|
|
355
|
+
|
|
356
|
+
# Security hardening
|
|
357
|
+
NoNewPrivileges=true
|
|
358
|
+
ProtectSystem=strict
|
|
359
|
+
ProtectHome=read-only
|
|
360
|
+
ReadWritePaths=/home/pi/yakmesh/data
|
|
361
|
+
|
|
362
|
+
# Resource limits
|
|
363
|
+
MemoryMax=1G
|
|
364
|
+
CPUQuota=80%
|
|
365
|
+
|
|
366
|
+
# Environment
|
|
367
|
+
Environment=NODE_ENV=production
|
|
368
|
+
|
|
369
|
+
[Install]
|
|
370
|
+
WantedBy=multi-user.target</code></pre>
|
|
371
|
+
|
|
372
|
+
<h3 class="font-semibold text-lg mb-3">Enable and Start Service</h3>
|
|
373
|
+
<pre class="language-bash mb-4"><code># Reload systemd to recognize new service
|
|
374
|
+
sudo systemctl daemon-reload
|
|
375
|
+
|
|
376
|
+
# Enable auto-start on boot
|
|
377
|
+
sudo systemctl enable yakmesh
|
|
378
|
+
|
|
379
|
+
# Start the service now
|
|
380
|
+
sudo systemctl start yakmesh
|
|
381
|
+
|
|
382
|
+
# Check status
|
|
383
|
+
sudo systemctl status yakmesh</code></pre>
|
|
384
|
+
|
|
385
|
+
<h3 class="font-semibold text-lg mb-3">Useful Service Commands</h3>
|
|
386
|
+
<pre class="language-bash"><code># View logs
|
|
387
|
+
sudo journalctl -u yakmesh -f
|
|
388
|
+
|
|
389
|
+
# Restart service
|
|
390
|
+
sudo systemctl restart yakmesh
|
|
391
|
+
|
|
392
|
+
# Stop service
|
|
393
|
+
sudo systemctl stop yakmesh
|
|
394
|
+
|
|
395
|
+
# Disable auto-start
|
|
396
|
+
sudo systemctl disable yakmesh</code></pre>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- Power and Networking -->
|
|
400
|
+
<div class="tutorial-card">
|
|
401
|
+
<div class="step-header">
|
|
402
|
+
<span class="step-number">6</span>
|
|
403
|
+
<h2 class="text-xl font-bold">Power and Networking Tips</h2>
|
|
404
|
+
</div>
|
|
405
|
+
|
|
406
|
+
<h3 class="font-semibold text-lg mb-3">Stable Power Supply</h3>
|
|
407
|
+
<ul class="space-y-2 text-mountain-300 mb-4">
|
|
408
|
+
<li>• Use the official Raspberry Pi power supply (5V 3A for Pi 4/5)</li>
|
|
409
|
+
<li>• Avoid USB hubs or phone chargers - they may cause undervoltage</li>
|
|
410
|
+
<li>• Consider a UPS HAT for power outage protection</li>
|
|
411
|
+
<li>• Check for undervoltage warnings: <code class="bg-mountain-800 px-1 rounded">vcgencmd get_throttled</code></li>
|
|
412
|
+
</ul>
|
|
413
|
+
|
|
414
|
+
<h3 class="font-semibold text-lg mb-3">Network Reliability</h3>
|
|
415
|
+
<ul class="space-y-2 text-mountain-300 mb-4">
|
|
416
|
+
<li>• <strong>Use Ethernet</strong> whenever possible - WiFi can be unreliable for 24/7 operation</li>
|
|
417
|
+
<li>• If using WiFi, configure a static IP to prevent DHCP issues</li>
|
|
418
|
+
<li>• Consider a powered USB Ethernet adapter for gigabit speeds on Pi 3</li>
|
|
419
|
+
</ul>
|
|
420
|
+
|
|
421
|
+
<h3 class="font-semibold text-lg mb-3">Static IP Configuration</h3>
|
|
422
|
+
<pre class="language-bash mb-4"><code># Edit dhcpcd configuration
|
|
423
|
+
sudo nano /etc/dhcpcd.conf
|
|
424
|
+
|
|
425
|
+
# Add at the end (adjust for your network):
|
|
426
|
+
interface eth0
|
|
427
|
+
static ip_address=192.168.1.100/24
|
|
428
|
+
static routers=192.168.1.1
|
|
429
|
+
static domain_name_servers=1.1.1.1 8.8.8.8
|
|
430
|
+
|
|
431
|
+
# Restart networking
|
|
432
|
+
sudo systemctl restart dhcpcd</code></pre>
|
|
433
|
+
|
|
434
|
+
<h3 class="font-semibold text-lg mb-3">Firewall Configuration</h3>
|
|
435
|
+
<pre class="language-bash"><code># Install and configure ufw
|
|
436
|
+
sudo apt install -y ufw
|
|
437
|
+
|
|
438
|
+
# Allow SSH (important - don't lock yourself out!)
|
|
439
|
+
sudo ufw allow ssh
|
|
440
|
+
|
|
441
|
+
# Allow YAKMESH ports
|
|
442
|
+
sudo ufw allow 3000/tcp # Dashboard
|
|
443
|
+
sudo ufw allow 9001/tcp # WebSocket
|
|
444
|
+
|
|
445
|
+
# Enable firewall
|
|
446
|
+
sudo ufw enable
|
|
447
|
+
|
|
448
|
+
# Check status
|
|
449
|
+
sudo ufw status</code></pre>
|
|
450
|
+
</div>
|
|
451
|
+
|
|
452
|
+
<!-- Performance Considerations -->
|
|
453
|
+
<div class="tutorial-card">
|
|
454
|
+
<div class="step-header">
|
|
455
|
+
<span class="step-number">7</span>
|
|
456
|
+
<h2 class="text-xl font-bold">Performance Considerations</h2>
|
|
457
|
+
</div>
|
|
458
|
+
|
|
459
|
+
<h3 class="font-semibold text-lg mb-3">Temperature Monitoring</h3>
|
|
460
|
+
<p class="text-mountain-300 mb-3">
|
|
461
|
+
Post-quantum crypto is CPU-intensive. Monitor temperatures to prevent throttling:
|
|
462
|
+
</p>
|
|
463
|
+
<pre class="language-bash mb-4"><code># Check current temperature
|
|
464
|
+
vcgencmd measure_temp
|
|
465
|
+
|
|
466
|
+
# Monitor continuously
|
|
467
|
+
watch -n 1 vcgencmd measure_temp
|
|
468
|
+
|
|
469
|
+
# Install htop for system monitoring
|
|
470
|
+
sudo apt install -y htop</code></pre>
|
|
471
|
+
|
|
472
|
+
<div class="theme-callout rounded-lg p-4 border mb-4">
|
|
473
|
+
<p class="font-semibold theme-accent mb-1">🌡️ Temperature Guidelines</p>
|
|
474
|
+
<ul class="text-sm text-mountain-300 space-y-1">
|
|
475
|
+
<li>• <strong><60°C:</strong> Normal operation</li>
|
|
476
|
+
<li>• <strong>60-80°C:</strong> Warm but acceptable with cooling</li>
|
|
477
|
+
<li>• <strong>>80°C:</strong> Throttling begins - improve cooling</li>
|
|
478
|
+
<li>• <strong>>85°C:</strong> Heavy throttling - add active cooling</li>
|
|
479
|
+
</ul>
|
|
480
|
+
</div>
|
|
481
|
+
|
|
482
|
+
<h3 class="font-semibold text-lg mb-3">SSD for Better Performance</h3>
|
|
483
|
+
<p class="text-mountain-300 mb-3">
|
|
484
|
+
For maximum reliability and speed, boot from an SSD instead of microSD:
|
|
485
|
+
</p>
|
|
486
|
+
<pre class="language-bash mb-4"><code># Check if your Pi supports USB boot (Pi 4/5)
|
|
487
|
+
vcgencmd bootloader_version
|
|
488
|
+
|
|
489
|
+
# Use Raspberry Pi Imager to flash OS to SSD
|
|
490
|
+
# Then update boot order in raspi-config:
|
|
491
|
+
sudo raspi-config
|
|
492
|
+
# Advanced Options → Boot Order → USB Boot</code></pre>
|
|
493
|
+
|
|
494
|
+
<h3 class="font-semibold text-lg mb-3">Memory Optimization</h3>
|
|
495
|
+
<pre class="language-bash"><code># Reduce GPU memory (headless server doesn't need it)
|
|
496
|
+
sudo nano /boot/config.txt
|
|
497
|
+
|
|
498
|
+
# Add or modify:
|
|
499
|
+
gpu_mem=16
|
|
500
|
+
|
|
501
|
+
# Enable zram for better memory management
|
|
502
|
+
sudo apt install -y zram-tools
|
|
503
|
+
sudo systemctl enable zramswap
|
|
504
|
+
sudo reboot</code></pre>
|
|
505
|
+
</div>
|
|
506
|
+
|
|
507
|
+
<!-- Access Dashboard -->
|
|
508
|
+
<div class="tutorial-card">
|
|
509
|
+
<h2 class="text-xl font-bold mb-4">✅ Access Your Node</h2>
|
|
510
|
+
<p class="text-mountain-300 mb-4">
|
|
511
|
+
Once running, access your YAKMESH dashboard from any device on your network:
|
|
512
|
+
</p>
|
|
513
|
+
<pre class="language-bash mb-4"><code># From your computer's browser, go to:
|
|
514
|
+
http://yakmesh-node.local:3000/dashboard
|
|
515
|
+
|
|
516
|
+
# Or use the IP address:
|
|
517
|
+
http://192.168.1.100:3000/dashboard</code></pre>
|
|
518
|
+
|
|
519
|
+
<h3 class="font-semibold text-lg mb-3">Verify Node Health</h3>
|
|
520
|
+
<pre class="language-bash"><code># Check node status via API
|
|
521
|
+
curl http://yakmesh-node.local:3000/health
|
|
522
|
+
|
|
523
|
+
# Expected response:
|
|
524
|
+
{
|
|
525
|
+
"status": "healthy",
|
|
526
|
+
"network": "your-network-name",
|
|
527
|
+
"algorithm": "ML-DSA-65",
|
|
528
|
+
"peers": 5,
|
|
529
|
+
"uptime": "2h 15m"
|
|
530
|
+
}</code></pre>
|
|
531
|
+
</div>
|
|
532
|
+
|
|
533
|
+
<!-- Success -->
|
|
534
|
+
<div class="bg-emerald-900/30 border border-emerald-600 rounded-xl p-6 mb-8">
|
|
535
|
+
<h2 class="text-xl font-bold mb-2 text-emerald-400">🎉 Your Pi Node is Ready!</h2>
|
|
536
|
+
<p class="text-mountain-300 mb-4">
|
|
537
|
+
Your Raspberry Pi is now running a dedicated YAKMESH node 24/7. It will:
|
|
538
|
+
</p>
|
|
539
|
+
<ul class="space-y-1 text-mountain-300">
|
|
540
|
+
<li>• Automatically start when the Pi boots</li>
|
|
541
|
+
<li>• Restart if it crashes</li>
|
|
542
|
+
<li>• Connect to peers and participate in the mesh</li>
|
|
543
|
+
<li>• Serve your dashboard on port 3000</li>
|
|
544
|
+
</ul>
|
|
545
|
+
</div>
|
|
546
|
+
|
|
547
|
+
<!-- Maintenance Tips -->
|
|
548
|
+
<div class="tutorial-card">
|
|
549
|
+
<h2 class="text-xl font-bold mb-4">🔧 Maintenance Tips</h2>
|
|
550
|
+
<div class="space-y-4">
|
|
551
|
+
<div>
|
|
552
|
+
<p class="font-semibold text-white mb-1">Keep software updated</p>
|
|
553
|
+
<pre class="language-bash text-sm"><code>sudo apt update && sudo apt upgrade -y
|
|
554
|
+
cd ~/yakmesh && npm update yakmesh</code></pre>
|
|
555
|
+
</div>
|
|
556
|
+
<div>
|
|
557
|
+
<p class="font-semibold text-white mb-1">Backup your node identity</p>
|
|
558
|
+
<pre class="language-bash text-sm"><code># Copy to your computer
|
|
559
|
+
scp -r pi@yakmesh-node.local:~/yakmesh/data ./yakmesh-backup</code></pre>
|
|
560
|
+
</div>
|
|
561
|
+
<div>
|
|
562
|
+
<p class="font-semibold text-white mb-1">Check logs for issues</p>
|
|
563
|
+
<pre class="language-bash text-sm"><code>sudo journalctl -u yakmesh --since "1 hour ago"</code></pre>
|
|
564
|
+
</div>
|
|
565
|
+
</div>
|
|
566
|
+
</div>
|
|
567
|
+
|
|
568
|
+
<!-- Navigation Footer -->
|
|
569
|
+
<div class="border-t border-mountain-700 mt-12 pt-8">
|
|
570
|
+
<div class="flex flex-col sm:flex-row gap-4">
|
|
571
|
+
<a href="domain-setup.html" class="flex-1 block bg-mountain-800 border border-mountain-700 rounded-xl p-4 hover:border-emerald-500 transition group">
|
|
572
|
+
<div class="text-xs text-mountain-400 mb-1">← Previous</div>
|
|
573
|
+
<div class="flex items-center gap-2">
|
|
574
|
+
<span class="text-xl">🌍</span>
|
|
575
|
+
<span class="font-semibold group-hover:text-emerald-400">Using with a Domain Name</span>
|
|
576
|
+
</div>
|
|
577
|
+
</a>
|
|
578
|
+
<a href="mobile-access.html" class="flex-1 block bg-mountain-800 border border-mountain-700 rounded-xl p-4 hover:border-emerald-500 transition group">
|
|
579
|
+
<div class="text-xs text-mountain-400 mb-1">Next →</div>
|
|
580
|
+
<div class="flex items-center gap-2">
|
|
581
|
+
<span class="text-xl">📱</span>
|
|
582
|
+
<span class="font-semibold group-hover:text-emerald-400">Mobile Access</span>
|
|
583
|
+
</div>
|
|
584
|
+
</a>
|
|
585
|
+
</div>
|
|
586
|
+
</div>
|
|
587
|
+
|
|
588
|
+
</div>
|
|
589
|
+
</main>
|
|
590
|
+
|
|
591
|
+
<footer class="docs-footer">
|
|
592
|
+
<p>© 2026 YAKMESH™</p>
|
|
593
|
+
</footer>
|
|
594
|
+
|
|
595
|
+
<script src="../prism.min.js"></script>
|
|
596
|
+
<script src="../prism-bash.min.js"></script>
|
|
597
|
+
<script src="../prism-javascript.min.js"></script>
|
|
598
|
+
<script src="../docs.js"></script>
|
|
599
|
+
</body>
|
|
600
|
+
</html>
|