<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: netsi1964 🙏🏻</title>
    <description>The latest articles on DEV Community by netsi1964 🙏🏻 (@netsi1964).</description>
    <link>https://dev.to/netsi1964</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F137308%2F2e48a9bb-5c27-47f7-b80d-3c4b9af09d6e.jpg</url>
      <title>DEV Community: netsi1964 🙏🏻</title>
      <link>https://dev.to/netsi1964</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/netsi1964"/>
    <language>en</language>
    <item>
      <title>All the Chrome Hidden Links: The Ultimate Power User Guide</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Mon, 08 Dec 2025 10:21:38 +0000</pubDate>
      <link>https://dev.to/netsi1964/all-the-chrome-hidden-links-the-ultimate-power-user-guide-1mnh</link>
      <guid>https://dev.to/netsi1964/all-the-chrome-hidden-links-the-ultimate-power-user-guide-1mnh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Have you ever wondered what’s going on under the hood of your web browser? While most people only ever visit &lt;code&gt;chrome://settings&lt;/code&gt; or &lt;code&gt;chrome://history&lt;/code&gt;, Google Chrome is packed with hundreds of internal pages. These are hidden tools used by developers, engineers, and curious power users to debug, tweak, and analyze exactly how the browser behaves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These URLs (Uniform Resource Locators) start with &lt;code&gt;chrome://&lt;/code&gt; or &lt;code&gt;chrome-untrusted://&lt;/code&gt;. They bypass the web and talk directly to the browser's internal code.&lt;/p&gt;

&lt;p&gt;Here is your complete guide to these hidden links, what they do, and &lt;strong&gt;when&lt;/strong&gt; you should actually use them.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ The Essentials (Everyday Utilities)
&lt;/h2&gt;

&lt;p&gt;These are the pages you might actually use in your daily browsing life to manage the browser.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://about&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;chrome://chrome-urls&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The "Master List." It displays clickable links to all other available internal URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; When you are looking for a specific tool but can't remember the exact address.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://settings&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The standard settings interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To change your homepage, manage cookies, or search settings.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://extensions&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The manager for all your installed add-ons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; When Chrome is running slow and you suspect a rogue extension, or to enable "Developer Mode" to load unpacked extensions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://history&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Your browsing history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To find that site you visited three days ago.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://bookmarks&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The bookmark manager.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To organize, import, or export your saved sites.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://downloads&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A list of all files you’ve downloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To find a lost file or resume a paused download.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://version&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Displays technical details: exact Chrome version, OS, User Agent, Flash/JavaScript versions, and command-line variations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Essential for troubleshooting. If you are reporting a bug, IT support will ask for this.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://dino&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The famous T-Rex runner game usually seen when you have no internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; When you are bored (you can play it even when you &lt;em&gt;are&lt;/em&gt; online).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Experiments &amp;amp; Tweaks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://flags&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The playground for experimental features that aren't quite ready for primetime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To enable new features (like darker dark modes, faster download speeds) before they are officially released, or to disable annoying new UI changes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  📡 Network &amp;amp; Connectivity Debugging
&lt;/h2&gt;

&lt;p&gt;These are critical for diagnosing internet and connection issues.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://net-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://net-export&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A deep-dive network event logger. &lt;code&gt;net-export&lt;/code&gt; allows you to save a log file of your network traffic to send to support engineers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; If a specific website won't load, you have DNS issues, or proxy errors.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://webrtc-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Real-time statistics for WebRTC (used by Google Meet, Zoom web, Discord web).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Your video call is lagging or pixelated. Check here to see packet loss, bitrate, and audio graphs.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://bluetooth-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Debugger for the Web Bluetooth API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; If you are a developer building a web app that connects to Bluetooth devices.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://usb-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Similar to Bluetooth, but for testing WebUSB devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Testing hardware connections via the browser.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://connection-help&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A user-friendly help page for connection errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Troubleshooting basic "This site can't be reached" errors.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Developer &amp;amp; Performance Tools
&lt;/h2&gt;

&lt;p&gt;Tools for web developers to understand how Chrome renders pages and uses resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://inspect&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Port forwarding and remote debugging. Allows you to inspect open tabs on an Android device via USB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; You are building a mobile site and need to use the desktop DevTools to fix layout issues on your phone.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://serviceworker-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Manages Service Workers (scripts that run in the background for offline capabilities and push notifications).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; A website is "stuck" showing an old cached version, or you want to force-unregister a worker.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://gpu&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Detailed info on your Graphics Processing Unit and hardware acceleration status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; You see visual glitches, black boxes, or slow rendering on graphics-heavy sites.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://system&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Aggregated system logs (similar to &lt;code&gt;about:support&lt;/code&gt; in Firefox).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; checking hardware details and OS logs specifically related to the browser.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://blob-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Inspects "Binary Large Objects" (file data) currently in memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Debugging file uploads or large data transfers in web apps.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://indexeddb-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://quota-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Shows how much local storage space websites are using on your hard drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; You need to free up disk space and want to see which web apps are hoarding data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://process-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A deep view of the process isolation model (Site Isolation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Advanced debugging of which websites are sharing which OS processes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://translate-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Logs regarding the Google Translate feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Debugging why Chrome did (or didn't) offer to translate a foreign language page.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 Security, Privacy &amp;amp; Identity
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://policy&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Shows policies enforced on the browser (common on work/school computers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To see why an extension is forced-installed or why you can't change a specific setting ("Managed by your organization").&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://password-manager&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://password-manager-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The UI for your saved passwords and the internal logs of how the manager is working.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To export passwords or debug why a "Save Password" prompt isn't appearing.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://certificate-manager&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://view-cert&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; View and manage SSL/TLS certificates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Importing a custom certificate for a corporate intranet or identifying an expired certificate.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://privacy-sandbox-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://topics-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://attribution-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Controls and data regarding Google's replacement for third-party cookies (Topics API, FLEDGE, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Developers understanding how ad-targeting works without cookies.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🖼️ UI Components (Side Panels &amp;amp; Interfaces)
&lt;/h2&gt;

&lt;p&gt;Chrome is built of many smaller web pages. These links open specific parts of the user interface directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Side Panels:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chrome://bookmarks-side-panel.top-chrome&lt;/code&gt; (Bookmarks panel)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://history-side-panel.top-chrome&lt;/code&gt; (History panel)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://customize-chrome-side-panel.top-chrome&lt;/code&gt; (Theme customization)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://read-later.top-chrome&lt;/code&gt; (Reading List)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://shopping-insights-side-panel.top-chrome&lt;/code&gt; (Price tracking)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://comments-side-panel.top-chrome&lt;/code&gt; (Google Workspace comments)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;New Tab &amp;amp; Search:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chrome://newtab&lt;/code&gt; / &lt;code&gt;chrome://new-tab-page&lt;/code&gt; (The homepage)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://omnibox-popup.top-chrome&lt;/code&gt; (The search suggestion dropdown)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://tab-search.top-chrome&lt;/code&gt; (The arrow icon to search open tabs)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Login &amp;amp; Profile:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chrome://profile-picker&lt;/code&gt; (The "Who is using Chrome?" startup screen)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://signin-internals&lt;/code&gt; (Logs about the Google account login process)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ "Untrusted" &amp;amp; Sandbox
&lt;/h2&gt;

&lt;p&gt;You will see links starting with &lt;code&gt;chrome-untrusted://&lt;/code&gt;. These are pages that handle content requiring strict isolation for security reasons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://print&lt;/code&gt;&lt;/strong&gt;: The Print Preview window (sandboxed to prevent printer drivers from crashing the browser).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://lens&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;lens-overlay&lt;/code&gt;&lt;/strong&gt;: The Google Lens image search integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://read-anything-side-panel.top-chrome&lt;/code&gt;&lt;/strong&gt;: The Reader Mode panel (strips ads/formatting).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📋 The Complete Index (The Rest)
&lt;/h2&gt;

