Contributing features and bug fixes to the department's in-house project management tool, used daily by faculty and hundreds of students.
hi, I'm
adni onoh.
Distributed systems engineer and full-stack web developer. Currently interning at a healthtech startup writing software that's helping people track and take care of their mental health. I am also maintaining and adding features to the University at Buffalo CSE department's project management tool. (see Highlights for my best work ↓)
// in a nutshell
Open to Learn
For the last four years I've focused on systems engineering (more recently distributed systems in particular) and web development, alongside a concentration in communication.
In this time, I've gotten much better understanding ideas/tasks from a software perspective enough to implement them, without losing my ability to communicate effectively with non-technical people on the same topics. I like to think of it as being bilingual! (most likely cope because I have been unsuccessful at learning any languages other than English)
// status: open to new-grad SWE roles starting fall 2026
Working at a fast-paced startup with an agile team building features to equip people with continuous mental health tools that help before, during, and after a session.
(Nara Therapy - Production Features in the highlights below ↓)
// daily use
- JavaScript
- Python
- Go
- C
- HTML & CSS
- Node.js & Express & EJS
- Git/GitHub
- Figma
// comfortable with
- TypeScript
- React
- MongoDB
- MySQL
- PostgreSQL
- jQuery
// familiar with
- Flask
- OCaml
- PHP
- Scala
- Java
- R
// practices
- Scrum/Agile
- Shell scripting
- Debugging
- Code review
transition, transform, and @keyframes. not a claim of skill level. for an honest proficiency picture, see the tags above.
- Extended the card attachment system to support URL links alongside file uploads, and added duplicate attachment-name prevention.
// private repo — access granted by department
On reliability: The Gateway and Health Node are single points of failure in this basic setup. The real-world fix is redundancy; multiple Gateways with instant failover, and a consensus-based Health Node cluster that votes on a leader (directly applying what I learned from the Raft project ↓). Future work will include timeouts and retries, circuit breakers for repeatedly-failing downstreams, and a database fallback so the Gateway keeps running even when MongoDB is down.
Repo structure: /api-gateway · /health-node · /invoice-service · /performance-monitor
The harder part is trust. It's built around a full claim → counterclaim → dispute resolution lifecycle, where ownership is settled by accountability rather than secrecy: every claim is tied to a real UBIT identity, descriptions stay public so claiming is low-friction, and a listing stays open to counterclaims for its whole lifecycle (even after pickup) to deter false claims. Staff resolve contested items by awarding to one party from a department-scoped dashboard.
- Role-based access control (student / department staff / admin) with route-level and action-level guards
- Relational data model for the item lifecycle: available → claimed → disputed → archived, on a per-listing clock
- Server-side rendering and server actions throughout, with a seeded Postgres database for realistic demo data
// private repo — source shared on request
I added a way to filter AI-chat sessions by client rating so low-rated interactions are noticed immediately, which lets a provider catch a struggling client before the next session. I also flagged high-risk journal entries alongside other risk indicators, displayed client feedback on the provider detail page, and helped the AI chatbot reference user journals, mood check-ins, and gratitude logs to tailor conversations to the user.
Plan selection and a default session count on org creation let the dashboard handle both billing models (bulk and pay-per-invite) without manual input. A required organization-type field captures what kind of org is being onboarded, and minimum seats with an adjustable annual fee set baseline billing automatically. I also gated dashboard metrics behind a user threshold so admins don't see misleading numbers before there's real data, and built an in-context feedback popup that centralizes admin feedback into the main table.
Contact-date tracking shows when an org first reached out, helping the team prioritize warm leads. Deletion controls let admins clean up duplicate or accidental org entries instead of just rejecting them. And a user-type column on the feedback table tags every submission as coming from a member, org admin, or provider, so feedback can actually be routed and patterned instead of treated as one bucket.
// process: all work follows Figma designs and team QA criteria.
// note: the four highlighted projects above sit outside this filter. OOP principles and Git/GitHub version control applied across all projects.
- Implemented leader election with election timeouts and term-based voting
- Log replication with consistency checks across follower nodes
- Recovery logic that handles partial state loss on restart
// private repo
- Designed k-bucket structure for efficient node tracking
- Implemented RPC-based node communication for iterative lookups
- Content-addressing and fault-tolerant data storage across the network
// private repo
- TCP sockets for cross-network process communication
- Go channels for in-process communication and coordination
- Protobuf protocol buffers for data serialization between processes
// private repo
- Thread-safe allocation, freeing, and reallocation under contention
- Optimized for low fragmentation and reuse of freed blocks
// private repo
- HTML injection prevention, salted password hashing, XSRF & auth tokens
- Direct peer-to-peer connections via WebSockets so video chat keeps working through server crashes
- Secure file uploads with content sanitization and validation
- Comprehensive form validation and error handling
// private repo
- Designed key features: multiple resume uploads with automatic resume display, multi-page resume view, resume filters, ad slots, AI interview interface
- Implemented real-time multiple resume uploads and integrated a feedback system with automated email routing
// private repo
There are many things to consider when creating anything. Below are the practices that shaped the building of this website
// process Somewhat Agile
I did my best to put the skills I learned to practice without being too stiff considering that this is a solo project
- Iterative — I shipped features in small, reviewable slices (content fixes → layout → projects → polish). No one giant rewrite.
- Feedback loops — most features went through a "build, review, refine" pass before being kept. I was able to get feedback from some faculty and friends along the way (and some usability testing).
- Coursework — used agile/scrum practice from UB's Software Engineering Concepts course
// a11y Making Accessibility a habit
Informed by UB's Applied Human-Computer Interaction and Interface Design course. The site meets AA contrast site-wide; the highlights section's accents are a deliberate aesthetic choice.
- Keyboard navigable — try Tab through the page; every interactive element is reachable and has a visible focus ring. / jumps straight to the command input.
- Semantic HTML — proper landmarks (
<nav>,<main>,<section>,<footer>), heading hierarchy, ARIA labels on icon-only controls. - Reduced motion — if your OS has "reduce motion" enabled, the section fade-ins, status pulses, and shimmer effects shorten or disable automatically.
- Contrast & legibility — both themes meet WCAG AA contrast for body text. Skip link at the top of the DOM for screen-reader users.