My Projects

Project Purpose: No existing system at UPS provides full visibility into Premier inbound flight contents. Previously, this information had to be gathered through several manual processes. This tool automates the workflow and removes the need for manual inbound distribution creation.

Implementation Overview: I created this tool using VBA Automation in excel, combined with advanced formulas to automate data import, analysis and reporting. 

Organizational Impact: This tool improves operational visibility by automatically compiling CPV (Critical Package Visibility) data to help the Premier Service Team anticipate shipments and plan resources more effectively.

ROI & Measurable Impact

From August 1 through October 17, 2025, this tool provided visibility on 283 contingent Premier shipments. This allowed for 228 interceptions, directly improving on-time-by-day deliveries. 

Output User Interface

Below is the output that this automated tool creates. It compiles and organizes the most important information (ie Tracking Number, Premier Categorization, Shipper Name, Inbound Flight Number, Inbound Airport Gateway, Inbound Bag (if applicable), Inbound ULD, Package Weight, Outbound Airport Gateway, Outbound Gateway Hot/Sort Down Categorization, ‘Hot/Sort Down – Premier Categorization’, and Weight Class.)

				
					Sub Pull_CPV_and_OCAT()
    Dim folderPath As String
    Dim fileSystem As Object
    Dim folder As Object
    Dim file As Object
    Dim latestCPVFile As String, latestOCATFile As String
    Dim latestCPVDate As Date, latestOCATDate As Date
    Dim fileDate As Date
    Dim sourceWB As Workbook, targetWB As Workbook, exportWB As Workbook
    Dim sourceWS As Worksheet, targetWS As Worksheet, distroWS As Worksheet
    Dim exportWS As Worksheet
    Dim targetWBName As String
    Dim lastRow As Long
    folderPath = Environ("USERPROFILE") & "\Downloads\"
    targetWBName = "new.distro.maker.xlsm"
    Set fileSystem = CreateObject("Scripting.FileSystemObject")
    Set folder = fileSystem.GetFolder(folderPath)
    latestCPVDate = #1/1/1900#
    latestOCATDate = #1/1/1900#
    'R1-------- Loop files in downloads folder-------'
    For Each file In folder.Files
        fileDate = file.DateLastModified
        If file.Name Like "Package_Details_Export*" Then
            If fileDate > latestCPVDate Then
                latestCPVDate = fileDate
               latestCPVFile = file.Name
            End If
        ElseIf file.Name Like "TrackingExport*" Then
            If fileDate > latestOCATDate Then
                latestOCATDate = fileDate
                latestOCATFile = file.Name
            End If
        End If
    Next file
    'R2---------------open target workbook-----------------'
    On Error Resume Next
    Set targetWB = Workbooks(targetWBName)
    On Error GoTo 0
    If targetWB Is Nothing Then
        MsgBox "Workbook '" & targetWBName & "' is not open. Please open it and try again.", vbExclamation
        Exit Sub
    End If
    Application.ScreenUpdating = False
    'R3---------------import cpv download---------------'
    If latestCPVFile <> "" Then
        Set sourceWB = Workbooks.Open(folderPath & latestCPVFile)
        Set sourceWS = sourceWB.Sheets(1)
        Set targetWS = targetWB.Sheets("IMPORTED FROM CPV")
        targetWS.Cells.Clear
        sourceWS.UsedRange.Copy Destination:=targetWS.Range("A1")
        sourceWB.Close SaveChanges:=False
        MsgBox "Data imported to 'IMPORTED FROM CPV' successfully.", vbInformation
    Else

        MsgBox "No 'Package_Details_Export*' file found in Downloads.", vbExclamation
    End If
     'R8-2f--------- Classify -----------'

            valN = Trim(UCase(wsCheck.Cells(i, "N").Value))
            If valN = "FROM INBOUND FEEDER" Then
                wsCheck.Cells(i, "O").Value = "Inbound PW Feeder"
            Else
                wsCheck.Cells(i, "O").ClearContents
            End If
            valP = Trim(UCase(wsCheck.Cells(i, "P").Value))
            Select Case True
                Case valP Like "*ARRIVED*" Or valP Like "*BLOCKED-IN*" Or _

                     valP Like "*CHECKED-IN*" Or valP Like "*SPOTTED*"
                    wsCheck.Cells(i, "Q").Value = "At SDF, Not Sorting"
                Case valP Like "*FORECASTED*"
                    wsCheck.Cells(i, "Q").Value = "Not at SDF"
                Case valP Like "*SORTING*"
                    wsCheck.Cells(i, "Q").Value = "Sorting, Not Processed"
                Case valP Like "*LOADED*" Or valP Like "*ON-AIRCRAFT*" Or valP Like "*DEPARTED*"
                    wsCheck.Cells(i, "Q").Value = "In Outbound Configuration, Processed"
                Case Else
                    wsCheck.Cells(i, "Q").ClearContents
            End Select
            valQ = Trim(UCase(wsCheck.Cells(i, "Q").Value))
            Select Case True
                Case valQ Like "*AT SDF*" Or valQ Like "*NOT AT SDF*" Or valQ Like "*SORTING*"
                    wsCheck.Cells(i, "R").Value = "Not Processed"
                Case valQ Like "*IN OUTBOUND CONFIGURATION*"
                    wsCheck.Cells(i, "R").Value = "Processed"
                Case Else
                    wsCheck.Cells(i, "R").ClearContents
            End Select
        End If ' only process if column A not blank
    Next i
   'R11----------Step 3: Copy results to "Not Processed From Feeders" -----------'
    Application.StatusBar = "Copying data to 'Not Processed From Feeders'..."
    On Error Resume Next
    Set wsDest = ThisWorkbook.Sheets("Not Processed From Feeders")
    If wsDest Is Nothing Then
        Set wsDest = ThisWorkbook.Sheets.Add
        wsDest.Name = "Not Processed From Feeders"
    End If
    On Error GoTo 0
    wsDest.Range("A3:I" & wsDest.Rows.Count).ClearContents
    destRow = 3
    For i = 2 To lastRow
        If Trim(wsCheck.Cells(i, "A").Value) <> "" Then
            If wsCheck.Cells(i, "N").Value = "From Inbound Feeder" Then
                If wsCheck.Cells(i, "T").Value = "Not at SDF" Or wsCheck.Cells(i, "T").Value = "At SDF, Not Sorting" Then
                    wsDest.Cells(destRow, "A").Resize(1, 9).Value = Array(_ wsCheck.Cells(i, "A").Value,_                 wsCheck.Cells(i, "B").Value, _wsCheck.Cells(i, "D").Value, _ wsCheck.Cells(i, "E").Value, _ wsCheck.Cells(i, "G").Value, _ wsCheck.Cells(i, "M").Value, _ wsCheck.Cells(i, "W").Value, _wsCheck.Cells(i, "X").Value, _ wsCheck.Cells(i, "Y").Value)
                    destRow = destRow + 1
                End If
            End If
        End If
    Next i
    MsgBox "? Import and processing complete!" & vbCrLf & _
           (destRow - 3) & " rows copied to 'Not Processed From Feeders'.", vbInformation
