Ash Porter | @KirbyPaint

Full Stack Developer, IT Consultant

Hello!

My name is Ash Porter (aka KirbyPaint), and I am a software developer/IT contractor for hire. I've lived in the beautiful Pacific Northwest all of my life, and I am passionate about technology, gaming, rockin' out on guitar, and combining the three. I am a semi-self-taught developer with a background in IT, and I have experience working in a variety of industries. I am currently seeking new opportunities to grow and learn, and I am excited to see what industry my next opportunity will land me in.

I made this website specifically to fully explain my previous roles and how they've each impacted me, as I don't feel this detailed information quite fits on a resume or LinkedIn. I'll provide links to both of those, but if you want a view of my career through my own eyes, I encourage you to read the below information.

Check out my GitHub! or connect with me on LinkedIn!

View my all-purposes resume

View my technical resume

OHA|OIS → August 2023 - March 2024

My most recent position was as an Information Systems Specialist IV at the Oregon Health Authority, specifically in the Office of Information Services (OIS). During my time there, I got to experience life while working in an enterprise Microsoft environment. Everything I touched, from Microsoft Exchange, to Azure, to Active Directory, to the PowerShell scripts that made automation work behind the scenes, was 100% Microsoft. This meant I got to flex my skills in an entirely new direction, and though I'd experienced working with Microsoft as my daily driver since 1998 (No joke, I've been using computers since I was a toddler, and my grandparents *will* confirm that!), I'd never yet had the opportunity to do so this deeply in a workplace environment.

While I was there, I had the role of Identity and Access Management, essentially meaning when a user needed new access or modified access, I was one of the people to pick up their ticket and provision that access, typically on the same day the ticket was to be worked. Specifically, some of my duties were to create new temporary user accounts, provision Active Directory groups for new and existing accounts, provision access to specific State of Oregon programs, change user identities following name changes, and troubleshoot access issues with any service that IAM provided, all while ensuring that the user had the least privilege necessary to do their job. A security mindset was key for this role, as provisioning improper access could lead to lawsuits, security breaches, and other issues that could potentially cost the State of Oregon millions of dollars.

Fortunately, the addition of myself and a few other temporary hires meant that there was no backlog of daily tickets, so during our downtime, I spent time assisting other provisioners with the creation of custom User Access Roles, to assist with new automation processes for the State. I assisted personally in the creation of a role that has now been implemented state-wide, meaning that for certain Eligibility Worker roles across Oregon, there is now a 1-step process, where a manager may submit a role and have near-instant access for a new employee. This is a process that used to potentially take days or weeks, depending on the backlog; a process that has been reduced to minutes. I am honored to have served my state in such a way, and I would love to bring this efficiency to any future position I work in, wherever possible.

EyeCue Lab, LLC → August 2021 - July 2023

At EyeCue Lab, I first had the wonderful experience to be brought on as a developer intern. I completed my web development bootcamp with Epicodus in May of 2021, and was selected along with one other developer for a 7-week internship, which went so well for us that we were hired immediately after the completion of the internship. At EyeCue, I was placed on a team working with a longtime client named Powur, PBC to develop a new feature for their internal solar panel sales tool, called Powur Vision.

Vision is a tool to help a solar panel salesperson show a potential customer what a solar panel installation can do for their power bill over 5 to 30 years. The tool would take the customer's address, pull a high-resolution top-down image from an image provider such as Google Images or NearMap, and then algorithmically place solar panels on the customer's rooftop in an optimal design so that the customer gets the best bang for their buck. Vision also connected with external power company and loan provider APIs to calculate savings from the customer's own power company and calculate the customer's loan eligibility all in one smooth process. This tool ultimately replaced Powur's external client's tool and generated over $5 million in contracts during its first week of production

My development responsibilities working on Vision were largely centered on back-end development, though I was hired as a full-stack developer and contributed a few front-end components to the project. I personally wrote 100% of Vision's Amazon Web Services (AWS) backend API which integrated with Powur's own Amazon buckets, and I also wrote my fair share of the project's database models and migrations, using an Object Relational Mapper (ORM) called Prisma. In addition, I wrote some of the middleware logging service, our JWT authentication service, and a custom Node Package Manager (NPM) package that was the solution to a very unique QA problem, called the NANP Number Generator.

Stayton Cooperative Telephone Company → July 2019 - September 2020

