memoir-cli 3.2.1 → 3.3.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.
@@ -1,690 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>memoir — Sync your AI memory across every device and tool</title>
7
- <meta name="description" content="Back up and restore your AI coding context across 11 tools and every machine. Claude, Cursor, Gemini, Copilot, and more. One CLI, E2E encrypted.">
8
- <meta property="og:title" content="memoir — AI tools forget you. memoir doesn't.">
9
- <meta property="og:description" content="Sync your AI coding memory across 11 tools and every device. One command to save. One command to restore.">
10
- <meta property="og:type" content="website">
11
- <meta property="og:url" content="https://memoir.sh">
12
- <meta name="twitter:card" content="summary_large_image">
13
- <meta name="twitter:title" content="memoir — AI tools forget you. memoir doesn't.">
14
- <meta name="twitter:description" content="Sync your AI coding memory across 11 tools and every device.">
15
- <style>
16
- @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Inter:wght@400;500;600;700;800&display=swap');
17
-
18
- * { margin: 0; padding: 0; box-sizing: border-box; }
19
-
20
- :root {
21
- --bg: #0a0a0f;
22
- --bg-card: #111118;
23
- --bg-card-hover: #16161f;
24
- --purple: #7c6ef0;
25
- --purple-light: #9d92f8;
26
- --purple-glow: rgba(124, 110, 240, 0.15);
27
- --green: #4ade80;
28
- --text: #e4e4e7;
29
- --text-muted: #71717a;
30
- --text-dim: #52525b;
31
- --border: #27272a;
32
- --border-light: #3f3f46;
33
- }
34
-
35
- html { scroll-behavior: smooth; }
36
-
37
- body {
38
- font-family: 'Inter', -apple-system, sans-serif;
39
- background: var(--bg);
40
- color: var(--text);
41
- line-height: 1.6;
42
- overflow-x: hidden;
43
- }
44
-
45
- /* Nav */
46
- nav {
47
- position: fixed; top: 0; width: 100%; z-index: 100;
48
- background: rgba(10, 10, 15, 0.85);
49
- backdrop-filter: blur(20px);
50
- border-bottom: 1px solid var(--border);
51
- padding: 0 2rem;
52
- }
53
- .nav-inner {
54
- max-width: 1100px; margin: 0 auto;
55
- display: flex; justify-content: space-between; align-items: center;
56
- height: 60px;
57
- }
58
- .nav-logo {
59
- font-family: 'JetBrains Mono', monospace;
60
- font-weight: 700; font-size: 1.2rem; color: var(--purple);
61
- text-decoration: none;
62
- }
63
- .nav-links { display: flex; gap: 2rem; align-items: center; }
64
- .nav-links a {
65
- color: var(--text-muted); text-decoration: none; font-size: 0.9rem;
66
- transition: color 0.2s;
67
- }
68
- .nav-links a:hover { color: var(--text); }
69
- .nav-cta {
70
- background: var(--purple) !important; color: #fff !important;
71
- padding: 0.5rem 1.2rem; border-radius: 6px;
72
- font-weight: 600; font-size: 0.85rem !important;
73
- transition: opacity 0.2s;
74
- }
75
- .nav-cta:hover { opacity: 0.9; }
76
-
77
- /* Hero */
78
- .hero {
79
- padding: 10rem 2rem 6rem;
80
- text-align: center;
81
- position: relative;
82
- }
83
- .hero::before {
84
- content: '';
85
- position: absolute; top: 0; left: 50%; transform: translateX(-50%);
86
- width: 600px; height: 600px;
87
- background: radial-gradient(circle, var(--purple-glow) 0%, transparent 70%);
88
- pointer-events: none;
89
- }
90
- .hero-badge {
91
- display: inline-block;
92
- background: var(--bg-card);
93
- border: 1px solid var(--border);
94
- border-radius: 100px;
95
- padding: 0.4rem 1rem;
96
- font-size: 0.8rem;
97
- color: var(--purple-light);
98
- margin-bottom: 1.5rem;
99
- font-family: 'JetBrains Mono', monospace;
100
- }
101
- .hero h1 {
102
- font-size: clamp(2.5rem, 6vw, 4rem);
103
- font-weight: 800;
104
- line-height: 1.1;
105
- margin-bottom: 1.5rem;
106
- letter-spacing: -0.02em;
107
- }
108
- .hero h1 .gradient {
109
- background: linear-gradient(135deg, var(--purple) 0%, #a78bfa 50%, var(--purple-light) 100%);
110
- -webkit-background-clip: text; -webkit-text-fill-color: transparent;
111
- }
112
- .hero p {
113
- font-size: 1.2rem;
114
- color: var(--text-muted);
115
- max-width: 600px;
116
- margin: 0 auto 2.5rem;
117
- }
118
- .hero-install {
119
- display: inline-flex; align-items: center; gap: 0.75rem;
120
- background: var(--bg-card);
121
- border: 1px solid var(--border);
122
- border-radius: 8px;
123
- padding: 0.9rem 1.5rem;
124
- font-family: 'JetBrains Mono', monospace;
125
- font-size: 0.95rem;
126
- cursor: pointer;
127
- transition: border-color 0.2s;
128
- position: relative;
129
- }
130
- .hero-install:hover { border-color: var(--purple); }
131
- .hero-install .dollar { color: var(--text-dim); }
132
- .hero-install .cmd { color: var(--green); }
133
- .hero-install .copy-btn {
134
- color: var(--text-muted); background: none; border: none;
135
- cursor: pointer; font-size: 0.85rem; padding: 0.2rem;
136
- transition: color 0.2s;
137
- }
138
- .hero-install .copy-btn:hover { color: var(--text); }
139
- .hero-stats {
140
- display: flex; justify-content: center; gap: 3rem;
141
- margin-top: 3rem; color: var(--text-muted); font-size: 0.9rem;
142
- }
143
- .hero-stats strong { color: var(--text); font-weight: 600; }
144
-
145
- /* Section base */
146
- section { padding: 5rem 2rem; max-width: 1100px; margin: 0 auto; }
147
- .section-label {
148
- font-family: 'JetBrains Mono', monospace;
149
- font-size: 0.75rem; color: var(--purple); text-transform: uppercase;
150
- letter-spacing: 0.1em; margin-bottom: 0.75rem;
151
- }
152
- .section-title {
153
- font-size: 2rem; font-weight: 700; margin-bottom: 1rem;
154
- letter-spacing: -0.01em;
155
- }
156
- .section-desc {
157
- color: var(--text-muted); font-size: 1.05rem;
158
- max-width: 550px; margin-bottom: 3rem;
159
- }
160
-
161
- /* Terminal demo */
162
- .terminal {
163
- background: #0d0d14;
164
- border: 1px solid var(--border);
165
- border-radius: 12px;
166
- overflow: hidden;
167
- max-width: 700px;
168
- margin: 3rem auto;
169
- box-shadow: 0 20px 60px rgba(0,0,0,0.5);
170
- }
171
- .terminal-header {
172
- display: flex; align-items: center; gap: 8px;
173
- padding: 12px 16px;
174
- background: #111118;
175
- border-bottom: 1px solid var(--border);
176
- }
177
- .terminal-dot {
178
- width: 12px; height: 12px; border-radius: 50%;
179
- }
180
- .terminal-dot.red { background: #ef4444; }
181
- .terminal-dot.yellow { background: #eab308; }
182
- .terminal-dot.green { background: #22c55e; }
183
- .terminal-body {
184
- padding: 1.5rem;
185
- font-family: 'JetBrains Mono', monospace;
186
- font-size: 0.85rem;
187
- line-height: 1.8;
188
- }
189
- .terminal-body .line { margin-bottom: 0.25rem; }
190
- .terminal-body .prompt { color: var(--purple); }
191
- .terminal-body .command { color: #e4e4e7; }
192
- .terminal-body .output { color: var(--text-muted); }
193
- .terminal-body .success { color: var(--green); }
194
- .terminal-body .dim { color: var(--text-dim); }
195
-
196
- /* Tool grid */
197
- .tools-grid {
198
- display: grid;
199
- grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
200
- gap: 1rem;
201
- margin-top: 2rem;
202
- }
203
- .tool-card {
204
- background: var(--bg-card);
205
- border: 1px solid var(--border);
206
- border-radius: 10px;
207
- padding: 1.2rem;
208
- text-align: center;
209
- transition: border-color 0.2s, transform 0.2s;
210
- }
211
- .tool-card:hover { border-color: var(--purple); transform: translateY(-2px); }
212
- .tool-name { font-weight: 600; font-size: 0.9rem; margin-bottom: 0.3rem; }
213
- .tool-detail { font-size: 0.75rem; color: var(--text-muted); font-family: 'JetBrains Mono', monospace; }
214
-
215
- /* Features */
216
- .features-grid {
217
- display: grid;
218
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
219
- gap: 1.5rem;
220
- }
221
- .feature-card {
222
- background: var(--bg-card);
223
- border: 1px solid var(--border);
224
- border-radius: 12px;
225
- padding: 2rem;
226
- transition: border-color 0.2s;
227
- }
228
- .feature-card:hover { border-color: var(--border-light); }
229
- .feature-icon {
230
- font-size: 1.5rem; margin-bottom: 1rem;
231
- width: 48px; height: 48px;
232
- display: flex; align-items: center; justify-content: center;
233
- background: var(--purple-glow);
234
- border-radius: 10px;
235
- }
236
- .feature-card h3 { font-size: 1.1rem; font-weight: 600; margin-bottom: 0.5rem; }
237
- .feature-card p { color: var(--text-muted); font-size: 0.9rem; }
238
- .feature-code {
239
- font-family: 'JetBrains Mono', monospace;
240
- font-size: 0.8rem;
241
- background: var(--bg);
242
- border: 1px solid var(--border);
243
- border-radius: 6px;
244
- padding: 0.75rem 1rem;
245
- margin-top: 1rem;
246
- color: var(--green);
247
- }
248
-
249
- /* Comparison */
250
- .comparison-table {
251
- width: 100%;
252
- border-collapse: collapse;
253
- font-size: 0.9rem;
254
- }
255
- .comparison-table th, .comparison-table td {
256
- padding: 0.9rem 1rem;
257
- text-align: left;
258
- border-bottom: 1px solid var(--border);
259
- }
260
- .comparison-table th {
261
- color: var(--text-muted);
262
- font-weight: 500;
263
- font-size: 0.8rem;
264
- text-transform: uppercase;
265
- letter-spacing: 0.05em;
266
- }
267
- .comparison-table td:first-child { font-weight: 500; }
268
- .comparison-table .check { color: var(--green); font-weight: 700; }
269
- .comparison-table .no { color: var(--text-dim); }
270
- .comparison-table .memoir-col { color: var(--purple-light); font-weight: 600; }
271
-
272
- /* Pricing */
273
- .pricing-grid {
274
- display: grid;
275
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
276
- gap: 1.5rem;
277
- margin-top: 2rem;
278
- }
279
- .price-card {
280
- background: var(--bg-card);
281
- border: 1px solid var(--border);
282
- border-radius: 12px;
283
- padding: 2rem;
284
- position: relative;
285
- }
286
- .price-card.popular {
287
- border-color: var(--purple);
288
- box-shadow: 0 0 40px var(--purple-glow);
289
- }
290
- .price-card.popular::before {
291
- content: 'Most popular';
292
- position: absolute; top: -12px; left: 50%; transform: translateX(-50%);
293
- background: var(--purple); color: #fff;
294
- font-size: 0.7rem; font-weight: 600;
295
- padding: 0.25rem 0.75rem; border-radius: 100px;
296
- text-transform: uppercase; letter-spacing: 0.05em;
297
- }
298
- .price-tier {
299
- font-size: 0.85rem; font-weight: 600; color: var(--text-muted);
300
- text-transform: uppercase; letter-spacing: 0.05em;
301
- margin-bottom: 0.75rem;
302
- }
303
- .price-amount {
304
- font-size: 2.5rem; font-weight: 800; margin-bottom: 0.25rem;
305
- }
306
- .price-amount span { font-size: 1rem; font-weight: 400; color: var(--text-muted); }
307
- .price-desc {
308
- color: var(--text-muted); font-size: 0.85rem;
309
- margin-bottom: 1.5rem; padding-bottom: 1.5rem;
310
- border-bottom: 1px solid var(--border);
311
- }
312
- .price-features { list-style: none; margin-bottom: 2rem; }
313
- .price-features li {
314
- padding: 0.4rem 0;
315
- font-size: 0.9rem;
316
- color: var(--text-muted);
317
- }
318
- .price-features li::before {
319
- content: '✓';
320
- color: var(--green);
321
- font-weight: 700;
322
- margin-right: 0.5rem;
323
- }
324
- .price-btn {
325
- display: block; width: 100%;
326
- padding: 0.75rem;
327
- border-radius: 8px;
328
- border: 1px solid var(--border);
329
- background: transparent;
330
- color: var(--text);
331
- font-weight: 600;
332
- font-size: 0.9rem;
333
- cursor: pointer;
334
- text-align: center;
335
- text-decoration: none;
336
- transition: all 0.2s;
337
- }
338
- .price-btn:hover { border-color: var(--purple); color: var(--purple-light); }
339
- .price-btn.primary {
340
- background: var(--purple); border-color: var(--purple); color: #fff;
341
- }
342
- .price-btn.primary:hover { opacity: 0.9; }
343
-
344
- /* Email capture */
345
- .email-section {
346
- text-align: center;
347
- padding: 5rem 2rem;
348
- max-width: 600px;
349
- margin: 0 auto;
350
- }
351
- .email-section h2 {
352
- font-size: 1.8rem; font-weight: 700; margin-bottom: 0.75rem;
353
- }
354
- .email-section p {
355
- color: var(--text-muted); margin-bottom: 2rem;
356
- }
357
- .email-form {
358
- display: flex; gap: 0.75rem;
359
- max-width: 450px; margin: 0 auto;
360
- }
361
- .email-form input {
362
- flex: 1;
363
- padding: 0.8rem 1rem;
364
- border-radius: 8px;
365
- border: 1px solid var(--border);
366
- background: var(--bg-card);
367
- color: var(--text);
368
- font-size: 0.9rem;
369
- outline: none;
370
- transition: border-color 0.2s;
371
- }
372
- .email-form input:focus { border-color: var(--purple); }
373
- .email-form input::placeholder { color: var(--text-dim); }
374
- .email-form button {
375
- padding: 0.8rem 1.5rem;
376
- border-radius: 8px;
377
- border: none;
378
- background: var(--purple);
379
- color: #fff;
380
- font-weight: 600;
381
- font-size: 0.9rem;
382
- cursor: pointer;
383
- white-space: nowrap;
384
- transition: opacity 0.2s;
385
- }
386
- .email-form button:hover { opacity: 0.9; }
387
- .email-note {
388
- font-size: 0.75rem; color: var(--text-dim); margin-top: 0.75rem;
389
- }
390
-
391
- /* Footer */
392
- footer {
393
- border-top: 1px solid var(--border);
394
- padding: 3rem 2rem;
395
- text-align: center;
396
- color: var(--text-dim);
397
- font-size: 0.85rem;
398
- }
399
- footer a { color: var(--text-muted); text-decoration: none; }
400
- footer a:hover { color: var(--text); }
401
- .footer-links { display: flex; justify-content: center; gap: 2rem; margin-bottom: 1rem; }
402
-
403
- /* Mobile */
404
- @media (max-width: 768px) {
405
- .nav-links { gap: 1rem; }
406
- .hero { padding: 8rem 1.5rem 4rem; }
407
- .hero-stats { gap: 1.5rem; flex-wrap: wrap; }
408
- .email-form { flex-direction: column; }
409
- .features-grid { grid-template-columns: 1fr; }
410
- .pricing-grid { grid-template-columns: 1fr; max-width: 350px; margin-left: auto; margin-right: auto; }
411
- .comparison-table { font-size: 0.8rem; }
412
- .comparison-table th, .comparison-table td { padding: 0.6rem 0.5rem; }
413
- }
414
- </style>
415
- </head>
416
- <body>
417
-
418
- <!-- Nav -->
419
- <nav>
420
- <div class="nav-inner">
421
- <a href="/" class="nav-logo">memoir</a>
422
- <div class="nav-links">
423
- <a href="#features">Features</a>
424
- <a href="#pricing">Pricing</a>
425
- <a href="https://github.com/camgitt/memoir" target="_blank">GitHub</a>
426
- <a href="/blog">Blog</a>
427
- <a href="#install" class="nav-cta">Install</a>
428
- </div>
429
- </div>
430
- </nav>
431
-
432
- <!-- Hero -->
433
- <section class="hero" id="install">
434
- <div class="hero-badge">v3.2 — now with MCP server</div>
435
- <h1>AI tools forget you.<br><span class="gradient">memoir doesn't.</span></h1>
436
- <p>Sync your AI memory across 11 tools and every device. One command to save. One command to restore. Your AI picks up mid-conversation.</p>
437
-
438
- <div class="hero-install" onclick="navigator.clipboard.writeText('npm install -g memoir-cli');this.querySelector('.copy-btn').textContent='Copied!'">
439
- <span class="dollar">$</span>
440
- <span class="cmd">npm install -g memoir-cli</span>
441
- <button class="copy-btn" title="Copy">Copy</button>
442
- </div>
443
-
444
- <div class="hero-stats">
445
- <div><strong>11</strong> AI tools supported</div>
446
- <div><strong>E2E</strong> encrypted</div>
447
- <div><strong>MIT</strong> licensed</div>
448
- </div>
449
- </section>
450
-
451
- <!-- Terminal Demo -->
452
- <section>
453
- <div class="terminal">
454
- <div class="terminal-header">
455
- <div class="terminal-dot red"></div>
456
- <div class="terminal-dot yellow"></div>
457
- <div class="terminal-dot green"></div>
458
- </div>
459
- <div class="terminal-body">
460
- <div class="line"><span class="prompt">~</span> <span class="command">memoir push</span></div>
461
- <div class="line"><span class="success">✔</span> <span class="output">AI memory backed up (11 tools detected)</span></div>
462
- <div class="line"><span class="success">✔</span> <span class="output">Session context captured</span></div>
463
- <div class="line"><span class="success">✔</span> <span class="output">Workspace: 44 projects (17 git, 23 bundled)</span></div>
464
- <div class="line"><span class="dim">🔒 E2E encrypted &middot; pushed in 3.2s</span></div>
465
- <div class="line">&nbsp;</div>
466
- <div class="line"><span class="dim">--- switch to another machine ---</span></div>
467
- <div class="line">&nbsp;</div>
468
- <div class="line"><span class="prompt">~</span> <span class="command">memoir restore -y</span></div>
469
- <div class="line"><span class="success">✔</span> <span class="output">AI memory restored (Claude, Gemini, Cursor, 8 more)</span></div>
470
- <div class="line"><span class="success">✔</span> <span class="output">44 projects cloned &amp; unpacked</span></div>
471
- <div class="line"><span class="success">✔</span> <span class="output">Uncommitted changes applied</span></div>
472
- <div class="line"><span class="success">✔</span> <span class="output">Session context injected — AI picks up mid-conversation</span></div>
473
- </div>
474
- </div>
475
- </section>
476
-
477
- <!-- Supported Tools -->
478
- <section>
479
- <div class="section-label">Supported tools</div>
480
- <div class="section-title">11 AI tools. One sync.</div>
481
- <div class="section-desc">memoir detects and syncs every AI tool on your machine — configs, instructions, and project knowledge.</div>
482
- <div class="tools-grid">
483
- <div class="tool-card"><div class="tool-name">Claude Code</div><div class="tool-detail">CLAUDE.md</div></div>
484
- <div class="tool-card"><div class="tool-name">Gemini CLI</div><div class="tool-detail">GEMINI.md</div></div>
485
- <div class="tool-card"><div class="tool-name">ChatGPT</div><div class="tool-detail">CHATGPT.md</div></div>
486
- <div class="tool-card"><div class="tool-name">Codex</div><div class="tool-detail">AGENTS.md</div></div>
487
- <div class="tool-card"><div class="tool-name">Cursor</div><div class="tool-detail">.cursorrules</div></div>
488
- <div class="tool-card"><div class="tool-name">Copilot</div><div class="tool-detail">copilot-instructions</div></div>
489
- <div class="tool-card"><div class="tool-name">Windsurf</div><div class="tool-detail">.windsurfrules</div></div>
490
- <div class="tool-card"><div class="tool-name">Zed</div><div class="tool-detail">settings.json</div></div>
491
- <div class="tool-card"><div class="tool-name">Cline</div><div class="tool-detail">.clinerules</div></div>
492
- <div class="tool-card"><div class="tool-name">Continue</div><div class="tool-detail">.continuerules</div></div>
493
- <div class="tool-card"><div class="tool-name">Aider</div><div class="tool-detail">.aider.conf.yml</div></div>
494
- </div>
495
- </section>
496
-
497
- <!-- Features -->
498
- <section id="features">
499
- <div class="section-label">Features</div>
500
- <div class="section-title">Three layers no other tool connects</div>
501
- <div class="section-desc">memoir syncs AI memory, session state, and your workspace — not just dotfiles.</div>
502
- <div class="features-grid">
503
- <div class="feature-card">
504
- <div class="feature-icon">🧠</div>
505
- <h3>AI Memory Sync</h3>
506
- <p>Configs, instructions, and project knowledge across all 11 tools. Detected automatically.</p>
507
- <div class="feature-code">memoir push && memoir restore</div>
508
- </div>
509
- <div class="feature-card">
510
- <div class="feature-icon">🔄</div>
511
- <h3>Session Handoff</h3>
512
- <p>Captures what you were doing — files changed, errors hit, decisions made. Your AI picks up mid-conversation.</p>
513
- <div class="feature-code">memoir snapshot && memoir resume</div>
514
- </div>
515
- <div class="feature-card">
516
- <div class="feature-icon">📦</div>
517
- <h3>Workspace Sync</h3>
518
- <p>Git repos auto-clone, non-git projects bundle, uncommitted changes save as patches and reapply.</p>
519
- <div class="feature-code">memoir push # 44 projects saved</div>
520
- </div>
521
- <div class="feature-card">
522
- <div class="feature-icon">🔀</div>
523
- <h3>AI Translation</h3>
524
- <p>Translate your instructions between tools using AI — not just file copy. Rewrites conventions properly.</p>
525
- <div class="feature-code">memoir migrate --from claude --to cursor</div>
526
- </div>
527
- <div class="feature-card">
528
- <div class="feature-icon">🔌</div>
529
- <h3>MCP Server</h3>
530
- <p>6 tools for your editor to search, read, and save memories without leaving the conversation.</p>
531
- <div class="feature-code">memoir mcp # start the server</div>
532
- </div>
533
- <div class="feature-card">
534
- <div class="feature-icon">🔒</div>
535
- <h3>E2E Encrypted</h3>
536
- <p>AES-256-GCM encryption. Secret scanning auto-redacts API keys and tokens. Zero-knowledge.</p>
537
- <div class="feature-code">memoir encrypt && memoir doctor</div>
538
- </div>
539
- </div>
540
- </section>
541
-
542
- <!-- Comparison -->
543
- <section>
544
- <div class="section-label">Comparison</div>
545
- <div class="section-title">How memoir compares</div>
546
- <div style="overflow-x: auto; margin-top: 2rem;">
547
- <table class="comparison-table">
548
- <thead>
549
- <tr>
550
- <th>Feature</th>
551
- <th class="memoir-col">memoir</th>
552
- <th>Dotfile managers</th>
553
- <th>ai-rulez</th>
554
- <th>memories.sh</th>
555
- </tr>
556
- </thead>
557
- <tbody>
558
- <tr><td>AI memory sync</td><td class="check memoir-col">11 tools</td><td class="no">No</td><td>18 tools</td><td>3 tools</td></tr>
559
- <tr><td>Workspace sync</td><td class="check memoir-col">Yes</td><td class="no">No</td><td class="no">No</td><td class="no">No</td></tr>
560
- <tr><td>Session handoff</td><td class="check memoir-col">Yes</td><td class="no">No</td><td class="no">No</td><td class="no">No</td></tr>
561
- <tr><td>AI-powered translation</td><td class="check memoir-col">Yes</td><td class="no">No</td><td class="no">No</td><td class="no">No</td></tr>
562
- <tr><td>E2E encryption</td><td class="check memoir-col">Yes</td><td class="no">No</td><td class="no">No</td><td class="no">No</td></tr>
563
- <tr><td>Secret scanning</td><td class="check memoir-col">Yes</td><td>Some</td><td class="no">No</td><td class="no">No</td></tr>
564
- <tr><td>MCP server</td><td class="check memoir-col">Yes</td><td class="no">No</td><td class="no">No</td><td class="no">No</td></tr>
565
- <tr><td>Cloud backup</td><td class="check memoir-col">Yes</td><td class="no">No</td><td class="no">No</td><td>$15/mo</td></tr>
566
- <tr><td>Free &amp; open source</td><td class="check memoir-col">Yes</td><td class="check">Yes</td><td class="check">Yes</td><td class="no">No</td></tr>
567
- </tbody>
568
- </table>
569
- </div>
570
- </section>
571
-
572
- <!-- Pricing -->
573
- <section id="pricing">
574
- <div style="text-align: center;">
575
- <div class="section-label">Pricing</div>
576
- <div class="section-title">Start free. Scale when you need to.</div>
577
- </div>
578
- <div class="pricing-grid">
579
- <div class="price-card">
580
- <div class="price-tier">Free</div>
581
- <div class="price-amount">$0 <span>/ forever</span></div>
582
- <div class="price-desc">For solo devs trying it out</div>
583
- <ul class="price-features">
584
- <li>Local backup &amp; restore</li>
585
- <li>3 cloud backups</li>
586
- <li>All 11 AI tools</li>
587
- <li>AI-powered migration</li>
588
- <li>MCP server</li>
589
- <li>E2E encryption</li>
590
- </ul>
591
- <a href="#install" class="price-btn">Install free</a>
592
- </div>
593
- <div class="price-card popular">
594
- <div class="price-tier">Pro</div>
595
- <div class="price-amount">$15 <span>/ month</span></div>
596
- <div class="price-desc">For power users on multiple machines</div>
597
- <ul class="price-features">
598
- <li>Everything in Free</li>
599
- <li>50 cloud backups</li>
600
- <li>Unlimited machines</li>
601
- <li>Version history</li>
602
- <li>Priority support</li>
603
- </ul>
604
- <a href="#" class="price-btn primary" onclick="alert('Pro coming soon — join the waitlist below!')">Upgrade to Pro</a>
605
- </div>
606
- <div class="price-card">
607
- <div class="price-tier">Teams</div>
608
- <div class="price-amount">$29 <span>/ seat / mo</span></div>
609
- <div class="price-desc">For dev teams that share context</div>
610
- <ul class="price-features">
611
- <li>Everything in Pro</li>
612
- <li>Shared team context</li>
613
- <li>Team dashboard</li>
614
- <li>Audit log</li>
615
- <li>200 backups per team</li>
616
- </ul>
617
- <a href="#waitlist" class="price-btn">Join waitlist</a>
618
- </div>
619
- </div>
620
- </section>
621
-
622
- <!-- Email Capture / Waitlist -->
623
- <section class="email-section" id="waitlist">
624
- <h2>Get notified when Teams launches</h2>
625
- <p>We're building shared context for dev teams — onboard new hires with one command. Drop your email to get early access.</p>
626
- <form class="email-form" onsubmit="event.preventDefault(); handleEmailSubmit(this);">
627
- <input type="email" placeholder="you@company.com" required>
628
- <button type="submit">Join waitlist</button>
629
- </form>
630
- <div class="email-note">No spam. Just launch updates.</div>
631
- </section>
632
-
633
- <!-- Footer -->
634
- <footer>
635
- <div class="footer-links">
636
- <a href="https://github.com/camgitt/memoir">GitHub</a>
637
- <a href="https://npmjs.org/package/memoir-cli">npm</a>
638
- <a href="/blog">Blog</a>
639
- <a href="https://github.com/camgitt/memoir/issues">Issues</a>
640
- </div>
641
- <div>MIT Licensed &middot; Built by <a href="https://github.com/camgitt">camgitt</a></div>
642
- </footer>
643
-
644
- <script>
645
- async function handleEmailSubmit(form) {
646
- const input = form.querySelector('input');
647
- const email = input.value;
648
- const button = form.querySelector('button');
649
- const originalText = button.textContent;
650
-
651
- button.textContent = 'Joining...';
652
- button.disabled = true;
653
-
654
- try {
655
- const res = await fetch('https://oqrkxytbahfwjhcbyzrx.supabase.co/rest/v1/waitlist', {
656
- method: 'POST',
657
- headers: {
658
- 'Content-Type': 'application/json',
659
- 'apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im9xcmt4eXRiYWhmd2poY2J5enJ4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzMyMTQ4MzMsImV4cCI6MjA4ODc5MDgzM30.jOKOi73OJgIgi1zj0VOIQkGp0xqS3ee4gfCjpdqCnvM',
660
- 'Prefer': 'return=minimal'
661
- },
662
- body: JSON.stringify({ email, source: 'landing-page' })
663
- });
664
-
665
- if (res.ok) {
666
- button.textContent = 'You\'re in!';
667
- button.style.background = '#22c55e';
668
- input.value = '';
669
- } else if (res.status === 409) {
670
- button.textContent = 'Already joined!';
671
- button.style.background = '#22c55e';
672
- input.value = '';
673
- } else {
674
- throw new Error('Failed');
675
- }
676
- } catch (err) {
677
- button.textContent = 'Error — try again';
678
- button.style.background = '#ef4444';
679
- }
680
-
681
- button.disabled = false;
682
- setTimeout(() => {
683
- button.textContent = originalText;
684
- button.style.background = '';
685
- }, 3000);
686
- }
687
- </script>
688
-
689
- </body>
690
- </html>
package/mcp-publisher DELETED
Binary file