<?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>Forem: Serhiy</title>
    <description>The latest articles on Forem by Serhiy (@serhiy_a149d8bc6468aa1a97).</description>
    <link>https://forem.com/serhiy_a149d8bc6468aa1a97</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%2F3835790%2F7dad0516-2265-4a7e-be6a-f69520a9cbdb.png</url>
      <title>Forem: Serhiy</title>
      <link>https://forem.com/serhiy_a149d8bc6468aa1a97</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/serhiy_a149d8bc6468aa1a97"/>
    <language>en</language>
    <item>
      <title>We Solved Most Mac Problems in 4 Months - Here’s How</title>
      <dc:creator>Serhiy</dc:creator>
      <pubDate>Tue, 07 Apr 2026 11:45:27 +0000</pubDate>
      <link>https://forem.com/serhiy_a149d8bc6468aa1a97/we-solved-most-mac-problems-in-4-months-heres-how-58kc</link>
      <guid>https://forem.com/serhiy_a149d8bc6468aa1a97/we-solved-most-mac-problems-in-4-months-heres-how-58kc</guid>
      <description>&lt;h2&gt;
  
  
  We Built an All-in-One Mac Tool in 3 Months (Because We Were Sick of Overpriced Apps)
&lt;/h2&gt;

&lt;p&gt;We tried not to use AI to write this post - because the ideas are ours&lt;br&gt;
&lt;em&gt;(Okay, maybe some phrasing help 😋)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;&lt;a href="https://brow-app.com" rel="noopener noreferrer"&gt;Brow&lt;/a&gt;&lt;/strong&gt; in ~3 months&lt;/p&gt;

&lt;p&gt;Two senior devs&lt;br&gt;
No big team&lt;br&gt;
Just &lt;strong&gt;Claude Max running at 100% almost 24/7&lt;/strong&gt; and a lot of trying something → seeing if it works → fixing it if it doesn’t → repeating&lt;/p&gt;




&lt;h3&gt;
  
  
  Why we built it
&lt;/h3&gt;

&lt;p&gt;It started with a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do we actually use on our Macs?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We looked at tools like Raycast &lt;em&gt;(we’ve used it for years)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Great product - but in reality?&lt;/p&gt;

&lt;p&gt;We were using maybe &lt;strong&gt;5 - 10 plugins max&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You install a lot of them…&lt;br&gt;&lt;br&gt;
But most of the time, you don’t even remember they exist&lt;/p&gt;

&lt;p&gt;The other 99%?&lt;br&gt;
Just noise&lt;/p&gt;




&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;Mac apps that really solve the problems are expensive&lt;/p&gt;

&lt;p&gt;And worse, they’re fragmented&lt;/p&gt;

&lt;p&gt;Want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;limit battery charging?&lt;/li&gt;
&lt;li&gt;control fans?&lt;/li&gt;
&lt;li&gt;clean storage?&lt;/li&gt;
&lt;li&gt;fix your menu bar?&lt;/li&gt;
&lt;li&gt;connect Android phone?&lt;/li&gt;
&lt;li&gt;adjust display settings?&lt;/li&gt;
&lt;li&gt;and many more...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cool&lt;/p&gt;

&lt;p&gt;Now download &lt;strong&gt;10–20 different apps&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
…and pay for each of them separately&lt;/p&gt;

&lt;p&gt;Yeah, no thanks&lt;/p&gt;




&lt;h3&gt;
  
  
  What we did instead
&lt;/h3&gt;

&lt;p&gt;We built the tool we wanted to use&lt;/p&gt;

&lt;p&gt;Something that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simple
&lt;/li&gt;
&lt;li&gt;fast
&lt;/li&gt;
&lt;li&gt;actually useful
&lt;/li&gt;
&lt;li&gt;with a minimalistic design &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One app that solves &lt;strong&gt;most real Mac problems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not everything&lt;br&gt;
Just the stuff people &lt;em&gt;actually use&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Built with Claude (and what actually worked)
&lt;/h3&gt;

