EECS @ UC Berkeley '27 · Open to SWE roles

Hi, I'm Ziniu. I build full-stack web apps and AI tools.

I like taking a product from an empty folder to something people can use: REST APIs and databases, React frontends, browser extensions that talk to LLMs, and the tests, CI and cloud deployments that keep them working.

Projects

ContextLens

An AI assistant for any web page

A Chrome extension: select text on any site and a floating panel lets you explain, summarize or rewrite it with OpenAI or Anthropic models, with the answer streaming in token by token — no copy-pasting into a separate chat window.

Explain, Summarize and Rewrite on a Wikipedia article; answers stream in token by token.
  • Wrote an incremental Server-Sent Events parser that handles events split across network chunks; closing the panel aborts the in-flight request.
  • Rendered the panel in a closed Shadow DOM so page CSS and scripts can't touch it, and model output as text, never HTML.
  • Kept the API key in chrome.storage.local, used only by the service worker, with host permissions limited to the two model APIs.
  • 26 unit tests and a GitHub Actions pipeline (type-check, test, build) on every push; zero runtime dependencies.
  • TypeScript
  • Chrome Extension (MV3)
  • OpenAI & Anthropic APIs
  • SSE streaming
  • GitHub Actions

OnlineOrder

A food ordering web app, deployed on AWS

Browse restaurant menus, build a cart and check out. A Spring Boot REST backend with a React and Ant Design frontend, backed by PostgreSQL and running on AWS ECS Fargate.

Recorded on the AWS deployment: sign up, log in, add dishes to the cart, check out.
  • Built REST APIs for sign-up, menus, cart and checkout, layered into controllers, services and Spring Data JDBC repositories.
  • Secured endpoints with Spring Security session-based authentication and BCrypt password hashing.
  • Added Caffeine caching with per-customer eviction on cart updates; benchmarking 1,000 requests with the cache on vs. off halved median menu API latency (~1.8× sequential throughput, local database).
  • Wrote 27 JUnit 5 / Mockito tests for the service layer, including cache tests that verify @Cacheable/@CacheEvict behavior.
  • Containerized with a multi-stage Docker build; GitHub Actions CI runs backend and frontend tests and smoke-tests the running container on every push.
  • Deployed to AWS ECS Fargate behind an HTTPS load balancer with a private RDS PostgreSQL database, with one-command deploy and teardown scripts.
  • Java 21
  • Spring Boot
  • Spring Security
  • PostgreSQL
  • React
  • AWS ECS & RDS
  • Docker
  • GitHub Actions
  • JUnit & Mockito

Agent AI

Ask a PDF questions by text or voice

Upload a document and every question gets two answers: one retrieved from the PDF, and one from a live web search run by a GPT-5 agent through an MCP server. Questions can be spoken, and answers read aloud.

Questions about "Attention Is All You Need", two typed and one spoken. Waiting time is sped up, as labeled in the video.
  • Built a RAG pipeline with LangChain: PDF loading, 500-character chunking, OpenAI embeddings and an in-memory vector store supplying context to GPT-5.
  • Wrote an MCP server exposing a SerpAPI search_web tool over stdio, and a GPT-5 tool-calling agent that writes its own search queries, using the document title to resolve references like "this paper".
  • Traced intermittent timeouts to SerpAPI stalling on about a third of uncached searches and added hedged requests; RAG and MCP run in parallel with isolated failures, cutting answer time from ~15s to 6–12s.
  • Express backend for uploads and Q&A; React and Ant Design frontend with voice input and spoken answers via the Web Speech API.
  • React
  • Node.js
  • Express
  • LangChain
  • GPT-5
  • MCP
  • SerpAPI
  • Web Speech API

SocialAI

A social network where posts can start from an AI-generated image

Post photos and videos, find posts with full-text search by keyword or author, or describe a picture and generate it with an OpenAI image model before posting. A Go backend on Google Cloud with Elasticsearch and Cloud Storage, and a React frontend on AWS Amplify.

Recorded on the live deployment: generate and post an image, upload a photo and a video, search, delete posts, and get sent back to login after logging out. Waiting time is sped up.
  • Built a Go REST API on Google App Engine, with Elasticsearch on a Compute Engine VM reachable only inside the VPC, media in Google Cloud Storage, and JWT-protected routes.
  • Moved OpenAI image generation into a JWT-protected backend endpoint so the API key never reaches the browser, and migrated from the retired DALL·E 3 to the GPT Image API with the model made configurable.
  • Fixed a signup race by creating users atomically in Elasticsearch (op_type=create, refresh=wait_for): an integration test fires 10 concurrent signups and gets exactly 1 account. Passwords are hashed with bcrypt.
  • 42 Go tests (including integration tests against real Elasticsearch and a Cloud Storage emulator) and 26 Jest / React Testing Library tests, run by GitHub Actions on every push.
  • Go
  • React
  • Elasticsearch
  • Google App Engine
  • Cloud Storage
  • AWS Amplify
  • OpenAI API
  • JWT
  • GitHub Actions

Skills

Languages
Java, TypeScript, JavaScript, Go, Python, C
Backend
Spring Boot, Spring Security, Node.js, Express, Go
Frontend
React, Ant Design, Material UI, HTML/CSS, Chrome Extensions
Data & cloud
PostgreSQL, MySQL, Elasticsearch, AWS (ECS, RDS, ECR, Amplify), GCP (App Engine, Compute Engine, Cloud Storage)
Testing & tools
JUnit, Mockito, Jest, React Testing Library, Git, GitHub Actions, Docker

Education

University of California, Berkeley

B.S. Electrical Engineering & Computer Sciences

Coursework: Data Structures, Machine Structures, Algorithms, Artificial Intelligence, Computer Graphics

Expected Dec 2027

Get in touch

I'm looking for software engineering roles. The fastest way to reach me is email.