Skip to content

Commit 221e0db

Browse files
committed
author + record
1 parent bf2b655 commit 221e0db

File tree

4 files changed

+139
-62
lines changed

4 files changed

+139
-62
lines changed

assets/author_pic.jpg

24.8 KB
Loading

index.html

Lines changed: 87 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1">
6-
<title>Mindcore — Your AI Best Friend</title>
6+
<title>MindCore</title>
77
<meta name="description" content="Mindcore is a local‑first AI companion that remembers your life and talks to you using your private memory.">
88
<link rel="preconnect" href="https://fonts.googleapis.com">
99
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
1010
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
11+
<link rel="icon" href="./assets/logo.jpg" type="image/jpeg">
1112
<link rel="stylesheet" href="./styles.css">
1213
</head>
1314
<body>
@@ -17,13 +18,17 @@
1718
<header class="site-header">
1819
<div class="container header-inner">
1920
<div class="brand">
20-
<span class="logo-dot" aria-hidden="true"></span>
21+
<img class="logo-img" src="./assets/logo.jpg" alt="Mindcore logo" />
2122
<span class="brand-text">Mindcore</span>
2223
</div>
2324
<nav class="nav">
2425
<a href="#idea">Idea</a>
2526
<a href="#how">How it works</a>
2627
<a href="#privacy">Privacy</a>
28+
<a href="#author">Author</a>
29+
<a href="https://www.linkedin.com/company/mindcore-llc/?viewAsMember=true" target="_blank" rel="noopener" aria-label="MindCore LinkedIn">
30+
<svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4.98 3.5C4.98 4.88 3.86 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1s2.48 1.12 2.48 2.5zM0 8h5v16H0V8zm7.5 0h4.8v2.2h.07c.67-1.27 2.3-2.6 4.73-2.6 5.06 0 5.99 3.33 5.99 7.66V24h-5v-7.4c0-1.77-.03-4.06-2.48-4.06-2.48 0-2.86 1.94-2.86 3.94V24h-5V8z" fill="currentColor"/></svg>
31+
</a>
2732
<a href="#join" class="btn btn-outline" data-open-modal>Get Early Access</a>
2833
</nav>
2934
</div>
@@ -57,19 +62,19 @@ <h2 data-reveal>The Core Idea</h2>
5762
</div>
5863
<div class="grid">
5964
<div class="card" data-reveal>
60-
<h3>Always Present</h3>
65+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2" fill="none"/><circle cx="12" cy="12" r="3" fill="currentColor"/></svg>Always Present</h3>
6166
<p>Runs in the background and pays attention to your screen, apps, voice, and environment — only with your permission.</p>
6267
</div>
6368
<div class="card" data-reveal>
64-
<h3>Memory that Lasts</h3>
69+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 7a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v10a2 2 0 0 1-2 2H7l-3 3V7z" fill="none" stroke="currentColor" stroke-width="2"/></svg>Memory that Lasts</h3>
6570
<p>Builds a private lifelog on your device. Moments become memories that are searchable, retrievable, and useful.</p>
6671
</div>
6772
<div class="card" data-reveal>
68-
<h3>Conversations that Feel Real</h3>
73+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5h16v10H7l-3 3V5z" fill="none" stroke="currentColor" stroke-width="2"/></svg>Conversations that Feel Real</h3>
6974
<p>Because it remembers, it can follow up on things you did days, weeks, or months ago.</p>
7075
</div>
7176
<div class="card" data-reveal>
72-
<h3>A True Companion</h3>
77+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21s-7-4.35-7-10a4 4 0 0 1 7-2 4 4 0 0 1 7 2c0 5.65-7 10-7 10z" fill="none" stroke="currentColor" stroke-width="2"/></svg>A True Companion</h3>
7378
<p>It doesn’t just wait for you to talk — it checks in, nudges, and supports your goals.</p>
7479
</div>
7580
</div>
@@ -83,62 +88,74 @@ <h2 data-reveal>How it Works</h2>
8388
<p class="section-kicker" data-reveal>Observe → Interpret → Store → Decide → Engage → Learn</p>
8489
</div>
8590

