<?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: Evgeniy Petrukovich</title>
    <description>The latest articles on DEV Community by Evgeniy Petrukovich (@jacksonstorm).</description>
    <link>https://dev.to/jacksonstorm</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%2F3894075%2F8ed7abe9-bad4-49f6-92b7-a7c4cd0df116.png</url>
      <title>DEV Community: Evgeniy Petrukovich</title>
      <link>https://dev.to/jacksonstorm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jacksonstorm"/>
    <language>en</language>
    <item>
      <title>I turned the cutout in the MacBook screen into a dynamic user interface element (DynamicNotch for macOS)</title>
      <dc:creator>Evgeniy Petrukovich</dc:creator>
      <pubDate>Thu, 23 Apr 2026 11:15:38 +0000</pubDate>
      <link>https://dev.to/jacksonstorm/i-turned-the-cutout-in-the-macbook-screen-into-a-dynamic-user-interface-element-dynamicnotch-for-4jn1</link>
      <guid>https://dev.to/jacksonstorm/i-turned-the-cutout-in-the-macbook-screen-into-a-dynamic-user-interface-element-dynamicnotch-for-4jn1</guid>
      <description>&lt;p&gt;When Apple added notch to the MacBook, many people reacted the same way.:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;He's there, and you just have to put up with him&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Unlike the iPhone, where Dynamic Island appeared and the notch became part of the interface, on macOS it still remains a passive element. It does not carry a functional load and does not interact with the user in any way.&lt;/p&gt;

&lt;p&gt;I have a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;what if we make the cutout part of the UI, not a limitation?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is how the DynamicNotch project appeared.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgbi1rcbj0t32j4ljb7z4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgbi1rcbj0t32j4ljb7z4.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Idea
&lt;/h2&gt;

&lt;p&gt;The main idea is to stop thinking of the notch as a "hole in the screen" and start using it as an anchor point for the interface.&lt;/p&gt;

&lt;p&gt;Instead of bypassing it, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;link visual elements to it&lt;/li&gt;
&lt;li&gt;display contextual information&lt;/li&gt;
&lt;li&gt;use it as a center for animations and states&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact, this is an attempt to transfer the concept of a "live" cutout from iOS to macOS.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does DynamicNotch do?
&lt;/h2&gt;

&lt;p&gt;The application creates a dynamic area around the cutout that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live Activity - The permanently displayed content of the cutout remains visible as long as the original event is active, and then disappears when it is completed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftmpka0ym80bb9vqayhw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftmpka0ym80bb9vqayhw3.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temporary Activity - temporary notifications remain visible for a certain period of time, which can be changed in the settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnxz79r8ah2hh6hdgsx45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnxz79r8ah2hh6hdgsx45.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Widgets — display content on a locked screen, something that Apple has not done so far.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1tumv5rfglwfn716dspq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1tumv5rfglwfn716dspq.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Settings — cutout settings, allow you to customize for yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8t0y16yyy3zunj3mgse3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8t0y16yyy3zunj3mgse3.png" alt=" " width="800" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical side
&lt;/h2&gt;

&lt;p&gt;The project is written in Swift using SwiftUI/AppKit.&lt;/p&gt;

&lt;p&gt;The main difficulties turned out to be not in UI rendering, but in integration with macOS behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;correct positioning relative to the neckline&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;working with windows and layers on top of the system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;synchronization with system events&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact, this is an exploration of the boundaries of &lt;strong&gt;how deeply you can integrate into a system UI with a private API&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;DynamicNotch is an attempt to rethink one of the most controversial elements of modern MacBooks and see if it can be made useful.&lt;/p&gt;

&lt;p&gt;If you have any ideas, criticism, or thoughts on how to use the notch in macOS, it will be very interesting to discuss.&lt;/p&gt;

