[{"channel_id":1068453571,"post_id":6914,"date":1787666402000,"forwards":"1","views":"80","text":"<b>Inside <\/b><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"http:\/\/HAOQI.DESIGN\"><b>HAOQI.DESIGN<\/b><\/a><b>: Letting DOM and WebGL Share a Retro-Futurist Stage<\/b><br><br>A technical look at the making of <a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"http:\/\/HAOQI.DESIGN\">HAOQI.DESIGN<\/a>, exploring scroll sync, glass shaders, and the interplay of DOM, CSS, and WebGL in a retro-futurist portfolio.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/tympanus.net\/codrops\/2026\/08\/15\/inside-haoqi-design-letting-dom-and-webgl-share-a-retro-futurist-stage\/\">https:\/\/tympanus.net\/codrops\/2026\/08\/15\/inside-haoqi-design-letting-dom-and-webgl-share-a-retro-futurist-stage\/<\/a>","text_length":343,"media":{"root":"\/00d\/AhsAAMNOrz8AAAAAdJMHftFvuvY","photo":{"thumbs":{"m":{"w":320,"h":240,"hash":"-l7h7dCtlfZfBKGThQd-sw&ts=1787762016"},"x":{"w":800,"h":600,"hash":"xi-Rtw9YPwtZqJzxeD044A&ts=1787762016"},"y":{"w":1280,"h":960,"hash":"2yZ8nkD_HvnjmmTYeCP5Ng&ts=1787762016"},"w":{"w":1600,"h":1200,"hash":"D0iKcz-bx8UvF5Dwi8nFRw&ts=1787762016"},"i":{"bytes":"AeACg|C6i4pSme1Q2jGVDv5qcDykVRlsnHJrR3TMVZoglhlz8iZHrmoZYZzgBOPrWhJJsI2803O4dgxoTY3FFNY3RRuGKKkuiVCfjRVrYhrUjgZvLYLkHjkVMjuPvgkn1xULRA4ameUM5qXqzRKyL0bc4KEe5pxxtOw4NUNg5NPiUUrCv0JpkD7dx\/KimOu0ZFFNRZLkf\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6913,"date":1787656802000,"views":"1","text":"<b>TypeScript 6.0 Migration Guide: What\u2019s Changed and How to Update<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/www.sitepoint.com\/typescript-6-0-migration-guide\/?via=dailydev\">https:\/\/www.sitepoint.com\/typescript-6-0-migration-guide\/?via=dailydev<\/a>","text_length":136,"media":{"root":"\/006\/ARsAAMNOrz8AAAAA9Y1SiVGN9zo","webpage":{"url":"https:\/\/sitepoint.com\/typescript-6-0-migration-guide","type":"photo","title":"TypeScript 6.0 Migration Guide: What's Changed and How to Update","site_name":"Sitepoint","display_url":"sitepoint.com\/typescript-6-0-migration-guide","description":"TypeScript 6.0 ships breaking changes \u2014 `types` defaults to [], `moduleResolution: classic` removed, Temporal API types built in","thumbs":{"m":{"w":320,"h":213,"hash":"xGnbD5vZ3fACQOig1HJIQw&ts=1787762016"},"x":{"w":750,"h":500,"hash":"Gq1_n45BycPydJ99TYj8mw&ts=1787762016"},"i":{"bytes":"AbACg|DJA5qytsD\/AHj9KrgelaFtOxZYlJ4JPJwMYrWNiHcpPFhmA6L60mw7N3FXri1ljWWYlQuc43En0qmeVx0o0DUjopSKKQx0TAHDDg1Pattu42z6jj6YFV8DNOUc07AbN1IjWsqlxkr0zWRHgON\/PtTj0qPFNITJJUAOV6HtRUee3pRVWA\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6912,"date":1787645703000,"forwards":"3","views":"112","text":"<b>Stop using the localStorage hack to sync browser tabs. BroadcastChannel does it natively.<\/b><br><br>Syncing state across browser tabs with localStorage events is a widely-used trick that requires JSON.stringify, event filtering, and careful cleanup. The Broadcast Channel API delivers messages between tabs directly, with none of the side effects.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/bestpractic.org\/blog\/broadcast-channel-cross-tab-messaging\">https:\/\/bestpractic.org\/blog\/broadcast-channel-cross-tab-messaging<\/a>","text_length":406,"media":{"root":"\/00c\/ABsAAMNOrz8AAAAAyftKRtvKeRA","photo":{"thumbs":{"m":{"w":320,"h":134,"hash":"DAO3gKI4AH1gBEmeMJs56w&ts=1787762016"},"x":{"w":800,"h":336,"hash":"eoSmUcGwUioCOa7OjqloWA&ts=1787762016"},"y":{"w":1280,"h":538,"hash":"Qveuamb1w0Yv2FuFGJWNRQ&ts=1787762016"},"w":{"w":2000,"h":840,"hash":"WfMVeiMeYRsrAecMeT3iLA&ts=1787762016"},"i":{"bytes":"ARACg|DXzjtRuPpS4BPT9KNo9BQLUM1CbyBSQ0qAj3qYADoBWLPbTea4SN\/vHnjGKYGpFdQTPsjfc2M4waKoafaTxXQkddowc80UhmtRRRQAUneiigBaKKKAP\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6911,"date":1787580003000,"forwards":"1","views":"46","text":"<b>Coordinating Optimistic Updates in Next.js<\/b><br><br>Several changes can happen before the first save finishes. Here is how useActionState and useOptimistic keep those changes on screen while the saves run in order.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/aurorascharff.no\/posts\/coordinating-optimistic-updates-in-nextjs\/\">https:\/\/aurorascharff.no\/posts\/coordinating-optimistic-updates-in-nextjs\/<\/a>","text_length":281,"media":{"root":"\/00c\/_xoAAMNOrz8AAAAAyftKRtvKeRA","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"0hTvTjJKsftrGXa6yWIg1g&ts=1787762016"},"x":{"w":800,"h":420,"hash":"HoMTEcvVm9E7v3GV_s0snQ&ts=1787762016"},"y":{"w":1200,"h":630,"hash":"gvO6k4pHLu3EmqQqdjcfgQ&ts=1787762016"},"i":{"bytes":"AVACg|DOjQOOc9O1P8pA2CW\/If41Ceg+lJQBN5abSTux2pGWJTjLZ+n\/ANeoqKAFHQ0UDofpRQAbsUbieKKKAE\/CjODRRQAu7iiiigD\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6910,"date":1787559302000,"forwards":"2","views":"93","text":"<b>React Compiler Explained: Do You Still Need useMemo, useCallback, and React.memo?<\/b><br><br>Learn how React Compiler changes memoization in React, when useMemo, useCallback, and React.memo still matter, and how to optimize performance effectively.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/www.syncfusion.com\/blogs\/post\/react-compiler-usememo-usecallback?via=dailydev\">https:\/\/www.syncfusion.com\/blogs\/post\/react-compiler-usememo-usecallback?via=dailydev<\/a>","text_length":325,"media":{"root":"\/002\/_hoAAMNOrz8AAAAA-0QLDSDqzdw","photo":{"thumbs":{"m":{"w":320,"h":179,"hash":"r69TU76sHn2HoSF4mZsP_A&ts=1787762016"},"x":{"w":800,"h":448,"hash":"IG5VoAR63gBxtV8ZyzFmUw&ts=1787762016"},"y":{"w":1192,"h":668,"hash":"4VaW7JBZ4a4ba3Ul1b1mCQ&ts=1787762016"},"i":{"bytes":"AWACg|DRqO4cxQM46ipc4qG9BazkCgk4B\/WtOomVFuJSoJYfTFW428yINWakUhhBEchGM5HStGwBNmpIPOSKuTVjNJ3GsKKlZaKExgScUhZj6cjFFFSaCoXAA4pybkAHBI4zRRSZIhooopkn\/9k="}}}}},{"channel_id":1068453571,"post_id":6909,"date":1787493602000,"forwards":"2","views":"96","text":"<b>ESLint in 2026: A Practical Guide to Modern JavaScript Linting<\/b><br><br>ESLint does much more than enforce code style. Learn how modern flat config works, how rules find problems, what --fix can change, and how to build.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/jsdev.space\/howto\/modern-eslint-guide\/?via=dailydev\">https:\/\/jsdev.space\/howto\/modern-eslint-guide\/?via=dailydev<\/a>","text_length":273,"media":{"root":"\/011\/_RoAAMNOrz8AAAAARADLqKcEz7s","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"SpUyAoKFH3HygVa_TBkK0w&ts=1787762016"},"x":{"w":800,"h":420,"hash":"TcS0o_ALE34dRflD5vee8Q&ts=1787762016"},"y":{"w":1200,"h":630,"hash":"mnKKZRkeglghjzJcyUjdYg&ts=1787762016"},"i":{"bytes":"AVACg|DLCk9P50uw+n60qMVHH8hS+Z\/nAqhDfLb0\/WjYfb86GYN1\/kKT5fegAKkdaKSigAooooAKKKKACiiigD\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6908,"date":1787407202000,"forwards":"1","views":"158","text":"<b>Blocked aria-hidden: The Warning is Right, and Every Fix You\u2019ve Found is Wrong<\/b><br><br>The warning is correct. And the recommended fixes you&#039;ve probably seen are wrong. Here&#039;s what you can do instead to properly fix the issue.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/css-tricks.com\/blocked-aria-hidden-fix\/\">https:\/\/css-tricks.com\/blocked-aria-hidden-fix\/<\/a>","text_length":268,"media":{"root":"\/006\/_BoAAMNOrz8AAAAA9Y1SiVGN9zo","photo":{"thumbs":{"m":{"w":320,"h":160,"hash":"PiL8f6Za4YVp6McSaue6cA&ts=1787762016"},"x":{"w":800,"h":400,"hash":"yM2iyO3BtAR3vP9rFc7F0Q&ts=1787762016"},"y":{"w":1200,"h":600,"hash":"f1Ec1dacdeNiQVd1Fz5bSw&ts=1787762016"},"i":{"bytes":"AUACg|DTOC3LYOR\/FSnZnJAI9cZprYDHBxjtmk7dOfpU8zHYeCqr179qVXHfd+IqPp\/Fj8aUYPQZ\/Ci7AcZMHgD86KTYx7Y\/Gii7EDDLnkj8aVgBnv8AWiikMYxweO3vUgjU8nmiihDY\/aPf86KKKZJ\/\/9k="}}}}},{"channel_id":1068453571,"post_id":6907,"date":1787320802000,"forwards":"2","views":"341","text":"<b>Migrating a Large Flow Monorepo to TypeScript<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/engineeringblog.yelp.com\/2026\/08\/migrating-a-large-flow-monorepo-to-typescript.html\">https:\/\/engineeringblog.yelp.com\/2026\/08\/migrating-a-large-flow-monorepo-to-typescript.html<\/a>","text_length":138,"media":{"root":"\/00c\/-xoAAMNOrz8AAAAAyftKRtvKeRA","photo":{"thumbs":{"m":{"w":320,"h":269,"hash":"3CnyoHX2rVCXA9vsUMazgw&ts=1787762016"},"x":{"w":800,"h":673,"hash":"6kTz4DP7lfy0mp-B5B34Ow&ts=1787762016"},"y":{"w":870,"h":732,"hash":"z4u_gTtugd-jn55FHEibVw&ts=1787762016"},"i":{"bytes":"AiACg|DVkwRyR+NNAQMMFfyp7Z7H9aOd3\/16LgOFNKAnkD8qdgZB70zZz0\/WgByDA7fhRTV+Xrx+NFIBxyB1NKOfelpr9PSmAuBSZ570w9uTTy4BxmgB2KKaHXOM80UAOpkv3aKKAIiBxwKdIBvHFFFIoQAebnAzmiiimJn\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6906,"date":1787311202000,"forwards":"2","views":"395","text":"<b>Build an AI Agent with Real-Time Web Search in JavaScript<\/b><br><br>Large language models (LLMs) are great at answering questions, but they have an important limitation: they don\u2019t inherently have access to what\u2019s happening on the web right now.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/www.amitmerchant.com\/building-web-searching-ai-agent-javascript\/?via=dailydev\">https:\/\/www.amitmerchant.com\/building-web-searching-ai-agent-javascript\/?via=dailydev<\/a>","text_length":323,"media":{"root":"\/002\/-hoAAMNOrz8AAAAA-0QLDSDqzdw","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"r8_kuXPgCwtBgZFJHk4GWA&ts=1787762016"},"x":{"w":800,"h":419,"hash":"ecKWAaTZYFTzxJDFd7iE2w&ts=1787762016"},"y":{"w":1200,"h":628,"hash":"5e3p-YsXAc2CUl5Naal9zg&ts=1787762016"},"i":{"bytes":"AVACg|DVkd1xtTcO\/OMUwSyH\/ll34wwpJyN0YIQkn+I4pm0YHyxYA5+boaYE+85IAz+NKHycFdv1NQbAQFCRkHtuoMJ2k+SmcdM\/jQBaopiZCAEAEdhRSAjZVZlZlBKnj\/P4VIFGPuj8qKKAFCjPAA\/CloooAbnmiiigD\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6905,"date":1787234402000,"forwards":"6","views":"701","text":"<b>Scroll Axis Lock<\/b><br><br>Go off the scroll rails with one CSS property<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/nerdy.dev\/css-scroll-axis-lock\">https:\/\/nerdy.dev\/css-scroll-axis-lock<\/a>","text_length":103,"media":{"root":"\/006\/-RoAAMNOrz8AAAAA9Y1SiVGN9zo","photo":{"thumbs":{"m":{"w":320,"h":178,"hash":"fnnM4k5GJaNz2R8YmCK48w&ts=1787762016"},"x":{"w":800,"h":446,"hash":"tJD-O8EqcOpD6zs7GjZ11g&ts=1787762016"},"y":{"w":1280,"h":714,"hash":"ISp_UX87R6VA-Qo-P-YtnA&ts=1787762016"},"w":{"w":1400,"h":781,"hash":"9Rj1xS8mDQMuSpQOC5i3HQ&ts=1787762016"},"i":{"bytes":"AWACg|DWY9ufwpv4t+lP7E8UhzxgUAIRx95vwpMf7T\/pTxR60CEXpjn8aKAcjpiigBaOvX+VFFMYuKSiigQCiiigD\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6904,"date":1787224802000,"forwards":"1","views":"14","text":"<b>Delayed-Then-Instant Tooltips with HTML &amp; CSS Alone<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/master.dev\/blog\/delayed-then-instant-tooltips-with-html-css-alone\/\">https:\/\/master.dev\/blog\/delayed-then-instant-tooltips-with-html-css-alone\/<\/a>","text_length":127,"media":{"root":"\/00c\/-BoAAMNOrz8AAAAAyftKRtvKeRA","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"xsx4QtJm0p7EVvrZqIAHQg&ts=1787762016"},"x":{"w":800,"h":420,"hash":"Kqq04uhmGbSMiisLMjqQ-w&ts=1787762016"},"y":{"w":1200,"h":630,"hash":"9Ckml256m2TBjrP7anq04A&ts=1787762016"},"i":{"bytes":"AVACg|C3HFirIG0ZNKFApapyuZxhbcTPelpCAeuaOFFSaC0UUUAIxwKryyuoOG\/SiigCjNezrnD\/AKCqrajc55kP5D\/CiigQf2pcdnP6f4UUUUwsj\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6903,"date":1787213701000,"forwards":"2","views":"488","text":"<b>Progressive Enhancement inside of JavaScript<\/b><br><br>Lately I&#039;ve had the opportunity to travel by train and coach, during which time I also tend to work. It&#039;s really only during these periods that I&#039;m reminded of\u2026<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/remysharp.com\/2026\/08\/05\/progressive-enhancement-inside-of-javascript\">https:\/\/remysharp.com\/2026\/08\/05\/progressive-enhancement-inside-of-javascript<\/a>","text_length":285,"media":{"root":"\/006\/9xoAAMNOrz8AAAAA9Y1SiVGN9zo","photo":{"thumbs":{"m":{"w":200,"h":200,"hash":"IhGYuNMK9sFqGRugtU9R0g&ts=1787762016"},"i":{"bytes":"AoACg|CyihFye3NVo7RZV82TOX5xnpmr6oHjKnuMVGmQiAjtjp0pMcEU\/skY4AP51NY5Akt2OWjOR9DUjH58AHrREhF9vHRkwaSepcloLImaKnlAxxRVmNhsbUshwuQO\/aoI3qwDnHFJ7FRdmViTvHA\/CrCAZJ9Bimup3dOtKMjgVK3NJPTQJGoqKXIGSOKKsxHRQhB6mp6KKCthpBPegDFFFKwXbDFFFFAH\/9k="}}}}},{"channel_id":1068453571,"post_id":6902,"date":1787148002000,"forwards":"4","views":"572","text":"<b>The Intersection Observer API<\/b><br><br>An in-depth tutorial on the Intersection Observer API: entries, thresholds, rootMargin, lazy loading, infinite scroll, scrollspy, visibility tracking, and the pitfalls to avoid.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/flaviocopes.com\/intersection-observer\/\">https:\/\/flaviocopes.com\/intersection-observer\/<\/a>","text_length":256,"media":{"root":"\/002\/9hoAAMNOrz8AAAAA-0QLDSDqzdw","photo":{"thumbs":{"s":{"w":90,"h":85,"hash":"rlRWnjyia6RIv89xLOTUmQ&ts=1787762016"},"x":{"w":217,"h":205,"hash":"vk7M1_SRDTaGI1oM-KKVsA&ts=1787762016"}}}}},{"channel_id":1068453571,"post_id":6901,"date":1787138401000,"forwards":"2","views":"99","comments":"1","text":"<b>Animating CSS border-image<\/b><br><br>Border images are an overlooked feature. One neat fact is that border image slices can run across entire borders on an element, and animating it creates beautiful effects.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/css-tricks.com\/animating-css-border-image\/\">https:\/\/css-tricks.com\/animating-css-border-image\/<\/a>","text_length":251,"media":{"root":"\/001\/9RoAAMNOrz8AAAAAXEVBFl2y_Do","photo":{"thumbs":{"m":{"w":320,"h":160,"hash":"5vnGwoxQrMC5AnQUNEbN2g&ts=1787762016"},"x":{"w":800,"h":400,"hash":"aJeZ13RaG5NjuQrhW3Ru5A&ts=1787762016"},"y":{"w":1200,"h":600,"hash":"44B33yKuQNxLdvsEwDviEg&ts=1787762016"},"i":{"bytes":"AUACg|C82Spx1xVFJGaXYznPTFXqz3aGO4BER3ZznfQBVt8\/blVmOckc\/jU0Jdb4ZB5Y5Oam3xpcYMSg55bHNSGR1c9OCOMfnSuVYtUUUUyQrOu1\/fSHJyMEUUUEy2FlUNdHPcA\/pVoxh5MnPPpRRUGzJhRRRVmZ\/9k="}}}}},{"channel_id":1068453571,"post_id":6900,"date":1787127301000,"views":"67","text":"<b>WebAssembly tutorial<\/b><br><br>Learn WebAssembly step by step by compiling a small module, loading it from JavaScript, and working with exports, imports, and memory.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/flaviocopes.com\/webassembly\/\">https:\/\/flaviocopes.com\/webassembly\/<\/a>","text_length":194,"media":{"root":"\/006\/9BoAAMNOrz8AAAAA9Y1SiVGN9zo","photo":{"thumbs":{"s":{"w":90,"h":85,"hash":"ZkKedvqcauhjZ0b0ZXPMzw&ts=1787762016"},"x":{"w":217,"h":205,"hash":"zAOFAaQkcwNvXhus7BPbRg&ts=1787762016"}}}}}]