Built through persistence and passion

Every project represents countless hours of learning, iteration, and growth — transforming obstacles into opportunities through persistent effort.

Skills

7+
Bash
CSS/SCSS
Documentation
ExpressJS
Git
HTML5
JavaScript
Linux
NodeJS
Project Owner
Team Player
TypeScript
XML
6+
Advertisement Technology (AdTech)
Agile Development
CI/CD Pipeline
Confluence
Design Architect
Docker
Jira
REST
SQL/MySQL
5+
Aurora (AWS)
Database Design
Doubleclick for Publisher (DFP)
Google Ad Manager (GAM)
Plotly.js
Prebid.js
Team Leader
4+
CloudFront (AWS)
Concurrent Projects
EC2 (AWS)
S3 (AWS)
3+
D3.js
Network Protocol Pipeline strategy
Next.js
2+
Angular JS / Angular 2.0
WCAG 1.0 Compliant Design
<2
AppScript (Google)
Firebase
Go Lang
Heroku
Lambda (AWS)
NoSQL

Projects

Custom MVC

Owned — 2020 to 2024
AdBridg

Why do it at all?

Developing a lightweight, dependency-agnostic application to complement the existing centralized API layer made sense with user experience being streamlined across browsers out of the box.
Building a custom frontend avoided unnecessary framework complexity and bloat, providing granular control over feature development.
Some features required ground-up implementation but it may prove more time and cost-effective than introducing a heavy framework with unused functionality.

Implementation — The MVC

Architected MVC pattern where Views are driven by model data, Models encapsulate application state, and Controllers define Model behavior by prescribing transformation logic that shapes how data flows and changes — whether processing incoming API responses or formatting outgoing requests.
Large datasets can be partitioned into modular, manageable Models and determine their initialization strategy: sequential loading when dependencies exist or asynchronous loading when conditions allow parallel processing. Models maintain inter-connectivity, and Views are built as reusable modular components.
Each View can coordinate multiple Models to update page state asynchronously, with support for sequential Model initialization when inter-Model dependencies are required.
Deployed global caching strategy utilizing local storage, session storage, cookies, and instantiated objects to minimize network requests and optimize data retrieval performance.

Iterations

Migrated and rebuilt the analytics application with a modern interface and including a centralized analytics dashboard powered by versatile custom components that utilize various visualization tools from the Plotly.js library with additional features.

Challenges

Single-developer ownership slowed maintenance and debugging as issues had to be addressed between other projects, delaying resolution while developing stronger multi-project management skills.
Creating components from scratch allowed precise customization but required significant testing investment and accumulated technical debt as the application grew and components became more feature-heavy.

CI/CD Pipeline

Owned — 2020 to 2024
AdBridg

Design Concept

Allow users to push deployments on the fly with basic tests (related to bidder adapters) for both production and staged/test domains.
Show current and past deployment metrics including status of deployment.
Integrate git to deployments for tracking and easier rollbacks (if needed).

Pre-existing applications

A proprietary Ad Engine that generates customized applications for publisher platforms, optimizing bidding life-cycle to ensure optimal value delivery for each configured line item.

Implementation

Created a deployment dashboard that displays all previous deployments with their status, shows undeployed changes for the current build, and provides deployment options for both production and testing environments. Required users to document changes before deployment, with descriptions automatically used as Git commit messages and each deployment tracked in its own dedicated branch for better change management.
Engineered a rigorous unit testing suite to validate each stage of the application lifecycle, built a centralized logging system to facilitate debugging and monitoring, and containerized the framework with Docker for horizontal scalability.
Architected a Redis based queuing system in the RESTful API layer — which serves as the central data interface for the SQL database, AWS S3 storage, and external applications; then modified the Docker container to function as a worker consuming tasks from the Redis queue.
The Redis worker executes a bash script that compiles deployment changes and runs the testing suite; upon test success, it commits and pushes changes via Git, exiting with appropriate success or error codes based on test results.

Incremental upgrades

Deployment status was now pushed to dedicated Slack channel for better tracking by admins.
In the latest Hub App release built on Next.js, integrated Socket.IO to deliver real-time status updates to users, complemented by automated email notifications for all stakeholders.

Challenges

The rudimentary queuing system lacked the ability to cancel queued deployments, occasionally requiring multiple deployments to correct issues — creating unnecessary noise in the deployment pipeline.
Git's synchronous commit model prevents concurrent modifications, causing merge conflicts when multiple deployments, across many branches, modify the same lines of code.

Optimized Data Aggregation Engine

Refactored — 2022
AdBridg

Problem to solve

Existing roll-up time bleeds to crashes or opens too many database connections causing lag on other operations resulting in applications crashing due to timeouts. Required manual restarts of VMs via EC2 dashboard or restart of docker containers depending on crash level.
Too many joins, nested queries and/or large data aggregations were lagging the system.