Cleanup:
    Application.StatusBar = False
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
				
			

Project Purpose: The CPV application does not display destination or package weight details for forecasted and not-yet-sorting shipments, limiting visibility on anticipated Premier volume. This tool improves operational visibility by automatically compiling CPV data to help the Premier Service Team anticipate shipments and plan resources more effectively.

Implementation Overview: I created this tool using Excel Power Query and VBA Automation.

Organizational Impact: This tool improves operational visibility by automatically compiling CPV data to help the Premier Service Team and anticipate shipments, identify anomalies, and prepare the Operations for contingent situations. 

Output User Interface

Below is the output that this automated tool creates:

 

The ‘Package Status’ section compiles and organizes all Premier packages coming from all inbound locations by Critical Category (Platinum, Gold, Silver), Outbound Classification (Hot, Sort Down), and the sorting status of each package.

 

The ‘Feeder Status’ section compiles and organizes Premier Package information coming only from Feeder Inbound locations.

				
					//Pull CPV PQ
let
    // Read File path from config sheet, determine user
    PathTable = Excel.CurrentWorkbook(){[Name="DownloadsPath"]}[Content],
    PathValue = PathTable{0}[Column1],
    // list folder contents
    Source = Folder.Files(PathValue),
    // filter "package_details_export"
    Filtered = Table.SelectRows(Source, each Text.Contains(Text.Lower([Name]), "package_details_export") and Text.EndsWith(Text.Lower([Name]), ".xlsx")),
    // sort newest to oldest
    Sorted = Table.Sort(Filtered, {{"Date modified", Order.Descending}}),
    // find newest file
    Latest = Table.FirstN(Sorted, 1),
    // if not found, send error message
    Output =
        if Table.IsEmpty(Latest) then
            #table(
                {"Error"},
                {{"No file found matching 'Package_Details_Export' in " & PathValue}}
            )
        else
 let
                FileBinary = Latest{0}[Content],
                ExcelData = Excel.Workbook(FileBinary, true),
                FirstSheet = ExcelData{0}[Data],
                Promoted = Table.PromoteHeaders(FirstSheet, [PromoteAllScalars = true])
            in
                Promoted,
    #"Demoted Headers" = Table.DemoteHeaders(Output),
    #"Changed Type" = Table.TransformColumnTypes(#"Demoted Headers",{{"Column1", type text}, {"Column2", Int64.Type}, {"Column3", Int64.Type}, {"Column4", type datetime}, {"Column5", type text}, {"Column6", type text}, {"Column7", Int64.Type}, {"Column8", type text}, {"Column9", type text}, {"Column10", Int64.Type}, {"Column11", type logical}, {"Column12", Int64.Type}, {"Column13", type text}, {"Column14", type text}, {"Column15", type any}, {"Column16", Int64.Type}, {"Column17", type text}, {"Column18", type any}, {"Column19", type text}, {"Column20", type any}, {"Column21", type text}, {"Column22", type any}, {"Column23", type text}, {"Column24", type any}, {"Column25", type text}, {"Column26", type any}, {"Column27", type text}, {"Column28", type any}, {"Column29", type text}, {"Column30", type text}, {"Column31", type any}, {"Column32", type text}, {"Column33", type text}, {"Column34", type text}, {"Column35", type text}, {"Column36", type text}, {"Column37", type text}, {"Column38", type any}, {"Column39", Int64.Type}, {"Column40", type text}, {"Column41", type any}, {"Column42", type any}, {"Column43", type any}, {"Column44", type text}, {"Column45", type text}, {"Column46", type any}, {"Column47", type text}, {"Column48", type any}, {"Column49", type any}, {"Column50", type text}, {"Column51", type text}, {"Column52", type text}, {"Column53", type text}, {"Column54", type any}, {"Column55", type any}, {"Column56", type text}, {"Column57", type text}, {"Column58", type text}, {"Column59", type text}, {"Column60", type text}, {"Column61", type any}, {"Column62", type any}, {"Column63", type text}, {"Column64", type text}, {"Column65", type text}, {"Column66", type text}, {"Column67", type text}, {"Column68", type text}, {"Column69", type text}, {"Column70", type text}, {"Column71", type text}, {"Column72", type text}, {"Column73", type text}, {"Column74", type any}, {"Column75", type text}, {"Column76", type any}, {"Column77", type text}, {"Column78", type datetime}, {"Column79", type datetime}, {"Column80", type datetime}, {"Column81", Int64.Type}, {"Column82", type datetime}, {"Column83", type text}, {"Column84", type text}, {"Column85", type text}, {"Column86", type text}, {"Column87", type any}, {"Column88", type any}, {"Column89", type any}, {"Column90", type any}, {"Column91", type text}, {"Column92", type text}, {"Column93", type any}, {"Column94", type any}})