&lt;p&gt;Here are brief descriptions of the remaining links from your list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://access-code-cast&lt;/code&gt;&lt;/strong&gt;: Interface for casting to a device using a pin code (Education/Enterprise).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://accessibility&lt;/code&gt;&lt;/strong&gt;: Shows the internal accessibility tree for screen readers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://actor-overlay&lt;/code&gt;&lt;/strong&gt;: Internal testing overlay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://app-service-internals&lt;/code&gt;&lt;/strong&gt;: Diagnostics for installed Web Apps and Android Apps (on ChromeOS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://app-settings&lt;/code&gt;&lt;/strong&gt;: Settings for specific web apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://apps&lt;/code&gt;&lt;/strong&gt;: The launcher page for installed Chrome Apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://autofill-internals&lt;/code&gt;&lt;/strong&gt;: Logs explaining why forms did/didn't autofill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://batch-upload&lt;/code&gt;&lt;/strong&gt;: Internal data upload interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://browser-switch&lt;/code&gt;&lt;/strong&gt;: For admins; controls switching between Chrome and legacy browsers (IE).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://cast-feedback&lt;/code&gt;&lt;/strong&gt;: Submit logs regarding Chromecast issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://chrome&lt;/code&gt;&lt;/strong&gt;: Usually redirects to the updates page or version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://chrome-signin&lt;/code&gt;&lt;/strong&gt;: Internal sign-in flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://compare&lt;/code&gt;&lt;/strong&gt;: New feature for comparing products in shopping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://components&lt;/code&gt;&lt;/strong&gt;: Check for updates to individual components (like Widevine for Netflix).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://connection-monitoring-detected&lt;/code&gt;&lt;/strong&gt;: Notification page for network monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://connectors-internals&lt;/code&gt;&lt;/strong&gt;: Enterprise security connectors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://contextual-tasks&lt;/code&gt;&lt;/strong&gt;: AI/ML suggestions based on browsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://crashes&lt;/code&gt;&lt;/strong&gt;: Lists recent crash reports (if reporting is enabled).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://credits&lt;/code&gt;&lt;/strong&gt;: A long list of open-source licenses used in Chrome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://debug-webuis-disabled&lt;/code&gt;&lt;/strong&gt;: Error page for when WebUI is off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://device-log&lt;/code&gt;&lt;/strong&gt;: Logs for hardware events (USB, HID).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://extensions-internals&lt;/code&gt;&lt;/strong&gt;: JSON data about extensions (dev use).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://extensions-zero-state&lt;/code&gt;&lt;/strong&gt;: The screen shown when no extensions are installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://feedback&lt;/code&gt;&lt;/strong&gt;: Opens the "Report an Issue" dialog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://gcm-internals&lt;/code&gt;&lt;/strong&gt;: Google Cloud Messaging (Push notifications) status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://glic&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://glic-fre&lt;/code&gt;&lt;/strong&gt;: Related to Google Lens Image Context (Visual search features).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://histograms&lt;/code&gt;&lt;/strong&gt;: Text-based stats on browser performance metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://history-clusters-side-panel.top-chrome&lt;/code&gt;&lt;/strong&gt;: "Journeys" view in history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://history-sync-optin&lt;/code&gt;&lt;/strong&gt;: The setup screen for syncing history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://internals&lt;/code&gt;&lt;/strong&gt;: A directory for various internal pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://intro&lt;/code&gt;&lt;/strong&gt;: The "Welcome to Chrome" first-run experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://managed-user-profile-notice&lt;/code&gt;&lt;/strong&gt;: Notice for supervised accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://management&lt;/code&gt;&lt;/strong&gt;: Shows if your browser is managed by an admin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://media-engagement&lt;/code&gt;&lt;/strong&gt;: Scores determining if sites can autoplay video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://metrics-internals&lt;/code&gt;&lt;/strong&gt;: Real-time browser metrics logging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://new-tab-page-third-party&lt;/code&gt;&lt;/strong&gt;: NTP for search engines other than Google.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://newtab-footer&lt;/code&gt;&lt;/strong&gt;: Footer element for the new tab page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://ntp-tiles-internals&lt;/code&gt;&lt;/strong&gt;: Debugging the shortcut icons on the New Tab Page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://on-device-translation-internals&lt;/code&gt;&lt;/strong&gt;: Debugging local AI translation models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://predictors&lt;/code&gt;&lt;/strong&gt;: Auto-complete predictions for the address bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://print&lt;/code&gt;&lt;/strong&gt;: The print dialog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://privacy-sandbox-base-dialog&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;dialog&lt;/code&gt;&lt;/strong&gt;: Popups related to privacy consent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://private-aggregation-internals&lt;/code&gt;&lt;/strong&gt;: Privacy sandbox reporting data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://profile-customization&lt;/code&gt;&lt;/strong&gt;: Avatar/color picker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://profile-internals&lt;/code&gt;&lt;/strong&gt;: Data about the loaded user profile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://reset-password&lt;/code&gt;&lt;/strong&gt;: Password reset flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://saved-tab-groups-unsupported&lt;/code&gt;&lt;/strong&gt;: Error state for tab groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://search-engine-choice&lt;/code&gt;&lt;/strong&gt;: The "Choose your search engine" screen (EU specific).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://segmentation-internals&lt;/code&gt;&lt;/strong&gt;: How Chrome groups users for feature rollouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signin-dice-web-intercept.top-chrome&lt;/code&gt;&lt;/strong&gt;: Part of the account login interception.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signin-email-confirmation&lt;/code&gt;&lt;/strong&gt;: Email verification screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signin-error&lt;/code&gt;&lt;/strong&gt;: Login error display.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signout-confirmation&lt;/code&gt;&lt;/strong&gt;: Confirming sign out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://site-engagement&lt;/code&gt;&lt;/strong&gt;: A score of how much you interact with sites (affects resource throttling).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://suggest-internals&lt;/code&gt;&lt;/strong&gt;: Debugging omnibox suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://support-tool&lt;/code&gt;&lt;/strong&gt;: Generates support logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://sync-confirmation&lt;/code&gt;&lt;/strong&gt;: "Turn on Sync?" dialog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://sync-internals&lt;/code&gt;&lt;/strong&gt;: Vital for debugging why bookmarks/passwords aren't syncing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://tab-group-home&lt;/code&gt;&lt;/strong&gt;: Overview of saved tab groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://terms&lt;/code&gt;&lt;/strong&gt;: Chrome Terms of Service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://user-actions&lt;/code&gt;&lt;/strong&gt;: Logs user clicks and actions for debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://watermark&lt;/code&gt;&lt;/strong&gt;: Internal overlay (rarely used).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://web-app-internals&lt;/code&gt;&lt;/strong&gt;: PWA debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://webui-browser&lt;/code&gt;&lt;/strong&gt;: Visualizer for WebUI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://whats-new&lt;/code&gt;&lt;/strong&gt;: The "What's New" update page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://compose&lt;/code&gt;&lt;/strong&gt;: AI writing assistance container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://data-sharing&lt;/code&gt;&lt;/strong&gt;: Internal data sharing UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://ntp-microsoft-auth&lt;/code&gt;&lt;/strong&gt;: Authentication for Microsoft modules (specific integrations).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Chrome is much more than a window to the web; it is a complex application with its own internal operating system. By knowing about &lt;code&gt;chrome://&lt;/code&gt; URLs, you transition from a standard user to a Power User.&lt;/p&gt;

&lt;p&gt;Whether you need to debug a slow internet connection with &lt;code&gt;net-internals&lt;/code&gt;, check for rogue extensions with &lt;code&gt;extensions&lt;/code&gt;, or just play the &lt;code&gt;dino&lt;/code&gt; game, these links give you total control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which of these hidden pages will you try first?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>generatedbygooglegemini</category>
      <category>chrome</category>
    </item>
    <item>
      <title>5 Powerful Web Platform Features You Probably Missed in 2025</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 07 Dec 2025 08:22:50 +0000</pubDate>
      <link>https://dev.to/netsi1964/5-powerful-web-platform-features-you-probably-missed-in-2025-2pk5</link>
      <guid>https://dev.to/netsi1964/5-powerful-web-platform-features-you-probably-missed-in-2025-2pk5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;CSS and JavaScript APIs that shipped quietly but deserve your attention—from state-preserving DOM moves to auto-sizing form fields.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The web platform is evolving faster than ever. Between the hype around AI tooling and framework updates, some genuinely useful browser features have shipped without much fanfare.&lt;/p&gt;

&lt;p&gt;I've been digging through the Interop 2025 focus areas and recent browser release notes, and I found five features that are &lt;strong&gt;production-ready now&lt;/strong&gt; but flying under most developers' radars.&lt;/p&gt;

&lt;p&gt;Let's fix that.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;moveBefore()&lt;/code&gt; — Finally, True DOM Movement
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 133+, Firefox 144+, Safari in development&lt;/p&gt;

&lt;p&gt;Ever tried to move a playing video or an iframe to a different part of the page? If you used &lt;code&gt;appendChild()&lt;/code&gt; or &lt;code&gt;insertBefore()&lt;/code&gt;, you watched helplessly as the video restarted, focus was lost, and animations reset.&lt;/p&gt;

