diff --git a/src/content/journal/2007/gtd.mdx b/src/content/journal/2007/gtd.mdx
index e030915..9f83972 100644
--- a/src/content/journal/2007/gtd.mdx
+++ b/src/content/journal/2007/gtd.mdx
@@ -22,9 +22,11 @@ In any case, I think that one _gets_ the everyday madness governed by Allen’s
## The GTD Basics
-
-
-
+
GTD uses the concept of _contexts_, which are certain situations/places to which a task is assigned (telephone, home, care, or similar). Besides, there can be an allocation to a _project_.
@@ -42,9 +44,11 @@ Tasks can be delegated to other people or planned for certain times. If you have
## GTD in Everyday Life
-
-
-
+
GTD may look complicated or awkward, but it helps immensely to prevent keeping pondering.
diff --git a/src/content/journal/2007/koi-design.mdx b/src/content/journal/2007/koi-design.mdx
index e90ae2a..fadc616 100644
--- a/src/content/journal/2007/koi-design.mdx
+++ b/src/content/journal/2007/koi-design.mdx
@@ -42,9 +42,11 @@ In addition to gods, mythical creatures, and demons, the most important source o
## Water Margin
-
-
-
+
In short, it is about a band of robbers of 108 heroic men and women. Each of whom is forced into lawless life by adverse circumstances, and entrenching themselves on a fortified island in Liang-Shan marsh, where they go on a rampant raid for years. They fight against corrupt officials of the emperor and numerous villains. The story is true in parts and should have taken place in the Song Dynasty.
@@ -56,12 +58,12 @@ The motif I chose for my design shows a koi (carp) trying to swim up the heavy r
Legend has it that a koi, who manages to swim up the magical waterfalls, transforms into a dragon. After another 500 years, he turns into a horned dragon and after 1000 years into a winged dragon. Thus, the next design should show a dragon.
-
-
-
+ src="/images/posts/design-koi.webp"
+ alt="Design: Digital Irezumi"
+ caption="Koi floating up the Longmen Waterfalls. It contains typical elements such as leaves, flowers, and wave crests (AI upscaled from a pixel image)."
+/>
The hardest part of my design was how much tattooing to see on the page. While the Japanese tattoo lives on the surface, leaving nothing to feet, hands, and a small front area, a large area would have made the page restless and distracted from the content. To make matters worse, there is no end to a body tattoo. But on the internet, your space is limited by the edges of the browser.
diff --git a/src/content/journal/2009/gitweb-theme.mdx b/src/content/journal/2009/gitweb-theme.mdx
index 5cffacc..f635e0c 100644
--- a/src/content/journal/2009/gitweb-theme.mdx
+++ b/src/content/journal/2009/gitweb-theme.mdx
@@ -18,29 +18,30 @@ The exact installation instructions are included in the package on GitHub.
## Screenshots
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
+
diff --git a/src/content/journal/2010/vim.mdx b/src/content/journal/2010/vim.mdx
index 6bd585a..7d34089 100644
--- a/src/content/journal/2010/vim.mdx
+++ b/src/content/journal/2010/vim.mdx
@@ -12,9 +12,11 @@ tags: ["code"]
Something similar was said by the superhero _He-Man_ from the 80s TV show _Masters of the Universe_ before he got his superpowers. And Vim exists about as long as the TV show: **22 years**. And the older Vi, on which Vim is based, has been around even longer than I live. If a _simple_ text editor exists for a long time and gives these _powers_, it has to be something special about it.
-
-
-
+
The first time I stumbled upon Vim (or Vi) a couple of years ago, was when I first had to edit any file on a server and none of my fancy editors worked there. The first time I worked with Vi(m) was my natural reaction: WTF, I cannot tap until I press `i`? Who invented this crap?
diff --git a/src/content/journal/2014/logo-design.mdx b/src/content/journal/2014/logo-design.mdx
index 3bee404..0877b2f 100644
--- a/src/content/journal/2014/logo-design.mdx
+++ b/src/content/journal/2014/logo-design.mdx
@@ -18,9 +18,11 @@ It was clear to me early that I wanted to use a _Rakkan_ instead of a modern log
A Rakkan (or Hanko) is called in Japan a seal, which is carved in stone, representing the signature of an artist and is stamped under the artwork, and thus works as a signature.
-
-
-
+
Even with my [martial arts portal](https://www.kogakure.de/), I use a seal as a logo.
@@ -64,12 +66,11 @@ A seal can be created in two different variants: **Yin** or **Yang** (☯). In t
First, I made numerous pencil drawings, first of individual characters that I liked, and later of combinations. I wondered how an artist would carve a traditional stamp, how the letters touch and support to give the seal the necessary stability.
-
-
-
+
After I had developed my final variant, I drew the pencil lines with a thick highlighter (not without almost ruining my bamboo table, since I omitted out of laziness to use a pad). The texture that emerges when ink spreads through the paper looks much like a stone-carved edge.
diff --git a/src/content/journal/2015/calisthenics.mdx b/src/content/journal/2015/calisthenics.mdx
index 1604bb2..96d0413 100644
--- a/src/content/journal/2015/calisthenics.mdx
+++ b/src/content/journal/2015/calisthenics.mdx
@@ -24,12 +24,11 @@ And reading more about these extreme sports, I found out they come with the dang
Other names for body weight training are **Street Workout**, **Ghetto Fitness**, or **Calisthenics**. The word **Calisthenics** comes from the Greek words καλός (kalos), which means **beautiful** and σθένος (sthenos), which means **strength**.
-
-
-
+
With Calisthenics, you use basic movements like **Lunges**, **Crunches**, **Push-ups**, **Pull-ups**, **Squats**, **Dips** to strengthen your body. You **gradually** expand your skills and proceed to more difficult exercises. That’s why it’s called **Progressive Calisthenics**.
@@ -61,12 +60,11 @@ To reach a big goal like doing a **Human Flag** needs to be broken into parts: B
I keep track of my workouts in a diary and can see the training days in a calendar, to see if I missed too often.
-
-
-
+
And I am patient. It’s more about the journey than about the goal. It’s an effort to train every day, to convince me to do my workout, even if the day isn’t a good one. I decided to **train early in the morning**, a few minutes after I got up. This way I don’t need as much willpower as I would in the evening. Unfortunately, we are all victims of [Ego Depletion](https://grokipedia.com/page/Ego_depletion), and later in the day, it may be gone.
diff --git a/src/content/journal/2017/gitbook.mdx b/src/content/journal/2017/gitbook.mdx
index 9641b2e..8ed4662 100644
--- a/src/content/journal/2017/gitbook.mdx
+++ b/src/content/journal/2017/gitbook.mdx
@@ -56,11 +56,12 @@ GitBook is not only good for books but to write documentation for anything.
## What’s in my book?
-
-
-
-
-
+
First thing: The book is available in **German** only 😒 (the [website](https://www.kogakure.de/en) is now in English available). I reviewed every sentence of the website for the book and changed parts of it.
diff --git a/src/content/journal/2017/minimalism.mdx b/src/content/journal/2017/minimalism.mdx
index 2a89bb1..0e0c590 100644
--- a/src/content/journal/2017/minimalism.mdx
+++ b/src/content/journal/2017/minimalism.mdx
@@ -27,9 +27,11 @@ Minimalism is **not glamorous**, it’s **humble** and a result of **deep mindfu
Critics of Minimalism describe it as cold, empty, and without personality. People following Minimalism would deny their past or prove their inability to connect to other people. It would be a hopeless attempt to control life, as Linda Tutmann described Minimalism in her ZEIT article [Alles mein](https://www.zeit.de/2017/06/besitz-minimalismus-dinge-erinnerungen-besitztum).
-
-
-
+
This misconception of Minimalism is the result of its shift to a lifestyle and of extreme Minimalists, who live in sterile homes. Minimalism is not about having as few things as possible. It is about _not_ owning things, which don’t bring joy or getting rid of things, which were acquired as a result of other reasons than a _need_ or _love_ for an object.
@@ -83,9 +85,11 @@ The next step was reading David Allen's book
-
-
+
The exhibition [LEVEL GREEN](https://www.autostadt.de/en/explore/groupforum/level-green) in Autostadt Wolfsburg introduced me first in a differently drastic way to the concept of sustainability. People could learn, by answering questions about how they lived, and how big their impact on the earth was. To maintain my lifestyle from back then, I would need 1.8 planets of Earth. This changed my idea of how to live responsibly a lot.
@@ -97,9 +101,11 @@ In the last few years I changed my ideas of how to live in many ways:
I cleaned my whole flat of things I didn’t like or needed anymore. It took me three days to clean my basement from packages, cables, and technical waste, which I acquired over 10 years.
-
-
-
+
I gave more than 150 books away (I own 763) and sold my car. I use the subway, bus, car-sharing, and train to commute or travel.
@@ -123,9 +129,11 @@ I switched to green energy a few years ago, buy organic food if available, and t
When I was young, I always wanted a big, big house (preferably on a remote private island). But living in a small space is helpful for a Minimalist. It forces you to make decisions in your interest. I live on 51 m², and this is enough space for 1-2 people. That’s why I think if I need to buy something. I like the concept of small space living, but I’m happy to have a separate bedroom. This is much more relaxing, because of the different temperatures in the living and sleeping area. And I do not keep electronics in my bedroom.
-
-
-
+
### On Digital Minimalism
diff --git a/src/content/journal/2020/new-website-2020-design.mdx b/src/content/journal/2020/new-website-2020-design.mdx
index 556addc..1d30fc2 100644
--- a/src/content/journal/2020/new-website-2020-design.mdx
+++ b/src/content/journal/2020/new-website-2020-design.mdx
@@ -58,9 +58,12 @@ I like in particular the italic font with the beautiful loops and curves. I pick
Next, I picked a Typographic Scale. A scale is a way to pick font sizes based on a fixed set of rules, for example, a specific harmonic number or formula to create a harmonic visual image. I decided to go with the [golden section](https://www.modularscale.com/?1&em&1.618) (ratio 1:1.618).
-
-
-
+
I picked 20 Pixels as the base font size. Furthermore, I’m in my forties and websites pick fonts far too small. The company iA Inc. wrote 2006 the essay [The 100% Easy-2-Read Standard](https://ia.net/topics/100e2r), but still, fonts below the recommended 16 Pixels of browsers are a standard.
@@ -154,29 +157,36 @@ I didn’t invert colors but needed to make sure to create good contrast, which
Next, I moved my focus to the logo. A logo is always a difficult topic. Do I need one? Why? What should it be? My initials? An image? It’s easy to create a cheesy logo. I used a _rakkan_ (落款), a Japanese artist seal, for at least 10 years. An artist carved it for me into stone, using the oldest Chinese font, the _small seal script_, introduced by the Chinese Emperor _Qin Shi Huang_, 2200 years ago. It gets pressed into red ink and then applied to the artwork as the signature. I choose the characters of my internet pseudonym _kogakure_ (木隠), meaning “hidden behind leaves”.
-
-
-
+
I created a few sketches of other possible logos, but eventually, I discarded them all and moved back to my _rakkan_. Likewise, I decided to simplify the vector form and reduce the number of points and make it more performant and easier to recognize in smaller sizes.
-
-
-
+
But after finishing the logo, I decided in the interest of simplicity and austerity that there is no reason to use a logo at all. I even removed my name from the header, as it’s obvious on what website the visitor is. My name is written enough around the site. The logo will appear in parts of the website, for example as an icon for the app, or on other locations, a logo fits.
-
-
-
+
## Grid
Early on I got obsessed with the [Golden Canon Grid](https://youtu.be/fWfD0EfiXcE) and my early designs used a complicated and sophisticated version of it.
-
-
-
+
But gradually I decided this would end in a nightmare when moving to code and migrating to a modular grid. However, I didn’t recognize my error of using a fixed-size module for the grid—an error I had to correct later.
@@ -212,36 +222,54 @@ As he shows in the fantastic free video, [Aaron Draplin Takes On a Logo Design C
I followed this technique on all my designs and created dozens of variations, sometimes entire pages, sometimes a small detail as the footer or a meta section.
-
-
-
+
-
-
-
+
Designing was the part that brought the most fun to me. Designing is like a concert: It starts with a cello, but then more and more instruments get added until the full [concert ends in a massive crescendo](https://youtu.be/XpT-92HS11I). The start is always the hardest, with the designer staring at a blank, white screen. But then things fall into the place and ideas multiply and in the end, everything is obvious, and the next screen is easy to create.
I started designing the blog detail page headline and moved out from there, creating text, header, footer, and small details.
-
-
-
+
Then I moved into color variations for the pages. I designed error pages, navigation, special pages, and the homepage last. I didn’t design every detail, but quickly moved from idea to idea, leaving behind a mess of unnamed layers and incomplete or outdated ideas.
-
-
-
+
I created a giant design for all layout variations I wanted to support on a page (e.g., the combination of an image and a text). I moved quickly to [CodePen](https://codepen.io/) to create prototypes for these variations to validate my ideas where feasible. You can see all my prototypes on my CodePen account.
-
-
-
+
-
-
-
+
In the fall of 2019, I finished my design and left it for a few weeks untouched to see if I start disliking it. On the 25th of November 2019, I finally started coding.
diff --git a/src/content/journal/2020/new-website-2020.mdx b/src/content/journal/2020/new-website-2020.mdx
index 9e63fd7..d652fbc 100644
--- a/src/content/journal/2020/new-website-2020.mdx
+++ b/src/content/journal/2020/new-website-2020.mdx
@@ -13,13 +13,17 @@ Finally, after **3 years** with **250 hours** of work, I finished my longest-run
There are _multiple_ reasons it took me a while: I created not only a new design, with a light and dark theme, screen size-dependent grid, and typography. I developed it with a new technology stack, including the static-site generator [Gatsby](https://www.gatsbyjs.org/), [TypeScript](https://www.typescriptlang.org/), [Styled Components](https://styled-components.com/), [MDX](https://mdxjs.com/), [GraphQL](https://graphql.org/), and [CSS Grid Layout](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout).
-
-
-
+
-
-
-
+
I always take the opportunity to learn new things while working on personal projects. This time I intentionally picked TypeScript, even though I knew it would slow me down. I wanted to learn it beyond basic training and theory, which is possible while doing it.
@@ -43,9 +47,7 @@ For the first time, the website has a [Projects](/projects/) section showing my
My Haiku (short Japanese poems) collection was previously loveless, dumped on a single page without proper context. After the relaunch, I dedicated a whole section to the [Haiku](/haiku/), including English translations.
-
-
-
+
### Sketchnotes
@@ -55,9 +57,11 @@ I had a collection of my Sketchnotes hosted on a subdomain on Tumblr and wanted
A few years back I created a small project, creating an ASE file out of Traditional Colors of Japanese mentioned in a book with the same title. This project got [an own page](/traditional-colors-of-japan/) showing all colors and the books these are from.
-
-
-
+
The entire project stretched for three years because I didn’t work continuously on the website, and sometimes didn’t do something for multiple months.
diff --git a/src/content/journal/2020/tools-i-use-for-note-taking.mdx b/src/content/journal/2020/tools-i-use-for-note-taking.mdx
index 5ef1611..3aeae68 100644
--- a/src/content/journal/2020/tools-i-use-for-note-taking.mdx
+++ b/src/content/journal/2020/tools-i-use-for-note-taking.mdx
@@ -61,12 +61,12 @@ One thing I changed to my previous DEVONthink-_only_ workflow is that I use an *
I use [DEVONthink to Go](https://apps.apple.com/app/devonthink-to-go/id395722470s) to quickly create new notes, and add photos, or other media to my databases. These files get automatically synced with all connected devices and are added to my Macs the next time I open DEVONthink. Additionally, I use the mobile version to search and read the content of my database when I’m not on my computer.
-
-
-
+
One plugin allows opening a note via custom shortcuts in the default app, which I use to edit longer notes in iA Writer.
diff --git a/src/content/journal/2020/zettelkasten-note-taking-devonthink.mdx b/src/content/journal/2020/zettelkasten-note-taking-devonthink.mdx
index 0080984..c3ba5fc 100644
--- a/src/content/journal/2020/zettelkasten-note-taking-devonthink.mdx
+++ b/src/content/journal/2020/zettelkasten-note-taking-devonthink.mdx
@@ -128,9 +128,11 @@ Originally, I had the tags included in the note, but I discarded the idea, becau
One of the best features of DEVONthink is its fantastic sorter. It can be used as a menu bar item or a floating index tab, it can be triggered with various shortcuts. It allows capturing notes in many possible formats. Additionally, audio, video, screenshots, and websites. The latter one is powerful and able to strip all clutter and keep text and images or convert the content to Markdown, save it as HTML, rich text, pure text, PDF, or web archive.
-
-
-
+
### Fast Live Search with Powerful Search Operators
@@ -192,12 +194,12 @@ I might write notes in one of my paper notebooks. Handwriting has plenty of adva
I regularly reserve time to transfer notes, highlights, and quotes from books I’ve read into notes in my Zettelkasten.
-
-
-
+
Every afternoon I clean the inbox and properly tag the items. Every Zettelkasten note gets a unique ID and title (generated with a snippet in [Alfred](https://www.alfredapp.com/)) and then moved into a separate database for notes. Inspirational items and documents get moved into their database.
diff --git a/src/content/journal/2021/how-to-prepare-for-the-worst-case.mdx b/src/content/journal/2021/how-to-prepare-for-the-worst-case.mdx
index 02a9701..cbdcaf5 100644
--- a/src/content/journal/2021/how-to-prepare-for-the-worst-case.mdx
+++ b/src/content/journal/2021/how-to-prepare-for-the-worst-case.mdx
@@ -287,9 +287,7 @@ Next, I bought a waterproof sticker additionally. It’s the flag used by Libertarians around the world. The snake design and the words "Don’t Tread On Me" is a warning of vigilance and willingness to act in defense against coercion. 😂
-
-
-
+
[^mooser2021lp]: Barbara Mooser (2021): _Skandal im Netz: Abgeordneter Huber im Twitter-Gewitter_, https://www.sueddeutsche.de/muenchen/ebersberg/falscher-hashtag-skandal-im-netz-abgeordneter-huber-im-twitter-gewitter-1.5388590.
diff --git a/src/content/journal/2021/interpretation-the-gods-of-the-copybook-headings.mdx b/src/content/journal/2021/interpretation-the-gods-of-the-copybook-headings.mdx
index 4fcdc7d..53c1a1e 100644
--- a/src/content/journal/2021/interpretation-the-gods-of-the-copybook-headings.mdx
+++ b/src/content/journal/2021/interpretation-the-gods-of-the-copybook-headings.mdx
@@ -30,12 +30,11 @@ The poem is his warning.
## Copybook Headings
-
-
-
+
Copybook Headings were lined pages with short wisdom, aphorisms, or verses at the top, used to practice cursive writing. The student was challenged to repeat the sentence a few dozen times on the page and by doing not only learned the handwriting but took in the wisdom and morals transmitted from one generation to another.
diff --git a/src/content/journal/2021/new-website-2021.mdx b/src/content/journal/2021/new-website-2021.mdx
index bd18e0c..ccaf306 100644
--- a/src/content/journal/2021/new-website-2021.mdx
+++ b/src/content/journal/2021/new-website-2021.mdx
@@ -10,9 +10,12 @@ tags: ["code", "design", "personal"]
My brand-new website is online, using [Eleventy](https://www.11ty.dev/) as its static site generator. The development was quick and fun, and Eleventy gives me a huge amount of flexibility. And it’s fast, [very fast](https://www.zachleat.com/web/build-benchmark/). Burned by my last technology choice, I did this time a performance test _before_ picking the tool. I created 1000 large Markdown pages and let Eleventy render them to HTML. It was done in an astonishing 3.8 seconds.
-
-
-
+
## What’s New?
diff --git a/src/content/journal/2021/web-developer-work-environment-1.mdx b/src/content/journal/2021/web-developer-work-environment-1.mdx
index f0c7b0a..472a90e 100644
--- a/src/content/journal/2021/web-developer-work-environment-1.mdx
+++ b/src/content/journal/2021/web-developer-work-environment-1.mdx
@@ -45,9 +45,12 @@ My previous dotfiles used a custom script to create symbolic links from inside t
Previously, I used [iTerm2](https://iterm2.com/) as my terminal application, but it is slow and using Vim is sluggish. I heard of [Kitty](https://github.com/kovidgoyal/kitty) and [Alacritty](https://github.com/alacritty/alacritty) and tried both. In the end, I decided to use Kitty as my new terminal application. It is a cross-platform, fast, feature-rich, GPU-based terminal. Additionally, it has built-in support for [Ligatures]().
-
-
-
+
## Shell
@@ -89,9 +92,7 @@ While it is possible to download color themes for each tool, I use [base16-shell
The terminal beginner uses a new terminal window when wanting to run something while a process is in progress. The intermediate terminal user uses the built-in feature of terminals to create new tabs. The advanced terminal user uses the built-in feature to split windows into separate sections. The professional terminal user uses a terminal multiplexer. It allows you to switch between several programs in one terminal and detach them while keeping them running in the background.
-
-
-
+
A co-worker introduced me to this concept 10 years ago. Since then, I use [tmux](https://tmux.github.io/). It allows me to run many work projects and private projects at the same time and switch with a few keystrokes between them.
@@ -117,9 +118,7 @@ This is where useful tools like [z](https://github.com/rupa/z) and [fzf](https:/
[FZF](https://github.com/junegunn/fzf) is my favorite tool on the terminal. It is a general-purpose command-line fuzzy finder that is blazing fast and can be combined with every tool thinkable.
-
-
-
+
You can take nearly any output and pass it to FZF to get a list that can be filtered down with a fuzzy search in seconds. It can handle tenths of thousands or even hundreds of thousands of items with a fantastic performance.
@@ -127,9 +126,7 @@ You can take nearly any output and pass it to FZF to get a list that can be filt
Terminals have tools like `cat`, `head`, or `tail` to quickly view content without opening them in a more powerful editor. Cat is the most used tool of this kind, but it doesn’t have plenty of features except showing the content.
-
-
-
+
[Bat](https://github.com/sharkdp/bat) is a content viewer like cat, but with powerful features like syntax highlighting, line numbers, git integration, and paging. I replaced it nearly everywhere where I used `cat` before. It can be combined with FZF to view the code.
@@ -200,9 +197,12 @@ I use [pyenv](https://github.com/pyenv/pyenv) for version management with Python
There are dozens of window managers available, paid or free. Even the built-in macOS split feature might be enough for regular people. But a powerful window manager is crucial for effective working. As a developer, we use two or even more monitors to constantly monitor services, browse the documentation, write code, check email or chat, and browse the internet. The context switches throughout the day, sometimes the Browser is a primary tool (when surfing), and other times it’s a secondary tool (when coding). Moving windows around monitors, resizing and arranging them is therefore important.
-
-
-
+
I use [Hammerspoon](https://www.hammerspoon.org/) for nearly 10 years. It is a bridge between macOS and a Lua scripting engine. It’s possible to control nearly everything with it and listen to Wi-Fi or USB events. I use it mainly for window resizing, window layout management, and application switching. If you’re interested in my configuration, you can find it in [init.lua](https://github.com/kogakure/dotfiles/blob/master/hammerspoon/init.lua) and additional helper functions in [functions.lua](https://github.com/kogakure/dotfiles/blob/master/hammerspoon/functions.lua). Those are copied because I had no clue about Lua 10 years ago.
diff --git a/src/content/journal/2021/web-developer-work-environment-2.mdx b/src/content/journal/2021/web-developer-work-environment-2.mdx
index 0491c54..6dbf71d 100644
--- a/src/content/journal/2021/web-developer-work-environment-2.mdx
+++ b/src/content/journal/2021/web-developer-work-environment-2.mdx
@@ -72,9 +72,12 @@ Neovim has many features inherited from Vim and Vi, but the developers can’t a
Even for installing plugins, you have multiple options: You can download and copy the file manually (nobody does this) or install one of the many plugin managers. I use [vim-plug](https://github.com/kogakure/dotfiles/blob/master/nvim/autocmd.vim). All you need to do is add a line pointing to the plugin to your configuration, reload Vim, and run `:PlugInstall`.
-
-
-
+
### Plugin Configuration
@@ -94,9 +97,12 @@ The amount of my plugins is currently 78. I will use the rough categories of my
The built-in LSP client of Neovim is a fantastic feature. But it’s the most complicated part to set up at the moment. Of all the plugins, I struggled the most in setting up LSP. The main plugins to help are [lspconfig](https://github.com/neovim/nvim-lspconfig) and [nvim-lsp-installer](https://github.com/williamboman/nvim-lsp-installer) will help to create configurations for the LSP servers and to install them without additional manual work.
-
-
-
+
One of the LSP servers is the diagnostics language server. There is an [unofficial collection](https://github.com/creativenull/diagnosticls-configs-nvim) of configurations for useful things such as prettier or ESLint.
@@ -106,9 +112,12 @@ One of the LSP servers is the diagnostics language server. There is an [unoffici
Vim has a nice completion engine with `omnicomplete`, but with [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) it feels much more modern. The recommended setup includes more plugins by the same author to complete LSP, buffers, path, vim’s command line, and snippets of one of the four biggest snippet plugins.
-
-
-
+
I decided to stay with [Ultisnips](https://github.com/SirVer/ultisnips) because it’s the most starred, creating snippets is quick and easy and with [vim-snippets](https://github.com/honza/vim-snippets) it brings a massive collection of snippets. There is a [source for nvim-cmp](https://github.com/quangnguyen30192/cmp-nvim-ultisnips).
@@ -118,9 +127,12 @@ The plugin [lspkind-nvim](https://github.com/onsails/lspkind-nvim) will add pret
[Telescope](https://github.com/nvim-telescope/telescope.nvim) is my favorite plugin. It is a plugin to find, filter, preview, and pick files. It supports built-in dozens of features, for example, files, Vim features, LSP, Git, and many more. But it can be extended to browse [the file system](https://github.com/nvim-telescope/telescope-file-browser.nvim), [fzf](https://github.com/nvim-telescope/telescope-fzf-native.nvim), [recently used files](https://github.com/nvim-telescope/telescope-frecency.nvim), [node_modules](https://github.com/nvim-telescope/telescope-node-modules.nvim), or [browser bookmarks](https://github.com/dhruvmanila/telescope-bookmarks.nvim).
-
-
-
+
I don’t use Tree plugins much because Telescope is fast and finds everything, but every so often you want to browse a specific folder structure. NerdTree is the most famous tree plugin, but I use a newer version written in Lua: [nvim-tree.lua](https://github.com/kyazdani42/nvim-tree.lua).
@@ -160,9 +172,7 @@ Another thing on the opposite end of the window that many people want is a statu
I like to work distraction-free. In Visual Studio Code there is the Zen mode which will hide all unnecessary things. For Vim, the plugin [Goyo](https://github.com/junegunn/goyo.vim) does a similar thing. It centers the editor and removes all distractions.
-
-
-
+
### Syntax Highlighting
@@ -174,9 +184,12 @@ The only problem I have is support for Styled Components. It’s an [open issue
As a Front-end Web Developer, I love to see my color values visualized. The plugin [colorizer.lua](https://github.com/norcalli/nvim-colorizer.lua) does this fast and pretty.
-
-
-
+
Another plugin I use is [Emmet](https://github.com/mattn/emmet-vim). It allows using this simple syntax to automatically create HTML or CSS.
diff --git a/src/content/journal/2022/artificial-intelligence-4-getting-started.mdx b/src/content/journal/2022/artificial-intelligence-4-getting-started.mdx
index d308df1..7920bff 100644
--- a/src/content/journal/2022/artificial-intelligence-4-getting-started.mdx
+++ b/src/content/journal/2022/artificial-intelligence-4-getting-started.mdx
@@ -20,9 +20,12 @@ If you’re just curious and don’t to pay for the necessary hardware, or creat
If you have an iPad or iPhone, you’re in luck because a free app is available on the App Store that allows using dozens of free image models based on Stable Diffusion. The name of the app is [Draw Things: AI Generation](https://apps.apple.com/app/draw-things-ai-generation/id6444050820), developed by Liu Liu. The app is mind-blowing and I highly recommend it.
-
-
-
+
The developer improves the app constantly by adding interesting new models. I downloaded over 50 GB of model data. Besides the official versions of Stable Diffusion, there are models from the community. The most important website for models is [Hugging Face](https://huggingface.co/), an AI community to build, train and deploy models powered by the reference open source in machine learning. It’s the GitHub for AI. You can find exciting [projects](https://huggingface.co/huggingface-projects) on Huggingface, for example [diffuse the f rest](https://huggingface.co/spaces/huggingface-projects/diffuse-the-rest), where you draw an image and provide a prompt and the AI will generate a better version of it.
@@ -65,12 +68,12 @@ You can find most models available in the Draw Things application on Hugging Fac
To show what the models are capable of, I used my profile picture with different diffusion models. I used the same seed, no prompt, `50` steps, a guidance scale of `13,0`, a strength of `46%`, and the `Euler Ancestral` sampler. 46% as a strength value means it took roughly half of the source photo and the rest was creative. Lower values generate an image that looks like the source image, higher values generate images that look like the style the model was trained on. If you combine it with a prompt, you can get even more creative results, but you can never change the basic geometry of the image. For that, you need to train a new model with your face in Dreambooth.
-
-
-
+
## Diffusion Models
@@ -92,9 +95,12 @@ Some generators allow negative prompts, to exclude specific things from the imag
My first prompt was basic, I asked the AI to generate `a cyberpunk wizard`. The result was impressive, but random luck. I recreated the first two images with the same seed and upscaled the second one to add more detail. But the third image, generated with a new seed, created a complete different picture.
-
-
-
+
The art or skill of writing a good prompt is somewhere between programming, art direction, art history, photography, and writing. The more you know about formats, lenses, colors, lighting, art, artists, photography, painting, and many other art forms, the better you can write a good prompt.
@@ -124,9 +130,12 @@ A seed is a starting point for generating an AI image. It can be a random value
Inpainting is a technique used in image processing and computer vision to fill in missing or corrupted parts of an image. Inpainting algorithms can be used to restore damaged or degraded images, remove objects from an image, or fill in gaps in an image. These algorithms work by using information from surrounding pixels in the image to estimate the values of the missing or corrupted pixels. In the context of AI image generation, inpainting can be used to improve the quality of generated images by filling in any missing or incomplete pixels.
-
-
-
+
The simplest form of inpainting is to remove a specific object from an image. For example, if you want to remove a person from an image, you can use an inpainting algorithm to fill in the missing pixels with the surrounding pixels. It is possible to fill the area in with a prompt. In the image above, I asked Stable Diffusion to fill in a teddy bear, sitting on a sofa.
diff --git a/src/content/journal/2023/website-relaunch-astro-preact-tailwind.mdx b/src/content/journal/2023/website-relaunch-astro-preact-tailwind.mdx
index fe7636c..ed14812 100644
--- a/src/content/journal/2023/website-relaunch-astro-preact-tailwind.mdx
+++ b/src/content/journal/2023/website-relaunch-astro-preact-tailwind.mdx
@@ -24,24 +24,18 @@ I also introduced some new pages, such as the [tools](/tools/) listing my work e
I've utilized AI a lot for my new website. Not only for coding with [GitHub Copilot](https://github.com/features/copilot), but also [ChatGPT](https://chat.openai.com/) (with [Raycast Pro](https://www.raycast.com/pro)) to debug complex issues during development, generate TypeScript types, or automatically generate code. I used it to write and rewrite text, replace template tags with components, fix typos, and much more. In addition, I used [Stable Diffusion](https://stability.ai/) to create my profile and cover photos. And I used AI image upscaling to increase all old cover photos.
-
-
-
-
-
-
Previously, I had cover photos on my website, but I removed them because it was too time-consuming to find a new stock photo for each entry. However, with Stable Diffusion, I can now quickly generate a cover photo that fits the topic while experimenting with different art styles and techniques. I started with a few, such as the Bonsai on the homepage and the last 7 essays. I'll fill in the others over time. Likewise, I'm also planning to write a comprehensive tutorial on how I used Stable Diffusion to generate the bonsai cover image.
## Development
Recreating my previous website with [Astro](https://astro.build/) was a lot of fun. It was impressive how quickly it was set up and how easy it was to find anything in the documentation. And the speed of Astro is impressive, nearly all of my pages have a perfect 100% rating in [Unlighthouse](https://unlighthouse.dev/).
-
-
-
+
I opted for [Preact](https://preactjs.com/) for components, even though many didn't need interactivity. I'm glad I could use [MDX](https://mdxjs.com/) and map components to markdown elements. **Update:** I moved now to Astro components with a few interactive React components in the meantime.
diff --git a/src/content/journal/2024/raycast.mdx b/src/content/journal/2024/raycast.mdx
index 7bee94d..040f43d 100644
--- a/src/content/journal/2024/raycast.mdx
+++ b/src/content/journal/2024/raycast.mdx
@@ -17,9 +17,12 @@ I’ve used other application launchers before. Alfred was a good companion for
## Application Launcher
-
-
-
+
The most basic feature that you get is an application launcher like Apple Spotlight, but it’s prettier, has fuzzy search, and, as with everything in Raycast, an alias and a keyboard shortcut can be assigned. I navigate between my main apps without exception using keyboard shortcuts.
@@ -33,9 +36,12 @@ Raycast is the only application with consistent app switching behavior. When I p
## Calculator
-
-
-
+
Raycast has a magically powerful calculator. It can perform all the normal calculations and also convert angles, area, currency, data rate, data size, density, length, mass, power, pressure, speed, temperature, time, typography, volume, color, flight tracker, and many more.
@@ -45,12 +51,12 @@ The calculator history allows you to view previous calculations and pin useful o
## Calendar
-
-
-
+ src="/images/posts/raycast-calendar.webp"
+ alt="Calendar"
+/>
The [Calendar](https://raycastapp.notion.site/Calendar-b4bdcf402a024c37940e46e8dcf2da91) feature is incredible. It allows you to open a schedule overview directly in Raycast and join calls, block times, delete events, copy or open links, copy event title or details, and open the camera.
@@ -60,31 +66,38 @@ But the feature I love the most is the menu bar events. You can see the time unt
Raycast Notes (previously Floating Notes) are the perfect companion for storing ideas, ticket numbers, making quick notes in a meeting, removing formatting from copied text, and much more. I constantly use this feature. Raycast launched [Raycast Notes](https://www.raycast.com/blog/raycast-notes) at the end of 2024. They support now Markdown, code blocks, and multiple notes.
-
-
-
+
## Clipboard History
-
-
-
+
Another feature I use constantly is Clipboard History. It allows accessing the history of everything you copied, not only text, but images, files, links, and colors. They can be filtered, searched and directly copied, opened, edited, or deleted.
## Screenshots
-
-
-
+
The screenshots I create are saved in a cloud storage folder. With Raycast, you can search all your screenshots (images and videos) in multiple locations with a preview. You can search and filter them by date, name, and even by text inside a screenshot. My process is to use [Cleanshot X](https://cleanshot.com/) to capture and create full-length screenshots. I then send them directly to Cleanshot X from Raycast to annotate them and paste them back into a chat or work ticket.
## Snippets
-
-
-
+
I have used various paid and open-source solutions for snippets throughout the years. However, why use separate software when you can have it included in your favorite application?
@@ -94,26 +107,32 @@ There may be snippet applications available with more features (like programming
## Emoji & Symbols
-
-
-
+
In a remote setting, it’s important to transfer emotions to lift the mood and make sure the text is not misunderstood. I use the Emoji & Symbols feature many times each day. The Raycast Emoji & Symbol app shows all emojis in a beautiful grid, shows recently used emojis, and allows you to pin the emojis important to you.
And recently, the feature got even better for Pro users, now you can search for anything and AI will find all Emoji that fit the search term.
-
-
-
+
## Search Files
-
-
-
+
This allows to search your hard drive for files, folders and optionally for the contents of your files. From there you can get information about the file, open, move, copy, duplicate and perform other commands on the selected file.
@@ -125,9 +144,12 @@ I would love if my window manager [AeroSpace](https://github.com/nikitabobko/Aer
## Quicklinks
-
-
-
+
A feature I initially overlooked and started using a few months ago after watching the useful [Quick Tips](https://www.youtube.com/playlist?list=PLNzQX4H1-dVTHCLKFjekFwswKDpcEN2rI) playlist by Raycast on YouTube is Quicklinks. But now I use it more and more. Quicklinks allows linking to URLs, files on your hard drive and even include a query for a search. I use Quicklinks a lot to create names I can remember to link to important documents, folders or work URLs.
@@ -141,12 +163,12 @@ I use several script commands, which are publicly available in my [raycast-scrip
## Raycast AI 💰
-
-
-
+ src="/images/posts/raycast-ai.webp"
+ alt="Raycast AI"
+/>
In case you don’t know how to program custom scripts, you can use Raycast AI as a paying Pro member to help with that. Raycast AI is one of the features I use the most. It uses multiple models under the hood, including OpenAI (ChatGPT), Mistral, Perplexity, Meta (Llama), and Anthropic (Claude). Instead of subscribing to each services and using a web interface, you can switch between the models and use it everywhere on your computer and work with highlighted text.
@@ -156,9 +178,12 @@ You can continue (or start) a regular ChatGPT session in an extra window that co
I have several assistants that I use for specific tasks, providing the necessary instructions and context. I have one that helps me solve coding issues, one that helps me learn Japanese grammar, and one for training tips.
-
-
-
+
But the feature I like the most is Search AI Commands. These commands allow you to create specific custom commands that perform a task on your text. The built-in AI commands include:
@@ -179,12 +204,12 @@ Raycast includes another 10-20 AI commands as ideas, and I have created many mor
## Translator 💰
-
-
-
+ src="/images/posts/raycast-translator.webp"
+ alt="Translate"
+/>
As a Pro subscriber, you have access to a fantastic built-in translator that can translate in nearly all languages. You can dictate and listen to the translations.
@@ -203,9 +228,12 @@ Raycast has many more features to mention, but here are a few:
## Raycast Store
-
-
-
+
This alone combines the features of a dozen or more, often paid apps. But the reason Raycast is so successful is its built-in app [store](https://www.raycast.com/store) that allows developers to provide custom extensions. Raycast provides a convenient and robust API to build extensions with [React](https://react.dev/), one of the most popular JavaScript libraries. Under the hood, the components are converted into native code.
@@ -213,27 +241,30 @@ Because the number of extensions is huge, I’ll show in the next section how I
## Browsing & Searching
-
-
-
+
One of my most favorite extension in this section is the [Brave](https://www.raycast.com/ron-myers/brave) extension that allows you to control the Brave browser from anywhere. With it, you can search, create new tabs, and access the browser history and bookmarks from anywhere. When I’m working somewhere and want to go to a specific tab, I don’t have to switch to the browser, find the tab, and click it. Instead, I can immediately jump to the correct tab instantly. There are similar extensions for other browsers, for example [Arc](https://www.raycast.com/the-browser-company/arc).
-
-
-
+
My default search engine these days is [Brave Search](https://search.brave.com/). Google is just too biased and suppresses too much information. With the [Brave Search](https://www.raycast.com/VishwasShashidhar/brave-search) extension, I can search with auto-complete from anywhere and directly open the search results in the browser.
-
-
-
+
The third of my most favorite extension is [Raindrop.io](https://www.raycast.com/lardissone/raindrop-io). It allows me to search in my favorite bookmark manager (30K bookmarks) and see the title, tags, and date of saving directly, and open the bookmark directly.
@@ -243,23 +274,32 @@ Other honorable mentions are the [Reddit Search](https://www.raycast.com/ewlchen
I’m a Frontend Developer by profession and work a lot with code, but also with design tools.
-
-
-
+
As a developer, you work a lot with version control. I use the [GitHub](https://www.raycast.com/raycast/github), [GitHub Enterprise](https://www.raycast.com/Kinbaum/github-for-enterprise), and [GitHub Gist](https://www.raycast.com/koinzhang/github-gist) extensions. They allow you to view or create pull requests, discussions, read notifications, search repositories, and much more. The [Git Repos](https://www.raycast.com/moored/git-repos) extension allows searching on the local hard drive for Git repositories.
-
-
-
+
I use the [Kill Process](https://www.raycast.com/rolandleth/kill-process) extension to terminate hung processes. The [Port Manager](https://www.raycast.com/lucaschultz/port-manager) allows me to view or kill ports. The [Brew](https://www.raycast.com/nhojb/brew) extension allows me to use Homebrew from Raycast. I work a lot with Neovim and tmux in my Ghostty terminal. The [Tmux Sessioner](https://www.raycast.com/louishuyng/tmux-sessioner) allows me to jump directly into the terminal in a specific project.
I use extensions to format or create code. For example, I use [SVGO](https://www.raycast.com/kaichi/raycast-svgo) to optimize SVGs, [SVGR](https://www.raycast.com/rickMcGavin/svgr) to create React components from SVGs, and tools like [Format JSON](https://www.raycast.com/destiner/json-format) and [Prettier Code](https://www.raycast.com/lin/prettier) to format any code. It’s convenient to format the code before pasting it anywhere on the web.
-
-
-
+
A significant amount of a developer’s time is spent reading documentation to understand how libraries or tools work. I frequently use [Can I Use](https://www.raycast.com/thomaslombart/can-i-use) to determine browser support for web features, the [HTTP Status Codes](https://www.raycast.com/Alex_/http-status-codes) extension to look them up, [search npm packages](https://www.raycast.com/mrmartineau/search-npm), and browse the [TypeScript](https://www.raycast.com/chezhe/typescript-documentation-search) or [Tailwind CSS](https://www.raycast.com/vimtor/tailwindcss) documentation.
@@ -275,21 +315,30 @@ I love the [Color Picker](https://www.raycast.com/thomas/color-picker) extension
[Image Modification](https://www.raycast.com/HelloImSteven/sips) allows you to convert images and vector graphics, flip, scale, resize, add filters and distortions, optimize the size, and perform real-time image manipulations.
-
-
-
+
There is a [Google Fonts](https://www.raycast.com/GastroGeek/google-fonts) extension that allows browsing and directly downloading fonts.
-
-
-
+
[Glyph Search](https://www.raycast.com/gbgk/glyph-search) helps you find Unicode characters.
-
-
-
+
[Unsplash](https://www.raycast.com/eggsy/unsplash) enables looking at the massive collection of stock photos, and the [Figma File Search](https://www.raycast.com/michaelschultz/figma-files-raycast-extension) allows for direct searching and opening of designs. I started using the [Eagle](https://www.raycast.com/Yukai/eagle) extension to locally search all my assets stored in [Eagle](https://eagle.cool/).
@@ -299,23 +348,32 @@ I write a lot, including blog posts, documentation, chat messages, and code. Ray
[Lorem Ipsum](https://www.raycast.com/AntonNiklasson/lorem-ipsum) allows you to create placeholder text. [Link Cleaner](https://www.raycast.com/MisakiCoca/link-cleaner) removes all tracking parameters from the last URL in the clipboard.
-
-
-
+
One of my favorites is [Change Case](https://www.raycast.com/erics118/change-case). I use it many times each week to convert, for example, the title of a Jira ticket into a branch name in Git. The [Word Search](https://www.raycast.com/rishabswift/word-search) extension is fantastic for finding adjectives, antonyms, rhymes, synonyms, or missing letters.
-
-
-
+
All the tools I use for note-taking have companion apps: [Obsidian](https://www.raycast.com/KevinBatdorf/obsidian), [Readwise](https://www.raycast.com/natterstefan/readwise), [Readwise Reader](https://www.raycast.com/zach/readwise-reader), [DEVONthink](https://www.raycast.com/bgnfu7re/devonthink), and [Notion](https://www.raycast.com/notion/notion).
## Project Management & Productivity
-
-
-
+
There is most likely an app for most online tools available in this category. I, personally, use two of them: [Jira](https://www.raycast.com/raycast/jira) and [Things](https://www.raycast.com/loris/things). Jira is the ticket management tool we use at work, and Things is my personal to-do application.
@@ -323,27 +381,39 @@ Fun fact: The Jira application needed approval by my company’s IT. I opened a
## Media
-
-
-
+
Raycast extensions are not just for work, but also for fun. Everyone needs to generate memes or find funny GIFs, right? Well, there’s an extension called [Meme Generator](https://www.raycast.com/timoransky/meme-generator) and [GIF Search](https://www.raycast.com/josephschmitt/gif-search) for exactly that purpose.
-
-
-
+
If you’re into movies and TV shows, I frequently use [The Movie Database](https://www.raycast.com/Aayush9029/tmdb) for information and [JustWatch Search](https://www.raycast.com/rishabswift/search-justwatch) to find out where they are available for streaming.
-
-
-
+
I use the [Goodreads](https://www.raycast.com/puneeth/goodreads) extension to discover books or authors and the [Spotify Player](https://www.raycast.com/mattisssa/spotify-player) to manage music.
-
-
-
+
I regularly use the [YouTube](https://www.raycast.com/tonka3000/youtube) extension to search videos or channels and [YouTube Downloader](https://www.raycast.com/vimtor/youtube-downloader), as well as the [Twitter/𝕏 Video Downloader](https://www.raycast.com/kaanrkaraman/twitter-video-downloader), to download videos onto my hard drive.
@@ -369,9 +439,12 @@ With a Pro account, you can design your own Raycast color themes, and Easter egg
The second year in a row, you get one of the best year reviews. People proudly share their images on 𝕏 ([#RaycastWrapped](https://x.com/hashtag/RaycastWrapped)). Here is my Raycast Wrapped 2024 summary:
-
-
-
+
[Raycast](https://www.raycast.com/) offers a range of useful resources. You can find the changes for each release in the [Changelog](https://www.raycast.com/changelog), which is also accessible within Raycast. Additionally, the [blog](https://www.raycast.com/blog) features informative and engaging articles.
diff --git a/src/content/journal/2025/15-years-xing.mdx b/src/content/journal/2025/15-years-xing.mdx
index 27b230b..e701519 100644
--- a/src/content/journal/2025/15-years-xing.mdx
+++ b/src/content/journal/2025/15-years-xing.mdx
@@ -37,12 +37,11 @@ On my first day, I received a warm welcome at the front desk at Gänsemarkt in H
It took a bit of time to find a desk, so I initially sat in the corridor. The atmosphere was energetic, with walls covered in cards, product prints, and concepts. I joined during a major relaunch that included a comprehensive redesign and an activity stream with stories about jobs and people. My laptop wasn’t ready on day one, so I used an older iMac for the first week or two.
-
-
-
+
For the next three weeks, I worked in the frontend architects’ office—a small team of highly skilled JavaScript specialists—and tackled several challenging tasks under their guidance.
@@ -50,12 +49,11 @@ After onboarding, I joined my first team: the jobs team. We were a cross‑funct
XING was known for memorable parties and offsite events over the years. In 2011, we hosted a summer party at [Zum Alten Lotsenhaus](https://www.zum-alten-lotsenhaus.de/) at Elbstrand beach with a “maritime” costume theme—pirates, fish, sailors, and officers—along with great food and drinks. Several internal products even carried playful, beer‑themed names.
-
-
-
+
The same year, I attended my first conference abroad. A small group of frontend engineers from Hamburg flew to Amsterdam for the [Fronteers conference](https://www.fronteers.nl/), held at the [Tuschinski Theatre](https://www.tuschinskimultiplexcinema.com/). We stayed in a nearby hotel, observed a moment of silence when the news of Steve Jobs’ death was announced, and even met the founder of jQuery.
@@ -67,12 +65,11 @@ We held our Christmas party at [FABRIK Hamburg](https://fabrik.de/) with a Wild
In 2012, I participated in my first Prototyping Days—a three‑day event where the company formed teams to develop prototypes. At the end of the week, ideas were presented at [Restaurant Leuchtturm](https://www.leuchtturm-harburg.de/) near Harburger Stadtpark, winners were selected, and we wrapped up with a summer party.
-
-
-
+
XING was successful, with the stock price rising from €55 in 2011 to €70 in 2012. Burda Digital increased its stake, triggering a mandatory takeover offer for the remaining shares. I recall seeing various Burda print magazines laid out in the office for free during this time. I only managed to get one issue of Playboy; it was gone within minutes each time.
@@ -84,12 +81,11 @@ XING was growing rapidly, and as other tenants moved out, we took over additiona
A new building went up next to our office, bringing a year of construction noise and stress. We often joked, “Wouldn’t it be funny if we moved into that building?”—and in April 2013, we did. The new space was modern and open‑plan, with carpeting and room dividers to keep noise down, plus kitchens, themed rooms, a large event space, and a parking garage. As a welcome gift, employees received a lime‑green XING beach towel and some orange juice.
-
-
-
+
The building was located next to the [Hamburg Opera](https://www.die-hamburgische-staatsoper.de/), where I could hear the singers training for years. I observed auditions behind a curtain as singers showcased their talent.
@@ -97,12 +93,11 @@ Around that time, the e‑recruiting business relocated to Barcelona. I could ei
In September 2013, we held our second Prototyping Days, and this time I was on the winning team. We developed XING screencasts, a concept aimed at teaching people how to use the platform. The following summer party took place at [Planten un Blomen](https://plantenunblomen.hamburg.de/), featuring an illuminated water and light show at night.
-
-
-
+
In October, I flew to the Fronteers Conference in Amsterdam. We stayed at a beautiful hotel near a river, which served freshly baked bread every morning. We explored the city center, enjoyed a Wagyu burger at [Burger Bar](https://www.burgerbar.nl/), and had dinner at an authentic Chinese restaurant. I still remember the disgusted look on my co-worker’s face when he realized that the duck he ordered was steamed and had slimy, soft skin.
@@ -124,12 +119,11 @@ Our team won the [SEMY Award](http://semyawards.com), the search marketing prize
We had a cluster offsite in the summer, spending several days at [Herrenhaus Gut Bliestorf](https://herrenhaus-gut-bliestorf.de/). The experience included delicious food and team events such as archery and stock fighting sessions.
-
-
-
+
In June, I joined a [sketchnotes](/sketchnotes/) workshop that a co-worker organized at the company, and I still enjoy sketching to this day.
@@ -153,36 +147,37 @@ Nearly 1,000 company employees were flown from various locations to Palma de Mal
We booked two or three hotels near the event location, [Palau de Congressos de Palma](https://www.palmacongresscenter.com/en). After the initial kick-off, we rode by bus on the first day to [Cova Galdent](https://www.bodas.net/fincas/cueva-de-galdent--e12921), a party venue inside natural stone caves. It was a magical place, but the food was insufficient. I remember my co-worker was starving, as all we received were appetizers. However, the lighting and atmosphere of the location were enchanting.
-
-
-
+
Every location was a secret, and they didn’t reveal it until we arrived. On the second day, the party location was even more exciting. We were driven for half an hour across the island to [Son Termes Finca](https://sontermes.com/), a large, historic Spanish finca on a mountain. The setting was incredible, featuring old fireplaces, stone walls, colorful lighting, fire pots, Mariachi musicians, paella pans, homemade burgers, Iberian ham, and suckling pig. The variety of food at all the locations was astonishing.
-
-
-
-
+
-
-
-
-
+
+
+
+
+
The next morning, most people were severely hungover. Some were still drunk when we flew home, resulting in a miserable flight for some. I, on the other hand, do not drink alcohol, so I was up at 7 a.m. I hiked up the mountain to [Castell de Bellver](https://castelldebellver.palma.es/), an old castle overlooking Palma de Mallorca. It opened when I arrived, and I climbed the towers, visited the museum with Roman statues, and enjoyed a magnificent view of Palma de Mallorca and the sea.
@@ -208,12 +203,11 @@ We celebrated our Christmas party at [Prototyp—Das Automuseum](https://prototy
2019 was one of the most stressful years for me at XING. It began with a pleasant kickoff at the [Grand Elise](https://www.grand-elysee.com/) Rotherbaum. In August, we had a great offsite with the Growth cluster at the [Ellernhof Hotel](https://www.ellernhof.de/), a farm. We went bowling, had a barbecue, saw horses and chickens, used a climbing park in the trees, and enjoyed the sunny weather.
-
-
-
+
The onboarding team needed to deliver an important product quickly. To do this, two teams were combined into one larger group.
@@ -221,12 +215,11 @@ The project succeeded, but the pace and pressure led to a difficult phase with s
I attended a second offsite, this time for the XIF, the XING Interfaces & Foundations cluster. The event took place at a beautiful lake in the cozy hotel, [Bokel-Mühle am See](https://www.bokelmuehle.de/). It featured a fantastic breakfast, a room with a fireplace, a barbecue, and a buffet. We also enjoyed walking around the lake. Although I wasn’t officially part of the cluster yet, I was invited to join to meet the team.
-
-
-
+
After earlier challenges with a prior design system, the company invested in proper staffing to create the brand‑new [XING Design System](/projects/xing-design-system/) (XDS). Previously, the setup was lean, with much of the work shouldered by the Frontend Architecture team alongside a small core. As adoption grew, so did the number of component requests, which made consistency and documentation harder to maintain—one reason the new system focused on clear specs, governance, and consolidation.
@@ -246,21 +239,19 @@ The beginning of the year was especially hard for me when I developed an eye con
COVID‑19 hit in March, and we were all sent home. The IT team worked intensely to support remote work—setting up VPNs, collaboration tools, and a remote meeting structure. It was an especially challenging moment, with a brand‑new building awaiting renovation and opening while offices were closed due to lockdowns.
-
-
-
+
In July 2020, we visited the stripped‑down interior of the Unilever building. The new office—New Work Harbour—spans six floors (with the ground level open to the public) and features a nautical theme, with container‑style meeting rooms and wood‑accented meeting boxes. The sixth floor includes a roof terrace, and multiple teams contributed concepts for creative zones, labs, a library, a lounge, a speaker area, a welcome area, and chalk‑writable walls. I helped design an agile room with mobile furniture and writable walls; each area had movable stations with screens and cameras for remote meetings. We officially moved in September 2020, though it was never fully occupied during the pandemic, and many continued working from home.
-
-
-
+
Productivity increased, particularly among engineers. As it turns out silence and concentration might be necessary for programming.
@@ -272,12 +263,11 @@ The pandemic affected the company, causing its stock price to decline to €260,
I focused on my team and the design system. After two years of development, it had matured with 50+ components. Designers maintained detailed spec sheets in [Figma](https://www.figma.com/) and a product guide, while we built a documentation site with code examples, API tables, and live demos. We migrated the web code to [TypeScript](https://www.typescriptlang.org/) and [Styled Components](https://styled-components.com/) and automated the export of design tokens (colors, spacing, motion) as well as icons and illustrations, enabling streamlined releases for Web, iOS, and Android. We developed a comprehensive palette with semantic colors, hundreds of icons, and many illustrations by a talented illustrator who later joined our team.
-
-
-
+
Most work was done remotely, and COVID-19 continued to impact revenue. The stock closed at €240 at the end of the year.
@@ -285,12 +275,11 @@ In 2022, as the pandemic eased, the company encouraged a gradual return to the o
Our team focused on training and promoting adoption of the design system while continuing to create new components. We also built internal tools to measure adoption. I created a web app that analyzed multiple repositories to track component usage and surfaced the results—together with iOS, Android, and Figma figures—in a React dashboard. This gave us detailed insight into how widely components were used across products.
-
-
-
+
I also created a Chrome extension that highlights XING Design System components with a green border and their names, making it easy to spot custom components.
@@ -304,12 +293,11 @@ New Work SE had a total of 8 locations at that time: Hamburg, Berlin, Munich, Vi
The company continued to lose money due to the post-COVID recession. Expanding the monetary supply by printing a trillion euros had led to massive inflation and the boom-bust cycle, as described by Ludwig von Mises in “[The Theory of Money and Credit](https://mises.org/library/book/theory-money-and-credit)” (1912). Additionally, losing access to cheap gas from Russia and shutting down all nuclear power plants was likely not a good decision, resulting in a 20% decline in industrial production and a negative GDP growth for multiple years in a row. These factors, combined with the post-COVID recession, had negatively affected the job market and recruitment solutions. The stock price fell to €150, and layoffs occurred in Q1.
-
-
-
+
The Design System team worked on implementing dark mode for the platform. We created dark‑mode‑ready illustrations and used CSS custom properties to switch colors while keeping the same files. By the end of the year, we successfully launched dark mode. It required significant effort across teams because it depended on adopting the design system, and areas not yet migrated didn’t yet reflect dark mode.
@@ -325,23 +313,21 @@ Onlyfy underwent a restructuring with significant layoffs. Two colleagues joined
Henning Rönneberg was appointed CFO and COO in February. In May, Petra von Strombeck handed over the CEO role to Rönneberg. Despite prior cost measures, financial headwinds persisted, and many anticipated another round of layoffs.
-
-
-
+
Our team led the accessibility initiative to meet the mid‑year timeline for the [European Accessibility Act](https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/union-equality-strategy-rights-persons-disabilities-2021-2030/european-accessibility-act_en). We introduced features such as high‑contrast mode, reduced/accessible motion, improved keyboard navigation, and enhanced ARIA roles and labels. It was a challenging project, but we delivered on time. Additionally, the web platform team built a dashboard to monitor stability, accessibility, and other key factors.
Throughout the year, the Design System team continued building components for priority projects, creating several new components and enhancing others.
-
-
-
+
In late October, XING announced another round of layoffs planned for year‑end, and we waited for several weeks for details. Activity slowed noticeably. I migrated a few apps to the cloud and completed that work shortly before the layoffs. Our backlog was quiet, with few new component requests or project starts.
@@ -349,21 +335,19 @@ In late October, XING announced another round of layoffs planned for year‑end,
To be honest, I didn’t expect to be fired. I was uncertain about the future of the design system but thought my own role was relatively safe. A longtime colleague even joked we would be too expensive to be severed and possibly the last to leave the company. In the end, engineering roles in Germany were largely reduced, including many who had worked on shared infrastructure and foundations. Starting in January, the remaining engineering teams—primarily in other locations—planned to expand the use of AI‑assisted coding tools to help with knowledge transfer.
-
-
-
+
All that remains is looking back to remember the good times. I don’t look back in anger; XING was the best company I worked for, with some of the most skilled people I’ve met. I wouldn’t have stayed so long if it had been otherwise. I’m confident the XING Design System is among the strongest in Europe, perhaps beyond. Reviewing the documentation, spec sheets, and product guides reminded me how skilled and innovative our designers are. From the challenging Superellipse profile image—[which can soon be built natively with CSS](https://nerdy.dev/superellipsed-pill-shapes-are-cool)—to bold colors, animations, and distinctive illustrations, icons, and stickers, the work stands out. Building a custom design system rather than theming an existing component library made a real difference. To all the developers, designers, QAs, product managers, tech, and non-tech people I’ve worked with over the past 15 years: thank you for the learning and the projects we created together.
-
-
-
+
XING is in the process of moving out of New Work Harbour, and Kununu plans to operate as its own company. I’ve returned my notebook and iPhone, and when my remaining access ends, I’ll close this chapter of my life.
diff --git a/src/content/journal/2025/from-typewriter-to-split-keyboard.mdx b/src/content/journal/2025/from-typewriter-to-split-keyboard.mdx
index 7b2041f..581e885 100644
--- a/src/content/journal/2025/from-typewriter-to-split-keyboard.mdx
+++ b/src/content/journal/2025/from-typewriter-to-split-keyboard.mdx
@@ -65,12 +65,11 @@ Two months ago, my company brought together everyone from my work unit for a thr
At home, I researched split keyboards for a while by watching all kinds of videos on YouTube and by asking my co-worker many questions about his keyboards via chat. He told me the delivery might take a few weeks, as it is sent from Taiwan. The price of the ZSA Voyager is quite hefty.
-
-
-
+
I decided to just go for it and ordered the ZSA Voyager in Cosmic Nomad black, with Kailh Choc Pro Red switches that have a linear, lighter touch of **35±5gf** and printed US keycaps. The keyboard comes with RGB LED backlights, a carrying case, additional magnetic legs to tilt the keyboard, cables in all kinds of sizes, a key puller, and 2 extra thumb keys. It also includes 34 extra keycaps with tactile bumps for QWERTY, Colemak, and Dvorak layouts.
@@ -88,12 +87,11 @@ Every day, I used various websites to enhance my writing and speed. I completed
After one and a half months, I achieved my speed goal and ordered a set of two beautiful custom-designed coiled cables from [King Cables](https://www.kingcables.org). I spent several hours researching options since I knew very little about cables. I chose the “Galaxy” theme for both cables from a wide range of color options. One coiled keyboard cable features a 16 cm coil, a detachable YC8 connector in black, black heat shrink, and is USB-C to USB-C with a total length of 1 m. The second cable is a custom TRRS cable that connects the two halves of the split keyboard. I ordered a 25 cm long coil with angled 90° connectors in gold and a black heat sink. I didn’t order a cute animal for the cable, but King Cables send me a cute Panda bear nevertheless.
-
-
-
+
The new setup looks fantastic, and I sometimes feel sad when my workday ends because I have no
excuse to stay at the computer. 😅 The galaxy-themed cables look much better than any photo can
diff --git a/src/content/journal/2025/modern-atlas-shrugged-1-signs-of-decline.mdx b/src/content/journal/2025/modern-atlas-shrugged-1-signs-of-decline.mdx
index da86e87..5b1a5bb 100644
--- a/src/content/journal/2025/modern-atlas-shrugged-1-signs-of-decline.mdx
+++ b/src/content/journal/2025/modern-atlas-shrugged-1-signs-of-decline.mdx
@@ -41,12 +41,11 @@ I first read Ayn Rand’s fiction in March 2023. Since then, I have [read numero
This essay will be full of spoilers in case you haven’t read the book.
-
-
-
+
My favorite chapter from the book is Part 3, Chapter VII, “This is John Galt Speaking.” In this chapter, the ominous John Galt takes control of all broadcasting in the country and presents a four-hour argument that human reason and individual self-interest form the foundations of a moral and productive society. He rejects altruism and collectivism as destructive forces that enslave the capable to the incompetent. Galt asserts that the mind is the source of all value and calls on the “men of the mind”—the innovators and producers—to withdraw from a world that punishes their virtues, leading to its inevitable collapse. This chapter defends capitalism, personal freedom, and the pursuit of happiness through rational self-reliance.
@@ -72,12 +71,11 @@ The socialist government is developing a secret weapon system called “Project
People use the phrase “Who is John Galt?” to express their frustration and anger at government policies. If you recognize these signs, congratulations! You are not alone. If you don’t, allow me to share my thoughts.
-
-
-
+
## Industrial and Economic Decline
@@ -85,12 +83,10 @@ People use the phrase “Who is John Galt?” to express their frustration and a
Sixteen years ago, the economies of the European Union and the United States stood shoulder to shoulder, each a titan of global prosperity. Today, the US boasts a GDP of €25,5 trillion—50% larger than the EU’s €16,6 trillion. At the heart of Europe’s faltering fortunes lies Germany, once an industrial juggernaut, now a shadow of its former self. The International Monetary Fund ranks it last among the world’s top 30 economies, and it ended 2023 with a negative growth rate of 0.3% GDP. Germany has fallen from 6th in global competitiveness in 2014 to 24th in 2024. This decline is not only a national crisis—it’s a warning for Europe and the West. What went wrong? A toxic mix of energy missteps, industrial neglect, and excessive state control has dragged Germany into an economic mire, with ripple effects threatening the broader Western world.
-
-
-
+
The statistics present a troubling scenario. Germany’s GDP decreased by 0.2% in 2024, and productivity growth has stalled. The IMF reduced its 2025 forecast by 0.5 points to just 0.3%, while the country’s long-term potential growth has halved from 1.4% to 0.7% over five years. In contrast, the US has seen its potential growth rise to 2.8%. Globally, Germany’s share of GDP has fallen from 5% to 4% over the past decade, while the US’s share increased from 22% to 26%. Domestically, the DAX index of export giants surged by 18.56% in 2024, masking the MDAX’s decline of 5.35%. Wealth per person has dropped to €68,000, leaving Germans poorer than Slovenians and ranking 30th worldwide. These figures are not only statistics; they signal distress from a nation losing its economic stability.
@@ -104,12 +100,10 @@ Germany’s troubles resonate across Europe. The EU has no trillion-dollar compa
One sign of decline is the collapse of infrastructure. In Germany, public infrastructure investment is critically low, ranking near the bottom in the EU. This situation is exacerbated by planning delays and a shortage of skilled labor. Despite the potential for course correction, experts suggest it may already be too late, raising concerns about Germany’s ability to catch up with other EU countries in infrastructure development.
-
-
-
+
A prime example of this is the Carolabrücke in Dresden, which partially collapsed on September 11th, 2024, narrowly avoiding casualties during peak traffic hours. The left-wing city council majority rejected a crucial structural integrity review requested by the Free Voters, prioritizing political affiliations over public safety. More than half a year later, the debris remains uncleared, and the construction of a new bridge is not to be expected before 2035.
@@ -121,12 +115,10 @@ Ironically, Germany is lagging behind Brazil and Peru in terms of average intern
While trains in China reach speeds of up to 800 km/h, in Germany, you are fortunate if they arrive at all. Deutsche Bahn exemplifies the inefficiencies and decline of the German railway system. Although it operates as a stock company, the state owns 100% of Deutsche Bahn AG, making it state-owned. In 2024, only 62.5% of long-distance trains arrived within six minutes of their scheduled time. Cancellations and disruptions are common, often due to ongoing construction and an aging infrastructure that requires extensive repairs. The company has launched a new initiative to improve punctuality and reliability, with plans to reduce delays by 2027 and achieve a punctuality rate of 75-80%.
-
-
-
+
Cancellations are so frequent and problematic that anyone who has taken a train can share horror stories about their experiences. I have several stories, including instances where I was late by three hours or more due to snow, fallen trees, or suicides. I injured my leg when someone pushed me while I tried to board a replacement bus that arrived two hours after the trains stopped, as 500 people attempted to enter a bus with room for only 120.
@@ -138,12 +130,10 @@ Infrastructure decline is a critical issue. Decades of underinvestment have led
Another company declining is the Deutsche Post AG or DHL Group. Although privatized in the 1990s, the state still holds nearly 17% through the KfW Bank. The company has been struggling with labor shortages, particularly in logistics and transportation. The shortage of truck drivers has led to delays in deliveries and increased costs for businesses. The company has also faced criticism for its treatment of workers, including low wages and poor working conditions, which have led to strikes and protests.
-
-
-
+
More people than ever formally complained about the postal service last year. Over 44,000 complaints about the former state-owned company reached the Federal Network Agency in 2024, marking a 7% increase from the previous year and setting a record.
@@ -157,12 +147,10 @@ However, the postal service is contributing to these issues itself. By the end o
In 2015, Germany’s education system faced a sobering reality check when the PISA results revealed a sharp decline in students’ reading, math, and science competencies. A decade later, this downward trend continues, with reading scores plummeting since Angela Merkel’s 2015 open-door refugee policy. This is not just a statistical anomaly; it reflects a broader competency crisis that threatens Germany’s future. The nation is grappling with a combination of demographic, educational, and societal shifts that require urgent attention. What is driving this decline, and how did a country once renowned for its precision and intellect reach this point?
-
-
-
+
Germany’s competency crisis starts with its demographics. For over 50 years, fertility rates have remained between 1.2 and 1.5 children per woman, well below the replacement level of 2.1. This has created an age pyramid with a large cohort of baby boomers, born in the 1960s, who are now nearing retirement. These workers, who form the backbone of Germany’s skilled trades and industries, will soon leave the labor market, taking decades of expertise with them. The result is a shrinking working-age population and a growing knowledge gap that younger generations are ill-prepared to fill.
@@ -184,12 +172,10 @@ Too often, fingers point outward—to schools, teachers, or abstract “systems
One of the main drivers of the economic decline is Germany’s ideologically driven Energiewende policy, which aims to achieve climate neutrality by 2045. This policy seeks to transition the nation from fossil fuels and nuclear power to renewable energy sources like wind and solar. Since 1971, the energy mix has evolved significantly, with low-carbon alternatives—such as wind, solar, biofuels, and hydropower—gaining traction. However, a crucial decision made under Angela Merkel and finalized under Olaf Scholz phased out nuclear power entirely, reducing capacity from 23 GW to 0 GW by 2023. This move, influenced by public fears following Fukushima and pressure from the Green Party, aimed to satisfy environmentalists but left Germany vulnerable. Over the past 25 years, the nation has invested more than €500 billion in renewables, constructing 30,000 wind turbines and over 3 million solar panels—many sourced from China. Yet, the promise of a stable, green energy future remains unfulfilled.
-
-
-
+
The fragility of this transition becomes evident during “Dunkelflaute”—periods of cold, windless, and cloudy weather when renewable energy production declines. In late 2024 and early 2025, Germany experienced several such events, with wind and solar output plummeting to as low as 0.7 GW out of a 56 GW capacity—just over 1%—on December 27, 2024. During a week-long Dunkelflaute across Central Europe, which intensified over two days, wind energy provided almost nothing, and solar energy contributed zero. Electricity demand surged, but renewables could not keep up. Despite its scale, Germany’s renewable infrastructure fails to meet demand when nature does not cooperate.
@@ -217,12 +203,10 @@ A few days before the blackout, Repsol issued a mandatory stock market notice to
Since Angela Merkel’s decision to permit an unlimited influx of immigrants in 2015, Germany has seen a significant increase in crime rates. In 2023, there were 21,000 reported knife attacks—nearly 60 per day. The online project [Messerinzidenz](https://messerinzidenz.de/) collects publicly available knife crime data and displays these attacks on a map daily. Nancy Faeser, the former Federal Minister of the Interior and Community, presented the Federal Crime Statistics (PKS), which reveal alarming figures and underscore the serious situation.
-
-
-
+
Similar alarming trends are evident in crimes against sexual self-determination, which have surged from 30,000 to 80,000 per year since 2015. In 2023, group rapes in North Rhine-Westphalia (NRW) showed that 13% of suspects had clearly German names, while 34% had clearly foreign names, despite foreigners making up only 16.1% of the population in NRW. This indicates an overrepresentation of non-Germans in these crimes.
@@ -252,12 +236,10 @@ While socialist parties present immigration as the future and backbone of our ec
Europe is more divided than ever. Even though some bureaucrats dream of a United States of Europe, this will never happen. The cultures, languages, and people are too different. Besides, the EU doesn’t want to create a federal system like the United States has with a constitution and 1st and 2nd amendment rights, but rather a centralized system that is more similar to the Soviet Union. Critics mock the EU as EUdSSR.
-
-
-
+
The concept of a European state is more complex than just domestic trade and free travel; the countries involved are too diverse. Ideologically, we have progressive nations like France and Germany, alongside conservative ones such as Poland and Hungary, which hold vastly different views on migration, LGBTQ+ rights, and the rule of law. Financially, the countries are also divided. Wealthier nations like Germany and the Netherlands are net contributors, while poorer countries like Italy, Greece, and Spain face higher debt and unemployment, seeking more financial support from the EU.
@@ -271,12 +253,10 @@ The Euro devalues each year, and inflation is rampant. The EU has lost credibili
The situation in Germany remains challenging. Thirty-six years after reunification, the country is more divided between East and West than it was when the Berlin Wall fell. The AfD (Alternative for Germany) has gained significant support in the East and is also growing in the West, making it the strongest party. This division is not only political; it reflects deeper cultural and ideological gaps that have persisted since reunification. However, the ideological divide between the AfD and other parties hinders the formation of a center-right coalition. The CDU (Christian Democratic Union) has broken all its pre-election promises and increased the debt by €1.5 trillion for rearmament, infrastructure, and ecological projects. They formed a coalition with the SPD (Social Democratic Party), the former leading party whose government collapsed prematurely, and continued the policies of the previous failed administration.
-
-
-
+
Friedrich Merz, the new chancellor and a former Black Rock employee, understands that his party may cease to exist in the near future if it fails to deliver on its promises. He will face significant challenges in keeping these promises, as the socialist coalition partner will do everything possible to obstruct him. His election as chancellor was already embarrassing, as he became the first chancellor in the history of the republic to fail to secure a majority in the first round of voting. He needed additional support from the former SED—the Wall Murderer Party—to finally be elected chancellor in the second round.
@@ -296,12 +276,13 @@ Followers of the utopian vision view human nature as malleable, believing that p
In contrast, followers of the tragic vision see human beings as inherently flawed and limited, both morally and intellectually. They believe that social evils and conflicts arise from these inherent limitations, not merely from poor institutions or a lack of effort. They argue that society must acknowledge these permanent limits. Progress involves finding workable trade-offs rather than pursuing perfection; attempts to achieve ideal outcomes can be futile and counterproductive. They emphasize evolved traditions, systemic processes (such as markets and families), and the importance of incentives, rather than relying solely on rational planning or moral intentions. Justice and freedom are viewed in terms of fair processes and the absence of arbitrary power, rather than guaranteed outcomes. They advocate for incremental social change, as categorical or sweeping changes often overlook complexities and lead to unintended consequences.
-
-
-
+
The country is divided on many issues, making it difficult to keep track: climate change, energy policies, immigration, gender ideology and LGBTQ+ matters, COVID-19 vaccines and lockdowns, Donald Trump, Elon Musk, free speech, religion, the Ukraine war, the Israel-Palestine conflict, meat consumption, language, education, and even the concept of “freedom” itself. While the left was the peaceful faction in the 1970s, it has now become authoritarian and collectivist. They demand censorship against “hate speech” and “misinformation,” call for rearmament, and even advocate for open war with Russia, all while promoting a new form of moralizing authoritarianism. The terms “Nazi,” “Fascist,” and “Hitler” are used so frequently that they have lost their meaning. They support globalist agendas like the Sustainable Development Goals, Agenda 2030, and plans for a one-world government and 15-minute cities, pushed forward by organizations such as NATO, the UN, WHO, and the WEF. While many people might still have diverse opinions on topics, it has become nearly impossible to voice opinions without risking the loss of friendships, jobs, or even being reported to the reporting centers. The left has become the new authoritarian faction, and the right has become the new peaceful faction.
@@ -311,12 +292,10 @@ A survey by Datapraxis and YouGov, conducted across all European countries, reve
The divide extends even between genders. A striking [article](https://archive.is/PSONZ) in the Financial Times from January 2024 examined how the perspectives of women and men aged 18 to 30 have evolved since the 1990s. The article compares several countries in the East and West, presenting diagrams for South Korea, the USA, Germany, and the UK. In Germany and the US, men have become slightly more conservative over time, while women have become more progressive by 20 to 30 points. In the UK, men have become 20 points more progressive, while for women it increased by 50 points. In South Korea, women have become 30 points more progressive, while men have become 20 points more conservative. The gender divide encompasses issues such as sexual harassment, immigration, and racial justice. This ideological split could have long-term societal implications, potentially influencing political landscapes, marriage rates, and social dynamics.
-
-
-
+
While it may initially seem that men have issues with women becoming more independent, there are other explanations. The modern world has disconnected people, particularly women, from the real dangers of life. A world built and maintained by men—where in some jobs, men comprise 90% or more—creates the illusion of a consequence-free environment. Additionally, women tend to be more empathetic. While it is natural and beneficial for them to direct this empathy toward their offspring, family, and community, many women, particularly childless women, extend this empathy to the entire world, including strangers, animals, and nature. Dr. Gad Saad, a professor of marketing at Concordia University, coined the term “suicidal empathy” to describe this phenomenon. He argues that it results from the modern world’s [disconnect from reality](/interpretation-the-gods-of-the-copybook-headings/). This form of empathy can lead to a misunderstanding of the real dangers and consequences of certain ideologies and policies, ultimately causing societal harm.
diff --git a/src/content/journal/2025/modern-atlas-shrugged-2-looters-in-action.mdx b/src/content/journal/2025/modern-atlas-shrugged-2-looters-in-action.mdx
index 58b55ba..70ad51c 100644
--- a/src/content/journal/2025/modern-atlas-shrugged-2-looters-in-action.mdx
+++ b/src/content/journal/2025/modern-atlas-shrugged-2-looters-in-action.mdx
@@ -38,12 +38,10 @@ The government nationalizes all railroad companies and develops “Project
The European Union, which started as a free trade zone, has transformed into a bureaucratic [leviathan](https://grokipedia.com/page/Leviathan) that intrudes into every aspect of life. It has become a tool for the wealthy elite to maintain their power and wealth at the expense of ordinary people. There is no area of life that the EU does not seek to control. From how people live and what they eat to how they manage their health, heat their homes, and choose their cars, there is likely a task force or group advocating for regulations on every conceivable issue. This often occurs against the wishes of the overwhelming majority of European citizens who reject these measures.
-
-
-
+
We decide something, then put it out there, and wait for a while to see what happens. If there’s
@@ -71,12 +69,10 @@ The EU is actively combating smoking. After an initial attempt to ban smoking in
The European Union is engaged in an ongoing battle with farmers. Regulations concerning fertilizers, and agricultural practices are making it increasingly difficult for farmers to produce food and compete in the global market. The EU Fertilizing Products Regulation (EU) 2019 / 1009 took effect on July 16, 2022, replacing the previous regulation from 2003. This new regulation expands the scope to include organic, organomineral, and secondary raw material-based fertilizers, in addition to traditional mineral fertilizers. Farmers must comply with hundreds of rules and regulations, which often conflict with one another, complicating adherence. Drones are used to monitor compliance with planting regulations and enforce adherence automatically.
-
-
-
+
Since late 2023, European farmers have been protesting across the continent due to rising production costs, particularly for fuel and fertilizer, while facing declining incomes and product prices. They oppose the EU environmental regulations from the Green Deal, which impose costly burdens without adequate compensation for farmers. Cheap agricultural imports from Ukraine, which do not have to follow the strict EU regulations, are flooding the market and driving down prices by 40%.
@@ -84,12 +80,10 @@ Since late 2023, European farmers have been protesting across the continent due
The EU is waging a war on individual mobility with its ongoing attacks on cars. Its latest initiative, innocuously titled “Updated Rules for Safer Roads, Less Air Pollution, and Digital Vehicle Documents,” is marketed as a step toward improved public safety and environmental stewardship. However, beneath the surface, it represents another move in a coordinated plan that aligns with the World Economic Forum’s vision—“You’ll own nothing and be happy”—and the United Nations’ Agenda 2030 sustainability goals. The EU’s Transport Commissioner, Apostolos Tzitzikostas, claims a noble mission: to halve road deaths and serious injuries by 2030. On paper, who could object? In practice, however, these rules focus less on safety and more on control and the gradual erosion of personal mobility.
-
-
-
+
Consider the following numbers: In 2024, Germany recorded only 2,780 road traffic deaths, the third lowest since 1953. In contrast, violent knife attacks resulting in serious injuries totaled 8,160 in 2022, three times higher than traffic fatalities. Despite these statistics, Brussels remains focused on cars, particularly on the “challenges posed by unsafe and aging vehicles.” They have now introduced a plan requiring every car over ten years old to pass annual inspections. This expensive and inconvenient process will compel many to scrap reliable vehicles. Since half of Germany’s cars are over ten years old, this measure effectively targets the working and middle classes who depend on older, affordable vehicles.
@@ -133,12 +127,10 @@ This pattern is echoed across the European Union. In Italy, businesses often fac
The European Union is increasingly infringing on the autonomy of its citizens through regulations and surveillance. Germany is a leader in surveillance, actively pursuing user data from tech giants. Over the past decade, German authorities have requested information on 709,400 accounts—seven times the global per-person average. With 850 requests per 100,000 residents, Germany ranks second only to the United States, far surpassing Austria (136 requests) and Switzerland (245 requests per 100,000 citizens). In 2022 alone, requests surged by 38%, with a 65.4% response rate from tech companies. For example, Apple complied with 83% of German requests, up from 75% in 2016. This relentless data collection indicates a state eager to scrutinize every aspect of its citizens’ digital lives.
-
-
-
+
The German Federal Office for the Protection of the Constitution (Verfassungsschutz) amplifies these concerns. Since Thomas Haldenwang took over in 2018, the agency has accumulated 485,000 datasets of personal information. Critics label it “Stasi 2.0,” referencing the legacy of the East German secret police and its extensive surveillance. Is this a “defensive democracy” or the foundation of a surveillance state? Public unease grows as historical parallels clash with modern realities. They even have an extensive dossier on the former president of the Verfassungsschutz, Hans-Georg Maaßen, who served from 2012 to 2018. He was dismissed from his position due to public statements regarding false claims of far-right attacks on migrants in Chemnitz, which were later proven to be false by a court, as Maaßen had claimed. Since then, Maaßen has been categorized as an enemy of the state, and they have started collecting material to use against him.
@@ -156,12 +148,10 @@ It is unlikely that the rules applied to you will also be enacted for politician
Another dark cloud of totalitarian control is emerging on the horizon. The European Union plans to systematically record and manage assets through the introduction of an asset register. A central database will consolidate all asset values exceeding 200,000 EUR. Citizens will be required to declare all account movements, stock holdings, company investments, cryptocurrencies, and even cash. Additionally, assets located outside the European Union must be registered. Violating this reporting obligation can result in hefty fines of up to one million euros for individuals and over ten million euros for banks.
-
-
-
+
The new Anti-Money Laundering Authority (AMLA) will be granted extensive sanctioning powers, including the ability to block accounts and prevent transactions.
@@ -177,12 +167,10 @@ Additionally, access to cash is being restricted. In the EU, a €10,000 cash pa
Lately, the European Union has significantly expanded its digital infrastructure, with Germany leading the way in implementing new technologies to streamline public services. A key example is the introduction of the digital patient record (elektronische Patientenakte, ePA), which became mandatory for all citizens with statutory health insurance in Germany starting in 2025, although opting out is still permitted. This digital file stores sensitive health data, prescriptions, and medical histories, making them accessible to healthcare providers and, under certain conditions, to insurance companies and government agencies.
-
-
-
+
While the official justification is increased efficiency and improved medical care, critics warn that these measures indicate a shift toward a surveillance society reminiscent of dystopian worlds. The EU’s broader push for digital identity frameworks, combined with data retention laws and the expansion of AI-powered monitoring, raises serious concerns about personal autonomy and freedom. The EU plans to implement the European Health Data Space (EHDS), a central system that aims for nearly all member states to join by 2025, with exchanges starting in early 2028. This system will enable cross-border access to electronic health records, including patient summaries, prescriptions, medical imagery, and laboratory results. Participation will be mandatory, with no option to opt out.
@@ -196,12 +184,10 @@ Citizens fear that these systems could be used to profile individuals, influence
Germany has the largest public broadcasting network in the world, with a budget of around 10 billion euros collected from every citizen, regardless of their service usage.
-
-
-
+
The system is enforced via mandatory fees (€18.36 per month), with critics claiming this compulsion is akin to financial coercion, especially given the perceived lack of neutrality and the one-sidedness in representation. A refusal to pay this fee can lead to the seizure of personal assets and even imprisonment. Georg Thiel became widely known for his imprisonment due to his refusal to pay the German broadcasting license fee. He was brought into administrative detention (“Erzwingungshaft”) to force compliance with court-ordered payments and remained in prison for 181 days (nearly 6 months). He didn’t pay his debt but needed to be released due to limits on administrative detention.
@@ -227,12 +213,10 @@ The public broadcast network frequently attracts negative attention due to its m
At the EU level, lawfare manifests as legislative initiatives designed to expand state power over speech. Ursula von der Leyen, President of the European Commission, has proposed a new law to criminalize “hate speech” throughout the EU. This initiative requires unanimous approval from all member states and faces political challenges, particularly from leaders like Hungary’s Viktor Orbán and Slovakia’s Robert Fico. The law’s broad scope—criminalizing not only discrimination but also negative stereotyping of groups—has raised concerns that it could suppress legitimate discourse, including reporting on immigration-related crime statistics.
-
-
-
+
In Germany, lawfare is directly targeted against individuals who criticize the state. A significant group of politicians, particularly from the Green Party and the FDP, including Robert Habeck, Marie-Agnes Strack-Zimmermann, Annalena Baerbock, and Katrin Göring-Eckardt, leads in suing ordinary citizens. Some have filed lawsuits against over 1,000 citizens. Many of these cases involve the services of the agency SO-DONE, which specializes in automatic cease-and-desist letters. They utilize AI to scan social media platforms and identify posts that infringe on their clients’ rights.
@@ -271,12 +255,10 @@ On May 15, 2025, an event occurred that I never thought possible in a democratic
Germany’s welfare state, a cornerstone of its social policy, has grown into a behemoth that consumes a disproportionate share of public resources. In 2024, social security spending—including unemployment insurance—accounts for 45.9% of the federal budget, overshadowing investments in education (5.1%), infrastructure (1.9%), and public transport (0.5%). Additional welfare programs, such as asylum seeker and family benefits, add another 5.2%, bringing total social spending to over half the budget. This allocation leaves little room for investments that could drive long-term economic growth, a concern libertarians view as a misprioritization of resources. Critics, echoing Ayn Rand’s Atlas Shrugged, argue that such policies risk fostering a society of “moochers”—those who live off the productivity of others without contributing themselves—thus perpetuating dependency over self-reliance.
-
-
-
+
The middle class, the backbone of Germany’s industrial strength, bears the brunt of this system. For example, the average worker contributes 18.6% of their gross wage to the pension system but receives only a fraction of this in retirement benefits. With an aging population and a shrinking workforce, this disparity is widening, creating a system where the productive are heavily taxed to sustain an increasingly unsustainable entitlement structure. This fosters dependency, reduces work incentives, and undermines individual responsibility.
@@ -288,12 +270,10 @@ Across the EU, the scale of the welfare state is equally troubling. Europe accou
Germany’s taxation system exacerbates the burdens of the welfare state, imposing some of the highest rates in the world on both individuals and corporations. In 2024, a €100,000 income incurs an annual tax burden of €36,500—the highest among G7 nations—compared to €26,600 in the US and €24,800 in Japan. This leaves German workers with significantly less disposable income, limiting their ability to save, invest, or build wealth. Over the past 55 years, social security contributions alone have risen from 26.5% to 42.5% of an employer’s gross salary, reducing an average worker’s annual take-home pay by €8,467 compared to 1970 rates.
-
-
-
+
Corporate taxation presents a similar challenge. Germany’s high corporate tax rates deter investment and entrepreneurship, which are key drivers of economic dynamism. As other European nations lower rates to attract businesses, Germany’s increases indicate a disconnect from global trends, jeopardizing its competitiveness. Energy taxes further illustrate this burden: 50-55% of gasoline prices consist of taxes (e.g., €0.65 energy tax, €0.08 CO₂ tax, plus 19% VAT), while gas stations earn only €0.10-0.15 per liter. This disparity highlights a system where the government extracts significant revenue without providing proportional value, resembling parasitic governance.
@@ -307,12 +287,10 @@ The middle class—Rand’s “Atlases”—is heavily taxed to sustain a welfar
But it is not only taxation that burdens “Atlas”—the middle class and productive industrialists. Inflation, driven by government expansion of the money supply, acts as a hidden form of taxation. Unlike obvious taxes on income or property, most people do not immediately recognize its effects. As new money enters the economy, it redistributes wealth toward those who receive it first (Cantillon effect)—typically governments, banks, and politically connected entities—at the expense of everyone else, especially fixed-income earners, savers, and pensioners. This process benefits the government and its allies, allowing the state to siphon off resources while diminishing citizens’ purchasing power without the transparency of direct taxation. This not only extracts wealth but does so in a way that is harder for the public to understand and resist than overt taxation. Inflation also hurts savers and pensioners the most, as their stored wealth loses purchasing power over time.
-
-
-
+
Throughout history, states have resorted to inflation—by debasing coinage or printing money—to cover expenses and benefit insiders. The Roman government frequently debased its currency by reducing the silver content of its coins and mixing them with cheaper metals like copper to fund its spending. Over time, this caused severe inflation, eroded trust in money, and ultimately forced the state to collect taxes in kind because its coins had become worthless. By the late third century, the currency had lost so much value that Rome could no longer pay its soldiers and officials in money; instead, taxes were collected in supplies or bullion, and the state resorted to forced labor.
diff --git a/src/content/journal/2025/modern-atlas-shrugged-3-strike.mdx b/src/content/journal/2025/modern-atlas-shrugged-3-strike.mdx
index 6e2d17e..a0635de 100644
--- a/src/content/journal/2025/modern-atlas-shrugged-3-strike.mdx
+++ b/src/content/journal/2025/modern-atlas-shrugged-3-strike.mdx
@@ -42,12 +42,10 @@ European citizens are trapped in a state of slavery due to inflation, taxes, and
The flight of Germany’s entrepreneurial talent is a vivid manifestation of “Atlas Shrugged.” [A panel discussion](https://www.youtube.com/watch?v=LH9FT0ldHQY) hosted by Mark Friedrich, featuring four prominent German entrepreneurs—Prof. Dr. Richard Werner, Dr. Markus Krall, Dr. Andreas Beck, and Friedrich himself—reveals a stark reality: three of the four have already relocated to Switzerland. Their reasons are telling: lower taxes, reduced regulatory burdens, and a stable environment that respects individual achievement. Switzerland, with its decentralized governance and economic freedom, has become a beacon for those escaping Germany’s stifling bureaucracy.
-
-
-
+
Or consider the podcast duo [Hoss and Hopf](https://hossundhopf.podigee.io/) as further evidence. Hoss has settled in Dubai, drawn by its business-friendly policies and minimal tax regime. He cites the emirate’s streamlined processes and lack of personal income tax as critical factors, allowing him to focus on growing his ventures rather than navigating red tape. Hopf, meanwhile, moved to Switzerland in 2024, seeking not just economic advantages but also safety and relief from what he perceives as oppressive ideological pressures, such as Germany’s growing emphasis on progressive social policies like LGBT ideology and unsafe streets for his children. These individual stories reflect a broader trend: Germany’s entrepreneurs are voting with their feet, abandoning a nation that once nurtured industrial giants for destinations that reward initiative.
@@ -113,12 +111,10 @@ This could mean starting to consume alternative media, listening to alternative
Henry David Thoreau, a foundational thinker on this subject, observed that those who, by default or routine, “yield to [government] their allegiance and support are undoubtedly its most conscientious supporters, and so frequently the most serious obstacles to reform.”
-
-
-
+
The German language has a remarkable word that is difficult to translate fully: “Mitläufer.” The literal translation is “someone who runs with [the crowd].” Since the Third Reich, this term has described individuals who do not actively participate in the regime but support it through passive acceptance of its rules and regulations. This group comprises roughly two-thirds of people who conform to the masses, even when they know it is wrong and harmful to others. Two famous experiments from the 1950s and 1960s demonstrated that 65% of people are willing to harm or even kill someone if an authority figure instructs them to do so ([Milgram experiment](https://grokipedia.com/page/Milgram_experiment)) and will go along with any lie when everyone else in the experiment does the same ([Asch conformity experiments](https://grokipedia.com/page/Asch_conformity_experiments). This represents the majority of people in any society. They are the ones who will always follow the state, regardless of how oppressive it becomes. Don’t be one of these people; instead, become the sand in the machine.
@@ -161,23 +157,19 @@ Another idea is to overwhelm the telephone hotlines and email inboxes of newly e
then, the remedy to power is simply to withdraw that consent.
-
-
-
+
The simplest form of disobedience is frequently saying “**No!**” However, civil disobedience encompasses various methods, and each individual must determine their willingness to act. Some actions may constitute administrative offenses or even crimes, so it’s crucial to consider the consequences of your disobedience. Simple ideas include opting out of government programs, such as the digital patient record, or disregarding rules that seem unreasonable, like waiting at a red traffic light when no one is around. Germans are among the most obedient people in the world, and crossing a red light will likely result in someone reprimanding you.
My favorite German podcast, [Aethervox Ehrenfeld](https://xsxm.de/), has the motto “Normie muss weinen” (Normie has to cry) as a philosophy. This means you do and enjoy anything that state-conforming, statist people dislike and find offensive. Eating meat is a sign of toxic masculinity? Have one for breakfast, lunch, and dinner! Drinking raw milk is far-right? Where is the nearest farm to get fresh milk? Celebrating Christmas and wishing “Merry Christmas” is insensitive to Muslims? Well, “Merry Christmas and a fucking New Year!” Driving a petrol car is bad for climate change? Buy a bigger car with more horsepower! The more those people get offended, the more fun you will have.
-
-
-
+
Ridicule is generally regarded as one of the most effective weapons against totalitarian thinking. Absurdity is intrinsic to tyranny, and “no acid is more corrosive to the absurdity of tyranny than laughter.”[^lindsay2021ss] Psychological studies and political philosophy agree: humor and ridicule can undermine fear, diminish the rulers’ aura of invincibility, and expose their hypocrisy. Totalitarian leaders and demagogues are notoriously humorless; ridicule destabilizes them, puts their pretensions into perspective, and encourages others to question their legitimacy.
@@ -189,12 +181,11 @@ Ridicule is generally regarded as one of the most effective weapons against tota
With the internet and social media, we live in the best time to follow this advice. While individuals like Joost A. M. Meerloo, an active member of the Dutch resistance during World War II, had to print and distribute pamphlets to mock their oppressors, we can achieve this with just a few clicks. The internet is a powerful tool for spreading ideas and memes that can challenge the authority of tyrants and demagogues. The power of ridicule is amplified by the speed and reach of social media, making it a potent weapon against authoritarianism.
-
-
-
+
You can learn about memes on [Know Your Meme](https://knowyourmeme.com/), learn about special words and phrases to mock the enemy on [Urban Dictionary](https://www.urbandictionary.com/), and create your own memes on one of the many platforms, for example, the [Imgflip Meme Generator](https://imgflip.com/memegenerator). You can even use AI to generate fake images of politicians doing funny or ridiculous things. The possibilities are endless. If you would like to learn how an expert works with memes and viral clips, take a look at the channel of [Snicklink on 𝕏](https://x.com/snicklink). He is a master of meme creation and the use of AI for ridicule and satire, and his work has made it multiple times into television around the globe, including Fox News.
@@ -202,12 +193,10 @@ You can learn about memes on [Know Your Meme](https://knowyourmeme.com/), learn
One of the most important tasks for those within the system is to educate others about the concepts of freedom, self-reliance, and individualism. The Western world, particularly Germany, faces significant deficits in these areas, making this task seem daunting. German-speaking countries were the breeding ground for two immensely destructive ideologies: National Socialism and Marxism. These ideas spread rapidly and led to the bloodiest civil war in human history. Socialists states have murdered between 140 and 200 million people in democides in the 20th century. Germany experienced two socialist dictatorships in one century: the Third Reich and the GDR.
-
-
-
+
Additionally, Germany exhibits an unusually high level of obedience. This trait began in the Holy Roman Empire, where fragmented small states with local rulers ingrained loyalty to authority in the German psyche. Prussian militarism and bureaucracy in the 18th and 19th centuries emphasized discipline, order, and obedience to authority. Nationalism in the 19th century fostered a sense of national identity tied to the state. The failure and instability of the Weimar Republic led many to crave strong, stable authority, paving the way for the acceptance of authoritarian rule. The Nazi regime exploited and amplified obedience and authority, using propaganda and terror to ensure conformity. After the war, Germany was rebuilt on democratic principles while valuing order, rules, and the state. It transitioned to a mixed economy that is predominantly socialist and becoming increasingly so.
@@ -235,12 +224,10 @@ One of the most important tasks for each individual is to learn about digital an
A century ago, in a stable gold-backed monetary system, you could buy a house with three to three and a half years’ income. Today, it takes 10 to 12 years’ income to purchase a home. Your grandparents and parents were able to buy houses not because they worked harder than you, but because their money retained more value. The state has robbed you of your wealth and your future. It has taken away your time and opportunities.
-
-
-
+
Four financial options are available for individuals to protect their wealth: gold, Bitcoin, securities (stocks, ETFs, bonds, etc.), and real estate. Depending on your risk tolerance, choose one or more of these options to safeguard your wealth. Each option has its advantages and disadvantages. The older generation of libertarians tends to favor gold, while the younger generation shows more interest in Bitcoin. Both options are valid, so select the one that best fits your needs. If you want to invest in stocks or ETFs, consider that it may not be advisable to do so in Europe. Additionally, the “emerging markets” have also significantly underperformed in the last years. Keep in mind that stocks and ETFs may be highly overvalued due to monetary expansion and the [Cantillon effect](https://youtu.be/hX9e1VSSP6Y?si=RJT-1f_9IwtJC4dx&t=1428).
@@ -264,12 +251,10 @@ It is always wise to stay informed about government plans that may infringe on y
Regardless of whether you stay or emigrate, the state dislikes self-reliance the most. It prefers individuals who depend on it for survival. The state favors people who do not think critically and possess minimal skills. Their ideal citizen is born, pays taxes, and dies. This is why they seek to regulate and forbid everything.
-
-
-
+
Nothing frightens the Leviathan more than self-reliant, resilient, and independent people. Klaus Schwab, the former chairman of the World Economic Forum, identified the enemy of his corporate-fascist agenda, the Libertarians, during a recent panel discussion.
@@ -296,12 +281,10 @@ Learning languages is extremely useful if you are thinking about emigrating. Eng
You can prepare for potential catastrophes, such as blackouts, riots, and other emergencies, whether you live in a city or the countryside. I’ve written an [essay](/how-to-prepare-for-the-worst-case/) about my preparation methods.
-
-
-
+
If you live in the countryside, you might want to consider becoming less dependent on the state. This could mean having a garden, chickens, and solar panels. You could also consider having a well. If you have a fireplace with firewood, you will not freeze when the power goes out in the winter.
@@ -367,12 +350,11 @@ But history teaches us a relentless lesson: when a society chooses coercion over
The collapse of an old, oppressive order is not merely an end—it is the fertile ground from which renewal can spring. Just as Rand’s heroes retreated to Galt’s Gulch to build anew, today’s pioneers are forging parallel worlds: from digital frontiers, to private cities, to [network states](https://thenetworkstate.com/), from open markets to unstoppable code. The same principles endure—self-ownership, property, freedom, responsibility, and the dignity of voluntary cooperation. In our time, the question echoes in a new form. “Who is John Galt?” once captured the longing for a world shaped by reason and liberty.
-
-
-
+
Today, we ask, “**Who is Satoshi Nakamoto?**” The answer is not just a name, but an invitation—a challenge to join the ranks of the builders, the creators, the defenders of human sovereignty. The future belongs to those who choose to think, to act, and to build. Will you be among them?
diff --git a/src/content/journal/2025/note-taking-obsidian-readwise-ai.mdx b/src/content/journal/2025/note-taking-obsidian-readwise-ai.mdx
index b2ec057..eec171e 100644
--- a/src/content/journal/2025/note-taking-obsidian-readwise-ai.mdx
+++ b/src/content/journal/2025/note-taking-obsidian-readwise-ai.mdx
@@ -20,9 +20,12 @@ Obsidian allows you to configure the window layout to your liking; you can drag
I use stacked tabs (known as sliding panes). This allows me to have multiple notes open side by side and move them left and right with my mouse.
-
-
-
+
My left pane has files, search, and bookmarks in the upper section, with bookmarks open 90% of the time. Below this section, I use a calendar. This is new; I started with loose journaling in January 2025. I briefly note down important things—who I talked to, what we discussed, or what important things I learned or did that day. At the end of the left column, I have the Git community plugin pane to see and work with changed files.
@@ -76,9 +79,12 @@ The Graph view is one of the coolest features to show to other people when intro
Additionally, you can search for specific words and see how notes are connected. There is a cool feature that shows the history of your notes, how they were created and changed over time.
-
-
-
+
I’m proud that my notes are well-connected. And yes, my Graph View looks like the Death Star, that’s a coincidence. When others share their graph view, it is often a mess of notes that are not connected or massive separated clusters connected with only a few connections. Connecting notes is one of my main tasks to create a useful Zettelkasten. When I’m finished with my notes, I always link important words in my notes and additionally search for notes that might relate to my note.
@@ -366,17 +372,17 @@ I export my highlights from Readwise to Obsidian once a week, but I keep them in
Readwise recently added the feature to [talk to your highlights and notes with AI](https://docs.readwise.io/readwise/guides/chat-with-highlights), allowing you to ask questions, get context for a highlight, and much more. This has made it an additional tool for me to create notes in Obsidian while talking to my highlights. The AI will provide structured answers to your questions and links to the highlights in your vault. I have dipped my toes into this feature, but I see giant potential in it. This feature has changed how I highlight from now on, because I know that anything I highlight will be part of the permanent AI brain in Readwise and can be accessed later by talking to the AI.
-
-
-
+
In the future, I’ll likely use this feature every day to get answers for my notes. The good thing is that, in contrast to regular AI, which uses a web search to find the first few articles for a question and uses those as context, in Readwise I know that all the highlights I marked before as important and worth remembering make the answer much more valuable. But with all content, you get out what you feed it. If you read and highlight shallow articles or view things only from one side, your AI answers will be shallow and biased.
With the introduction of the [Model Context Protocol](https://modelcontextprotocol.io/) (MCP), an open standard that facilitates seamless integration between large language models (LLMs) and external data sources and tools, it is now possible to use external tools to interact with my highlights. Last month, Readwise released an [MCP](https://www.npmjs.com/package/@readwise/readwise-mcp), which I used to connect [Raycast](/raycast/) AI with their new [MCP feature](https://manual.raycast.com/model-context-protocol), allowing direct interaction with my highlights.
-
-
-
+
### Using AI for Research
@@ -384,15 +390,20 @@ There are many people who think AI is bad for writing because it might replace t
I use all kinds of AI to summarize articles for me and to extract the gist of an idea. There is, for example, the built-in AI in my browser [Brave](https://brave.com/), Leo AI, which uses either Claude 3 Haiku by Anthropic, Llama 3.1 8B, or Mixtral. You can also add local AI with [Ollama](https://ollama.com/) and provide your prompts. Another useful browser extension is [Perplexity](https://www.perplexity.ai/).
-
-
-
+
But my main tool are the AI models in [Raycast Pro](https://raycast.com/pro?via=kogakure). I have subscribed to the biggest plan and use it every day. The advantage of Raycast is that you can use all the AI models for one fixed price of either €8 or €16 (for the bigger models) instead of subscribing to a dozen models. However, each model has its advantages and disadvantages, one model will likely not fulfill all your needs. Presently, Raycast supports the following providers with all their models: OpenAI, Anthropic, Perplexity, Meta, Mistral, DeepSeek, Google, and xAI. There are many models to choose from: fast models, big models, models with knowledge about current events, models specialized in code, models that answer unbiasedly, or models that can reason. I wrote a whole article about [Raycast](/raycast/).
-
-
-
+
Raycast provides a [browser extension](https://www.raycast.com/browser-extension) that allows access to any website and to ask questions about the content or code. AI models allow others to add files, PDFs, URLs, or images. Some can generate images.
@@ -419,9 +430,11 @@ This is a scene from school where the protagonist listens to his school teacher.
I highlight the quote and use my most important Raycast AI command, `TL;DR`, to summarize it.
-
-
-
+
My AI Command uses this prompt:
diff --git a/public/assets/images/posts/15-years-xing-2012.webp b/src/images/posts/15-years-xing-2012.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2012.webp
rename to src/images/posts/15-years-xing-2012.webp
diff --git a/public/assets/images/posts/15-years-xing-2013-office.webp b/src/images/posts/15-years-xing-2013-office.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2013-office.webp
rename to src/images/posts/15-years-xing-2013-office.webp
diff --git a/public/assets/images/posts/15-years-xing-2013-party.webp b/src/images/posts/15-years-xing-2013-party.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2013-party.webp
rename to src/images/posts/15-years-xing-2013-party.webp
diff --git a/public/assets/images/posts/15-years-xing-2015-offsite.webp b/src/images/posts/15-years-xing-2015-offsite.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2015-offsite.webp
rename to src/images/posts/15-years-xing-2015-offsite.webp
diff --git a/public/assets/images/posts/15-years-xing-2017-cave.webp b/src/images/posts/15-years-xing-2017-cave.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2017-cave.webp
rename to src/images/posts/15-years-xing-2017-cave.webp
diff --git a/public/assets/images/posts/15-years-xing-2017-finca-1.webp b/src/images/posts/15-years-xing-2017-finca-1.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2017-finca-1.webp
rename to src/images/posts/15-years-xing-2017-finca-1.webp
diff --git a/public/assets/images/posts/15-years-xing-2017-finca-2.webp b/src/images/posts/15-years-xing-2017-finca-2.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2017-finca-2.webp
rename to src/images/posts/15-years-xing-2017-finca-2.webp
diff --git a/public/assets/images/posts/15-years-xing-2017-fire.webp b/src/images/posts/15-years-xing-2017-fire.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2017-fire.webp
rename to src/images/posts/15-years-xing-2017-fire.webp
diff --git a/public/assets/images/posts/15-years-xing-2017-paella.webp b/src/images/posts/15-years-xing-2017-paella.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2017-paella.webp
rename to src/images/posts/15-years-xing-2017-paella.webp
diff --git a/public/assets/images/posts/15-years-xing-2019-offsite-1.webp b/src/images/posts/15-years-xing-2019-offsite-1.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2019-offsite-1.webp
rename to src/images/posts/15-years-xing-2019-offsite-1.webp
diff --git a/public/assets/images/posts/15-years-xing-2019-offsite-2.webp b/src/images/posts/15-years-xing-2019-offsite-2.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2019-offsite-2.webp
rename to src/images/posts/15-years-xing-2019-offsite-2.webp
diff --git a/public/assets/images/posts/15-years-xing-2020-unilever.webp b/src/images/posts/15-years-xing-2020-unilever.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-2020-unilever.webp
rename to src/images/posts/15-years-xing-2020-unilever.webp
diff --git a/public/assets/images/posts/15-years-xing-cantina.webp b/src/images/posts/15-years-xing-cantina.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-cantina.webp
rename to src/images/posts/15-years-xing-cantina.webp
diff --git a/public/assets/images/posts/15-years-xing-computer.webp b/src/images/posts/15-years-xing-computer.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-computer.webp
rename to src/images/posts/15-years-xing-computer.webp
diff --git a/public/assets/images/posts/15-years-xing-for-a-better-working-life.webp b/src/images/posts/15-years-xing-for-a-better-working-life.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-for-a-better-working-life.webp
rename to src/images/posts/15-years-xing-for-a-better-working-life.webp
diff --git a/public/assets/images/posts/15-years-xing-freudich.webp b/src/images/posts/15-years-xing-freudich.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-freudich.webp
rename to src/images/posts/15-years-xing-freudich.webp
diff --git a/public/assets/images/posts/15-years-xing-frontend-is.webp b/src/images/posts/15-years-xing-frontend-is.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-frontend-is.webp
rename to src/images/posts/15-years-xing-frontend-is.webp
diff --git a/public/assets/images/posts/15-years-xing-kietzkneipe.webp b/src/images/posts/15-years-xing-kietzkneipe.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-kietzkneipe.webp
rename to src/images/posts/15-years-xing-kietzkneipe.webp
diff --git a/public/assets/images/posts/15-years-xing-library.webp b/src/images/posts/15-years-xing-library.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-library.webp
rename to src/images/posts/15-years-xing-library.webp
diff --git a/public/assets/images/posts/15-years-xing-music.webp b/src/images/posts/15-years-xing-music.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-music.webp
rename to src/images/posts/15-years-xing-music.webp
diff --git a/public/assets/images/posts/15-years-xing-records.webp b/src/images/posts/15-years-xing-records.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-records.webp
rename to src/images/posts/15-years-xing-records.webp
diff --git a/public/assets/images/posts/15-years-xing-welcome.webp b/src/images/posts/15-years-xing-welcome.webp
similarity index 100%
rename from public/assets/images/posts/15-years-xing-welcome.webp
rename to src/images/posts/15-years-xing-welcome.webp
diff --git a/public/assets/images/posts/about-design.webp b/src/images/posts/about-design.webp
similarity index 100%
rename from public/assets/images/posts/about-design.webp
rename to src/images/posts/about-design.webp
diff --git a/public/assets/images/posts/ai-cyberpunk-wizard.webp b/src/images/posts/ai-cyberpunk-wizard.webp
similarity index 100%
rename from public/assets/images/posts/ai-cyberpunk-wizard.webp
rename to src/images/posts/ai-cyberpunk-wizard.webp
diff --git a/public/assets/images/posts/ai-diffusion-models.webp b/src/images/posts/ai-diffusion-models.webp
similarity index 100%
rename from public/assets/images/posts/ai-diffusion-models.webp
rename to src/images/posts/ai-diffusion-models.webp
diff --git a/public/assets/images/posts/ai-draw-things.webp b/src/images/posts/ai-draw-things.webp
similarity index 100%
rename from public/assets/images/posts/ai-draw-things.webp
rename to src/images/posts/ai-draw-things.webp
diff --git a/public/assets/images/posts/ai-inpainting.webp b/src/images/posts/ai-inpainting.webp
similarity index 100%
rename from public/assets/images/posts/ai-inpainting.webp
rename to src/images/posts/ai-inpainting.webp
diff --git a/public/assets/images/posts/base-design.webp b/src/images/posts/base-design.webp
similarity index 100%
rename from public/assets/images/posts/base-design.webp
rename to src/images/posts/base-design.webp
diff --git a/public/assets/images/posts/brave-leo-ai.webp b/src/images/posts/brave-leo-ai.webp
similarity index 100%
rename from public/assets/images/posts/brave-leo-ai.webp
rename to src/images/posts/brave-leo-ai.webp
diff --git a/public/assets/images/posts/bug-out-bag.webp b/src/images/posts/bug-out-bag.webp
similarity index 100%
rename from public/assets/images/posts/bug-out-bag.webp
rename to src/images/posts/bug-out-bag.webp
diff --git a/public/assets/images/posts/calisthenics-arm-elbow-lever.webp b/src/images/posts/calisthenics-arm-elbow-lever.webp
similarity index 100%
rename from public/assets/images/posts/calisthenics-arm-elbow-lever.webp
rename to src/images/posts/calisthenics-arm-elbow-lever.webp
diff --git a/public/assets/images/posts/calisthenics-best-dad-ever.webp b/src/images/posts/calisthenics-best-dad-ever.webp
similarity index 100%
rename from public/assets/images/posts/calisthenics-best-dad-ever.webp
rename to src/images/posts/calisthenics-best-dad-ever.webp
diff --git a/public/assets/images/posts/color-variants-design.webp b/src/images/posts/color-variants-design.webp
similarity index 100%
rename from public/assets/images/posts/color-variants-design.webp
rename to src/images/posts/color-variants-design.webp
diff --git a/public/assets/images/posts/colors-of-japan.webp b/src/images/posts/colors-of-japan.webp
similarity index 100%
rename from public/assets/images/posts/colors-of-japan.webp
rename to src/images/posts/colors-of-japan.webp
diff --git a/public/assets/images/posts/copybook-headings.webp b/src/images/posts/copybook-headings.webp
similarity index 100%
rename from public/assets/images/posts/copybook-headings.webp
rename to src/images/posts/copybook-headings.webp
diff --git a/public/assets/images/posts/design-koi.webp b/src/images/posts/design-koi.webp
similarity index 100%
rename from public/assets/images/posts/design-koi.webp
rename to src/images/posts/design-koi.webp
diff --git a/public/assets/images/posts/devonthink-sorter.webp b/src/images/posts/devonthink-sorter.webp
similarity index 100%
rename from public/assets/images/posts/devonthink-sorter.webp
rename to src/images/posts/devonthink-sorter.webp
diff --git a/public/assets/images/posts/devonthink-zettelkasten.webp b/src/images/posts/devonthink-zettelkasten.webp
similarity index 100%
rename from public/assets/images/posts/devonthink-zettelkasten.webp
rename to src/images/posts/devonthink-zettelkasten.webp
diff --git a/public/assets/images/posts/gitbook-kogakure.webp b/src/images/posts/gitbook-kogakure.webp
similarity index 100%
rename from public/assets/images/posts/gitbook-kogakure.webp
rename to src/images/posts/gitbook-kogakure.webp
diff --git a/public/assets/images/posts/gitweb-theme-commit.webp b/src/images/posts/gitweb-theme-commit.webp
similarity index 100%
rename from public/assets/images/posts/gitweb-theme-commit.webp
rename to src/images/posts/gitweb-theme-commit.webp
diff --git a/public/assets/images/posts/gitweb-theme-commitdiff.webp b/src/images/posts/gitweb-theme-commitdiff.webp
similarity index 100%
rename from public/assets/images/posts/gitweb-theme-commitdiff.webp
rename to src/images/posts/gitweb-theme-commitdiff.webp
diff --git a/public/assets/images/posts/gitweb-theme-log.webp b/src/images/posts/gitweb-theme-log.webp
similarity index 100%
rename from public/assets/images/posts/gitweb-theme-log.webp
rename to src/images/posts/gitweb-theme-log.webp
diff --git a/public/assets/images/posts/gitweb-theme-projects.webp b/src/images/posts/gitweb-theme-projects.webp
similarity index 100%
rename from public/assets/images/posts/gitweb-theme-projects.webp
rename to src/images/posts/gitweb-theme-projects.webp
diff --git a/public/assets/images/posts/gitweb-theme-summary.webp b/src/images/posts/gitweb-theme-summary.webp
similarity index 100%
rename from public/assets/images/posts/gitweb-theme-summary.webp
rename to src/images/posts/gitweb-theme-summary.webp
diff --git a/public/assets/images/posts/gitweb-theme-tree.webp b/src/images/posts/gitweb-theme-tree.webp
similarity index 100%
rename from public/assets/images/posts/gitweb-theme-tree.webp
rename to src/images/posts/gitweb-theme-tree.webp
diff --git a/public/assets/images/posts/golden-canon-grid.webp b/src/images/posts/golden-canon-grid.webp
similarity index 100%
rename from public/assets/images/posts/golden-canon-grid.webp
rename to src/images/posts/golden-canon-grid.webp
diff --git a/public/assets/images/posts/gtd-after.webp b/src/images/posts/gtd-after.webp
similarity index 100%
rename from public/assets/images/posts/gtd-after.webp
rename to src/images/posts/gtd-after.webp
diff --git a/public/assets/images/posts/gtd-before.webp b/src/images/posts/gtd-before.webp
similarity index 100%
rename from public/assets/images/posts/gtd-before.webp
rename to src/images/posts/gtd-before.webp
diff --git a/public/assets/images/posts/haiku-design.webp b/src/images/posts/haiku-design.webp
similarity index 100%
rename from public/assets/images/posts/haiku-design.webp
rename to src/images/posts/haiku-design.webp
diff --git a/public/assets/images/posts/haiku.webp b/src/images/posts/haiku.webp
similarity index 100%
rename from public/assets/images/posts/haiku.webp
rename to src/images/posts/haiku.webp
diff --git a/public/assets/images/posts/homepage-dark.webp b/src/images/posts/homepage-dark.webp
similarity index 100%
rename from public/assets/images/posts/homepage-dark.webp
rename to src/images/posts/homepage-dark.webp
diff --git a/public/assets/images/posts/homepage-design.webp b/src/images/posts/homepage-design.webp
similarity index 100%
rename from public/assets/images/posts/homepage-design.webp
rename to src/images/posts/homepage-design.webp
diff --git a/public/assets/images/posts/homepage-light.webp b/src/images/posts/homepage-light.webp
similarity index 100%
rename from public/assets/images/posts/homepage-light.webp
rename to src/images/posts/homepage-light.webp
diff --git a/public/assets/images/posts/logo-skribbles.webp b/src/images/posts/logo-skribbles.webp
similarity index 100%
rename from public/assets/images/posts/logo-skribbles.webp
rename to src/images/posts/logo-skribbles.webp
diff --git a/public/assets/images/posts/meta-section-design.webp b/src/images/posts/meta-section-design.webp
similarity index 100%
rename from public/assets/images/posts/meta-section-design.webp
rename to src/images/posts/meta-section-design.webp
diff --git a/public/assets/images/posts/minimalism-cleanup-cellar.webp b/src/images/posts/minimalism-cleanup-cellar.webp
similarity index 100%
rename from public/assets/images/posts/minimalism-cleanup-cellar.webp
rename to src/images/posts/minimalism-cleanup-cellar.webp
diff --git a/public/assets/images/posts/minimalism-living.webp b/src/images/posts/minimalism-living.webp
similarity index 100%
rename from public/assets/images/posts/minimalism-living.webp
rename to src/images/posts/minimalism-living.webp
diff --git a/public/assets/images/posts/minimalism-office.webp b/src/images/posts/minimalism-office.webp
similarity index 100%
rename from public/assets/images/posts/minimalism-office.webp
rename to src/images/posts/minimalism-office.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-bitcoin.webp b/src/images/posts/modern-atlas-shrugged-bitcoin.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-bitcoin.webp
rename to src/images/posts/modern-atlas-shrugged-bitcoin.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-bridge.webp b/src/images/posts/modern-atlas-shrugged-bridge.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-bridge.webp
rename to src/images/posts/modern-atlas-shrugged-bridge.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-dark-figure.webp b/src/images/posts/modern-atlas-shrugged-dark-figure.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-dark-figure.webp
rename to src/images/posts/modern-atlas-shrugged-dark-figure.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-decline.webp b/src/images/posts/modern-atlas-shrugged-decline.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-decline.webp
rename to src/images/posts/modern-atlas-shrugged-decline.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-disobedience.webp b/src/images/posts/modern-atlas-shrugged-disobedience.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-disobedience.webp
rename to src/images/posts/modern-atlas-shrugged-disobedience.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-division.webp b/src/images/posts/modern-atlas-shrugged-division.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-division.webp
rename to src/images/posts/modern-atlas-shrugged-division.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-education.webp b/src/images/posts/modern-atlas-shrugged-education.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-education.webp
rename to src/images/posts/modern-atlas-shrugged-education.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-emigration.webp b/src/images/posts/modern-atlas-shrugged-emigration.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-emigration.webp
rename to src/images/posts/modern-atlas-shrugged-emigration.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-energy.webp b/src/images/posts/modern-atlas-shrugged-energy.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-energy.webp
rename to src/images/posts/modern-atlas-shrugged-energy.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-farm.webp b/src/images/posts/modern-atlas-shrugged-farm.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-farm.webp
rename to src/images/posts/modern-atlas-shrugged-farm.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-farmers.webp b/src/images/posts/modern-atlas-shrugged-farmers.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-farmers.webp
rename to src/images/posts/modern-atlas-shrugged-farmers.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-grey-mass.webp b/src/images/posts/modern-atlas-shrugged-grey-mass.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-grey-mass.webp
rename to src/images/posts/modern-atlas-shrugged-grey-mass.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-health.webp b/src/images/posts/modern-atlas-shrugged-health.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-health.webp
rename to src/images/posts/modern-atlas-shrugged-health.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-inflation.webp b/src/images/posts/modern-atlas-shrugged-inflation.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-inflation.webp
rename to src/images/posts/modern-atlas-shrugged-inflation.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-john-galt.webp b/src/images/posts/modern-atlas-shrugged-john-galt.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-john-galt.webp
rename to src/images/posts/modern-atlas-shrugged-john-galt.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-knife-crime.webp b/src/images/posts/modern-atlas-shrugged-knife-crime.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-knife-crime.webp
rename to src/images/posts/modern-atlas-shrugged-knife-crime.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-lawfare.webp b/src/images/posts/modern-atlas-shrugged-lawfare.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-lawfare.webp
rename to src/images/posts/modern-atlas-shrugged-lawfare.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-mockery.webp b/src/images/posts/modern-atlas-shrugged-mockery.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-mockery.webp
rename to src/images/posts/modern-atlas-shrugged-mockery.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-politics.webp b/src/images/posts/modern-atlas-shrugged-politics.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-politics.webp
rename to src/images/posts/modern-atlas-shrugged-politics.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-post.webp b/src/images/posts/modern-atlas-shrugged-post.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-post.webp
rename to src/images/posts/modern-atlas-shrugged-post.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-propaganda.webp b/src/images/posts/modern-atlas-shrugged-propaganda.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-propaganda.webp
rename to src/images/posts/modern-atlas-shrugged-propaganda.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-regulations.webp b/src/images/posts/modern-atlas-shrugged-regulations.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-regulations.webp
rename to src/images/posts/modern-atlas-shrugged-regulations.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-resilience.webp b/src/images/posts/modern-atlas-shrugged-resilience.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-resilience.webp
rename to src/images/posts/modern-atlas-shrugged-resilience.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-rich-vs-poor.webp b/src/images/posts/modern-atlas-shrugged-rich-vs-poor.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-rich-vs-poor.webp
rename to src/images/posts/modern-atlas-shrugged-rich-vs-poor.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-satoshi-nakamoto.webp b/src/images/posts/modern-atlas-shrugged-satoshi-nakamoto.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-satoshi-nakamoto.webp
rename to src/images/posts/modern-atlas-shrugged-satoshi-nakamoto.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-snicklink-psyop.webp b/src/images/posts/modern-atlas-shrugged-snicklink-psyop.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-snicklink-psyop.webp
rename to src/images/posts/modern-atlas-shrugged-snicklink-psyop.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-surveillance.webp b/src/images/posts/modern-atlas-shrugged-surveillance.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-surveillance.webp
rename to src/images/posts/modern-atlas-shrugged-surveillance.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-taxation.webp b/src/images/posts/modern-atlas-shrugged-taxation.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-taxation.webp
rename to src/images/posts/modern-atlas-shrugged-taxation.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-teaching.webp b/src/images/posts/modern-atlas-shrugged-teaching.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-teaching.webp
rename to src/images/posts/modern-atlas-shrugged-teaching.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-trains.webp b/src/images/posts/modern-atlas-shrugged-trains.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-trains.webp
rename to src/images/posts/modern-atlas-shrugged-trains.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-wealth.webp b/src/images/posts/modern-atlas-shrugged-wealth.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-wealth.webp
rename to src/images/posts/modern-atlas-shrugged-wealth.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-welfare.webp b/src/images/posts/modern-atlas-shrugged-welfare.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-welfare.webp
rename to src/images/posts/modern-atlas-shrugged-welfare.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-who-is-john-galt.webp b/src/images/posts/modern-atlas-shrugged-who-is-john-galt.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-who-is-john-galt.webp
rename to src/images/posts/modern-atlas-shrugged-who-is-john-galt.webp
diff --git a/public/assets/images/posts/modern-atlas-shrugged-who-radicalized-you.webp b/src/images/posts/modern-atlas-shrugged-who-radicalized-you.webp
similarity index 100%
rename from public/assets/images/posts/modern-atlas-shrugged-who-radicalized-you.webp
rename to src/images/posts/modern-atlas-shrugged-who-radicalized-you.webp
diff --git a/public/assets/images/posts/moleskine-pencil-drawings.webp b/src/images/posts/moleskine-pencil-drawings.webp
similarity index 100%
rename from public/assets/images/posts/moleskine-pencil-drawings.webp
rename to src/images/posts/moleskine-pencil-drawings.webp
diff --git a/public/assets/images/posts/new-website-2021.webp b/src/images/posts/new-website-2021.webp
similarity index 100%
rename from public/assets/images/posts/new-website-2021.webp
rename to src/images/posts/new-website-2021.webp
diff --git a/public/assets/images/posts/obsidian-graph-view-2025.webp b/src/images/posts/obsidian-graph-view-2025.webp
similarity index 100%
rename from public/assets/images/posts/obsidian-graph-view-2025.webp
rename to src/images/posts/obsidian-graph-view-2025.webp
diff --git a/public/assets/images/posts/obsidian-graph-view.webp b/src/images/posts/obsidian-graph-view.webp
similarity index 100%
rename from public/assets/images/posts/obsidian-graph-view.webp
rename to src/images/posts/obsidian-graph-view.webp
diff --git a/public/assets/images/posts/obsidian-layout.webp b/src/images/posts/obsidian-layout.webp
similarity index 100%
rename from public/assets/images/posts/obsidian-layout.webp
rename to src/images/posts/obsidian-layout.webp
diff --git a/public/assets/images/posts/rakkan-logo.webp b/src/images/posts/rakkan-logo.webp
similarity index 100%
rename from public/assets/images/posts/rakkan-logo.webp
rename to src/images/posts/rakkan-logo.webp
diff --git a/public/assets/images/posts/rakkan.webp b/src/images/posts/rakkan.webp
similarity index 100%
rename from public/assets/images/posts/rakkan.webp
rename to src/images/posts/rakkan.webp
diff --git a/public/assets/images/posts/raycast-ai-commands.webp b/src/images/posts/raycast-ai-commands.webp
similarity index 100%
rename from public/assets/images/posts/raycast-ai-commands.webp
rename to src/images/posts/raycast-ai-commands.webp
diff --git a/public/assets/images/posts/raycast-ai-summarize.webp b/src/images/posts/raycast-ai-summarize.webp
similarity index 100%
rename from public/assets/images/posts/raycast-ai-summarize.webp
rename to src/images/posts/raycast-ai-summarize.webp
diff --git a/public/assets/images/posts/raycast-ai-tldr.webp b/src/images/posts/raycast-ai-tldr.webp
similarity index 100%
rename from public/assets/images/posts/raycast-ai-tldr.webp
rename to src/images/posts/raycast-ai-tldr.webp
diff --git a/public/assets/images/posts/raycast-ai.webp b/src/images/posts/raycast-ai.webp
similarity index 100%
rename from public/assets/images/posts/raycast-ai.webp
rename to src/images/posts/raycast-ai.webp
diff --git a/public/assets/images/posts/raycast-calculator.webp b/src/images/posts/raycast-calculator.webp
similarity index 100%
rename from public/assets/images/posts/raycast-calculator.webp
rename to src/images/posts/raycast-calculator.webp
diff --git a/public/assets/images/posts/raycast-calendar.webp b/src/images/posts/raycast-calendar.webp
similarity index 100%
rename from public/assets/images/posts/raycast-calendar.webp
rename to src/images/posts/raycast-calendar.webp
diff --git a/public/assets/images/posts/raycast-change-case.webp b/src/images/posts/raycast-change-case.webp
similarity index 100%
rename from public/assets/images/posts/raycast-change-case.webp
rename to src/images/posts/raycast-change-case.webp
diff --git a/public/assets/images/posts/raycast-clipboard-history.webp b/src/images/posts/raycast-clipboard-history.webp
similarity index 100%
rename from public/assets/images/posts/raycast-clipboard-history.webp
rename to src/images/posts/raycast-clipboard-history.webp
diff --git a/public/assets/images/posts/raycast-emoji-symbols-ai.webp b/src/images/posts/raycast-emoji-symbols-ai.webp
similarity index 100%
rename from public/assets/images/posts/raycast-emoji-symbols-ai.webp
rename to src/images/posts/raycast-emoji-symbols-ai.webp
diff --git a/public/assets/images/posts/raycast-emoji-symbols.webp b/src/images/posts/raycast-emoji-symbols.webp
similarity index 100%
rename from public/assets/images/posts/raycast-emoji-symbols.webp
rename to src/images/posts/raycast-emoji-symbols.webp
diff --git a/public/assets/images/posts/raycast-extension-arc.webp b/src/images/posts/raycast-extension-arc.webp
similarity index 100%
rename from public/assets/images/posts/raycast-extension-arc.webp
rename to src/images/posts/raycast-extension-arc.webp
diff --git a/public/assets/images/posts/raycast-extension-brave-search.webp b/src/images/posts/raycast-extension-brave-search.webp
similarity index 100%
rename from public/assets/images/posts/raycast-extension-brave-search.webp
rename to src/images/posts/raycast-extension-brave-search.webp
diff --git a/public/assets/images/posts/raycast-extension-raindrop.webp b/src/images/posts/raycast-extension-raindrop.webp
similarity index 100%
rename from public/assets/images/posts/raycast-extension-raindrop.webp
rename to src/images/posts/raycast-extension-raindrop.webp
diff --git a/public/assets/images/posts/raycast-extension-search-brave-tabs.webp b/src/images/posts/raycast-extension-search-brave-tabs.webp
similarity index 100%
rename from public/assets/images/posts/raycast-extension-search-brave-tabs.webp
rename to src/images/posts/raycast-extension-search-brave-tabs.webp
diff --git a/public/assets/images/posts/raycast-floating-notes.webp b/src/images/posts/raycast-floating-notes.webp
similarity index 100%
rename from public/assets/images/posts/raycast-floating-notes.webp
rename to src/images/posts/raycast-floating-notes.webp
diff --git a/public/assets/images/posts/raycast-giphy.webp b/src/images/posts/raycast-giphy.webp
similarity index 100%
rename from public/assets/images/posts/raycast-giphy.webp
rename to src/images/posts/raycast-giphy.webp
diff --git a/public/assets/images/posts/raycast-github.webp b/src/images/posts/raycast-github.webp
similarity index 100%
rename from public/assets/images/posts/raycast-github.webp
rename to src/images/posts/raycast-github.webp
diff --git a/public/assets/images/posts/raycast-glyph-search.webp b/src/images/posts/raycast-glyph-search.webp
similarity index 100%
rename from public/assets/images/posts/raycast-glyph-search.webp
rename to src/images/posts/raycast-glyph-search.webp
diff --git a/public/assets/images/posts/raycast-google-fonts.webp b/src/images/posts/raycast-google-fonts.webp
similarity index 100%
rename from public/assets/images/posts/raycast-google-fonts.webp
rename to src/images/posts/raycast-google-fonts.webp
diff --git a/public/assets/images/posts/raycast-homebrew.webp b/src/images/posts/raycast-homebrew.webp
similarity index 100%
rename from public/assets/images/posts/raycast-homebrew.webp
rename to src/images/posts/raycast-homebrew.webp
diff --git a/public/assets/images/posts/raycast-launcher.webp b/src/images/posts/raycast-launcher.webp
similarity index 100%
rename from public/assets/images/posts/raycast-launcher.webp
rename to src/images/posts/raycast-launcher.webp
diff --git a/public/assets/images/posts/raycast-notes.webp b/src/images/posts/raycast-notes.webp
similarity index 100%
rename from public/assets/images/posts/raycast-notes.webp
rename to src/images/posts/raycast-notes.webp
diff --git a/public/assets/images/posts/raycast-quicklinks.webp b/src/images/posts/raycast-quicklinks.webp
similarity index 100%
rename from public/assets/images/posts/raycast-quicklinks.webp
rename to src/images/posts/raycast-quicklinks.webp
diff --git a/public/assets/images/posts/raycast-readwise.webp b/src/images/posts/raycast-readwise.webp
similarity index 100%
rename from public/assets/images/posts/raycast-readwise.webp
rename to src/images/posts/raycast-readwise.webp
diff --git a/public/assets/images/posts/raycast-screenshots.webp b/src/images/posts/raycast-screenshots.webp
similarity index 100%
rename from public/assets/images/posts/raycast-screenshots.webp
rename to src/images/posts/raycast-screenshots.webp
diff --git a/public/assets/images/posts/raycast-search-files.webp b/src/images/posts/raycast-search-files.webp
similarity index 100%
rename from public/assets/images/posts/raycast-search-files.webp
rename to src/images/posts/raycast-search-files.webp
diff --git a/public/assets/images/posts/raycast-snippets.webp b/src/images/posts/raycast-snippets.webp
similarity index 100%
rename from public/assets/images/posts/raycast-snippets.webp
rename to src/images/posts/raycast-snippets.webp
diff --git a/public/assets/images/posts/raycast-spotify.webp b/src/images/posts/raycast-spotify.webp
similarity index 100%
rename from public/assets/images/posts/raycast-spotify.webp
rename to src/images/posts/raycast-spotify.webp
diff --git a/public/assets/images/posts/raycast-store.webp b/src/images/posts/raycast-store.webp
similarity index 100%
rename from public/assets/images/posts/raycast-store.webp
rename to src/images/posts/raycast-store.webp
diff --git a/public/assets/images/posts/raycast-tailwindcss.webp b/src/images/posts/raycast-tailwindcss.webp
similarity index 100%
rename from public/assets/images/posts/raycast-tailwindcss.webp
rename to src/images/posts/raycast-tailwindcss.webp
diff --git a/public/assets/images/posts/raycast-things.webp b/src/images/posts/raycast-things.webp
similarity index 100%
rename from public/assets/images/posts/raycast-things.webp
rename to src/images/posts/raycast-things.webp
diff --git a/public/assets/images/posts/raycast-tmdb.webp b/src/images/posts/raycast-tmdb.webp
similarity index 100%
rename from public/assets/images/posts/raycast-tmdb.webp
rename to src/images/posts/raycast-tmdb.webp
diff --git a/public/assets/images/posts/raycast-translator.webp b/src/images/posts/raycast-translator.webp
similarity index 100%
rename from public/assets/images/posts/raycast-translator.webp
rename to src/images/posts/raycast-translator.webp
diff --git a/public/assets/images/posts/raycast-unsplash.webp b/src/images/posts/raycast-unsplash.webp
similarity index 100%
rename from public/assets/images/posts/raycast-unsplash.webp
rename to src/images/posts/raycast-unsplash.webp
diff --git a/public/assets/images/posts/raycast-wrapped-2023.webp b/src/images/posts/raycast-wrapped-2023.webp
similarity index 100%
rename from public/assets/images/posts/raycast-wrapped-2023.webp
rename to src/images/posts/raycast-wrapped-2023.webp
diff --git a/public/assets/images/posts/raycast-wrapped-2024.webp b/src/images/posts/raycast-wrapped-2024.webp
similarity index 100%
rename from public/assets/images/posts/raycast-wrapped-2024.webp
rename to src/images/posts/raycast-wrapped-2024.webp
diff --git a/public/assets/images/posts/raycast-youtube.webp b/src/images/posts/raycast-youtube.webp
similarity index 100%
rename from public/assets/images/posts/raycast-youtube.webp
rename to src/images/posts/raycast-youtube.webp
diff --git a/public/assets/images/posts/readwise-chat.webp b/src/images/posts/readwise-chat.webp
similarity index 100%
rename from public/assets/images/posts/readwise-chat.webp
rename to src/images/posts/readwise-chat.webp
diff --git a/public/assets/images/posts/readwise-raycast-mcp.webp b/src/images/posts/readwise-raycast-mcp.webp
similarity index 100%
rename from public/assets/images/posts/readwise-raycast-mcp.webp
rename to src/images/posts/readwise-raycast-mcp.webp
diff --git a/public/assets/images/posts/suikoden-luta.webp b/src/images/posts/suikoden-luta.webp
similarity index 100%
rename from public/assets/images/posts/suikoden-luta.webp
rename to src/images/posts/suikoden-luta.webp
diff --git a/public/assets/images/posts/typographic-scale.webp b/src/images/posts/typographic-scale.webp
similarity index 100%
rename from public/assets/images/posts/typographic-scale.webp
rename to src/images/posts/typographic-scale.webp
diff --git a/public/assets/images/posts/unlighthouse.webp b/src/images/posts/unlighthouse.webp
similarity index 100%
rename from public/assets/images/posts/unlighthouse.webp
rename to src/images/posts/unlighthouse.webp
diff --git a/public/assets/images/posts/vim-vintage.webp b/src/images/posts/vim-vintage.webp
similarity index 100%
rename from public/assets/images/posts/vim-vintage.webp
rename to src/images/posts/vim-vintage.webp
diff --git a/public/assets/images/posts/work-environment-bat.webp b/src/images/posts/work-environment-bat.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-bat.webp
rename to src/images/posts/work-environment-bat.webp
diff --git a/public/assets/images/posts/work-environment-colorizer.webp b/src/images/posts/work-environment-colorizer.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-colorizer.webp
rename to src/images/posts/work-environment-colorizer.webp
diff --git a/public/assets/images/posts/work-environment-completion.webp b/src/images/posts/work-environment-completion.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-completion.webp
rename to src/images/posts/work-environment-completion.webp
diff --git a/public/assets/images/posts/work-environment-fzf.webp b/src/images/posts/work-environment-fzf.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-fzf.webp
rename to src/images/posts/work-environment-fzf.webp
diff --git a/public/assets/images/posts/work-environment-goyo.webp b/src/images/posts/work-environment-goyo.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-goyo.webp
rename to src/images/posts/work-environment-goyo.webp
diff --git a/public/assets/images/posts/work-environment-hammerspoon.webp b/src/images/posts/work-environment-hammerspoon.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-hammerspoon.webp
rename to src/images/posts/work-environment-hammerspoon.webp
diff --git a/public/assets/images/posts/work-environment-lsp-installer.webp b/src/images/posts/work-environment-lsp-installer.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-lsp-installer.webp
rename to src/images/posts/work-environment-lsp-installer.webp
diff --git a/public/assets/images/posts/work-environment-plug-install.webp b/src/images/posts/work-environment-plug-install.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-plug-install.webp
rename to src/images/posts/work-environment-plug-install.webp
diff --git a/public/assets/images/posts/work-environment-telescope.webp b/src/images/posts/work-environment-telescope.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-telescope.webp
rename to src/images/posts/work-environment-telescope.webp
diff --git a/public/assets/images/posts/work-environment-terminal.webp b/src/images/posts/work-environment-terminal.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-terminal.webp
rename to src/images/posts/work-environment-terminal.webp
diff --git a/public/assets/images/posts/work-environment-tmux.webp b/src/images/posts/work-environment-tmux.webp
similarity index 100%
rename from public/assets/images/posts/work-environment-tmux.webp
rename to src/images/posts/work-environment-tmux.webp
diff --git a/public/assets/images/posts/zsa-voyager-light.webp b/src/images/posts/zsa-voyager-light.webp
similarity index 100%
rename from public/assets/images/posts/zsa-voyager-light.webp
rename to src/images/posts/zsa-voyager-light.webp
diff --git a/public/assets/images/posts/zsa-voyager.webp b/src/images/posts/zsa-voyager.webp
similarity index 100%
rename from public/assets/images/posts/zsa-voyager.webp
rename to src/images/posts/zsa-voyager.webp