I am a Computer Engineering student at the University of Michigan with a passion for building reliable systems. My technical interests lie at the intersection of robotics, software engineering, and machine learning. Driven by a hands-on approach to engineering, my experience ranges from hardware prototyping and computer-aided design to application development and programming. Beyond the classroom, I am deeply involved in engineering leadership, academic mentorship, and community-building initiatives on campus. I thrive in collaborative environments where complex problems require creative solutions. When I’m not diving into code or engineering design, you can usually find me staying active on the basketball court, exploring nature, or watching movies.
University of Michigan Computer Engineering Ann Arbor, MI Robotics & ML
Tech Stack
The languages, tools, and disciplines I reach for when building things.
A headboard that prevents pillows from falling through gap in dorm beds and a few other useful features
I worked with a group of other introductory engineering students to create a solution to a widespread problem in our school. We first collected data from students, went through the design process to generate
many prototypes using Ansys Discovery, and then built the prototype in the woodworking lab. The following document is the final report for the headboard that contains all of the details of the planning, construction, and testing of
the headboard
Can't see the document preview? Device screen too small?
A full-stack multi-tenant accounting SaaS built for accounting firms
NetOpBooks
NetOpBooks is a production accounting platform I built and continue to run. Every firm that signs up gets an isolated workspace at its own subdomain, with full double-entry bookkeeping, payroll, bank feeds, and AI-assisted transaction categorization behind it.
The accounting core is a real double-entry engine — chart of accounts, general ledger, accounts payable and receivable, purchase orders with line-item receiving, fixed assets with depreciation schedules, and project and class tracking — feeding P&L, balance sheet, cash flow, AR/AP aging, and budget-vs-actual reports.
Bank feeds run through Plaid against 12,000+ institutions, with a three-tab review workflow, automatic matching of transactions against open bills, and a background scheduler that syncs every tenant on a six-hour cycle. Incoming transactions are categorized by the Anthropic Claude API, which drafts the account assignment for a human to confirm rather than posting blind.
The part I find most interesting is the tenancy model: rather than a shared table with a tenant ID column, each firm gets a physically separate SQLite database file. A middleware layer resolves the subdomain on every request and opens the matching database, so a query bug in one tenant's context has no path to another firm's books. JWTs embed the issuing tenant's slug as a claim, and cross-tenant token reuse is rejected at the middleware layer. On top of that sit TOTP two-factor auth, CSRF tokens on every mutating endpoint, per-tenant rate limiting, and an audit log recording the actor, timestamp, and changed values for every write.
Firms onboard themselves through Stripe checkout with subscription tiers and webhook-driven billing state, and the whole thing runs on PM2 behind nginx on AWS EC2.
Built With
Node.jsExpressSQLiteVanilla JS SPAPlaid APIAnthropic Claude APIStripeJWT & CSRFTOTP 2FAnginxPM2AWS EC2Cloudflare