&lt;p&gt;That's because the DOM never had a &lt;em&gt;move&lt;/em&gt; primitive—only remove and insert. Until now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Old way: state is destroyed&lt;/span&gt;
&lt;span class="nx"&gt;newParent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;referenceNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// New way: state is preserved ✨&lt;/span&gt;
&lt;span class="nx"&gt;newParent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;moveBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;referenceNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;moveBefore()&lt;/code&gt; method preserves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animation and transition progress&lt;/li&gt;
&lt;li&gt;Focus and active states&lt;/li&gt;
&lt;li&gt;Fullscreen mode&lt;/li&gt;
&lt;li&gt;Popover open/close state&lt;/li&gt;
&lt;li&gt;Modal &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real-world use case:&lt;/strong&gt; Building a responsive layout where a video player moves from a sidebar to the main content area on mobile—without interrupting playback.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;moveBefore&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;mainContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;moveBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;videoPlayer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Fallback for older browsers&lt;/span&gt;
  &lt;span class="nx"&gt;mainContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;videoPlayer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. CSS Custom Highlight API — Highlighting Without DOM Surgery
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Baseline as of June 2025 (Chrome, Edge, Safari, Firefox 140+)&lt;/p&gt;

&lt;p&gt;Building a search feature? Syntax highlighter? You've probably wrapped matches in &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; elements. It works, but you're mutating the DOM, triggering layout recalculations, and wrestling with edge cases when highlights span multiple elements.&lt;/p&gt;

&lt;p&gt;The Custom Highlight API takes a completely different approach: define text ranges in JavaScript, style them in CSS, and the DOM stays untouched.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Find text and create a range&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Range&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;textNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;startIndex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;textNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;endIndex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Register the highlight&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;highlight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Highlight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;CSS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;highlights&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;search-result&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;highlight&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;::highlight&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;search-result&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fef08a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1e1e1e&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero DOM mutations = zero layout thrashing&lt;/li&gt;
&lt;li&gt;Multiple ranges can share one highlight name&lt;/li&gt;
&lt;li&gt;Highlights can span across element boundaries&lt;/li&gt;
&lt;li&gt;Perfect for search-as-you-type UIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; A single &lt;code&gt;Highlight&lt;/code&gt; object can hold multiple &lt;code&gt;Range&lt;/code&gt; instances, so you can highlight all search matches with one CSS rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;field-sizing: content&lt;/code&gt; — Auto-Growing Form Fields in One Line
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 123+, Edge, Safari 26.2+&lt;/p&gt;

&lt;p&gt;Remember writing JavaScript to auto-resize textareas? Or using the &lt;code&gt;size&lt;/code&gt; attribute and hoping for the best? Those days are over.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;field-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your form fields now grow and shrink to fit their content.&lt;/p&gt;

&lt;p&gt;For production use, you'll want constraints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;field-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;min-block-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="n"&gt;lh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c"&gt;/* At least 3 lines */&lt;/span&gt;
  &lt;span class="py"&gt;max-block-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="n"&gt;lh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* Cap at 12 lines */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;field-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;min-inline-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10ch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;max-inline-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40ch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Works with:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; (text, email, url, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; (both dropdown and multi-select)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Progressive enhancement:&lt;/strong&gt; Browsers that don't support it simply show fixed-size fields. No JavaScript fallback needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;sibling-index()&lt;/code&gt; and &lt;code&gt;sibling-count()&lt;/code&gt; — CSS Finally Knows Position
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 138+, Firefox in development&lt;/p&gt;

&lt;p&gt;How many times have you done this?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;))}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just to create staggered animations. Now CSS can figure out the index itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fade-in&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease-out&lt;/span&gt; &lt;span class="n"&gt;backwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;animation-delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sibling-index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;100ms&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;fade-in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;sibling-count()&lt;/code&gt; tells you the total number of siblings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Equal-width columns without knowing the count */&lt;/span&gt;
&lt;span class="nc"&gt;.tab&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sibling-count&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Creative use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Staggered animations (obviously)&lt;/li&gt;
&lt;li&gt;Dynamic color gradients across items&lt;/li&gt;
&lt;li&gt;Responsive grid layouts based on item count&lt;/li&gt;
&lt;li&gt;Circular positioning with trigonometry
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Rainbow gradient across any number of items */&lt;/span&gt;
&lt;span class="nc"&gt;.item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--hue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;360&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sibling-count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sibling-index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hsl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--hue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;70%&lt;/span&gt; &lt;span class="m"&gt;60%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. CSS Anchor Positioning — Tooltips Without JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 125+, Safari 26+, Firefox expected late 2025&lt;/p&gt;

&lt;p&gt;If you've ever used Floating UI, Popper.js, or Tippy.js just to position a tooltip, you know the pain. Now CSS handles it natively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.trigger&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;anchor-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;--my-trigger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tooltip&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;position-anchor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;--my-trigger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;position-area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;top&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tooltip automatically positions itself relative to the trigger. But here's the magic: &lt;strong&gt;it flips automatically&lt;/strong&gt; when it would overflow the viewport.&lt;/p&gt;

&lt;p&gt;Even better—Chrome 133 introduced &lt;em&gt;implicit anchoring&lt;/em&gt; for popovers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;popovertarget=&lt;/span&gt;&lt;span class="s"&gt;"tip"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hover me&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tip"&lt;/span&gt; &lt;span class="na"&gt;popover&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;I'm anchored automatically!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;popover&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;position-area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bottom&lt;/span&gt; &lt;span class="n"&gt;span-left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;anchor-name&lt;/code&gt; needed. The browser knows the button triggers the popover and creates the relationship automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which Should You Adopt First?
&lt;/h2&gt;

&lt;p&gt;My recommendation: &lt;strong&gt;Start with &lt;code&gt;field-sizing: content&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's why:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero risk&lt;/strong&gt; — Unsupported browsers just show normal fixed fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero JavaScript&lt;/strong&gt; — Delete your auto-resize handlers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immediate UX win&lt;/strong&gt; — Users notice when forms feel responsive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One line of CSS&lt;/strong&gt; — Lowest effort, highest impact&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After that, anchor positioning is your next big win if you're building any kind of tooltip, dropdown, or popover UI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The web platform is getting genuinely better at things we've been solving with JavaScript for years. State-preserving moves, auto-sizing fields, and declarative positioning aren't just nice-to-haves—they're more performant, more accessible, and more maintainable than the JS equivalents.&lt;/p&gt;

&lt;p&gt;The features in this post are shipping in stable browsers &lt;em&gt;right now&lt;/em&gt;. No flags, no polyfills required (though fallbacks are smart for &lt;code&gt;moveBefore()&lt;/code&gt; and the sibling functions).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What overlooked feature are you most excited to try?&lt;/strong&gt; Let me know in the comments 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>javascript</category>
      <category>writtenbyaieditedbyhumman</category>
    </item>
    <item>
      <title>Understanding SSL Certificates and Domain Expiry</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Tue, 22 Jul 2025 07:09:38 +0000</pubDate>
      <link>https://dev.to/netsi1964/understanding-ssl-certificates-and-domain-expiry-553f</link>
      <guid>https://dev.to/netsi1964/understanding-ssl-certificates-and-domain-expiry-553f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; SSL certificates secure your website’s connection, but managing them can be tricky. Domains also have expiry dates that require attention. This post breaks down key concepts around SSL and domain expiry, common pitfalls, and best practices to keep your web services secure and accessible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. What Is an SSL Certificate and Why Does It Matter?
&lt;/h2&gt;

&lt;p&gt;SSL (Secure Sockets Layer) certificates encrypt data exchanged between browsers and servers, preventing eavesdropping and tampering. Without a valid SSL certificate, browsers will warn users that your site is insecure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; Certificates have a validity period (often 90 days for Let’s Encrypt, or 1 year+ for paid certs), and must be renewed before expiry to avoid downtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Domain Expiry — The Often Overlooked Deadline
&lt;/h2&gt;

&lt;p&gt;Your domain name (for instance: &lt;code&gt;mydomain.dk&lt;/code&gt;) registration also has an expiry date, independent from SSL certificates. If the domain expires, your entire website becomes unreachable, no matter how valid your certificates are.&lt;/p&gt;

&lt;p&gt;Domains are usually registered for 1 year but can be extended longer. Keep track of renewal dates to avoid service interruptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Why Do Multiple SSL Expiry Dates Appear for One Domain?
&lt;/h2&gt;

