@@ -185,22 +185,18 @@ <h2 class="text-3xl font-bold mb-12 text-center text-teal-600 dark:text-teal-300
185185 < div class ="md:w-3/5 ">
186186 < h2 class ="text-3xl font-bold mb-6 text-teal-600 dark:text-teal-300 "> About Me</ h2 >
187187
188-
189188 < p class ="text-gray-700 dark:text-white/85 leading-relaxed mb-4 ">
190189 I’m Ryan Hopkins — an < strong > AI systems engineer & context architect</ strong > with an M.S. in Industrial‑Organizational Psychology. I focus on building < strong > reliable LLM features</ strong > by pairing clear context patterns with small, testable delivery steps.
191190 </ p >
192191
193-
194192 < p class ="text-gray-700 dark:text-white/85 leading-relaxed mb-4 ">
195- I work across the stack with < strong > Node/Express</ strong > , < strong > MongoDB</ strong > , and EJS + Bootstrap , and I keep model behavior consistent with lightweight evaluation loops . I develop on < strong > WSL2 (Ubuntu)</ strong > , containerize with < strong > Docker</ strong > , and wire basic < strong > CI checks </ strong > around model calls .
193+ I work across the stack: < strong > Node/Express</ strong > with < strong > MongoDB</ strong > and EJS/Bootstrap for server‑rendered apps , and < strong > Next.js + TypeScript </ strong > with Tailwind/Framer Motion for newer builds like < em > GameSnap X‑Ray </ em > . I develop on < strong > WSL2 (Ubuntu)</ strong > , use < strong > Docker</ strong > for both hot‑reload dev and multi‑stage production images , and keep LLM features honest with small eval/regression checks plus basic CI gates (lint/format, unit/E2E tests) .
196194 </ p >
197195
198-
199196 < p class ="text-gray-700 dark:text-white/85 leading-relaxed mb-6 ">
200197 Recent work includes < strong > Snapshot X‑Ray</ strong > (a new app exploring faster spec‑to‑code loops) and < strong > Achieve Reentry</ strong > (AI‑assisted job tools). I’m currently exploring < strong > multi‑agent workflows</ strong > and < strong > LLM observability</ strong > .
201198 </ p >
202199
203-
204200 < h3 class ="font-semibold mb-2 "> How I build with LLMs</ h3 >
205201 < ol class ="list-decimal pl-5 space-y-1 text-sm text-gray-700 dark:text-white/80 mb-6 ">
206202 < li > < strong > Discuss & design:</ strong > iterate on ideas; write a clear problem statement and solution outline.</ li >
@@ -210,7 +206,6 @@ <h3 class="font-semibold mb-2">How I build with LLMs</h3>
210206 < li > < strong > Verify:</ strong > keep regression sets, logs, and guardrails; refine prompts/context when tests fail.</ li >
211207 </ ol >
212208
213-
214209 <!-- Compact skill badges (optional) -->
215210 < div class ="flex flex-wrap gap-2 ">
216211 < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Prompt/Context Patterns</ span >
@@ -229,7 +224,7 @@ <h3 class="font-semibold mb-2">How I build with LLMs</h3>
229224 < h2 class ="text-3xl font-bold mb-10 text-center text-teal-600 dark:text-teal-300 "> Featured Projects</ h2 >
230225 < div class ="grid gap-8 sm:grid-cols-2 lg:grid-cols-3 ">
231226 <!-- project card component -->
232- <!-- Achieve Reentry (rich project card) -->
227+ <!-- Achieve Reentry -->
233228 < article class ="group bg-white dark:bg-slate-800 rounded-2xl p-6 ring-1 ring-gray-200 dark:ring-white/15 shadow-lg transition-all duration-500 hover:shadow-teal-500/20 dark:hover:shadow-teal-500/30 hover:-translate-y-2 ">
234229 < a href ="#achieve-reentry " class ="block ">
235230 < img
@@ -274,6 +269,51 @@ <h3 class="text-xl font-semibold mb-2 group-hover:text-teal-600 dark:group-hover
274269 </ a >
275270 </ article >
276271
272+ <!-- GameSnap X-Ray -->
273+ < article class ="group bg-white dark:bg-slate-800 rounded-2xl p-6 ring-1 ring-gray-200 dark:ring-white/15 shadow-lg transition-all duration-500 hover:shadow-teal-500/20 dark:hover:shadow-teal-500/30 hover:-translate-y-2 ">
274+ < a href ="#gamesnap-xray " class ="block ">
275+ < img
276+ src ="assets/gamesnap-hero.png "
277+ alt ="GameSnap X-Ray — upload to poster preview "
278+ class ="w-full aspect-[16/9] object-contain rounded-xl mb-4 ring-1 ring-gray-200 dark:ring-white/10 bg-gray-50 dark:bg-slate-800 "
279+ loading ="lazy "
280+ />
281+ < h3 class ="text-xl font-semibold mb-2 group-hover:text-teal-600 dark:group-hover:text-teal-300 transition ">
282+ GameSnap X-Ray — One Image → Instant Sports Context
283+ </ h3 >
284+ < p class ="text-gray-600 dark:text-white/80 text-sm mb-4 ">
285+ Next.js app that turns a single game screenshot into instant sports context and a share-ready poster—detects the scorebug, identifies the game, and renders clean templates; includes upload API, demo gallery, and Dockerized builds.
286+ </ p >
287+
288+ <!-- Buttons -->
289+ < div class ="flex flex-wrap gap-3 ">
290+ < a href ="https://github.com/ProCO-RPHopkins/gamesnap-xray "
291+ target ="_blank "
292+ class ="inline-flex items-center gap-2 px-3 py-2 rounded-lg bg-gradient-to-r from-teal-600 to-cyan-600 text-white text-xs font-semibold shadow-md hover:scale-105 transition ring-1 ring-teal-500 ">
293+ < i class ="ti ti-rocket "> </ i >
294+ Open Source
295+ </ a >
296+ < a href ="# "
297+ target ="_blank "
298+ class ="inline-flex items-center gap-2 px-3 py-2 rounded-lg bg-gradient-to-r from-purple-600 to-pink-600 text-white text-xs font-semibold shadow-md hover:scale-105 transition ring-1 ring-purple-500 ">
299+ < i class ="ti ti-headphones "> </ i >
300+ Play Podcast
301+ </ a >
302+ </ div >
303+
304+ <!-- Tech Stack Chips -->
305+ < div class ="flex flex-wrap gap-2 mt-4 ">
306+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Next.js</ span >
307+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> TypeScript</ span >
308+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Tailwind</ span >
309+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Framer Motion</ span >
310+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Route Handlers (Node)</ span >
311+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Docker</ span >
312+ < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Demo Gallery API</ span >
313+ </ div >
314+ </ a >
315+ </ article >
316+
277317 <!-- Capstone: Redirecting Authoritarian Leadership -->
278318 < article class ="group bg-white dark:bg-slate-800 rounded-2xl p-6 ring-1 ring-gray-200 dark:ring-white/15 shadow-lg transition-all duration-500 hover:shadow-teal-500/20 dark:hover:shadow-teal-500/30 hover:-translate-y-2 ">
279319 <!-- Video thumbnail -->
@@ -412,33 +452,7 @@ <h3 class="text-xl font-semibold mb-2 group-hover:text-teal-600 dark:group-hover
412452 < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> C#</ span >
413453 < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> AI Agents</ span >
414454 </ div >
415- </ article >
416- < article class ="group bg-white dark:bg-slate-800 rounded-2xl p-6 ring-1 ring-gray-200 dark:ring-white/15 shadow-lg transition-all duration-500 hover:shadow-teal-500/20 dark:hover:shadow-teal-500/30 hover:-translate-y-2 ">
417- < div class ="bg-gray-200 dark:bg-slate-700 border-2 border-dashed rounded-xl w-full aspect-video mb-4 flex items-center justify-center text-gray-500 ">
418- < i class ="ti ti-robot text-4xl "> </ i >
419- </ div >
420- < h3 class ="text-xl font-semibold mb-2 group-hover:text-teal-600 dark:group-hover:text-teal-300 transition "> SkillSprint Coach</ h3 >
421- < p class ="text-gray-600 dark:text-white/80 text-sm mb-4 "> Custom GPT for micro‑learning sprint planning.</ p >
422- < div class ="flex flex-wrap gap-2 ">
423- < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> OpenAI API</ span >
424- < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Python</ span >
425- < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> LLM Fine-tuning</ span >
426- </ div >
427- </ article >
428- < article class ="group bg-white dark:bg-slate-800 rounded-2xl p-6 ring-1 ring-gray-200 dark:ring-white/15 shadow-lg transition-all duration-500 hover:shadow-teal-500/20 dark:hover:shadow-teal-500/30 hover:-translate-y-2 ">
429- < div class ="bg-gray-200 dark:bg-slate-700 border-2 border-dashed rounded-xl w-full aspect-video mb-4 flex items-center justify-center text-gray-500 ">
430- < i class ="ti ti-code text-4xl "> </ i >
431- </ div >
432- < h3 class ="text-xl font-semibold mb-2 group-hover:text-teal-600 dark:group-hover:text-teal-300 transition "> AI‑Assisted Thematic Analyzer</ h3 >
433- < p class ="text-gray-600 dark:text-white/80 text-sm mb-4 "> Six‑step, code‑assisted qualitative research workflow.</ p >
434- < div class ="flex flex-wrap gap-2 ">
435- < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> NLP</ span >
436- < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Python</ span >
437- < span class ="px-2 py-1 bg-gray-200 dark:bg-slate-700 text-xs rounded "> Data Analysis</ span >
438- </ div >
439- </ article >
440- </ div >
441- </ div >
455+ </ article >
442456 </ section >
443457
444458 <!-- ════════ CASE STUDY: ACHIEVE REENTRY ════════ -->
0 commit comments