86-
<div class="timeline">
87-
<div class="tl-item" data-reveal>
88-
<span class="tl-bullet"></span>
89-
<div>
90-
<h4>Observe</h4>
91+
<div class="how-grid">
92+
<ol class="steps" aria-label="Process">
93+
<li class="step-card" data-reveal>
94+
<div class="step-head">
95+
<span class="step-num">1</span>
96+
<span class="step-title"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2" fill="none"/><path d="M2 12h4m12 0h4M12 2v4m0 12v4" stroke="currentColor" stroke-width="2"/></svg>Observe</span>
97+
</div>
9198
<p>Trackers for apps, files, screen, mic/cam (opt‑in) feed events into the daemon.</p>
92-
</div>
93-
</div>
94-
<div class="tl-item" data-reveal>
95-
<span class="tl-bullet"></span>
96-
<div>
97-
<h4>Interpret</h4>
99+
</li>
100+
<li class="step-card" data-reveal>
101+
<div class="step-head">
102+
<span class="step-num">2</span>
103+
<span class="step-title"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h16M12 4v16" stroke="currentColor" stroke-width="2"/><circle cx="12" cy="12" r="8" fill="none" stroke="currentColor" stroke-width="2"/></svg>Interpret</span>
104+
</div>
98105
<p>Summarizes, tags, and embeds events into lightweight memories.</p>
99-
</div>
100-
</div>
101-
<div class="tl-item" data-reveal>
102-
<span class="tl-bullet"></span>
103-
<div>
104-
<h4>Store</h4>
106+
</li>
107+
<li class="step-card" data-reveal>
108+
<div class="step-head">
109+
<span class="step-num">3</span>
110+
<span class="step-title"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="14" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"/><path d="M8 9h8M8 13h5" stroke="currentColor" stroke-width="2"/></svg>Store</span>
111+
</div>
105112
<p>Private timeline in SQLite + vector index. Local‑first by design.</p>
106-
</div>
107-
</div>
108-
<div class="tl-item" data-reveal>
109-
<span class="tl-bullet"></span>
110-
<div>
111-
<h4>Decide</h4>
113+
</li>
114+
<li class="step-card" data-reveal>
115+
<div class="step-head">
116+
<span class="step-num">4</span>
117+
<span class="step-title"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3l3 6 6 .9-4.5 4.3 1 6-5.5-3-5.5 3 1-6L3 9.9 9 9z" fill="none" stroke="currentColor" stroke-width="2"/></svg>Decide</span>
118+
</div>
112119
<p>Policies trigger check‑ins, nudges, and reminders based on context.</p>
113-
</div>
114-
</div>
115-
<div class="tl-item" data-reveal>
116-
<span class="tl-bullet"></span>
117-
<div>
118-
<h4>Engage</h4>
120+
</li>
121+
<li class="step-card" data-reveal>
122+
<div class="step-head">
123+
<span class="step-num">5</span>
124+
<span class="step-title"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5h16v10H7l-3 3V5z" fill="none" stroke="currentColor" stroke-width="2"/></svg>Engage</span>
125+
</div>
119126
<p>Chat naturally; TTS can speak; notifications appear when helpful.</p>
120-
</div>
121-
</div>
122-
<div class="tl-item" data-reveal>
123-
<span class="tl-bullet"></span>
124-
<div>
125-
<h4>Learn</h4>
127+
</li>
128+
<li class="step-card" data-reveal>
129+
<div class="step-head">
130+
<span class="step-num">6</span>
131+
<span class="step-title"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 20c4.418 0 8-3.134 8-7s-3.582-7-8-7-8 3.134-8 7" fill="none" stroke="currentColor" stroke-width="2"/><path d="M4 13l-2 3 3 2" stroke="currentColor" stroke-width="2"/></svg>Learn</span>
132+
</div>
126133
<p>Adapts to your routines, mood, and preferences over time.</p>
134+
</li>
135+
</ol>
136+
137+
<div class="how-visual" data-reveal>
138+
<div class="visual-inner">
139+
<img src="./assets/logo.jpg" alt="Mindcore mark" />
140+
<div class="badge" style="top: 12%; left: 12%">Memories</div>
141+
<div class="badge" style="bottom: 14%; left: 18%">Skills</div>
142+
<div class="badge" style="top: 18%; right: 10%">Chat</div>
143+
<div class="badge" style="bottom: 12%; right: 16%">Privacy</div>
127144
</div>
128145
</div>
129146
</div>
130147