&lt;p&gt;You might see several SSL certificates with different expiry dates for the same domain. This is normal due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Certificate rotation:&lt;/strong&gt; New certs issued before old ones expire to allow seamless transition.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple servers or load balancers:&lt;/strong&gt; Each may have its own cert.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different certs for subdomains or services:&lt;/strong&gt; Email, APIs, and main site might use separate certs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your browser only sees the certificate presented by the server it connects to.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Common Issues &amp;amp; Troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Old cert still served:&lt;/strong&gt; Sometimes servers or load balancers aren’t updated properly, causing expired certs to still be presented.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mismatch between domain and cert:&lt;/strong&gt; If the cert does not cover the requested domain or subdomain, you’ll get warnings.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain expiry unnoticed:&lt;/strong&gt; Even with valid SSL, an expired domain means no access.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical Example
&lt;/h2&gt;

&lt;p&gt;A customer reported login issues due to an expired SSL cert dated 19/7, but automated checks showed a cert expiring 10/8. This often means some servers or proxies still serve the old cert. Fixing requires verifying cert deployment across all servers and proxies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automate SSL certificate renewal with tools like &lt;a href="https://certbot.eff.org/" rel="noopener noreferrer"&gt;Certbot&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Monitor both SSL expiry and domain registration dates with scripts or services.
&lt;/li&gt;
&lt;li&gt;Ensure all servers, proxies, and CDNs are updated with the newest certificates.
&lt;/li&gt;
&lt;li&gt;Use multi-factor alerts for domain expiry to avoid service loss.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Useful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://letsencrypt.org/docs/" rel="noopener noreferrer"&gt;Let's Encrypt Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.icann.org/resources/pages/domain-name-expiration-2018-06-28-en" rel="noopener noreferrer"&gt;ICANN Domain Expiry FAQ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ssllabs.com/ssltest/" rel="noopener noreferrer"&gt;SSL Labs Server Test&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://certbot.eff.org/" rel="noopener noreferrer"&gt;Certbot - Automatic SSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ssl</category>
      <category>domains</category>
      <category>security</category>
      <category>writtenbyai</category>
    </item>
    <item>
      <title>A practical guide to the new import features in Deno — with comparisons, do’s &amp; don’ts, and an illustration prompt.</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Mon, 21 Jul 2025 08:59:44 +0000</pubDate>
      <link>https://dev.to/netsi1964/a-practical-guide-to-the-new-import-features-in-deno-with-comparisons-dos-donts-and-an-lj3</link>
      <guid>https://dev.to/netsi1964/a-practical-guide-to-the-new-import-features-in-deno-with-comparisons-dos-donts-and-an-lj3</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Import Attributes are here&lt;/strong&gt;, using the &lt;code&gt;with&lt;/code&gt; keyword to specify the module type.&lt;/li&gt;
