[{"channel_id":1068453571,"post_id":6785,"date":1782050402000,"forwards":"1","views":"71","text":"<b>How building an HTML-first site doubled our users overnight<\/b><br><br>My client was a utility company, and they had a big problem...<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/mohkohn.co.uk\/writing\/html-first\/\">https:\/\/mohkohn.co.uk\/writing\/html-first\/<\/a>","text_length":166,"media":{"root":"\/00e\/gRoAAMNOrz8AAAAAfFv35jncaH4.uQ5rG8Y1TVFNpnu1oeEfXQQ.Aj-vTsMAABqBajf61xpLxgbAmrcLNJRJJtnz19A","photo":{"thumbs":{"m":{"w":213,"h":320,"hash":"If7yd8kmCAiJI6-OLz2TiA&ts=1782141275"},"x":{"w":533,"h":800,"hash":"nPHbXTVyZz5bdIAHh1VsOQ&ts=1782141275"},"y":{"w":853,"h":1280,"hash":"mKBHSC1lEOMfeBDLZQ0EgQ&ts=1782141275"},"w":{"w":1707,"h":2560,"hash":"Kz2JBLqNRXEWot3NhKuCTQ&ts=1782141275"},"i":{"bytes":"AoABs|BAplTAGSORUJU54qxbEq4NOMTGRsYxniq5uXcqjBO9yONCqmQjjoKiLc1bmyIljHaqpFNO+plONpOwiT\/MAKtpJkE1mxffA71aYlZVUHjvSmrnZTSsE8\/zVF5wpbxdr+1VapOyM5xVyWHht393mnCTLZPWiikx0m0PuT5iKfTiqhFFFDIb1Z\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6784,"date":1781964003000,"views":"35","text":"<b>The quiet problem with unnecessary async<\/b><br><br>Not every JavaScript function needs to be async. Unnecessary async boundaries can spread Promise-based complexity through an entire application.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/allthingssmitty.com\/2026\/06\/08\/the-quiet-problem-with-unnecessary-async\/\">https:\/\/allthingssmitty.com\/2026\/06\/08\/the-quiet-problem-with-unnecessary-async\/<\/a>","text_length":268,"media":{"root":"\/002\/gBoAAMNOrz8AAAAA-0QLDSDqzdw","photo":{"thumbs":{"s":{"w":90,"h":60,"hash":"l4_CtQDB4mX2wU0sjJrRZA&ts=1782141275"},"m":{"w":320,"h":214,"hash":"JuE5UH0pHNT_H52gHHXt4w&ts=1782141275"},"x":{"w":500,"h":334,"hash":"dH3ElJ-rp6RpW-52MlA_nA&ts=1782141275"}}}}},{"channel_id":1068453571,"post_id":6783,"date":1781877602000,"forwards":"1","views":"79","text":"<b>What Bun Can Tell Us About AI, Open Source and Anthropic<\/b><br><br>In early December last year, Anthropic acquired Oven, the makers of Bun, a small, fast, open source JavaScript runtime. It\u2019s also a package manager, bundler and test runner but it\u2019s had the most success as a fast runtime built on Safari\u2019s JavaScriptCore rather than Chrome\u2019s V8 like Deno and Node.js. Built as a drop-in replacement<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/redmonk.com\/sogrady\/2026\/06\/04\/bun-two-lessons\/\">https:\/\/redmonk.com\/sogrady\/2026\/06\/04\/bun-two-lessons\/<\/a>","text_length":446,"media":{"root":"\/00e\/fxoAAMNOrz8AAAAAfFv35jncaH4","photo":{"thumbs":{"m":{"w":320,"h":253,"hash":"T3HJvTNnnd6iNUkjnsI3Ew&ts=1782141275"},"x":{"w":800,"h":632,"hash":"pBBXF5HL8devysh1-y6lOw&ts=1782141275"},"y":{"w":1024,"h":809,"hash":"r2F_ZZEsQ0WFk_Fi3CU8xg&ts=1782141275"},"i":{"bytes":"AgACg|DWYc9T+dJj6\/8AfRpT1ooATA9\/++jTt1JSUAO3ciimj7wooAU8GilYHNJg0AFIeBS7TRtNAAOoopQDmigD\/9k="}}}}},{"channel_id":1068453571,"post_id":6782,"date":1781868003000,"views":"97","text":"<b>How To Use Query Parameters with Angular Router<\/b><br><br>Learn how to use query parameters with Angular Router using ActivatedRoute, queryParams, and queryParamsHandling.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/angular-query-parameters\">https:\/\/www.digitalocean.com\/community\/tutorials\/angular-query-parameters<\/a>","text_length":237,"media":{"root":"\/00b\/fhoAAMNOrz8AAAAAcfykEiq0HPE","webpage":{"url":"https:\/\/www.digitalocean.com\/community\/tutorials\/angular-query-parameters","type":"article","title":"How To Use Query Parameters with Angular Router | DigitalOcean","site_name":"Digitalocean","display_url":"digitalocean.com\/community\/tutorials\/angular-query-parameters","description":"Learn how to use query parameters with Angular Router using ActivatedRoute, queryParams, and queryParamsHandling.","thumbs":{"m":{"w":320,"h":180,"hash":"c10SV0Ht4WPnEC02ZHHoEw&ts=1782141275"},"x":{"w":800,"h":450,"hash":"G0ieMhGI-185xoZavBbsvg&ts=1782141275"},"y":{"w":1280,"h":720,"hash":"cwu4No6POOFhJscxzgLKoA&ts=1782141275"},"w":{"w":1920,"h":1080,"hash":"HAQkvl29xSvqWkn46O1cuw&ts=1782141275"},"i":{"bytes":"AXACg|CnQc0qnDgn1qWZlKDB6D86zOxsr0lThoDgFCOMZz39aQvbZ+4+PrTIbIKKQ0UCJKSiikaMSmmiimQxKKKKZJ\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6781,"date":1781791202000,"forwards":"2","views":"100","text":"<b>CSS Animated SVG Maps<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/amberweinberg.com\/css-animated-svg-maps\/\">https:\/\/amberweinberg.com\/css-animated-svg-maps\/<\/a>","text_length":71,"media":{"root":"\/011\/fRoAAMNOrz8AAAAARADLqKcEz7s","photo":{"thumbs":{"m":{"w":320,"h":320,"hash":"6CcTwmCZwbfe9Yj66jiU8Q&ts=1782141275"},"x":{"w":800,"h":800,"hash":"nGHgflBF4nvW8EpS4qirIw&ts=1782141275"},"y":{"w":804,"h":804,"hash":"OX0PEHua6RaTMsHKSAnLkA&ts=1782141275"},"i":{"bytes":"AoACg|DZoo6VSttShupzEgYHBIJHWgC7RVeC7SeaWIKyvGcHPektr2K5kkSMHMfr3+lAFmiq9tdpcvIqBsRnBJ6H6UUAR6pN5NhIQcM3yj8f\/rZrIjmhgazkjbLpxJx2P\/6zW3c2iXRj8wttQ52jofrTrm3W5haJyQDjkdaAMu8kNnqbzDpLEcH3x\/iBUMQbTzBOeBLE2c+vUf0rUn06KeGKN3c+UMA5GSKfdWcV3Esb5UKcjb2oAh0ePy7BT3cljRV2NBHGqLwqjAooAdRRRQAUUUUAFFFFAH\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6780,"date":1781781602000,"forwards":"1","views":"57","text":"<b>npm v12 delivers one of the biggest security improvements in years<\/b><br><br>npm v12 makes install scripts opt-in by default, closing the install-time execution path behind a year of npm supply chain worms from Nx to Red Hat.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/www.aikido.dev\/blog\/npm-v12-block-postinstall\">https:\/\/www.aikido.dev\/blog\/npm-v12-block-postinstall<\/a>","text_length":271,"media":{"root":"\/013\/fBoAAMNOrz8AAAAALQHN6bfD738","photo":{"thumbs":{"m":{"w":320,"h":180,"hash":"X1w2-wZvHrnj9dwfqZCRMw&ts=1782141275"},"x":{"w":800,"h":450,"hash":"1aKpmds7cRZMFoXhGkdYZA&ts=1782141275"},"y":{"w":1280,"h":720,"hash":"LIJVivbUQR9w-JfP1BOyNg&ts=1782141275"},"w":{"w":1920,"h":1080,"hash":"wsUue0oCp4nRGCoVvtxVtA&ts=1782141275"},"i":{"bytes":"AXACg|DWxz98\/TilyPUVE0ZaQ44z3wKBB6n8gKAKNxNdC+dEkKxDGOB6CohfXBXO5vrkf4UtzGDfSMWJ2suV\/AYqBZ2EWwY7irQFm3ubg3cKvKSr9QQPSimWp33tv22\/rwaKTA2efSiiipAoSWLvePKSCjY4z7VJ9jXbgRJ+dFFO4EcVi0d0ku4bVzxRRRSuB\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6779,"date":1781770501000,"views":"15","text":"<b>CSS: Unavoidable Bad Parts<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/matklad.github.io\/2026\/06\/04\/css-unavoidable-bad-parts.html\">https:\/\/matklad.github.io\/2026\/06\/04\/css-unavoidable-bad-parts.html<\/a>","text_length":95,"media":{"root":null,"webpage":{"url":"https:\/\/matklad.github.io\/2026\/06\/04\/css-unavoidable-bad-parts.html","type":"article","title":"CSS: Unavoidable Bad Parts","site_name":"matklad.github.io","display_url":"matklad.github.io\/2026\/06\/04\/css-unavoidable-bad-parts.html","description":"An ersatz CSS tutorial for people who need to style a web page, but aren't web developers. I am a wrong person to write this kind of thing, as I have neither the time, nor experience. I'd much rather read a book about this. Alas, I had to learn all this stuff from trawling MDN, so perhaps it is valuable to document what I have so far."}}},{"channel_id":1068453571,"post_id":6778,"date":1781704801000,"views":"66","text":"<b>Image Optimization for Core Web Vitals in 2026: What Actually Moves the Needle<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/www.sitepoint.com\/image-optimization-for-core-web-vitals-in-2026-what-actually-moves-the-needle\/\">https:\/\/www.sitepoint.com\/image-optimization-for-core-web-vitals-in-2026-what-actually-moves-the-needle\/<\/a>","text_length":184,"media":{"root":"\/011\/ehoAAMNOrz8AAAAARADLqKcEz7s","webpage":{"url":"https:\/\/www.sitepoint.com\/image-optimization-for-core-web-vitals-in-2026-what-actually-moves-the-needle","type":"article","title":"Image Optimization for Core Web Vitals in 2026: What Actually Moves the Needle","site_name":"Sitepoint","display_url":"sitepoint.com\/image-optimization-for-core-web-vitals-in-2026-what-actually-moves-the-needle","thumbs":{"m":{"w":320,"h":180,"hash":"g51kgXHmNR9XGg2BS23eHA&ts=1782141275"},"x":{"w":750,"h":422,"hash":"_C1vsKr8UsZboccxCt3rew&ts=1782141275"},"i":{"bytes":"AXACg|DNihSQ7S21venz2bwruJGKj3ZbJqwtwDuLICMdM1Q7Iqbf9oVZtrMT4\/eKPbvSGZT823g\/w9h7UvmxofMULk\/wHPFXZE9RLmGGIbY33MDzRQshRGPlgg+1FCSJuyvv+XbgUpI44oorM0JN48sJsX696PMGA20Fh6jiiitJEDfOPl7Dkr2GaKKKgZ\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6777,"date":1781695202000,"forwards":"1","views":"98","text":"<a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"http:\/\/transitions.dev\"><b>transitions.dev<\/b><\/a><br><br>Collection of the most essential transitions for web apps that you can just copy and paste into any project.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/transitions.dev\/\">https:\/\/transitions.dev\/<\/a>","text_length":151,"media":{"root":"\/00c\/eRoAAMNOrz8AAAAAyftKRtvKeRA","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"ji5K9hXloHdms0Fc7QveBg&ts=1782141275"},"x":{"w":800,"h":420,"hash":"oJWcOkSSzRT26_iFCZDAeg&ts=1782141275"},"y":{"w":1200,"h":630,"hash":"e1bmgTJDwCJWX4Ej8ep1cA&ts=1782141275"},"i":{"bytes":"AVACg|DYJxRmkY47E\/hSbh6H8qAH0Ug5FLQAUUUUAIQD1FGB6UUUAGB6UuAKKKACiiigD\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6776,"date":1781684103000,"forwards":"2","views":"70","text":"<b>Sketching the Impossible: A 3D Portfolio Built Without a Single 3D Model<\/b><br><br>How a complete lack of Blender skills accidentally led to an award-winning 3D universe. Here\u2019s what happens when you ignore the &quot;correct&quot; way to code and build an infinite corridor out of flat geometry.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/tympanus.net\/codrops\/2026\/06\/11\/sketching-the-impossible-a-3d-portfolio-built-without-a-single-3d-model\/\">https:\/\/tympanus.net\/codrops\/2026\/06\/11\/sketching-the-impossible-a-3d-portfolio-built-without-a-single-3d-model\/<\/a>","text_length":390,"media":{"root":"\/00d\/eBoAAMNOrz8AAAAAdJMHftFvuvY","photo":{"thumbs":{"m":{"w":320,"h":240,"hash":"u4h8bJQyjR4_sAvxNHZVnQ&ts=1782141275"},"x":{"w":800,"h":600,"hash":"9vInk33goWJpAll8RUcEDw&ts=1782141275"},"y":{"w":1200,"h":900,"hash":"NoBsyDi54Mz8Qf1slkwIXQ&ts=1782141275"},"i":{"bytes":"AeACg|DSJJ7mgE460d6axI6UAOyfWjJz15phfAz1oU5Y0ASBjkZNFIOoooAD1NJSlSTnNG3Izu\/SgBvtS0vlH+9+lAQ5wTQAA8iil8sgjkflRQB\/\/9k="}}}}},{"channel_id":1068453571,"post_id":6775,"date":1781618403000,"forwards":"2","views":"99","text":"<b>Lovable: Building apps using TanStack Start<\/b><br><br>Starting May 13, new projects are Server-Side Rendered (SSR) and powered by TanStack Start. This post is for anyone wondering what changed - what&#039;s different, why we picked TanStack Start and what it means for the apps Lovable generates.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/lovable.dev\/blog\/building-apps-using-tanstack-start\">https:\/\/lovable.dev\/blog\/building-apps-using-tanstack-start<\/a>","text_length":343,"media":{"root":"\/00d\/dxoAAMNOrz8AAAAAdJMHftFvuvY","photo":{"thumbs":{"m":{"w":320,"h":180,"hash":"bD2nfw_hN_25mgZ-Pmz8WA&ts=1782141275"},"x":{"w":800,"h":450,"hash":"5l2dI2trgl4zcFM3-BaddQ&ts=1782141275"},"y":{"w":1280,"h":720,"hash":"Vv8dEl5nY5ElzNr2dGefUA&ts=1782141275"},"w":{"w":2560,"h":1440,"hash":"NbyPZ8UYVwUyI2rh7hOhhA&ts=1782141275"},"i":{"bytes":"AXACg|DLoqQRE1OUhESZGWH3hjr+NOzFcqVIkZap1FuW4if8TV6KGLZkKR9TTjHuGr0RSW34orRGwcUVp7pXspEaW4xk0rRJRRTbNIwjYYIFDZokfHAooqJt2NaUEmRHd60UUVjzM6D\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6774,"date":1781608801000,"forwards":"1","views":"50","text":"<b>Ember 7.0 Released<\/b><br><br>The Ember project is excited to announce the release of Ember v7.0. Following Ember&#039;s Major Version Policy, the major includes only the removal of features that were deprecated until 7.0...<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/blog.emberjs.com\/ember-released-7-0\/\">https:\/\/blog.emberjs.com\/ember-released-7-0\/<\/a>","text_length":255,"media":{"root":"\/00c\/dhoAAMNOrz8AAAAAyftKRtvKeRA","photo":{"thumbs":{"m":{"w":320,"h":320,"hash":"fNLVyKbf6IRL2ogRn0YmMA&ts=1782141275"},"x":{"w":512,"h":512,"hash":"vg1iVZCU1A8mNpYlvjnCpA&ts=1782141275"},"i":{"bytes":"AoACg|BzSMzEljzSbj6mkqe1hEjksPlH61judbaiiL58Z5xSbj6mtHz0EwiA9uO1VbxAs3yjGRmqaJjO7s0RRuyuCCetFNX7w+tFJMbSJYIRNu+YAjpV2CLyY9pOTnNZlXLScBfLc4PYmnFoionYXZFbkvI25+oFV2L3EpIGSe3pVx7aJmLtnnk88Uxp4oFKx4J9v8abQoy7asqFSkm1hgg0UFy8gZjkk0VGhr6iMpRirDBFNoooY46oKKKKBjo1LOAozzRRRVJXMZyaZ\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6773,"date":1781597701000,"forwards":"2","views":"475","text":"<b>An advanced guide to Nuxt testing and mocking<\/b><br><br>Learn how to test Nuxt apps with Vitest, <a href=\"tg:\/\/resolve?domain=nuxt\">@nuxt<\/a>\/test-utils, runtime mocks, server route mocks, and Playwright e2e tests.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/blog.logrocket.com\/advanced-guide-nuxt-testing-mocking\/\">https:\/\/blog.logrocket.com\/advanced-guide-nuxt-testing-mocking\/<\/a>","text_length":231,"media":{"root":"\/013\/dRoAAMNOrz8AAAAALQHN6bfD738","photo":{"thumbs":{"m":{"w":320,"h":214,"hash":"LFp3hosLhBhCIyYxJTiVGw&ts=1782141275"},"x":{"w":800,"h":534,"hash":"J84Wf8Bwfy9K3Io5KOKJBA&ts=1782141275"},"y":{"w":895,"h":597,"hash":"hOLF185F9Mr-VIp9yXM1zg&ts=1782141275"},"i":{"bytes":"AbACg|DGpwptORS7BQMk0APjXc4FWyuBiiONFA46cA+vvSnjg9aynuXTkmV5BRTpKKaY2ipUsKksD0xUVWY+FFVJ6ExVycH3P50hNMzSMaysaaIbI1FRuaK0SIbP\/9k="}}}}},{"channel_id":1068453571,"post_id":6772,"date":1781532002000,"forwards":"1","views":"42","text":"<b>The Conductor Rewrite:What They Changed to Make It Fast<\/b><br><br>How Conductor rebuilt its app twice as fast: local-first SQLite, Tauri over Electron, TanStack Router, react-virtuoso, and Node to Bun.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/performance.dev\/the-conductor-rewrite\">https:\/\/performance.dev\/the-conductor-rewrite<\/a>","text_length":239,"media":{"root":"\/013\/dBoAAMNOrz8AAAAALQHN6bfD738","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"pyA3kZ-E7bfbItTL8aYpyg&ts=1782141275"},"x":{"w":800,"h":420,"hash":"lMVHnsVvwVG01VPMiIcDjQ&ts=1782141275"},"y":{"w":1200,"h":630,"hash":"K3QT1vPiLk63vH4sztjiBA&ts=1782141275"},"i":{"bytes":"AVACg|DMJINPhR5pAicsQSB9Bmo261a0xgt9GzEAAEkn6GgBi28zCMgcSZA+o7VASwJB4I7VvC7gdYtoA8yQlR6YPJ\/z61j3cizXcrxD5WPGO\/vQBACc0UnQ0UAGSTSgkUUUAG4+v+f8mkJxzRRQAmec0UUUAf\/Z"}}}}},{"channel_id":1068453571,"post_id":6771,"date":1781511301000,"forwards":"1","views":"76","text":"<b>TanStack Start authentication: A developer\u2019s guide for 2026<\/b><br><br>Your beforeLoad guard does not protect your server functions. A complete guide to authentication in TanStack Start, from server functions and sessions to enterprise SSO.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/workos.com\/blog\/tanstack-start-authentication-guide\">https:\/\/workos.com\/blog\/tanstack-start-authentication-guide<\/a>","text_length":291,"media":{"root":"\/012\/cxoAAMNOrz8AAAAAuhE98Io2d_8","photo":{"thumbs":{"m":{"w":320,"h":160,"hash":"nanb_NGzGsoPn7KeOiEQaQ&ts=1782141275"},"x":{"w":800,"h":400,"hash":"3U9U9b73mG_wtOAV9vhoFg&ts=1782141275"},"y":{"w":1280,"h":640,"hash":"6vvBXegUYQ_id2Tl9mxsiA&ts=1782141275"},"w":{"w":2400,"h":1200,"hash":"BN8C3JaZNgN6SPF4d5n5tw&ts=1782141275"},"i":{"bytes":"AUACg|DXLAHlgPalBB6EGoWBeQgYx6kf\/Xp4RlPDL+R\/xoAztaXc1uP97+lZyoxB2rkCtPVzte3z\/tf0qhBcxpC8coYhvQ1fQnqVyu4E46UU7zAwkPTJoqlsI6jp+NFFFZFmXrShjBntu\/pVFU46miitIksY8QPc0UUUmNH\/2Q=="}}}}}]