Martin Grubinger's Avatar

Martin Grubinger

@grooovinger

Builder of web-things. I want the #web to win. Lead Frontend Developer at Geizhals Preisvergleich. DIY woodworker. #HTML – #CSS πŸ₯° – #JavaScript – #Svelte 🀩 https://grooovinger.com

126
Followers
382
Following
104
Posts
07.01.2025
Joined
Posts Following

Latest posts by Martin Grubinger @grooovinger

Preview
OpenAPI + Fastify: let the contract build your serverβ€”Martian Chronicles, Evil Martians’ team blog Wire your OpenAPI contract into a Node.js Fastify backend with auto-generated routes, typed handlers, and request validationβ€”no manual route definitions, no type drift, no integration surprises.

You know that feeling when you generate a typed SDK from your API spec on the frontend? No manual types, everything in sync, life is good. Now imagine the same thing but for backend: your OpenAPI spec generates typed route handlers and you just... implement them. Read this walkthrough:

10.03.2026 17:59 πŸ‘ 5 πŸ” 2 πŸ’¬ 0 πŸ“Œ 2
SIX

SIX

Welcome to the show! Astro 6 is here

astro.build/blog/astro-6/

10.03.2026 17:37 πŸ‘ 36 πŸ” 3 πŸ’¬ 3 πŸ“Œ 1

The JSDoc compiler is insanely fast. It takes 0.00000s to compile my JavaScript app.

06.03.2026 16:09 πŸ‘ 28 πŸ” 6 πŸ’¬ 3 πŸ“Œ 0
Preview
GitHub - elbywan/wretch: A tiny wrapper built around fetch with an intuitive syntax. :candy: A tiny wrapper built around fetch with an intuitive syntax. :candy: - elbywan/wretch

github.com/elbywan/wretch is a really good fetch wrapper.

10.03.2026 08:14 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Gosh this feed is awesome: @goodtrailcams.bsky.social

09.03.2026 19:34 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Quite recently, I had a built-in "ad blocker" in a browser remove a full h2 on a docs site, because it had a specific word in it (maybe it was "share" too, forgot). That was the last hit I needed to uninstall it :D

09.03.2026 19:28 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Journal: Installing web apps


BeforeInstallPromptEvent vs. navigator.install


πŸ”—https://adactio.com/journal/22444

09.03.2026 15:05 πŸ‘ 1 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
How to Make a DOM Library Render Anything w/ Paolo Ricciuti
How to Make a DOM Library Render Anything w/ Paolo Ricciuti YouTube video by Syntax

@techniq.dev just made me realize that I'm such an idiot I didn't share my appearance on @syntax.fm here πŸ€¦πŸ»β€β™‚οΈ

Anyway here's me chatting with @tolin.ski and @wesbos.com about the svelte custom renderers initiative 🧑

It was so fun...thanks for having me πŸ™πŸ»

youtu.be/RZ9_9bcIKwk

08.03.2026 17:35 πŸ‘ 30 πŸ” 3 πŸ’¬ 0 πŸ“Œ 1
Preview
Refreshed neo:lights:out My game neo:lights:out has gotten a little face-lift.

My game neo:lights:out has gotten a little face lift.
Play it here neolightsout.grooovinger.com or read more:
grooovinger.com/notes/2026-0...

08.03.2026 12:45 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
CSS Daily - A Daily CSS Challenge A daily CSS challenge - like Wordle, but for CSS!

Watched March MadCSS and thought "what if we could do this every day?"

So I built it. In a day.

cssdaily.dev β€” a daily CSS challenge. Write CSS to match a target, get pixel-diffed in real-time. New challenge every morning.

Scoring adapted from @wesbos.com and @tolin.ski's open-source SynHax.

