Free Time
Free Time
Imports personal google calendars to find mutual free time between friends. Create and send friends invites to events scheduled in FreeTime.
Imports personal google calendars to find mutual free time between friends. Create and send friends invites to events scheduled in FreeTime.
Tech Stack
Tech Stack
- JavaScript
- TypeScript
- Next.js
- Firebase Auth
- Firestore (DB)
- Chakra UI
- Google Calendar API
Personal Responsibilities
Personal Responsibilities
- Developed RESTful API routes with NextJS Routing to retrieve, transform, and connect data from Google Calendar API with front-end components.
- Configured and connected Firestore DB with NextJS and Google Firebase to have a flexible database to store important user data.
- Created helper methods and constructed queries to either get or insert user data in the Firestore database.
Free Time Calendar View
Free Time Calendar View
Add Event Modal
Add Event Modal
Free Time Video Breakdown
Free Time Video Breakdown
Reviews_Postgres
Reviews_Postgres
Database system deployed on AWS EC2 instance and tested using Loader.io.
Database system deployed on AWS EC2 instance and tested using Loader.io.
System Design Requirements
System Design Requirements
☑ Throughput on a single EC2 instance: 100 RPS
☑ Throughput on a single EC2 instance: 100 RPS
☑ Latency Goal: < 2,000 ms under load testing
☑ Latency Goal: < 2,000 ms under load testing
☑ Error Rate Goal: < 1% under load testing
☑ Error Rate Goal: < 1% under load testing
Tech Stack
Tech Stack
- JavaScript
- PostgreSQL
- Node.js
- Express.js
- AMS:ECS
- K6
- Loader.io
Personal Responsibilities
Personal Responsibilities
- Extracted, Loaded, and Transformed (ELT) .csv files with over 10 million rows of data using pgAdmin to populate a PostgreSQL database.
- Constructed database schemas using SQL Designer and pgAdmin in order to structure the data tables in a format compatible with existing front-end legacy code.
- Reduced latency on a single EC2 micro instance that handled 1,000 RPS with an avg resp time of 3ms and 0.0% err rate by analyzing bottlenecks with K6/Loader.io, creating table indexes, and refactoring nested filter clauses.
K6 Local Stress Test
K6 Local Stress Test
Initial testing of PostgreSQL database was promising with throughput under the required 2,000 RPS with 100 mock clients.
Loader.io Server Stress Test (100 Clients)
Loader.io Server Stress Test (100 Clients)
After refactoring some queries and deploying to an AWS EC2 instance, the throughput on the server performed very well, with an average RPS around 3-4 ms with 100 mock clients.
Loader.io Server Stress Test (1,000 Clients)
Loader.io Server Stress Test (1,000 Clients)
The database also performed well with 1,000 mock clients, with an average RPS of 3-4 ms.
Loader.io Server Stress Test (1,500 Clients)
Loader.io Server Stress Test (1,500 Clients)
Even with 1,500 mock clients, the database performed well. A 1,650 ms average RPS does not provide the best user experience. Next steps would be to add a load balancer that scales horizontally.
Katana
Katana
Front-end project that takes information from an API and displays it in an e-commerce format.
Front-end project that takes information from an API and displays it in an e-commerce format.
Tech Stack
Tech Stack
- JavaScript
- React
- Styled Components
- CSS
- Node.js
- Express.js
- Jest
Personal Responsibilities
Personal Responsibilities
- Managed API redirection using Express wildcard server-side routing with React/Axios client-side routing ensuring secure RESTful API routes, authenticated browsing, and enhanced code readability.
- Refactored Axios request timing to reduce data retrieval inconsistencies, improving from 66% to 95% success rate.
- Architected the React front-end service of Q&A with pop-up modals, conditional rendering, and styled-components to provide a clean, responsive experience.
Katana E-Commerce Video Breakdown
Katana E-Commerce Video Breakdown