in
    #"Changed Type"
        #"Added Custom" = Table.AddColumn(#"Demoted Headers1", "R", each let
    txt = Text.Upper(Text.From([Column14]))  // replace Column14 with your real header
in
    if Text.Contains(txt, "ARRIVED")
       or Text.Contains(txt, "BLOCKED-IN")
       or Text.Contains(txt, "CHECKED-IN")
       or Text.Contains(txt, "SPOTTED") then
     "At SDF, Not Sorting"
    else if Text.Contains(txt, "FORECASTED") then
           "Not at SDF"
    else if Text.Contains(txt, "SORTING") then
           "Sorting, Not Processed"
    else if Text.Contains(txt, "LOADED")
       or Text.Contains(txt, "ON-AIRCRAFT")
       or Text.Contains(txt, "DEPARTED") then
           "In Outbound Configuration, Processed"
    else
           null),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "S", each if [Column6] = null or [Column6] = "" then
    [Column5]
else if [Column5] <> null and [Column5] <> "" then
    [Column5]
else
    null),
    #"Merged Queries" = Table.NestedJoin(#"Added Custom1", {"Column5"}, #"Pull OCAT", {"Tracking ID"}, "Pull OCAT", JoinKind.LeftOuter),
    #"Expanded Pull OCAT" = Table.ExpandTableColumn(#"Merged Queries", "Pull OCAT", {"Consignee Postal Code"}, {"Pull OCAT.Consignee Postal Code"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded Pull OCAT",{{"Column2", type text}, {"Pull OCAT.Consignee Postal Code", type text}}),
    #"Merged Queries1" = Table.NestedJoin(#"Changed Type", {"Pull OCAT.Consignee Postal Code"}, tblztl, {"ZIP_CD"}, "tblztl", JoinKind.LeftOuter),
    #"Expanded tblztl" = Table.ExpandTableColumn(#"Merged Queries1", "tblztl", {"PRCL_LOAD_AIR_GTWY"}, {"tblztl.PRCL_LOAD_AIR_GTWY"}),
    #"Merged Queries2" = Table.NestedJoin(#"Expanded tblztl", {"tblztl.PRCL_LOAD_AIR_GTWY"}, hsd, {"GTWY"}, "hsd", JoinKind.LeftOuter),
    #"Expanded hsd" = Table.ExpandTableColumn(#"Merged Queries2", "hsd", {"SD/H"}, {"hsd.SD/H"}),
    #"Added Custom2" = Table.AddColumn(#"Expanded hsd", "CombinedTag", each Text.Combine({
    Text.From([R])," - ",
    Text.from([Column9])," - ",
    Text.From(Record.Field(_, "hsd.SD/H"))
})),
    #"Added Custom3" = Table.AddColumn(#"Added Custom2", "InboundType", each let
    val = Text.From([Column69])