I got hired on at SCTC in part due to my experience with transitioning systems at JELD-WEN, though my main role was to be a cashier. My responsibilities there were classic cashiering duties: take cash and check payments from customers and via the mail, route inbound calls to the appropriate departments, and open/close the business daily, all of which I did with the help of my fellow cashier. I am proud to say that during my tenure, I never once had a variance in the register, nor did I receive any reprimands.

It was quickly revealed that I had an aptitude for technology, so I was promptly given the unofficial title of Document Administrator. This meant that on top of my daily duties, I was responsible for every new document that the company received. For the most part, this just meant processing password documents, address changes, and ACH forms, but due to the sensitivity of this information, I was responsible for the security of the documents. Customer Proprietary Network Information (CPNI) information is federally protected data, and a breach of this information typically started at a $40,000 fine. Therefore, it was my duty (as it was everyone's) to ensure that no customer ever had their CPNI information breached. I implemented safeguards onto the customers' accounts through role-based access, ensuring only the representatives and managers could access forms. Additionally, after the system change, I manually re-sorted over 15,000 customer forms back onto their proper accounts, finding and redacting critical information on occasion, and adding new metadata in the form database to ensure each form was properly labeled for future ease of sorting.

You may have noticed this was the job I had during the COVID-19 global pandemic. On March 11th, a week before my birthday, it was officially declared a pandemic by the World Health Organization. June was our deadline to finish our system transition, and naturally this threw a wrench into our new system training. Two days after my birthday, I was informed that I was going to be our guinea pig for our work-from-home processes. I took home my work phone and a laptop, and didn't come back into the office until our June deadline. I was able to work over 95% of my job completely remotely, with the only issue being hand-processing batches of checks. I was trusted enough that a coworker would drop off the checks on his way home from work, and I would process them the next morning, then drop them off with him while he handed me the new batch of checks. I was able to work this way until our June system deadline, where I masked up and re-entered the office to finish the system transition and assist customers over the phone with accessing the new web portal. My work-from-home experience was so pleasant and my processes were so efficient that I have not worked in an office since I left this job.

JELD-WEN Windows & Doors → July 2017 - June 2019

At JELD-WEN, I was originally hired to be the Intake representative. This meant that I would route inbound calls to the proper phone queue, depending on the customer's location, door/window type, and whether they worked for a distributor or were a homeowner. Within two months, I'd proven myself and accepted the position of Consumer Customer Care Representative (CCCR).

As a CCCR in the warranty department, my duties were to take new warranty claims, determine eligibility based on the customer's warranty at time of purchase, and proceed with any available warranty services. More specifically, I worked in a terminal program designated TITAN, where I'd manually enter window and door details with up to 1/32" accuracy. I would also process some daily reports, making sure no customer claims were falling behind, and any new homeowner-submitted claim for the state of Texas came straight to me. When necessary, I would submit a claim for scheduling, and place orders for specific warehouses. In September of 2018, I was invited to the customer care office in Hawkins, Wisconsin to learn the ins and outs of the new customer care program called CEC. I was given one week to learn the entire program, which I did. It was expected that I would return home and train the entire office on the new system, with a deadline of December, 2018. Stayton was the only office to be 100% transitioned by that deadline.

Naturally, my technical aptitude bled over into this job as well, and I quickly became in-house IT, becoming preferred over our actual IT department located in Klamath Falls. I'd be called over to fix a CCCR's computer for all sorts of reasons, diagnosing why Paint wouldn't open an image (usually an iPhone filetype Windows couldn't recognize) or to un-maximize an accidental F11 press. During one of my lighter days, I developed a simple process to shrink our full day of onboarding down to about a 56 minute process. It was largely just installing a few programs onto a rewritable CD that I then gave to my supervisor for future use, but it was a serious reduction of onboarding time that allowed new CCCRs to begin their training much sooner than before. I also wrote a small batch file to automatically open and log in to my terminals, saving me precious minutes every morning and ensuring I was ready to go right at start time. I wrote a separate batch file to make sure I was available on the phones as much as possible, since the phone queue system would strangely forget to re-add only me specifically to the available queue once I'd finished a call.

Goodwill Industries of the Columbia Willamette → August 2015 - June 2017

At GICW, my first real job, I was hired on as a cashier. I had typical retail duties, including register responsibility, customer service, and stocking the floor with our newly donated goods. I was additionally trained to receive the goods from the donation door, and rounded out my training with pricing items.