07.03.2026 03:05 πŸ‘ 60 πŸ” 10 πŸ’¬ 7 πŸ“Œ 1
Preview
Akten ausgewertet: Epsteins Friedensinstitut in Wien Terje Rod-Larsen, ein enger Freund und GeschÀftspartner von Jeffrey Epstein, leitete das International Peace Institute (IPI), das auch einen Sitz in Wien hatte. Recherchen des ORF zeigen: Das Außenmin...

Der norwegische Diplomat Terje RΓΈd-Larsen ist der SchlΓΌssel zu Epsteins großem Fußabdruck in Wien. Ich habe wochenlang zum β€žInternational Peace Instituteβ€œ in Wien recherchiert.

orf.at/stories/3422...

05.03.2026 21:07 πŸ‘ 355 πŸ” 99 πŸ’¬ 13 πŸ“Œ 4
Preview
Request for developer feedback: focusgroup Β |Β  Blog Β |Β  Chrome for Developers Try out focusgroup and comment on the proposal.

Open UI has been working on speccing out the focusgroup attribute: a declarative way to support roving focus & add keyboard nav to composite widgets like toolbars/menus

We'd love your feedback!

Learn more & see open questions: developer.chrome.com/blog/focusgr...

H/t to Edge folks for prototyping

05.03.2026 16:54 πŸ‘ 73 πŸ” 22 πŸ’¬ 8 πŸ“Œ 3
Svelte goes beyond the DOM
Svelte goes beyond the DOM Svelte is well loved as a web framework, and now the team is working to take it multi-platform. Svelte’s custom renderers API will enable native apps, terminals, and more to be build with Svelte.…

This evening, @paolo.ricciuti.me will join @codetv.dev's The Web Dev Podcast to talk about our work on the Svelte Custom Renderers Initiative! Check it out if you’re interested in rendering beyond the DOM with Svelte πŸ™Œ

Tune in at 18:30 CET πŸ‘‰Β www.youtube.com/watch?v=nPac...

#Svelte #SvelteKit

05.03.2026 09:17 πŸ‘ 20 πŸ” 5 πŸ’¬ 1 πŸ“Œ 0
Your skip link targets don't need tabindex=-1 to work properly - Manuel Matuzovic I'm a frontend developer in Graz, specialized in HTML, accessibility, and CSS layout and architecture.

Recently, someone posted on LinkedIn that skip links are often broken because their target elements are missing a `tabindex` attribute. I was really surprised to see that because I thought that was an issue of the past. That's why I decided to test it.

matuzo.at/blog/2026/sk...

04.03.2026 19:37 πŸ‘ 33 πŸ” 8 πŸ’¬ 7 πŸ“Œ 0
Preview
Ludwig holt Ex-ORF-Chef Wrabetz als KI-Medienberater ins Team Wrabetz soll sich als Schnittstelle zwischen der Stadt Wien und den Unternehmen um KI kΓΌmmern. Angesiedelt ist die ehrenamtliche Stelle in der Wien Holding

Ein GlΓΌck, dass es gelungen ist, dieses KI-Supertalent in Γ–sterreich zu halten, bevor wieder OpenAI anklopft www.derstandard.at/story/300000...

04.03.2026 10:24 πŸ‘ 66 πŸ” 6 πŸ’¬ 7 πŸ“Œ 1

Epic!
github.com/platformatic...

03.03.2026 18:46 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

Every Node.js developer has lost a background job to a server restart.

We just open-sourced @platformatic/job-queue, a new queue library built for reliability from day one.

Deduplication, retries, request/response, graceful shutdown. All out of the box.
πŸ§΅πŸ‘‡

03.03.2026 16:59 πŸ‘ 21 πŸ” 4 πŸ’¬ 3 πŸ“Œ 1
Preview
Build Awesome Seamless collaboration, professional-grade tools, and beautiful templates all in one place.

I just backed Build Awesome on @kickstarter.com www.kickstarter.com/projects/fon...