&lt;p&gt;We used Claude heavily, basically non-stop&lt;/p&gt;

&lt;p&gt;But here’s the part most people get wrong:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Don’t start the feature implementation from scratch
&lt;/h4&gt;

&lt;p&gt;If something already exists - ask claude to deeply research that topic first&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan → then build.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This saves insane amounts of time and tokens&lt;/p&gt;

&lt;h4&gt;
  
  
  2. The beginning matters more than you think
&lt;/h4&gt;

&lt;p&gt;Architecture is everything&lt;/p&gt;

&lt;p&gt;Even with AI&lt;/p&gt;

&lt;p&gt;We rewrote the core 3 times to get it right and push performance to the limit&lt;/p&gt;

&lt;p&gt;Painful, but worth it&lt;/p&gt;

&lt;p&gt;Now adding features is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster
&lt;/li&gt;
&lt;li&gt;cleaner
&lt;/li&gt;
&lt;li&gt;way less buggy
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Most “AI dev hype” is noise
&lt;/h4&gt;

&lt;p&gt;Agents, MCPs, complex setups…&lt;/p&gt;

&lt;p&gt;Honestly?&lt;/p&gt;

&lt;p&gt;Didn’t matter much.&lt;/p&gt;

&lt;p&gt;What worked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;good prompts
&lt;/li&gt;
&lt;li&gt;clear structure
&lt;/li&gt;
&lt;li&gt;tight feedback loops (give Claude the ability to check what he did) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Build → check → fix → repeat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That loop wins&lt;/p&gt;




&lt;h3&gt;
  
  
  Pricing (and why)
&lt;/h3&gt;

&lt;p&gt;We made almost everything free&lt;/p&gt;

&lt;p&gt;Only AI features are paid - because they cost money for us.&lt;/p&gt;

&lt;p&gt;No tricks&lt;/p&gt;




&lt;h3&gt;
  
  
  Distribution
&lt;/h3&gt;

&lt;p&gt;No ads&lt;br&gt;
No big launch&lt;/p&gt;

&lt;p&gt;Just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SEO
&lt;/li&gt;
&lt;li&gt;people finding it
&lt;/li&gt;
&lt;li&gt;people using it
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And we’re good with that&lt;/p&gt;




&lt;h3&gt;
  
  
  Why we’re sharing this
&lt;/h3&gt;

&lt;p&gt;We’re building this for ourselves&lt;/p&gt;

&lt;p&gt;And for people who are tired of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;overpriced Mac apps
&lt;/li&gt;
&lt;li&gt;bloated tools
&lt;/li&gt;
&lt;li&gt;solving one problem per app
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that’s you - try it&lt;/p&gt;

&lt;p&gt;Break it&lt;br&gt;
Tell us what sucks&lt;/p&gt;

&lt;p&gt;We’ll fix it&lt;/p&gt;




&lt;h3&gt;
  
  
  Goal
&lt;/h3&gt;

&lt;p&gt;One app that fixes most of the stuff Apple didn’t&lt;/p&gt;

&lt;p&gt;See ya&lt;br&gt;
And &lt;a href="https://macbrow.app" rel="noopener noreferrer"&gt;Brow&lt;/a&gt; it 😄&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>claude</category>
      <category>automation</category>
    </item>
    <item>
      <title>Brow (Why We Built Brow in Swift, Not Electron)</title>
      <dc:creator>Serhiy</dc:creator>
      <pubDate>Fri, 20 Mar 2026 16:30:39 +0000</pubDate>
      <link>https://forem.com/serhiy_a149d8bc6468aa1a97/brow-why-we-built-brow-in-swift-not-electron-d0l</link>
      <guid>https://forem.com/serhiy_a149d8bc6468aa1a97/brow-why-we-built-brow-in-swift-not-electron-d0l</guid>
      <description>&lt;p&gt;A lot of Mac utilities talk about speed.&lt;/p&gt;