&lt;li&gt;  Natively import &lt;strong&gt;JSON&lt;/strong&gt;, &lt;strong&gt;text&lt;/strong&gt;, and even &lt;strong&gt;binary files&lt;/strong&gt; directly into your modules.&lt;/li&gt;
&lt;li&gt;  Use the &lt;code&gt;with { type: "json" }&lt;/code&gt; syntax for JSON modules, which is now stable.&lt;/li&gt;
&lt;li&gt;  Leverage the experimental &lt;code&gt;with { type: "text" }&lt;/code&gt; and &lt;code&gt;with { type: "bytes" }&lt;/code&gt; for raw file imports, which requires the &lt;code&gt;--unstable-raw-imports&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;  Seamlessly import from npm using &lt;code&gt;npm:&lt;/code&gt; specifiers for greater compatibility with the existing JavaScript ecosystem.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. What’s new with &lt;code&gt;import&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;Deno continues to evolve its module system to be more standards-aligned and powerful. The latest versions introduce "Import Attributes," a standards-track feature that clarifies how non-JavaScript files should be handled. This is done using the &lt;code&gt;with&lt;/code&gt; keyword in an import statement.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Import a JSON configuration file&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./config.json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Import a startup script as a plain text string (experimental)&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;startupScript&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./init.sql&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Import a WebAssembly binary as a module (experimental)&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;wasm&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./module.wasm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bytes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This syntax tells the Deno runtime explicitly what kind of data to expect, making the process more secure and predictable than relying on bundler-specific magic.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Where can I use these new import types?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module Type&lt;/th&gt;
&lt;th&gt;Supported?&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Stable&lt;/td&gt;
&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Natively parsed JSON data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Experimental (&lt;code&gt;--unstable-raw-imports&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The raw text content of the file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Experimental (&lt;code&gt;--unstable-raw-imports&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Uint8Array&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The raw binary data of the file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;npm modules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Stable&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Module exports&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;npm:package-name&lt;/code&gt; to import from the npm registry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSR modules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Stable&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Module exports&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;jsr:@scope/package&lt;/code&gt; for versioned, TypeScript-native modules.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;strong&gt;Deno Docs:&lt;/strong&gt; &lt;a href="https://docs.deno.com/runtime/fundamentals/modules/#import-attributes" rel="noopener noreferrer"&gt;https://docs.deno.com/runtime/fundamentals/modules/#import-attributes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;import&lt;/code&gt; attributes vs. other loading methods
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing structured data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import data from "./cfg.json" with { type: "json" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loading configuration, manifests, or static data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing raw text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import txt from "./file.txt" with { type: "text" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loading templates, scripts (SQL, shell), or articles.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing binary data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import bin from "./file.wasm" with { type: "bytes" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Uint8Array&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loading WebAssembly modules, images, or other assets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Traditional file reading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Deno.readTextFile()&lt;/code&gt; / &lt;code&gt;Deno.readFile()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;`Promise&amp;lt;string&lt;/td&gt;
&lt;td&gt;Uint8Array&amp;gt;`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing JS/TS code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import { func } from "./mod.ts"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Module exports&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;The standard way to import application logic.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4. Do’s ✅ and Don’ts ❌
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅ Do&lt;/th&gt;
&lt;th&gt;❌ Don’t&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Use &lt;code&gt;with&lt;/code&gt; for import attributes; the old &lt;code&gt;assert&lt;/code&gt; syntax is deprecated.&lt;/td&gt;
&lt;td&gt;Forget the &lt;code&gt;--unstable-raw-imports&lt;/code&gt; flag for text and bytes imports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage third-party dependencies with &lt;code&gt;jsr:&lt;/code&gt; and &lt;code&gt;npm:&lt;/code&gt; specifiers.&lt;/td&gt;
&lt;td&gt;Manually fetch and parse JSON when you can import it directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use import maps in &lt;code&gt;deno.json&lt;/code&gt; to create clear, version-locked dependencies.&lt;/td&gt;
&lt;td&gt;Mix stable and unstable import features without being aware of the implications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check for official JSR packages before falling back to npm for better Deno integration.&lt;/td&gt;
&lt;td&gt;Assume text/bytes imports work in older Deno versions; they are a recent addition.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5. Real-world snippet: Loading configuration and a welcome message
&lt;/h2&gt;

&lt;p&gt;Imagine an application that needs a configuration file and a "message of the day" from a separate text file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// config.json&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;port&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;logging&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;features&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alpha&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;beta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// motd.txt&lt;/span&gt;
&lt;span class="nx"&gt;Welcome&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nx"&gt;Today&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;s focus is on robust module loading.

// main.ts
import config from "./config.json" with { type: "json" };
import message from "./motd.txt" with { type: "text" };

console.log(`--- Message of the Day ---`);
console.log(message);
console.log(`------------------------`);

if (config.logging) {
  console.log(`Starting server on port: ${config.port}`);
  console.log(`Enabled features: ${config.features.join(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;)}`);
}

// To run this (as of Deno 2.4+):
// deno run --allow-read --unstable-raw-imports main.ts
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Key takeaway
&lt;/h3&gt;

&lt;p&gt;Deno's new import features, especially import attributes for JSON, text, and bytes, make your code more explicit and robust. By handling different file types directly within the ES module system, Deno eliminates boilerplate code, enhances security, and improves tooling integration, bringing your non-JavaScript assets into the main module graph.&lt;/p&gt;

</description>
      <category>deno</category>
      <category>import</category>
      <category>attributes</category>
    </item>
    <item>
      <title>DOM entries() - explained — and When to Use It</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Mon, 21 Jul 2025 07:02:27 +0000</pubDate>
      <link>https://dev.to/netsi1964/dom-entries-explained-and-when-to-use-it-4gag</link>
      <guid>https://dev.to/netsi1964/dom-entries-explained-and-when-to-use-it-4gag</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A practical guide to the &lt;code&gt;entries()&lt;/code&gt; iterator on arrays, NodeLists, and more — with comparisons, do’s &amp;amp; don’ts, and an illustration prompt.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;entries()&lt;/code&gt; &lt;strong&gt;is a method&lt;/strong&gt; (&lt;code&gt;list.entries()&lt;/code&gt;), not a property (&lt;code&gt;list.entries&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It returns an &lt;strong&gt;iterator&lt;/strong&gt; that yields &lt;code&gt;[index, value]&lt;/code&gt; pairs.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;for…of&lt;/code&gt;&lt;/strong&gt; or the iterator protocol; &lt;strong&gt;never&lt;/strong&gt; use &lt;code&gt;for…in&lt;/code&gt; to walk it.&lt;/li&gt;
&lt;li&gt;Exists on &lt;strong&gt;&lt;code&gt;Array&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;NodeList&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Map&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Set&lt;/code&gt;&lt;/strong&gt;, and more.&lt;/li&gt;
&lt;li&gt;If you don’t need the index, iterate directly with &lt;code&gt;for…of&lt;/code&gt; or &lt;code&gt;values()&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1  What does &lt;code&gt;entries()&lt;/code&gt; return?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.article a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//→ 0 "https://…"   1 "https://…"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;entries()&lt;/code&gt; gives back an &lt;strong&gt;iterator object&lt;/strong&gt; whose &lt;code&gt;.next()&lt;/code&gt; method delivers an object shaped like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When &lt;code&gt;done&lt;/code&gt; becomes &lt;code&gt;true&lt;/code&gt;, the iterator is exhausted.&lt;/li&gt;
&lt;li&gt;The iterator is &lt;em&gt;lazy&lt;/em&gt; — memory‑efficient for large collections.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2  Where can I use &lt;code&gt;entries()&lt;/code&gt;?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host object&lt;/th&gt;
&lt;th&gt;Supported?&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Array&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[index, item]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ES2015+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NodeList&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ (modern browsers)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[index, DOM node]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Same order as the DOM query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Map&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[key, value]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Map’s default iterator is already &lt;code&gt;entries()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[value, value]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mirrors Map behaviour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Arguments&lt;/strong&gt; object&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Convert to array first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;strong&gt;MDN docs:&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3  &lt;code&gt;entries()&lt;/code&gt; vs. other list helpers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keys only&lt;/td&gt;
&lt;td&gt;&lt;code&gt;keys()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0, 1, 2…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pagination, sparse arrays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Values only&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;values()&lt;/code&gt; or &lt;em&gt;direct &lt;code&gt;for…of&lt;/code&gt;&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;el1, el2…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;When index is irrelevant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Index + value&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;entries()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[index, value]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logging, diffing, stable sorting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transform all items&lt;/td&gt;
&lt;td&gt;&lt;code&gt;map()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;New array&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Create derived arrays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side-effects&lt;/td&gt;
&lt;td&gt;&lt;code&gt;forEach()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;DOM mutations, analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4  Do’s ✅ and Don’ts ❌
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅ Do&lt;/th&gt;
&lt;th&gt;❌ Don’t&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Call the method: &lt;code&gt;list.entries()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Forget the parentheses and store the function reference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consume with &lt;code&gt;for…of&lt;/code&gt;, destructuring &lt;code&gt;[i, item]&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;for…in&lt;/code&gt; (gets property names, not pairs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Break early* once you found what you need&lt;/td&gt;
&lt;td&gt;Assume you must iterate the entire collection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polyfill (&lt;code&gt;core-js&lt;/code&gt;) if you target IE11&lt;/td&gt;
&lt;td&gt;Rely on NodeList &lt;code&gt;entries()&lt;/code&gt; in legacy browsers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5  Real‑world snippet: click analytics
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"cases"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/c1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Case 1&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/c2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Case 2&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/c3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Case 3&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clicks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.cases a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;clicks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nx"&gt;clicks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// clicks → [3, 0, 1]&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Key takeaway
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;entries()&lt;/code&gt; is the most &lt;em&gt;explicit&lt;/em&gt; way to access both index and value in one pass. Use it when you care about position; otherwise reach for &lt;code&gt;values()&lt;/code&gt; or plain &lt;code&gt;for…of&lt;/code&gt; for cleaner code.&lt;/p&gt;




&lt;h2&gt;
  
  
  *) Early Break Example — Stop at the &lt;em&gt;Current&lt;/em&gt; Customer
&lt;/h2&gt;

&lt;p&gt;Assume you receive an array of customer objects from an API. Each object has a boolean &lt;code&gt;current&lt;/code&gt; flag that marks which customer is &lt;strong&gt;currently selected / logged‑in&lt;/strong&gt;. You only need the &lt;em&gt;first&lt;/em&gt; match, so breaking out early saves time (and often makes intentions clearer).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Charlie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;-- we want to stop here&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Dora&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Current customer found at index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// do something with this customer, e.g. load profile UI&lt;/span&gt;
    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// exit loop early, no need to traverse the rest&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why break early?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — for large datasets, exiting on the first match avoids extra iterations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clarity&lt;/strong&gt; — shows the intent: &lt;em&gt;find the first current customer and stop&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index access&lt;/strong&gt; — &lt;code&gt;entries()&lt;/code&gt; delivers the array index alongside the object, handy for updating UIs or data structures by position.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only need the customer object (not the index), iterate the array directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* … */&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>entries</category>
      <category>explained</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Creating a "Open in Cursor" Context Menu for macOS Finder</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Thu, 13 Mar 2025 10:00:18 +0000</pubDate>
      <link>https://dev.to/netsi1964/creating-a-open-in-cursor-context-menu-for-macos-finder-3g8m</link>
      <guid>https://dev.to/netsi1964/creating-a-open-in-cursor-context-menu-for-macos-finder-3g8m</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;p&gt;Add a custom "Open in Cursor" option to your Finder context menu by creating an Automator Quick Action with AppleScript. Makes opening projects in Cursor a breeze!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You Need This
&lt;/h2&gt;

&lt;p&gt;As developers, we often browse our filesystems looking for projects to work on. If you're using Cursor as your code editor (which many are, for its excellent AI integration), you'll quickly get tired of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Finding a folder in Finder&lt;/li&gt;
&lt;li&gt;Opening Cursor separately &lt;/li&gt;
&lt;li&gt;Navigating to the same folder through Cursor's interface&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This quick automation adds a right-click option to instantly open any folder or file in Cursor, directly from Finder!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;macOS (tested on Monterey, Big Sur, and Ventura)&lt;/li&gt;
&lt;li&gt;Cursor installed at &lt;code&gt;/Applications/Cursor.app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;5 minutes of your time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Open Automator
&lt;/h3&gt;

&lt;p&gt;Find Automator in your Applications folder or search for it using Spotlight (⌘+Space).&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create a New Quick Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;When Automator opens, select &lt;strong&gt;Quick Action&lt;/strong&gt; (or "Service" in older macOS versions)&lt;/li&gt;
&lt;li&gt;Configure the workflow settings at the top:

&lt;ul&gt;
&lt;li&gt;Workflow receives: &lt;strong&gt;files and folders&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;in: &lt;strong&gt;Finder&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 3: Add an AppleScript Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Search for "Run AppleScript" in the actions library&lt;/li&gt;
&lt;li&gt;Drag it to the workflow area&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 4: Add the Script
&lt;/h3&gt;

&lt;p&gt;Replace the default AppleScript code with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight applescript"&gt;&lt;code&gt;&lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="k"&gt;repeat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;theItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;thePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;quoted form&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;POSIX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;theItem&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nb"&gt;do shell script&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/usr/bin/open -a '/Applications/Cursor.app' "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;thePath&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;repeat&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nb"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nb"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;errMsg&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nb"&gt;display dialog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Error opening files in Cursor: "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;errMsg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;buttons&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nb"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;run&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Save Your Quick Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Choose File &amp;gt; Save&lt;/li&gt;
&lt;li&gt;Name it "Open in Cursor" (or whatever you prefer)&lt;/li&gt;
&lt;li&gt;Click Save&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 6: Use Your New Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In Finder, right-click on any file or folder&lt;/li&gt;
&lt;li&gt;Look for "Open in Cursor" in the context menu or under "Quick Actions"&lt;/li&gt;
&lt;li&gt;Click it, and watch as your selection opens in Cursor!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;If your menu item doesn't appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to System Preferences &amp;gt; Extensions &amp;gt; Finder and ensure "Open in Cursor" is enabled&lt;/li&gt;
&lt;li&gt;If your Cursor app is installed elsewhere, modify the path in the script&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you receive an error message:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check that Cursor is properly installed&lt;/li&gt;
&lt;li&gt;Ensure the path in the script matches your installation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customization (Optional)
&lt;/h2&gt;

&lt;p&gt;Want this to be even more accessible? Assign a keyboard shortcut:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to System Preferences &amp;gt; Keyboard &amp;gt; Shortcuts &amp;gt; Services&lt;/li&gt;
&lt;li&gt;Find "Open in Cursor" under "Files and Folders"&lt;/li&gt;
&lt;li&gt;Click on it and press your desired key combination&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;p&gt;This automation uses AppleScript to grab the selected file paths from Finder and passes them to the &lt;code&gt;open&lt;/code&gt; command with Cursor specified as the application. The error handling ensures you're notified if something goes wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Small automations like this can significantly improve your development workflow. No more tedious navigation through multiple interfaces - just right-click and get to coding!&lt;/p&gt;

&lt;p&gt;What other Finder integrations would you find useful? Let me know in the comments!&lt;/p&gt;

</description>
      <category>cursor</category>
      <category>macos</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>Enriching Event Listings with Microformats/Microdata for a Better User Experience</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 09 Jun 2024 09:07:59 +0000</pubDate>
      <link>https://dev.to/netsi1964/enriching-event-listings-with-microformatsmicrodata-for-a-better-user-experience-5bgl</link>
      <guid>https://dev.to/netsi1964/enriching-event-listings-with-microformatsmicrodata-for-a-better-user-experience-5bgl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TLDR: Use microdata/microformats to add more meaning to event listings on your website, enabling users to easily add events to their calendars and providing a better user experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many websites have lists of events which they in the best intention want their users to know about. But maybe they could get feedback from users like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hey, love the event listings! But adding them to my calendar is a pain. Can you please add a 'Add to Calendar' feature? It'd make my life so much easier!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cause text links are nice for the brain, but not good for the user to easily add to her calendar. Microformats/Microdata + some javascript can change that!&lt;/p&gt;

&lt;h2&gt;
  
  
  The overlooked HTML feature: Microformats/Microdata
&lt;/h2&gt;

&lt;p&gt;The microformats/microdata used in this example is based on the &lt;code&gt;h-event&lt;/code&gt; vocabulary, which is a standardized way of marking up events on the web.&lt;/p&gt;

&lt;p&gt;Microformats/microdata is a way to add additional semantic meaning to HTML elements, making it easier for search engines and other machines to understand the structure and content of a webpage.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;h-event&lt;/code&gt; vocabulary is part of the &lt;a href="https://microformats.org/wiki/microformats2"&gt;Microformats 2 specification&lt;/a&gt;, which is a standardized way of marking up common data structures on the web.&lt;/p&gt;

&lt;p&gt;Here is an example of the microformats used in this example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"h-event"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dt-start"&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-11-05T12:00:00"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;11/5&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"p-name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tennis Band på Nytorv&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dt-start"&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-11-05T12:00:00"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;kl. 12.00&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt; -
  &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dt-end"&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-11-05T13:00:00"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;13.00&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;h-event&lt;/code&gt; class is used to indicate that the element represents an event. The &lt;code&gt;dt-start&lt;/code&gt; and &lt;code&gt;dt-end&lt;/code&gt; classes are used to indicate the start and end dates and times of the event, respectively. The &lt;code&gt;p-name&lt;/code&gt; class is used to indicate the name of the event.&lt;/p&gt;

&lt;p&gt;You can find more information about the &lt;code&gt;h-event&lt;/code&gt; vocabulary and Microformats 2 in general on the official Microformats website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://microformats.org/wiki/microformats-2"&gt;Microformats 2 specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://microformats.org/wiki/h-event"&gt;h-event vocabulary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, you can find more information about microdata on the W3C website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/microdata/"&gt;W3C Microdata specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using javascript to dynamically add link "Add to Calendar"
&lt;/h2&gt;

&lt;p&gt;Adding an 'Add to Calendar' feature to your event listings is easier than you think!&lt;/p&gt;

&lt;p&gt;With a bit of JavaScript magic, you can add a link to your microdata-extended HTML that allows users to easily add events to their calendars.&lt;/p&gt;

&lt;p&gt;Together with &lt;a href="https://groq.com/"&gt;GROK&lt;/a&gt; i've generated a script to demonstrate this, and you can see it in action on &lt;a href="https://codepen.io/netsi1964/pen/KKLvoGz?editors=1010"&gt;CodePen&lt;/a&gt;. With just a few lines of code, you can give your users a seamless way to add events to their calendars, making your event listings even more user-friendly. So why not give it a try and take your event listings to the next level?&lt;/p&gt;

</description>
      <category>microdata</category>
      <category>eventlistings</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Blazor CSS-isolation a ::shallow quick fix..</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Thu, 23 May 2024 08:20:03 +0000</pubDate>
      <link>https://dev.to/netsi1964/blazor-css-isolation-a-shallow-look-at-it-280</link>
      <guid>https://dev.to/netsi1964/blazor-css-isolation-a-shallow-look-at-it-280</guid>
      <description>&lt;p&gt;Vanilla CSS, the pure not-infected by frameworks, is IMHO the best way to do CSS. With all the nice features like native nesting and custom properties (CSS variables) it seems to me that we have what we need. That however seems not to be the understanding of many frameworks, like Blazor, Angular and others.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Blazor CSS-isolation issue
&lt;/h2&gt;

&lt;p&gt;Here I want to share a quick fix understanding when fighting the Blazor CSS effects to your css. It seems to actually be a valid solution.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add &lt;code&gt;::deep&lt;/code&gt; after your component root css class&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is as simple as that! (it seems).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Blazor CSS-isolation technique
&lt;/h2&gt;

&lt;p&gt;Blazor uses like other frameworks (Angular for instance) a technique of injecting a unique attribute on component HTML. It looks like this: &lt;code&gt;b-khlzklwsq4&lt;/code&gt;. It is a "b" and then a random 10 chars long GUID sort of string. This combined with the rewriting of you pretty vanilla CSS for the component allows Blazor to have scoped css. CSS which will not break other components (but only itself ;-)).&lt;/p&gt;

&lt;p&gt;So if I have my css:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component {
  outline: 1px black solid;
}
.my-component *:focus {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blazor will pass it at runtime into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component[b-khlzklwsq4] {
  outline: 1px black solid;
}
.my-component *:focus[b-khlzklwsq4] {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However I need to target &lt;strong&gt;any&lt;/strong&gt; element which has focus, not just elements in focus which &lt;strong&gt;has&lt;/strong&gt; the attribute &lt;code&gt;b-khlzklwsq4&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;My rule-of-fix-::deep is then to simply add a &lt;code&gt;::deep&lt;/code&gt; after the main component selector (&lt;code&gt;.my-component&lt;/code&gt;) and get this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component {
  outline: 1px black solid;
}
.my-component ::deep *:focus {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That way I instruct Blazor: "Please do not manipulate any of my CSS other than the main selector (&lt;code&gt;.my-component&lt;/code&gt;). It seems to work! :-)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component[b-khlzklwsq4] {
  outline: 1px black solid;
}
.my-component *:focus {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That in fact was my &lt;code&gt;::shallow&lt;/code&gt; quick-fix of the broken Blazor CSS-isolation functionality!&lt;/p&gt;

</description>
      <category>blazor</category>
      <category>css</category>
      <category>cssisolation</category>
      <category>html</category>
    </item>
    <item>
      <title>Konklusion på fordelene ved elbil</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 07 Apr 2024 07:47:19 +0000</pubDate>
      <link>https://dev.to/netsi1964/konklusion-pa-fordelene-ved-elbil-7hp</link>
      <guid>https://dev.to/netsi1964/konklusion-pa-fordelene-ved-elbil-7hp</guid>
      <description>&lt;p&gt;En opsummering af indhold i denne video: &lt;a href="https://www.youtube.com/watch?v=P2l14cqJ9iQ"&gt;222.000 km i Tesla Model 3 Long Range: Se Franks regnskab for elbilen | bilguiden&lt;/a&gt; lavet ved hjælp af GPT &lt;a href="https://chat.openai.com/g/g-GvcYCKPIH-youtube"&gt;YouTube∑✏️ - YouTube Summarize&lt;/a&gt;.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Elbiler kan tilbyde betydelige økonomiske besparelser og miljøfordele i form af lavere driftsomkostninger og reduktion i CO2-udslip. Selvom der kan være udfordringer med værditab og tilgængelighed af opladningsmuligheder, er elbiler generelt en fordelagtig investering for mange bilkøbere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Elbiler frembyder ikke kun en mere miljøvenlig løsning, men tilbyder også lavere løbende omkostninger sammenlignet med konventionelle benzin- eller dieselbiler. Denne type køretøj kræver færre mekaniske reparationer på grund af færre bevægelige dele, hvilket bidrager til den samlede økonomiske fordel ved at eje en elbil.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fordele:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Økonomiske besparelser:&lt;/strong&gt; Lavere omkostninger til brændstof og vedligehold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miljøvenlig:&lt;/strong&gt; Reducerer CO2-udslip og forurening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mindre vedligeholdelse:&lt;/strong&gt; Færre bevægelige dele reducerer behovet for hyppige reparationer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Udfordringer:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Værditab:&lt;/strong&gt; Elbiler kan opleve et hurtigere værditab end traditionelle biler.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opladningsinfrastruktur:&lt;/strong&gt; Tilgængelighed af ladestationer kan være begrænset afhængigt af geografisk placering.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tesla</category>
      <category>elbiler</category>
      <category>ai</category>
      <category>youtubesummerizer</category>
    </item>
    <item>
      <title>A virtual podcaster</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Fri, 05 Apr 2024 22:35:14 +0000</pubDate>
      <link>https://dev.to/netsi1964/a-virtual-podcaster-42ho</link>
      <guid>https://dev.to/netsi1964/a-virtual-podcaster-42ho</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Exploring sides of AI generation of content&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As I listened to a podcast generated by AI and read by an AI I thought: why not make a 100% virtual interview? Where an AI chat bot played the two roles as an interviewer (Eloquence) and a given guest, here a frontend developer at Trifork, Aarhus.&lt;/p&gt;

&lt;p&gt;Below you can see my first test done using the API from Groq.com: &lt;a href="https://console.groq.com"&gt;&lt;/a&gt;&lt;a href="https://console.groq.com"&gt;https://console.groq.com&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  An interview with a frontend developer at Trifork, Aarhus
&lt;/h2&gt;

&lt;p&gt;Welcome to another episode of Eloquence, the podcast that engages in deep, thought-provoking discussions with experts from various fields. I'm your host, Eloquence, and today we have a special guest - a frontend developer at Trifork, Aarhus. We'll be diving into the world of CSS on a technical level, with code examples and practical insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Welcome to the show! It's great to have you here. Before we dive into the technical aspects of CSS, could you briefly introduce yourself and your experience with frontend development?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for having me! I'm a frontend developer at Trifork, Aarhus, and I've been working in the industry for over five years now. I specialize in building responsive, user-friendly websites using HTML, CSS, and JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fantastic! Let's get started with CSS. Can you explain what CSS is and why it's essential for frontend development?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Certainly! CSS, or Cascading Style Sheets, is a style sheet language used for describing the look and formatting of a document written in HTML or XML. It's essential for frontend development because it allows developers to separate the presentation layer from the structure and content of a webpage. This separation makes it easier to maintain, update, and scale websites while ensuring consistency across different pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Excellent explanation! Now, let's dive into some code examples. Can you show us how to create a simple CSS layout using Flexbox?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sure! Here's an example of a simple CSS layout using Flexbox:&lt;br&gt;
HTML:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Flexbox Layout Example&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box box-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box box-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box box-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f1f1f1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box-1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box-2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;200px&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box-3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;In this example, we have a container with three boxes inside. We're using the &lt;code&gt;display: flex&lt;/code&gt; property on the container to create a flexible layout. Each box has a &lt;code&gt;flex-basis&lt;/code&gt; of 200px, meaning they'll each take up at least 200px of space. The &lt;code&gt;flex-grow&lt;/code&gt; and &lt;code&gt;flex-shrink&lt;/code&gt; properties determine how the boxes will grow or shrink if there's extra or limited space.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Great! Can you show us how to create a CSS animation using keyframes?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sure! Here's an example of a simple CSS animation using keyframes:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;slide-in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-100%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That's a great example! Can you explain how CSS Grid Layout differs from Flexbox and when you might choose to use one over the other?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Certainly! While both CSS Grid Layout and Flexbox are powerful layout systems, they serve different purposes. Flexbox is designed for one-dimensional layouts, either in a row or a column, making it perfect for components or smaller layouts. On the other hand, CSS Grid Layout is designed for two-dimensional layouts, allowing you to create complex grid layouts with rows and columns.&lt;/p&gt;

&lt;p&gt;When working with smaller components or simple layouts, Flexbox is often the better choice due to its simplicity and ease of use. However, when building complex layouts with multiple rows and columns, such as a dashboard or a magazine-style website, CSS Grid Layout is the better option.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for the clarification! Lastly, can you share any tips or resources for developers looking to improve their CSS skills?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Of course! Here are some tips and resources for developers looking to improve their CSS skills:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Practice, practice, practice! Build projects and experiment with different techniques to gain hands-on experience.&lt;/li&gt;
&lt;li&gt;Learn from others by reading blogs, articles, and tutorials on CSS best practices, new features, and techniques.&lt;/li&gt;
&lt;li&gt;Stay up-to-date with the latest CSS specifications and browser support by following the W3C and caniuse.com.&lt;/li&gt;
&lt;li&gt;Use CSS preprocessors like Sass or Less to simplify your workflow and write cleaner, more maintainable code.&lt;/li&gt;
&lt;li&gt;Learn about accessibility and how to create inclusive, user-friendly websites for all users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some resources I recommend include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS-Tricks (&lt;a href="https://css-tricks.com/"&gt;https://css-tricks.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Smashing Magazine (&lt;a href="https://www.smashingmagazine.com/"&gt;https://www.smashingmagazine.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A List Apart (&lt;a href="https://alistapart.com/"&gt;https://alistapart.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS WG (&lt;a href="https://www.w3.org/Style/CSS/"&gt;https://www.w3.org/Style/CSS/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;caniuse.com (&lt;a href="https://caniuse.com/"&gt;https://caniuse.com/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you so much for joining us today and sharing your insights on CSS! It was a pleasure having you on the show.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for having me! It was a great experience, and I'm glad I could share my knowledge with your audience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And that wraps up another episode of Eloquence. Thank you for listening, and we'll see you in the next episode!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>poc</category>
      <category>groq</category>
    </item>
    <item>
      <title>From Flawless Codes to Human Qualities: The Unexpected Gifts of AI</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Fri, 09 Feb 2024 15:20:46 +0000</pubDate>
      <link>https://dev.to/netsi1964/from-flawless-codes-to-human-qualities-the-unexpected-gifts-of-ai-5hm7</link>
      <guid>https://dev.to/netsi1964/from-flawless-codes-to-human-qualities-the-unexpected-gifts-of-ai-5hm7</guid>
      <description>&lt;p&gt;AI is redefining our relationship with technology, not by avoiding errors, but by introducing variability and unpredictability, reminding us of the value of human qualities. This shift from impeccable software to systems that can "surprise" us points to a new era where technology encourages the development of empathy, adaptability, and creativity among its users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating the Workforce and the Job Market
&lt;/h2&gt;

&lt;p&gt;As AI systems become an integrated part of the workplace, our perception of automation shifts from a job threat to an opportunity to enhance human skills. AI can handle routine tasks, allowing humans more time to focus on tasks that require creativity, empathy, and critical thinking. This development underscores the need to value and develop these inherently human qualities, which cannot be easily automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision Making and the Role of AI
&lt;/h2&gt;

&lt;p&gt;AI's influence on decision-making processes extends beyond offering data-driven insights. By integrating AI into decision-making, a degree of unpredictability and nuance is introduced, challenging traditional logic and predictability. This forces us to embrace more flexible and adaptive approaches, value human intuition, and accept that not all decisions can or should be reduced to binary choices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalization through AI
&lt;/h2&gt;

&lt;p&gt;AI's ability to tailor experiences to individual preferences opens up a new understanding of technology's role in our lives. Instead of viewing technology as an impersonal and flawless entity, we begin to see the value in systems that can "understand" and adapt to human variability. This pushes the boundaries of how we perceive the interaction between humans and machines, highlighting the potential for a deeper, more meaningful connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Concrete Example: The Software Developer's New Reality
&lt;/h2&gt;

&lt;p&gt;Imagine a software developer named Martin. For years, Martin has designed and implemented software applications where precision and predictability were key. When Martin sends a specific API call to a database, he expects the same answer every time. This has been the foundation of how he built secure and stable systems. His code is like a well-oiled machine, where every element functions as expected, without surprises.&lt;/p&gt;

&lt;p&gt;But now, as Martin begins to integrate language models based on Large Language Models (LLM) like GPT into his applications, he notices a significant change. These models, trained on vast datasets of human text, bring a new dimension of 'humanity' to the interactions. Suddenly, the same input can yield different responses, depending on the context, previous interactions, or even the model's own 'state'. It's a situation that more closely resembles a dialogue with a human than a static database call.&lt;/p&gt;

&lt;p&gt;For Martin, this is an eye-opener. He realizes that his expectations for software must change. He can no longer expect the inhuman consistency from his AI-driven applications. Instead, he must adapt to a world where software behaves more dynamically, more unpredictably, and yes, more humanly. This requires a new approach to design and development, accommodating variability and flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The advent of AI has opened the door to a world where flawless codes and immutable systems are no longer the ultimate goal. Instead, we've begun to appreciate the 'unexpected gifts' that AI brings - a rediscovery of the human qualities that make us unique. By navigating AI's unpredictability, we learn to value errors as a source of learning and innovation, recognizing the importance of human traits such as empathy, adaptability, and creativity. As we move forward, it's clear that the future of technology lies not in its infallibility but in its ability to make us more human.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;This blog post came to life during a train ride from Trifork in Aarhus back home to Viborg on a Friday. Throughout the journey, I used ChatGPT as a sparring partner, crafting the entire piece on an iPad Pro connected to the internet through my iPhone. This experience not only showcases the mobility and flexibility of modern technology but also highlights the evolving role of AI as a creative and collaborative tool in the writing process. It's a testament to how technology can enhance our productivity and creativity, even while on the move, bridging ideas and innovation seamlessly across devices.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aiandhumanity</category>
      <category>creativetechnology</category>
      <category>digitalcollaboration</category>
      <category>innovationonthego</category>
    </item>
    <item>
      <title>Some tips on styling in creating images using ChatGPT</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sat, 03 Feb 2024 11:47:27 +0000</pubDate>
      <link>https://dev.to/netsi1964/some-tips-on-styling-in-creating-images-using-chatgpt-34bo</link>
      <guid>https://dev.to/netsi1964/some-tips-on-styling-in-creating-images-using-chatgpt-34bo</guid>
      <description>&lt;h2&gt;
  
  
  How do you get the style right when prompting for images in ChatGPT
&lt;/h2&gt;

&lt;p&gt;One thing is that you from nothing but a text prompt can make LLMs like ChatGPT/Dall-e 3 create stunningly looking images, but often it is sort of out of control.&lt;/p&gt;

&lt;p&gt;Merging the great text understanding of a Large Language Model like ChatGPT with an image generator like Dall-e 3 is a genius move IMHO - you can "talk your way" into the image you want. &lt;/p&gt;

&lt;p&gt;I want to share some great patterns I discovered in my journey to becoming a super user of generative AI. Here I will share there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get the generative id (seed) of your generated images
&lt;/h3&gt;

&lt;p&gt;Sometimes you get an image which has a great style to it, something which you like and want to reuse.&lt;/p&gt;

&lt;p&gt;What I do is to ask for the generation id: &lt;code&gt;Please give the generation id for this image&lt;/code&gt;, and you will get a unique number like: &lt;code&gt;12mRB34VZjntNwiQ&lt;/code&gt;. I then save the generated image together with this id in a document in Apple note app. This then becomes a repository of styles with examples (you know: an image says more than 1000 words)&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter a dialogue with ChatGPT to get the perfect prompt
&lt;/h3&gt;

&lt;p&gt;Say you would like to create something in the style of a Rembrandt painting. Here is an actual dialogue I had with ChatGPT:&lt;/p&gt;

&lt;h4&gt;
  
  
  Me
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

So summarize in 100 words the style, so I can use it for a
prompt to generate an image


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  ChatGPT
&lt;/h4&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Rembrandt's painting style is distinguished by its emotional depth and focus on realism. His technique utilizes chiaroscuro, with dramatic contrasts between light and dark, to create volume and texture. His brushwork is expressive and often features impasto, which adds a tactile quality to surfaces. Rembrandt excelled in capturing human emotions, giving his subjects a sense of dignity. His compositions are complex, with thoughtful use of lighting to guide the viewer’s eye. His landscapes are atmospheric, with subtle light effects, while his portraits are intimate, deeply insightful, and introspective.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I then had a dialogue where I ended up with the prompt for generating &lt;code&gt;a woman eating a pizza in the kitchen "Rembrandt style"&lt;/code&gt; The prompt became:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Generate an image: A woman eating a pizza in a kitchen,
portrayed with the emotional depth and realism characteristic
of Rembrandt’s style. The image is infused with chiaroscuro,
enhancing the three-dimensionality through stark contrasts of
light and shadow. The painting captures the intricate textures
of the scene, from the woman's expression to the pizza’s
cheesy surface, using expressive brushwork and impasto
techniques. The atmosphere is intimate and introspective,
focusing on the woman’s interaction with her meal, and the
composition is thoughtfully arranged with subtle lighting that
guides the viewer’s eye.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Which however gave an image with the woman eating a slice, yet no slice was missing from the pizza...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft4x2kmuhnrsyn7w14fh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft4x2kmuhnrsyn7w14fh.jpeg" alt="There is one too many slices"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here comes a reminder: you can "prompt on" and asking for correction to already generated image:&lt;/p&gt;

&lt;h4&gt;
  
  
  Me
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Nice, but she has taken a slice, while the pizza is not
missing a slice! Please correct that error


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Which then gave me an image matching my desired image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ib3c4wtbffzt5rmuycj.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ib3c4wtbffzt5rmuycj.jpeg" alt="Now it looks realistic!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then (of cause) asked for a generation id: &lt;code&gt;12mRB34VZjntNwiQ&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Uploade the image you like and make ChatGPT describe what it sees
&lt;/h3&gt;

&lt;p&gt;Another path to get the style you want is to upload a picture of the style you desire. You should then ask something like this: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

I really like the style of this image - can you give a
detailed prompt of the STYLE and method used in this image, so
that I can prompt a generative AI and get similar style.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  An example
&lt;/h4&gt;

&lt;p&gt;I found &lt;a href="https://cdn.leonardo.ai/users/9a453b8e-cb5a-4956-9cd1-7a989021ce3f/generations/725c4b33-929b-4bfd-b020-bed76bd2b503/AlbedoBase_XL_The_image_youve_described_is_a_poignant_visual_r_0.jpg" rel="noopener noreferrer"&gt;this image&lt;/a&gt; generated using Leonardo.AI which is kind of inspiring to me. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6aicu3b1uu0yal7f23dt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6aicu3b1uu0yal7f23dt.jpg" alt="Inspiration base image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ChatGPT then replied:
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Create an image in a hyper-detailed illustrative style that
merges elements of realism with surrealism. The artwork should
have two halves with one side depicting elements of nature,
wildlife, and organic textures, and the other side showcasing
urban elements, architecture, and geometric patterns. Both
sides should seamlessly transition into each other, forming a
cohesive whole that juxtaposes the natural world with human
civilization. The colors should be vivid and rich, with a
depth that suggests a three-dimensional effect, and the lines
should be crisp and refined. The overall feeling should be one
of a thought-provoking dichotomy, blending the living with the
inanimate in a single, harmonious portrait. 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now let's try to generate an image which combines the desire to get an image of a woman in the kitchen eating a pizza in that style!&lt;/p&gt;

&lt;h4&gt;
  
  
  Me
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

I need a picture of a woman eating a pizza, Create an image in
a hyper-detailed illustrative style that merges elements of
realism with surrealism. The artwork should have two halves
with one side depicting elements of nature, wildlife, and
organic textures, and the other side showcasing urban
elements, architecture, and geometric patterns. Both sides
should seamlessly transition into each other, forming a
cohesive whole that juxtaposes the natural world with human
civilization. The colors should be vivid and rich, with a
depth that suggests a three-dimensional effect, and the lines
should be crisp and refined. The overall feeling should be one
of a thought-provoking dichotomy, blending the living with the
inanimate in a single, harmonious portrait.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6buasygal9mjqmephrt7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6buasygal9mjqmephrt7.jpeg" alt="Not bad!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Generation ID: &lt;code&gt;tWwVb30ug4EZwlPj&lt;/code&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary (done by ChatGPT ;-))
&lt;/h2&gt;

&lt;p&gt;As we wrap up this creative exploration, remember that the key to unlocking AI's potential lies in our prompts. Our journey with ChatGPT and Dall-e 3 has shown us that with a sprinkle of imagination and a dash of dialogue, we can shape the raw clay of AI's capabilities into a masterpiece. Hold onto those generation IDs like treasured maps to past styles. Engage in the back-and-forth banter with AI to perfect your vision. And when you stumble upon a style that captivates you, upload it, dissect it, and learn from it. Each interaction is a step toward mastering the art of prompt engineering, transforming you from a mere spectator to a maestro of the digital canvas. So go ahead, prompt with purpose, and let your creativity soar to new heights.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>dalle3</category>
      <category>style</category>
      <category>generativeai</category>
    </item>
  </channel>
</rss>
