-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
294 lines (287 loc) · 18.6 KB
/
Copy pathindex.html
File metadata and controls
294 lines (287 loc) · 18.6 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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="color-scheme" content="light" />
<title>Ethan Soh — Student developer.</title>
<meta name="description" content="Ethan Soh is a student developer from Singapore building apps, tools, and platforms across iOS, web, and developer tooling." />
<meta property="og:title" content="Ethan Soh — Student developer." />
<meta property="og:description" content="Apps, tools, and platforms — designed, built, and shipped from Singapore." />
<meta property="og:image" content="ethan-photo.png" />
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><polygon points='50,12 92,86 8,86' fill='%231d1d1f'/></svg>" />
<link rel="stylesheet" href="style.css?v=19" />
</head>
<body>
<div class="toast" id="toast" role="status" aria-live="polite"></div>
<main id="top">
<section class="hero">
<div class="container hero-grid">
<div class="hero-copy">
<p class="hero-eyebrow reveal">Student developer · Singapore</p>
<h1 class="hero-title reveal" style="--d:.08s">Hi, I'm <span class="hl">Ethan</span>.<span class="hero-sub">I make stuff and put it on the internet.</span></h1>
<p class="hero-lead reveal" style="--d:.18s">
A student and developer in Singapore. I spend my most of my day in school but a good portion of my nights making strange little projects and learning whatever I can.
</p>
<div class="cta-row reveal" style="--d:.28s">
<a class="btn btn-blue" href="#work">See the work</a>
<a class="link-chevron" href="about.html">About me <span>›</span></a>
<a class="link-chevron" href="#contact">Say hello <span>›</span></a>
</div>
<div class="social-row reveal" style="--d:.38s">
<a href="https://github.com/quantamShade0337" target="_blank" rel="noopener" aria-label="GitHub">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.56 0-.27-.01-1.17-.02-2.12-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.68-1.28-1.68-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.03 1.76 2.69 1.25 3.35.96.1-.75.4-1.25.72-1.54-2.55-.29-5.24-1.28-5.24-5.68 0-1.26.45-2.28 1.18-3.09-.12-.29-.51-1.46.11-3.05 0 0 .96-.31 3.15 1.18a10.9 10.9 0 0 1 2.87-.39c.97 0 1.95.13 2.87.39 2.19-1.49 3.15-1.18 3.15-1.18.62 1.59.23 2.76.11 3.05.73.81 1.18 1.83 1.18 3.09 0 4.41-2.69 5.38-5.25 5.67.41.35.77 1.04.77 2.1 0 1.52-.01 2.74-.01 3.11 0 .31.21.67.8.56A11.52 11.52 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"/></svg>
</a>
<a href="https://www.linkedin.com/in/ethan-soh-9548863a9/" target="_blank" rel="noopener" aria-label="LinkedIn">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20.45 20.45h-3.55v-5.57c0-1.33-.03-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.36V9h3.41v1.56h.05c.47-.9 1.63-1.85 3.36-1.85 3.6 0 4.27 2.37 4.27 5.45v6.29ZM5.34 7.43a2.06 2.06 0 1 1 0-4.12 2.06 2.06 0 0 1 0 4.12ZM7.12 20.45H3.56V9h3.56v11.45ZM22.22 0H1.77C.79 0 0 .77 0 1.72v20.55C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.73V1.72C24 .77 23.2 0 22.22 0Z"/></svg>
</a>
<a href="mailto:ethansytwrites@gmail.com" aria-label="Email">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="5" width="19" height="14" rx="2.5"/><path d="m3.5 7 8.5 6 8.5-6"/></svg>
</a>
</div>
</div>
<div class="hero-photo reveal" style="--d:.2s">
<img src="ethan-photo-card.png" alt="Ethan Soh" />
<span class="photo-note">me trying to be a functional human</span>
</div>
</div>
</section>
<section class="stats">
<div class="container stats-grid">
<div class="stat reveal"><strong><span class="count" data-target="31">0</span>+</strong><span>Open-source repos</span></div>
<div class="stat reveal" style="--d:.08s"><strong><span class="count" data-target="10">0</span></strong><span>Certifications</span></div>
<div class="stat reveal" style="--d:.16s"><strong><span class="count" data-target="3">0</span></strong><span>Live products</span></div>
<div class="stat reveal" style="--d:.24s"><strong>2am</strong><span>Peak productivity</span></div>
</div>
</section>
<section class="section" id="work">
<div class="container">
<header class="section-head">
<h2 class="reveal">Some things I've built.</h2>
<p class="reveal">All of these started as random ideas. These are the ones that made it out alive (kinda).</p>
</header>
</div>
<div class="project-band tint-sky">
<div class="container project-grid flip">
<div class="project-copy reveal">
<p class="card-eyebrow">3D printing · 2026 · Live</p>
<h3>Meshlab</h3>
<p>Turn an image into an editable 3D model. Upload a reference, watch the geometry rebuild itself in your browser, then export STL, OBJ, or GLB at actual millimetre scale and go print the thing.</p>
<a class="link-chevron" href="https://meshlab.ethansoh.com" target="_blank" rel="noopener">Visit meshlab.ethansoh.com <span>›</span></a>
</div>
<div class="project-visual reveal" style="--d:.12s">
<img class="shot" src="shot-meshlab.webp" width="1600" height="933" alt="Meshlab — turn an image into an editable 3D model" loading="lazy" />
</div>
</div>
</div>
<div class="project-band tint-mint">
<div class="container project-grid">
<div class="project-copy reveal">
<p class="card-eyebrow">iOS · 2025 · Swift Accelerator</p>
<h3>Scripties</h3>
<p>An iOS app that listens to you rehearse and tells you the truth about your pacing. Built during Swift Accelerator, tested on my own speeches first.</p>
<a class="link-chevron" href="scripties.html">Learn more <span>›</span></a>
</div>
<div class="project-visual reveal" style="--d:.12s">
<img class="shot shot-phone" src="shot-scripties.webp?v=2" width="412" height="746" alt="Scripties — speech review with words-per-minute and consistency scores" loading="lazy" />
</div>
</div>
</div>
<div class="project-band tint-cream">
<div class="container project-grid flip">
<div class="project-copy reveal">
<p class="card-eyebrow">Web · 2026 · Live · formerly FlowDay</p>
<h3>Axinote</h3>
<p>The study space that actually feels good. Notes, flashcards, calendar deadlines, and focus timers in one warm place — with an AI that actually knows your schedule.</p>
<a class="link-chevron" href="https://flowday.ethansoh.com" target="_blank" rel="noopener">Visit flowday.ethansoh.com <span>›</span></a>
</div>
<div class="project-visual reveal" style="--d:.12s">
<img class="shot" src="shot-axinote.webp" width="1600" height="1001" alt="Axinote — the study space that actually feels good" loading="lazy" />
</div>
</div>
</div>
<div class="container">
<div class="mini-grid">
<article class="mini-card reveal">
<p class="card-eyebrow">Machine learning · Research</p>
<h3>BuildingBlocs</h3>
<p>Teaching a camera to read sign language, one letter at a time. Accessibility tech that goes where it's needed.</p>
</article>
<article class="mini-card reveal" style="--d:.08s">
<p class="card-eyebrow">iOS · In development</p>
<h3>ADHD</h3>
<p>A game that teaches what it actually feels like to have ADHD. Built to build empathy — intentionally hard to focus in.</p>
</article>
<article class="mini-card reveal">
<p class="card-eyebrow">Web · 2026</p>
<h3>Ghost</h3>
<p>A platform Swift developers can use to run Swift entirely on the web. Because sometimes Xcode is just too far away.</p>
</article>
<article class="mini-card reveal" style="--d:.08s">
<p class="card-eyebrow">Web · 2026</p>
<h3>CodeType</h3>
<p>Typing practice built for programmers — real code, real syntax, real muscle memory. Semicolons included.</p>
</article>
</div>
</div>
</section>
<section class="quote-band">
<div class="container">
<blockquote class="reveal">
<p>“Final push right?”</p>
<cite>— me, at 2am, every single time</cite>
</blockquote>
</div>
</section>
<section class="section alt" id="open-source">
<div class="container">
<header class="section-head">
<h2 class="reveal">Everything else that made it to github.</h2>
<p class="reveal">Believe it or not this is actually pulled live from my GitHub profile.</p>
</header>
<div class="contrib-card reveal" id="contrib" hidden></div>
<div class="filter-row reveal" id="filterRow" role="tablist" aria-label="Filter repositories by language"></div>
<div class="repo-clipbox" id="repoClipbox">
<div class="repo-grid" id="repoGrid"></div>
</div>
<p class="repo-more reveal"><button class="btn btn-white" id="repoToggle" hidden>Show more</button></p>
<p class="repo-foot reveal">
<a class="link-chevron" href="https://github.com/quantamShade0337?tab=repositories" target="_blank" rel="noopener">All repositories on GitHub <span>›</span></a>
</p>
</div>
</section>
<section class="section" id="toolbox">
<div class="container">
<header class="section-head">
<h2 class="reveal">Some technologies I've used.</h2>
<p class="reveal">Credit to stack overflow for keeping me alive through this journey</p>
</header>
<div class="tool-groups">
<div class="tool-group reveal">
<h3>Languages</h3>
<div class="tool-pills">
<span>Swift</span><span>TypeScript</span><span>JavaScript</span><span>Python</span><span>C++</span><span>HTML & CSS</span>
</div>
</div>
<div class="tool-group reveal" style="--d:.08s">
<h3>Frameworks & platforms</h3>
<div class="tool-pills">
<span>SwiftUI</span><span>UIKit</span><span>Node.js</span><span>Firebase</span><span>Three.js</span><span>Next.js</span>
</div>
</div>
<div class="tool-group reveal" style="--d:.16s">
<h3>Tools</h3>
<div class="tool-pills">
<span>Xcode</span><span>VS Code</span><span>Git & GitHub</span><span>Figma</span><span>Vercel</span><span>Hot chocolate</span>
</div>
</div>
</div>
</div>
</section>
<section class="band-gray" id="certs">
<div class="container">
<header class="section-head">
<h2 class="reveal">The paper trail.</h2>
<p class="reveal">Ten certifications across Apple, Google, Microsoft, and IMDA — plus a few wins along the way.</p>
</header>
<div class="cert-grid" id="certGrid"></div>
<div class="recognition">
<h3 class="reveal">The journey so far</h3>
<ol class="timeline">
<li class="reveal"><span class="t-year">2026</span><div><strong>Founded Kyro Market</strong><p>Launched a zero-commission marketplace for developers. Built the whole thing solo, which explains a lot about my sleep schedule.</p></div></li>
<li class="reveal" style="--d:.06s"><span class="t-year">2026</span><div><strong>Certification sprint</strong><p>Ten certifications in four months across Apple, Google, Microsoft, and IMDA — mostly AI. Went a bit overboard. No regrets.</p></div></li>
<li class="reveal" style="--d:.12s"><span class="t-year">2026</span><div><strong>Swift Accelerator Programme — Graduate</strong><p>Completed the eight-month iOS talent programme by Apple, IMDA, and SwiftInSG. Graduated. Survived. Shipped.</p></div></li>
<li class="reveal" style="--d:.18s"><span class="t-year">2025</span><div><strong>Joined Swift Accelerator · built Scripties</strong><p>Got in, then built a public-speaking trainer for iOS as the capstone. Learned a lot. Slept a little.</p></div></li>
<li class="reveal" style="--d:.24s"><span class="t-year">2022</span><div><strong>NRC Top 20</strong><p>Top 20 in Singapore's National Robotics Competition — back when my code drove LEGO.</p></div></li>
<li class="reveal" style="--d:.3s"><span class="t-year">2021</span><div><strong>FLL Best Presentation</strong><p>Recognised for presentation quality and storytelling at FIRST LEGO League. The public-speaking obsession started here.</p></div></li>
</ol>
</div>
</div>
</section>
<section class="section" id="about">
<div class="container about-grid">
<div class="about-copy">
<h2 class="reveal">So, who am I?</h2>
<p class="reveal">I'm Ethan, a secondary school student in Singapore. Somewhere between classes and homework I started shipping apps, and now I genuinely can't stop. If I'm not coding, I'm probably rehearsing a speech or explaining to my parents why I'm still awake.</p>
<p class="reveal">I like building things that make someone's day a little less chaotic — study tools, speaking coaches, random Mac utilities, and the occasional physical thing from my 3D printer.</p>
<a class="link-chevron reveal" href="about.html">More about me <span>›</span></a>
</div>
<dl class="facts">
<div class="reveal"><dt>School</dt><dd>Bukit Panjang Govt High</dd></div>
<div class="reveal" style="--d:.06s"><dt>Primary stack</dt><dd>Swift · TypeScript · Node.js</dd></div>
<div class="reveal" style="--d:.12s"><dt>Powered by</dt><dd>Hot chocolate</dd></div>
<div class="reveal" style="--d:.18s"><dt>Class of</dt><dd>2026</dd></div>
</dl>
</div>
</section>
<section class="section alt" id="beyond">
<div class="container">
<header class="section-head">
<h2 class="reveal">Beyond the code.</h2>
<p class="reveal">The parts that don't compile but matter anyway.</p>
</header>
<div class="beyond-grid">
<article class="beyond-card reveal">
<span class="beyond-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5.5 11.5a6.5 6.5 0 0 0 13 0M12 18v3"/></svg>
</span>
<h3>Public speaking</h3>
<p>On stage since FIRST LEGO League. Built Scripties because I wanted my own coach in my pocket.</p>
</article>
<article class="beyond-card reveal" style="--d:.06s">
<span class="beyond-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="9" width="14" height="9" rx="3"/><path d="M12 9V6"/><circle cx="12" cy="4.5" r="1.4"/><path d="M9.5 13.5h.01M14.5 13.5h.01"/></svg>
</span>
<h3>Robotics</h3>
<p>National top 20 before I could legally drive anything that wasn't LEGO.</p>
</article>
<article class="beyond-card reveal" style="--d:.12s">
<span class="beyond-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3 8 4.5v9L12 21l-8-4.5v-9L12 3Z"/><path d="m4.5 7.8 7.5 4.3 7.5-4.3M12 12.1V21"/></svg>
</span>
<h3>3D printing</h3>
<p>Turning digital models into physical objects, then refining both until they work.</p>
</article>
<article class="beyond-card reveal" style="--d:.18s">
<span class="beyond-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7.5h3l1.5-2h7l1.5 2h3a2 2 0 0 1 2 2v8.5a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9.5a2 2 0 0 1 2-2Z"/><circle cx="12" cy="13.5" r="3.5"/></svg>
</span>
<h3>Photography</h3>
<p>Photographing concerts and capturing the energy, lighting, and moments on stage.</p>
</article>
<article class="beyond-card reveal" style="--d:.24s">
<span class="beyond-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18V5l11-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="17" cy="16" r="3"/></svg>
</span>
<h3>Music</h3>
<p>Playing guitar and learning the music theory behind what makes a song work.</p>
</article>
</div>
</div>
</section>
<section class="contact" id="contact">
<div class="container contact-inner">
<h2 class="reveal">Let's build something.</h2>
<p class="reveal">Got an idea in education, communication, or product design? I'd genuinely love to hear it. Non-scammy emails only, please.</p>
<div class="cta-row reveal">
<button class="btn btn-blue" id="copyEmail" data-email="ethansytwrites@gmail.com">Copy email</button>
<a class="link-chevron" href="https://www.linkedin.com/in/ethan-soh-9548863a9/" target="_blank" rel="noopener">LinkedIn <span>›</span></a>
<a class="link-chevron" href="https://github.com/quantamShade0337" target="_blank" rel="noopener">GitHub <span>›</span></a>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container footer-inner">
<p>© 2026 Ethan Soh. Built with focus and spite.</p>
<div class="footer-links">
<a href="https://github.com/quantamShade0337" target="_blank" rel="noopener">GitHub</a>
<a href="https://www.linkedin.com/in/ethan-soh-9548863a9/" target="_blank" rel="noopener">LinkedIn</a>
<a href="https://ethn.link" target="_blank" rel="noopener">ethn.link</a>
<a href="https://kyromarket.com" target="_blank" rel="noopener">Kyro</a>
</div>
</div>
</footer>
<script src="main.js?v=14" defer></script>
</body>
</html>