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
Experience
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.