Thingbase

My challenging and arduous journey from idea to website, and the long road ahead

James Chang
Alpha Beta Blog
Published in
8 min readMar 5, 2023

--

The year was 2017. I had been working on my company selling Rubik’s Cubes for about 6 years, and I was starting to feel the itch to try something new. After dealing with physical goods for years, I realized I had always wanted to work on a business that was completely online and virtual, so there were no physical products to deal with (and all of the headaches associated with that).

The first thing I did was try to find cool available domain names. I figured that every great idea starts with a cool and catchy domain name. Eventually, my search brought me to some domain auction sites, where I just so happened to find what I thought was a neat name that just happened to be expiring. It was called thingbase.com. I was the only person who ended up bidding on the domain, so I won it for a nominal fee.

I was amazed that I had snagged what I thought to be a cool domain name, and I told myself that I wanted to make something great using it. And so my multi-year journey to turn this domain into a functional website began.

First, I needed a concept for what the website would do. I tried to draw some inspiration from the name itself, but this was hard given how generic the name was. I believed the most logical use would be a “database for things.” But what was a “thing”? A thing could be… anything.

Eventually, after some refinement, I arrived at my initial vision for the website. It would be a software-as-a-service online hub for companies, people, and brands to manage the physical and virtual products that they produced. The products were the “things,” and Thingbase would be the place to go to manage their online presence.

To build out this idea, I started off by contracting my brother, a software developer, to build the website for me as a side gig outside of his full-time job. He was a capable developer, but my vision for the website was nebulous and overly expansive. In hindsight, no matter what he had produced, I would never have been satisfied with it. After several months of working with him, thousands of dollars spent, and feeling like the project wasn’t going in the right direction, I pulled the plug on the project, and put it on ice.

But the itch to build something cool on thingbase.com did not subside. Within a few months, I was back at it. To help reduce the costs, I would learn how to program websites on my own. I reused some of the code from the website my brother had developed, and adapted it for use with my own interpretation of my vision for Thingbase, learning as I went.

After several months of spending late nights and weekends coding (after coming back from my day job), I had arrived at a somewhat presentable website, which I deployed to the internet. However, the project suffered enormously from “feature creep.” Because my vision for what the website would be was so expansive, I tried to make it fit every possible use case that I could dream up. The result was a Frankenstein project that tried to address every use case, but ended up addressing none.

Furthermore, because I was learning programming as I built the website, the codebase was disorganized and difficult to maintain. Eventually, realizing that I had overextended in terms of the scope of the project and being dissatisfied with the state of the codebase, I threw in the towel and once again put the project back on ice.

Almost a year came and went. I did not forget about Thingbase. It was always on the back of my mind. But I was busy with other things in my life and could not find the motivation to start again in earnest.

One day, out of the blue, I get a message from someone named Chris on Discord. He had cold-messaged me since I was in the same Discord server relating to software development that he was in. He introduced himself as a web developer from Japan who was looking for projects to do.

Not knowing any better, and thinking that this was my chance to finally get Thingbase off the ground by collaborating with a “professional” web developer, I decided to enlist his services to build out Thingbase. We agreed on an hourly rate, and he got to work.

This time, learning from my past mistakes, I tried to pursue a more limited vision for what Thingbase would be. But the billable hours racked up quickly, but the progress was slow. Chris was not very proficient in English, and communicating with him could often be challenging. I would ask for one thing, and he sometimes would not fully understand my request, wasting some time in the process.

After a few months of working closely with Chris and thousands of dollars spent, I gradually came to the realization that our collaboration was not working out as expected. As a foreign contractor in a competitive market, he sometimes seemed more interested in maximizing his billable hours and ensuring that he had a steady flow of work than building a great website.

There were also signs that he was not as technically proficient in web development as he initially presented himself to be. After all, he was cold-messaging people on Discord servers to find work, which is how I had found out about him. And it seemed to me that he had fabricated or embellished his portfolio of past projects.