in
    if val <> null and val <> "" and Text.Start(Text.Upper(val), 1) <> "A" then

        "Inbound Feeder"

    else

        null),

    #"Added Custom4" = Table.AddColumn(#"Added Custom3", "FullFeeder", each if [InboundType] <> null and [InboundType] <> "" then
    Text.Combine({
        Text.From([InboundType]),
        " - ",
        Text.From([CombinedTag])
    })
else
    null)
in
    #"Added Custom4"
				
			

Project Purpose: This program was developed to provide an efficient tool for estimating shipping contract prices based on the selected carrier, business type, and contract duration.

Project Educational Purpose: This project enhanced my understanding of building interactive user interfaces in C#, including the creation of forms, buttons, and the use of relative references within the development environment.

Implementation Overview: I created this program using C# and Microsoft Visual Studio.

Form User Interface

Form Validation & Message Box

Form Output Example

Form Output Example

				
					//cis 199-50-4238
//this program allows a user to choose a shipping provider, choose your business, and the contract length and it
//gives you the total price and discounts based on your selections

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace Prog3
{
    public partial class program3form : Form
    {
        public program3form()
        {
            InitializeComponent();
        }
        private void calcbutton_Click(object sender, EventArgs e)
        {
            int contractlength;
           
            string[] shippingProviderLookup = { "USPS", "DHL", "FedEx", "UPS" };
            double[] discountLookup = { 0.22, 0.18, 0.19, 0.20 };
            string[] shippingBusinessLookup = { "John’s Books", "Office Supplies", "J.B. Car Parts", "Gevalia Coffee", "Ceylon Tea", "My Footwear" };
            double[] contractPrice = { 50000, 85000, 60000, 75000, 95000, 55000 };
            string[] contractLength = { "0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
            double[] lengthDiscount = { 0, 0, 10000, 10000, 10000, 20000, 20000, 20000, 30000, 30000, 30000 };
            
            
            if (providerbox.SelectedIndex >= 0)
            {
                if (businessbox.SelectedIndex >= 0)
                {
                    if (int.TryParse(contracttextbox.Text, out contractlength) && (contractlength >= 0) && (contractlength <=10))
                    {
                        
                        double cDiscount = 0;
                        for (int i = 0; i < shippingProviderLookup.Length; i++)
                        {
                           if (providerbox.Text == shippingProviderLookup[i])
                          {                   shippingproviderOUT.Text = shippingProviderLookup[i];
                          cDiscount = discountLookup[i];
                        
                          }
                        }
                        double businessContractPrice = 0;
                        for (int i = 0; i < shippingBusinessLookup.Length; i++)
                        {
                           if (businessbox.Text == shippingBusinessLookup[i])
                           {
                businessContractPrice = contractPrice[i];
         }
                        }

                        double lDiscount = 0;
                        for (int i=0; i < contractLength.Length; i++)
                        {
                    if (contracttextbox.Text == contractLength[i])
           {
   lDiscount = lengthDiscount[i];
                                      }
                        }

                       double finalPrice = (businessContractPrice - (businessContractPrice * cDiscount) - lDiscount);
                        
                        finalpriceOUT.Text = $"{finalPrice:C2}";
                        initialcontractpriceOUT.Text = $"{businessContractPrice:C2}";
                        companydiscountOUT.Text = $"{cDiscount*businessContractPrice:C2}";
                        lengthdiscountOUT.Text = $"{lDiscount:C2}";

                    }
                    else MessageBox.Show("You must input a valid contract length (1-10)!");
                }
                else MessageBox.Show("You must select a business!");
            }
            else MessageBox.Show("You must select a provider!");
        }
        private void initialcontractpriceOUT_Load(object sender, EventArgs e)
        {
        }
    }
}
				
			

Project Purpose: This Access Database was created to input and track vaccine shipment data using structured data tables, relational queries, and custom forms and reports to ensure efficient recordkeeping.

Project Educational Purpose: This project enhanced my understanding of constructing interactive data tables, establishing relationships between datasets and developing dynamic reports and user forms within Microsoft Access.

Implementation Overview: I created this program using Microsoft Access.

User Forms & Reports

Vaccine Input User Form

Shipment Input User Form

Shipment Report

Relationship Diagram

Datasets

Locations Dataset

Vaccines Dataset

Shipments Dataset

Project Purpose: This project utilizes PECmd (Prefetch Explorer Command-Line) to analyze the contents of the target “PREFETCH” folder and extract execution timelines, metadata, and system activity details.

Project Educational Purpose: This project helped me demonstrate my knowledge of how Windows Prefetch artifacts can be acquired and parsed using forensic command-line tools. It highlights my ability to extract, process, and interpret system-level execution data.

Implementation Overview: I analyzed the contents of the target folder using Eric Zimmerman’s PECmd tool and executed parsing commands within Windows Command Prompt.

1.  I began by acquiring the target folder and all associated files, identified as the “Prefetch” folder.

2.  After downloading Eric Zimmerman’s PECmd (Prefetch Explorer Command-Line) forensic tool, I parsed the contents of the target folder using the following Windows Command Prompt command. This command processes the Prefetch folder and saves the parsed output to the ‘PECMD_Output’ directory.

				
					# step 2
# Windows Command Prompt --  PECMD Command
PECmd.exe -d "C:\Users\15022\Downloads\Prefetch" --csv C:\Users\15022\Downloads\PECMD_Output
				
			

3. The following files were yielded as the parsed output: 20251029003330_PECmd_Output.csv and 20251029003330_PECmd_Output_Timeline.csv

				
					# Step 3
# Windows Command Prompt -- PECMD Output Files
C:\>dir "C:\Users\15022\Downloads\PECmd_Output"
 Volume in drive C is OS
 Volume Serial Number is C2EE-C052

 Directory of C:\Users\15022\Downloads\PECmd_Output

10/28/2025  07:33 PM    <DIR>          .
11/19/2025  06:43 PM    <DIR>          ..
10/28/2025  07:33 PM         4,805,479 20251029003330_PECmd_Output.csv
10/28/2025  07:33 PM           182,317 20251029003330_PECmd_Output_Timeline.csv
				
			

4. The following files were yielded as the parsed output: 20251029003330_PECmd_Output.csv and 20251029003330_PECmd_Output_Timeline.csv. These files can be examined to see and identify execution patterns, timestamps and system activity.

Project Purpose: The purpose of this project was to design a complete system blueprint for the Pets4Life website, including its structure, data flow, user experience, and core functionality. My team and I created detailed diagrams, prototypes, and documentation to guide the development of a fully functional platform for donors, volunteers, pet owners, and staff.

Project Educational Purpose: This project strengthened my skills in systems analysis and design by applying real-world documentation techniques like class diagrams, ERDs, UI prototypes, and project management tools. It helped me understand how to translate organizational needs into structured technical requirements and a fully planned system architecture.

Iteration Document

Project Purpose: This project examined the 2013 Target IT Security breach and identified how failures in vendor oversight, network segmentation and security governance allowed attackers to steal millions of consumer records.

Project Educational Purpose: This case study gave me a clearer understanding of how real cyberattacks happen, how leadership decisions can weaken or strengthen security, and how using approaches like Zero Trust can prevent security breaches.

Implementation Overview: I analyzed Target’s breach timeline, organizational structure and industry environment. I then evaluated multiple security solutions to determine which addressed the root cause and best mitigated future risk.