131148
<div class="features grid">
132149
<div class="feature" data-reveal>
133-
<h3>Pluggable Skills</h3>
150+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2l4 8h8l-6 5 2 8-8-5-8 5 2-8-6-5h8z" fill="none" stroke="currentColor" stroke-width="2"/></svg>Pluggable Skills</h3>
134151
<p>Simple skills/plugins react to triggers and act through a local SDK.</p>
135152
</div>
136153
<div class="feature" data-reveal>
137-
<h3>Episodic Memory</h3>
154+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 4h12a2 2 0 0 1 2 2v12l-4-3H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z" fill="none" stroke="currentColor" stroke-width="2"/></svg>Episodic Memory</h3>
138155
<p>Moments become searchable memories with summaries, tags, and embeddings.</p>
139156
</div>
140157
<div class="feature" data-reveal>
141-
<h3>Orchestrated Conversation</h3>
158+
<h3><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="7" cy="12" r="3" stroke="currentColor" stroke-width="2" fill="none"/><circle cx="17" cy="7" r="3" stroke="currentColor" stroke-width="2" fill="none"/><circle cx="17" cy="17" r="3" stroke="currentColor" stroke-width="2" fill="none"/><path d="M9.5 10.5 14.5 8M9.5 13.5 14.5 16" stroke="currentColor" stroke-width="2"/></svg>Orchestrated Conversation</h3>
142159
<p>Retrieval‑augmented prompts with a plan → answer loop and safety self‑check.</p>
143160
</div>
144161
</div>
@@ -198,12 +215,26 @@ <h3>Contributors</h3>
198215
</div>
199216
</div>
200217
</section>
218+
219+
<!-- About Author (moved above footer) -->
220+
<section class="section" id="author">
221+
<div class="container">
222+
<div class="author-card" data-reveal>
223+
<img class="author-pic" src="./assets/author_pic.jpg" alt="Author portrait" />
224+
<div class="author-content">
225+
<h3>About the Author</h3>
226+
<p class="author-tag">Built by Vladislav Kondratyev — crafting local‑first AI that actually cares.</p>
227+
<a class="btn btn-primary" href="https://www.linkedin.com/in/vladislav-kondratyev/" target="_blank" rel="noopener">Connect on LinkedIn</a>
228+
</div>
229+
</div>
230+
</div>
231+
</section>
201232
</main>
202233

203234
<footer class="site-footer">
204235
<div class="container footer-inner">
205236
<div class="brand small">
206-
<span class="logo-dot" aria-hidden="true"></span>
237+
<img class="logo-img" src="./assets/logo.jpg" alt="Mindcore logo" />
207238
<span class="brand-text">Mindcore</span>
208239
</div>
209240
<div class="legal">
@@ -231,11 +262,19 @@ <h3 id="interest-title">Join Early Access</h3>
231262
<span>How would you use Mindcore?</span>
232263
<textarea name="use" rows="4" placeholder="Study buddy, focus coach, memory timeline…" required></textarea>
233264
</label>
265+
<label>
266+
<span>How likely are you to use or recommend Mindcore?</span>
267+
<div class="choices">
268+
<label><input type="radio" name="likelihood" value="1" required> 1</label>
269+
<label><input type="radio" name="likelihood" value="2"> 2</label>
270+
<label><input type="radio" name="likelihood" value="3"> 3</label>
271+
<label><input type="radio" name="likelihood" value="4"> 4</label>
272+
<label><input type="radio" name="likelihood" value="5"> 5</label>
273+
</div>
274+
</label>
234275
<div class="form-actions">
235-
<button type="submit" class="btn btn-primary">Send</button>
276+
<button type="submit" class="btn btn-primary">Submit</button>
236277
<button type="button" class="btn btn-ghost" data-copy>Copy message</button>
237-
<a class="btn btn-outline" data-mailto href="#">Open email</a>
238-
<button type="button" class="btn btn-outline" data-export>Export JSON</button>
239278
</div>
240279
<p class="form-note">We store your info only for early access updates. No spam.</p>
241280
</form>

