SQL • DATA ANALYSIS • DATA QUALITY
I transform messy datasets into reliable insights through SQL automation, data quality auditing, and analytics.
Skills
MS Excel, Google Sheets
MySQL, PostgreSQL, BigQuery
Power BI, Looker Studio, Metabase
SQL, C, JavaScript, Python, HTML, CSS
Projects
Excel • VBA • Data Modeling
Automated monthly summaries & category tracking with zero manual input
PHP • MySQL • MVC Architecture
Full-stack feedback platform with RBAC, analytics dashboards & audit trails
Java • OOP • Game Development
Java OOP concepts reimplemented in the browser with live leaderboard
SQL • CTE Pipelines • Data Quality
Validated 30,000+ UPCs across hierarchy, brand & coverage checks
Experience
Credentials
Coursera
LinkedIn Learning
DICT
DICT
Contact Me
Interested in collaborating or learning more about my work? Send me a message and I'll get back to you.
I'm currently open to opportunities in data analytics, reporting, and data quality automation. If you're looking for someone experienced in SQL, large dataset analysis, and workflow optimization, feel free to reach out through the contact form.
A macro-enabled Excel workbook for managing personal finances with automated tracking and visual analytics.
Built to solve a real personal finance problem — tracking income, expenses, savings, and donations in one place. VBA macros automate pivot refreshes, validation, and monthly resets.
Real transactions from March 2026:
| Date | Description | Type | Amount (₱) |
|---|---|---|---|
| Mar 1 | Monthly salary | Income | +3,600 |
| Mar 3 | Rent payment | Expense | -1,250 |
| Mar 8 | ETF dividends | Income | +82.15 |
| Mar 12 | IRA contribution | Savings | -250 |
| Mar 14 | Tax refund | Income | +520 |
| Mar 25 | Credit card payment | Expense | -500 |
VBA macro triggers on workbook open to refresh all pivot tables from the Union_Table source.
Monthly calendar highlights upcoming bills so nothing gets missed.
Compares projected vs actual spending across Essential, Non-Essential, Savings, and Tithes categories.
A full-stack PHP web system for PUP's Office of the University Registrar to collect and analyze client feedback.
CFSIS replaces a manual paper-based feedback process with a digital system featuring real-time analytics, audit logging, and role-based access control — built for production use at PUP.
Custom PHP MVC with a front-controller pattern:
// Front Controller Router $page = Security::clean($_GET['page'] ?? 'home'); switch ($page) { case 'dashboard': Auth::requireAdmin(); (new DashboardController())->index(); break; case 'feedback_list': match ($action) { 'review' => $ctrl->review(), default => $ctrl->adminIndex(), }; }
Three permission levels enforced server-side — Super Admin, Admin, Staff — with scoped module access.
KPIs, average ratings per service, date-range filtering with Chart.js bar and line charts.
Every admin action logged with timestamp, user, and details for accountability and compliance.
A feature-rich Snake game demonstrating all four Java OOP pillars through a playable, extensible game engine.
Built as a Java OOP demonstration project with 20 classes, clean game loop architecture, and separation of concerns. Every feature showcases a specific OOP concept.
/** GameEngine – Encapsulation & Polymorphism */ public class GameEngine { private final Snake snake; private final RegularFood regularFood; private final BonusFood bonusFood; private final ScoreManager scoreManager; public void tick() { snake.update(); if (snake.collidesWith(regularFood)) { snake.grow(); scoreManager.addPoints(10); } if (snake.collidesWithSelf()) state = GameState.GAME_OVER; } }
/** Snake – Inheritance & Polymorphism */ public class Snake extends GameObject implements Collidable { private LinkedList<Point> body; private SnakeTheme theme; public void setTheme(SnakeTheme t) { this.theme = t; } public boolean collidesWith(GameObject o) { return body.getFirst().equals(o.getPosition()); } }
All game state is private. Theme swappable via setTheme(), direction via setNextDir() — no raw field access.
Snake, RegularFood, BonusFood all extend GameObject, inheriting grid dimensions and the base render contract.
Game objects stored as GameObject references. Engine calls update() and render() polymorphically on all of them.
Collidable, Renderable, and Resettable interfaces define contracts that all game objects must fulfill.
A multi-stage SQL pipeline that detects and auto-categorizes customers assigned to conflicting loyalty segments.
Built to solve a real CRM data quality problem — thousands of customer accounts flagged for inconsistent loyalty segment assignments. This SQL script automatically detects each conflict and routes customers to one of five resolution categories, so analysts only review cases that genuinely need human judgment.
This workflow was built and used in production at a national retail data company processing 100,000+ products across thousands of brands.
Before this script, analysts manually reviewed every flagged brand. After deployment, 83% of brands are auto-categorized — only genuinely ambiguous cases require human review.
The rule engine is fully parameterized — swap in the target brand list and re-run. The hierarchy rules table can be updated without touching the query logic.
What previously took analysts 2–3 days of spreadsheet work now executes in a single script run, producing a fully categorized output table.
Each stage uses a CTE that excludes brands already resolved by earlier stages — brands "fall through" the pipeline until categorized or flagged for review.
Hierarchy rule sets are defined as typed arrays directly in the SQL, eliminating the need for separate reference tables while keeping rules readable and editable.
Indexes are built on every join column before the multi-stage CTE chain runs, turning what would be sequential full-table scans into indexed lookups.
Optional flag columns (private label flags, channel codes) use IS DISTINCT FROM instead of != to handle NULLs correctly without COALESCE wrappers on every predicate.