Sign in

Matija Marohnić

@silvenon.com
269 followers 333 following 2.2K posts

React frontend developer and various tooling nerd.

PostsRepliesMedia
Matija Marohnić @silvenon.com · 11/09/2026
Korean fighting scenes are far longer, people are using skill, psychology and anything they can get their hands on. It can look incredible. The sound of a gunshot then becomes shocking! Yes, I know it’s hard to imagine.
Neo: so you’re telling me I can dodge bullets
Morpheus: no, Neo, I’m telling you that with gun control you won’t have to
000
Matija Marohnić @silvenon.com · 30/08/2026
Here I am! 🎤 It didn't go as well as I hoped, but I got it out of my system, huge relief 😮‍💨 My next material will be about toxic relationships, much more relatable!
me with the microphone on the stage
030
Matija Marohnić @silvenon.com · 23/08/2026
Content warning for photosensitivity! Lights at concerts today are absolutely crazy, I can’t imagine anyone remotely sober wanting this.
010
Matija Marohnić @silvenon.com · 06/08/2026
Eradicate explicit & implicit "any" and type assertions ("as") with oxlint. Below is my recipe. Don't try to fix initial violations, suppress all of them so that new code can benefit. Errors will finally get everyone to start narrowing types and validating response.json(), JSON.parse() etc.
{
  "options": {
    "typeAware": true
  },
  "categories": {
    "correctness": "error"
  },
  "overrides": [
    {
      "files": ["*.{ts,tsx}"],
      "plugins": ["typescript"],
      "rules": {
        "typescript/no-confusing-non-null-assertion": "error",
        "typescript/no-explicit-any": "error",
        "typescript/no-non-null-assertion": "error",
        "typescript/no-non-null-asserted-nullish-coalescing": "error",
        "typescript/no-unnecessary-type-assertion": "error",
        "typescript/no-unsafe-argument": "error",
        "typescript/no-unsafe-assignment": "error",
        "typescript/no-unsafe-call": "error",
        "typescript/no-unsafe-function-type": "error",
        "typescript/no-unsafe-member-access": "error",
        "typescript/no-unsafe-return": "error",
        "typescript/no-unsafe-type-assertion": "error",
        "typescript/prefer-ts-expect-error": "error"
      }
    }
  ]
}
140
Matija Marohnić @silvenon.com · 11/07/2026
Is the bubble of constantly talking about the AI bubble bursting about to burst?
Is the AI Boom About to COLLAPSE?
MS NOW
359K 1mo ago
0180
Matija Marohnić @silvenon.com · 26/06/2026
Upon opening GitHub this modal popped open. Quite obtrusive. The contrast of the close button of immaculate. It's almost as if they don't want me to use it.
GitHub Copilot modal
210
Matija Marohnić @silvenon.com · 23/06/2026
Never in a million years. Try again. I recommend that you finish your code review flow. You know, something that people actually need.
New

From issue to merge in one desktop app

Download GitHub Copilot app
000
Matija Marohnić @silvenon.com · 20/06/2026
I need to start a Mabel gif collection. Soos: isn’t glowing clothes like a fire hazard? Mabel: no! It’s a FUN hazard! 🤣 I love her so much. I thought I need a friend to rewatch this show with, but screw that.
030
Matija Marohnić @silvenon.com · 20/06/2026
Oh man, I loved it as well, Mabel is a treasure ❤️ I got used to people occasionally not accepting money from EU, it’s their loss.
130
Matija Marohnić @silvenon.com · 19/06/2026
No chat requests? Top right corner.
110
Matija Marohnić @silvenon.com · 14/06/2026
Ok this is getting annoying. Users generally don't need to know that something isn't available unless they try to reach for it.
Above Claude's chat textbox: Claude Fable 5 is currently unavailable
100
Matija Marohnić @silvenon.com · 07/05/2026
Yeah it doesn't really work that way.
highlighted line of CSS:

columns: $grey-900;
110
Matija Marohnić @silvenon.com · 28/04/2026
Claude Dispatch notifications popped out of nowhere a couple of times now. I guess I have to figure out how to turn them off… I really don’t want to have to do that… Claude is saying “glad you’re here” but I’m very much not there, hence the notification! This is what I’d expect from ad-driven apps.
Notification Center

Claude Dispatch

