Introducing Sleepy Craft Studios
#3dPrinting #mechanicalKeyboards #coding #diy #SleepyCraftStudios
I am finally launching the website I’ve been working on for the past 5 months: Introducing sleepycraftstudios.com! I started building hand-wired mechanical keyboards with qmk firmware. The first two designs are based on the Planck. One is a clone and the other is a 4x6 split. The plates include hot-swap socket diode holders that make the build a bit easier. The plan is to make a dactyl design or something similar next. The models will be licensed under CC-BY-NC-SA 4.0
I am also planning on making some other designs I can print, but that is further down the roadmap right now. The other plan on the roadmap is to make a small print farm in my garage. I’m really excited to get that going but the garage needs some more work before it will be ready.
The Why
I wanted to start a small business; something I could try doing with a full time job. There are a lot of great keyboard designs out there, but there is also room for improvement in the hand-wired DIY space. I like making keyboards and websites and this is a good outlet to refine my craft on both fronts. I also would love to make the dactyl a tad bit more accessible price wise for those who can not build their own. I believe I will be able to sell it for a somewhat less than is available on the market currently, at least for the DIY kit version.
The Website
I spent some time building up some architecture that I ended up not using. That is, figuring out how to host Strapi (the CMS I am most familiar with built in the language I am most comfortable with (typescript)) on GCP (the cloud platform I’m most familiar with). This worked but turns out a simple managed Postgres database on GCP is minimum $30/mo and that is without taking in to account a load balancer or any traffic. It took about a month to get those numbers realized. I know that I could probably get away with sqlite or putting the DB somewhere else, but I wanted to try to keep everything in one place at that point.
I looked at fly.io next which I have hosted Strapi on with sqlite for free for a friend of mine, but I wanted to use Postgres, and I did not want to manage it myself. I am still considering fly.io for the future but for my initial plan and budget of approx $0 for web hosting, it was not the choice.
So I somewhat regrettably landed on the Neon Orange stack: NeonDB and Cloudflare Pages. I also have a Worker sprinkled in there. This is free (for now. I don’t expect NeonDB to have a free tier for very long tbh) and serves my needs for the most part, however the lack of tail workers in CF Pages is a real bummer and it means my logs are kind of useless without setting up some kind of drain with wrangler
myself. That wouldn’t be so bad but it requires the deployment ID when run in non-interactive mode and good luck getting that from the wrangler CLI — surely it’s possible but I haven’t put enough time in to understand how and there is no simple command which displays the deploy ids in a format that is readable by machine or otherwise. I ended up building an admin dashboard instead of using a CMS at all. It was part of the same app but I have since split it off into its own Pages project for extra separation of concerns. I think this ended up as probably a similar amount of work as getting a CMS set up correctly with the data I want in the way I wanted it. It makes the DB a bit more portable as well.
The site and dashboard are built with SvelteKit. The public facing app uses open-props for some baseline css vars but styles are written in vanilla css other than that. Lucia is the library I’m using for the oAuth stuff, it is wonderful. Stripe handles payments and the checkout form. I’m using bits-ui which handles some a11y things for me but I’m not sure I really want/need this. I’m using the toggle, accordion, button, label, and radio group. The bits-ui docs only show code examples with tailwindcss and they are very difficult to read. I’m on the Drizzle hype train I guess, it has been working fine for me. I don’t have a ton of tables or anything but the way it handles relations is nice. I’m caching some DB calls with Cloudflare’s KV which I wrote in such a way as to replace with some other KV in the future. I’m also using R2 for image and file uploads, that may not be able to change for awhile but we will see. Deploys are done with the wrangler CLI via GitHub Actions. Oh yeah, I spent a good bit of time setting up Codeberg and self-hosted actions, but not all of my code is open-source and the action runner didn’t work so I ditched it until I can get my own Forgejo server up and running. I need a GitHub account for qmk anyway but I don’t love being tied to things I can’t self-host. That includes Cloudflare and Neon, which is why I will be working on my home infra to support running all of the bits that I need. I’m going to be exploring a pi-clone cluster which may be a terrible idea but it sounds too fun not to try. Worst case I can revert back to the Neon Orange stack. At some point I’m going to try to learn Grafana without going insane so please wish me luck.
Thanks for reading and checking out the site. If you have any suggestions please let me know I’d love to hear!
Last updated: