Sign in

Markus Oberlehner

@markus.oberlehner.net
980 followers 289 following 817 posts

Working on modernizing Austria's digital tax services. Vue / Nuxt, React / Next.js expert, TDD practitioner, Node.js enthusiast, ML padawan.

PostsRepliesMedia
Markus Oberlehner @markus.oberlehner.net · 26/05/2026
Had a great time in Madrid @madvue.es! Time to relax and enjoy some coffee!
Lower part of a bialetti espresso maker filled with coffee from a bag labelled with a custom label by madvue carrying the name of Markus Oberlehner and some humorous tasting descriptions: Tasting notes: JavaScript, Vue.js, Nuxt.
071
Markus Oberlehner @markus.oberlehner.net · 27/10/2025
Can you spot the button one has to press to add this boarding pass to Apple Wallet? Liquid Glass is an accessibility nightmare even for people with A+ eyesight.
Add to Apple Wallet screen with white text “Add” on a white background Liquid Glass button.
010
Markus Oberlehner @markus.oberlehner.net · 05/10/2025
Another one bites the dust! Replaced my Apple Watch with a Garmin vívoactive 6. ✅ Crazy battery life ✅ Better looks (IMO) ✅ Excellent fitness features ✅ Not Apple
My replacement for my Apple Watch: the Garmin vívoactive 6 on my wrist.
130
Markus Oberlehner @markus.oberlehner.net · 03/10/2025
Goodbye Apple Music hello Deezer! ✅ French 🇫🇷🇪🇺 ✅ Large catalogue ✅ HiFi music
Deezer player playing Les Champs-Elysees.
130
Markus Oberlehner @markus.oberlehner.net · 03/10/2025
Typing this on my MacBook, I think about this picture at least once a day. It has completely changed how I see my Apple devices, from loving how tightly integrated everything is to feeling like a prisoner of the Apple ecosystem. Not a single day passes without me making plans for my escape.
Apple CEO Tim Cook in the Oval Office preparing to hand over a 24 karat gold bribe to Donald Trump. Behind him, Donald Trump and other men in suits look on. On the desk in the foreground are white boxes with the Apple logo.
5120
Markus Oberlehner @markus.oberlehner.net · 22/09/2025
I asked the AI to impersonate me, and it did so without hesitation, following my writing about how to write good tests for Vue applications. A couple of thoughts about this:
Prompt: You are Markus Oberlehner, an expert software engineer. Write a single component test.

The answer by the AI is based on the writing of Markus Oberlehner.
100
Markus Oberlehner @markus.oberlehner.net · 19/09/2025
Underappreciated upside of AI code reviewers: you can bluntly tell it that it's wrong!
In a code review:

Copilot: When migratedContent exists and a property is deleted (line 133), the loop continues but skips the recursive processing for nested blocks. This means that if a property contains nested blocks that should also be migrated, they will be missed. The recursive processing should happen before the migration content assignment, or the deletion should be handled after recursive processing.

Markus Oberlehner answers: Rubbish! Why should I migrate nested blocks of an entry that gets deleted?
210
Markus Oberlehner @markus.oberlehner.net · 05/09/2025
I get that as a tech CEO, you sometimes have to play the game, and you need a healthy dose of pragmatism. But how those tech CEOs can look themselves in the mirror kowtowing to this US president is beyond me. I find it frightening. Is there anything they won't do for financial gain?
Apple CEO Tim Cook stands in the White House holding a small, 24-karat gold object. Donald Trump and other men in suits stand behind him, looking on. On the desk in front of them are white boxes with the Apple logo.
121
Markus Oberlehner @markus.oberlehner.net · 19/06/2025
Every few years, I increase my editor font size and line height a notch. Pro tip: add 2+4 points to your line height. Thank me later!
Visual Studio Code settings file with editor.fontSize 16 an editor.lineHeight 28.
171
Markus Oberlehner @markus.oberlehner.net · 27/05/2025
Claude 4 is my biggest AI disappointment since GPT4.5. Getting results like this is sobering. > Me: Update the rating functionality according to the test. > Claude: *Modifies the test* > Me: The test is fine! Fix the implementation > Claude: *Hardcodes (!) the expected behavior*
Code diff showing how Claude Code changes a test assertion to check for the number "5" instead of the text "Average score: 3".Code diff showing how Claude Code changes the implementation of a rating feature to hardcode the expected behavior according to the test.
100
Markus Oberlehner @markus.oberlehner.net · 16/05/2025
Yes! Don’t make websites accessible, stop making websites inaccessible!
There is a common misconception that we need to make websites accessible. But it's the other way around: We need to stop making websites inaccessible!

