From December to February, I was pushing hard on building out the Bookends app, especially during the end of year break that gave me about 10 days to work on it while being off work. It acted as a catalyst allowing me to launch a working version of the website and then start adding features.
Keystone’s good and bad
I chose Keystone.js as the CMS for storing my data and helping me manage models and quickly get off the ground. Keystone’s beautiful marketing pages really sucked me into using it. It comes with a lot of batteries included features like a working schema and migration approach (using Prisma) and a GraphQL UI and API to be used for easy building and testing.
All good things aside, it does have its limitations. Debugging Keystone on a deployed server is tough, errors are hidden away and if something breaks, the admin UI doesn’t really show much information about it either.
A big nuisance for me recently has been the fact that interfacing with Prisma settings is practically impossible. This came up because I was having some connection pooling issues which led me down the path of looking for what exactly is causing slow search results from coming back. Turns out, Prisma was unable to handle more than 5 simultaneous searches and that was problematic as I only have a dozen users and they are not searching at the same time, those 5 searches are done by me to stress test even a tiny bit.
Next.js and typescript are great
I’ve grown to love Typescript’s strict approach to making sure I’m not deploying shitty code. When starting out, I was getting frustrated with type errors and the linter in VS Code bothering me so much but as time went on and my natural instinct to make sure the type was added made working with typescript pretty straight forward. And it has made me really think about what I’m trying to do with a particular function.
Next.js has been a very helpful tool as I’ve used Vercel to deploy and once getting over the learning curve, I’ve started to produce useful code more and more.
I’m hoping to continue working on the UI as I have a ton of things to add but I’m really rethinking which approach to take for the server-side implementation. I’m most likely going to go for a JS/TS based server-side approach that will not be Keystone.js.
Feature dev has been halted as most weekdays I don’t have energy to add on code after work and I’m thinking of clearing out my mind and queue of tasks to focus on getting the foundations right.