diff --git a/apps/blade/public/azizAssets/Resume2026.pdf b/apps/blade/public/azizAssets/Resume2026.pdf new file mode 100644 index 00000000..195e7298 Binary files /dev/null and b/apps/blade/public/azizAssets/Resume2026.pdf differ diff --git a/apps/blade/public/azizAssets/azizHeadshot.jpeg b/apps/blade/public/azizAssets/azizHeadshot.jpeg new file mode 100644 index 00000000..57611385 Binary files /dev/null and b/apps/blade/public/azizAssets/azizHeadshot.jpeg differ diff --git a/apps/blade/src/app/aziz/page.tsx b/apps/blade/src/app/aziz/page.tsx new file mode 100644 index 00000000..c5f68a0d --- /dev/null +++ b/apps/blade/src/app/aziz/page.tsx @@ -0,0 +1,399 @@ +"use client"; + +import type { MouseEvent } from "react"; +import { useState } from "react"; +import Image from "next/image"; + +export default function Page() { + const handleNavClick = (event: MouseEvent) => { + const targetId = event.currentTarget.getAttribute("href"); + if (!targetId?.startsWith("#")) return; + const target = document.querySelector(targetId); + if (!target) return; + event.preventDefault(); + const prefersReducedMotion = window.matchMedia( + "(prefers-reduced-motion: reduce)", + ).matches; + target.scrollIntoView({ + behavior: prefersReducedMotion ? "auto" : "smooth", + block: "start", + }); + }; + + const timeline = [ + { + id: "macromatch", + title: "MacroMatch", + date: "Nov 2025 – Jan 2026", + hash: "d0e1f2a", + stack: [ + "TypeScript", + "Next.js", + "Tailwind", + "PostgreSQL", + "Prisma", + "NextAuth", + "OpenAI API", + ], + bullets: [ + { + label: "What", + text: "Personalized macro planning for 200+ restaurant/fast-food items and custom targets.", + }, + { + label: "How", + text: "Macro Fit Score algorithm + AI assistant returns top 3 optimized meal suggestions per query; Chart.js daily macro visualization.", + }, + { + label: "Impact", + text: "Reduced manual food selection time by ~70% and kept users within 5–10% of targets.", + }, + ], + }, + { + id: "isue-lab", + title: "ISUE Lab", + role: "Undergraduate Research Assistant", + date: "Oct 2025 – Present", + hash: "c7d8e9f", + stack: [ + "Python", + "Pandas", + "NumPy", + "PyTorch", + "Matplotlib", + "Seaborn", + "Hugging Face", + ], + bullets: [ + { + label: "Dataset", + text: "Curated and labeled a speech-error dataset from 15,000+ control and dysarthric samples with error types and therapy cues using Python tooling.", + }, + { + label: "Model", + text: "Built a therapist-facing model in PyTorch to generate personalized feedback, aligning with verified therapy strategies (~80% consistency).", + }, + { + label: "Evaluation", + text: "Ran pilot evaluations with dysarthric speakers and clinician input to validate usability and refine feedback quality.", + }, + ], + }, + { + id: "finbridge", + title: "FinBridge", + date: "Oct 2025", + hash: "a1b2c3d", + stack: [ + "TypeScript", + "React", + "Express", + "Node.js", + "Tailwind", + "Firebase", + "Gemini", + "Plaid API", + ], + bullets: [ + { + label: "What", + text: "Real-time transaction ingestion and spending insights with LLM-guided advice.", + }, + { + label: "How", + text: "Prompt pipeline injects balances, categorized transactions, and monthly summaries into Gemini; Chart.js dashboards for live data in a secure multi-user Firebase model.", + }, + { + label: "Impact", + text: "Turned raw bank data into context-aware guidance with actionable budgeting views.", + }, + ], + }, + { + id: "flipscript", + title: "FlipScript", + date: "Sep 2025", + hash: "b4c5d6e", + stack: [ + "JavaScript", + "React", + "Express", + "Node.js", + "Tailwind", + "OpenAI Whisper", + ], + bullets: [ + { + label: "What", + text: "Speech-to-study pipeline that turns lectures into learning assets.", + }, + { + label: "How", + text: "Whisper creates punctuated, timestamped transcripts; AI structures notes and highlights key concepts; flashcards optimized for active recall and spaced repetition.", + }, + { + label: "Impact", + text: "Accelerated study prep by converting raw audio into structured learning artifacts.", + }, + ], + }, + ]; + + const [expanded, setExpanded] = useState>({}); + + const toggleEntry = (id: string) => { + setExpanded((prev) => ({ ...prev, [id]: !prev[id] })); + }; + + return ( +
+
+
+
+
+
+
+ + + Skip to content + + +
+ +
+
+ +
+
+
+

+ KnightHacks Forge Dev Team Application +

+
+

+ Abduaziz Umarov +

+
+

+ I enjoy building clean systems with care and ship outcomes that + matter. I want to work in a collaborative team like Forge to + grow as a developer. +

+ +
+ +
+ Abduaziz Umarov +
+
+ +
+ +
+
+

+ My Commit Log +

+
+ +
+
+
+ {timeline.map((entry) => { + const isExpanded = expanded[entry.id]; + const bullets = Array.isArray(entry.bullets) + ? entry.bullets.slice( + 0, + isExpanded ? entry.bullets.length : 3, + ) + : []; + const hasMore = entry.bullets.length > 3; + return ( +
+ +
+
+
+

+ {entry.title} +

+ {"role" in entry && entry.role ? ( +

+ {entry.role} +

+ ) : null} +
+
+ + commit {entry.hash} + + + {entry.date} + +
+
+ + {"stack" in entry ? ( +
+ {entry.stack.map((item) => ( + + {item} + + ))} +
+ ) : null} + +
    + {bullets.map((bullet, index) => ( +
  • + {typeof bullet === "string" ? ( + bullet + ) : ( + <> + + {bullet.label} + +

    {bullet.text}

    + + )} +
  • + ))} +
+ {hasMore ? ( + + ) : null} +
+
+ ); + })} +
+
+
+ + +
+
+
+ ); +}