But, in truth, I don’t think any level of proficiency and capability would have satisfied my requirements at that point. The project was my baby, and I was obsessed with the details to the point that I was reviewing his code almost line by line. I was essentially expecting a website that I could have made, but by the hands of someone else.

With a few thousand more dollars down the drain and the website still unfinished, I told Chris to stop working on the project, and once again, put it back on ice.

After 3 failed attempts, tens of thousands of dollars and thousands of hours spent, and virtually nothing to show for it, I had some soul searching to do. I resolved to take some time off the project to figure out what went wrong before I got started again.

Eventually, I reasoned that the chances of any single website project succeeding were low, so I should focus on improving my ability to develop new websites and iterate with ease, rather than betting it all on one project.

The official Giraffeql Boilerplate website

And with that, the concept of the Giraffeql Boilerplate was born. The boilerplate was a complete website framework that could be manipulated to fit just about any website project without too much additional effort. Every time I developed a new project, I would incorporate the any major changes into the boilerplate so that it would make developing the next project easier.

OSRSRecords.com, one of the projects developed by the author using the Giraffeql Boilerplate

Over the course of the next few years, I developed numerous projects using the boilerplate. I developed a website for documenting “algorithms” for solving the Rubik’s Cube (unfortunately, the project ran into some roadblocks and did not end up getting released). I developed a website for keeping track of personal records in Rubik’s Cube speedcubing events (CubePB.com). I developed a website for keeping track of boss speedrunning records within the Old School RuneScape community (OSRSRecords.com).

On top of these, there were dozens of other smaller, private projects that never saw the light of day, but it didn’t matter because by developing them, I was able to improve the boilerplate to make it easier to develop my next project. And that was the beauty and magic of using the boilerplate.

After years of developing new web projects using the boilerplate, the Thingbase question never left my mind. It was simply a matter of time before I came back to it, hopefully this time for real.

By last fall, I felt that I was ready to begin work on Thingbase again. I had discovered a possible use case for Thingbase within my own e-commerce company, which used Shopify as its e-commerce platform. Essentially, Shopify had an inventory management system that I felt was incomplete, and I wanted to use Thingbase to fill in the gaps.

Using Shopify, there was the ability to manage multiple locations, and keep track of transfers of merchandise between these locations. Unfortunately, the transfers system was not accessible via API (a problem that has gone unaddressed by Shopify for years), which made it hard to develop customized applications around it. In my company, we had to use TamperMonkey scripts to get around the lack of API access, but this was a hacky solution that was prone to breaking easily.

Additionally, I found that managing transfers for products that did not yet exist on Shopify was not possible. Let’s say a new product comes in that isn’t entered on the Shopify system yet. It is simply not possible to keep track of the status of this item via their transfers system, as the item does not exist on their systems yet.

So, to address this problem, I developed a system of item management and transfers outside of Shopify, and then used a series of webhook requests to sync any changes in inventory with the Shopify systems.

And with that, I would like to unveil the latest iteration of Thingbase for public beta testing. My e-commerce company has successfully been using Thingbase in place of the Shopify transfers system since last fall, but I am now trying to explore additional use cases, including with other e-commerce companies and with individuals.

Preview of the Thingbase transfers system

I tried to learn from my past mistakes in which I made the vision of Thingbase too complicated and overly expansive. The purpose of the new Thingbase is simple: to help you keep track of your things, physical or virtual.

You can keep track of your things (anything!) via inventories on Thingbase

Although this latest iteration of Thingbase is the culmination of almost 6 years of attempts, iteration, and failures, I know that my work is still far from finished. In fact, it has barely just begun. There is still a long and grueling path ahead of me to make Thingbase the website that I envisioned it to be.

There is no final destination in software development, so one must really cherish the journey. Inevitably, there will be much more iteration based on bugs and user feedback. But now that I am armed with the Giraffeql Boilerplate and the ability to iterate rapidly to deliver the features that users want, I feel that I am prepared to take on what ever challenges are thrown my way. I welcome you to come along for the ride.

--

--