-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
199 lines (187 loc) · 11 KB
/
index.html
File metadata and controls
199 lines (187 loc) · 11 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
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Nick Ding — AI-native builder</title>
<meta
name="description"
content="Nick Ding builds AI systems that turn messy data into useful memory. Engineering data pipelines, AI extraction workflows, and realtime coordination products."
>
<meta name="theme-color" content="#0A0B0F">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/styles.css">
<!-- Prevent flash of unstyled theme -->
<script>
(function(){
var t = localStorage.getItem('nd-theme');
if (!t) t = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', t);
})();
</script>
</head>
<body>
<!-- Scroll progress bar -->
<div class="scroll-progress" id="scroll-progress" aria-hidden="true"></div>
<a class="skip-link" href="#main-content">Skip to Main Content</a>
<!-- Ambient background -->
<div class="ambient-bg" aria-hidden="true">
<div class="ambient-orb ambient-orb-1"></div>
<div class="ambient-orb ambient-orb-2"></div>
<div class="ambient-orb ambient-orb-3"></div>
<div class="grid-overlay"></div>
</div>
<header class="site-header" id="site-header">
<div class="header-inner">
<a class="brand" href="index.html" aria-label="Nick Ding home">
<span class="brand-mark">ND</span>
<span>Nick Ding</span>
</a>
<nav class="site-nav" aria-label="Primary">
<a href="#projects">Projects</a>
<a href="#approach">Approach</a>
<a href="https://github.com/StickKB" target="_blank" rel="noopener">GitHub</a>
<button class="theme-toggle" id="theme-toggle" type="button" aria-label="Toggle dark/light mode">
<svg class="icon-moon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
<svg class="icon-sun" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>
</button>
</nav>
</div>
</header>
<main id="main-content">
<section class="hero container" aria-labelledby="hero-title">
<p class="hero-badge reveal">
<span class="hero-badge-dot"></span>
Available for opportunities
</p>
<h1 id="hero-title" class="reveal reveal-delay-1">
<span class="hero-line">I build things that</span>
<span class="hero-line"><span class="gradient-text animated-gradient">think and remember.</span></span>
</h1>
<p class="tagline reveal reveal-delay-2">
AI systems, data pipelines, and realtime mobile products — from architecture diagram to working prototype.
</p>
<div class="hero-actions reveal reveal-delay-3">
<a class="btn btn-primary btn-glow" href="#projects">
<span>View Projects</span>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M8 3v10M3 8l5 5 5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
</a>
<a class="btn btn-ghost" href="https://github.com/StickKB" target="_blank" rel="noopener">
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg>
<span>GitHub</span>
</a>
</div>
<div class="hero-scroll-hint reveal reveal-delay-3" aria-hidden="true">
<div class="scroll-mouse">
<div class="scroll-wheel"></div>
</div>
</div>
</section>
<section id="projects" class="section container" aria-labelledby="projects-title">
<div class="section-header reveal">
<p class="eyebrow"><span class="eyebrow-line"></span>Featured Projects</p>
<h2 id="projects-title">What I'm building</h2>
</div>
<div class="project-grid">
<article class="project-card reveal reveal-delay-1" data-project="sieve" data-tilt>
<div class="card-spotlight" aria-hidden="true"></div>
<div class="project-media">
<img src="assets/sieve-system.svg" width="760" height="420" loading="lazy" alt="Sieve system diagram showing capture, extraction, review, and search workflow.">
</div>
<div class="project-body">
<div class="project-meta">
<span class="tag tag-active"><span class="tag-dot" aria-hidden="true"></span>Active</span>
<span class="tag tag-sieve">AI & Data</span>
</div>
<h3 class="project-title">Sieve</h3>
<p class="project-subtitle">AI knowledge and memory workspace</p>
<p class="project-desc">
Captures rough knowledge, extracts structured context with AI,
assembles review packets, and makes approved memory searchable
with citations.
</p>
<a class="project-link" href="projects/sieve.html">
Open case study <span class="arrow" aria-hidden="true">→</span>
</a>
</div>
</article>
<article class="project-card reveal reveal-delay-2" data-project="convoy" data-tilt>
<div class="card-spotlight" aria-hidden="true"></div>
<div class="project-media">
<img src="assets/convoy-system.svg" width="760" height="420" loading="lazy" alt="Convoy system diagram showing group navigation, realtime map state, and voice coordination.">
</div>
<div class="project-body">
<div class="project-meta">
<span class="tag tag-active"><span class="tag-dot" aria-hidden="true"></span>Active</span>
<span class="tag tag-convoy">Realtime Mobile</span>
</div>
<h3 class="project-title">Convoy</h3>
<p class="project-subtitle">Realtime iOS group navigation</p>
<p class="project-desc">
Private group sessions with shared map state, route and ETA
context, press-to-talk voice, and clear stop-sharing controls
for people driving together.
</p>
<a class="project-link" href="projects/convoy.html">
Open case study <span class="arrow" aria-hidden="true">→</span>
</a>
</div>
</article>
</div>
</section>
<section id="approach" class="section container" aria-labelledby="approach-title">
<div class="section-header reveal">
<p class="eyebrow"><span class="eyebrow-line"></span>How I Build</p>
<h2 id="approach-title">Engineering principles</h2>
</div>
<div class="approach-grid">
<article class="approach-card reveal reveal-delay-1" data-tilt>
<div class="approach-icon" aria-hidden="true">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/></svg>
</div>
<h3>Architecture-first</h3>
<p>
Start with data models, API contracts, and system boundaries before
writing UI code. The architecture diagram is the first deliverable.
</p>
</article>
<article class="approach-card reveal reveal-delay-2" data-tilt>
<div class="approach-icon" aria-hidden="true">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"/></svg>
</div>
<h3>Verification-driven</h3>
<p>
Every system claim has a test, contract check, or explicit
verification note. Rough edges are documented, not hidden.
</p>
</article>
<article class="approach-card reveal reveal-delay-3" data-tilt>
<div class="approach-icon" aria-hidden="true">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v18M3 12l4.5-4.5M3 12l4.5 4.5M21 12l-4.5-4.5M21 12l-4.5 4.5"/></svg>
</div>
<h3>Honest about tradeoffs</h3>
<p>
Shipping means choosing constraints. I document what's deferred,
what's rough, and why — so technical reviewers see judgment,
not just features.
</p>
</article>
</div>
</section>
</main>
<footer class="site-footer">
<div class="footer-inner">
<div class="footer-links">
<a href="https://github.com/StickKB" target="_blank" rel="noopener">GitHub</a>
<a href="https://github.com/StickKB/sieve-readme" target="_blank" rel="noopener">Sieve Repo</a>
<a href="https://github.com/StickKB/convoy-readme" target="_blank" rel="noopener">Convoy Repo</a>
</div>
<p class="footer-meta">Source available on request · Built with vanilla HTML/CSS · <span data-year></span></p>
</div>
</footer>
<script src="assets/site.js"></script>
</body>
</html>