Full-stack engineering, data visualization, and ML

Projects

Selected builds with impact metrics, architecture notes, and case studies. Expand any project for technical depth.

TreeReq

Deployed prerequisite-tree visualizer used by 10+ UCLA students across 100+ pathways

TreeReq

Built and deployed an interactive prerequisite-tree visualizer for UCLA students. Modeled course dependencies as interactive D3.js graphs with clickable nodes, descriptions, and prereq chains across 100+ UCLA majors/minors.

  • Built and deployed interactive prereq-tree visualizer for 10+ UCLA students across 100+ UCLA majors/minors
  • Modeled course dependencies as interactive D3.js graphs with clickable nodes, descriptions, and prereq chains
  • Developed 5+ React/FastAPI flows for major search, profiles, requirement views, and grade-difficulty data
ReactTypeScriptViteD3.jsFastAPIMongoDBFirebase Auth
View case study

Problem

UCLA students struggle to understand prerequisite chains across hundreds of majors and minors. Course catalog data is scattered and hard to visualize as a dependency graph.

My role

Full-stack engineer — scraping pipeline, database schema, API design, and D3 visualization layer

Users

10+ UCLA students planning courses across 100+ major and minor pathways

Architecture

Catalog scraper → validation/deduplication → MongoDB course graph schema → FastAPI endpoints → React search/profile flows → D3 prerequisite graph

Testing & validation

Manual QA across major/minor pathways, deduplication checks on 1,000+ records, and user testing with 10+ students

Deployment

Live at treereq.com — FastAPI backend with MongoDB; React/Vite frontend with Firebase Auth

What I'd improve next

Add live catalog sync, automated scraper tests, and accessibility improvements for keyboard graph navigation

Technical challenges

  • Normalizing inconsistent catalog HTML into reliable course and prereq records
  • Rendering large prerequisite graphs without overwhelming the UI
  • Keeping scraped data in sync as UCLA updates course listings

Tradeoffs

  • Chose MongoDB document graphs over a relational schema for flexible prereq nesting
  • Used D3 for graph control at the cost of more custom interaction code vs. an off-the-shelf chart library
  • Prioritized read-heavy API performance over real-time catalog sync

Full-stack academic planning platform with AI-powered scheduling and Redis-cached APIs

Study-Strata

Full-stack platform using AI and optimization algorithms to generate personalized course schedules and degree roadmaps for students. Built React/TypeScript frontend with FastAPI backend, PostgreSQL, Redis caching, and Docker deployment.

  • Developed a full-stack academic planning platform supporting 100+ simulated student profiles
  • Engineered backend services and reduced API latency by 40% using Redis caching and async processing
  • Built analytical scheduling and advisor features to optimize course planning and improve user efficiency
ReactTypeScriptFastAPIPostgreSQLRedisDockerSupabase
View case study

Problem

Students need personalized course schedules and degree roadmaps that account for prerequisites, preferences, and graduation timelines — not just static catalog browsing.

My role

Full-stack developer — frontend UI, FastAPI services, database design, and AI scheduling integration

Users

Students planning multi-semester course schedules and tracking degree progress

Architecture

React/Vite SPA → FastAPI REST API → PostgreSQL/Supabase → Redis cache layer → OpenAI scheduling engine

Testing & validation

Tested across 100+ simulated student profiles; measured API latency improvements with Redis caching

Deployment

Live demo at study-strata.vercel.app; Dockerized frontend and backend with Supabase/PostgreSQL

What I'd improve next

Expand advisor dashboard features, add automated degree-audit integration, and improve schedule explainability

Technical challenges

  • Caching API responses without serving stale schedule recommendations
  • Integrating AI-generated schedules with hard prerequisite constraints
  • Building responsive advisor workflows that scale across student profiles

Tradeoffs

  • Redis caching cut API latency 40% but added cache invalidation complexity
  • Docker simplified deployment at the cost of more local dev setup
  • AI scheduling improved personalization but required validation against degree rules

ML portfolio analysis platform comparing neural network and ensemble forecasting models

MicroInvest

Developed an AI investment platform using TensorFlow and scikit-learn with neural network and ensemble models. Improved portfolio recommendation accuracy by 18% using 15+ financial indicators and 4 forecasting models.

  • Developed AI investment platform using TensorFlow and scikit-learn with neural network and ensemble models
  • Improved portfolio recommendation accuracy by 18% using 15+ financial indicators and 4 forecasting models
  • Built Streamlit dashboards for portfolio risk and performance visualization
PythonTensorFlowscikit-learnPandasStreamlit
View case study

Problem

Beginner investors lack accessible tools to compare how different ML models forecast portfolio risk and return tradeoffs.

My role

Solo builder — data pipeline, model training, and Streamlit dashboard

Users

Students exploring portfolio analysis concepts and model comparison

Architecture

Financial indicator dataset → scikit-learn/TensorFlow model training → evaluation metrics → Streamlit dashboard with visualizations

Testing & validation

Benchmarked 4 forecasting models on held-out data; measured 18% improvement in recommendation accuracy vs. baseline

Deployment

Streamlit app for interactive portfolio exploration

What I'd improve next

Add walk-forward validation, clearer disclaimers, and backtesting documentation for reproducibility

Technical challenges

  • Comparing 4 forecasting model types fairly across 15+ financial indicators
  • Balancing model complexity with interpretability for educational use
  • Presenting risk metrics clearly in interactive dashboards

Tradeoffs

  • Streamlit enabled fast dashboard iteration vs. a production web app
  • Ensemble models improved accuracy but reduced transparency vs. a single interpretable model
  • Used held-out evaluation slices rather than live-trading validation

See More on GitHub