Hey, glad you're here. Tell me what's on your plate, no ask is too big or small. You could ask me to:
• Find a confirmation in Downloads and c...
000
Matija Marohnić @silvenon.com · 25/04/2026
“Most top predators of the planet are majestic creatures. Millions of years of dominion have filled them with self-confidence. Sapiens by contrast is more like a banana republic dictator. Having so recently been one of the underdogs of the savannah, we are full of fears and anxieties over our position, which makes us doubly cruel and dangerous.”

—Yuval Noah Harari in Sapiens: A Brief History of Humankind
010
Matija Marohnić @silvenon.com · 23/04/2026
They did, they say "do you want the new layout" you say have to confirm to switch to what's depicted on the screenshot, and you can flip back and forth with this setting. So they don't introduce it as a "new" layout, just as a side.
Threads Sidebar Side
Which side of the window the threads sidebar appears on.

Left/Right
200
Matija Marohnić @silvenon.com · 22/04/2026
Are then the docs wrong or did I misunderstand them? Oooooh, I see now, return vs. yield is what makes it permanent vs. once! Never mind 😄
http.get<{ city: string }, never, { degree: number }>(
  '/weather/:city',
  function* () {
    let degree = 25
 
    while (degree < 27) {
      degree++
      yield HttpResponse({ degree })
    }
 
    degree++
    return HttpResponse.json({ degree })
  },
)

This GET /weather/:city request handler increments the degree on each response until it reaches 28 degrees:

GET /weather/london // { "degree": 26 }
GET /weather/london // { "degree": 27 }
GET /weather/london // { "degree": 28 }
 
// All subsequent requests will respond
// with the latest returned response.
GET /weather/london // { "degree": 28 }
210
Matija Marohnić @silvenon.com · 17/04/2026
Nothing against OP, but there’s not a single country that’s as exposed as this online. Everyone, let’s all pitch in with mildly amusing stuff about our country’s public figures. In this photo the Croatian president looks like a Twilight character. Anyone else wants to give it a go? Fuck around.
Zoran Milanović
000
Matija Marohnić @silvenon.com · 11/04/2026
frisbee dog meme:

1. (dog offers frisbee) "save to reading list"
2. (dog doesn't let go of frisbee) "no read!"
3. (closeup of angry dog) "only save"
230
Matija Marohnić @silvenon.com · 11/04/2026
vite-plugin-devtools-json still depends on Vite v7, and the maintainer isn't merging the v8 PR, it's been a month. @rich-harris.dev summarized the problem with the plugin itself really well — nobody wants to use it in the first place 😅 we have to.
GitHub comment by Rich-Harris:

Bumping this — can we please get this merged @bmeurer? Or are we going to have to fork it?

This isn't a dependency that people want to use, it's one that people are effectively forced to use by the design decisions Chrome took around automatic workspaces, so it would be greatly appreciated if we could keep it up to date
320
Matija Marohnić @silvenon.com · 10/04/2026
I know that you really want me to get a subscription, Apple, but this red color is really harsh. People often internally call it “danger”, so let’s save it for something that’s actually wrong.
Expiring Soon: 3 Free Months of Apple Music
000
Matija Marohnić @silvenon.com · 10/04/2026
What's happening to macOS? I manage to break the cursor just by hovering over the Finder app.
100
Matija Marohnić @silvenon.com · 08/04/2026
Meta, I see that in WhatsApp you replaced the search field’s clear button with your AI “Ask” button. The clear button is a strongly established UI pattern, so I’m going to play a little guessing game — nobody wants your AI thing, so now you’re trying to trick people into at least visiting it.
WhatsApp search bar with query “foo” on the left and Meta AI “Ask” button on the right
091
Matija Marohnić @silvenon.com · 08/04/2026
000
Matija Marohnić @silvenon.com · 08/04/2026
Don’t get cute with traffic markings and signals — I genuinely didn’t know whether it was okay to cross here, but at least they had fun painting this.
freeform crosswalk-looking thing painted on the road
000
Matija Marohnić @silvenon.com · 27/03/2026
Bundle visualizers when they encounter my heavy usage of Vite Environment API.
Joker meme:

- can I analyze your bundle?
- Joker: you wouldn't get it
010
Matija Marohnić @silvenon.com · 26/03/2026
Oh my fucking god Meta will you stop offering me a feature that's not available to me?! Who approved this workflow, AI??
textbox focused with a popover "Meta AI: You can ask the assistant a question"Modal: AI chats aren't available for you yet
150
Matija Marohnić @silvenon.com · 23/03/2026
I need to prepare slides for oxlint and oxfmt FAST, so I spent my time doing what truly matters. I don't want to brag, but I'm a master of prioritization.
"oxlint oxfmt" written in style of Back to the Future
140
Matija Marohnić @silvenon.com · 21/03/2026
Oh, and if I try to open the shortcut, it doesn’t exist. WhatsApp/iOS indexes a non-existent thing. This is really obtrusive and literally useless. I don’t want your dark pattern AI thingy, Meta.
iOS notification from Shortcuts:

The operation couldn’t be completed. Couldn’t find shortcut.
000
Matija Marohnić @silvenon.com · 21/03/2026
No.
iOS search result “Open Meta AI”
000
Matija Marohnić @silvenon.com · 23/02/2026
I skimmed to see what Codex is… I guess there’s no content here… Also, let’s stop fading in chunks of content, content simply existing is just fine 😘
1150
Matija Marohnić @silvenon.com · 20/02/2026
Interesting Safari detail about extending the back button to links that open in a new tab, I think this is new!
100
Matija Marohnić @silvenon.com · 19/02/2026
I'm barely using Chrome at all anymore. Chrome made everyone compete at its Lighthouse score, but it's not all about that one run. @polypane.app is showing me many kinds of insights DURING development, so that I can quickly improve much more without having to wait for a costly run. Feels better.
the disloyal boyfriend meme where the boyfriend turns around at the Polypane logo, and his girlfriend is the Chrome logo
0110
Matija Marohnić @silvenon.com · 04/02/2026
That's impossible to answer because there's pretty much an infinite number of possible Tailwind utilities. But if you want to talk numbers, in my app only about 25% of utility classes I'm using can be written as inline styles, i.e. they compile to a simple class selector + single declaration.
".prose-pre:max-0" translates to:

.prose-pre\:mx-0 {
  & :is(:where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *))) {
    margin-inline: calc(var(--spacing) * 0) /* 0rem = 0px */;
  }
}
100
Matija Marohnić @silvenon.com · 03/02/2026
I can't submit this form in Safari. This is I guess what web is becoming. WebKit supports submitting forms (at least I hope so). But whenever someone steers away from the platform they either no longer seem to bother to test in WebKit, or new WebKit releases are breaking. This sucks quite a lot.
Claude Code would like to connect to your Claude chat account