&lt;p&gt;What matters more is &lt;em&gt;why&lt;/em&gt; they feel fast, where the limits come from, and what trade-offs the architecture creates later.&lt;/p&gt;

&lt;p&gt;That was one of the earliest decisions behind Brow: build it as a native Swift app from day one.&lt;/p&gt;

&lt;p&gt;Not because “native” sounds good in marketing.&lt;/p&gt;

&lt;p&gt;Because for the kind of product we wanted to build — launcher, notch layer, system utilities, hardware-aware modules — architecture changes what is possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real question was never just “Swift vs Electron”
&lt;/h2&gt;

&lt;p&gt;The real question was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do we want a Mac app that happens to run on macOS, or a Mac app that is built for macOS from the inside?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Electron is a valid choice for many teams. It optimizes for one codebase, faster iteration, and easier cross-platform shipping.&lt;/p&gt;

&lt;p&gt;Raycast took a different route. Its app is native, but its extension ecosystem is built around React, TypeScript, and Node so developers can build on top of it quickly.&lt;/p&gt;

&lt;p&gt;That is a smart trade-off.&lt;/p&gt;

&lt;p&gt;But it is still a trade-off.&lt;/p&gt;

&lt;p&gt;We wanted a different one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the difference starts to matter
&lt;/h2&gt;

&lt;p&gt;If you compare products like Brow and Raycast, the real difference is not just “which launcher is faster”.&lt;/p&gt;

&lt;p&gt;The deeper difference is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how much of the product sits directly on native macOS frameworks&lt;/li&gt;
&lt;li&gt;how much UI or extension logic depends on web tooling&lt;/li&gt;
&lt;li&gt;how much low-level system behavior you can control directly&lt;/li&gt;
&lt;li&gt;how much overhead you carry as the product grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That architecture decision affects everything after it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we chose Swift for Brow
&lt;/h2&gt;

&lt;p&gt;We built &lt;a href="https://macbrow.app" rel="noopener noreferrer"&gt;Brow&lt;/a&gt; in Swift because we wanted the critical path to stay native.&lt;/p&gt;

&lt;p&gt;That means no Electron shell, no Chromium runtime, and no browser stack in the core app flow.&lt;/p&gt;

&lt;p&gt;For us, that mattered for four reasons.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Native system access is not a nice-to-have
&lt;/h2&gt;

&lt;p&gt;Once you move beyond “open apps and search commands”, launcher products start touching awkward parts of the OS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;window management&lt;/li&gt;
&lt;li&gt;clipboard pipelines&lt;/li&gt;
&lt;li&gt;display control&lt;/li&gt;
&lt;li&gt;hardware stats&lt;/li&gt;
&lt;li&gt;menu bar behavior&lt;/li&gt;
&lt;li&gt;screenshot flows&lt;/li&gt;
&lt;li&gt;accessibility hooks&lt;/li&gt;
&lt;li&gt;notch-adjacent UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not areas where web-style abstraction helps much.&lt;/p&gt;

&lt;p&gt;They are areas where being close to AppKit, Swift, macOS services, and system APIs matters.&lt;/p&gt;

&lt;p&gt;This does &lt;strong&gt;not&lt;/strong&gt; mean every Mac app must be written fully in Swift.&lt;/p&gt;

&lt;p&gt;It means that if deep OS integration is central to the product, native architecture compounds in your favor.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Extension velocity and product coherence usually pull in opposite directions
&lt;/h2&gt;

&lt;p&gt;This is one of the most interesting trade-offs in tools like Raycast.&lt;/p&gt;

&lt;p&gt;A React/TypeScript-based extension system makes extension development much more accessible to web developers.&lt;/p&gt;

&lt;p&gt;That helps ecosystem growth.&lt;/p&gt;

