Chenyu Lu (Eric Lu) — Portfolio
Hi, my name is Chenyu Lu, but I also go by Eric. I'm a student and developer who
enjoys turning technical ideas into projects that people can actually use. This
portfolio includes an interactive face-tracking avatar that answers questions
about my work, experiences, and interests, along with sections for my projects,
technical skills, resume, and contact info.
Projects
Vera
1,000+ visitors in 30 days.
A cross-platform learning platform for my school's Physics Club, with student-made
tutorials, authentication, and saved video progress. Built with Flutter, Firebase,
REST API, Cloudflare.
Technical challenges
-
Problem: existing physics resources did not match the specific course structure
students needed. Approach: built a single, curriculum-aligned platform by working
directly with the physics department head to organize lessons by course and topic.
-
Problem: the original video playback package could not reliably play Vera's WebM
lesson videos. Approach: traced the failure to the media layer specifically and
replaced it with Chewie on top of Flutter's video_player package.
-
Problem: content needed authentication and per-user saved progress without a
dedicated backend team. Approach: used Firebase for accounts, content storage, and
saved video progress.
Distill
1st Place, NGN Hacks 2026.
A Chrome extension that simplifies cluttered webpages by hiding ads, navigation
clutter, and autoplay media, personalized through eye-tracking calibration. Built
with React, Vite, TensorFlow, MediaPipe, FastAPI, Python, Qwen2.5-7B-Instruct.
Technical challenges
-
Problem: automatically hiding page clutter risks hiding something the page actually
needs, like a consent banner or a password field. Approach: deterministic safety
flags sit above the classifier and are never overridden by the model.
-
Problem: a single fixed rule for what counts as clutter does not fit every reader.
Approach: an eye-tracking calibration pass built with MediaPipe and TensorFlow
learns what a specific user actually looks at, and simplification is tuned to that
person.
-
Problem: classifying page elements accurately needed more judgment than simple
heuristics alone. Approach: combined rule-based heuristics with LLM analysis from a
Qwen2.5-7B-Instruct model served through a FastAPI backend.
Chaos Roll
1st Place, Hack the Valley Hack Day.
A wave-survival game where Gemini generates playable abilities and enemy waves in
real time. The challenge was not calling an LLM, it was making unpredictable model
output safe enough to drive a live game. Built with React, TypeScript, Gemini API.
Technical challenges
-
Problem: Gemini occasionally returned malformed or semantically invalid ability and
enemy definitions. Approach: every response is checked against an expected schema
before it is allowed anywhere near game state.
-
Problem: even schema-valid responses could still break game balance. Approach:
every numeric value is clamped to a wave-scaled power curve, so nothing generated
can exceed what the game can safely handle.
-
Problem: a malformed or unsafe candidate needed a fallback that did not break the
wave. Approach: invalid candidates are rejected and the match falls back to
deterministic assets instead of executing untrusted output.
-
Problem: generation could not be allowed to freeze the match while waiting on the
model. Approach: ability and enemy generation runs asynchronously against a shared
match clock.
Technical deep dive
Why not trust Gemini's output directly? Gemini can return syntactically valid JSON
that is still unsafe for the game, so generation was treated as untrusted input from
the start, the same way any external API response would be.
What would I change with another week? I would add an automated revision step that
sends invalid responses back to the model with the specific validation error, instead
of only discarding them.
Face-Tracking Avatar
A browser-based 3D avatar that replays recorded facial expressions, head movement,
and speech through a conversational portfolio interface. Built with MediaPipe,
Three.js, React, TypeScript.
Technical challenges
-
Problem: raw MediaPipe blendshape scores do not map cleanly onto a 3D model's
resting expression. Approach: ran a neutral calibration pass to compensate for the
performer's resting expression before applying scores to the avatar mesh.
-
Problem: recording and rendering frame rates do not match, which would otherwise
cause visible stuttering. Approach: interpolated between recorded frames at
playback time so the result stays stable.
-
Problem: a recorded conversational avatar needed to feel intentional even when
audio is muted or the browser cannot render WebGL. Approach: wrapped the system in
dialogue logic, synchronized transcript timing, skip behavior, and loading
fallbacks.
Pocket Pilot
A mobile app that analyzes receipts and turns them into useful insights about
personal spending habits. Built with React Native, Firebase, Gemini API, Cloudinary.
Technical challenges
-
Problem: receipt photos vary wildly in lighting, layout, and merchant formatting.
Approach: Gemini interprets receipt content into structured spending information,
but the interface treats every generated result as reviewable rather than
unquestionably correct.
-
Problem: uploads, persistence, and AI-assisted analysis needed to stay independently
reasoned about. Approach: split responsibilities cleanly across React Native,
Cloudinary, Firestore, and Gemini.
Other projects
-
Portfolio Website (earlier version): an earlier portfolio built
with Flutter Web to present my projects, skills, and experience through a
space-themed interface.
-
Integrals Buoyancy Simulator: a C++ physics simulator using
calculus and integrals to simulate a ball's net motion when dropped in a liquid
with a customizable density. Built with C++, SFML, CMake, GLSL.
-
Competitive Programming: solved problems on DMOJ, focusing on the
CCC contest, covering data structures, graph theory, and other algorithms. Achieved
distinction (top 25%) on CCC Senior 2026.
-
The Knight: a 2D adventure game with random world generation and a
battle and currency system, built with Python and Pygame as a Grade 11 Computer
Science CPT project.
Technical Skills
React, JavaScript, Flutter, Dart, C++, Python, Java, Git, SFML, VS Code.
Resume
Download the full resume (PDF)
Education
St. Robert Catholic High School, Thornhill, ON — International Baccalaureate
Diploma & OSSD (Sept 2023 – May 2027).
Achievements
- OAPT — 17th in Ontario (May 2026)
- CEMC Euclid — Distinction, Score of 79 (Apr 2026)
- 5 on AP Calculus BC, AP Physics 1, AP Chemistry, and AP Computer Science A (May 2025 – May 2026)
- CCC Senior — Distinction (Feb 2026)
- CEMC Canadian Senior Mathematics Contest (CSMC) — Distinction, Score of 44 (Nov 2025)
- CaYPT — Silver Medalist, 3rd place in Canada (Mar 2025)
Experience
-
NTU-60 Skeleton-Based Action Recognition Research (Mar 2026 – Present) —
Trained and evaluated deep-learning models to recognize human actions from
skeleton-motion data for Professor Lei Gao and Kai Liu from Wilfrid Laurier University.
Compared multiple graph-based architectures on the NTU RGB+D 60 dataset, tested
model-fusion methods, and wrote reports analyzing why weaker models reduced ensemble
accuracy.
-
Spirit of Math Assistant Teacher (Sep 2023 – Present) — Led
one-on-one sessions focusing on problem-solving strategies for students in Grades 8–10.
-
Ski Lakeridge Ski Instructor (Jan 2025 – Present) — Level 2 CSIA
Ski Instructor and Level 1 CASI Snowboard Instructor. Taught skiing techniques to
individuals ages 4–50 across varying skill levels.
Activities
-
St. Robert Physics Club Activity Coordinator (Sep 2025 – Present) —
Led physics lessons for 30+ students, designing and demonstrating experiments, and
mentored students for physics competitions. Incoming 2026–2027 school year president.
-
Waterloo Quantum School for Young Students (Jul 2026 – Aug 2026) —
Studying quantum superposition, entanglement, computing, and cryptography.
-
St. Robert La Silhouette Activity Coordinator (Jan 2025 – Present) —
Designed lesson plans for the French Article writing club; incoming 2026–2027 school
year vice-president.
-
St. Robert STEAM ICAC Trainer (Oct 2025 – May 2026) — Trained
students in problem-solving and innovation for the Ontario STEAM ICAC Competition.
Contact