All of this training eventually led to me being promoted to a Lead Cashier roughly a year after hire. My additional duties were to then open or close the store on any day, set the schedule and lunch breaks for the morning or afternoon shift if I was working either shift that day, and to undergo minor loss prevention training. I did not have the responsibility to actually trespass thieves, but it was my responsibility to verify large bills and checks were legitimate, and to double-check if a price tag appeared to have been swapped out. I also had the ability to override a price, if a good appeared to be damaged.

My Non-Work Life → Birth - Present

When I'm not working, I'm usually engaged in one of my hobbies. Most often, I'm playing some game, whether it's old or new. My Steam playtime is definitely in the thousands of hours, and I'm a huge fan of the factory-building genre, such as Factorio and Satisfactory. I've spent hours automating my factories for optimal production, but my spaghetti is always a work in progress. I also love survival games and aviation simulators.

My other biggest hobby is working on my home server setup. Currently, I have a headless Ubuntu server that's responsible for hosting my Plex media server and my custom Discord bot. On occasion, it also hosts my private Minecraft server, made available to my close friends, and when in the mood, it also hosts a Valheim server for viking adventures. I have set up my server to be accessible to me from anywhere in the world with the power of Cronjobs and Tailscale. This way, if I am out of town and my media server goes down, I can safely remote in through any terminal, even on my phone, and restart the server. I also have a few bash scripts set up to work with my Discord bot, where the bot can recommend me a tv show or movie.

Additionally, this server has become my backup programming machine. I typically work with the MacBook Pro I earned after working at EyeCue Lab for two years, but when it's not available to me, I can ssh into my server, open up my NeoVim environment, and get to coding and scripting. Learning NeoVim has been a challenge, but I look forward to the day it becomes my daily driver and muscle memory overtakes the need for a mouse. I'm not there yet, but every day I get a little closer to that goal.

Please feel free to browse my personal GitHub for my coding projects. I have quite a few that could use some touching-up, but I generally put my best projects front-and-center. One of my personal favorites is my Dungeons and Dragons "Effects Generator" website, which was made as a favor to our Dungeon Master at the time. He was using three books, a deck, and a PDF he found online to come up with some cool flavor text for when one of us rolled a critical success or failure, and he came up to me one day after I was done with class for the day and asked if I had any ideas on how to combine all those sources into an easy interface. I thought about it and suggested a simple site, where all he would need to do is press a button and be presented with an effect. I asked him to consolidate his sources and send them to me in a file, and I would do the rest. We used that site for around three years, until we transitioned to our Pathfinder 2.0 game.

Another project I'm quite proud of is my aforementioned North American Number Plan (NANP) Number Generator. I developed it during my time at EyeCue Lab, when we were absolutely gobsmacked by a bug that QA kept sending back to us. We had a ticket in our bugs queue that basically stated, "Sometimes a form sent to a loan provider comes back invalid." When I took the ticket, I spent hours and hours investigating, but the error seemed to be completely random. Sometimes, I would enter in a phone number, and it would come back invalid. Other times, I would enter in the same phone number, and it would come back valid.
I was about to start pulling my hair out in frustration, when I had a sudden realization: we were using a popular package called Faker.js to generate our test customer data, and it would often generate phone numbers in a format that is invalid in North America, but would LOOK like they were real phone numbers.
For those who aren't aware, the NANP describes a valid number like so: (NXX)-NXX-XXXX, where N is any digit 2 through 9, and X is any digit 0 through 9. I wrote a simple package that would generate a random phone number as a string, validate it against the NANP, and if it was invalid, it would generate a new number. I then packaged it up as an NPM package, changed any test phone number from the Faker package to my own, and we never had that bug again. I was so proud of that package that I published it to NPM, and it's still available today.
The wild thing is that I'm not sure if I'd ever realized the issue if I hadn't previously worked for a phone company! I'm glad I solved the bug, though, because it was a fun little project to write, and it's honestly some of my cleanest JavaScript work. The project still gets weekly downloads, according to NPM, so I'm thrilled that this little project has helped so many of my fellow developers.

My skills include:

Automation

Microsoft Office Suite

Bash Scripting

PowerShell Scripting

Web Design

CSS

HTML

JavaScript

Prisma

Back-End Web

Front-End Web

PostgreSQL

GraphQL

React

React Recoil

And many more...

This page was put together on a sunny afternoon. If you like the potential you see here, please feel free to reach out to me at my LinkedIn, where you may find my current contact information.