&lt;p&gt;But it also means the platform has to constantly mediate between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;native host behavior&lt;/li&gt;
&lt;li&gt;extension runtime constraints&lt;/li&gt;
&lt;li&gt;API boundaries&lt;/li&gt;
&lt;li&gt;consistency across third-party commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That model is great for extensibility.&lt;/p&gt;

&lt;p&gt;It is not automatically great for tight, system-level product design.&lt;/p&gt;

&lt;p&gt;We wanted tighter control over behavior, performance envelopes, and module integration — even if that meant a slower road to ecosystem scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. “Fast” is not only about launch time
&lt;/h2&gt;

&lt;p&gt;People often reduce desktop performance to one thing: how quickly the window appears.&lt;/p&gt;

&lt;p&gt;That matters, but it is only the surface layer.&lt;/p&gt;

&lt;p&gt;The more important questions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much memory does the product carry at idle?&lt;/li&gt;
&lt;li&gt;What happens when multiple modules are active?&lt;/li&gt;
&lt;li&gt;How much work is happening in the background?&lt;/li&gt;
&lt;li&gt;How direct is the rendering path?&lt;/li&gt;
&lt;li&gt;How many layers are sitting between intent and UI update?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For us, the goal was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;keep the stack small, direct, and native.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the advantage of building the core this way.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The longer-term constraint is complexity, not initial speed
&lt;/h2&gt;

&lt;p&gt;Web-heavy architectures often win early.&lt;/p&gt;

&lt;p&gt;They are easier to prototype, easier to staff, and easier to ship across platforms.&lt;/p&gt;

&lt;p&gt;But the question we cared about was not:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What gets us to v1 fastest?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What architecture do we still want when the app becomes much more ambitious?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because once a launcher becomes a platform, every abstraction starts charging rent.&lt;/p&gt;

&lt;p&gt;That rent appears as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more edge cases&lt;/li&gt;
&lt;li&gt;more memory pressure&lt;/li&gt;
&lt;li&gt;more runtime boundaries&lt;/li&gt;
&lt;li&gt;more UI inconsistency&lt;/li&gt;
&lt;li&gt;more special handling for modules that do not quite fit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Native code is not magically simple.&lt;/p&gt;

&lt;p&gt;But for a Mac-only product, it can keep the stack more honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Brow better than Raycast?
&lt;/h2&gt;

&lt;p&gt;That depends on what you value.&lt;/p&gt;

&lt;p&gt;Raycast has a strong ecosystem, a mature extension story, and a smart developer adoption strategy.&lt;/p&gt;

&lt;p&gt;But our argument is narrower:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the kind of product Brow wants to be, staying fully native in the core gives us better foundations.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not universally better.&lt;/p&gt;

&lt;p&gt;Better for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deep macOS integration&lt;/li&gt;
&lt;li&gt;tighter control over performance behavior&lt;/li&gt;
&lt;li&gt;lower architectural overhead in the core path&lt;/li&gt;
&lt;li&gt;building features that feel like part of the OS, not layered on top of it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was the point of choosing Swift.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade-off we accepted
&lt;/h2&gt;

&lt;p&gt;This path is slower.&lt;/p&gt;

&lt;p&gt;The ecosystem is smaller.&lt;br&gt;&lt;br&gt;
The tooling is narrower.&lt;br&gt;&lt;br&gt;
Some things are harder than they would be in web stacks.&lt;/p&gt;

&lt;p&gt;But you also get something important in return:&lt;/p&gt;

&lt;p&gt;a product whose architecture matches its platform.&lt;/p&gt;

&lt;p&gt;For Brow, that trade was worth it.&lt;/p&gt;




&lt;p&gt;Original posts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://macbrow.app/blog/why-we-built-brow-in-swift-not-electron" rel="noopener noreferrer"&gt;Why We Built Brow in Swift, Not Electron&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brow-app.com/blog/brow-vs-raycast-honest-comparison" rel="noopener noreferrer"&gt;Brow vs Raycast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://macbrow.app" rel="noopener noreferrer"&gt;Brow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>performance</category>
      <category>showdev</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
