# olli.works — Full Site Content
> Personal website of Olli Granlund — senior full-stack developer, entrepreneur, mechanical keyboard enthusiast, and photographer based in Helsinki, Finland.
## Pages
# Oliver Granlund — Senior AI-Native Full-Stack Developer in Helsinki region
URL: https://olli.works | Published: 2025-10-27 | Updated: 2025-10-27
> Oliver Granlund is a senior AI-native full-stack developer in Helsinki, sharing practical projects, technical writing, photography, and mechanical keyboards.
This is where I bring up my own thoughts about different subjects and keep my blog up to date
## Brief introduction
My name is Oliver Granlund, though most people just call me Olli. Online, I go by olligranlund. I’m a Finlandssvensk Senior AI-Native Full-Stack Developer located in the Helsinki region in Finland and I’m currently working as a Senior Developer at [Into-Digital](https://into-digital.fi/). I also have my own company for side gigs like development projects, photography and keyboards.
Most of my spare time goes to my lovely family, but I occasionally have time for cycling, doing repairs at home, playing videogames, or enjoying good whiskies.
[More about my personal life](https://olli.works/about-me)
## Skills & Experience
## The FMKC
## Get in touch
## My blog
When I originally launched olli.works, I also started my blog where I collect various projects from my life. At first, it was mainly meant for keyboard and tech demos, but quite quickly I felt like I could express myself on a broader range of topics.
Every once in a while, I have something worthy to write about, and here are my latest posts.
---
# About me
URL: https://olli.works/about-me | Published: 2025-10-27 | Updated: 2025-10-27
> "Who is this guy?", this page should answer some of your questions!
You already got the brief introduction on the frontpage, but let's dig a bit deeper!
## Personal life
Living in the Helsinki region means there are plenty of things to do, but honestly, I mostly spend my time with my family and friends. Being a relatively new dad takes up a lot of time, and it's definitely a challenge trying to fit my hobbies into life with kids. 🚲
## Work life
I'm a Senior AI-Native Full-Stack Developer and currently working as a Senior Developer at Into-Digital. Besides the 9 to 5 job, I also have my own company on the side for smaller gigs. I take on select freelance projects alongside my full-time role. If you've got something interesting, I'd love to hear about it 😃
You can read more about my skillset and previous workplaces here:
[Skills & Experience](https://olli.works/skills-and-experience)
## Hobbies
Everyone needs hobbies, right? Right?
### Keyboards
I'm the founder and a moderator for FMKC (Finnish Mechanical Keyboard Community). I also designed the Neito keyboard, which I sold worldwide. I always have a keyboard project going, though it’s not always my main focus.
[Fmkc.fi](https://fmkc.fi/)
[Neito Group Buy](https://olli.works/blog/neito-group-buy-a-alice-like-keyboard-with-iso-support)
### Cycling
I’ve been more of a maniac before, at one point having four different bikes in use, but I’ve calmed down and currently have only two (though desperately wanting two more). I love doing MTB rides in the forest, especially on my favorite route, [EKP 4.2](https://www.trailforks.com/route/ekp-4-2-km/), but gravel rides are also nice when the forest isn’t in rideable condition. I’d love to get back to road cycling, as I used to do that a lot years ago, with such passion that I even wrote a blog post about my longest trip!
[My longest bike ride - 250km](https://olli.works/blog/cycling-espoo-hanko-espoo/)
### Software development
Despite being a full-time developer, I still enjoy my own projects, as the challenges they provide differ from day-to-day work. I sometimes improve olli.works or build a quick tool to help with a task. One example was when I needed to know the exact location of RGB LEDs on the Neito Rev.2 firmware in relation to each other, where the most “extreme” positioned LEDs defined start/end values. By writing a script for this, I saved myself a lot of work calculating each position by hand 🔥
I think [Advent of Code](https://adventofcode.com/) is a great way to challenge yourself and see how far you can get. I’ve tried to keep up with the tasks for several years in a row and have stayed away from using AI to provide solutions.
[My Advent of code solutions](https://github.com/OlliGranlund/Advent-of-Code)
### Whisky
I have two different whisky casks aging right now, one at [Teerenpeli](https://teerenpeli.com/) and one at [Nagu Distillery](https://www.nagudistillery.com/). My collection of bottles is also steadily growing. I also like other poisons like beer and gin, but whiskies are great as they last longer and don't tend to go bad.
[Teerenpeli Cask](https://olli.works/blog/share-a-whisky-cask-with-me/)
[Nagu cask](https://olli.works/blog/nagu-cask-sharing/)
### Videogames
Despite having a huge Steam and Epic Games library, I rarely have time to game anymore, and when I do, I’m often too rusty to do well in faster-paced games. However, when I do play, it’s usually an immersive single-player game like Red Dead Redemption 2, Skyrim or Minecraft, and lately Valheim & MegaBonk. Every once in a while, I also manage a co-op session of Rocket League 🎮.
### "Tinkering"
This is a broad one. Often, when I notice a new need, I start thinking about how I could potentially solve it myself. Sometimes it’s creating a 3D model and ordering a print from Hekeke, sometimes just repairing things with or without YouTube tutorials, and every once in a while I bring out the power tools for more demanding tasks. I previously wrote a blog post about Modern DIY repairs—check it out to see the kinds of problems I’ve solved!
[Modern DIY repairs](https://olli.works/blog/modern-diy-repairs/)
## See what I've been up to lately
---
# Skills & Experience
URL: https://olli.works/skills-and-experience | Published: 2025-09-12
> I've always known I'd be working with computers; I grew up with the rise of the internet from a young age. While studying at Arcada UAS, I was fortunate enough to land my first development job, even before finishing my degree. That experience, along with the connections I made at Arcada, definitely pushed me towards entrepreneurship and building for the web. That's what I've done professionally since 2016, both at various companies and with my own. On this page, I'll share a bit more in-depth about my current experience and where I've worked.
I’ve always known I’d be working with computers. I grew up on the early, uncensored internet, landed my first developer position before finishing my studies, and have been active in several developer communities along the way. Between agency life, product engineering, and running my own company, I’ve been at it professionally since 2016.
Today, I heavily rely on an AI-native workflow to push out software harder, better, faster, and of course, stronger 💁♂️
See what skills I've gained over the years and where I've been working.
[Tech Stack](#tech-stack)
[Work Experience](#work-experience)
## Tech stack
Here's a breakdown of the technologies and tools I've worked with.
### Languages & Core Web Technologies
* JavaScript / TypeScript
* HTML
* CSS / SASS / SCSS
* PHP
### Frontend Frameworks & Libraries
* React
* Node.js
* Next.js
* Astro
* Qwik
* jQuery
* Vue
* Tailwind CSS
* Hugo
### Backend Frameworks & CMS
* Node.js
* WordPress
* HubSpot
* TinaCMS
* ProcessWire
* ExpressionEngine
### AI & Agentic Workflows
* Agentic Orchestration
* AI-Augmented Engineering
* Local LLM Benchmarking
### E-commerce
* WooCommerce
* Snipcart
### Development Tools & DevOps
* Git
* SVN
* Docker
* Vite
* Biome
* Webpack
* Babel
* ESBuild
* Composer
* Netlify
* DNS Management
### Testing & QA
* Playwright
* Vitest
* React Testing Library
* Cypress
### Accessibility (A11y)
* WCAG 2.2 AAA (with practical experience & advocacy)
* VoiceOver
* Axe
* Wave
### SEO, GEO & Analytics
* Technical & Semantic Architecture (JSON-LD, Meta, Schema)
* LLM, SEO & GEO Optimization (AI search crawler readiness)
* 100/100 Core Web Vitals ✅ (Run Google Lighthouse on this page to verify 😉)
* Screaming Frog & Google Analytics
I hope I didn't forget something 😅 Did I tick some boxes? If so, get in touch!
[Contact me](https://olli.works/contact)
## Work Experience
I’ve got to experience quite a few different companies and how it is to work with them.
## Into-Digital
**2026Q1 - Present**
I'm currently one of the Senior Developers at Into-Digital. While my main focus remains on delivering high-quality and accessible services, I've taken on a broader role in running projects, integrating AI-assisted development workflows into our tooling, and implementing my past knowledge to help Into-Digital thrive 🔥
[Into-Digital](https://into-digital.fi/)
## Granlund Oliver Egon Tmi.
**2019Q2 - Present**
I run my own company primarily to fuel my passion projects and serve as my tech sandbox. I take on a small subset of full-stack development clients using an AI-first workflow, benchmark local LLMs, and offer photo and videography services. In addition, I design PCBs and create 3D models to support my custom keyboard hobby and business.
[VAT Number: 3001992-5](https://www.asiakastieto.fi/yritykset/fi/granlund-oliver-egon/30019925/rekisteritiedot) 📈
## Linear
**2022Q2 - 2025Q4**
At Linear, I worked as a Full-stack Developer, focusing on MRR-enhancing add-on services and maintaining diverse technologies, including React, TypeScript, Node.js, Next.js and WordPress.
[Linear](https://linear.fi/)
## Evermade
**2019Q1 - 2022Q2**
I mainly worked with creating and/or improving both small and massively complex WordPress sites for clients like salo.fi, finnlines.com and sydan.fi. I led initiatives to improve accessibility (WCAG 2.1 AA) and mentored new developers in our team. In addition to WordPress, I worked with React, TypeScript and Hubspot.
[Evermade](https://evermade.fi)
## Sofokus
**2018Q1 - 2019Q1**
As a consultant through Sofokus, I mainly worked with a single large client as a Full-stack Developer, using their repos and pipelines (AWS + Atlassian).
[Sofokus](https://www.sofokus.com/)
## Mysteerio
**2017Q1 - 2017Q4**
I was most of the time working as a consultant through many hoops with Otavamedia, working on sites like Tekniikanmaailma, Dekolehti, Anna, Seura, Venelehti and Golfpiste.
[Mysteerio](https://mysteerio.fi/)
## LevelUp
**2016Q1 - 2016Q4**
Mainly working with creating fully custom WordPress websites for customers as well as contributing for Levelup’s own WordPress theme to accelerate website development. Also organised trainings for clients.
[LevelUp](https://levelup.fi/)
## Internships
These companies hosted my practice periods while I was studying at Arcada UAS
* Liideo
* Haahtela
## Got interested?
If you feel like I can help you out with something, get in touch and we'll see what problems I can solve 😊
[Contact me](https://olli.works/contact)
---
# Contact me
URL: https://olli.works/contact | Published: 2025-10-27 | Updated: 2025-10-27
> Got a question or perhaps a proposal? Contact me 😀
# Contact me
Got an idea or proposal, or perhaps need help with something? Contact me!
By Email [olli.granlund@gmail.com](mailto:olli.granlund@gmail.com "olli.granlund@gmail.com")
Via WhatsApp or Signal [+358 40 558 6455](https://api.whatsapp.com/send?phone=358405586455\&text=Hey!%20I%20contacted%20you%20because... "WhatsApp contact link")
In Discord **olligranlund** or start a chat with me in [FMKC Discord](https://discord.gg/zgmtnrR "Finnish Mechanical Keyboard Community Discord link")
By Phone [+358 40 558 6455](tel:+358405586455 "Call me")
---
# The Finnish Mechanical Keyboard Community
URL: https://olli.works/fmkc | Published: 2025-10-27 | Updated: 2026-08-27
> The Finnish Mechanical Keyboard Community brings together enthusiasts who enjoy any kinds of keyboards.
The hobby is nice but the community makes it better.
## What is the Finnish Mechanical Keyboard Community?
I’m one of the founders and a main administrator of FMKC. Despite the first organized meetup in Finland having only three participants, we’ve managed to gain attention meetup after meetup. After each gathering, the community grew steadily.
Today, FMKC brings together:
* Over 1,300 Discord members
* Several active Finnish keyboard vendors
* Meetups that have steadily grown the community
More info on FMKC\:s own website
[fmkc.fi](https://fmkc.fi)
## FMKC Website
The Finnish Mechanical Keyboard Community used to have all their previous event info and links on my site, but over time, as the amount of data grew, I felt it no longer belonged on [olli.works](https://olli.works). I built [fmkc.fi](https://fmkc.fi) for this purpose and made it open source, accepting Git pull requests with a low barrier to entry.
Read about the new site here:
[How fmkc.fi was built](https://olli.works/blog/how-fmkcfi-was-built)
## See my keyboard related posts
---
# Photography
URL: https://olli.works/photography | Published: 2025-10-27 | Updated: 2026-08-27
> Photographer in Helsinki, capturing events from nightclubs to daytime gatherings, while keeping photography as a personal hobby.
Photography kind of just happened to me, and before I knew it, I was working as a photographer at various nightclubs in Helsinki. Over the years, I’ve shifted my focus more toward daytime and evening events, as well as keeping photography as a personal hobby.
While photography is mainly a hobby for me, I enjoy taking occasional gigs. I love participating in events, which motivate me to work more creatively and push my skills.
As for delivering photos, I don’t like leaving editing on my to-do list, so I try to get it done quickly. My fastest delivery of edited photos has even been before the afterparty ended 😅.
[Let’s capture your next event](https://olli.works/contact)
While photography is a passion, I do take on select projects. If you need someone to capture:
* Portraits
* Events or shows
* Weddings
* Parties
* Products
...or anything else you have in mind that's not listed here, just get in touch! We can chat about it and see what's possible ✌️
[Get in touch](https://olli.works/contact)
---
# Privacy
URL: https://olli.works/privacy | Published: 2026-09-05 | Updated: 2026-09-05
> How olli.works handles browser storage, external content and your privacy.
# Privacy
This is a personal website operated by **Oliver Granlund**. You can contact me at [olli.granlund@gmail.com](mailto:olli.granlund@gmail.com).
## Analytics and advertising
The site does not use analytics, advertising trackers or profiling cookies. Its own code does not attempt to identify you or follow you across websites.
Like other websites, the hosting infrastructure necessarily receives technical request information such as your IP address, browser information and the requested address when delivering a page.
## Browser storage used by this site
The site stores your chosen light or dark theme in `localStorage` after you use the theme control. It also keeps a bounded list of previously loaded image URLs in `localStorage`, with a legacy copy read from `sessionStorage`, to avoid replaying image-loading effects. The service worker uses the browser Cache API to make same-origin pages and assets more resilient and efficient.
These values stay in your browser and are not used for analytics, advertising or profiling. You can remove them through your browser's site-data controls.
The image-cache storage is scheduled for a separate privacy-minimisation review. EU rules about access to a device can apply to browser storage as well as traditional cookies.
## External content
Some articles contain videos, forms or interactive examples hosted by YouTube, Google, CodePen or WordPress.com. These services are blocked when the page first loads. No iframe or remote preview is requested from them until you choose to load their content.
Before loading an embed, the page identifies its provider and explains that connecting will share technical information such as your IP address and browser information. The provider may also store or access data on your device under its own privacy policy.
Your choice applies only to that named provider on the current page. It is not saved in cookies, `localStorage` or `sessionStorage`, and it resets when the page is reloaded or left. You can also use the provider's hide control to unload its embeds again.
Provider privacy information:
- [Google and YouTube privacy policy](https://policies.google.com/privacy)
- [CodePen privacy policy](https://blog.codepen.io/documentation/privacy-policy/)
- [Automattic and WordPress.com privacy policy](https://automattic.com/privacy/)
You can always use the direct external link without loading an embedded frame on olli.works.
## Changes
This notice was last updated on 5 September 2026. It will be updated if the site's data practices change.
---
# Blog
URL: https://olli.works/blog | Published: 2025-10-27 | Updated: 2025-10-27
> Here I share my ideas and highlight various projects and demos I’ve worked on.
Here I share my ideas and highlight various projects and demos I’ve worked on.
**Uh oh, you scrolled until the end, there are no more blog posts here 🆘**
If there’s something you’d like me to try out or write about, get in touch and we’ll see if you have something interesting to suggest 😊
[Contact me](https://olli.works/contact)
---
## Blog Posts
---
# Visiting our Nagu Distillery whisky cask
URL: https://olli.works/blog/visiting-our-nagu-distillery-whisky-cask | Published: 2026-08-21 | Updated: 2026-08-21 | Tags: whisky
> I finally visited Nagu Distillery's new premises and got to see and taste our shared whisky cask for the first time.
One of my goals for this summer was to visit Nagu Distillery's new premises and finally see our shared whisky cask in person. We had talked about making this trip for quite some time, and finally found a free Wednesday in July. Here is a short story of the day, with plenty of photos!
## An early start from Espoo
It was an early morning in Espoo. After helping with the kids, I quickly drove our electric car to maintenance in Helsinki. I got a hybrid as a replacement, which meant I could forget all the charging strategies I had planned and simply start driving 🏎️
I picked up my friend from Ekenäs, had a coffee and we headed towards Nagu. Once we got off the highway and got closer to Pargas, we started to see some beautiful scenery. When we finally arrived in Nagu, I had driven around 275 km and spent almost four hours behind the wheel.
## Nagu Distillery's new premises
Nagu is a small place, so the new distillery is easy to spot on the left side of the road when arriving in the centre. The new premises were built where the old Nagu Korv och Spik used to be. There is plenty of parking and you enter through the terrace.
The inside is one big open space where you can order drinks, hang out and see what is happening on the production side. We got a tour of the distillery and saw what they had been working on.
## Down to the cask cellar
After the production tour, we headed downstairs. The stairway was still very much under renovation, but it led us to the cellar where some of the casks are stored 👀
As soon as the cellar door opened, we were hit by wave of a lovely whisky smell! Only a small part of Nagu Distillery's casks were stored there, but luckily our cask was one of them.
## Finally meeting our cask
We got to taste the contents of our cask and also filled a small bottle to take home for a more focused tasting. I find it hard to give any useful judgement on the spot. The "whisky", or distillate as it technically still is, had been ageing in the barrel for two years and two months.
My first quick impression was that it was sweet, maybe with a hint of elderflower. I know the taste is probably what most of you are interested in, so I will sit down with the sample in peace and update this post with proper tasting notes later 👌
## A few other things to taste
Our cask was not the only thing we tasted. We also tasted fresh distillate and whisky from another cask using the same base distill. We also tried a whisky which, if I remember correctly, was made by distilling a failed batch of beer from Kimito Brewing.
The Kimito beer-based whisky was quite unusual and did not taste like traditional whisky, probably because of the hops, but was still very enjoyable. I heard that you might be able to grab a bottle of that later this year if you are lucky 😉
Nagu Distillery has also started selling their own beer. They do not brew it themselves: the ingredients come from the nearby area, while the brewing is done by Stallhagen in Åland. It clearly tasted like a Stallhagen beer, which was not a bad thing, but I had hoped for a unique Nagu flavour profile. I am not sure if the malts are similar because both places are in the archipelago, or if the familiar taste comes more from the equipment and Stallhagen's brewing know-how. We still bought several cans to take home, as they were cheaper at the distillery than in the nearby stores 💁♂️
## Lunch at Söder
After the tour and tastings, we went for lunch at a nearby burger place called Söder. I had last visited around four or five years ago and the quality was still just as good. The food also offered really good bang for the buck.
We made a quick stop by the harbour and its small stalls before getting back on the road.
## Kimito Brewing and distillery
On the way back we stopped at Kimito Brewing. They were open, so we bought a few beers and also got a tour of the brewery. The brewery smell immediately reminded me of the old brewing days with TLK Bryggeriklubben.
They also have a distillery, which I did not know before the visit. They are not planning to make whisky, though, as they do not believe producing it would be profitable for them.
## A good summer day
After around 440 km behind the wheel, frisbee golf, grilled food, whisky samples, Rocket League and football made for a pretty solid ending to the day!
## The story behind the cask
If you missed the earlier post, you can read more about the shared Nagu Distillery cask and how this all started.
[Read about the shared Nagu whisky cask](https://olli.works/blog/nagu-cask-sharing/)
## See my other whisky-related posts
---
# Website refresh - part 2
URL: https://olli.works/blog/2026-website-improvements | Published: 2026-05-09 | Updated: 2026-08-27 | Tags: development
> Phase two of the site refresh: QwikCity tested and scrapped, Tina visual editing in Astro, LLM benchmarking, further image optimizations, and a drafted search feature.
At the end of 2025 I did a website rework, switching from my old Hugo + ForestryCMS stack to [TinaCMS](https://tina.io/) + [Astro](https://astro.build/) & [Qwik](https://qwik.dev/). One of the main goals in that rework was to hit a perfect 100/100/100/100 [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) score, and I actually managed to do that, but despite the speed, there were still some issues (or features, however you like it) that needed to be addressed.
Lets go through my findings!
## Goals
I had a pretty clear vision on what I wanted of my "round two" of my new website.
- Even better Lighthouse scores (target lower digits)
- Potentially change stack to QwikCity
- TinaCMS visual editing
- Resolve MDX renderer issues (eg. 2nd level lists were not working)
and ontop of these I had a nice to have feature that is still to be implemented:
- Search feature
## Did QwikCity improve the site?
As I already used Qwik in all the components on the site, and its Astro support was in Alpha/Beta state when I initially took it to use, I thought that perhaps doing everything the [QwikCity](https://qwik.dev/docs/qwikcity/) way would result in some improvements in speed, or at least simplify the logic of my setup. As I discussed about this in the QwikJS Discord, one user pointed me in the direction of a repo that actually used QwikCity, all components as Qwik components, and TinaCMS visual editing was working flawless. As you can guess, I was hooked!
I pulled down the repo and started digging in. With the help of various LLMs, copying my content, structure and components over to this new base went very easily. As this was a test, I worked on this in a new repo to keep things clearly separated. It didn't take long before I had most of the features done. Migrating the content turned out to cause some headache as the MDX structure was not identical, 90% of the content migration went smoothly, and rest of the content needed special attention.
**Alright!**
So now I had my site running on QwikCity, looking identical as before, but having also the visual editing possibility. I was ready for the Lighthouse test. I ran it and the result was ... the same as before...
Turns out that in the midst of seeking the best bleeding edge stack to get maximum performance and/or feature benefits, I was fully oblivious to the main reason you want to use static sites, having the site be static. **It turns out that it doesn't really matter how fast or slow your static site generator (SSG) is as long as the output is optimized.**
In my case, we had the potential to get some benefits from having less wrappers for components, but the results speak for themselves as there was no clear benefit with the stack change. I do also prefer Astro over QwikCity as Astro's more flexible and has a more mature ecosystem, it's clear that the insignificant benefit that I might get right now from QwikCity is not worth it.
### TinaCMS visual editing in Astro
And we are back with the old Astro site. Since I had experienced that QwikCity could run with the [TinaCMS visual editor](https://tina.io/docs/contextual-editing/overview/), I knew that Astro must also be able to run that way somehow. As the trend goes nowadays, I put a LLM working on said task, and after several trial & error iterations, we had the visual editor working in the same was as with QwikCity, this was (for the moment) my final nail in the coffing for QwikCity.
## Content and parsing fixes
My old content parsing logic worked in a way that I turned every element into a JSX element, and this simplified the rendering logic for the most part. This still caused some issues with elements being at a depth, so eg. a list withing a list was not possible, and the LLMs of 2025 Q3 were good helpers but not yet so good that they wouldn't make mistakes in a niche-stack repository, hence the solution I had was hand made. It was time for the 2026 LLMs to give a shot!
It turns out that by simplifying the render logic and not doing the JSX-wizardy, the rendering of content sections started working properly! This is a good reminder that if you can do something in a simpler way, it is probably worth doing so.
While I was up to speed with the LLMs, I also had them cleanup unused CSS and deps. I also asked for a optimixation plan, but any potential speed/performance boosts that we tried applying were causing a lacking user experience or breaking the site. I knew that there was not much to be gained, but felt that it was worth a shot.
## Search feature (drafted)
i've been thinking if I should have a search feature on my site. I do feel that I don't have too much content on this site, but if a user were trying to find something about tech/coding, a search could guide them in the right direction eg. to my CV or to some blog post about some mundane topic.
I got quickly drafted a initial version of the search, only missing microanimations to finalize it. I'm still tho twosided should I even have a search or not. Right now it's still drafted, but what do you think, should I implement it or not?
## Final yappings
This update post was quite not dramatic, but I did learn my lesson with the static site logic.
I did also try various LLMs and services to redesign my site, but none of the redesigns really felt like "me", so I'm sticking to my old precious super barebones styles that I've used for years.
As for the text contents, I still write my blog posts by hand, and use AI to just polish the texts and handle typos. I feel that as content generation is easier than ever, having your own tone of voice brings a certain kind of human touch to the content.
**It's odd that you kind of start to appreciate the non-perfect output since it sounds human, and that's the way I want to keep on making these blog posts.**
## See my other development blog posts!
---
# 2025 Website refresh
URL: https://olli.works/blog/2025-website-refresh | Published: 2025-10-27 | Updated: 2025-10-28 | Tags: development, presentation
> My old website had flaws. See how I rebuilt my entire site from Hugo to a new Astro/Qwik stack, fixing broken services and hitting perfect Lighthouse score.
Despite liking my old Hugo site and it being fast, it had its flaws. Over time, issues came up that would have required a repository migration from BitBucket to GitHub and additional logic changes in the code. I never felt motivated to resolve the issues, as I knew the site could be built in an even better way.
I ended up redoing the whole site on a new base to get it to a point I'm (mostly) satisfied with.
## Old Hugo site
I originally built my site to have a place to share my own projects, mainly keyboard related back then, but as the content was made for that time period, I noticed it didn’t age well and certain sections became outdated. The old site also had some dynamic pages based on tags, but I had forgotten to build templates for those, so essentially there were broken pages (though they were hard to find).
I did, however, like the base layout of my old site, having every page work in a similar manner and the content be block-based for presenting information in a flexible format.
## Things that broke down over the years
When I originally released the Hugo site, everything was working just fine, but as we all know, services can sometimes stop working and replacements need to be found, but I never got to fixing these as they were not always small things:
### Forestry CMS 💀
I really liked Forestry, and it provided a free tier that allowed me to make quick content changes on the fly. Forestry was discontinued at one point, and the team moved on to work on Tina CMS, a very similar CMS but with its own tweaks. I would have migrated over, but Tina required the repo to be on GitHub, so I never got around to doing the migration, as I would have needed to redo the deployment pipeline as well.
### Netlify Image Transforms 🪦
I used the service to adjust my images into a more optimized format so that I could focus on content and let the service downscale the images depending on the block they were used in. This service, however, was ended in favor of Netlify Image CDN, another similar service that worked in a slightly different way. Since my site was still fully functional, I never got around to implementing it.
### Deprecated text content 👵
When I released the site, the content was tailored for that moment in my life. As the years went on, I noticed that the content on the non-blog pages no longer reflected me in the same way, as my priorities had changed quite a bit. Lesson learned: when making non-blog content, keep in mind how it will age and how to make it cause less work for you in the future.
## Goals with new site
When planning anything, having goals makes it clear what you want to achieve. As this was a project I did for myself, I knew I had set the bar quite high, and in the end I had to take some shortcuts to reach the goal, as one cannot keep working on a single project forever.
* Super fast site (static)
* Tina.io support
* Qwik support (nice to have)
* Lighthouse score 100 in all categories
* Previously mentioned issues resolved
* Slightly modernized visuals (using Tailwind)
* Dark/Light switcher
* Modernized and more mature content
* Use a more up-to-date profile photo
I knew these were possible to achieve but there was definitely work to be done.
## Hunt for the optimal stack
I had been interested in trying out a JS framework called Qwik, as it promises dynamic components without hydration, which could also help me get a better performance score. Qwik itself, however, is only meant for the client side, and I needed a framework to handle all the routing and data mapping. That’s when I stumbled upon Qwik City.
Qwik City focuses on the server side of things like pages, routing, and data handling. I gave this a shot and quickly got stuff to show up, but when I tried to get it to work together with TinaCMS, I was out of luck. Qwik City is still (at the time of writing) a quite new framework and doesn’t offer much flexibility, so I was forced to look at other alternatives, and that’s when Astro looked promising 👀
[Qwik](https://qwik.dev/)
[Qwik City](https://qwik.dev/docs/qwikcity/)
### Builder.io?
Builder.io, the main supporters of Qwik, provide a CMS experience that’s a little Figma-like. You can visually create your own site and use AI tools to generate specific elements in Qwik. This sounded too good to be true, and I gave it a shot. Unfortunately, at least when I tried it, the results were not that impressive, and the AI was only capable of making very simple elements. I also found the UX a tad confusing, as you are simultaneously editing component layouts and text content.
I quickly gave up on this because I did not want my editing experience to be so clunky. I didn’t need millions of tools to create elements; I wanted simplicity and limited editability, and if I needed something more, I could develop it myself.
### Astro + TinaCMS
Astro is a framework meant to be very adaptive with various stacks, allowing you to mix, for example, React and Vue on a single page without hassle. The challenge was that I needed TinaCMS to edit and create files in a structure that could be read by Astro as the page structure. I started with pure .md files, and after some tweaking, I actually had the base structure working 🎉
[Astro](https://astro.build/)
### Final piece of the puzzle 🧩
Around the same time as I got the base Astro + TinaCMS working, a new package called @qwikdev/astro was released, bringing Qwik support to Astro. I was one of the earliest users of this package and helped out with bug reports. My plan was to use it on my site, but as you might have noticed, making this site took quite a while, so I can’t call myself an early adopter of the package 😅. I had to switch from .md to .mdx to fulfill my needs, but that was luckily no problem for TinaCMS nor Astro 👍
**This was it!** TinaCMS for handling content, Astro for handling all routing and base logic, and Qwik for all components in the frontend. My stack was decided and PoC was done; now it was time to get to work and actually build the site!
### Full Stack for clarity
* Astro
* TinaCMS
* Qwik
* Tailwind 4.0
* Netlify
## Content structure & .mdx parsing challenge
The way I wanted to handle content was block-based, each block having its own specific content fields (whether text, selected values, or media), and then the block is rendered with its own structure. By making blocks work after each other in any order, I created a flexible system that is super fast to add content to, and you can be sure the visuals always look right, as you are never touching the HTML structure.
This approach is similar to **WordPress ACF Flexible Content/Blocks** or **only using Gutenberg patterns**. When I create content, I don’t want to think about the technical stuff, just do the content and stay as much in the flow as possible.
### The Parsing Challenge
TinaCMS supports adding custom elements in its .mdx content. Often, if that were vanilla JS, it would be easy to parse, but since we were using Qwik components, we needed a parser that understood the JSX components were supposed to be handled as Qwik components, not vanilla JS. **This caused a lot of issues…**
I tried many workarounds, and AI tools couldn’t come up with a solution either, as they hallucinated wrong answers. Fixing one issue would cause two new ones.
**In the end, I decided that the parser should, instead of trying to separate out the JSX components, turn every element into JSX with its own props.** That turned out to be the temporary (read: permanent-ish) solution that worked. This way, I could have classic HTML but also render Qwik components like buttons without an issue. It wasn’t perfect, but in this situation, I was happy with the solution until I found something better. Also, since it was good enough, I could move on to other things and potentially fix this in its own MDX-render function later.
## Image Optimization
Let’s be realistic, on most websites the thing that slows the site down is unoptimized images. A single unoptimized image can easily be, at worst, the size of several fully optimized sites with images. Google Lighthouse is also pretty aggressive at pinpointing the potential bandwidth savings with smaller images and better formats. I didn’t want to optimize images manually, so everything needed to be done either in the build process or by an external service, and I ended up choosing the latter.
### Netlify Image CDN
Similar to my old site, I utilize the tools Netlify offers and decided to use Netlify Image CDN for my image optimizations. The CDN also provides the possibility to create a blurhash, similar to what services like Wolt use.
### My optimized solution
I had a vision to have my images initially blurred, and when nothing else is blocking loading, we load the necessary sized optimized images. As we have loaded the small blurred images and scaled them up to size on the page, we can inspect their rendered size and use that info to load a optimized resolution version from Netlify Image CDN. Contained images are loaded more naturally, but all cover images are scaled in one way or another to cut away pixels which would not be anyways shown. I've also set some breakpoints that retrigger the loading of the images so that we don't get very zoomed goofy images at any point.
Yes, it does require JS to run, but I feel that in my use case (and by being lazy) srcset would never be optimized enough that I could use that. As the layout is dynamic, images are scaled in different ways and setting up srcset to work better would require setting it up in a different way for each image-render position, yet it would not be perfect, when my solution is again more flexible and lives with the moment.
I don't load the perfect optimized resolution image ever as I round up the needed images by 25px so that I won't cause a AWS/GCP outage 😂
### Caveats & my two cents
Making this image component was far from easy, as I wanted to do it using a pure `` tag with object-fit instead of CSS background images. I ran into issues with scaling, weird behavior with the object-fit rule, and a game of whack-a-mole trying to get the images to work in cover vs contained. In the end, I got it working reasonably well, but I feel it can still be optimized further. At some point, however, you just need to settle for “ok” to eventually finish a project instead of endlessly trying to resolve a minor detail.
## Header
I wanted to keep the Header similar to my old site, having the logo and a hamburger menu, but also adding in a theme-switcher. I'm a heavy user of dark themes wherever possible, but I know that there are some physopaths who like burning their retinas with light themes (jk).
On my old site, I had a sidebar that animated in, but as I scrolled through Siteinspire for inspiration, I came across a fullscreen menu with the site owner’s image next to the links. I thought that was a clean way of showing the links while still reminding the reader who is behind the content.
I also added some micro-animations to the icons in the header. Most users probably won’t notice them, but I felt there should be something more than just a fade 💁.
### Theme switcher
When implementing a theme switcher, you need to think about the best way for it to make a change. You could replace your whole content with something different, but I chose to use CSS variables to decide the colors for all elements. This way, we can use the prefers-color-scheme CSS media feature to detect user preference and apply the right CSS variables. If a user wants to switch the theme, we need to store the change somewhere, so I used localStorage to save the setting.
## Content
Since one of my goals was to update the content, I actually made the drastic change and removed some pages:
* Keyboard services (ain't got time for that)
* Keyboard (base hobby page)
And the pages that got a major rework:
* Frontpage
* Development (Now [Skills & Experience](https://olli.works/skills-and-experience))
* FMKC (directing traffic to [https://fmkc.fi](https://fmkc.fi))
As I aim for a perfect Lighthouse score, every image needs an alt text. Since I hadn’t added them previously too all images, that took a while to resolve...
Redirections were also made for the changed URLs to avoid any SEO penalties.
Additionally, when I released this site, I added a few new blog posts to give visitors more reasons to explore the new content, not just because the site is new.
## Ecological impact
There has lately been quite a lot of talk on LinkedIn about the ecological impact of websites, and various companies have tried to claim their sites are eco-friendly, but I beg to differ. **Many companies still rely on non-optimized systems that save time and money and keep production costs down, but these are precisely the sites that would benefit most from going static, as they tend to have larger user bases.**
I want to use my site as a demonstration on how one can still make a fast and usable site with reduced carbon footprint. Both my new and old site scored a 92% on the Website Carbon Calculator. **This translates to just 0.09g of emissions per visit, an A+ rating, making them more ecological than 92% of all global websites.** You should tho takes scores from this site with a grain of salt.
**Despite my new and old site are built in different stacks, the new site is much more optimized.** By building a static site, avoiding unnecessary caching layers, relying on native fonts, using Qwik to load only what’s needed, and optimizing images heavily, this site is a example on how to deliver excellent performance while keeping ecological impact in mind.
[Website Carbon Calculator](https://www.websitecarbon.com/)
## Cutting corners
This project probably has the worst possible person chosen to judge the site and suggest improvements, and that's me.. Being somewhat of a perfectionist, I’ve many times had to push myself to stop improving things and just “ship it.” Luckily, I can improve this site further in the future, as I had to make compromises with certain features.
### TinaCMS Serverless hosting
One of my goals was to edit content like in ForestryCMS, on the go and anywhere. TinaCMS offers a self-hosted option, but setting this up is no easy feat. I tried getting it running on Netlify functions without success, and TinaCMS members tried to help, but with no results, one even saying after lots of debugging “use Vercel" 😂
I did try Vercel but faced similar issues. Since I wanted to use Netlify Image CDN, I decided to give up and settle on plan B: always host TinaCMS locally to make changes (or edit .mdx files on GitHub directly).
### Content parsing issues
This is probably the first thing I'll revisit and see if I can resolve. Most tags work without issues but I noticed that if I do a list inside a list, a nested list, my parser breaks and renders the whole list in a very weird way with some HTML tags rendered as cleartext. I had to make some adjustments to my older blogposts because of this. No big deal, I can live with this, but it would be nice to get fixed 😶
### Visual design
Despite having a sharp eye for pixel-perfect alignment, I wouldn’t want to be solely a web designer. I like clear visuals without distractions and have come to like my current layout, as it follows a pattern, is simple, and doesn’t confuse users. The site could perhaps look better in some ways, maybe by adjusting gradients or colors, but I worked to get it to a point I’m currently satisfied with and may revisit the design in depth later.
## Summary
Final Lighthouse Score: **PERFECT**
The result of all this work:
* Desktop: **100/100/100/100**
* Mobile: **100/100/100/100**
At first I only got 99 in performance, but once I switched over to a ignito window without chrome plugins, I was able to get a perfect score! Lighthouse seems to complain about images, even though all are optimized via Netlify. You shouldn’t focus solely on Lighthouse scores, but they give a pretty good indication of how the site performs. I'm satisfied with my score 🎉
If you’re interested in a site that performs at a similar level, get in touch and we’ll see what we can do!
[Get in touch](https://olli.works/contact)
## Phase two?
As you’ve noticed, I’m happy with my site, but there are still some issues to address. At the time of writing, I’ve already made a long list of To-Dos to make the site simpler, faster, better, and more future-proof. I might even write another blog post on this phase two update if there are enough things to cover.
## See my other development blog posts!
---
# How fmkc.fi was built
URL: https://olli.works/blog/how-fmkcfi-was-built | Published: 2025-10-27 | Tags: development
> A quick project to make a website for the Finnish Mechanical Keyboard Community to have a proper place to host information about the community.
For years, I hosted information about old FMKC (Finnish Mechanical Keyboard Community) events on olli.works, but as the number of events grew, I realized my site was no longer the right place for them. These should have their own dedicated site, which led to this quick project of setting up a site with free hosting.
[fmkc.fi](https://fmkc.fi)
There had been many discussions about creating a fmkc.fi website or docs to host important information, as well as niche topics relevant to the Finnish community (like keycap NorDe support), but there always seemed to be a reason not to pursue it or to stop using solutions like a Hugo Docs site managed with ForestryCMS.
I had enough of hosting the content on my own site, so I decided to just do it—and hopefully this encourages others to help out as well.
## The stack
As I was familiar with Astro from building this site, I came across a version specifically made for docs pages that promised easier setup: Astro Starlight. So here was the stack for this project:
* Astro Starlight
* Catppuccin theme for Starlight
* Github Pages
Nothing more, nothing less, just a simple setup, maybe some custom CSS and all the content in markdown files.
[Starlight](https://starlight.astro.build/)
[Catppuccin theme](https://starlight.catppuccin.com/)
## Setting things up
Starlight was a breeze to get working, and since we were using a template, there were no major issues. I did, however, add some custom CSS tweaks to make the templates look a bit nicer, but nothing major.
Perhaps the largest task was importing all the data by hand. At the time of writing, there were 17 meetups to document. Thankfully, I had information on most of them from my own site, but many of the image album links had broken, so I had to contact various people to host the photos elsewhere instead of on Imgur.
## End result
The final site is simple yet clean and gets the job done. I’ve also managed to encourage other members to make pull requests, so I don’t have to maintain it all by myself.
## See my other related posts
---
# Own a share of Nagu Distillery's first whisky casks!
URL: https://olli.works/blog/nagu-cask-sharing | Published: 2025-05-26 | Tags: whisky
> A rare opportunity to own a share of the first whisky barrels aged by Nagu Distillery!
I'm organizing once again a shared-cask opportunity, but this time with a cask at Nagu Distillery. The thing that makes this special is that this is one of the first whisky casks from Nagu Distillery and I feel privileged to get to be a part of owning one of them. Due to the limited nature of this cask run, I have already secured my cask, but I'm willing to share its contents with you!
### 10/10 shares taken
## Preliminary words
Last time when I organized the cask-sharing opportunity, we didn’t get the barrel before we had everyone involved and all shares verified. This time though things are little different. I have already secured the cask, made the contract and paid the initial fee, but I’m pretty certain that I would be happy with a lesser amount than the full barrel, and hence I’m sharing it with you!
## About Nagu Distillery
Nagu Distillery is on paper nearly 30 years old, but the distillery had a long idling period and was resurrected by a few fellows in Nagu. Nagu Distillery has mainly produced Gin, which have won some awards, but my personal favorite is their Akvavit that is the perfect companion for crayfish parties. Now Nagu Distillery is taking steps towards whisky production, at first with this non-smoky distillate, but later maybe with some smoky options as well.
[Nagu Distillery](https://www.nagudistillery.com/)
## The cask and distillate
**Cask:** 55L American White Oak\
**Distillate:** Nagu Distillery's own non-smoky distillate \~60%
I have sadly not had the chance to taste the distillate yet, but based on how much I like their Gin and Akvavit, I trust that the distillate in itself is high quality.
## The proposal
I’m offering you a chance to own a share of this historic whisky cask. Owning a whole cask by yourself can be a bit too much to handle, and that’s the way I also feel. This is a hassle-free way to get your hands on a share or two as I’ll handle everything with the whisky and will be in touch when it’s time to give over the bottles. In return, I’ll take a few bottles from the total count as compensation for organizing this experience. The remaining bottles will be divided equally among the shareholders. Any extra bottles will be raffled among the participants and affect the final price for each share.
Once the whisky has been bottled, we can arrange either a pickup in Espoo, or have these somehow delivered to you at your expense.
## Prices
In total this cask with content, bottling and other fees cost together around 6000€, so 1/10 share is approximately 600€
Initial cost: 350€ per share
Taxes and other expenses upon bottling: approx. 250€/share
Estimated outcome: Hoping atleast 6 bottles as cask strength per share
The final bottle count is verified upon bottling, and as we do cask strength, this reduces the bottle count vs. diluting the whisky down to 40%.
Nagu has promised in the contract at least 80 bottles of 40% whisky, but I have confirmation that they can also bottle our whisky as cask strength. This will however cut down on the bottle count.
## Schedule
**Spring of 2024**
The cask got filled and started maturing.
**2025 Q1**
I made a contract with Nagu over one cask and paid the initial fees
**2025 Q2**
Cask shares are assigned
**Between 2027 - 2029**
Updates will be provided on the whisky’s progress. The contract I made with Nagu Distillery offers initially 5 years of aging. There is no hard stop deadline for when the bottling happens, the whisky is done when it is done.
**(if necessary) Between 2029 - 2034**
In case the whisky is not ready, we can extend the contract for a few years.
**Between 2027 - 2034**
Bottling time when the whisky is done!
## Risks
The contract I have made with Nagu states that the risks with the cask are all on Nagu Distillery until I have collected the bottles. The whisky cask is insured so any potential natural issues e.g. cask leak should be covered. Exceptions to this are circumstances beyond reasonable control e.g. war, pandemics or shitty decisions made by our government.
## Transparency
I intend to be open about the situation with the cask and its contents and will provide updated whenever there is something to share. Since the cask will be maturing in the Nagu archipelago, I won’t be able to visit the cask too often, but I’ll try to get my hands on some samples over time so that you will get some idea on how the whisky is maturing.
## Participate
Don’t miss this opportunity to own a share of my Nagu Distillery whisky cask! Fill out the form below to secure your spot. Only join if you’re 100% committed and financially prepared for this long-term investment.
## See my other whisky-related posts
---
# Neito Rev. 2 Collaboration Opportunity
URL: https://olli.works/blog/neito-rev.2-collab-callout | Published: 2025-01-03 | Tags: keyboards
> I'ts been too long since Rev. 1, but sometimes life happens and things take longer than anticipated. Now, however, progression has happened!
It’s been far too long since Rev. 1, but sometimes life happens, and things take longer than expected. Now, however, progress has been made, and I’m looking for collaborators to help bring it to life!
## Why has it taken so long?
**Neito has always been and will always remain a passion project of mine. Realistically, I might never be 100% satisfied with it.** I was super excited about Rev. 1 and learned a lot from the experience, both about PCB/CAD design and the business side of things. I decided to cut the first group buy short due to potential issues, and I’m glad I did, as there were quite a few surprises, ranging from production challenges to bookkeeping complications.
The group buy gave me a bit of burnout, but I still decided to push forward with the next iteration of the project.
Rev. 1 was, and still is, awesome—it’s even my daily driver to this day. That said, there are aspects of it that could be more premium. However, achieving premium quality doesn’t happen overnight, nor is it something that can be invented on the fly.
## The progression
When I started working on Rev. 2, I initially thought about just slapping in some hotswap sockets and calling it a day. But I felt that would be the lazy way out and wouldn’t make the board feel more premium. I knew it needed something more—more features and a different kind of case. That’s when the iterations began. **At that time, KiCad was at version 5.x.**
## Iterations
I’ve scrapped the Neito project a total of 5–6 times and started over from scratch. Some of these iterations will never see the light of day, but I can summarize the main ones into these three below:
### ATmega32u4 Hotswap
The first iteration focused on simply adding hotswap sockets while keeping the trusty ATmega32u4. However, since this design came together quickly, I felt that pairing it with a stacked acrylic case wouldn’t be justified. Plus, I found myself craving more RGB LEDs.
### STM32
Taking inspiration from how the Gondolindrim Apollo87 was designed, I created my iteration of Neito using the STM32 chip. Getting the prototypes to work was nothing short of a small miracle, but with some jumper cables, I managed to get the board operational. The RGB LED placements were calculated using a small Tampermonkey script I wrote, and I had most things working—except the plastic on the JST ports turned out to be too brittle.
The experience of working with the STM chip after using the ATmega wasn’t a pleasant one. I felt the board had become overly complicated for what it was.
### RP2040
After a long break, I decided to give it another shot using the RP2040, as it greatly simplifies the design. And this is where things stand now! **Also, KiCad is at version 8.x 😂**
## What’s new in Rev. 2?
### Layout
The ISO-Alice layout has always had an issue with gaps. I took this as a challenge and spent far too much time in Fusion360, turning the sharp turn into a smooth curve to hide the gaps. Each key in the *curve* is set at a slightly different angle.
One concern was that some keys might overlap, but when I tested it with MT3 keycaps (which should be the widest ones), the tolerances allowed for these small overlaps.
### PCB Design
This time, Neito is hotswap, just as Mechmerlin had wished. The PCB is now a 4-layer design, with all traces routed inside the board. I had issues in the past where surface scratches on the PCBs caused the keyboard to malfunction. With this design, debugging is more difficult, but the end product is sturdier and has a reduced risk of scratch-related issues.
### Connectors
The original Neito had only a Type-C port, and that worked fine. However, the trend is shifting toward gasket-mounted keyboards with daughterboards, so supporting this would be nice to have. I felt, though, that part of the original Neito's spirit would be lost if I didn’t allow for custom solutions without a daughterboard, so I decided to include both options, so that one can choose to either go the premium route, or perhaps make their own custom case for the PCB!
## Looking for Case Collaboration!
Here’s where you come in. I’m seeking collaborators to design cases for the Neito Rev 2 PCB. The idea is that I would focus on the PCB and firmware, but let others handle the case design. I’ve made a proto-case design already, but I’m pretty sure you might be better than me at CAD and can design something aesthetically pleasing.
[Let’s collaborate ✌️](https://olli.works/contact/)
## Next steps
There are still some things I need to do with the PCB, but I have a vision for the final product.
* Fix remaining PCB issues.
* Finalize the firmware.
* Order release candidate versions of the PCBs.
* Work with collaborators to create cases.
* Launch a group buy.
## My goal
As mentioned, this is mainly done as a passion project, as there is nothing quite like this sold in stores. The Keychron Q8 ISO is available, but it’s not the same as what I’ve designed. As a primary goal, I want a new Neito keyboard, and as a byproduct, I’ll try to get this up for sale worldwide.
## Collaboration
Want to participate? Send an email, and let’s discuss how we can bring the Neito Rev 2 to life together.
[Contact me 🔥](https://olli.works/contact/)
## Other Keyboard related posts
---
# Vortex Model M SSK kit review (Sponsored)
URL: https://olli.works/blog/vortex-model-m-ssk-kit-review-sponsored | Published: 2024-04-13 | Tags: keyboards
> Review of the new Vortex Model M SSK keyboard Kit. This is a sponsored review but I'm not sensored in any way and can give my honest opinions.
This kit was supposed to arrive the 2nd of March 2023 but was delayed for over a year due to various reasons. After the long wait, I finally received this highly anticipated keyboard for testing and it did impress me in some aspects! The end result is a pretty solid keyboard but there are a few caveats which might or might not matter to you.
**It finally arrived!** Ever since I first laid eyes on it, I knew I had to try it out. While I'm not usually drawn to retro-styled keyboards, there was something about the Model M that intrigued me. I've tested an original Model M before, but the buckling springs didn't quite suit my taste. So when I discovered that Vortex had created their own version, I was immediately interested.
[Model M SSK kit](https://vortexgear.store/products/vortex-model-m-ssk-kit?ref=6ctx9y82)
[Vortex store](https://vortexgear.store?ref=6ctx9y82)
*Note, affiliate links that might provide me with a small kickback from purchases. If you are located in the EU, I would suggest making Vortex item orders from EU vendors, and I'm explaining why later on in this blog post.*
## Transparency
I want to be upfront about the fact that Vortex provided me with this keyboard for "free". However, I insisted on sharing my honest thoughts in this blog post and taking the keyboard to various meetups I attend. The opinions expressed here are solely mine, and Vortex had no influence on what I write. I prefer to be straightforward with my opinions rather than sugarcoating them.
## Vortex Model M SSK Kit
Type-C Wired board
ANSI / ISO Layout
WK / WKL
QMK/VIA/VIAL (Your mileage may wary!)
N-Key Rollover
Gasket Mount Structure
Per-key RGB
1.6mm PCB
As this is a more premium kit, you have to source switches, stabilizers and keycaps from somewhere else. It's quite uncommon for Vortex to make a board that is not right away usable, but perhaps they want to have a step into the "custom mechanical keyboard scene" with this entry.
## Instructions
Vortex has previously lacked instructions on how to assemble their keyboards, but this time we actually get a proper guide. The guide is, for the most part, pretty good, but there are a few sections that are somewhat hard to understand, especially regarding cable routing. Additionally, there were some images where connectors were flipped compared to what I saw on the board, but I still managed to build this keyboard and the guide was mostly helpful.
## CNC case
I was slightly worried about the quality of the case after hearing about the production issues. Apparently, the case manufacturers had caused several defective products, and that’s one of the reasons this board has been delayed. Vortex even says on the sales page, "Slight scratches to a case or any components are acceptable to our quality standard," but upon checking the case, I could not see any flaws. I may be lucky; the coating quality is okay and didn’t get damaged during assembly, and the case looks great. I think the coating could look better, but it seems to do the job well. I would have loved to get a non-coated board, but Vortex doesn’t offer that, sadly.
The case has a small detail that might be annoying to some of you. The CNC'd curvature by the switches looks nice, but it’s frontal part somewhat pointy towards the user. If you look at the original Model M, the pointyness is only towards the monitor, never the user, and some might find this annoying, even though your hands won’t touch the pointed bit during normal use.
## Cushions
I knew that the keyboard would come with foams to put everywhere, but I was surprised that this time Vortex did actually include some additional foam pieces to support non-ANSI layouts. With the earlier board, Hellcat, there were not enough (or nicely separated) foam mats to add under switches if you built it as ISO, but with the Model M SSK Kit, there is no question on which pieces to cut out or if there is enough! The kit comes with foam for both between the PCB and plate, under switches, as well as under the PCB. Gaskets for the gasket mount are also provided.
Note: The kit does not come with pieces for under the stabilizers, you need to source those elsewhere if you want them.
## Foam mat hint
When assembling the board, I noticed that the foam mat did get misaligned pretty easily, but by easing the screws that keep the PCB and plate together, you can realign these easily with, for example, a small screwdriver.
## PCBs
The kit comes with 2 PCBs: one main one for the majority of the keys and one for the F-row. The main board is based on an STM32 chip and should be more than sufficient to handle QMK and all the macros that you want. It seems like depending on which configuration you get, you receive a different PCB, so make sure that you choose the right one the first time if you plan on ordering this kit.
## Assembly
The assembly of this kit is similar to following a Lego build guide, quite simple and straightforward. However, I did encounter one challenge with the assembly, and that was how to connect the two PCBs together when assembling the case. The connection was clear, a ribbon cable was provided for this, but due to the short length of the cable, it was very difficult to attach the cable between the PCBs and assemble the case. Vortex could have made this ribbon cable longer as there is space in the case to tuck away any additional cabling.
I also had to improvise a little bit by cutting one of the gasket mount foams a little bit to make it easier to install the ribbon cable.
## Switches
At first, when I knew that this build was coming up, I wanted to buy some exciting and/or odd switches which still had the chance of being endgame switches. Due to the long delay, there wasn’t really anything that special available at the time of the build, so I decided instead to focus on some quality stock factory-lubed linear switches. After some research, Gateron Smoothies looked really promising. Once I received the switches, I knew right away that I had made the right choice. These are really smooth, have little wobble, and still have a tiny bit of long-pole feel in them. I do prefer longer pole switches, but these are still darn good and to my liking, not to mention the cheap price!
Vortex boards have plates with 13.9mm holes, requiring you to use non-filmed switches. As the market has matured, I feel that nowadays you don’t necessarily need to lube or film switches as there are most likely in-stock options that fit your needs.
## Stabilizers
I had ordered some Staebies V2.1 stabilizers for Neito Rev. 2, but since it’s been delayed for so long, I decided to use them on this build instead. I had heard that these stabilizers are really good, and after testing them in this build, I can also vouch for them. They are very smooth and have little to no wobble. I did add some lubricant to them as well as did the band-aid mod, as I always do.
## Keycaps
I also had sourced GMK keycaps for the Neito I thought I would have at this point, so I decided to give the GMK keycaps a run on this board instead. The keycap set is GMK Oblivion 3.1, and it does include NorDe keycaps. These are in my favorite profile, cherry profile, and are probably as premium as you can get.
## Finished product
After some hiccups, I did get the board assembled, and let me tell you, it is pretty great. I do get lightly annoyed by the pointy parts close to the front edge, but I think you won’t mind those after some time of use. The sound profile is very uniform on a row-basis, sounding great, and the F-row complements the main board with its own sound profile. While the main section sounds clean and uniform, the F-row has a more metallic clang to it, as the switches are directly mounted to the case.
The per-key RGB is vibrant, but in a retro board like this, it does look somewhat silly and out of place. I'm sure I'll be running the board with them shut off.
There was, though, one thing missing from the kit that was promised to be included: another badge that could be changed on the case. I do think that this is a fault of Vortex QA, as the badge was not included in the package.
One thing that I’m having a hard time getting used to is the front edge of the board. I usually use a wrist rest, but with this board, I can’t use it as the front edge is too rounded. Using the board without a wrist rest is also possible, and I think my issue might just be down to not being used to it.
## VIA issues
I feel that if you sell a keyboard and market it with VIA support, it should work plug n play with VIA. In this case those the situation is not that straight forward. To get VIA working with thi keyboard, you need to download the specific JSON for this board from the Vortex website, insert that to VIA, and then it should work. That is jut unnecessary hassle that could be resolved my the manufacturer with a PR into the VIA project.
## Vortex shenanigans
I wish I could only say positive things about Vortex as a company, but there has been quite a bit of stir in the mechanical keyboard community about whether one should support Vortex or not. The Model M SSK kit delays have been very poorly handled with lackluster communication and false promises, and some have even faced quality concerns like missing drilled Type-C ports. It seems like Vortex support has also been lacking and not fair for the consumers.
It’s a big pity that there are these issues, but one can circumvent most of them by using some other vendor instead. If you live in the EU, I would suggest buying any Vortex product from a European vendor instead of Vortex directly, as you will get better support and have better consumer rights.
If Vortex were to be more open about issues and challenges and be more proactive with communication, lots of these negative opinions would have been avoided.
[Reddit rant 1](https://www.reddit.com/r/MechanicalKeyboards/comments/180u2zw/avoid_vortex_keyboards_at_all_costs/)
[Reddit rant 2](https://www.reddit.com/r/MechanicalKeyboards/comments/193g3kw/avoid_vortex_keyboards_1/)
## The verdict
**TL;DR An endgame retro-themed keyboard that might or might not work for you.**
I really like this board, and if you are a sucker for the Model M style, this board is definitely a modern take on the classic keyboard. This is a high-quality board, but you should be aware of the potential issues that might arise.
[Model M SSK Kit](https://vortexgear.store/products/vortex-model-m-ssk-kit?ref=6ctx9y82)
[Vortex Store](https://vortexgear.store?ref=6ctx9y82)
*Note, affiliate links that might provide me with a small kickback from purchases*
## See my other keyboard-related posts
---
# Vortex x MiTo Hellcat keyboard kit review (Sponsored)
URL: https://olli.works/blog/vortex-hellcat-keyboard-review-sponsored | Published: 2023-11-06 | Tags: keyboards
> Review of the new Vortex & MiTo Hellcat keyboard kit. Despite this being a sponsored review I'm allowed to give my honest opinion on the keyboard.
Vortex sent me another board to try out and to bring to the Finnish keyboard meetups. This time, the board is something modern-looking with both old and new features. It might not be the endgame you are looking for, but for its price, it's a pretty competitive board!
Hope you find this usefull ✌️
After the PC66 review, I’ve been actively in touch with Vortex, voicing my own opinions on their products and suggesting areas for improvement. The PC66 was a genuinely good store-bought keyboard. However, when Vortex asked me if I’d want to review other retro-themed keyboards, I was hesitant because I felt they might be essentially the same as the PC66 with just a different layout. And it turns out, I was right. Vortex’s retro-themed boards all seem to be built quite similarly. Therefore, reviewing another one would have been unsurprising, at least from my perspective.
I’ve been eagerly anticipating the release of the Model M SSK Kit. However, it has been delayed significantly due to manufacturing challenges. After discussing alternatives with Vortex, this kit came up for consideration, and I happily agreed to take it for a test drive. 😁
[Vortex x MiTo Hellcat Kit](https://vortexgear.store/products/hellcat-kit?ref=6ctx9y82)
[Vortex Store](https://vortexgear.store/?ref=6ctx9y82)
*Note, affiliate links that might provide me with a small kickback from purchases*
## Transparency
Once again, all the opinions here are mine and have not been altered in any way, nor has this review been reviewed by Vortex before its release. I’m not getting paid for this, and Vortex has only provided me with the keyboard kit.
## Vortex x MiTo Hellcat Kit
* CNC Acrylic case
* 65% layout
* Type-C daughterboard
* QMK/VIA/VIAL support
* Per-key RGB
* RGB underglow
* Included keycaps
This kit comes with almost everything you need to build your keyboard. You just need to select switches that suit you, or you can order the pre-assembled version. The kit includes stabilizers that closely resemble Durock V2s, with an additional lip to prevent the stabilizer wire from jumping out.
## Case
Usually, when you talk about tray-mount keyboards, I start to think about the mounting pole positions as they used to be all over the keyboard in no logical way. Vortex, however, has taken their own approach to the tray-mount design and actually made it good…for a tray mount. The case is CNC-carved polycarbonate, and if you look closely, you can see some of the machining paths. On the backside of the case, the Hellcat logo is carved into the case itself, which is a nice touch. Due to the choice of material, the case doesn't weigh that much, but its structure is still solid, and it doesn't warp much when you try to twist it. Due to the lighter weight, the keyboard is easy to carry around, and it doesn't take up much space in your bag.
## Daughterboard
You usually see daughterboards on keyboards that have more flexible (literally) mounting methods and would need a bigger opening in the case for the Type-C port to have space to move with the PCB. I cannot really see a reason why you would add a daughterboard on a tray-mount keyboard other than the Vortex tray-mount still offering a little flex, risking breaking the Type-C port otherwise. Having a daughterboard never makes a board worse; it's actually the opposite, but sometimes the benefits are not that significant.
Vortex uses a custom-made daughterboard instead of the unified one the keyboard community is used to. This doesn't really matter as it's a small part and doesn't have much complexity; it's just interesting to see that they opted for their own solution rather than using something ready-made and community-approved. One reason for the custom daughterboard might be the screw holes, as the daughterboard is fastened into the case with screws.
## Keycaps
AEven before receiving the keyboard, I was skeptical about the keycaps since the kit's price is quite low. There's no way Vortex can provide good keycaps at this price, or can they?
The kit comes with dye-sub PBT keycaps in the DSA profile. The kit includes all the necessary keycaps, as well as some additional ones, allowing you to choose if you want all the keycaps to be vanilla white or if some should be purple. Since the keycaps are in the DSA profile, you can flip them without affecting the feel, and this way, the crosses almost look like the flags of Finland, which is a fun unintended feature. 😅
### Thickness
Keycaps are decently thick, making them sound more premium than what they are.
### Legends
Despite the keycaps not being doubleshot, the legends are still sharp. Vortex boasts that the legends are going to last for a long time. Dye-sub isn't the most durable method for creating legends, but I think it'll be more than enough for the lifespan of this keyboard. Doubleshot keycaps would have been nicer, but that would have made the kit significantly more expensive.
### Warping
I noticed some warping issues with larger keycaps like the spacebar and ISO-enter. In my case, the ISO-enter keycap might be a tad more sluggish due to this, and there is no real official fix for this. I wish Vortex would have done better quality assurance in this regard, as it's a common issue with cheaper keycaps. One thing to note, though, is that your mileage may vary; some users may get more warped keycaps than others.
### PCB
The PCB is a 65% PCB with per-key RGB and RGB underglow. The PCB is powered by an STM chip, most likely including more memory than anyone would ever need. Due to the per-key RGB, the keyboard layout is fixed to the one you've ordered, whether it's ISO or ANSI. I was surprised by the underglow RGB LED sizes as they are really small. It's nice to see smaller components making their way into custom keyboard PCBs.
## Firmware
Vortex states that the keyboard supports both VIA and VIAL, but at the time of writing, I have not managed to test this out. Vortex offers .json and .uf2 files, but at least the .json seems to cause an error when inserted into VIA. I feel that any production ready keyboard should have their software sorted out so that one wouldn't need additional firmware files, and also be properly tested to work. I'm sure Vortex will get this resolved eventually and I've informed them of the issue.
## Switches
There were no switches included in this kit, so I used some that I had lying around. My first choice was to go with Hades switches, which were both lubed and filmed. However, upon installing them, I noticed that the plate cutouts were too small. It seems like the Hades switches are so tight as stock that they become slightly wider when applying the film. I think these switches would have fit into the board if the plate cutouts were exactly 14mm, but they are apparently only 13.9mm. It's strange how a difference of 0.1mm can make a big difference. To clarify, I was able to push the Hades switches into the board, but the plate cramped the switches, turning these linear switches into clicky ones (don't ask how).
I replaced all the switches with some stock SP-Star UBE Crinkle Cookie switches, which fit properly right away. I do feel a bit sad because the Hades switches are really amazing, and I had hoped to put them to good use.
## Stabilizers
The kit comes with some unbranded stabilizers that offer a similar wire-protection lip as Durock V2 stabilizers. The kit also includes holee-mod cushions to help dampen the stabilizer rattle. I did not try these dry but applied a little bit of lube as well as a *band-aid mod* with a cushioning piece under the stabilizer parts. Note, though, that this *band-aid mod* cushioning does not come with the package, nor are the stabilizers pre-lubed. With the mods done, the stabilizers are solid, and I cannot complain about them at all.
## My own take on Vortex x MiTo Hellcat Kit
I think this keyboard is targeted towards someone who is looking for a lightweight yet stylish keyboard and wants to have a say in which switches it should have. The price of this kit at the time of writing is $169.99 USD, which is a very good price point for what it includes. However, I’m not a fan of the tray-mount mechanism, but for a tray mount, it is actually quite decent and provides a uniform feel. I do believe that if this kit included band-aid mods and a small flask of lubricant for the stabilizers, it would be a more complete kit.
## The verdict
**TL;DR A decent RGB keyboard for reasonably low price, but it comes with some caveats.**
The Vortex keyboard kit provides an enticing choice for individuals in search of an affordable, visually appealing RGB keyboard that's also highly portable. Notably, the kit includes premium features like a custom daughterboard and modded stabilizers, which contribute to a better overall experience.
However, it's evident that cost-saving measures have been taken in certain aspects. The sound profile could be improved, and the software (as of the time of writing) leaves something to be desired. It's apparent that this keyboard is geared more toward those prioritizing visual aesthetics over functionality.
The Vortex keyboard kit strikes a balance between affordability, style, and practicality, offering a bang for buck option for new hobbyists. If you were to get this keyboard in the ISO-configuration, I would first wait until the software issues have been resolved.
[Vortex Hellcat Kit](https://vortexgear.store/products/hellcat-kit?ref=6ctx9y82)
[Vortex Store](https://vortexgear.store?ref=6ctx9y82)
*Note, affiliate links that might provide me with a small kickback from purchases*
## See my other keyboard-related posts
---
# My presentation at WordCamp Finland 2023
URL: https://olli.works/blog/wordcamp-finland-2023 | Published: 2023-10-30 | Tags: presentation
> I was invited to talk at WordCamp Finland on a very short notice. A short story about me facing my biggest audience so far.
From time to time, I've pushed myself to step out of my comfort zone and engage in public speaking, despite my usual apprehension. Recently, I received a sudden invitation to speak at WordCamp Finland, and despite the short notice, I accepted the challenge, knowing it would be the largest audience I've ever faced.
## The setup
I was asked back in 2022 to give a speech at a WordPress Helsinki meetup, and I took on the challenge in the spring of 2023 with my talk about 'The Transition from Agency to Product Development.' The talk went somewhat okay, but I noticed that I was quite nervous and hadn't had enough time to prepare for my talk. The audience at that meetup was around 30 people, so it was thankfully quite laidback, and there was no time pressure. I knew that a WordCamp Finland was coming later in 2023, but I thought about skipping it since I knew I could spend my time more wisely. However, I informed the organizers of WordCamp Finland that I could be a backup speaker.
Que to one week before WordCamp Finland, I receive several Slack messages pinging me and asking if I can come and give a speech. I thought about it for a while, made some arrangements at work, and finally accepted the speaker position.
## Preparation
Initially, my plan was to deliver the same speech I had presented earlier at WordPress Helsinki. However, I couldn't ignore the fact that my previous talk hadn't gone as smoothly as I'd hoped. That's when I made the decision to switch my topic to "What to Consider When Publishing a Plugin." This new focus allowed me to delve deeper into the technical aspects and provide a more comprehensive perspective.
## 04:45 wake up
As WordCamp was held in Tampere, I had to wake up early to make it to my talk at 09:20. I had prepared everything the night before and left on schedule. However, I should have spent more time checking the metro schedule, as Google Maps indicated I would make it to the train on time as long as the metro wasn’t delayed, which, of course, it was. I missed my train, but fortunately, I had planned to arrive in Tampere around 08:00 for breakfast and had a backup plan with the next train that would still get me there in time for my presentation. This did stress me a bit, but once I found my seat on the train, I began to feel more relaxed.
During the entire train ride, I dedicated my time to rehearsing my talk, thinking about what to say and in what order, and when to incorporate jokes and puns. I finally arrived in Tampere just 20 minutes before my talk and managed to make it to the venue on time.
## The talk
I was pleasantly surprised by the turnout for my talk; there were so many attendees that some had to sit on the stairs because there were no free seats left. At the beginning of the talk, I felt quite nervous. However, thanks to my rehearsal on the train, after about four slides, I began to feel more relaxed, allowing me to slow down my presentation pace and avoid feeling rushed.
As I progressed through many slides and sprinkled in some jokes, I reached the conclusion of my talk and noticed the sign that read "2 minutes," indicating how much time I had left. Fortunately, I was already at the end of my speech by that point, so I didn't need to skip anything. Following the presentation, there was a brief Q\&A session before I exited the stage.
After my presentation, several people approached me to discuss their experiences with plugin development, and we exchanged thoughts.
The remainder of the day was spent socializing, attending other people's talks, and having a great time.
## See my other presentations
---
# A Long-Awaited Update: Insights into the Last 8 Months of My Life
URL: https://olli.works/blog/a-long-awaited-update | Published: 2023-06-26 | Tags: diy
> It's been a while since the last post on my blog. A lot of things have happened and there simply hasn't been enough time to give some love to my blog. Despite the turbulence, certain projects have actually progressed.
It's been a while since the last post on my blog. A lot of things have happened and there simply hasn't been enough time to give some love to my blog. Despite the turbulence, certain projects have actually progressed.
## The Real Life
Let's start with the real-life stuff. Firstly, I've bought a new apartment, renovated it extensivly, and moved into it. Almost all surfaces have been renovated in some way eg. Floors changed, walls straightened and sanded, new kitchen, bathroom redone, new doors, painted all surfaces etc. and I've done most of the renovations myself, which has taken most of my free time. **It's been very rought and stressful**, but so far it's been worth it. There are still several things to do, but it's already a nice place to live in.
We're also expecting our firstborn very soon which will change our lives forever. I'm very excited about this and can't wait to meet our little one.
## RIP Forestry CMS
I used to edit and update my site through Forestry CMS, that provided a very user fiendly UI for handling content. Sadly the project was recently shut down in favor of a new *"better"* service called TinaCMS. I started the migration of my site to TinaCMS but didn't get far when it requires your site repository to be in Github, when mine is in Bitbucket... I could move my site to Github but I feel that it starts to be quite a lot of work for pretty much no gain. For now, I'll just write my posts in Markdown and manually handle Git LFS files.
I've looked into various other stacks to replace Hugo and Forestry but haven't yet decided on one. One interesting stack would be [Quik JS](https://qwik.builder.io/ "Quik JS") combined with [Builder.io](https://www.builder.io/ "Builder.io") since that could help me get the site score 100 in Google Lighthouse.
## Neito Rev. 2.1
I know this project has taken way too long, but I'm finally happy to reveal that there is some actual progress! The case will be done by a new partner in this project while I'm focusing on getting the PCB done right. More info about this project will be revealed in another blog post. For now, I'm leaving you with a slight sneak peak of what might be coming.
## FMKC Tampere Meetup
I had the pleasure of participating in the FMKC Tampere meetup where I delivered a memory lane speech to commemorate the 5th anniversary of the FMKC Discord server. The meetup turned out to be a fantastic experience and something I had eagerly anticipated for quite some time. Words cannot adequately express how wonderful it feels to reconnect with amazing individuals whom you rarely get to see.
Witnessing the growth of the Discord server from its humble beginnings to now boasting over 1250 members has been an incredible journey. I take great pride in the community and the remarkable individuals who contribute to it. It brings me immense joy to have played a part in fostering the growth and evolution of this community. I eagerly await the next 5 years and all the exciting things they will bring.
## My whisky cask turned 1 year old
My original whisky cask sharing experience has finally shown what it's becoming, and the results look very promising. The distill had gotten a lot of color from the bourbon barrel and the taste is very nice. You can notice some hard-edges in the distill that hints you of a young spirit, but nothing that would be unpleasant. I'm very excited to see how the cask will evolve in the future.
## Planning a new shared cask experience!
Since the first experience turned out (atleast so far) to become a good product, and I have a firstborn on the way, we've been thinking about getting a second cask. I would like to have a whisky cask age at the same rate as my newborn, it would make the whisky special for me. We've been looking at larger casks, targeting aging time of 7-10 years. We're still in the planning phase but currently it seems like we would do a non-smoky distill in a Madeira cask.
I'll make a separate post about this and how one can participate, but if you are overly eager, you can fill this form and I'll email you whenever the project has progressed to a point where I need to ask for monetary commitment:
[Sign up for updates](https://forms.gle/wDWegGL9acCvUfyW7)
## Vortex keyboard Affiliate Program
Despite focusing on creating text-and-image based content, I was invited to participate in the Vortex Affiliate Program. What this does is giving me a small kickback when you visit Vortexgear store and buy something through my links. I'm not expecting to make any money from this, but it's a nice gesture from Vortex to invite me to the program. I wouldn't do it if their products wouldn't be good, but from what I've tested so far, their price to quality ratio is very high.
You can pay Vortex store a visit through my affiliate link:
[Vortex keyboard](https://vortexgear.store?ref=6ctx9y82)
## See what else I've been up to lately!
---
# Vortex PC66 keyboard review (Sponsored)
URL: https://olli.works/blog/vortex-pc66-keyboard-review-sponsored | Published: 2022-10-25 | Tags: keyboards
> Review of the semi-popular Vortex PC66 keyboard. Despite this being a sponsored review I'm allowed to give my honest opinion on the keyboard.
This is my first proper keyboard review and I'm happy to be able to do it as sponsored content. I had one main requirement for doing this as sponsored content was that I wanted to stay true to my opinion. I'm happy that Vortex was alright with this. If a company isn't scared of constructive feedback, they really must believe in their products, and I gotta say that this keyboard did surprise me!
Enjoy ✌️
I was contacted by Vortex and asked if I would be interested in doing a partner review(s) of their products. I haven't done something like this before so it sounded interesting. Upon deciding on details, I felt that this was something I want to try out. This review will be of the Vortex PC66 keyboard, hope you like it 😁 *Spoiler: It's quite alright*
[Vortex PC66](https://vortexgear.store/products/pc-66-66-key?variant=42608200515747&ref=6ctx9y82)
[Vortex Store](https://vortexgear.store?ref=6ctx9y82)
*Note, affiliate links that might provide me with a small kickback from purchases*
## Transparency
One thing that I insisted on upon taking on with this review was the right to have my own opinion over the product, in both positive and negative aspects. Vortex didn’t hesitate at all with this requirement. This review is hence my unbiased review and Vortex only provided me with the product.
## Vortex Pok3r, the old legend
Maybe the most known product by Vortex is the POK3R 60% keyboard. It was launched back in 2014 and I bought mine in 2015 as my second mechanical keyboard. One thing that I fell right away in love with in the Pok3r was the Caps-Lock function layer. The feature to bring the arrow keys to the keys IJKL is something that I still use on all my keyboards.
The build quality of the Pok3r was way ahead of other manufacturers. The aluminum case was really sturdy for the time and almost no other manufacturer offered cases from metal.
Over the years there was been lots of improvements in the keyboard scene regarding feel, sound, and firmware, and the old Pok3r isn’t with today’s standards anymore. My old Pok3r is still going strong since I’ve modded it. The mods include lubed switches, PCB foam, case foam, Durock stabilizers, and thicker keycaps. With the mods, the only downsides are the missing QMK support and the mini-USB port.
## The PC66
This board was created as a tribute to the IBM PCjr but with a modern twist resembling a traditional 65% keyboard. The keyboard is advertised as a hotswap gasket-mounted keyboard with wireless support.
Compared to a 65% layout, the lower left control-key is shorter (1U) and located next to the left-alt-key. The left edge of the spacebar is located 1U more towards the right edge. Other than that, the layout is quite standard and if you are an Apple-user, you will feel right at home with the control-key (command on apple) position.
## Build quality
At first glance, the build quality is good but after some inspection, I started noticing some issues with the case.
### Case
Upon first trying out the keyboard I didn’t notice anything, but once I started taking photos I noticed two things.
The first one was that the plastic surface of the board wasn’t uniform and had some spots that looks like dents. There are hard to spot but if you look at the board with light reflection, you can notice them. One spot also seemed slightly smoother than what the case normally feels like, hence shining a tad more.
The other flaw was that the case was warped. The warp turns the keyboard into a slight banana, dropping down slightly in the middle. The rubber feet on the bottom ate only on the sides, hence allowing the curving to happen. You can easily twist the case to be straight but it doesn’t stay straight.
### Keycaps
The keycaps are thick dye-sub PBT and the print looks clean and sharp. I would have wished for dual-shot plastic but I bet that it would increase the price of the product too much. These are very nice keycaps for what they are.
### Peripherals
The package comes with a decent coiled cable, hex key, metallic Vortex badge for the front of the keyboard, keycap puller, switch puller, and some additional Vortex-themed keycaps.
## Disassembly
The case is held together with 8 hex screws. Upon removing these we can carefully remove the bottom and see how the keyboard is assembled. Once the back is carefully removed, you are faced with a large rubber mat and some cables dangling to the bottom piece. This board hosts a battery compartment and a daughterboard in the bottom part of the case. The daughterboard was a nice feature I hadn’t expected.
The PCB is fully surrounded in rubber which is used quite wildly, giving most of the weight to the keyboard. The PCB is a normal-looking 65% one but you can notice that Vortex is using the same PCB for their other products as this keyboard is e.g. missing the per-key RGB LEDs. It’s smart for a company to reuse PCBs or make them as variable as possible, as this reduces production costs.
The PC plate rests between soft gaskets making this a gasket mount, however, due to the excess amount of rubber used, the board doesn’t flex like a gasket-mounted board usually does but is rather stiff. All the rubber on the bottom stops any flex. Despite missing flex, the typing experience is good as the feel is very uniform and solid, making the switches stand out more.
## Switches & feel
The board I received came with Gateron G Pro Brown switches. I had never tried these before and I was interested in seeing if Gateron was able to make a high-quality switch. I need to say that I am impressed with the quality of the switches, but I still feel that they are subpar to e.g. Durock switches. The switches are also only 3-pin, which makes them slightly less stable than 5-pin switches. The switches felt smooth but had a too-shallow bump for my liking. Luckily the PCB is hotswap so these can be easily replaced.
The sound profile is something that fits very well into an office space as it’s quite muted with no high-pitch noises.
## Stabilizers
I wanted to create a separate heading for stabilizers as they are often the largest issue in market keyboards. My old Pok3r had rattling stabilizers until I lubed them. **PC66 has straight-from-the-box very solid stabilizers.** The sound profile is uniform for the spacebar and the other keys (Enter & Backspace) have a satisfying thock. I would bet that these stabilizers have some rubber padding on the PCB and are lightly lubed. There is absolutely no rattle which was a really nice surprise!
I wish other manufacturers would take notes since market boards would be much better if their stabilizers were properly handled.
## Firmware
The board doesn’t support QMK which is a big downside. I tried downloading the Windows GUI software for PC66 but that program didn’t do anything despite having the keyboard connected. Downloading the firmware for PC66 prompted again for a non-signed .exe file so I didn’t want to install it. You should be able to reconfigure the keyboard with the software but for some reason, my experience with the software has been lackluster.
I feel that Vortex should support QMK, and if they insist on making their software for changing the keyboard layouts, why not just make a fork of VIA but limit it to Vortex boards? The current solution only supports Windows, Mac, and Linux users who are left out of luck (even if the software worked).
## Usability
I thought about comparing different scenarios on how your experience would feel with this keyboard.
### Typing/Working
Great, but only if you get used to the layout. This board is great for pure typists but if you do many combos (shortcuts), the missing keys might make things somewhat tricky. You might also get some street cred from senior workers who have experienced IBMs in their glory.
### Gaming
I would say that this depends on the game you play. I would not play any FPS game with this board as my little finger wants to control the control key 🥁, but thankfully Vortex offers also a version of PC66 that comes with the left control key in case you need it. If you game something more casual, this keyboard might work for you.
### Traversal
This keyboard can be used wirelessly with either Bluetooth or 2.4Ghz. I didn’t try these options as I want all my keyboards wired. Vortex has saved a buck with this keyboard by using AAA batteries instead of something rechargeable. The size of the keyboard doesn’t make it easy to travel with so it feels weird that it still supports wireless mode, maybe so that you can have a clutter-free desk.
## My take on PC66
I can right away say that this is not a keyboard for me. I’m just too much in love with a more ergonomic layout and going back to 60/65% just doesn’t do it for me. Here are my caveats in importance order:
* Not the layout for me
* Missing QMK
* Wrist-rests would be quite awkward with the front edge of the board
* Not the best switches for me (I’m very picky)
As you might notice, most of the caveats are something that many users can live happily without, hence you should not justify your opinion alone on my review but rather use it as a reference point when thinking about buying this keyboard.
## The verdict
**TL;DR solid keyboard that could be better in some aspects.**
If you fancy the look of old keyboards, this can be a good choice for you. Finding old keyboards and getting them running with modern PCs is quite tedious and costly, PC66 is a much cheaper and solid alternative instead. There are some drawbacks with this board but as of its out-of-the-box quality, it’s quite good.
**The good things worth mentioning**
* Satisfying sound profile
* Good stabilizers
* Nice thick keycaps
**The bad things worth mentioning**
* Not the best layout (in my opinion)
* Lack of QMK support
If you would like to try this out I’ll be taking this with me to various keyboard meetups in Finland ✌️
### See my other keyboard-related posts
---
# Modern DIY repairs
URL: https://olli.works/blog/modern-diy-repairs | Published: 2022-10-07 | Tags: diy
> When something breaks, do you toss it or try to fix it? As a tinkerer (and a bit of a cheapskate), I’ve repaired all kinds of uncommon items over the years. Here’s some inspiration to help you repair more and waste less.
What happens if an item breaks, do you throw it away or wonder if it can be repaired? As a tinkerer *(and partially cheapass)* I've made quite a few repairs in the last years which are not that common. Hopefully, this inspires you to repair more of your items.
Hammer, nails, duct tape and glue, and you used to be able to “fix” anything stationary in the old days. Modern times have brought us new repair challenges as the materials used are most often more complex than just wood, and many items contain some electric circuits.
Someone who is not familiar with the modern types of items might feel encumbered to even try to fix any modern issue eg. broken plastic parts or electrical devices not working properly. **However, if you have tinkered with electronics lately or played around with CAD, you probably have a sense of how things work and how they can be fixed.**
One thing that I have learned the hard way over the years is that **the best way to learn is by failing**. I've made several mistakes which have had their price. once I almost ruined a new parquet floor, and the last keyboard prototypes that I ordered had design faults so they didn't work. No one likes making mistakes, but making them really teaches you to work differently.
Nowadays we have lots of tools that we can use for repairs. The internet is full of repair guides (eg. YouTube, ifixit), libraries (atleast in Finland) offer workshops where you can solder, 3D-print, laser-cut and work with fabrics and spare parts can be found on global sites like Amazon, eBay and Aliexpress, sometimes even from local hardware stores. Doing repairs is also cool from a sustainability point of view, less waste is always a plus.
Here are some of the items that I've fixed/repurposed and a little backstory about how I did them.
## Car AUX port
**Issue:** The AUX-port wasn't working anymore
**Solution:** Spare parts were not easily accessible and those were still quite expensive for what they were. 10€ for an AUX port is quite expensive. The issue was that the port had received mechanical stress from plugging and unplugging an AUX cable and hence lost contact between the female jack and the PCB. I was able to find the blueprint of the component and was able to solder some jump wires to fix the broken connection in the port.
## Battery bank charging port
**Issue:** The charging port had burnt and broken due to a bad USB adapter, and the power bank didn't charge at all.
**Solution**: Replace the charging port with a new one. I happened to have a USB Type-C female port that I had used for debugging USB wires and thought it would be perfect for the power bank as it's easy to solder wires to its pins. I took the power bank into pieces, ripped the old charging port away and soldered some wires to the super thing traces on the PCB. USB used to only require 4 wires (5V, d+, d-, GND) but as this was a charge-only port I decided to try it out firstly with just the power traces. To my surprise, it worked normally with only power attached, and because data wasn't added I didn't need to fiddle around with resistors. Several layers of 5-min epoxy and cocktail sticks made the final result much studier than the old one.
It does look a little funky but for me, the only thing that matters is that it works. The TSA at the airport did look at it for a while as it's missing the CE certificate, but I haven't yet had to discard it.
## The broken camera focus ring
**Issue:** The camera had a design flaw in the focus ring. It is too thin making it warp really easily from a frontal bump.
**Solution:** I just followed one YouTube tutorial on how to fix the focus ring. I took the camera apart, cleaned the pieces with IPA, removed the focus ring and used some raw power to straighten it out, started reassembly with the addition of grease and got it quite quickly packed back together. Due to the relatively thick grease that I applied, the camera lens now works more silently than a brand-new one.
## Car front grill
**Issue:** A acquaintance's car had hit some snow wall when parking last winter and replacing the whole front grill would have been quite expensive. The issue was only cosmetic.
**Solution:** I took some measurements with a periscope and took the values to Fusion 360. I designed a part that would mostly fit in the broken slot but that could be slightly modified by sanding or using a Dremel. The part was printed as thick as possible from ASA by [Hekeke](https://heke.io "Hekeke"). I thought I would also help out with the installation of the part (using epoxy) but my acquaintance was handy enough to do it himself and the end result was great! You cannot see the replacement part unless you stare at it. Also, wait till that part gets partially dirty/dusty and it blends in perfectly!
## Mouse (Razer Deathadder) switches
**Issue:** Middle mouse click stopped working.
**Solution:** I ordered a new middle mouse click switch as well as new main switches for the mouse. After the mouse disassembly, I replaced all the switches with new ones. The mouse felt now just like new. I also added to the mouse some new rubber pieces as the old pieces had worn out. Sadly I didn't take photos of the repair process...
## Repurpose worn-out mountain bike tyres
**Issue:** My mountain bike tyres were really worn out and didn't have the necessary grip for rides in the woods.
**Solution:** I decided to turn my old tyres into spiked tyres. I bought the cheapest short screws from a hardware store and screwed them to the tyre pointing outwards. When done it looked like in the picture, Mad Max style.
It felt really weird to ride with these spikes. You had 10/10 grip on any terrain that those spides were able to dig into, however, on totally flat surfaces the tyres were quite slippery. The spikes provided maximum grip in most terrains but also made the bike much harder to pedal due to the increase in rotational mass and friction from the spikes. Despite that, it felt quite insane to be able to ride normally on an ice hockey rink and not slip.
I ended up shortening the spikes as they were a bit overkill as in the picture. One side-effect of the spikes was that I started having quite a few punctures but that was resolved by adding padding between the inner tube and screws.
## Final words
There are many more things that I’ve fixed but here are perhaps the ones that I’m most satisfied with. I see broken items as an opportunity to learn something new and I get joy from getting more use of repaired items as well as appreciate the items more than previously since I’ve added my own touch to them.
## Check my other posts
---
# Share a whisky cask with me!
URL: https://olli.works/blog/share-a-whisky-cask-with-me | Published: 2022-02-05 | Tags: whisky
> This is a thing I've wanted to do for a long time but it makes no sense to buy a whole barrel for yourself. Come and share a whisky cask with me!
I'm arranging a shared-cask order from Teerenpeli to have a manageable amount of bottles per person. I tried to do this cask group buy once before but that failed due to not having enough participants. This time I've broadened the target group and adjusted the ratios to 1/10. This round will happen!
### 10/10 shares taken
## 16.02.2022 Update
### So it happened
I managed to find enough people to participate in sharing this cask with me. Now we just have to wait and see what the end result becomes. The initial cask gave a clear vanilla scent before we filled it. The distillate again was very tasty, apricot and a hint of smoke. I have high hopes for this barrel.
## Preliminary words
Buying a cask from Teerenpeli will cost you about 5000-6000€ depending on the configuration. I would love to get a cask for myself but I don’t want to sit on 120 bottles of whisky all by myself. The idea with this group buy is to share the bottles of a cask so that everyone gets a much more manageable share of bottles.
I tried to do this once before but it failed. You can read about it here
[Failed whisky cask group buy](https://olli.works/blog/want-to-share-a-whisky-cask/)
## The distillery
I've contacted several distilleries about producing a cask and it seems like Teerenpeli would be the best choice for this round. I've looked at Kyrö, Nagu, HDCO and 1000 Lakes for different options and prices. You can see the PDF document for more information about Teerenpeli.
[About Teerenpeli](https://www.teerenpeli.com/)
## The proposal
I want to host this whisky cask group buy transparently and fairly. I’m offering you a chance to own a part of the contents of a whisky cask. The upside with this arrangement is that this is an easy way for you to get a part of the cask. The downsides of this arrangement are that you are not as much in control as if you would buy a cask by yourself. What you trade in for control you’ll gain by getting to take part in this relatively cheap whisky cask ownership.
## The distillate and cask
**Cask:** 65L ex-bourbon
**Distillate:** 61.7% Teerenpeli default “vakiotisle”
There is an option for a smoky distillate but in my opinion non-smoky option would be better as the smoke flavour is often too dominating and covers other flavours. Don’t get me wrong, I like smoky whisky but non-smoky ones are in my opinion more elegant.
**The final whisky will be bottled as cask strength. This gives you as the consumer more ways to enjoy the whisky. 61.7% or whatever the ABV will be at the end of the process.**
## Prices
There are no certain set prices because the final cost will vary depending on how much whisky there is to bottle and what the taxation looks like that year the bottling happens.
**Cask:** 450€ (we share this cost between the shares)
**Distillate:** 18€/L
**Taxes and other expenses:** about 25€/0.5L
According to the estimate, everything together would cost around 5000-6000€. There will be a total of 10 shares of the cask.
### 1/10th share:
Price: 500-600€
Estimated bottles: 10-12 bottles cask strength
### Payments
The payment will happen in two stages. The initial payment will be about half of the total sum of your share(s) and is needed to be paid for the process to start. The other half will be paid when the bottling has been done.
## Schedule
**2022 Q1**
I’ll be making the order right away when all the shares have been taken. The first payment will happen on my call and be paid to me as I’m the middleman between the shareholders and the distillery.
**Between 2022 - 2032**
I’ll keep you up to date on how our whisky has changed and opinions on if it should be bottled at that point or not. This is a waiting game. I’ll be trying a sample of the whisky once a year and report to you about the progress. Various distilleries have said that smaller casks like this take maybe 4-5 years to mature, but we can go up to 10 years if we wish so. I’ll be making decision calls on a yearly basis where the majority decides if we let the whisky mature for longer or not.
**Some date in the years 2025 - 2032**
Bottling time! This is when the second payment will happen. I live in the Helsinki region so you could pick up the bottles or alternatively ask me to ship the bottles to you (at your expense).
## Transparency, uneven shares, force majeure and other details
I want to be very open with this whole cask sharing experience. What I’ve learned from previous group buys is that communication is key and there is no reason why I should hide some information. Let’s be honest and open, and everything will go smoothly. My interest is to share my passion for whisky with you, in any problematic cases you can count on that I’m working for our best interest.
### Uneven amount of bottles
There will most likely be an uneven amount of bottles. I’ll be taking 2 bottles for myself as a small reward for hosting this cask sharing experience, but any more bottles will be raffled out. The chosen ones will get 1 bottle more than the others but that will also affect their last payment with a slightly increased price. This way this is fair for all participants and no one is paying anyone else’s whiskys.
### The cask
We are buying the cask for ourselves for this cask sharing experience, hence it is also ours at the end of this experience. I have some use for the cask so I’m suggesting that the cask is also given to me at the end of the process as a small additional reward for hosting this experience.
### If the whisky has gone bad
We have the option to cancel the deal with Teerenpeli and pay a fine for the storage that it has required. This is something that will be done if there is something clearly wrong with the whisky, the final decision is done by voting. In this case, you’ll receive a part of your initial investment back. This is a potential risk, however, Teerenpeli is experienced in making whisky so this most likely won’t be a problem.
### If something happens to me
You can never know about life and what happens. I’ll be sharing all the information about the cask sharing with one of the participants so that in the worst possible situation, you still should be able to get the whisky.
### The name of the whisky and the label
This is something that we need to think about once we’ve gotten the process started. I have some designer contacts who might be able to give us a hand at designing a cool looking label for the bottles. The design work won’t be free so I feel that we could budget around 200€ or perhaps a few bottles for this. This is something that we decide once we have gotten the process started.
### Your responsibility
You are responsible to keep me up to date with your latest contact information and being active in the voting. If you are not voting, your vote won’t be counted. It is also important that you are active and do the payments as I request. Failing with payment one will result in kicking you out, failing with the second (after bottling) payment and not being in touch results in losing your investment. These terms are somewhat harsh but I shouldn’t need to hunt you down. If you just keep an eye on your email you shouldn’t have any problem with this.
After-bottling neglected whiskeys will change ownership to me if there is no contact and the second payment is left undone.
### Trying out samples
This is something that we could do when we think the whiskey is close to done. This mean that around 4-5 years of aging, we’ll get to sample the whisky as a group and decide if we want to age it further or bottle it. The sampling would happen in Lahti.
## Status updates and voting
I’ll keep you up to date with the situation of the whisky, give my own opinion as well as the opinion of Teerenpeli. The updates will be yearly, or whenever there is something new to tell. Any decision for bottling or cancelling the batch will be done by voting, each share representing one vote. The voting won’t be anonymous but rather just in a simple form by email where you state your own opinion for the options given, your personal vote won’t however be shared with the other participants.
In a case of a standstill (50/50 votes), my vote will decide the decision.
## Participate
I want you to fill out this form to participate in this cask sharing experience since it’s much easier for me to handle your information if I have it in one place. Only participate if you are 100% sure you are in and have the monetary situation allows for it now and some years from now.
## See other whisky related posts
---
# Keyboardpresentation at Fraktio HQ
URL: https://olli.works/blog/keyboardpresentation-at-fraktio-hq | Published: 2021-12-08 | Tags: keyboards, presentation
> I'm held a presentation about mechanical keyboards at Fraktio 10.12.2021 at 16:00. The presentation could be attended physically but there was also a stream for those who couldn't attend.
Who the hell would go talk about keyboard publicly? Well, apparently I do. This is something I've been thinking about for a long time but this year felt like the right time to do it.
## The presentation will be held the 10.12.2021 at 16:00 in Fraktio HQ in Helsinki.
If you are interested in attending this presentation physically, please sign up as there are only a handful of seats available due to the global pandemic. You are also required to have a valid Covid-19 certificate for physical attendance. You can also tune in to watch the stream via YouTube and hence watch it later if the showtime doesn’t work for you.
More info on Fraktios perjantaipresis site.
[The presentation page](https://www.fraktio.fi/perjantaipresikset/10.12.2021-raataloidyt-nappaimistot)
## See other relevant posts
---
# Bypassing shitnewspaper "Plus" subscription
URL: https://olli.works/blog/bypassing-shitnewspaper-plus-subscription | Published: 2021-11-18 | Tags: development
> I noticed one day that a certain shitnewspaper "Plus" service doesn't really need the paid subscription to read articles behind paywall.
One day I was looking at this one particular shitnewspaper site and felt slightly annoyed over their paywall articles requiring a "Plus" membership. I wanted to know how much of a certain article I would be able to see and it turns out that it's more than just the ingress!
## Update 2024
Sadly this workaround has stopped working, just FYI.
## Disclaimer:
This was not done for monetary reasons but rather to show you what side-effects sloppy features can have. Any info or code used here comes with no liability and is only meant for personal use. If you happen to enjoy the “Plus” content of this shitnewspaper, go ahead and support their service as it’s not expensive.
As you’ve noticed, I’m avoiding using the name of the specific shitnewspaper site. I would rather not have this blog post be indexed with that keyword, hence I refer to this particular shitnewspaper as shitnewspaper.
## The paywall
Here you can see how the paywall looks like when you try to look at a "Plus" article. A normal user would just go on to the next article but I decided to stay and see how the paywall has actually been implemented. I've heard rumours of bad practices eg. hiding *premium* content with bare CSS and wanted to know if there would be something similar here. Well, apparently there is something 🔥
## The bypass
When having the dev-tools open, you can see that the shitnewspaper loads a ton of stuff on page load, but one of these things is the actual page. The page in itself has a paywall integrated by default, but all the data of the article is visible in the file, however in another format.
At this point, I knew that I could somehow run my own script on the shitnewspaper site and populate the content. As this seemed like *too easy* I had my bets that someone else had already come up with this and I was right.
[The bypass](https://ylilauta.org/satunnainen/129374482)
Someone had already done the hard work for me, but the script was not that fresh and didn't work so I decided to fix it to see that something that I had imagined would actually work.
## The code
I had little time one evening after some beverages and wanted to give the fix a shot. I used the Tampermonkey chrome plugin to inject scripts on the page and found out that the original code almost worked, I just had to tweak a few parts of it and add some missing styles that the shitnewspaper loads via JS for some reason. Feel free to copy this and remember to edit the scripts **@match**-attribute to the actual URL.
This script reads the article data from the global set variable and builds up every piece of the article with the respective proper elements (paragraph, heading, subheading, image etc.).
The current script could be improved by getting some event listener connected to the ReactJS that’s being used. I could have used some setTimeout solution but that felt too hacky. In case the Plus content is behind paywall with this solution, just refresh the page and it should be displayed properly.
## The conclusion
If you are going to implement a paywall, make sure that you do it right and not in a sloppy way that is easily bypassable. Alma media will probably update this at some point and break the script, but until that day we can use this as an example of how not to do this.
This was a quick funny “project” that I thought would be fun to share 😃 The end result isn’t the best-looking code but as a quick POC, it works just fine. I also don’t see the value in diving too deep into this as it’s clearly something that works only temporarily.
## See my other related posts
---
# Neito Rev. 2 Interest check
URL: https://olli.works/blog/neito-rev.2-interest-check | Published: 2021-10-19 | Tags: keyboards
> Let me know of your expectations of Rev. 2. I'm already working on something new. If you missed Rev. 1, this might be your chance on getting a Neito.
Something old, something new, something borrowed but not necessarily something blue.
You know, I could just reorder the Rev. 1 PCBs, laser-cut some cases and be done, but I feel like **I can do better**. I’m already planning something better as I do personally like the layout but feel that there are some improvements to be done. The Rev. 1 was, to be honest, a prototype batch and I feel that it deserves to stay unique when compared to upcoming revision(s).
I’ve set up an interest check for Rev. 2 as I want to know what your expectations would be of the iteration. Fill it up and let me know of your preferences 😉
[Interest check form](https://forms.gle/mSmW6tyRUQMm5SFj7)
I doubt that we’ll have anything to show before 2022 as ordering prototypes alone take usually over a month. I don’t want to hype anything before we actually have something to show.
## See other keyboard related posts
---
# Story of the Neito keyboard
URL: https://olli.works/blog/story-of-the-neito-keyboard | Published: 2021-07-06 | Tags: keyboards
> Creating Neito and running a GB without any experience, what could go wrong. In this blog post I'll open up about the whole Neito project, how it started and how its GB went. It has been a rocky road.
Creating the Neito keyboard and running the GB was not quite as easy as planned. This is the story of how we created Neito and all the bumps we faced with the group buy.
## Table of contents
Feel free to jump to the topic you are most interested in or read the full story.
[Preliminary words](#preliminary)
[A BIG thanks](#thanks)
[The beginning](#beginning)
[#ic-neito](#ic-neito)
[PCB artwork and revisions](#pcb-artworks)
[The chosen PCB artwork](#pcb-artwork)
[Extra B key](#extra-b)
[In-switch LEDs](#LEDs)
[The layered acrylic case](#case)
[The first prototype](#prototype)
[The first assembled Neito](#first-neito)
[Debugging RGB LEDs](#RGB)
[Group Buy setup](#gb-setup)
[The group buy is live!](#gb)
[It kind of went viral...](#viral)
[The group buy kept growing](#gb-growth)
[The shutdown](#shutdown)
[PCB issues](#pcb-issues)
[Case issues](#case-issues)
[- Case assemblies](#assemblies)
[The build guide](#build-guide)
[Packaging & shipments](#packaging-and-shipments)
[GB Shipments on the map](#map)
[Feedback from participants](#feedback)
[Sale of additional units](#extras)
[Thoughts about running a GB](#verdict)
[Future keyboard GBs and Neito Round 2](#future)
## Preliminary Words
I find it fascinating how Neito came to be. I've learned a whole lot from this project with PCB design, 3D modeling, and the organization of sales. It took about 6 months between the first proto and shipment of GB items and have had its up and downs. I felt that this keyboard was worthy of a full story as there is more than just the group buy page.
## A BIG thanks
I want to give some shoutouts since this project would never be the same without all the support ❤️
**Migiii** This project might have never happened without you and all your help, thank you! 💯
**Magicsmoke** With you, there is more light in this world 💡 Thanks for the repairs!
[Check out magicsmoke on Github](https://github.com/magicsmoke)
**Ergorius & Hekeke** I also want to give a shoutout to you guys for helping the project in various ways ✌️
[Ergorius keyboard store](https://pohjola.works/)
**The Finnish Mechanical Keyboard Community (FMKC)** Thanks for all the feedback and support, I really love this community as it's so very approachable and lovely. 💕
[Check out the Finnish Mechanical Keyboard Community](https://olli.works/fmkc)
## The beginning
If you have been active on [/r/mechanicalkeyboards](https://www.reddit.com/r/MechanicalKeyboards/) you have probably seen the TGR Alice keyboard. Many people really enjoy how this layout looks and the premium-wibes TGR brings to the table. It's a great alternative when the classic 60% keyboard is not too ergonomic. There is an open-source fork of Alice called [Arisu](https://github.com/FateNozomi/arisu-pcb) and it rocks a slightly different layout that is a hybrid between 60-65%. In my opinion, Arisu is a superior layout to Alice, but the main issue still stands as both of them are ANSI-only keyboards. If you are an ISO user, you are out of luck.
There has been one keyboard that is similar to Arisu but in ISO layout, and it's called **Majbritt**. I tried to get my hands on one from the [/r/mechmarket](https://www.reddit.com/r/mechmarket/) but without any luck. I was also in contact with Sebu who created Majbritt but he wasn't interested in sharing the Gerber files. Seemed like there was none of the product that I'm looking for.
The only sane thing to do at this point is to try to figure out how I could create the layout myself.
[Photo from this Reddit thread](https://www.reddit.com/r/MechanicalKeyboards/comments/f2s2uq/just_had_to_post_some_more_pics/)
## #ic-neito
I made an interest check(IC) channel in the [Finnish Mechanical Keyboard Community](https://olli.works/fmkc) Discord server to see if there would be people interested in it. To my surprise, many reacted to the IC. We were supposed to do this together with a fellow Discord server member Ergorius but he had to focus more on his own keyboard project Louhi, which is btw pretty awesome.
[Check out Louhi keyboard](https://github.com/pohjolaworks/Louhi)
As we were trying to fork the Arisu PCB, Migiii felt that we were doing things the wrong way and he decided to step in and help out with the project. With experience in other custom keyboard projects, Migiii created the initial base version of Neito.
At the time, we were also writing an article for the Finnish computer magazine [Skrolli](https://skrolli.fi) and featured the initial version of Neito there.
[See the Skrolli magazine](https://skrolli.fi/numerot/2020-4/)
## PCB artwork and revisions
The PCB artwork was obviously really important. We had already decided on the name but the artwork was still open. We iterated with Japanese style, vaporwave, memes, haikus, and Kalevala but none of these really seemed to fit the board that well.
Here are some of the iterations we went through, you can enlarge images by pressing on them.
## The chosen PCB artwork
One evening when screen sharing design iterations on Discord, I was iterating the usage of Finland into the board. With input from viewers and rapid Gimp skills, I eventually created the massive letters with Finland as the cutout. It looked awesome and became to be with some minor tweaks to the PCB artwork of Neito.
## Extra B key
The PCB prototypes were ready to be ordered, but we started to question the design of the keymap at this point. **Do we want to create a Majbritt-copy with additional functionality, or would we want to have our layout?** We noticed that we could add in an additional B-key, hence mimic more Alice layout and make our design unique at the same time.
One would think that adding in one button would be trivial and you are right, but due to the way we had placed the Atmega chip on the PCB we had to reroute everything surrounding the Atmega. This was no big deal but just work that had to be done if we wanted the extra B key.
## In-switch LEDs
We were about to order prototypes but received some feedback over the missing in-switch LEDs. We weren't too keen on the idea but thought that why not adding it as it shouldn't be too difficult.
The first iteration was done with an N-channel Mosfet, but when we noticed that we could simplify the routing of power to the LEDs, we changed this for a P-channel Mosfet instead. This meant that we had to have the power run the other way around from what initially planned.
The support for LEDs was clearly a "nice to have" feature but we didn't plan on ordering prototypes with the LED components as that would have made the prototypes more expensive.
## The layered acrylic case
Before I had even had time to think about the case, Migiii had already created an initial version of it to be laser cut. With some modifications like the additional space and keyboard stand parts of the excess plastic, we had a ready case to order.
I've had a few DZ60 PCBs where the Type-C port has become loose after connecting a cable too many times. A small support piece for the Type-C port could help with this issue. We figured out that we could laser cut from the same acrylic piece that slots perfectly in between the case parts and gives support for the Type-C port. After lots of measurements and some iterations, we had a good candidate for the Type-C support piece.
## The first prototype
We ordered a total of 5 prototype PCBs with assembly only of the most critical components. It was nice to see that the keyboard worked on the first try. We ordered the prototypes around new years eve 2020-2021 and received them around the beginning of February.
## The first assembled Neito
I built the first Neito in one of my streams. It took a whopping 4-5 hours as there was a clearance issue and the switch holes were a tad too tight. At the end of the day, the keyboard was properly working and felt awesome. The first Neito was built with Durock V1 stabilizers, Kiwi switches and double shot ABS keycaps.
[More photos on the GB page](https://olli.works/blog/neito-group-buy-a-alice-like-keyboard-with-iso-support/#neito)
## Debugging RGB LEDs
As the clear case looks amazing, we started thinking if we should after all try to implement RGB underglow. We didn't have spots for the LEDs in the PCB so we had to test it out with some nasty looking hand wire solution and an RGB LED strip.
We had to get a jump wire attached to one leg of the Atmega chip, add a resistor in between and then solder that and power + ground to the LED strip. After reworking the code for some time, we finally got the LEDs to shine.
This meant that we had more work to do with the PCB design as the RGB LEDs and everything related to the wiring had to be added to the PCB design. We didn't have a true prototype of this but due to its simple schematic we didn't feel that it was too worthy of ordering new prototypes just because of this.
## Group Buy setup
I had never hosted a group buy(GB) before but knew the overall concept of how it would be arranged. The first issue however was that I didn't have any payment platform for taking payments. I played around with a few ideas on how to tackle this issue.
* Snipcart, plug and play webshop for static sites
* Shopify
* WooCommerce
As someone who works with WordPress as the main income, WooCommerce would have been the clear decision to build the GB store on, but since my own site is a static site built with Hugo, I didn’t want to hassle with some web hotel just to set up this store. I was looking at Shopify as an alternative but still wanted to sell the items via my own site. For static sites, the clear solution was Snipcart.
I set up Snipcart, set up potential shipping locations and had one eager buyer be my test-buyer for the store. I wanted to create this GB with the main intention to serve the Finnish Mechanical Keyboard Community and hence **wanted to run the GB as transparent as possible**.
## The group buy is live!
The group buy went live on the 12th of February and I received almost instantly a few orders from active members of the FMKC. I created the [Reddit post](https://www.reddit.com/r/mechmarket/comments/lj2twb/gb_neito_an_iso_alice_board_running_until_the_end/) and started to gain some attention from abroad. Unfortunately, I wasn’t able to get the GB up on Geekhack due to their requirements of having to prove that you are not a spammer by contributing to the discussions. Geekhack admin eventually got in touch with me but it was too late at that point and I had no interest in starting to spam their forum to get my GB up there.
[Group buy page](https://olli.works/blog/neito-group-buy-a-alice-like-keyboard-with-iso-support/)
## It kind of went viral...
The Finnish tech-forum **io-tech** made an article over the group buy. This was something I never expected would happen and I got really excited because of it. The flipside of the coin with this article was that it brought the GB and keyboard scene up for more casual users who didn’t understand why something like this was even being sold.
[IO-tech thread](https://www.io-tech.fi/uutinen/suomalainen-mekaaninen-neito-nappaimisto-ergonomian-ystaville/)
The article got quickly spammed with toxic comments and despite the CEO of io-tech trying to explain the niche. Some commenters didn’t seem to understand the concept at all.
There were also people who thought that this project looked really cool, and some FMKC members also participated in the discussion to clear out the misconceptions that some commenters had.
I didn't get hurt by any of these comments but rather took them as hilariously stupid, this one in the image being my favourite one.
## The group buy kept growing
When the MOQ goal of 20 orders was achieved I started to be slightly stressed over how many orders there would be. There was still a lot of time left in the GB and yet I received every now and then a new notification over paid orders. I had never organized a GB before and we were doing the GB as kind of a prototype run, we hadn’t ordered the PCBs with the same configuration and the addition of RGB underglow was still in question will it work or not.
## The shutdown
I had been thinking about closing the GB for a while, and every new order made me somewhat more unsure about it. I started wondering about what if something goes wrong, what if the RGB LEDs don’t work after all. What if components are missing?
The GB was at almost 50 orders when I decided to pull the trigger and shut the group buy down. I could have kept it up for longer but due to potential damage control and limiting my own workload, it was better for the GB participants that I shut it down. **I didn’t want to do it but it was the sane thing to do.**
## PCB issues
When I received the photos of assembled PCBs from PCBWay I noticed that the boards were missing a single SMD-resistor which made the underglow not work. This caused some additional time in production as I wanted to have the boards fully assembled in the factory.
When I received the PCBs we noticed another bigger issue. All the RGB LEDs were facing the wrong way hence making the underglow not work. Thankfully the RGB LEDs had voltage protection since otherwise each PCB would have bigger issues if connected to a power source before flipping the LEDs. The boards were otherwise fine and worked well.
I thankfully have a friend who has the right tools to rotate the RGB LEDs on each PCB 180 degrees, though this was not a small job in itself. Every board required about 20 minutes of work to flip the 11 RGB LEDs. My friend handled all the PCBs and was of course compensated for the work. **Shoutout to magicsmoke for doing the repairs**
The LEDs were the biggest issue but there were also a few PCBs that had “loose” SMD components and one broken PCB. The loose SMD components were luckily easily fixable by applying a little bit of solder on the SMD components pads.
## Case issues
I had underestimated the QA work that I had planned on doing. In every case, every plastic piece had to be checked for potential scratches caused by the production. The last thing someone wants is to be a part of a GB and receive a scratched acrylic case. I checked every case by hand for potential issues.
About 10% of the cases had some sort of scratches but I was happy to know that I would be receiving replacement units for the scratched ones. When I noticed the issue, I was still waiting for the PCBs so there wasn’t a rush in that sense with the replacement cases.
### Case assemblies
I assembled some cases to show what they would look like for future reference. When assembling them I noticed an interesting issue with a few cases which based on the issue that acrylic thickness might vary. The Type-C support piece required an exact 3mm cutout, but if the acrylic was too thick at the type-c support piece, you couldn’t slot it in since it didn’t fit. This happened in two units I assembled. Luckily this was easily fixed by sanding the Type-C piece with really fine grit sandpaper eg. 1000. The finer the sandpaper, the cleaner the end result.
One weird thing was that depending on the case, some cases didn’t fit well the screws that I had reserved for the GB. These screws were slightly too short to support all 4 legs of the case, but at the same time too long to support only 3 legs. This varied a lot case by case (no pun intended) as some cases had no issues while others had something more significant. Ordering new screws for the cases would have taken so long that I decided that we’ll need to work with what we have. If you had issues with the screws, you could either replace them with some other M2.5 screws or shorten the included screws to fit better. I've tested shortening screws both with a Dremel and side cutters. The Dremel leaves a nicer finish but the side cutters are much safer and faster to use.
## First assemblies
Together with the GB, I had offered my own build-services for the Neito keyboards. In the end, I had 4 Neitos to assemble. How this worked out was that if you wanted your Neito to be assembled by me, you needed to order the switches and stabilizers that you wanted for your build, I would do the assembly during a Twitch stream and then finally ship the assembled keyboard to you after it had passed my own QA.
This was nice in the sense that I didn’t have to assemble another Neito for myself and got to test that everything indeed worked together as planned. During the assembly, I noticed that despite the larger switch cutouts in the plate, the cutouts were still slightly too tight for the keyboard to be assembled without small felt pieces keeping the plate away from the PCB. I decided to ship every keyboard with some felt pieces so that the assembly would be easier.
The first builds were also good for taking photos for the keyboard assembly guide.
## The build guide
Because assembling a layered acrylic case can be somewhat tricky and I wanted to have the build guide live before doing any shipments. I took photos while I was assembling the commissions and used those to create the build guide for the Neito keyboard. The guide is helpful and is updated whenever a new issue occurs and guidance is necessary. Please read it if you plan on assembling a Neito keyboard.
As of writing, the PR has been pending to QMK repo for about 5 months and it's still not merged. Hopefully, it is merged soon so that we can get Neito to be a part of the supported layouts in VIA.
[The build guide](https://olli.works/blog/neito-rev-1.0-keyboard-build-guide/)
## Packaging & shipments
I first packaged every order to their respective box and kept track of them all with the order numbers. Once I was ready to start shipping the items, I noticed an issue with shipments abroad. If I wanted to ship anything outside of Finland, I needed in addition to all the information that I already had, the phone number of the GB participant. The shop I had set up didn’t have phone numbers as a field in the default setup so I had to ask for these by mail. Almost all participants abroad answered my email within a few days which was nice as this made it possible for me to ship the items earlier.
## GB Shipments on the map
I created this visual representation of where all the packages have been sent to. Sadly no Asian orders were made in the short timespan the GB was open.
[See full image](https://olli.works/orders_map.png)
## Feedback from participants
Despite the shipments were postponed and there were some issues in the production, no single participant has complained about anything! I even got some really positive feedback from a few participants.
> “This has been the best GB I've been part of in a long time, you've done an excellent job. I've been in 15+ buys now and the number one thing is communication, which you've been great at. Delays and problems happen in all buys, they're expected 😄 So it's just a matter of keeping everyone in the loop”\
> \
> \- GB participant
> “thanks so much! It arrived yesterday and I'm happy beyond words. I still get 145 wpm with it.”\
> \
> \- GB participant
## Sale of additional units
After most of the GB packages had been sent, I started to see how I would sell the additional units. I had some extras in case of issues arising or packages being lost, however, when more and more packages arrived at their destinations, I opened up the sale of extras.
As of 22.7.2021, all the additional units have been raffled out and the focus has been steered towards R2. There might be some handwire Neitos up for grabs but I would suggest you to keep an eye on #post-gb-neito channel in FMKC Discord for any updates.
## Thoughts about running a GB
I knew that there would be work but the amount of work in this GB came as a surprise. I think the most time-consuming things in this GB was the QA and shipments, and of those, the QA could be done by the factories. You would think that it’s simple to handle a GB but if you want to do everything yourself, it does take a significant amount of time. As a perfectionist I did spend too much time on this GB and also the set price is way too low compared to my expenses and time invested.
This GB has shown me how it feels to arrange a GB and I've learned how things could be done with less effort. I would arrange some sort of testing of PCBs in the factory that produces them. This way I can be sure that all work straight out of the box. Acrylic cases QA can be a bit harder since it’s 100% manual work but I bet a manufacturer would be willing to do this for an additional fee. If there is any work one can outsource, I would do it.
I could have saved a fair amount in the shipment prices, probably around 20-40% but this would have required additional work to investigate how I could send out all the packages as a batch. Due to the phone number issue, I wasn’t able to send out all packages at once, and it was just easier to do it the traditional way. I did borrow a printer to print out the packaging labels as writing those by hand would have been a nightmare. If the GB would have been of a smaller scale, I might have done it by hand.
## Future keyboard GBs and Neito Round 2
I've been thinking of hosting a Neito Round 2 but I don't think it will happen right away as there are some things I want to improve with the design of Neito. There is no ETA but I can say that I'm planning on it but it'll take some time before everything is ready for it. Please be patient and remember, PM'ing me about Round 2 won't make it come any faster 😅
## See my other keyboard-related posts
---
# Neito Rev 1.0 Keyboard build guide
URL: https://olli.works/blog/neito-rev-1.0-keyboard-build-guide | Published: 2021-06-04 | Tags: keyboards
> This is the build guide for Neito Rev 1.0 keyboard. It's recommended to briefly read this through before starting the assembly.
This guide should have everything you need to know to assembly your Neito keyboard.
## Who this is for & table of contents
This guide is meant for participants of the Neito Rev 1.0 group buy. As this is a layered acrylic design, there are some things that are good to know before starting the assembly.
This guide does not go into depth with QMK or how to solder, it's focused on how you assemble your Neito keyboard as it does have its own quirks.
## Table of contents
[Disclaimer about tolerances](#disclaimer)
[The default content of group buy order](#contents)
[Prerequisites](#prerequisites)
\- [Test your keyboard before assembly](#test)
\- [Install stabilizers](#stabs) [Install felt pads](#felt-pads)
[Adding switches](#switches)
[Install Type-C support piece](#type-c)
[Install the rest of the case](#case)
[Getting VIA running](#via)
[QMK](#qmk)
[Keyboard stand](#keebstand)
[In case of issues](#issues)
## Disclaimer about tolerances
Due to manufacturing tolerances, the acrylic can be too thick or screws too short or long. This is something we noticed only late into the group buy and can be fixed with adjusted screw lengths. Ordering new screws for the group buy would push the date even further back so let's hope there are little to no issues.
One of the cases I assembled had much thicker acrylic at the Type-C support piece, making it not fit in the case. If you happen to have a similar issue, you can use very fine sandpaper to make it thinner while still keeping its nice finish.
## The default content of group buy order
This is what you should have received if you participated in the original group buy. This example is the amounts for a single keyboard:
* 1x Neito Rev 1.0 PCB
* 1x Neito acrylic case pieces (in the color you ordered)
* 1x minigrip bag with keyboard stand parts and type-c support piece
* 8x 6mm brass M2.5 hex standoff
* 8x 6mm stainless steel screw
* 8x 12mm stainless steel screw
* 4x 16mm stainless steel screw
* 1x piece of felt pad
## Prerequisites
Before heating up your soldering iron, there are a few critical things you should do.
### Test your keyboard before assembly
**This is really important!** Plug the keyboard into a computer and start testing the switches **with VIA** by shorting their contact points with metal tweezers. The keyboard has a really basic keymap as default and all the underglow RGB LEDs should shine. If there is an issue, it's much easier to debug/fix it if the keyboard hasn't been assembled.
### Install stabilizers
There are x4 2U stabilizers that should be installed on the PCB. Do it right away you are sure that the PCB works.
## Install felt pads (optional but recommended)
We enlarged the switch-cutouts in the plate from 14x14mm -> 14x14.15mm. This did make the switches be looser in their spots but the cutouts are still too tight with some switches. One build with Durock Koalas was too tight and required the felt pads when again another build with Boba U4 worked fine. Your mileage may vary but I recommend installing these in tactical spots as marked red on the image.
You can see the white felt pads if you use a clear case, but when you have the keycaps installed, none will be visible. You might not need to use the exact spots as in the image nor use even all posts, the most important ones are ones in the middle as that's the spot where the acrylic plate bends the most.
This issue is a common issue with 3mm layered acrylic cases as switches are meant to have a 1.6mm plate, not 3mm as in our case.
If you don't use felt pads, there is a risk that the switches will push the plate towards the PCB, hence making the keyboard not sit flush. In this situation we had used felt-pads but not by the space-keys. This made the switches push the plate, but once assembled, the downward force of pressing keys is enough to push the plate into position in this case.
The worst place to have the plate being pushed is around the middle of the PCB as there the plate support is weakest.
## Adding switches
After having the felt pads in place, put your plate on the top-side of the PCB and start inserting the switches. Make sure you press the switches fully in, the 5-pin mount requires some force that the switches are well set.
I'd recommend at first to solder all switches and after that the optional rotary encoder. This is because if you have switches AND the encoder installed unsoldered, your keyboard won't lay flat on the table for soldering.
## Install Type-C support piece
When you have all the switches soldered, you should be able to insert the Type-C support piece by sliding it around the port. If you didn't use felt or otherwise don't have the plate being flush with the switches (meaning the plate should not lie on the PCB), you need to get that sorted out first. Using excess force could break the Type-C port, be cautious.
## Install the rest of the case
Flip the keyboard face down and add **carefully** the two middle layers. These layers have a little gap by the Type-C port so that they clamp around the Type-C support piece. Add the 6mm hex standoffs and then the bottom plate.
At this point, you should decide if you want to go for a flat profile or if you want the keys to be at an angle.
For a flat profile, tighten the bottom plate with 6mm screws.
For an angle, add 3 or 4 "legs" to the backside. Screw bottom plate with 6mm screws and use the 16mm screws the the "legs". Due to slight variations in thickness and screw lengths, you might be better off with 3 or 4 legs.
Flip the board around, add hi-pro layers and tighten everything from the top side with 12mm screws.
## Getting VIA running
VIA is the software that you can use to edit the keymap of the keyboard. The current version of VIA doesn't support changing what the rotary encoders do (despite click) so if you want to change the rotational behavior, you need to compile your own .hex that you then flash the board with. Neito has been merged into QMK and is supported in VIA.
[Download VIA](https://caniusevia.com/)
## QMK
If you want, you can also compile your own version of the software using QMK. The rotary encoder is not changeable via VIA so you need to compile your own software with the wished modifications to get the encoder's behavior to change.
[Neito in QMK repo](https://github.com/qmk/qmk_firmware/tree/master/keyboards/neito)
## Keyboard Stand
The middle layers are laser cut as single pieces of plastic and had lots of empty space inside them. It would have been a pity to waste all that acrylic so I came up with the idea of creating a keyboard stand. The one in the image is the prototype stand but is built the same way as the GB stands.
There are 6 pieces in the keyboard stand, but when it's built it looks like 3 pieces. By using double the material for the pieces, we have a more sturdy keyboard stand compared to single 3mm pieces.
## In case of issues
You can be in touch with me if you have issues with the assembly of your keyboard. Remember that you don't need to use force to assemble this keyboard. Most issues should be resolved with either this and some other basic keyboard assembly guide. If there are dead switches or LEDs, contact me and we'll see how we can get it fixed.
[Contact me](https://olli.works/contact/)
## Check out other keyboard related posts
---
# Want to share a whisky cask? (Cancelled)
URL: https://olli.works/blog/want-to-share-a-whisky-cask | Published: 2021-05-24 | Tags: whisky
> I've been thinking about having a own whiskey cask but buying one alone doesn't really make sense, however buying in a group yields a more manageable amount of bottles per person. Are you interested in sharing a cask with me?
I'm arranging a shared-cask order from Teerenpeli to have a manageable amount of bottles per person. Some terms still apply as this is mainly for friends and acquaintances in Finland.
### 8/40 shares reserved
*\*most of the images are taken from the Teerenpeli whisky cask ownership sales document*
I’m arranging a shared whisky cask order from Teerenpeli. I’ve wanted to have my own cask but the steep price for owning a whole cask/barrel. There are a few companies in Finland that offer whole casks but those casks are still around 60L in size, owning a cask alone would make my own whisky collection quite boring. By sharing this cask between 40 shares, the bottle amount is much more manageable and the price isn’t that bad either.
## The distillery
We could make the whisky cask order from Scotland but due to Brexit there might be unforeseen expenses with taxation, hence it might be better to stay within Europe with the order. I've looked at all potential distilleries in Finland (Kyrö, Teerenpeli, Nagu, Valamo, HDCO) but Teerenpeli seems to be the best choice due to its spirit and cask offering.
[About Teerenpeli](https://www.teerenpeli.com/)
## The initial idea
My idea with this cask sharing is that by investing in a cask now, the ready product will arrive in 3-10 years, feeling like a little gift for the future myself. The whisky would be sitting in a single cask for an undefined time and bottled when we feel like it’s ready. There is no idea how the whisky would taste like but taken into account that it’s managed by a proper distillery, this isn’t any homebrew and still totally legit.
If the whisky hasn’t improved in 1-2 years at some point, maybe it’s a sign that it’s time to bottle it. No need to have a whisky sit 10 years in a barrel if there is little to no improvement over the years.
## About the whisky and cask
The idea would be to order the cask from Teerenpeli and use their default distillate. This would equal a low-smoke/smokeless whisky.
**Cask:** 65L Oloroso Cherry cask ( other options were: PX, Oloroso, Palo Cortado, Amontillad or Moscatel)
**Distillate:** 61.7% Teerenpeli default (tiny hint of smoke)
We are planning on bottling the whisky as cask-strength at 61.7% (+- angel’s share) as diluting something this exclusive would feel really wrong.
## Price and ratios
There are some initial costs when starting with an own cask and additional taxes when we finally get the whisky bottled.
**Cask:** 450€ (we share this cost between participants)
**Distillate:** 18€/L
**Taxes and other expenses:** about 25€/0.5L
The initial price would be something around 2000-2200€ for a start + the taxes later on. *(Note this is the full price, not shared)*
### Example of a 1/40th share:
**Initial price:** 52€-ish (paid when and if we have enough participants)
**Bottles:** around x3 0.5L bottles
**Taxes and other expenses:** 75€-ish for 3 bottles (paid after bottling)
**Total price:** 127€-ish for 3 bottles of x-years aged Finnish Single Cask Whisky
## Delivery and labels
You could either come to pick up your share of bottles or have them shipped to you at your own cost. The funny thing is that there is no date for ETA for that due to we don’t know how long we’ll have the whisky in the cask. I’ll be with 99% certainty still live in Espoo when the whisky is ready to be picked up/shipped.
Teerenpeli offers adding labels on the bottles, I guess we could discuss if we get some bottles labelled and some as empty so that each one of you could make your own label for your own share of bottles.
## Upkeeping and yearly samples
We will get yearly a sample from Teerenpeli which tells us how the whisky has changed over the years. These samples are so small that they cannot be shared but I’ll share tasting notes and my own thoughts on the whisky itself with every sample.
As for other updates and discussion, I feel that a WhatsApp group + email list would be a good combination for communication.
## Transparency, uneven shares and the cask
Due to sharing an unknown amount of bottles, it’ll most likely end in a non-dividable amount. As the host for this shared cask, I’ll have the additional bottles and pay the taxes for them.
The cask is interesting as it’s something that’ll be owned by us after the bottling. My suggestion would be that this cask will be given to me after the bottling as a reward for hosting this shared-cask experience. I hope you are fine with this.
## Timeline
**2021 Q2**
Find suitable people to share the cask. It would be nice if we have enough people so that the calculated 40 shares would all be taken. There might be some variables before the order is made, all choices strive for a hopefully better result.
**End of 2021 Q2**
We’ll make the order and it’s your time to pay your initial cost for this shared cask experience
**Between 2023 - 2030**
I’ll keep you up to date on how our whisky has changed and opinions on if it should be bottled at that point or not.
**Some date in the years 2023 - 2030**
We are ready to bottle, now it’s time for you to pay your share of taxes and other fees.
Share the cask with me and a few others
Please fill the form with your information if you are really serious about participating in this cask-sharing order. If you have any questions, you can contact me in the way you prefer via the contact page.
[Contact me](https://olli.works/contact/)
---
# DIY whisky glass lid with Fusion 360 and 3D-printer
URL: https://olli.works/blog/diy-whisky-glass-lid | Published: 2021-05-22 | Tags: diy, whisky
> I found a really nice looking whiskey glass lid that was sold in the US. Buying that lid as a European would have caused high shipping and taxes so I decided on giving a shot creating the product by myself.
I gotta admit I’m a fan of whisky. I find it really fascinating how a strong spirit can change so much in taste by just sitting in wooden barrels for years. One good place for information about whiskys is the [Whiskey Vault YouTube Channel](https://www.youtube.com/channel/UCElm866_W5r1eg8VjhFNARw). After watching too many of their video, I decided to join their community and stumbled with that on their merchandise, which included a **challenge coin**.
## The challenge coin
When I saw this coin/glass lid I knew I wanted one but the steep price for such a small item wasn't really attractive. If you live in the US, that price would still be somewhat reasonable, but when you have to ship the item over to Europe and pay additional taxes, you start to think twice if you really want it or not.
I started thinking that could I replicate or make a product similar to this one myself. The lid feature was essential and the toast message was a high-priority nice-to-have.
[The Challenge Coin](https://whiskeytribe.com/collections/challenge-coins)
## Thingiverse and Tinkercad
There were some ready-made designs for whiskey glass lids.
I took one of these, imported it into Tinkercad and tried to work with it. Apparently changing from a .stl-file to something workable doesn't really work out nicely and produces overly complex points in the model versus how simple the design actually is. I would have been able to do this with Tinkercad but due to its lack of precision, I felt that I needed something better.
I hadn't before made any particular 3D models so each software was a little challenge in itself. After giving up with Tinkercad and the usage of pre-made models, I decided that I would need to create the lid from scratch.
## Hello Fusion 360
I had previously made sketches for laser cutting in Fusion but creating 3D models was something new. After a little investigation, I found all the same tools that Tinkercad has and I was able to create something.
For simplicity, I split the task for myself into four parts, four parts that should be printed on top of each other to form the final lid.
* Top-ring
* Middle layer with toast-message
* Bottom outer ring
* Bottom inner ring
I got the toast message from the actually products image, cleaned it up in Gimp with contrast and partially fixed issues by hand, and finally converted the image into vector format so that it could be imported into Fusion.
## First proto
I had used a digital ruler to get the dimensions of a Glencairn glass and used those to create the initial model, leaving a generous 0.5mm additional space the for glass edge cutout.
My friend Hekeke printed out this first proto with his **Prusa i3 Mk2.5S**, using Clas Ohlson PLA and 0.25mm nozzle, 20% infill gyroid (Some printer nerds might find these stats interesting).
[Check out Heke.io for more awesomeness](https://heke.io)
After the print was done we noticed that the PLA had shrunken a tiny bit, but so much that this piece didn't fit anymore on top of the glass. I guess my tolerances were too strict and I should have made it larger to also take into account the paint and lacquer I had planned on using. In the image, I had cut the piece to see how much wider the lid would have to be.
## Proto #2 and finish
I enlarged the whole model in diameter by 2mm and made the gap for the glass edge also significantly wider. These values were pretty safe to work with but also caused 3D-print wise a larger overhand which might have caused issues when printing.
I finally received 4 lids that worked well. I painted them with several layers of enamel gold paint (same stuff as used with miniature cars) and gave them finally several coats of spray lacquer.
## End result
I feel that the end result turned out really nice. The original product still blows this out of the water but for my own use, these will be enough. Also, every time you create something yourself, you feel better using it due to the attachment and memories you have with making the product.
I still haven't *tried* the product with whisky but as of writing, I have all the lids soaking in whisky water to get rid of or override any smells from the paint or lacquer. Making these lids also creates the need to have a whisky evening with my friend, it's really important to test these with good company 😉
If you managed to get this far, I’ll salute you! Let us toast for this project
## If you fight, may you fight for a friend. If you steal, may you steal a lover's heart. If you drink, may you drink with us.
## Skål!
## Update 25.5.2021 - Critisism
I’ve received some complaints about this product as some say I’m fully ripping off the store. The whole intention with this tinkering has been to be able to enjoy whisky in a new way without having to pay over double the price 43$ (product price + shipping and taxes) for the product. This is compared far from perfect and only meant for personal use. I also have no plans on sharing the .stl-file because it’s an overly simple 3D object and the text/image on it is very poor quality, especially for 3D printing.
## See other whisky related posts
---
# Animating matrix of items with just CSS
URL: https://olli.works/blog/animating-matrix-of-items-with-just-css | Published: 2021-04-02 | Tags: development
> Exploring my idea of creating animated visuals with the help of SCSS
I've always loved CSS and how well it performs with animations. I've had this one idea growing on me about creating visuals or landscapes created mathematically and be animated to some extent. Here is my first test on how well this works.
## The Goal
There are several fancy JS libraries for creating stunning visuals, but I’ve never really been that hyped to do things via JS if you can do it with CSS. Thanks to having “long math” in high school, I remembered that you could create mathematical expressions and use that to generate visuals. For a first demo, I felt like a moving plane could be a good demo, so here are the specifications for the project:
* Moving plane (matrix of HTML items)
* Use mathematical expressions for some values
* Interactivity
## How we are going to achieve it
CSS is quite limited and since we need to do mathematical calculations, it would be better to have the calculations be done when the client is loading the page. This can be achieved if we do the logic in SCSS and generate the proper values. By creating a matrix of items, targetting them with CSS nth-selector and doing the expressional calculation depending on matrix dot index, we can achieve mathematically calculated visuals.
## The code
Here is the part of the code that does the magic:
```css
// Expression: x^2 + 4
@for $r from 0 through 9 {
$rowStart: ($r * 10 + 1);
@for $c from 0 through 9 {
$columnStart: $rowStart + $c;
// Work with row values
$valueX: pow($rowStart, 2) + 4;
@if $row == 0 {
$valueX: 0;
}
// Work with column values
$valueY: pow($columnStart, 2) + 4;
$valueY: 0;
@if $column == 0 {
$valueY: 0;
}
// Working on translate Z
div.dot:nth-child(#{$columnStart}) {
.dot__inner {
$hslColor: (($c + $r) * 15deg) % 360;
animation-delay: $c * 0.1s + $r * 0.2s;
animation-name: gradientWobble_ + $r + $c;
// Hue
background-color: hsl($hslColor, 50%, 50%);
@keyframes #{gradientWobble_ + $r + $c} {
0% {transform: translateZ(0px);}
50% {transform: translateZ(($valueX + $valueY) * 0.025px);}
100% {transform: translateZ(0px);}
}
}
}
}
}
```
We are using the simple mathematical expression (x^2 + 4) where x is the index of the elements. As we traverse the indexes, the result from the expression changes and therefore generates a different translateZ value.
The colors are not made in any fancy but they are also based on the index. We calculate the HUE with (index-X + index-Y) times a modifier. With this, we get a rising HUE-value that we can set to a value between 0 and 360 with the help of modulo (HSL-Value % 360).
These 40 lines of code generate approx 2000 lines of CSS with this 10x10 grid. As we made the grid bigger, CSS-size increases quickly.
## Demo
You might notice that I’ve used some JS but that is only for generating necessary amount of HTML-elements as I’m too lazy to do copy-paste 100 times.
[See the Pen](https://codepen.io/olligranlund/pen/NWddWzG)
## Future thoughts
One thing lacking from this demo is interactivity. I’ve been thinking about using SCSS maps for easier handling of variables and move from CSS Animations to CSS Transitions. With CSS Transitions you could have certain previous elements affect what values the matrix-items should have with eg. “\:focus” state, this way we can stay away from JS 😃
## See my other development projects
---
# Neito-keyboard Group Buy (GB HAS ENDED)
URL: https://olli.works/blog/neito-group-buy-a-alice-like-keyboard-with-iso-support | Published: 2021-02-09 | Tags: keyboards
> I wanted a Alice keyboard but didn't want to settle on the ANSI-layout. There wasn't really a single alternative keyboard that filled my need so I decided to make one myself!
A Alice-like keyboard with ISO-support
**I wanted an Alice keyboard but didn't want to settle on the ANSI-layout. There wasn't really a single alternative keyboard that filled my need so I decided to make one myself!**
Ever since the original Alice-keyboard was released I wanted to get my hands on one. The big issue for me was that it didn't support ISO-layout. There was a board that was similar and with ISO-layout called **Majbritt** but you couldn't get your hands on it. This all led to me having to learn KiCad and Fusion360 to make this board myself (with help from friends) from scratch!
We want to be transparent with the phases this project has had if there are any questions you can be in touch in your preferred way via the [contact page](https://olli.works/contact/ "Contact page").
## Final update
**All orders have been received**
I want to thank you everyone who has either participated in this group buy or just followed along. I have learned a lot when doing this, in both PCB design and CAD. I’m working on a new revision of Neito but it’ll take time before it comes out. Follow my blog for any updates if you are looking to get one!
## Group buy update 6.6.2021
**Around 30% of the orders have already been shipped!**
The shipments have started. If you have participated in this GB and live outside of Finland, remember to answer my email about your shipment information! I need a phone number to be able to ship anything outside of Finland.
Also, the build guide is up, go check it out!
[Build guide](https://olli.works/blog/neito-rev-1.0-keyboard-build-guide/)
## Group buy update 22.5.2021
**It’s been a rocky road but we are finally seeing light at the end of the tunnel.**
### PCBs
The PCBs arrived with underglow RGB LEDs flipped the wrong way around. Thankfully I’ve found a small company that is capable of fixing this issue. As of writing, the PCBs are being repaired.
### Cases
Most of the cases received were good but there were some units with scratches. I’ve already received replacement units so that every GB order should get an un-scratched case.
### Software
My Neito Pull Request is still pending. I recently updated it to have a more basic default and via keymaps and separated my own keymap. Keyboards are flashed with a (to be) VIA-compatible firmware.
## Final GB steps and additional units
I have everything ready to be shipped but I’m still waiting for the PCBs to be repaired. Shipment will be done via everyone’s domestic parcel service. I’ll be streaming on Twitch building at least 3 more units. I’ll provide a blog post with a Neito build guide. There will be some additional units that will primarily be up for grabs on [FMKC Discord](https://fmkc.fi) in the **#gb-neito** channel, any extras that are not gone right away will be listed up on Mechmarket.
There has been discussion about Neito GB Round 2, that might happen but first I want to get this GB done. No ETAs for Round 2 but first hints of Round 2 dates will be shared on FMKC Discord.
## Group buy update 17.2.2021
**Due to unexpected popularity, I’ve decided to close down this GB early on.** The reasoning for this is for me to have a controllable amount of shipments to handle + avoiding bigger chaos if something goes wrong.
If all goes well, I’ll arrange a Round 2 so that anyone who didn’t make it has a chance on participating. It’s been tougher than I expected, but a second-round should be easier to arrange as most of the pitfalls are known.
For those who have already made orders, you can still order an additional bottom plate or make changes to your color choices for the whole of February, please let me know of any changes by email. I will start sourcing the PCBs and cases in early March so that we can stay on time with shipments.
## Neito keyboard Rev. 1.0
* 68 Keys in ISO-layout
* Pre-flashed QMK and tested before shipping
* Fully assembled PCB
* RGB underglow (read full post)
* Backlight support
* Rotary encoder support
* VIA/VIAL (if we get PR merged)
* Acrylic case of your color choice (comes with type-c port support piece)
* Comes with keyboard stand
* Estimated shipping end of Q1 2021
**MOQ broken, GB ended prematurely due to unexpected popularity.**
[See all buying options](#neito)
## How it was made
We started working in late 2020 on this layout. At first, we tried to replicate fully the Majbritt-keyboard layout but opted to add in support for the rotary encoder, additional B-button, LEDs and RGB underglow. Some days before NYE we received our prototype PCBs with most components soldered on. We flashed on the software and started getting keycodes right away! Check out this demonstration video for more details.
### PCB
The PCB contains 68 keys. You can have a normal switch instead of the rotary encoder, the caps-lock key also supports either supporting the keycap from the middle or from the left side.

The key-sizes are mostly normal, but there are some keys that are slightly modified in size due to the design of the board. Here are listed the bottom-row keys + right shift to ensure keycap support.
**9,0:** 1.5U
**8,1:** 1.5U
**8,2:** 2U
**9,2:** 1U
**9,3:** 2.75U
**8,4:** 1.5U
**6,6:** 1.75U
We didn’t order the prototype-batch of PCBs with LEDs nor underglow but managed to test that those work. The PCBs in this GB will come with all components pre-soldered so all RGB LEDs should work right out of the box. The thing we’re worried about is that something goes wrong in the manufacturing phase, this is just a precaution.

### Case
The case is made out of 3mm acrylic sheets and is made from 6 layers (two HiPro layers, switch plate layer, two in between layers for standoffs, bottom plate) + 4 layers of legs. We’ve designed the case so that it comes with a little additional piece of acrylic that wraps around the Type-C port, making it more durable. Every case also comes with a keyboard stand due to the fact that we can laser-cut the stand without any additional material cost. The stabilizers we used were Durock stabilizers, and the fit was perfect! The Case will be laser-cut by a Finnish company called Tunkua.
There have been some questions over if this case is compatible with Alice or similar PCBs. The answer is sadly no, the keyplacement + layout is slightly different due to ISO vs ANSI.
### Minor issues with prototypes and how these have been taken care of:
**Switches popping easily out of the plate**
We’ve enlarged the holes in the plate from 14x14mm to 14x14.15mm. This slight adjustment should make it easier to install switches and not have them pop-out as easily. Also, every order comes with a strip of white-pad-material which should fit perfectly between the PCB and plate. These ensure that the plate stays exactly where it is supposed to. By installing these in tactical spots, you cannot see them after installing keycaps.
**Extra-B too tight**
In our design process, we forgot to add some extra spacing around this single key. In our prototype case, we had to sand down the edges to make the key work smoothly. In the GB case, this issue has been taken care of and this has been tested with a 3D-printed piece (Thanks Hekeke 💖).
**Keyboard stand flat part too long**
The stand was perfect except for the fact that it was slightly too large. We’re scaling this down a little bit so it should be better.
### Additional notes
We’ve added some additional legs for the keyboard, this lets us have a higher degree of tilt if we want. The legs are 4x 3mm acrylic pieces added to the backside of the case. In the GB we will provide you with M2.5 screws for both flat and fully tilted case, but if you want some angle in between, you can source the necessary screws easily for cheap. The screw-holes are the same in front and back, so if you want an inverted tilt, you can also do that!
## Assembly and build service
Foremost, remember to install stabilizers before soldering! The Assembly of this keyboard is relatively simple if you have done any build previously with a plate. The 3mm acrylic plate might cause some challenges as the switches might pop-out before they have been soldered, once soldered, they will sit tight. Using white-pad material helps a lot with assembly and cannot be seen when keycaps have been put on. The Type-C port has an additional support piece. Add this after having the plate soldered with switches.
**For the assembly, you will need these parts:**
\- x67/68 switches
\- 1x EC11 15mm/20mm rotary encoder (optional)
\- 4x 2U stabilizers, I recommend using Durock stabs
\- x67/68 through-hole LEDs in your preferred color (optional) for backlight
\- Keycaps and optionally encoder knob
\- Basic tools for the screws
**If you need help with the assembly or soldering, contact me before ordering and we’ll sort it out! 😊**
## Color options
The color options are:
* Clear
* Transcluent frosted clear
* Transcluent black
* Transcluent red
* Transcluent blue
* Opal
There used to be a Imgur album embed here but Imgur turned into a pretty bad service at some point and the album doesn't work despite existing…
## Risks
As this is a group buy there can be some unforeseen delays. We are trying to get all the orders shipped out asap so that we can stay on our original schedule!
Another risk (or perhaps just my concern) is that there is some issue with the RGB underglow. As shown higher up on the page, we’ve tested that everything should work but we cannot guarantee that they work. PCBWay has marked the RGB LEDs as sensitive so these should be fine, but you can never know if something goes wrong in assembly. The main function of the keyboard will nevertheless work.
## Make your order
**By buying this item you acknowledge the manner of this group buy and the risks it come with. Please familiarize yourself with this project before placing an order!**
### Terms and conditions - by placing an order you agree to the following terms and conditions
* Estimated shipping date: End of Q1 2021.
* All items are ordered after the group buy so no returns/refunds can be done.
* All items shipped from Finland, shipping may cause additional expenses if you live outside the EU.
* We cannot guarantee that the underflow RGB LEDs work but will do our best to assess any problems, please read the full post for clarification.
* The sale is purely C2C (customer to customer) unless you are a business in Finland. In that case please contact me and so that we can create an invoice for you.
* The final product will be nearly identical to the one in the images, but there will be more components and another silkscreen on the PCB.
### Available items
**PCB** - PCB only, comes in antistatic bag
**Case** - Acrylic case parts + screws + keyboard stand. Select your prefered color in the cart.
**Additional bottom plate** - single 3mm layer for better RGB underglow. You probably don’t need this if you buy a clear or frosted case.
### Neito PCB
[GB has ended](#)
### Acrylic Case for Neito PCB
[GB has ended](#)
### Additional bottom plate
[GB has ended](#)
## Any questions?
If you have any questions or wonder about certain features, just contact me in the way to fits you the best.
If you are contacting me about your order, please send an email!
I’m more than happy to answer your inquiries :)
[Contact me](https://olli.works/contact/)
## Common Q\&A
**When is Round 2?**
\- Maybe in April 2021 if that happens
**Do I have to buy the additional bottom plate?**
\- This additional bottom plate is only for making RGB underglow work better. If you already have in the cart a clear or frosted case, you probably won’t need an additional bottom plate.
**Can I use the case with other keyboards?**
\- Sadly no, this is Neito only for now
**Is this keyboard hot-swappable or supports it?**
\- This keyboard is at least in this GB solder only, not suggesting using millmax sockets as they are quite unreliable
**Is there support for ANSI or Split backspace?**
\- This is an ISO-only board and sadly this revision doesn’t support split backspace
**Will there be a chance of buying this keyboard or PCB after the GB?**
\- There might be some individual units but no real store where this would be sold (unless CandyKeys contacts me about it)
**Are you planning on any other case designs than stacked acrylic?**
\- Maybe, but those are not for this GB, maybe in R2 if that happens.
## See my other keyboard related posts
---
# My keyboard journey until this day
URL: https://olli.works/blog/my-keyboard-journey | Published: 2021-01-01 | Tags: keyboards
> How I got into this silly hobby of mechanical keyboards and what I've learned over the years. I can tell you, mistakes teach well!
How I got into this silly hobby of mechanical keyboards and what I've learned over the years. I can tell you, mistakes teach well!
## Satan GH60
My coworker inspired me to build my first custom keyboard. I saw little anxious over soldering but it turned out quite decent for a first keyboard.
**PCB:** Satan GH60\
**Switches:** Gateron Brown\
**Keycaps:** Some 20€ blank keycaps\
**Case:** Some 10€ plastic case
I also added an RGB led-strip to the bottom of the keyboard. The case required some *handling* so that the strip would fit. Not sure if it was the lack of control or what, but I was never able to control the backlight, might have been due to the PCB.
Sadly the PCB of this keyboard died after about a year of use, the PCB started to behave unnaturally and finally died.
## Iris Rev 2.5
My goal was to have an as RGB-keyboard as possible, being split and having clicky switches.
**PCB:** Iris Rev. 2.5\
**Switches:** Kaihl Boz Jade\
**Case:** Keebio aluminium plate-case\
**Keycaps:** cheap DSA
This keyboard started to cause problems right from the beginning. As this PCB didn't come with a built-in USB-port, you have to use a Pro Micro (atmega32u4 microcontroller) for both sides. I guess I was really unlucky with the quality of my Pro Micro as the Master ones USB-port fell off after a little use.
Desoldering switches is quite easy but desoldering a Pro Micro is not. Fixing this keyboard felt like a little burden but after a year or so I added new Pro Micros to it to both sides, this time with hot-swap-sockets so that I wouldn't have to desolder another Pro Micro in case of an accident. Everything was fine but I never really got into using it.
Later on, I asked my friend to 3D-print me a case for the Iris as I wanted to bring it back to life. I got the printed parts and surface finished them by sanding and with paint. When putting it together in the new case, the slave side wasn't working. Luckily my friend Hekeke lent me a multimeter so that I was able to debug the issue. I found the issue, added a jumper wire and put the case together. It was finally back alive!
I had also changed the switches to Gateron yellows, lubed with Krytox 205g0.
## DZ60 #1
In the third mechanical keyboard meetup, I met a guy with this case and another guy with the keycaps, and it happened to be that both wanted to sell those parts. This is pretty much how my first DZ60.
**PCB:** DZ60\
**Switches:** Halo True\
**Case:** 4.6kg cast iron case\
**Plate:** Brass plate\
**Keycaps:** SA 9009
I'm in love with the case as it is really sturdy.
### Switch swap
I was able to try out Durock T1 in a meetup and fell in love with the tactility and was impressed by the quality for the price. I eventually desoldered Halo Trues and replaced them with lubricated Durock T1.
**Switches:** Durock T1 lubricated with Krytox 205g0\
**Keycaps:** EPBT Cherry Doubleshot Miami Night\
**Extra:** Dampening foam between PCB and case.
This is my favourite keyboard so far. It feels really good and is really unique due to its case.
## DZ60 #2
My goal was to create a hot-swappable keyboard so that I could more easily try out different switches.
**PCB:** DZ60\
**Switches:** Hako Royal True\
**Keycaps:** PBT SA Restor\
**Case:** old Satan GH60 case\
**Extra:** Mill-Max sockets for switches
I ended up having issues with the hotswap-sockets as they pushed the switches slightly up so that they weren't anymore aligned with the plate-mounted stabilizers, this made space and enter-keys pop-up or not retracting up after a press. As if this wasn't enough problems, the type-c port started having issues and finally losing contact.
This keyboard has made me question this hobby as everything went just wrong with this one. I've fixed the PCB and removed all hot-swap sockets and is waiting to be built someday.
## DZ60 #3
I had seen a split spacebar in a 60% keyboard and I also wanted one, hence pushing me into making this
**PCB:** DZ60\
**Plate:** Brass plate\
**Switches:** Gateron Yellow lubed with Krytox 205g0\
**Keycaps:** Domikey SA\
**Stabilizers:** Durock\
**Case:** Clear acrylic from KBDFans
This one turned really nice. I'm not the biggest fan of linear switches, but lubing Gateron Yellows makes them feel really good. This was my first perfect start-to-finish keyboard.
## PRKL30
This was the first community project and serves mostly as a meme. I equipped the keyboard with some cheap low-quality keycaps, for now, + a DSA ISO-enter. I have still no idea how to actually work with this as all additional keys are behind some layer.
**PCB:** PRKL30\
**Case:** Lasercut 3mm stacked acrylic\
**Switches:** Durock Koala\
**Extra:** Cheap plastic fantastic china knob
## Neito
This is a TGR Alice-like keyboard but with an ISO-enter and support for a rotary encoder. The board I have is the first prototype and there is meant to be a group buy of this board. Read more behind the link!
[Group buy](https://olli.works/blog/neito-group-buy-a-alice-like-keyboard-with-iso-support/)
## See my other keyboard related posts
---
# Let's talk about Mechanical Keyboards
URL: https://olli.works/blog/lets-talk-about-mechanical-keyboards | Published: 2020-12-27 | Tags: keyboards
> What makes a custom mechanical keyboard? I've listed here a short brief of everything you need to know!
Since you’ve made your way to this page, you probably have heard about mechanical keyboards. You can buy basic ones in almost any store, but to achieve the ultimate typing experience, you need to understand everything that contributes to a perfect “clack” also known as “endgame”.
## What
Mechanical keyboards differ from other keyboards by having a mechanical switch under each key, having most often springs for resistance. More traditional keyboards use a rubber-mat with traces which is cheaper to manufacture but lacks the feeling of a mechanical switch.
I will cover all the necessary parts, but if you want to watch a video instead of reading, **Taeha Types** has a really good video of the anatomy of a custom mechanical keyboard.
## Why
Mechanical Keyboards do have a slight edge over rubber dome-keyboards in responsiveness and N-Key Rollover but this is minimal. **A Mechanical keyboard doesn’t necessarily type better than a rubber dome, it all depends on your own preference.**
With a mechanical keyboard, you can often choose if you want a tactile bump, smooth linear or clicky feeling/sound. Many users also prefer the mechanical switch over a rubber dome for the *feel*, and since there are a lot of options for different switches, you can more likely find something that suits you best in a mechanical keyboard.
## Custom Mechanical Keyboards
**Now we’re in business!**
Custom keyboards are tailored keyboards to your preference, which you can build yourself. Custom keyboards consist most often from 6 different parts:
PCB, Switches, Keycaps, Plate, Stabilizers and Case.
By building a keyboard that has the layout you like with the switches you prefer, you can improve your typing experience and hence make it more enjoyable to use your computer. As a Developer, I have most of the day my keyboard in front of me, I value highly that it feels and sounds great, and many don’t even consider this.
## PCB
This is the brains of your keyboard and handles all the logic. They come in different sizes and layouts, most often spanning between 60%, TKL and FullSize, but there are tons of variations, also split PCBs. The PCB defines the key-layout and hence the size of the keyboard. **When looking to build a custom keyboard, this is the part you start to build everything around.**
*Note: You CAN build a keyboard without a PCB, but then I’d call you a madman.*
## Switches
This is the mechanical part of your keyboard, it has the biggest impact on how your keyboard feels and sound to type on. Switches are categorized in 3 main categories: Tactile, Linear and Clicky.
Every manufacturer creates slightly different switches. Some are smoother than others, some have a tactile bump earlier than it’s fellow, they vary in force needed for a keypress and of course visual differences with colours and/or translucent parts. Switches are most commonly soldered onto the PCB but there are also some hot-swap solutions.
My own favourite switches at the time of writing are Durock T1 and JWK Kiwi. These are tactile and have a much more pronounced bump than your classic Cherry MX Brown.
## Keycaps
Keycaps are what often catches your attention at first when you see a keyboard. They can vary in profile, layout, thickness, the plastic used and of course visually with various colours and/or legends. Cheap keysets range around 20-40€ per set (These are in almost all market keyboards) but can range up to even 300€ for a single set. I’d suggest that you invest in thicker keycaps in the profile you like, thicker ones often feeling better when typing.
A good middle-ground is EnjoyPBT keycaps, they range often between 80-120€ and good quality & feel for the price.
## Plate
In tray-mount cases, you don’t have to use a plate, but using a plate is highly recommended as it stabilizes your mechanical switches and removes wobble. Plates come in several different materials, most popular ones being aluminium and premium ones again brass.
There is often a plate made for a specific case/PCB. If your PCB supports both ANSI and ISO layouts, make sure that your plate supports the layout that you want to use. If unsure, you can always ask me for help!
[Need help? Contact me!](https://olli.works/contact)
## Stabilizers
Longer keys need a stabilizer to make them stable, duh. These are used under keys like spacebar, enter and backspace. There are some differences between stabilizers and their manufacturers, most people preferring nowadays Durock Stabilizers over classic cherry ones. The difference can be felt in smoothness as well in a more “thock” sound. Lubing your stabilizers will significantly remove any excess sound that it makes, like rattling or bottoming out.
Stabilizers are most often mounted to the PCB, but in some cases, you may have to use plate-mounted stabilizers.
## Case
When you can everything else set-up, the only thing missing is a case. Cases house your keyboard and also affects how your keyboard sounds like. Cases come in all shapes and sizes, look at the alternatives that are made for your PCB, or see if you could perhaps create your own case from wood or acrylic using a laser-cutter.
I personally like that my cases have some mass so that they stay sturdy on the table. I also like to use foam-mat between the case and keyboard to absorb any unnecessary sound vibrations from hitting the keys.
## What kind of keyboard do you want?
As there are a lot of things you can customize, you can really make a unique keyboard that no one else has.
## See my other keyboard posts
---
# Cycling Espoo - Hanko - Espoo
URL: https://olli.works/blog/cycling-espoo-hanko-espoo | Published: 2020-12-25 | Tags: cycling
> I had always wanted to do a longer cycling trip. In the summer of 2019, I decided to go for it. The trip turned out to be harder than expected.
I had always wanted to do a longer biking trip. After several longer rides, I felt like cycling to Ekenäs would be doable. This is my story of the rough day I had in the summer of 2019.
## Preparation
I actually had tried cycling to Ekenäs once before but has to give up due to a puncture. This time I had changed my wheels from classic to Tubeless (GP5000) with a sealant so that I didn’t have to worry about punctures.
I ate really well the day before and on the morning of the ride I stuffed in me 5 fried eggs, I knew that I needed all that energy. I had around 3L of water with me of which 0.7L was with added honey-sugar. As for nutrition, I had several energy bars and gels with me. I didn’t feel like I wanted to stop anywhere but rather be as self-sufficient as possible.
And so it began.
## First 3.5 hours
Cycling shorts, cycling jersey and a light wind jacket, I can tell you it was cold, only 9°C. I was worried that I had too little on me but as I got up in pace I started feeling warmer.
The roads were quite good until after Kirkkonummi ar around the 30km mark, there were no more roads for cyclists or pedestrians. Many may fear riding on the side of a highway but I felt quite okay with it, the only issue is that you need to watch out for cars all the time and stay focused.
The ride looked quite fun on Google Maps but riding it was utterly boring. There wasn't really anything to see between Kirkkonummi and Ekenäs. 3.5 hours and an energy bar later, I arrived in Ekenäs where I decided to have a bigger break.
## Ekenäs & planning
I had my break at the town square in Ekenäs. There were a lot of people, it was a casual summer day with people enjoying themselves. I felt really good, barely exhausted and had lots of food left. Ekenäs was my initial goal, but as it felt *so easy* I decided to ride to the point furthest south on the Finnish coastline, Hanko. I should have turned back, but as we had a summer cycling challenge(kilometrikisa) ongoing at work, I really could use those extra kilometres to gain some advantage in the competition.
[See kilometrikisa stats for summer 2019](http://km.em87.io/?competition=summer19)
## The midpoint
I should have remembered from the countless times I've visited Hanko that the last 30km before the city is really boring to drive, and you can probably guess how fun it was to ride that. I still pushed myself and kept the average speed at around 30km/h. After an hour of pedalling, totalling at this point to about 5 hours, I was finally able to take this photo, my bike by the Monument of Liberty by the Hanko downtown beach.
The weather was beautiful so I couldn't be without enjoying some of Hanko before having to head back towards Espoo. I wanted some variation to my route and found out that I could take another route from Hanko to Ekenäs, it adds little extra distance but I felt like the variation would make it worth it.
After enjoying a few chocolate chip energy bars it was time to start the ride again.
## Nobody told me
Right away when taking the other route I faced an issue, the road was in terrible shape. I don’t know you are familiar with bad road and cycling, but imagine riding a stiff bike with high tyre pressures, the vibrations from unevenness translate to unpleasant vibrations. This was the point when I wished I had turned around earlier. I decided to have more breaks to help out with the fatigue, having a slightly longer one again in Ekenäs.
## We might have a few issues...
I started to feel tired and around Karjaa I was out of food, only having a few more gels. Lack of nutrition wasn't my only issue as my right leg started to cramp. I started to have more breaks to coop with the cramping. As I pushed on I realised that I really need to stop at some gas station and eat something. It was starting to be darker when I saw the sign of Pickala ABC. Maybe I should have eaten some proper food but at that point, I couldn't think much and settled for a Panini sandwich.
The road to Pickala had felt way worse than earlier that day. It felt like you just ride on unknowingly where you are and how far it is until you see something familiar.
## The final homestretch
After a long time of cycling the unknown I finally saw the Prisma in Kirkkonummi, it has this tall tower which can be seen from quite far away. Now when I knew where I was, I was more motivated to finish the ride. The last 30km were hard from a physical standpoint but mentally really easy. Getting home felt like a big relief.
## Stats and ending words
**Espoo - Hanko**
Distance: **122km**
Time: **4h 34min** (including breaks)
**Hanko - Espoo**
Distance: **127km**
Time: **7h 1min** (including breaks)
I don’t think I’ll be doing this ride again, at least not alone. Now I know how it feels to ride **250km** in a day. This ride did help me to win the kilometrikisa that summer. After a hot shower, I had a beer, I felt like I deserved it.
## See what else I've been up to
---
# Dipping my toes into jamstack
URL: https://olli.works/blog/dipping-my-toes-into-jamstack | Published: 2020-12-23 | Tags: development
> Testing the development experience of Hugo + Forestry CMS
As I've worked so many years with WordPress, I wanted to try out something else. I had heard fuzz about Jamstack and its benefits but never had any project where I could give it a shot. Late 2020Q4 I decided that I finally need my own website and what better way to build it than with something new!
I have wanted to try out Jamstack already for a while but I didn’t know what to do. After seeing my friend’s site built on Hugo, I decided that I want to try it out as it’s based on Go, the new programming language created by Google. I still had to have some sort of CMS to handle the content and I wanted to do something else than WordPress, Forestry CMS seemed to be the obvious choice according to several sources on the web.
**I had certain requirements that I wanted for the setup:**
* Easy handle separately posts and pages
* Support for custom blocks which can be put in any order
* Posts/pages built on custom blocks
* Querying only certain content/filtering content depending on variables
## Prerequisite
Out of the box, I didn't see any Hugo solution for the custom blocks, but once I read onto Forestry's Front Matter of reusable front matter elements, I knew I had to give it a shot. At this point, I started building my own Hugo theme by emptying a readymade theme to barebones.
I brought in many of the SCSS-mixins and variables which we are using in Evermades open-source [Everblox theme](https://github.com/evermade/everblox "Everblox theme"). These tidy up things and make it faster to develop elements.
## Post listing issue
Listings turned out to be a little tricky. Hugo uses several different archive pages for automatic content generation. This was neat but not really what I was looking for, so I had to figure out how to custom query content with Hugo to create a post listing. After debugging post-fetching for many hours I realized that I need to change the way I'm thinking. I was stuck in the PHP-MySQL mentality where you only fetch what you need, but with Hugo, it doesn't matter as much how optimized your post-fetching query is as the final result is anyways a static site. I ended up for a less-optimized solution to be able to move on. I'll maybe revisit this again sometime in the future
## /content/ folder
One thing which I fell in love with was that all the content (excluding images) are saved in the git-repo itself! This made it super easy to sync up to where I last stopped, as I've worked on this from a few different computers. In WordPress, you always had the issues with transferring databases and renaming URLs, but not with Hugo!
## Working with Forestry CMS
The text editing experience is a slight downgrade from WordPress TinyMCE as the Forestry CMS editor does Markdown. This makes the content cleaner, but you lack any specialities eg. adding custom elements/tables to content. The markdown still supports raw HTML so you can still do whatever you like, it just won't look as tidy in the CMS.
## Image hosting
As all the content is saved in the git repo, I had to figure out how to host the images. In WordPress, you have nifty shortcuts to get the right size of an image but Forestry lacks anything similar. I first thought about AWS but found out that Netlify offers Git LFS (Large File Storage) with additional parameters for the compression. With this, I was able to set maximum-resolutions for all my content. This way I don't have to worry about uploading too large images and can focus on making great content.
## Workflow
During the development of this site, I’ve changed deployments and even tried Hugo modules. Finally, I settled on Git submodules as those were simpler to work with. Now my workflow works like this:
### Want to edit content?
Go to Forestry.io and edit the content, Netlify build and deployment happen automatically after a save.
### Need to edit features/blocks?
My Hugo-theme is in its own repo so it doesn’t trigger automatic deployments. I can develop it further, and when ready, commit the Hugo-site repo with a new submodule hash which triggers the Netlify build and deployment.
### Debugging or further development?
I just need to have the Hugo-site repo with the Hugo-theme submodule fetched, and I’m ready to debug things with the command **hugo server**.
## Final verdict
Overall Hugo + Forestry has surprised with some features, some again have been a little letdown. If you want to build a static site with a CMS, this works for more simple cases really well. If you need some more robust content editing tools, I suggest looking at some other CMS\:s which can deliver on that.
## See my other development projects