Why I wanted to Blog / Site Setup

10 minute read Published: 2025-10-27

Why I started this Blog / Zola Setup Write-up

Table of Contents

Intro

When I first got started on this project, I mainly wanted a creative outlet that wasn’t programming as my job has massively transitioned in the last year or so towards that.

IT Job Background

I was initially just doing warehouse work at a local retailer and eventually many years in, around 7 or so, I managed to snag a good opportunity to help with IT during one summer.

I had hurt my knee while mowing and my mobility was quite low so doing warehouse work was not an option. It turned out that the IT person at work needed to work remote for the summer for family reasons so I ended up getting a lot of the in person level 1 tech support / opening the door for ISP technicians. It was a pretty slow summer mostly filled with selling old tech on ebay as the company was moving to a new warehouse and trying to clean out the old one.

Eventually the IT person came back and was happy with the job I had done and I was offered the opportunity to continue doing IT full time. I was excited as IT had been my dream job for a long time so I took the offer. As we moved into the new warehouse, the company was also working on swapping out the old ERP (Electronic Retail Platform) for a better, newer one.

The ERP 🙃

The new ERP was sold as an amazing do everything platform with integrated reporting, mobile device support, Shopify connectivity, and more. Those promises were mostly not true as most software sales goes. The lack of ability to cover the needs of work, left everyone having to actually work with the platform in a bind. I knew some coding from tinkering with minecraft mods in highschool, so I through together a crude proof of concept for store replenishment to get them through the transition.

Turns out the new system actually had no functionality for replenishing store inventories if you were not drop shipping to them. Because of this my crude proof of concept became a necessary part of the weekly workflow for multiple people. As we continued to work with the system more and more parts that were promised never materialized. The integrated reporting? That actually wasn’t ready yet so instead I ended up having to learn BigQuery SQL and using that to export data from google’s data warehouse to different google sheets and then writing google apps script scripts to automate sheet formatting. This expanded over time to many many different sheets that automated a lot of previously manual workflows.

Inventory Count Corrections

The next thing to tackle after replenishment was inventory count corrections. While actions in the system could generate count corrections, these were in no way enough to keep up with the issues that were appearing. The entire system is based on no inventory quantities being ever wrong and it becomes incredibly hard to work with if numbers are off. I ended up writing a google sheet that takes in data from 5+ different sql queries and uses the API of the ERP to create and populate inventory counts. The script is then automated through the tools google provides to run on a set schedule. There were some hiccups to begin with and later on more advanced controls needed to be coded but, this sheet is what is currently running inventory counts for the entire company and is the only reason inventory quantities stay more or less in line between yearly inventories.

Printing Barcodes / Generating PDFs

The next big project was printing barcode tags. On an aside the ERP uses a forked version of jinja2 to do the rendering for their exports and let me tell you, html is a bad format for making pdfs lol 🤣 Anyway the issue that arose is that there was no way in the system to take an arbitrary list of skus and then generate the required barcode tag pdf. We use a variety of 5 different tags so options are a must. There is also no way to call the ERP pdf generation through the api, as a result my solution ended up being a front end of a google sheet that then is read by a python script initiated by double clicking a batch file on the desktop. The pythons script is a ~2-3k line script that uses fpdf2 to generate the required pdfs for the barcode tags. This has actually worked extremely well as the fpdf2 layout structure is literally just draw this at this point. Much easier to layout then html that shifts around. We have even implemented versions of this code with overseas vendors so that they are able to print our formatted barcodes.

Mobile Development

After fixing all these issues the next big one was that the mobile experience for the ERP platform was actually pretty awful. The navigation was bad and confusing, which caused issues with training. A retail store goes through many part time workers especially during the summer so the training issue was a pretty major drain on their ability to get their job done and our ability to support them as IT. The other major issue was that when it came time to do a yearly inventory, a large number of products are stored within the in system logical location of Store-Sales Floor. The mobile PWA (Progressive Web App) was unable to handle huge amounts of product changes within one location. Inventory counts are organized in the system by location so when upwards of 3k items are displayed on the one page it lagged horribly, BECAUSE they did not implement it as a recycling scrollable view as is standard for displaying massive lists, instead they just rendered them all even though at most 10 were visible at once.

