My Projects
Portfolio Website Template
A de-sanitized Next.js + Tailwind CSS portfolio template (Solarized-inspired UI, Framer Motion). Clone it to drop in your own copy and assets, or extend it with new sections. Includes: • Core portfolio sections and layout • Light / dark theme • Hero 3D model (GLB)—replace with your own character • NetEase Cloud Music player with minimize mode and lyric / backdrop view • Dynamic, expandable work timeline • Draggable hobby / interest windows • Radar-style skill / interest visualization
SafeGrocer: COVID-19 Risk
Originated at LA Hacks 2020 as a hackathon team project: help people assess COVID-19 exposure risk and find lower-risk grocery options using location and available data—early-pandemic tooling for safer shopping decisions. Project note: the repo still reflects the original hackathon project, which was a web app that assessed COVID-19 exposure risk and recommended lower-risk grocery options using location and available data. LA Markets Near You: browse open-data farmers markets, search by address, and sort results by driving distance. APIs: Google Maps JavaScript API, Places API (New), Geocoding API, Routes API, with optional Distance Matrix API as a fallback when routing isn’t available.
Capstone: Partitioning Advisor
This project presents a lightweight, workload-aware Partitioning Advisor for Spark–Hive systems. It recommends an optimal partitioning strategy (Hive partitioning or Spark repartition) and partition count based on data size, query type, and optimization objective. The system is built on an empirical experiment summary, enabling fast and interpretable lookup-based recommendations without complex cost models. Evaluated across multiple workloads, the Advisor achieves 100% agreement with the best observed configurations for runtime. Results show that partitioning decisions significantly impact performance, especially for join queries and large datasets. The solution is fully reproducible and designed to reduce manual tuning while improving consistency in distributed data processing pipelines.
MeowJudge
AI-powered web tool: a Next.js app that turns two sides of a conflict into structured, bilingual (Chinese + English) reflection—summary, fairness framing, suggestions, and a light “cat judge” verdict. Structured inputs (relationship type, perspectives, optional facts, outcome mode), Vercel AI SDK with Zod-validated output, OpenRouter or OpenAI; zh/en UI with localStorage; last cases kept in the browser only.
Cave Escape
A first-person cave escape built as a computer-graphics learning project (low emphasis on replay value, high emphasis on the rendering pipeline). Stack: vanilla ES modules, WebGL through a course tiny-graphics framework, multi-page HTML shell, and Vercel static hosting. Highlights: • Framebuffer mouse picking — render interactables in an off-screen pass with a dedicated shader so each object gets a unique ID (primarily via the blue channel); readPixels at the screen center maps the sampled color to the picked object—a classic GPU-friendly alternative to ray–triangle intersection. • First-person camera — map 2D mouse deltas to 3D camera rotation, combine with WASD translation, view/projection matrices, and pointer-lock–style first-person navigation. • Lighting tied to puzzles — Phong-style materials and multiple lights; toggling the torch changes scene brightness so a fluorescent password texture only appears in the dark, connecting the lighting model directly to gameplay. • Fire: particles → GPU texture — simulate flame on a 2D canvas (positions, lifetime, yellow-to-red color falloff), upload to WebGL as a dynamic texture on a quad in the cave—a practical “2D sim → texture → 3D” pipeline rather than physically accurate volumetrics.
Snake
25×25 Snake. • Easy — open board. • Medium — random barriers (connected map). • Hard — rival snake; absorb its length, respawns at yours. Score and speed scale with snake length. Solarized look.