03.03.2026 16:47 πŸ‘ 5 πŸ” 3 πŸ’¬ 0 πŸ“Œ 0
Preview
Temporal - JavaScript | MDN The Temporal object enables date and time management in various scenarios, including built-in time zone and calendar representation, wall-clock time conversions, arithmetics, formatting, and more. It is designed as a full replacement for the Date object.

JavaScript's date object has been tricky for years, but that is changing.

The NEW Temporal API brings,
🌍 Easily handle time zones
πŸ“† Precise date math
πŸ•’ Parse ISO strings without errors
βŒ› Durations, date ranges, and more.

Start experimenting πŸ‘‡
developer.mozilla.org/en-US/docs/...

02.03.2026 21:00 πŸ‘ 98 πŸ” 25 πŸ’¬ 3 πŸ“Œ 0
The Merger That Needed A War
The Merger That Needed A War YouTube video by The Drey Dossier

we're so fucking cooked
youtu.be/-TlYoVsW5ko?...

02.03.2026 17:55 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

Oh right! I forgot about animation-range, great stuff!
I will update the article and demo tonight. Thank you!

02.03.2026 15:35 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

If only Safari supported `viewport-fit=cover` in Portrait Mode on iOS. The combo with the safe-area insets gives you full control over which colors to use where.

(For completeness: They support `viewport-fit=cover` in Landscape mode on iOS. And on iPadOS they do nothing but the cover behavior)

02.03.2026 09:36 πŸ‘ 13 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0

Thanks Manuel! I wasn't aware the frustration was so obvious, but oh well, it's the truth πŸ˜„

02.03.2026 15:33 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Notes Collection of notes

I plan to publish more on grooovinger.com/notes
(with the occasional posts around Svelte too!)

01.03.2026 14:42 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The attacks on Iran are illegal

They constitute aggression

Pre-emptive self-defence would only be legal if an attack by Iran was imminent and that’s simply not the case

Iran now has the right to self-defence

Every country can support Iran in exercising its right to self-defence

28.02.2026 08:52 πŸ‘ 65 πŸ” 19 πŸ’¬ 3 πŸ“Œ 4
Preview
Define the Theme Color for Safari 26 With theme_color unshipped, what are our options to control the background color of Safari 26 browser UI?

It bugged me that it is not obvious how Safari 26 decides which background color to use for its browser chrome. I wrote about what I found out so far, including a trick to apply a custom theme color and a demo:

grooovinger.com/notes/2026-0...

28.02.2026 12:30 πŸ‘ 13 πŸ” 1 πŸ’¬ 1 πŸ“Œ 3
Preview
Native Random Values in CSS The CSS Working Group has published the Values and Units Module Level 5, which introduces native mechanisms for generating random content using only CSS. This is the tl;dr of a longer article explorin...

CSS is getting native randomness 🎲

random() and random-item() are coming with:

- per-element randomness
- step-based ranges
- shared value options
- zero JS required

I wrote an overview of the feature, how it works, and what browsers support it.

alvaromontoro.com/blog/68092/n...

#css #webdev

27.02.2026 16:02 πŸ‘ 46 πŸ” 11 πŸ’¬ 3 πŸ“Œ 1

I don't know if anyone actually subscribed to my blog via RSS, but I just noticed I've been listing "draft" posts in the RSS feed as well. Whoopsi πŸ™ˆ
grooovinger.com/rss.xml now without all the draft posts πŸ˜„

27.02.2026 12:35 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

#TIL Safari 26 supports local overrides for network requests.
webkit.org/web-inspecto... suggests this feature existed since January 2020, can this be true?

27.02.2026 12:14 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

SvelteKit 2 now fully supports Vite 8

SvelteKit 3 will require it - giving additional optimizations and functionality. E.g. SvelteKit 3 will use @rolldown.rs hook filters to spend more compilation time in rust and less in JavaScript. And SvelteKit 3 adapters use only rolldown without esbuild

27.02.2026 00:40 πŸ‘ 98 πŸ” 11 πŸ’¬ 1 πŸ“Œ 1