These major issues lead to me searching for a solution just to make the problems not a problem anymore. I eventually managed to get a simple proof of concept android app running (Our handheld scanners are zebras that run android) that was able to move a product from one location in the system to another. It was simple, crude, didn’t use any concurrency and was easy to break but the first showing got rave reviews. I eventually worked up replacements for moving items, doing inventory counts, and managers confirming the inventory counts. More functionality requests were looming in the future so, I recently managed to combine everything into one app. It handles everything the previous apps did, only needed to sync data once instead of once for each function and added a couple more features. The result was a pretty professional looking front end mobile app. I replaced the entire functionality that the ERP was supposed to provide in stores using just their api to make changes on the back end.

There are a couple more portions remaining for the android app but the majority of those are scheduled for next year at this point. I am pretty sick of coding for work as of now and that resulted in this blog as a way of doing something creative and maybe venting a bit 🤣 The total lines of code I have written is over 30k and still growing. The most recent project I finished was a replacement for the non functional automated store replenishment.

Automated Store Replenishment

An option offered by the ERP existed to begin with but the setup required was massive, bulk creation of the records required could only be done over the api as their importer is still broken, when actually generating the transfers to the stores it took almost an hour to look over just 2k skus, and lastly there was basically no way to check over what was created or edit them in any meaningful way.

This resulted in the current implementation. I wrote an analysis function that took into account, product received dates, sales dates, first sale date in a location, 30 day sales and more to generate suggested replenishment quantities. For products that had over 30 day sales my boss was able to get a linear regression model put together in javascript that would take in more sales data to get a better trend prediction.

My solution is tailored towards <30 days of sales data as the store releases many new skus throughout the entire year, some years upwards of 8k skus, and a linear regression trend based on weekly data just did not work without at least 4 weeks of data. My function generates sales velocity based on 30 day sales / days available weighted against 30 day sales / number of days the product sold. This weighting attempts to account for products selling out part way through a week and therefore not getting more sales when it could have if there was stock. From my testing the numbers look pretty satisfactory in both branches. I was able to get this out for testing with the replenishment team today and it might go into production next week. Wow am I sick of javascript, but thats a post for another day.

TLDR:

The ERP sales person is lying to you, it actually doesn’t have that feature or if it does it works poorly and lastly all ERPs are shit. 🙃

Setting Up

The setup went pretty clean as far as getting zola working. I recently started using a thinkpad I bought on ebay, at a great deal, and using arch linux the install was quick and painless. I really recommend reading both the zola setup guide and the setup guide for your chosen theme if you are using one as my theme, Radion has pretty different setup details.

nvim

Using Nvim to write this site has been pretty fun! I have really been liking using it. I installed the lazy vim package manager and default packages and that has really helped with getting used to it. Being able to use the mouse in the terminal text editor is a really cool feature too. This entire post was written in nvim, I am really liking how a fullscreen terminal just cuts out all distractions while writing. I threw on a radio from youtube music, as thats my streaming music app (its basically free with grandfathered youtube premium) 😄 and got to writing. The above explanation / rant was written entirely without stopping lol. I just got into the groove and got everything I had been feeling out. It was actually really helpful, despite writing this at almost midnight before work tomorrow I am feeling great just from getting that off my chest! 😃

The Theme 😑

Getting the theme setup was quite a bit of work. At first I fully followed the zola setup guide however anything in /templates overrides the theme. As a result my blank test page was only generating the normal blank html of an empty page. After removing /templates and everything in it and following the theme setup more carefully I was able to get it working as seen in this page. I really like the theme so far but the solid black background is not entirely my favorite.