Buttons:

- Authorize
- Decline
120
Matija Marohnić @silvenon.com · 28/01/2026
"! Copilot CLI not installed", what…? cat ~/.zshrc Oh… nice try, Microsoft.
# Copilot
eval "$(gh copilot alias -- zsh)"
000
Matija Marohnić @silvenon.com · 26/01/2026
oxlint --type-aware --type-check
0120
Matija Marohnić @silvenon.com · 24/01/2026
I don't like lint rules being set to "warn". That doesn't block anything, why is this so popular? Don't people like not being able to commit code because of a lint error? But seriously, emitting warnings to me is this weird limbo where a rule is "kind of a problem, but is it really".
lint rules set to "warn"
5120
Matija Marohnić @silvenon.com · 21/01/2026
Oh, that's really cool! I was under the wrong impression when I saw this. But I didn't read all of it, stupid skimming brain 🤦‍♂️ This issue is talking about porting eslint-plugin-react rules into oxlint, right? Not supporting all of it as a JS plugin. Thanks for clarifying, time to migrate! ❤️
react/component-hook-factories

React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.
110
Matija Marohnić @silvenon.com · 19/01/2026
Episode of (Un)well about bee sting therapy: Some people use bee venom for a cosmetic effect that doesn’t even last one day. Others use it to treat Lyme disease based on flimsy data. (Almost) no regret being displayed about torturing and killing an insane number of bees for most likely no reason.
000
Matija Marohnić @silvenon.com · 19/01/2026
Instead of recommending that I use <script async>, @nextjs.org seemingly reinvents it as <Script strategy="lazyOnLoad">. Why? Or does loading start only after hydration? If so, why expose the slowest possible loading strategy? Or maybe strategy="lazyOnLoad" sits somewhere in the middle?
import Script from 'next/script'
 