&lt;p&gt;I would also be grateful if you put a star on GitHub.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jackson-storm" rel="noopener noreferrer"&gt;
        jackson-storm
      &lt;/a&gt; / &lt;a href="https://github.com/jackson-storm/DynamicNotch" rel="noopener noreferrer"&gt;
        DynamicNotch
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DynamicNotch is a macOS app that brings a Dynamic Island–style experience to Mac with a notch.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/jackson-storm/DynamicNotch/DynamicNotch/Resources/Assets.xcassets/AppIcon.appiconset/logo256.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjackson-storm%2FDynamicNotch%2FHEAD%2FDynamicNotch%2FResources%2FAssets.xcassets%2FAppIcon.appiconset%2Flogo256.png" alt="DynamicNotch logo" width="96"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DynamicNotch&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;strong&gt;Turn the MacBook notch into a living native surface.&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  DynamicNotch is a native macOS app for notched MacBooks that turns the notch into a live system surface for media
  downloads, AirDrop, timers, connectivity events, lock-screen transitions, and custom hardware HUDs
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://t.me/Dynamic_Notch" rel="nofollow noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/0651dfe355c9132f7766ddea730ad6c3e05501b0d1bcef079295e3925c23cc93/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54656c656772616d2d4a6f696e2532304368616e6e656c2d3236413545343f7374796c653d666f722d7468652d6261646765266c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465" alt="Join the Telegram channel"&gt;
  &lt;/a&gt;
  &lt;a href="https://dynamicnotch.evgeniy-petrukovich.workers.dev/download" rel="nofollow noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/1017504f37e0ceb688a1f66c07b33a9f42fdef86f6dac184a9e8badfbefe890e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576562736974652d4f70656e253230536974652d3131313131313f7374796c653d666f722d7468652d6261646765266c6f676f3d736166617269266c6f676f436f6c6f723d7768697465" alt="Open the DynamicNotch website"&gt;
  &lt;/a&gt;
  &lt;a href="mailto:evgeniy.petrukovich@icloud.com?subject=A%20question%20about%20Dynamic%20Notch"&gt;
    &lt;img src="https://camo.githubusercontent.com/8ab2b7cef10e00845d537b02c00bdd7d6fbb31bd8f80cfe1d675a18e8bba2d54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456d61696c2d436f6e746163742532304d652d3041383446463f7374796c653d666f722d7468652d6261646765266c6f676f3d69636c6f7564266c6f676f436f6c6f723d7768697465" alt="Send an email about DynamicNotch"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/jackson-storm/DynamicNotch/releases" rel="noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/e9923cf48d5e2757e8e3aa419d67d495c52b5a5eb7126c28d0e50835ffb0a2c2/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f6a61636b736f6e2d73746f726d2f44796e616d69634e6f7463682f746f74616c3f6c6162656c3d646f776e6c6f616473" alt="GitHub downloads"&gt;
  &lt;/a&gt;
  &lt;a href="https://github.com/jackson-storm/DynamicNotch/releases/latest" rel="noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/8cbc8e2569597349e34c3cf3da31af626576d0110788210a2778ffab0da99228/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6a61636b736f6e2d73746f726d2f44796e616d69634e6f7463683f646973706c61795f6e616d653d72656c6561736526736f72743d73656d766572" alt="Latest release"&gt;
  &lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/8d0a734b3ada8e311f0a6157dff3903bcb17ab214c5c37a969dda8260388ef4d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61634f532d31342e362532422d3131313131313f6c6f676f3d6170706c65"&gt;&lt;img src="https://camo.githubusercontent.com/8d0a734b3ada8e311f0a6157dff3903bcb17ab214c5c37a969dda8260388ef4d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61634f532d31342e362532422d3131313131313f6c6f676f3d6170706c65" alt="macOS 14.6 or later"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9033a90913c82615260e6cf26d6d2c21305e46babea3ab1d68937c65841a860e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f55492d537769667455492532302532422532304170704b69742d304138344646"&gt;&lt;img src="https://camo.githubusercontent.com/9033a90913c82615260e6cf26d6d2c21305e46babea3ab1d68937c65841a860e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f55492d537769667455492532302532422532304170704b69742d304138344646" alt="SwiftUI and AppKit"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/636462526e66ff81ff61b7701aa685ded0302745c7dc7a0d7e9d917d345685d8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53776966742d352d4630353133383f6c6f676f3d7377696674266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/636462526e66ff81ff61b7701aa685ded0302745c7dc7a0d7e9d917d345685d8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53776966742d352d4630353133383f6c6f676f3d7377696674266c6f676f436f6c6f723d7768697465" alt="Swift 5"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/jackson-storm/DynamicNotch/LICENSE" rel="noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/6b72b5d773bea2241e3b1014b426324a76c137bdfb41a3a5846bb936975a97a1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6a61636b736f6e2d73746f726d2f44796e616d69634e6f746368" alt="License"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/jackson-storm/DynamicNotch/assets/readme/Player.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjackson-storm%2FDynamicNotch%2FHEAD%2Fassets%2Freadme%2FPlayer.png" alt="DynamicNotch preview" width="100%"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Why DynamicNotch&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;DynamicNotch treats the MacBook notch like a compact native surface instead of a static cutout.
It stays close to the hardware shape until something important happens, then expands with queue-driven
presentation, gesture support, and system-aware feature routing.&lt;/p&gt;
&lt;p&gt;The app is built with SwiftUI and AppKit, so the notch window, settings UI, and event handling feel
like part of macOS rather than a web-style overlay.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Highlights&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🎵 Live activities for Now Playing, Downloads, AirDrop, Timer, Focus, Personal Hotspot, and Lock Screen media/live activity surfaces&lt;/li&gt;
&lt;li&gt;⚡ Temporary alerts for charging, low battery, full battery, Bluetooth, Wi-Fi, VPN, Focus-off, and notch resize feedback&lt;/li&gt;
&lt;li&gt;🎚️ Custom hardware HUD replacements…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jackson-storm/DynamicNotch" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