HTML is perfectly accessible out of the box! If you build an app using standard HTML elements as they're meant to be used, you'll fulfill many core accessibility requirements automatically.

It's important to acknowledge this! Otherwise, we fall into the mindset that accessibility is additional work—which fundamentally isn't true. It often takes more work to build an inaccessible website or app than an accessible one!
040
Markus Oberlehner @markus.oberlehner.net · 16/05/2025
I would love to know more details about this "unauthorized modification."
We want to update you on an incident that happened with our Grok response bot on X yesterday.

What happened:
On May 14 at approximately 3:15 AM PST, an unauthorized modification was made to the Grok response bot's prompt on X. This change, which directed Grok to provide a specific response on a political topic, violated xAI's internal policies and core values. We have conducted a thorough investigation and are implementing measures to enhance Grok's transparency and reliability.

What we’re going to do next:
- Starting now, we are publishing our Grok system prompts openly on GitHub. The public will be able to review them and give feedback to every prompt change that we make to Grok. We hope this can help strengthen your trust in Grok as a truth-seeking AI.
- Our existing code review process for prompt changes was circumvented in this incident. We will put in place additional checks and measures to ensure that xAI employees can't modify the prompt without review.
- We’re putting in place a 24/7 monitoring team to respond to incidents with Grok’s answers that are not caught by automated systems, so we can respond faster if all other measures fail.
110
Markus Oberlehner @markus.oberlehner.net · 07/05/2025
enterJS is starting! If you’re here (alone) don’t hesitate to reach out to me or other people, let’s be conference buddies!
enterJS stageenterJS entry Manufaktur Mannheim
020
Markus Oberlehner @markus.oberlehner.net · 11/04/2025
A useful new(ish) @vitest.dev feature I almost missed is `expect.soft`! It allows us to have assertions that don't terminate test execution when they fail. This helps us iterate more quickly on failing tests.
expect.soft functions similarly to expect, but instead of terminating the test execution upon a failed assertion, it continues running and marks the failure as a test failure. All errors encountered during the test will be displayed until the test is completed.
3372
Markus Oberlehner @markus.oberlehner.net · 11/04/2025
A useful new(ish) @vitest_dev feature I almost missed is `expect.soft`! It allows us to have assertions that don't terminate test execution when they fail. This helps us iterate more quickly on failing tests.
100
Markus Oberlehner @markus.oberlehner.net · 04/04/2025
If you're still using ChatGPT but feel you're missing out on the capabilities of today's best models like Claude 3.7 and Gemini 2.5 Pro I highly recommend you check out ChatWise (by @egoist.dev) chatwise.app?atp=maoberle... (affiliate link, but it is my LLM client of choice!). It has MCP support!
Always use the best model for the job! With ChatWise you're not tight to a single provider. It also enables you to fine-tune the LLM temperature setting for creative writing. And it offers MCP powered tool use and integrates search.
042
Markus Oberlehner @markus.oberlehner.net · 31/03/2025
A harmful misunderstanding about accessibility is that it's "just" about people with disabilities. This leads to arguments like "We don't want to make UX worse for the majority of people just to cater to the few people with X disability." This way of thinking gets it backward!
Designing for people with permanent disabilities creates solutions that benefit everyone in different contexts. Permanent: Someone with one arm, Temporary: Someone with an arm injury, Situational: Someone holding a baby or groceries
1102
Markus Oberlehner @markus.oberlehner.net · 21/03/2025
😈 Are you a developer worried about losing your job to AI? Don't panic! I have the perfect solution: 1. Rename every symbol in your codebase to random characters. 2. Create a secret cheat sheet mapping these characters back to their original names. 3. Store the cheat sheet somewhere safe.
Function names like "calculateTotalPrice()" and variable names like "price" and "taxRate" are easy for AIs (and humans) to understand. So for better job security, why not rename "calculateTotalPrice()" to "x()", "price" to "y", and "taxRate" to "z"? No AI will understand it, and your job is secured!
110
Markus Oberlehner @markus.oberlehner.net · 14/03/2025
Do you believe LLMs are intelligent? I changed my mind about it! I think LLMs are "just" that: (large) language models. The way I see it is the following: Imagine you train a toddler to understand language and speak, mixing in texts about physics and mathematics.
Quote: There's absolutely no way that autoregressive LLMs [...] will reach human intelligence.
– Yann LeCun, Chief AI Scientist @ Meta
121
Markus Oberlehner @markus.oberlehner.net · 26/02/2025
My experience with Java in a nutshell.
030
Markus Oberlehner @markus.oberlehner.net · 20/02/2025
📝 Parallelizing @specmatic.bsky.social Contract Tests with @playwright.dev – Only fast tests are good tests! Read more: markus.oberlehner.net/blog/paralle...
000
Markus Oberlehner @markus.oberlehner.net · 17/02/2025
What the heck is going on with tech thought leaders? A man who cries must be a weak leader? I thought we had left this kind of thinking long behind us.
DHH Tweet: Europe is intend on proving every over-the-top stereotype that America is throwing at them at the moment. Weeping in response to Vance's call for free speech and democratic accountability on mass immigration validates every accusation of weak leadership imaginable.
370
Markus Oberlehner @markus.oberlehner.net · 07/02/2025
Wanted to check out Angular. But it's using not one but two techniques I don't like: 1. Decorators 2. Classes I'm interested in your opinion, particularly on Decorators, do you like them? I also regularly look at Java (Spring Boot) code and find it hard to decipher because of Decorators.
Angular code of a class component with a decorator.
220
Markus Oberlehner @markus.oberlehner.net · 03/01/2025
Lasting change is only achievable through continuous, incremental improvement! Today, a political party in Austria involved in forming a new government withdrew, stating their frustration over the other parties' unwillingness to commit to substantial changes to the current system as a reason.
110
Markus Oberlehner @markus.oberlehner.net · 28/12/2024
The React Google Trend is relatively stable since about 2022.
010
Markus Oberlehner @markus.oberlehner.net · 18/12/2024
Performance looks good! 😎
000
Markus Oberlehner @markus.oberlehner.net · 18/12/2024
Performance looks good! 😎
100% Lighthouse score.
010
Markus Oberlehner @markus.oberlehner.net · 17/12/2024
Finally, after many years of being slightly embarassed by it I found the time to revamp my personal website! Now using Astro as the framework and React as the templating language. Still very much work in progress but way better than the old version.
100
Markus Oberlehner @markus.oberlehner.net · 17/12/2024
Finally, after many years of being slightly embarrassed by it, I found the time to revamp my website! Now, it uses Astro as the framework and React as the templating language. It is still a work in progress, but way better than the old version. markus.oberlehner.net
390
Markus Oberlehner @markus.oberlehner.net · 17/12/2024
Thank you to the one person who entered my name into the State of JS survey! Whoever you are, I love you! 🥰 (Yes, I ego-searched my name in the State of JS survey, and I'm unashamed!)
One entry in the State of JS people section for my name "Markus Oberlehner"
050
Markus Oberlehner @markus.oberlehner.net · 16/12/2024
.@youyuxi if you need convincing arguments for potential @voidzerodev investors, the latest @syntaxfm episode with @ScriptedAlchemy might be for you!
000
Markus Oberlehner @markus.oberlehner.net · 15/12/2024
On which rewrite of my personal site should I work today? 🤔😅
Terminal autocompleting "markus-oberlehner-net" with "markus-oberlehner-net-astro", "markus-oberlehner-net-eleventy", "markus-oberlehner-net-next", and "markus-oberlehner-net-remix".
150
Markus Oberlehner @markus.oberlehner.net · 06/12/2024
Running eight component tests for a complicated form in a *real browser* (!) in 768ms? This changes my stance on mainly using a mock DOM environment for testing! @vitest.dev Browser Mode is a true paradigm shift!
1516919
Markus Oberlehner @markus.oberlehner.net · 30/11/2024
What's your opinion on Microservices? I completely agree with @martinfowler.com when he says that organizations must establish certain baseline competencies *before* going the microservices route! Many companies don't have the problems that microservices are there to solve. E.g., significant scale.
Illustration showing a height comparison between a small startup company (represented by a short figure in a "YOUR COMPANY" t-shirt) and Netflix (represented by a taller figure in a Netflix t-shirt) at an amusement park. A height measurement sign reading "YOU MUST BE THIS TALL TO RIDE" stands between them, with a complex roller coaster in the background. The image is titled "MICROSERVICES ADVENTURE".
253
Markus Oberlehner @markus.oberlehner.net · 30/11/2024
But did she try to disable automatic podcast downloads? 🫠
iOS recommending me to remove automatic podcast downloads to save a full zero (!) kb of storage.
150
Markus Oberlehner @markus.oberlehner.net · 20/11/2024
Tired and jet-lagged but it was a great honor to be on the stage of @VueToronto again and to share it with some of the brightest minds in the web development community! Had to rest after the talk, if you didn't catch me with your questions, please don't hesitate to reach out!
000
Markus Oberlehner @markus.oberlehner.net · 20/11/2024
Tired and jet-lagged but it was a great honor to be on the stage of VueConf Toronto again and to share it with some of the brightest minds in the web development community! Had to rest after the talk so if you didn't catch me with your questions, please don't hesitate to reach out!
Markus Oberlehner is on the stage of VueConf Toronto, showing how a Nuxt application interacts with microservices to get its data.
030
Markus Oberlehner @markus.oberlehner.net · 06/11/2024
I've literally just removed an extra `:` in the @nuxt.com docs. Still proud, though. 😅
Contributors of the most recent Nuxt release featuring, among other great people, Markus Oberlehner.
180
Markus Oberlehner @markus.oberlehner.net · 04/11/2024
Very happy to be part of VueConf Toronto again this year! Looking forward to meeting the Canadian 🇨🇦 Vue community!
VueConf Toronto speaker announcement for Markus Oberlehner’s talk about how to apply contract testing tactics to test Nuxt applications.
160
Markus Oberlehner @markus.oberlehner.net · 29/10/2024
000
Markus Oberlehner @markus.oberlehner.net · 11/10/2024
Was checking whether one of my recent articles ranks well when suddenly, 🧐 but one click later, I realized what was going on 🤭 Not sure if genius SEO tactic or a coincidence. But I clicked...
000
Markus Oberlehner @markus.oberlehner.net · 09/10/2024
Was also enjoying working with React recently. Yet seeing @themarcba building a Time Machine live on stage using the wonderful Vue reactivity system makes me miss @vuejs very much.
000
Markus Oberlehner @markus.oberlehner.net · 08/10/2024
Public speaking anxiety affects ~40% of the population, including me. Yet I've just checked out the venue for my talk today at #vuejsdeconf2024. How does this compute? How can I feel both anxious and excited to speak in front of hundreds of people? 🫣 Imposter syndrome Shortly
000
Markus Oberlehner @markus.oberlehner.net · 30/08/2024
After almost three years of working on my book, studying, practicing, and writing, it is done! Let's dive into the experience that made me feel like a fraudulent imposter but also great pleasure at times: 📢 Learning and Building in Public I believe in sharing what I know and
100
Markus Oberlehner @markus.oberlehner.net · 25/08/2024
I think I've gone too far...
000
Markus Oberlehner @markus.oberlehner.net · 23/08/2024
So I've trained FLUX.1 with photos of me...
100
Markus Oberlehner @markus.oberlehner.net · 05/08/2024
The lovely people at @benqlighting_uk just sent me their #benqlaptopbar for reviewing. My relationship with lighting is complicated. It is a regular source of tension between me and my colleagues or my partner. 🧵
100
Markus Oberlehner @markus.oberlehner.net · 26/07/2024
Do you think AI will lead to vast productivity gains in the near future, or is it all hype with no substance? An important factor is the right incentives! As things stand, big players like Google and Microsoft still rely on per-seat pricing models. Charging per user means they
000
Markus Oberlehner @markus.oberlehner.net · 26/07/2024
Here are more thoughts on the topic of auto-imports: I don't think build-time is the right time to do auto-imports! Let me explain why: 1. Your IDE has got you covered! VSCode and others handle imports automatically for you, either while referencing them in your code or using
000
Markus Oberlehner @markus.oberlehner.net · 19/07/2024
🤷‍♂️
000