export default function Page() {
  return (
    <>
      <Script
        src="https://example.com/script.js"
        strategy="lazyOnload"
      />
    </>
  )
}
000
Matija Marohnić @silvenon.com · 19/01/2026
I only recently learned about Vite's "?no-inline" import query, apparently it's been here since v6! vite.dev/guide/assets... This allows me to import SVG sprites without configuring "build.assetInlineLimit" to prevent inlining the sprite because that would break icons. Much better!
Explicit Inline Handling

Assets can be explicitly imported with inlining or no inlining using the ?inline or ?no-inline suffix respectively.

import imgUrl1 from './img.svg?no-inline'
import imgUr12 from './img.png?inline'
040
Matija Marohnić @silvenon.com · 16/01/2026
Most of all I hate the wind down afterwards, and the endless loop of this.
Brain: hey, are you sleepinf?
Woman: yes, now shut up
Brain: i know how to fix that bug on line 255
010
Matija Marohnić @silvenon.com · 16/01/2026
Ok Chrome's new split view is pretty hawt. I can read related topics side-by-side and pretend I understand either of them.
Chrome open in split view React documentation, left is resumeToPipeableStream, right is prerenderToNodeStream
000
Matija Marohnić @silvenon.com · 11/01/2026
Older iPhones I used to be able to place on the table face up. Not newer models, I can only place those face down, which is better for the battery life and social situations, but feels weird that the design forces me. Because of The Bulge.
iPhone 17, iPhone 17 Pro, and iPhone Air, shot sideways so the physical volume of the camera can be seen
000
Matija Marohnić @silvenon.com · 08/01/2026
A Tailwind PR got closed with a shocking comment from Adam Wathan — they had to lay off 75% of their engineers yesterday because of impact of AI on their business. github.com/tailwindlabs... The conversation there got completely off the rails, Tailwind Labs should lock it, the author is the worst 😬
GitHub comment by Adam Wathan:

I totally see the value in the feature and I would like to find a way to add it.

But the reality is that 75% of the people on our engineering team lost their jobs here yesterday because of the brutal impact AI has had on our business. And every second I spend trying to do fun free things for the community like this is a second I'm not spending trying to turn the business around and make sure the people who are still here are getting their paychecks every month.

Traffic to our docs is down about 40% from early 2023 despite Tailwind being more popular than ever. The docs are the only way people find out about our commercial products, and without customers we can't afford to maintain the framework. I really want to figure out a way to offer LLM-optimized docs that don't make that situation even worse (again we literally had to lay off 75% of the team yesterday), but I can't prioritize it right now unfortunately, and I'm nervous to offer them without solving that problem first.

@PaulRBerg I don't see the AGENTS.md stuff we offer as part of the sponsorship program as anything similar to this at all — that's just a short markdown file with a bunch of my own personal opinions and what I consider best practices to nudge LLMs into writing their Tailwind stuff in a specific way. It's not the docs at all, and I resent the accusation that I am not disclosing my "true intentions" here or something.

Quote: "This feature is so that people can build MORE things with Tailwind in a FASTER and more EFFICIENT capacity."

@mtsears4 Tailwind is growing faster than it ever has and is bigger than it ever has been, and our revenue is down close to 80%. Right now there's just no correlation between making Tailwind easier to use and making development of the framework more sustainable. I need to fix that before making Tailwind easier to use benefits anyone, because if I can't fix that this project is going to become unmaintained abandonware when there is no…
130
Matija Marohnić @silvenon.com · 23/12/2025
See this sliver of white behind the corner of the Safari window? That is every non-Safari app showing because non-Safari apps now have a different kind of rounded corners because… why?
sliver of white behind a dark window on macOS
241
Matija Marohnić @silvenon.com · 02/12/2025
Ah yes, "NaN:NaN" is my favorite part of the song, how did YouTube Music know…
YouTube Music seek slider tooltip showing "NaN:NaN"
030
Matija Marohnić @silvenon.com · 30/11/2025
If someone can explain to me why both GPT-4.1 and GPT-5 are in this dropdown, and both Claude Sonnet 4 and 4.5, that would be awesome.
Dropdown of Copilot AI models on GitHub
110
Matija Marohnić @silvenon.com · 11/11/2025
Watch the "Appearance" settings title while I flip between light and dark mode. I love the seamless transition, and how it blends into the UI. It… like, really blends.
020
Matija Marohnić @silvenon.com · 26/10/2025
Who designed this? Why are there two identical columns of coffees?
a coffee vending machine with two same columns of coffee productsmeme with a nervous guy choosing between two buttons labelled "capuccino" and "capuccino"
110