Repository navigation
Expand file tree
/
Copy pathindex.en.html
More file actions
489 lines (471 loc) · 26.7 KB
/
Copy pathindex.en.html
File metadata and controls
489 lines (471 loc) · 26.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<title>MoX · A solo developer's toolbox universe</title>
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<meta name="description" content="The MoX family — moxsh liquid-glass terminal, moxwebgpu WebGPU compute framework, mox-id unified identity backend. Desktop-grade tools in your pocket; compute pushed to your device.">
<meta name="color-scheme" content="dark">
<!-- Warm up cross-origin connections: faster GitHub OAuth hop, zero-lag avatars -->
<link rel="preconnect" href="https://github.com" crossorigin>
<link rel="dns-prefetch" href="https://github.com">
<link rel="preconnect" href="https://avatars.githubusercontent.com" crossorigin>
<link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://challenges.cloudflare.com; style-src 'self' 'unsafe-inline'; img-src 'self' https://avatars.githubusercontent.com data:; connect-src 'self' https://mox-site.pages.dev; frame-src https://challenges.cloudflare.com; font-src 'self'; object-src 'none'; base-uri 'none'; form-action 'self'; upgrade-insecure-requests">
<meta name="referrer" content="strict-origin-when-cross-origin">
<link rel="stylesheet" href="index.en.css">
</head>
<body>
<canvas id="gpuBg" aria-hidden="true"></canvas>
<nav class="glass">
<div class="brand"><img class="mark" src="favicon.svg" alt="MoX" width="26" height="26"><span>MoX</span></div>
<div class="links">
<a href="#products">Products</a>
<a href="#features">moxsh</a>
<a href="experience.html">Try online</a>
<a href="#account">Account</a>
<a href="#download">Download</a>
<a href="#plans">Plans</a>
<a href="#roadmap">Roadmap</a>
<a href="#vision">Vision</a>
<a href="#community">Community</a>
<a href="#contact">Contact</a>
<a class="lang" href="index.html">中文</a>
<span id="authSlot"></span>
</div>
</nav>
<header class="wrap">
<span class="eyebrow"><span class="dot"></span>MoX family · a solo developer's toolbox universe</span>
<h1>Desktop-grade power,<br><span class="em">in the palm of your hand</span>.</h1>
<p class="sub">MoX is a set of independent tools — a liquid-glass terminal, a WebGPU compute framework, a unified identity & cloud-sync backend… They share one account and one cloud sync, pushing compute to your device instead of someone's cloud.</p>
<div class="hero-cta">
<a class="btn primary" href="#products">Meet the MoX family</a>
<a class="btn" href="#download">Get moxsh</a>
<a class="btn" href="#account">How the account works</a>
</div>
<div class="stage">
<div class="device glass" id="device" aria-hidden="true">
<div class="notch"></div>
<div class="screen">
<div class="ln"><span class="p">moxsh</span> <span class="c">❯</span> neofetch</div>
<div class="ln"><span class="g">moxsh</span> 2.1.0 · Android 15</div>
<div class="ln">Rust core · 120Hz render</div>
<div class="ln"> </div>
<div class="ln"><span class="p">moxsh</span> <span class="c">❯</span> pkg install neovim</div>
<div class="ln">resolving… <span class="g">done</span></div>
<div class="ln">fetching… <span class="g">done</span></div>
<div class="ln"> </div>
<div class="ln"><span class="p">moxsh</span> <span class="c">❯</span> <span class="cur"></span></div>
</div>
</div>
</div>
</header>
<section id="products" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">The MoX family</div>
<p class="sec-desc">One account, one cloud sync, tools for different jobs. Shipped ones work today; planned ones are what's next.</p>
</div>
<div class="grid">
<div class="card glass fadeup">
<span class="status on">✅ Live</span>
<h3>moxsh</h3>
<p>A liquid-glass terminal on Android. Rust core, fully Termux-compatible, no root, install and go.</p>
<a class="more" href="#features">What makes it strong ↓</a>
</div>
<div class="card glass fadeup">
<span class="status on">✅ Live</span>
<h3>mox-id</h3>
<p>MoX's unified identity & account base: one-click GitHub login, cloud sync, membership, billing.</p>
<a class="more" href="#account">Account & cloud sync ↓</a>
</div>
<div class="card glass fadeup">
<span class="status dev">✅ Open source · v1.0</span>
<h3>moxwebgpu</h3>
<p>A zero-dependency WebGPU GPGPU framework: typed tensors, raw WGSL kernels, a lazy compute graph. Compute pushed to the visitor's GPU.</p>
<a class="more" href="webgpu/">Live demo →</a>
</div>
<div class="card glass fadeup">
<span class="status plan">Planned · TBD</span>
<h3>moxbox</h3>
<p>File manager & system suite: phone storage, processes, network — all in one glass UI.</p>
</div>
<div class="card glass fadeup">
<span class="status plan">Planned · TBD</span>
<h3>moxcode</h3>
<p>A lightweight mobile IDE: terminal + editor + run-preview in one, coding in your palm.</p>
</div>
</div>
</section>
<section id="features" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">A terminal built for speed & beauty</div>
<p class="sec-desc">moxsh is MoX's flagship: Rust core rewritten from scratch, UI redrawn in liquid glass. Every detail rethought from the bottom up.</p>
</div>
<div class="grid">
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><path d="M4 5h16v11H7l-3 3V5z"/><path d="M8 9l3 3-3 3"/><path d="M13 15h3"/></svg></div>
<h3>Rust core</h3>
<p>PTY, VT parsing, scrollback, render scheduling, package signing — all in Rust. Memory-safe and fast.</p>
</div>
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><path d="M12 3l7 4v6c0 4-3 7-7 8-4-1-7-4-7-8V7l7-4z"/></svg></div>
<h3>Liquid-glass UI</h3>
<p>Live blur, translucent layers, top highlight & refraction edges — like real glass, not a sticker.</p>
</div>
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/><path d="M12 13v8"/></svg></div>
<h3>Termux-compatible</h3>
<p>Eats the official Termux repos; <code>*.deb</code> installs and runs; commands & ecosystem are identical.</p>
</div>
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="6" rx="1"/><rect x="3" y="14" width="18" height="6" rx="1"/><path d="M7 7h.01M7 17h.01"/></svg></div>
<h3>PRoot distros</h3>
<p>Ubuntu / Debian / Kali / Alpine one-tap; isolated sandbox to play in, without touching the system.</p>
</div>
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><path d="M12 3l1.8 4.6L18 9l-4.2 1.4L12 15l-1.8-4.6L6 9l4.2-1.4z"/><path d="M18 15l.9 2.3L21 18l-2.1.7L18 21l-.9-2.3L15 18l2.1-.7z"/></svg></div>
<h3>AI assistant</h3>
<p>Explains errors, writes scripts, manages env; supports DeepSeek / Zhipu / Qwen / Kimi and more.</p>
</div>
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><path d="M12 3l7 3v5c0 4-3 7-7 8-4-1-7-4-7-8V6l7-3z"/><path d="M9 12l2 2 4-4"/></svg></div>
<h3>Hardened IPC</h3>
<p>Challenge-response + HMAC-SHA256 auth. Cross-process calls never run naked; plugins stay safe.</p>
</div>
</div>
</section>
<section id="account" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">One MoX account, every device</div>
<p class="sec-desc">All MoX products share one identity (powered by the <b>mox-id</b> backend). After sign-in, cloud sync is ready to use.</p>
</div>
<div class="grid">
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75"/></svg></div>
<h3>Normal users · cloud sync</h3>
<p>Multi-device config and command history sync in real time; AI quota shared across devices. Any GitHub user can sign in, free to start.</p>
</div>
<div class="card glass fadeup">
<div class="ico"><svg viewBox="0 0 24 24"><rect x="4" y="11" width="16" height="9" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/></svg></div>
<h3>Security</h3>
<p>Sign in with GitHub; credentials stay local. Cloud-sync data is client-encrypted before upload — the server never sees plaintext. One-tap sign-out.</p>
</div>
</div>
<div class="glass support fadeup" style="margin-top:22px">
<div class="sec-title" style="font-size:24px">Want to try first?</div>
<p class="sec-desc">Tap "Sign in" at the top-right to enter with your GitHub account and enjoy cloud sync right away.</p>
<a class="btn primary" id="loginCta" href="#">Sign in to MoX</a>
</div>
</section>
<section id="plans" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">Future plans · TBD</div>
<p class="sec-desc">After moxsh / mox-id / moxwebgpu, we want to keep exploring "desktop-grade tools in your pocket". These are just <b>possible directions</b> — <b>may ship, may never</b>; nothing is promised until released.</p>
</div>
<div class="plans">
<div class="plan fadeup">
<span class="tag">Planned · TBD</span>
<h3>moxbox</h3>
<p>File manager & system suite: phone storage, processes, network — one glass UI.</p>
<div class="note">※ Early concept; no release commitment.</div>
</div>
<div class="plan fadeup">
<span class="tag">Planned · TBD</span>
<h3>moxcode</h3>
<p>A lightweight mobile IDE: terminal + editor + run-preview in one.</p>
<div class="note">※ Early concept; may proceed, may be dropped.</div>
</div>
</div>
</section>
<!-- ===== Roadmap ===== -->
<section id="roadmap" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">Roadmap · The MoX journey</div>
<p class="sec-desc">We build "desktop-grade tools in your pocket" phase by phase. What's shipped already works; what's in progress is being polished; what's planned is what's next.</p>
</div>
<div class="timeline">
<div class="tl-item done fadeup">
<div class="tl-dot"></div>
<div class="tl-card glass">
<div class="tl-top"><span class="tl-phase">Phase 1</span><span class="status on">✅ Shipped</span></div>
<h3>moxsh 1.0 · Liquid-glass terminal</h3>
<p>A liquid-glass terminal on Android: Rust core, fully Termux-compatible, no root, install and go.</p>
<ul class="tl-list">
<li>Rust PTY / VT parsing / scrollback / render scheduling</li>
<li>Termux-compatible + PRoot distros (Ubuntu / Debian / Kali / Alpine)</li>
<li>Hardened IPC: challenge-response + HMAC-SHA256 auth</li>
</ul>
</div>
</div>
<div class="tl-item done fadeup">
<div class="tl-dot"></div>
<div class="tl-card glass">
<div class="tl-top"><span class="tl-phase">Phase 2</span><span class="status on">✅ Shipped</span></div>
<h3>mox-id · Unified identity & cloud sync</h3>
<p>The MoX account base: one-click GitHub login; cloud sync, membership and billing all flow from here.</p>
<ul class="tl-list">
<li>GitHub OAuth login, credentials stay local</li>
<li>Multi-device config / command history real-time sync (client-encrypted)</li>
<li>Membership tiers, billing reconciliation, internal operations</li>
</ul>
</div>
</div>
<div class="tl-item done fadeup">
<div class="tl-dot"></div>
<div class="tl-card glass">
<div class="tl-top"><span class="tl-phase">Phase 3</span><span class="status on">✅ Shipped</span></div>
<h3>moxwebgpu 1.0 · WebGPU compute</h3>
<p>A zero-dependency WebGPU GPGPU framework: typed tensors, raw WGSL kernels, a lazy compute graph — compute pushed to the visitor's GPU.</p>
<ul class="tl-list">
<li>30+ ops + arbitrary-axis reduction, 27 real GPU e2e</li>
<li>Autograd (reverse mode, stacked on the lazy graph)</li>
<li>npm publish + live demo + docs site</li>
</ul>
</div>
</div>
<div class="tl-item active fadeup">
<div class="tl-dot"></div>
<div class="tl-card glass">
<div class="tl-top"><span class="tl-phase">Phase 4</span><span class="status dev">🔄 In progress</span></div>
<h3>moxsh performance & AI</h3>
<p>Push the flagship terminal further: higher frame rate, lower power, and on-device AI that actually runs.</p>
<ul class="tl-list">
<li>120Hz render + font atlas reuse</li>
<li>NEON-vectorized hot paths</li>
<li>On-device AI inference (AiProvider.Local reserved)</li>
</ul>
</div>
</div>
<div class="tl-item fadeup">
<div class="tl-dot"></div>
<div class="tl-card glass">
<div class="tl-top"><span class="tl-phase">Phase 5</span><span class="status plan">📋 Planned</span></div>
<h3>.mox ecosystem & plugin market</h3>
<p>Make plugins, themes and scripts distributable and verifiable: unified schema, signed distribution, one-tap install.</p>
<ul class="tl-list">
<li>Unified plugin / theme schema and version markers</li>
<li>HMAC-SHA256 signed distribution & verification</li>
<li>Official plugin catalog and community submissions</li>
</ul>
</div>
</div>
<div class="tl-item fadeup">
<div class="tl-dot"></div>
<div class="tl-card glass">
<div class="tl-top"><span class="tl-phase">Phase 6</span><span class="status plan">💡 TBD</span></div>
<h3>moxbox / moxcode</h3>
<p>Bring more desktop-grade power to your pocket: a file & system suite, a lightweight mobile IDE. Whether to proceed depends on actual releases.</p>
<ul class="tl-list">
<li>moxbox: unified storage / process / network management</li>
<li>moxcode: terminal + editor + run-preview in one</li>
<li>※ Planned · TBD, may ship or may never</li>
</ul>
</div>
</div>
</div>
</section>
<!-- ===== Vision ===== -->
<section id="vision" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">Our vision</div>
<p class="sec-desc">Not another product off the "App factory" line. What MoX wants is simple, but we take it seriously.</p>
</div>
<div class="vision-grid">
<div class="vision glass fadeup">
<div class="vico"><svg viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20z"/><path d="M8 12l2.5 2.5L16 9"/></svg></div>
<blockquote>Desktop-grade power, in your palm</blockquote>
<p>A phone isn't a "make-do small screen" — it's a pocket workstation that runs a real terminal and real GPU compute. We rebuild every detail to that standard.</p>
</div>
<div class="vision glass fadeup">
<div class="vico"><svg viewBox="0 0 24 24"><path d="M12 3l8 4v6c0 5-3.5 8.5-8 10-4.5-1.5-8-5-8-10V6l8-4z"/><path d="M9 12l2 2 4-4"/></svg></div>
<blockquote>Compute pushed to your device</blockquote>
<p>Privacy first: cloud-sync data is client-encrypted before upload — the server never sees plaintext. If it can run locally, it stays off the cloud.</p>
</div>
<div class="vision glass fadeup">
<div class="vico"><svg viewBox="0 0 24 24"><path d="M16 18l6-6-6-6"/><path d="M8 6l-6 6 6 6"/></svg></div>
<blockquote>Indie dev + AI, together</blockquote>
<p>Small and sharp, fast to iterate. One person owns the quality end-to-end; AI eats the repetitive work so ideas ship faster.</p>
</div>
<div class="vision glass fadeup">
<div class="vico"><svg viewBox="0 0 24 24"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/></svg></div>
<blockquote>Open source, transparent, auditable</blockquote>
<p>Every repo is public; security headers and CSP are verified by CI on every deploy. What you see is what runs on your device.</p>
</div>
</div>
</section>
<!-- ===== Community ===== -->
<section id="community" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">Community & build together</div>
<p class="sec-desc">Small indie projects fear being unknown most. Whether you're a user, a developer, or just curious — here's how to find us and help more people discover it.</p>
</div>
<div class="community-grid">
<div class="comm glass fadeup">
<div class="cico"><svg viewBox="0 0 24 24"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.9a3.4 3.4 0 0 0-1-2.6c3-.3 6-1.5 6-6.6a5 5 0 0 0-1.4-3.5A4.7 4.7 0 0 0 17 .5 13 13 0 0 0 12 2.5 13 13 0 0 0 7 .5 4.7 4.7 0 0 0 4.6 4a5 5 0 0 0-1.4 3.5c0 5 3 6.3 6 6.6a3.4 3.4 0 0 0-1 2.6V22"/></svg></div>
<h3>GitHub org</h3>
<p>All source, build artifacts and issues live here. A Star, a Watch, a PR — all real support.</p>
<a class="link" href="https://github.com/codecloud-dev" target="_blank" rel="noopener">codecloud-dev →</a>
</div>
<div class="comm glass fadeup">
<div class="cico"><svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4.5L18 21l-6-4-6 4 1.5-7.5L2 9h7z"/></svg></div>
<h3>Star it</h3>
<p>If it helps you, drop a Star ★. For an indie project, every Star is a chance to be seen.</p>
<a class="link" href="https://github.com/codecloud-dev/moxsh-terminal" target="_blank" rel="noopener">Star moxsh →</a>
</div>
<div class="comm glass fadeup">
<div class="cico"><svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg></div>
<h3>Discuss & feedback</h3>
<p>Something's off, an idea, or want to build together? Open an Issue or Discussion — we read them.</p>
<a class="link" href="https://github.com/codecloud-dev/moxsh-terminal/issues" target="_blank" rel="noopener">Open an Issue →</a>
</div>
<div class="comm glass fadeup">
<div class="cico"><svg viewBox="0 0 24 24"><path d="M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 0 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z"/></svg></div>
<h3>Support on Afdian</h3>
<p>If MoX helped you, a coffee-sized tip keeps it going further. The project uses Afdian for sponsorship.</p>
<a class="link" href="https://afdian.com/a/cloudharbor" target="_blank" rel="noopener">Go to Afdian →</a>
<p style="margin-top:12px"><img src="assets/afdian-qr.jpg" width="180" alt="Afdian sponsorship QR code" loading="lazy" decoding="async"></p>
</div>
<div class="comm glass fadeup">
<div class="cico"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18"/></svg></div>
<h3>QQ group</h3>
<p>Want to chat live, grab an APK, meet like-minded folks? Request to join via the contacts below.</p>
<a class="link" href="#contact">See contacts →</a>
</div>
<div class="comm glass fadeup">
<div class="cico"><svg viewBox="0 0 24 24"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M3 7l9 6 9-6"/></svg></div>
<h3>Email</h3>
<p>Business, press, or collaboration invites — email is the most direct.</p>
<a class="link" href="#contact">See email →</a>
</div>
</div>
</section>
<section id="download" class="wrap">
<div class="sec-head fadeup">
<div class="sec-title">Download moxsh</div>
<p class="sec-desc">Build artifacts are published continuously. Pick either way.</p>
</div>
<div class="dl-grid">
<div class="dl glass fadeup">
<h3>Release APK</h3>
<p>The latest auto-built, signed APK. Fastest path when GitHub is reachable.</p>
<a class="btn primary" id="dlLatest" href="downloads.en.html">Go to downloads →</a>
</div>
<div class="dl glass fadeup">
<h3>Contact us</h3>
<p>Network trouble or want a nightly? Reach us below and we'll send the APK directly.</p>
<a class="btn" href="#contact">See contacts ↓</a>
</div>
</div>
</section>
<section id="support" class="wrap">
<div class="glass support fadeup">
<div class="sec-title" style="font-size:28px">Like MoX? Help more people find it</div>
<p class="sec-desc">Small indie projects fear being unknown most. If it helps you, a <b>Star, a follow, a share</b> is the biggest encouragement — and helps more terminal-weary friends find a better tool.</p>
<a class="btn primary" id="starBtn" href="#" target="_blank" rel="noopener">★ Star on GitHub</a>
</div>
</section>
<section id="contact" class="wrap">
<div class="glass contact fadeup">
<div class="sec-title" style="font-size:26px">Contact us</div>
<p>Feedback, collaboration, or getting an APK — just reach us. Each channel has a light gate to filter noise.</p>
<div id="contactCards" class="show">
<div class="citem glass">
<div class="label">Email · sign in & pass human verification</div>
<div class="val" id="mailVal">••••••••••@163.com</div>
<!-- Real CAPTCHA: Cloudflare Turnstile (server-side siteverify). Replace data-sitekey with yours. -->
<div class="cf-turnstile" id="mailCaptcha"
data-sitekey="__TURNSTILE_SITEKEY__"
data-callback="onContactCaptcha"
data-expired-callback="onContactExpired"
data-theme="auto"></div>
<div class="login-hint" id="contactLoginHint" style="display:none">
To view contacts, <a href="#" id="contactLoginBtn">sign in to MoX</a> first (GitHub one-click)
</div>
<button class="btn copy" id="mailCopyBtn" data-act="copy" data-target="mailVal" style="display:none">Copy email</button>
</div>
<div class="citem glass">
<div class="label">QQ · state who you are & why</div>
<div class="val" id="qqVal">••••••••••</div>
<button class="btn" id="qqAskBtn">Request QQ</button>
<div id="qqForm" style="display:none">
<textarea id="qqFrom" placeholder="Who you are: where did you find MoX, what you do… (at least 12 chars)" maxlength="200"></textarea>
<textarea id="qqWhy" placeholder="What you want: what you'd like to talk about or need help with… (at least 6 chars)" maxlength="200"></textarea>
<button class="btn primary" id="qqSubmitBtn">Submit & show QQ</button>
</div>
<div id="qqDone" style="display:none">
<div class="qq-note">Paste this request note when adding (generated from your input):</div>
<div class="qq-brief" id="qqBrief"></div>
<button class="btn copy" id="qqBriefCopyBtn" data-act="copy" data-target="qqBrief">Copy request note</button>
<button class="btn copy" id="qqCopyBtn" data-act="copy" data-target="qqVal">Copy QQ number</button>
</div>
</div>
</div>
</div>
</section>
<footer class="wrap">
<div class="fb"><img src="favicon.svg" alt="MoX" style="width:20px;height:20px;border-radius:6px;display:inline-block;vertical-align:-3px"> MoX</div>
<div>© 2026 MoX · Built by an indie developer with AI</div>
<div>Source & all build artifacts on <a href="#" id="ghLink">GitHub</a></div>
<div style="margin-top:8px"><a href="#" id="ghStar">If it helps, don't forget a Star ★</a></div>
<div style="margin-top:8px">This site's background is computed in real time on your GPU by <a href="/webgpu/">moxwebgpu</a></div>
</footer>
<div id="gate" class="gate" aria-hidden="true">
<div class="glass gate-card">
<div class="gate-ico"><svg viewBox="0 0 24 24"><path d="M12 3l7 3v5c0 4-3 7-7 8-4-1-7-4-7-8V6l7-3z"/><path d="M9 12l2 2 4-4"/></svg></div>
<h3>Security check</h3>
<p id="gateMsg">Unusual traffic detected. Please slide to verify to continue.</p>
<div class="slider" id="slider">
<div class="slider-fill" id="sliderFill"></div>
<div class="slider-text" id="sliderText">Hold and drag to the right</div>
<div class="slider-knob" id="sliderKnob" role="slider" aria-label="Slide to verify"><span>›</span></div>
</div>
<div class="gate-note">No quiz · <a href="#" id="gateSkip">Continue</a> · <a href="#" id="gateWhy">Why?</a></div>
</div>
</div>
<div class="toast" id="toast"></div>
<div class="modal-mask" id="loginMask">
<div class="modal glass">
<h3>Sign in to MoX</h3>
<div class="login-status" id="loginStatus">
<span class="dot"></span><span id="loginStatusText">Checking sign-in service…</span>
</div>
<div class="login-blocks">
<div class="lb"><span class="lbi">👤</span><div><b>Normal users</b>: cloud sync (multi-device config / command history in real time), AI assistant on call.</div></div>
<div class="lb"><span class="lbi">🔒</span><div><b>Security</b>: sign in with GitHub; credentials stay local; cloud-sync data is client-encrypted.</div></div>
<div class="lb"><span class="lbi">🔗</span><div><b>One account, two sign-ins</b>: after signing in you can bind both GitHub and Gitee below — Gitee is faster in China, GitHub abroad, with cloud sync fully shared.</div></div>
</div>
<div id="loginBox">
<a class="gh" id="ghLoginBtn" href="#">Sign in with GitHub</a>
<a class="gh gitee" id="giteeLoginBtn" href="#">Sign in with Gitee (faster in China)</a>
<div class="or">or</div>
<input id="tokInput" type="password" placeholder="Paste a GitHub Token (ghp_ / github_pat_)" autocomplete="off" />
<div class="row">
<button id="tokLoginBtn" class="primary">Sign in</button>
<button id="tokCancelBtn">Cancel</button>
</div>
</div>
<div id="loggedInBox" style="display:none">
<div class="lb"><span class="lbi">✅</span><div>Signed in as <b id="meName"></b>. Credentials stay in this browser; sign out anytime.</div></div>
<div class="row">
<a id="meFanBtn" class="gh" style="display:none" href="fan.html" rel="opener">Fan zone</a>
<a id="meAdminBtn" class="gh" style="display:none" href="#" rel="noopener">Exclusive entry</a>
<button id="meLogoutBtn" class="primary">Sign out</button>
<button id="meCloseBtn">Close</button>
</div>
<!-- Account binding: one MoX account, multiple OAuth identities (bind GitHub / Gitee, keep at least one) -->
<div class="bind-block" id="bindBlock">
<div class="bind-title">Account binding</div>
<div class="bind-list" id="bindList"></div>
</div>
</div>
<div class="msg" id="loginMsg"></div>
<div class="login-hint" id="loginHint"></div>
</div>
</div>
<script src="app.en.js"></script>
<!-- Cloudflare Turnstile: real human verification (server-side siteverify).
Enable Turnstile in the Cloudflare dashboard and replace the data-sitekey above with your site key. -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
</body>
</html>