Solutions

Created new intermediate aggregation tables to breakdown large datasets into related chunks, freeing processing time at the cost of space.

Ads.txt Validator

Owned — 2022 to 2023
AdBridg

Design Concept

To be able to crawl any publisher's ads.txt file — provided the URL — and determine if all IAB guidelines are maintained and cross reference if all the listed SSPs list the mentioned domains.
Structured validation output into three severity levels — errors, warnings, and passed — with occurrence counts for each category. Provided expandable detailed explanations for each issue, supplemented with tool-tips linking to applicable IAB specification rules.

Implementation

Architected a modular crawler that fetches ads.txt files from specified domains and recursively retrieves referenced ads.txt files per IAB guidelines. The modular design extends functionality to retrieve sellers.json files from associated SSPs automatically.
Built automated cron jobs that periodically update and cache frequently-accessed sellers.json files, significantly reducing validation processing overhead. Implemented user preference controls for fresh data retrieval versus cached file usage, with cache timestamps for informed decision-making.
Designed a hierarchical information architecture with layered UI components that progressively reveal nested datasets, balancing simplicity with comprehensive data access. Refined the interface through multiple design iterations to optimize cognitive load and user comprehension.

Change Visualization UI

Owned — 2020 to 2024
AdBridg

Design Concept

Develop a visual change tracking system that enables users to quickly identify and understand modifications across the application. The interface provides clear visual indicators for three change types — additions, deletions, and edits — with contextual references linking each change to its specific location within the application.
Modeled the visualization pattern after Git's diff functionality to leverage familiar developer paradigms and easy recognition.

Implementation

Created a summary dashboard displaying total change count with categorical breakdowns for each change type.
Implemented a color-coded change visualization using Git diff's standard color scheme — green for additions, red for deletions, yellow for modifications — to ensure immediate visual comprehension.
Each change entry features an expandable detail panel that presents side-by-side comparisons between the current undeployed and previous deployed versions, accompanied by direct navigation links to the modified application sections for contextual review.

Google Sheets API Integration

Owned — 2022 to 2024
AdBridg

Design Concept

To design a Google Sheets integration that bridges the existing API with a familiar spreadsheet interface, enabling non-technical users to manage publisher line items without direct database access.
The system should be able to validate data entries in real-time by querying the database for reference data such as publisher IDs, campaign details, or other relational information.
Users should be able to perform standard CRUD operations (create, read, update, delete) within the spreadsheet, with visual color-coding mirroring the Git diff pattern — green for additions, yellow for modifications, and red for deletions — providing immediate feedback on pending changes before database commits.

Implementation

Implemented a security layer by designating the first sheet as an authentication gateway, requiring users to log in before accessing line item data. Upon successful authentication, users select a specific deployment environment to work within, ensuring changes are isolated to the appropriate context.
To accommodate Google AppsScript's API rate limits in the free tier (which restricts daily outgoing requests), replaced auto-fill on paste with a manual trigger button. This design decision significantly reduced API calls, preventing quota exhaustion while maintaining functionality. The button-triggered approach batches validation, optimizing API usage while preserving data integrity.

Challenges

Initial real-time validation proved inefficient as each row change triggered individual API requests, creating performance bottlenecks and slow user experience. Migrated validation logic to operate at the page level with validation checks performed locally within AppsScript rather than making additional API requests.
The validation architectural shift eliminated redundant API calls by caching reference data locally, reduced server load, improved response times dramatically, and provided a smoother user experience while staying within Apps Script's request limitations.

Spreadsheet-Style Editor

Owned — 2020 to 2024
AdBridg

Design Concept

Design an interactive spreadsheet-style table interface with seamless toggling between view and edit modes, enabling users to work efficiently without leaving the table context.
To implement keyboard shortcuts to traverse within the table context, providing a more spreadsheet like user experience.

Implementation

Developed a modular, reusable table component that replicates spreadsheet functionality with bidirectional state management for view and edit modes.
Implemented keyboard navigation patterns familiar to spreadsheet users: Enter and Shift+Enter for vertical row navigation, and Tab and Shift+Tab for horizontal cell traversal, ensuring a fluid, mouse-free workflow for power users accustomed to traditional spreadsheet applications.
Integrated intelligent column sorting that responds to header interactions, automatically toggling between ascending and descending order based on user clicks — mirroring pivot table behavior for intuitive data organization.
Built a robust multi-row selection system with context-sensitive action menus, allowing bulk operations tailored to each table's specific use case.
Engineered a comprehensive cell type library supporting diverse input formats including JSON objects, radio buttons, single-select drop-downs, multi-select drop-downs, date pickers, number inputs, rich text editors, and custom validators, providing flexibility to handle virtually any data structure or user input requirement.