scripts.js

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,18 @@
7474
}
7575

7676
// Interest form handling
77-
function composeMessage(email, use) {
78-
return `Early Access Interest\nEmail: ${email}\nUse case: ${use}`;
77+
function getLikelihood() {
78+
const el = document.querySelector('input[name="likelihood"]:checked');
79+
return el ? el.value : '';
80+
}
81+
function composeMessage(email, use, like) {
82+
return `Early Access Interest\nEmail: ${email}\nUse case: ${use}\nLikelihood: ${like}/5`;
7983
}
8084
function updateMailto(email, use) {
8185
const a = qs('[data-mailto]');
8286
const subject = encodeURIComponent('Mindcore Early Access');
83-
const body = encodeURIComponent(composeMessage(email, use));
84-
a.href = `mailto:[email protected]?subject=${subject}&body=${body}`;
87+
const body = encodeURIComponent(composeMessage(email, use, getLikelihood()))
88+
a.href = `mailto:[email protected]?subject=${subject}&body=${body}`;
8589
}
8690
function downloadJSON(data, filename = 'mindcore_interest.json') {
8791
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
@@ -96,22 +100,35 @@
96100
const use = form.use.value.trim();
97101
updateMailto(email, use);
98102
});
103+
qsa('input[name="likelihood"]').forEach(r => r.addEventListener('change', () => {
104+
const email = form.email.value.trim();
105+
const use = form.use.value.trim();
106+
updateMailto(email, use);
107+
}));
99108

100109
form.addEventListener('submit', (e) => {
101110
e.preventDefault();
102111
const email = form.email.value.trim();
103112
const use = form.use.value.trim();
104-
const record = { email, use, ts: new Date().toISOString() };
113+
const like = getLikelihood();
114+
const record = { email, use, like, ts: new Date().toISOString() };
105115
try {
106116
const existing = JSON.parse(localStorage.getItem('mindcore_interest') || '[]');
107117
existing.push(record);
108118
localStorage.setItem('mindcore_interest', JSON.stringify(existing));
109119
} catch {}
120+
// Open mail client to send to owner
121+
try {
122+
const subject = encodeURIComponent('Mindcore Early Access');
123+
const body = encodeURIComponent(composeMessage(email, use, like));
124+
window.location.href = `mailto:[email protected]?subject=${subject}&body=${body}`;
125+
} catch {}
126+
110127
// Provide immediate feedback
111128
qs('.form', modal).hidden = true;
112129
success.hidden = false;
113130
// optional auto-close after delay
114-
setTimeout(closeModal, 1600);
131+
setTimeout(closeModal, 2000);
115132
});
116133

117134
qs('[data-copy]').addEventListener('click', async () => {
@@ -124,14 +141,7 @@
124141
} catch {}
125142
});
126143

127-
const exportBtn = qs('[data-export]');
128-
if (exportBtn) {
129-
exportBtn.addEventListener('click', () => {
130-
const email = form.email.value.trim();
131-
const use = form.use.value.trim();
132-
downloadJSON({ email, use, ts: new Date().toISOString() });
133-
});
134-
}
144+
// Removed export button per new UX
135145

136146
// Background canvas particles
137147
const canvas = qs('#bg');

0 commit comments

Comments
 (0)