Daily Post Image from Upsplash

April: 30



There will be a couple ways that we can handle the invoice system, but I will try to keep it simple from the start. We could split the invoice and draft into two different aspects. First part of the invoice is to limit the amount of capital that a single invoice / order can have. I am thinking that multiple invoices will be fine and splitting up orders is better for the risk management.

Rather than the end user having a bulk order with just a single invoice, we will save the bulk order into a draft and then split up the final order into multiple invoices.

This way we can also setup terms and conditions for each of the items and orders, certain invoices can be cash or crypto first before delivery or COD, while other invoices can be NET 30 or something insane like a 99 year invoice.

This is a great library for signatures, called Signature Pad, which I will add into the javascript notes.

Inside of the invoice table, I am thinking of removing the boolean for public.

public: boolean('public').default(false).notNull(),

We can replace that with a visibility that starts off with a number scale, with 0 being private and then 10 being public. This gives us additional options later down the line to control how the invoice can be pulled.

Okay! The new invoice table looks great, going to generate the mysql using

pnpm drizzle-kit generate:mysql

then going to branch off the main database, aka patch-invoice and then prepare the deployment. After the deployment has been inserted into production, without issues, we will go back around and generate the new SQL structure for the Rust backend.

Okay! The rust models were generated without any issues but the protobuf did throw an error when dealing with the decimals. We have two options, the first is to just move all the data into integers OR represent them as a string and handle the overhead. For now, I am thinking the best move would be to hold them as strings because we are not too sure what level of precision we want to use. USD is at around 2, by default, but I have seen situations where it can reach upwards of 4-6. Bitcoin is already at around 8, so it just seems wise we use strings for now.


I am going to setup FindItFaster for my VS Code, but that extension also needs a couple libraries to be installed on the ubuntu instance. We will grab the three libraries that it uses:

sudo apt-get install fzf ripgrep bat


Time to start the tradition of setting up auth! Oh boy! We have been doing this like if it was acid, got to go back around and do auth over and over, until it is perfect, lul.




  • Going to update the Strapi API to the latest version, v4.10.1 because it seems to address the yarn build bug that was giving me issues the last time that I tried to upgrade/update.

  • 6:00pm - I started the process of updating the API, it was pretty straight forward with upgrading the packages and then deploying the version v4.10.1. There were no major database migrations but I backed up everything to be safe.

  • Next mission is to upgrade AppWrite from 1.3.1 to 1.3.3 , which I am doing right now. There are some issues that I need to address between the AW and Strapi API, including the unique keys/index. The update seem to work out well and the database migration did not throw any issues.

  • 7:00pm - Refactoring the KBVE.com codebase by removing old / dead astro files that are no longer required. This is to help improve performance and to clean up the workspace, so that others can easily navigate through and not have any issues. There are instances where certain files get referenced twice, once via the Namespace and then again directly via import.

  • I have to restructure the name convention and I believe that keeping it extremely basic will be better in the long term. Thus I think it would make sense to use the term, Widget , and place all the Element / Action into that area and the migrate them out again in v2 of KBVE.com. Mapping out each widget seems to be a waste of time right now, as I keep rotating different file names and file types without keeping something straight forward.

  • Another interesting error that I am having is with the email(s) going into spam. The issue is actually not on my end but rather that our advertisement platform, “Ezoic”, throwing errors ecause it is unable to proxy the CNAME from our email provider, “SendGrid”. It has been almost two weeks and currently still waiting for them to resolve it. :/


  • Had to grab a quick meal earlier in the day, so I decided to try the local KFC at the InOrbit mall! While I am not a big fan of having fast food, the tandoori chicken was delicious and not too expensive! The legs were not too greasy, chicken was cooked almost near perfectly and the blend of spices were on point! These guys are making a huge mistake not bringing this dish into the US because it would become an instant hit across North America.

  • 11:00pm - I am about to start winding down, going to grab some mineral water and a salt paan before getting ready to sleep.


Happiness mainly comes from our own attitude, rather than from external factors. — Dalai Lama


  • Strapi Update.
  • Pay Credit Cards.
  • AppWrite Update.