Recently, I’ve been working on a new small hobby project: calc.bot. It’s a simple split-pane calculator that lets users enter expressions in human terms on the left-hand side and see live results on the right. For example, you can assign variables (
Rent is $2,000
, Months = 12
) and perform calculations using them (AnnualRent = Rent * Months
). If you feel like updating one variable, the rest of the expressions update in real time.
I was inspired by OpalCalc, a neat little C# app I discovered after searching for alternatives to the default Windows calculator. I wanted something that felt easy to use and kept a working history of my expressions- kind of like an Excel spreadsheet, but a lot simpler.
After a bit of motivation, I decided to write my own calculator using SvelteKit and
Math.js. I’m trying to keep things as simple as possible- just a single page application which uses the 📁File System Access API for opening and saving
.calc
files locally.
It’s a nice change of pace from my other over-engineered projects- no backend, no API, no user registration or authentication. Although it only took a weekend to bootstrap, I’ve ended up using this tool on a near daily basis. If this post imparts anything, I hope it encourages you to make your own tools!
Hello, world! It’s been a while since I’ve written content for this website, but I’m determined to start writing again.
Recently, I’d been looking to integrate a simple SaaS product as a headless CMS tool for my personal website. In this post, I’m going to go through each service I considered, and conclude with my final solution.
This was my original integration for heythisischris.com. I fell in love with this service because it was a simple end-to-end encrypted note keeping provider which allowed one to operate a public blog with an
RSS
feed. I quickly found, however, that this product had many limitations. First, there was no developer API
access- users had to rely on an antiquated RSS
feed written in XML
to integrate posts with their website. I was not interested in parsing an RSS
feed for my website. Second, the product had a buggy interface which relied on third-party rich text editor plugins. These plugins were unpredictable and did not operate well in the browser (or at all on mobile). And lastly, I stopped using the service altogether, and instead focused my energy on developing and using productabot as my primary note-taking tool.
I love using Airtable. It’s one of the best SaaS products I’ve ever used, hands down. That being said, it’s not without it’s limitations- rich text editing is simply absent in this product. The “rich text” field only allows for the following options: bold, italics, underline, • bullet lists, and 1. numbered lists. This, unfortunately, is useless for a proper CMS.
I migrated my database from PostgreSQL
to DynamoDB
to reduce server costs and learn more about optimizing a NoSQL
database schema using a hobby project. In doing so, I opened up the possibility of editing raw HTML
inside of DynamoDB
rows. I ended up making nearly 0 updates to my website, because, it’s difficult editing inline database rows without seeing the results on a webpage! I was discouraged from updating or adding any new content, which brings us to our final layer of abstraction:
Finally, I settled on using Notion. I was originally opposed to this software because I detested the idea of separating documents into blocks
- I wanted a simple text editor without any collaboration/history nonsense. Exploring the knowledge bases created at recent employers, however, changed my opinion on the matter. Notion simply has the easiest interface for creating documents. It’s simple, it looks good, it has a decent mobile app, and a well-documented API to boot!
It's been a while. Here's an update!
After a month of idleness, I finally resumed development on place4pals. I was dejected from continuing development because I'd wasted time building the service on DigitalOcean using Auth0 when I should've been using AWS from the get-go. Ontop of that, I was developing it from a web-first approach using Preact, but decided that I should do mobile-first using React Native. So I scrapped all of that code and worked on a fresh React Native project using Expo. I've finally moved everything to AWS, and now I'm mostly back to where I was ~3 months ago.
It's exciting. I really enjoy building this thing out. Hasura is a godsend for handling API queries, and it's so nice to stop worrying about complex SQL queries/relationships and focus more heavily on frontend development.
After a 4 hour coding binge, I made these updates to the website:
I started by consolidating my backend stuff to a single Lambda function (https://api.heythisischris.com). This handles retrieving the GitHub Feed, the News Feed, handling comments, and sending emails from the contact form.
I created a "heythisischris" table in my place4pals database to handle the commenting stuff. I didn't have a database for this site before because I didn't need one- I was retrieving these posts straight from Standard Notes' blogging server, Listed.to (blog.heythisischris.com). All newly posted comments are associated with a "post-guid", which is the identifier for the Listed.to blog post. I'm retrieving the Listed.to rss feed, then querying the database for comments with a matching post-guid, and including them before returning the parsed XML response.
I also wanted to give users the ability to delete their comments. I'm handling this by keeping track of a user's IP address when they comment. If the comment is written in the same IP address that the user is viewing this website, there'll be a "delete" button ready for them to use.
I'm tired. My eyes are heavy. But I'm happy. I had recently written about my struggles with self-motivation, and this spontaneous sprint has given me a bit more hope that I'm capable of cultivating internal resolve.
Finding the motivation to work on your own projects is tough. There are so many things I want to do- create a useful VS Code extension, write detailed a Medium article on how to correctly configure some type of AWS stack, finish recording that overworked album of yours.
Most days I spend ~10% of my time contributing towards these projects, and the rest fretting/procrastinating/waiting. Delayed gratification is an unexercised muscle atrophied by perfectionism. And looming behind this, of course, is an exhausting list of open issues from work (which I'm enormously grateful for, don't get me wrong- it's just distracting).
I guess I'm trying to change that with this website. Maybe, just maybe, by creating some façade of a professional appearance, I can trick myself into allocating my time "like a professional". Spend 2 hours on Project X daily. Make sure you commit at least once a week to Project Y. Write about how your development experience with Project Z. But most importantly, have more faith in your own abilities. Don't worry if it's not perfect, just push it!
And so, I publish my first post.