Skip to content
View renrenmimi's full-sized avatar

Highlights

  • Pro

Block or report renrenmimi

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
renrenmimi/README.md
Weiren Feng — frontend / full-stack engineer, open to new-grad through mid-level roles in the SF Bay Area or Irvine, CA.

Open portfolio Open LinkedIn Send email

I build web apps end to end, and I turn what I learn into something you can click.

That habit turned into a set of interactive course sites. When I could not find a good explanation of how an AI agent works, I built one that shows the messages array growing in real time. Same for data structures, algorithms, Redis, TypeScript, and APIs.

Open to frontend / full-stack roles — new grad through mid-level — in the SF Bay Area or Irvine, CA.


Things I've shipped

PetNote · pet-centric social app, multi-owner by design

Two people can co-manage one pet profile, which is where most of the difficulty is. Account deletion writes a TTL tombstone, so a second open tab cannot bring the profile back. Counters carry a counted flag and cannot go below zero. Invite codes are re-validated inside the transaction, so two people redeeming the same code cannot both succeed.

React 19 Firebase Cloud Functions Tailwind 4 — 200+ commits · live · repo

ToneDown · a live tone coach for heated conversations

Acoustic and semantic signals combined into one score every two seconds. The reducer never calls Date.now(); every transition reads the timestamp off a TICK event instead, which is what lets the demo replay from a script and keeps its 100+ tests deterministic. Falls back from Groq Whisper to Web Speech to raw loudness, so it still works with the network off.

React TypeScript Groq Vitest Playwright · demo · repo

GreenLane · immigration timeline tracker

Ten years of visa bulletin history, wait-time estimates, and email alerts when a category moves. The data comes from 130 US visa bulletins and 424 Canadian Express Entry draws, refreshed by a scheduled job every morning.

Next.js 15 SSR Python GitHub Actions · live · repo

KOVA Flooring · brand site and dealer portal, shipped for a client

The public brand site is statically exported, so there is no server to run and Firebase never reaches the public bundle. Behind a login sits a dealer portal where each dealer sees pricing for their own tier next to live inventory, plus an admin console for editing price per product per tier and importing stock by CSV.

Next.js 15 Static Export Firebase Auth Firestore Cloudflare · live

iCanDoIt · a native macOS day planner

Attach a reward to each task; clear them all and the app throws confetti. Built with SwiftUI and SwiftData as a plain Swift package. Two hidden flags do the testing: --snapshot renders every screen offscreen to PNG without asking for screen-recording permission, and --selftest asserts what screenshots can't prove, like drag-and-drop placement and schema backfill.

SwiftUI SwiftData · repo

Learning tools I built

Interactive courses and practice tools, with progress kept in the browser where applicable.

DataData 14 chapters of data structures: memory diagram first, then animation, then Java/Python/JS side by side
AlgoAlgo 13 chapters of algorithms: decision trees, DP tables and binary-search intervals replayed step by step
APIer HTTP → REST → GraphQL, with exercises that call live public APIs
TSer 12 chapters of TypeScript, with compiler errors quoted from actual tsc output
RedisVisual Redis data structures, caching patterns, operations and review questions in seven stops
DrillLab four practice tracks that gradually remove scaffolding, from review questions to timed builds
AgentLab a visual introduction to message history, tool calls and the agent loop
SwiftLab takes iCanDoIt apart and rebuilds it, starting from one line of Hello world

AgentLab's responses are recorded in lib/scenario.ts, so it runs without an API key. Each wrong answer in its exercises comes with an explanation of why it is wrong.

Games and experiments

Renren Across Tabs — open multiple browser rooms and send a cartoon Renren from one tab to another. No account, no backend — just browser tabs talking.

Avatar Dash — a small platformer starring the dog in my avatar, with variable-height jumps, coyote time, and buffered input.

Also: a Dota-flavored snake that calls your killstreaks, a neon Pong you steer by hovering, tank battles, a fluid sim, an n-body gravity sandbox, and a handful of cognitive drills. Each is a single HTML file — open it in a browser.


Reach me

Portfolio · LinkedIn · Email


© 2026 Weiren Feng. All rights reserved. Published for reading and portfolio purposes; not licensed for reuse, modification, or redistribution.

Pinned Loading

  1. PetNote PetNote Public

    Pet social app with shared profiles, posts, place reviews, check-ins, meetups, and a Firebase backend

    TypeScript

  2. ToneDown ToneDown Public

    Bilingual tone-coaching app with acoustic feedback, language analysis, calmer rewrites, and local session history

    TypeScript

  3. DataData DataData Public

    Interactive data structures course for beginners — memory diagrams, frame-by-frame visualizations, and Java/Python/JS side by side

    TypeScript

  4. AlgoAlgo AlgoAlgo Public

    Interactive algorithms course for beginners — decision trees, DP tables and shrinking intervals replayed frame by frame

    TypeScript

  5. greenlane greenlane Public

    Immigration timeline tracker — US green card categories and Canada Express Entry, with ten years of history and email alerts

    TypeScript 1

  6. iCanDoIt iCanDoIt Public

    A daily planner for macOS — plan your day, attach a reward to each task, celebrate Perfect Days. SwiftUI and SwiftData.

    Swift