<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: MartijnHols</title><link>https://news.ycombinator.com/user?id=MartijnHols</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 02:53:39 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=MartijnHols" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by MartijnHols in "Cloudflare Turnstile requiring fingerprintable WebGL"]]></title><description><![CDATA[
<p>Rate limits don’t work if bots rotate IPs from residential blocks on every request.</p>
]]></description><pubDate>Mon, 01 Jun 2026 08:01:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48353873</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=48353873</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48353873</guid></item><item><title><![CDATA[New comment by MartijnHols in "I moved my digital stack to Europe"]]></title><description><![CDATA[
<p>What are you looking for? I use Bunny CDN along with Bunny Shield, and together they're better than Cloudflare for me. It's $10/month, but I can afford it for the privacy of my users. Bunny's aggressive bot blocking without bothering the vast majority of users with regular challenge pages provides a much better UX.</p>
]]></description><pubDate>Wed, 13 May 2026 15:31:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48123248</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=48123248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48123248</guid></item><item><title><![CDATA[New comment by MartijnHols in "LLM scraper bots are overloading acme.com's HTTPS server"]]></title><description><![CDATA[
<p>I opted for Bunny Shield exactly to combat bots, in particular ones that spoof User Agents and rotate millions of IPs. It works great, detecting the vast majority of bots and challenging them. Much more user friendly than Cloudflare too, which typically resorts to challenging everyone (not that CF was ever an option due to various concerns).<p>I also added various rate limits such as 1 RPS to my expensive SSR pages, after which a visitor gets challenged. Again this blocks bots without harming power users much.</p>
]]></description><pubDate>Wed, 08 Apr 2026 06:38:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47686209</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=47686209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47686209</guid></item><item><title><![CDATA[New comment by MartijnHols in "Ask HN: How to deal with long vibe-coded PRs?"]]></title><description><![CDATA[
<p>Telling a new contributor no thank you is hard. Open source contributors are hard to come by, and so I’ve always dealt with PRs like this (albeit before AI days but from people who had never written a line of code before their PR) by leaving a message that it’s a huge PR so it’s going to take a while to review it and a request to make smaller PRs in the future. A couple of times I ended up leaving over a hundred review comments, but most times they were all fixed and the contributor stuck around with many better PRs later.</p>
]]></description><pubDate>Tue, 04 Nov 2025 08:17:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=45808618</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=45808618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45808618</guid></item><item><title><![CDATA[New comment by MartijnHols in "Can you smuggle data in an ID card photo?"]]></title><description><![CDATA[
<p>One thing to consider is that if you were to succeed in placing hidden text/image on an ID card, it may fail manual forgery checks at airports and police stations. One of the many ways IDs are checked is with different types of lighting[1]. This might have made this stand out as an artifact, which could result in an officer doubting its legitimacy.<p>[1] <a href="https://www.airport-suppliers.com/supplier-press-release/the-security-of-ids-volume-4-optical-security-features-ir-uv-ovds-and-more/" rel="nofollow">https://www.airport-suppliers.com/supplier-press-release/the...</a></p>
]]></description><pubDate>Tue, 06 May 2025 07:39:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=43902639</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43902639</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43902639</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>Depends on the project. For websites I like to use a statically generated Nextjs site served by nginx[1] and for SPAs Nginx that serves a Vite-built static bundle with a backend that’s in whatever language the backend team chose.<p>[1] <a href="https://martijnhols.nl/blog/how-much-traffic-can-a-pre-rendered-nextjs-site-handle#finding-a-replacement" rel="nofollow">https://martijnhols.nl/blog/how-much-traffic-can-a-pre-rende...</a></p>
]]></description><pubDate>Wed, 02 Apr 2025 05:33:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43553905</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43553905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43553905</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>A 15+ second load on a gigabit connection is impossible to have anything to do with the React library, as React is only kilobytes big and has no impact on the host.</p>
]]></description><pubDate>Tue, 01 Apr 2025 12:54:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=43546224</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43546224</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43546224</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>Fair enough. The quoted statement doesn't hold outside the context of the argument that Preact has feature parity. You can build the same apps with Preact and those others, you just need to sacrifice other things.</p>
]]></description><pubDate>Tue, 01 Apr 2025 12:52:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=43546196</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43546196</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43546196</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>I think the same generic answer _does_ apply to most mature projects. Libraries like these should be approached like discussions about starting over in mature software projects; "this time we'll do it correctly", or "this framework is much simpler". This applies very much to libraries such as these.<p>When the complexity is low, projects are easy to learn, maintain and handle. That really makes them seem better and have advantages – advantages like a much reduced bundle size. But these new setups just don't do the same thing. It's a shell of what the old project did, as it's missing solutions for hundreds of edge-cases and other requirements that were tackled by the mature many-year old project that is maintained by some of the best developers. I'm sure React has a bit of bloat, but I'm willing to trust the React team that the vast majority of it is there for a reason. It might also be the cost of building on top of a very mature solution.<p>Would you not shut such a discussion down when someone new in the team proposes a complete rewrite?<p>Preact does not have 1:1 feature parity, if it had it would have been much more widely used (who wouldn't want a free filesize reduction?). Preact has plenty of issues, which is why it isn't as widely used.</p>
]]></description><pubDate>Tue, 01 Apr 2025 12:46:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=43546130</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43546130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43546130</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>If Preact truly was as feature complete as React, it would be used by everyone by now – it's old enough for most teams to be aware of it. The fact that it isn't widely used is case in point.</p>
]]></description><pubDate>Tue, 01 Apr 2025 12:24:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=43545909</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43545909</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43545909</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>Why would React be bigger and slower than it needs to be? It's a very mature project with a professional development team behind it, I'm sure we can trust them to tackle whatever unnecessary bloat they may have. I think we should be able to trust that anything that is in there serves a purpose, and that it serves hundreds of niche edge-cases that someone will eventually run into but are non-obvious until it's widely used.<p>These kinds of statements are only true if you're willing to sacrifice in other areas such as maintainability, security, stability, compatibility, accessibility, extensibility or something similar.</p>
]]></description><pubDate>Tue, 01 Apr 2025 09:29:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43544659</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43544659</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43544659</guid></item><item><title><![CDATA[New comment by MartijnHols in "Show HN: Nue – Apps lighter than a React button"]]></title><description><![CDATA[
<p>There is no such things as a true apples to apples comparison for libraries such as this. They all cherry pick something and ignore a ton of things such as:<p><pre><code>  - accessibility
  - amount of libraries with plug-and-play solutions to common problems
  - security
  - scalability
  - rendering performance
  - maintainability
  - browser support
  - browser extension interference
  - hundreds of other niche edge-cases that someone will eventually run into but are non-obvious until it's widely used
</code></pre>
React is really well-thought out and well made by hundreds of professional contributors that have worked on it for years. The premise that hobbyists can make a better overall solution in less than 8 months is strange. At best they can make a smaller solution, but it will have to sacrifice in other areas.</p>
]]></description><pubDate>Tue, 01 Apr 2025 09:16:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=43544554</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43544554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43544554</guid></item><item><title><![CDATA[New comment by MartijnHols in "Et Tu, Grammarly?"]]></title><description><![CDATA[
<p>The article mentions they inject a web component. I imagine a bad actor could add something to that. In this case at the very least the author could add a "I hacked your Grammarly extension" text just via CSS, but I'm sure you can go much further, even more so with other extensions (eg password managers).</p>
]]></description><pubDate>Sat, 29 Mar 2025 17:50:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=43517231</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43517231</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43517231</guid></item><item><title><![CDATA[New comment by MartijnHols in "Et Tu, Grammarly?"]]></title><description><![CDATA[
<p>While Google Translate's interference sucks, with current browser tools, I don't think they can really operate any other way.<p>This is mostly because of cases where they need to translate a sentence like "[Click here] for more information". When translating it to another language, they may have to move the link to the end e.g. "For more information, [click here]". The only way to achieve that is to shuffle DOM elements around, which can cause interference with interactive apps.<p>There's still a lot the Google Translate team can do to reduce the interference they cause, but I don't think they can fully eliminate it without some new browser APIs.</p>
]]></description><pubDate>Sat, 29 Mar 2025 17:14:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43516979</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43516979</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43516979</guid></item><item><title><![CDATA[New comment by MartijnHols in "Et Tu, Grammarly?"]]></title><description><![CDATA[
<p>Unfortunately browsers don't really provide good solutions for extensions that need to inject or change sites. Look at Google's owner in-browser translate extension, its DOM manipulation breaks many interactive apps as well. There are no tools available in browsers for it to not need to do that.</p>
]]></description><pubDate>Sat, 29 Mar 2025 17:05:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=43516925</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43516925</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43516925</guid></item><item><title><![CDATA[New comment by MartijnHols in "Et Tu, Grammarly?"]]></title><description><![CDATA[
<p>It's not just noise though; clients are actually experiencing crashes and other issues because of it. I wrote an in-depth article on the Google Translate extension's interference of React (and other webapps): <a href="https://martijnhols.nl/blog/everything-about-google-translate-crashing-react" rel="nofollow">https://martijnhols.nl/blog/everything-about-google-translat...</a><p>It's no wonder frontend has a lot more errors, after all it has to support so many more client variations than a typical backend. It can be very hard to make a big webapp that works well for everyone.</p>
]]></description><pubDate>Sat, 29 Mar 2025 16:58:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=43516871</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43516871</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43516871</guid></item><item><title><![CDATA[New comment by MartijnHols in "Et Tu, Grammarly?"]]></title><description><![CDATA[
<p>Makes me wonder if you can use this to hijack their plugin. At the very least you should be able to inject text into it, but you can probably render a pretty little login form as well, abusing the trust the user has in their extension. Is injecting elements into a document controlled by others really safe?</p>
]]></description><pubDate>Sat, 29 Mar 2025 16:47:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=43516805</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43516805</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43516805</guid></item><item><title><![CDATA[New comment by MartijnHols in "Andrej Karpathy on the State of Web Development"]]></title><description><![CDATA[
<p>At no point would I say web development is super simple. It's hard to get started, it's hard when something gets larger/more used, and it's hard when things are massive.<p>There are so many things to consider, as the original post shows. On top of that is:<p><pre><code>  - accessibility
    - screen reader support
    - testing
  - usability
    - animations/transitions can help and are another can of worms
  - SEO
  - consistent user elements -> interface components
  - responsiveness
  - performance
    - minification
    - lazy loading images
    - optimizing images (eg serving a 200 kB webp/avif instead of a 5MB JPG)
  - caching/scaling so your server doesn't go down when Hacker News/Reddit links to it
  - hosting cost
  - security
    - CORS
    - CSP
  - forms
    - validation
    - feedback
    - helping users fill it in correctly with as little friction as possible
  - user content sanitization
  - rate limiting
  - licensing
    - of the content you make
    - images you use
    - libraries you use
</code></pre>
Your toolset might work for a simple website that nobody will visit, but if you actually care about providing the best experience you might want something more.</p>
]]></description><pubDate>Sat, 29 Mar 2025 12:40:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43515081</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43515081</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43515081</guid></item><item><title><![CDATA[New comment by MartijnHols in "How to write blog posts that developers read"]]></title><description><![CDATA[
<p>This wasn't my experience. Hacker News felt surprisingly welcoming as soon as I upped the depth and reduced the opinion.<p>There are some areas I noticed Hacker News isn't very interested in, such as web accessibility (other platforms picked that up much better), but I think that has more to do with the not-as-exciting subject than the writer/blog.</p>
]]></description><pubDate>Fri, 28 Mar 2025 21:04:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=43509798</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43509798</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43509798</guid></item><item><title><![CDATA[New comment by MartijnHols in "How to write blog posts that developers read"]]></title><description><![CDATA[
<p>So long as your article has a decent enough structure – which this article makes it seem is the only thing that matters – I reckon there are two ways to make blog posts that developers read and share;<p>1. make so many of them, you'll repeatedly hit gold eventually<p>2. go the extra yard with research and/or effort<p>The intro's "The developer had interesting insights" makes it sound like they failed blog was full of opinion pieces. Very few opinion pieces succeed, but they're the easiest to write (i.e. the first category). It might work for some people, but for us unknowns, nobody really cares. Go the extra yard and make it interesting by doing a deep dive of the subject.<p>I've fully focussed on the second approach. As a consequence, each article takes a lot of time to complete, so I generally don't finish more than one per month. I try to make them all something I can actually be proud of (which is quite a challenge), and then I spend a lot of time tweaking the structure, making things less verbose, and improving scanability – I rely on making sentences bold a lot for that. I try to use relevant images, but I find actually helpful ones are hard to make for developer content. While hiring illustrators is a good idea, I doubt many writers are willing to pay for that.<p>To make my articles more interesting, I try to make a custom component for each article to spice it up and slowly grow the component library I have available for my blog. It doesn't always work though – for my last article I spent several hours building an easter egg that only 22 people (<0.1%) interacted with it.</p>
]]></description><pubDate>Fri, 28 Mar 2025 14:52:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=43506182</link><dc:creator>MartijnHols</dc:creator><comments>https://news.ycombinator.com/item?id=43506182</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43506182</guid></item></channel></rss>