<?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: Kirill Isachenko</title>
    <description>The latest articles on DEV Community by Kirill Isachenko (@lirikpro).</description>
    <link>https://dev.to/lirikpro</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3857637%2F53d70051-b25e-455a-9f88-0d0afbd834c5.png</url>
      <title>DEV Community: Kirill Isachenko</title>
      <link>https://dev.to/lirikpro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lirikpro"/>
    <language>en</language>
    <item>
      <title>Local AI file renaming with Ollama or LM Studio: what to check before using it</title>
      <dc:creator>Kirill Isachenko</dc:creator>
      <pubDate>Fri, 11 Sep 2026 01:04:45 +0000</pubDate>
      <link>https://dev.to/lirikpro/local-ai-file-renaming-with-ollama-or-lm-studio-what-to-check-before-using-it-3j1p</link>
      <guid>https://dev.to/lirikpro/local-ai-file-renaming-with-ollama-or-lm-studio-what-to-check-before-using-it-3j1p</guid>
      <description>&lt;p&gt;To rename files locally with Zush, download a compatible model, start its local server and select that server in Zush Settings. A successful connection means the server is reachable. You still need to check whether the model can read your files and produce useful names.&lt;/p&gt;

&lt;p&gt;I build Zush. This setup guide follows the product documentation. It includes a test you can run, but reports no local-model benchmark or network audit. The separate eight-file Zush pilot used Cloud AI and does not establish local-model performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick a model for the input
&lt;/h2&gt;

&lt;p&gt;If analysis depends on screenshots, scans or page previews, use a vision-capable model. A text-only model is not a substitute simply because it produces good answers in chat.&lt;/p&gt;

&lt;p&gt;Also check memory and disk requirements. The file extension alone does not establish that a given model and application pipeline can interpret its contents well. Test the types you actually receive.&lt;/p&gt;

&lt;p&gt;Zush's &lt;a href="https://zushapp.com/docs/offline-ai" rel="noopener noreferrer"&gt;Ollama setup documentation&lt;/a&gt; lists &lt;code&gt;qwen2.5vl:3b&lt;/code&gt; as one starting option. That is a setup example, not a claim that it is the best or fastest model for every machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Ollama
&lt;/h2&gt;

&lt;p&gt;Install Ollama and download the chosen local model while online. For the documented example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull qwen2.5vl:3b
ollama list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the server is not already running, start it with &lt;code&gt;ollama serve&lt;/code&gt;. In Zush, open Settings → AI Modes, choose Ollama, refresh the model list, select the installed model and run Test. The documented default host is &lt;code&gt;http://127.0.0.1:11434&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ollama also offers cloud models, as its &lt;a href="https://docs.ollama.com/quickstart" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt; shows. For this workflow, deliberately select a downloaded local model; using the Ollama interface by itself is not proof of local inference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect LM Studio
&lt;/h2&gt;

&lt;p&gt;Download a vision-capable model in LM Studio and start its server from the Developer tab. LM Studio documents that server operation in its &lt;a href="https://lmstudio.ai/docs/developer/core/server" rel="noopener noreferrer"&gt;local API server guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In Zush Settings → AI Modes, choose LM Studio. Confirm the host, refresh the models, choose the model and run Test. Zush's documented default is &lt;code&gt;http://127.0.0.1:1234&lt;/code&gt;; its &lt;a href="https://zushapp.com/docs/lm-studio" rel="noopener noreferrer"&gt;LM Studio guide&lt;/a&gt; also explains model discovery and troubleshooting.&lt;/p&gt;

&lt;p&gt;A loopback address points to this computer. A server hosted on another machine is a different deployment, even if its API is compatible. Record the endpoint you actually use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test naming quality separately from connectivity
&lt;/h2&gt;

&lt;p&gt;Create a small folder of copies containing a clear screenshot, a text PDF, an image-only scan and an ambiguous document. Before analysis, write down the minimum fields each filename needs.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OS and hardware:
Zush version:
Runtime version:
Exact model identifier and quantization, if available:
Endpoint:
Template and output language:
Input file types:
Original suggestions:
Manual corrections:
Unsupported files or failures:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leave unknown values marked unknown. Do not fill them with plausible model names.&lt;/p&gt;

&lt;p&gt;Compare the proposed names with the source files. Check whether the scan's vendor is correct, whether a date was confused with another date and whether similar files remain distinguishable. Keep the raw proposals before editing them. Note which fields you had to correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the workflow without a network connection
&lt;/h2&gt;

&lt;p&gt;Download models and finish setup before disconnecting. With the local mode selected, repeat a supported-file test without a network connection and record what succeeds or fails.&lt;/p&gt;

&lt;p&gt;That test can show whether the observed workflow works disconnected. It does not, by itself, establish that the application never makes any network request when connected. That stronger claim needs separate observation.&lt;/p&gt;

&lt;p&gt;Zush documents supported analysis through its local modes without silent fallback to cloud analysis. BYOK is a separate option that uses a cloud provider key. The &lt;a href="https://zushapp.com/offline-ai-file-renamer?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=seeding_202609&amp;amp;utm_content=local_ai" rel="noopener noreferrer"&gt;local AI overview&lt;/a&gt; explains the distinction.&lt;/p&gt;

&lt;p&gt;Only enable folder monitoring after the manual batch produces useful, reviewable names. Record unsupported files and uncertain fields alongside the successful names.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>privacy</category>
    </item>
    <item>
      <title>What an eight-file AI renaming pilot taught us about useful filenames</title>
      <dc:creator>Kirill Isachenko</dc:creator>
      <pubDate>Thu, 10 Sep 2026 05:01:35 +0000</pubDate>
      <link>https://dev.to/lirikpro/what-an-eight-file-ai-renaming-pilot-taught-us-about-useful-filenames-280f</link>
      <guid>https://dev.to/lirikpro/what-an-eight-file-ai-renaming-pilot-taught-us-about-useful-filenames-280f</guid>
      <description>&lt;p&gt;An AI-generated filename is useful when it identifies the file, preserves the details needed to distinguish it and avoids unsupported information. In our eight-file Zush pilot, some names captured useful identifiers, while one contract title left out details we would need in a larger archive.&lt;/p&gt;

&lt;p&gt;I build Zush. This was our own small application check, run on September 5, 2026, on macOS 26.5.2 with Apple Silicon. It was not an independent review or a representative accuracy benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we ran
&lt;/h2&gt;

&lt;p&gt;The set contained three text PDFs, an image-only receipt PDF, two text-based PNGs, a synthetic spoken WAV and an existing Zush demo MP4. The documents used fictional content.&lt;/p&gt;

&lt;p&gt;Zush 3.11.0 (165) ran with Cloud AI and the existing Smart Title Name template. Its configured output language was Russian. We applied eight suggestions to isolated copies; SHA-256 checks confirmed that all eight files retained their original contents.&lt;/p&gt;

&lt;p&gt;The table below contains all eight Zush outputs from the saved test record. This account evaluates those results without ranking products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the names helped
&lt;/h2&gt;

&lt;p&gt;For &lt;code&gt;file_001.pdf&lt;/code&gt;, Zush applied &lt;code&gt;Счет NS-1042 От Northstar Studio.pdf&lt;/code&gt;. In English, that means an invoice from Northstar Studio with the identifier NS-1042. It captured two useful retrieval fields: vendor and invoice number. The recorded name did not include the date.&lt;/p&gt;

&lt;p&gt;For the image-only receipt, &lt;code&gt;file_004.pdf&lt;/code&gt; became &lt;code&gt;Чек Pine Street Cafe.pdf&lt;/code&gt;. The cafe name came through in the result even though the PDF had no selectable text and carried the generic metadata title "Benchmark fixture." We recorded the resulting name, not the internal processing steps.&lt;/p&gt;

&lt;p&gt;The WAV became &lt;code&gt;Обсуждение Осеннего Запуска Продукта.wav&lt;/code&gt;, describing a discussion of an autumn product launch. The MP4 became &lt;code&gt;Демонстрация Работы Приложения AI Rename.mp4&lt;/code&gt;, describing an AI Rename application demonstration. These English explanations are translations for the reader; the Cyrillic strings are the recorded filenames.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a correct title was still incomplete
&lt;/h2&gt;

&lt;p&gt;The service agreement became &lt;code&gt;Соглашение Об Оказании Услуг.pdf&lt;/code&gt;, meaning "Service Agreement." That identifies the document type, but leaves out the parties and draft status.&lt;/p&gt;

&lt;p&gt;In a folder containing a single agreement, it may be enough. In a client archive with twenty agreements, it is unlikely to distinguish the one you need. To evaluate the name, first decide which agreement someone needs to find.&lt;/p&gt;

&lt;p&gt;For this file, a future test could require the parties and draft status explicitly, then check whether the configured workflow supplies them correctly. We did not run that test here.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this pilot does not establish
&lt;/h2&gt;

&lt;p&gt;Eight applied names are not an accuracy percentage. This was one pass with a small controlled set. It did not test Windows, local models, large files, naming collisions, repeated-run consistency or undo. Backend model IDs were not exposed in the observed UI.&lt;/p&gt;

&lt;p&gt;Custom AI Blocks were not tested either. Zush documents configurable naming fields, but that capability should not be presented as a result of this run.&lt;/p&gt;

&lt;p&gt;The content-hash check has a similarly narrow meaning: file bytes stayed unchanged for these eight applied renames. It does not establish how every downstream project would respond to changed paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to make the next check more useful
&lt;/h2&gt;

&lt;p&gt;Before running another batch, define the required fields for each file. Preserve the unedited proposals. Record missing fields, unsupported details, manual corrections and operational failures separately. Align templates and output languages when comparing applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The complete recorded Zush outputs
&lt;/h2&gt;

&lt;p&gt;The following names are transcribed from the saved September 5 test record. They are the original Russian outputs, not rewritten English examples. All eight suggestions were applied to test copies.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Applied filename&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;file_001.pdf&lt;/td&gt;
&lt;td&gt;Счет NS-1042 От Northstar Studio.pdf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_002.pdf&lt;/td&gt;
&lt;td&gt;Соглашение Об Оказании Услуг.pdf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_003.pdf&lt;/td&gt;
&lt;td&gt;Протокол Встречи Autumn Product Launch.pdf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_004.pdf&lt;/td&gt;
&lt;td&gt;Чек Pine Street Cafe.pdf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_005.png&lt;/td&gt;
&lt;td&gt;Чек-Лист Доступности Веб-Сайта.png&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_006.png&lt;/td&gt;
&lt;td&gt;Статистика Ежемесячных Запросов В Поддержку.png&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_007.wav&lt;/td&gt;
&lt;td&gt;Обсуждение Осеннего Запуска Продукта.wav&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;file_008.mp4&lt;/td&gt;
&lt;td&gt;Демонстрация Работы Приложения AI Rename.mp4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: Zush's local pilot record, &lt;code&gt;ai-file-renamer-pilot-2026-09-05&lt;/code&gt;, including the saved application outputs and setup notes. The standalone evidence-file URL was unavailable when this article was prepared, so this table reports the recorded observations directly. The public &lt;a href="https://zushapp.com/methodology?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=seeding_202609&amp;amp;utm_content=eight_file_pilot" rel="noopener noreferrer"&gt;Zush methodology&lt;/a&gt; provides general evaluation context; it is not the raw dataset for this particular run.&lt;/p&gt;

&lt;p&gt;For the next run, I would check whether someone can find the requested file from its new name. Recording a rename for every input does not answer that question.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>testing</category>
      <category>discuss</category>
    </item>
    <item>
      <title>I Don’t Know Swift. I Shipped a macOS App Anyway.</title>
      <dc:creator>Kirill Isachenko</dc:creator>
      <pubDate>Thu, 02 Apr 2026 12:39:00 +0000</pubDate>
      <link>https://dev.to/lirikpro/i-dont-know-swift-i-shipped-a-macos-app-anyway-16ee</link>
      <guid>https://dev.to/lirikpro/i-dont-know-swift-i-shipped-a-macos-app-anyway-16ee</guid>
      <description>&lt;p&gt;I’m a designer. I’ve never written Swift before this year. And I now have a native macOS app on the App Store that people pay for.&lt;/p&gt;

&lt;p&gt;This is not a flex. It’s an observation about what’s possible right now, and what’s still hard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update — August 2026
&lt;/h2&gt;

&lt;p&gt;A lot has changed since I wrote this. Zush is now a native AI file renamer for Mac and Windows, with support for 104 file formats.&lt;/p&gt;

&lt;p&gt;The naming system is much more flexible now. You can build reusable templates from 145+ Naming Blocks, add Custom AI Blocks for fields you want to extract, and combine them with dates, counters, metadata, separators, and case styles.&lt;/p&gt;

&lt;p&gt;Every batch can be reviewed before applying it. If the result does not work, the original filenames can be restored from Activity history.&lt;/p&gt;

&lt;p&gt;There are three processing options: managed Cloud AI built into the app, BYOK with your own Gemini, Groq, OpenAI, or Claude API key, and Offline AI with a local Ollama model for supported files.&lt;/p&gt;

&lt;p&gt;The free version includes 50 renames across all three modes. Current Mac and Windows builds are available at &lt;a href="https://zushapp.com" rel="noopener noreferrer"&gt;zushapp.com&lt;/a&gt;.&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%2Fa3q54mtafnef0zslsg7q.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%2Fa3q54mtafnef0zslsg7q.png" alt="Zush AI file renamer for macOS" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;I had a folder with 2,000 screenshots named Screenshot 2024-11-03 at 14.22.57.png. My photo library was all IMG_4382.jpg. I wanted an app that would look at these files, understand what's in them, and rename them to something searchable.&lt;/p&gt;

&lt;p&gt;Apps like this exist. I tried all of them. They all look like they were designed in 2009. But the worse part wasn’t even the design — it was the speed. I’d drag in 10 files and wait. And wait. Some tools took seconds per file. I genuinely couldn’t understand how people were paying for this. If your AI-powered renamer is slower than me renaming files by hand, something has gone wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So I decided to build my own.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The app is called Zush. It uses AI to analyze supported file content and metadata, then proposes descriptive filenames. On Mac it can add Finder tags and Spotlight metadata, and folder monitoring can process new files as they arrive. The Mac app is native Swift/SwiftUI; the Windows version is a separate native app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe-coding is real, but incomplete
&lt;/h2&gt;

&lt;p&gt;The app was largely vibe-coded. Claude Code and Codex wrote most of the Swift. I shaped the UX and made sure everything felt native.&lt;/p&gt;

&lt;p&gt;This worked surprisingly well for about 80% of the work. The last 20% is where it gets interesting.&lt;/p&gt;

&lt;p&gt;AI can scaffold a networking layer in minutes. It cannot debug why your folder monitoring feature renames the same file 47 times because of a race condition. It doesn’t understand that a subtle layout shift on Sonoma doesn’t happen on Sequoia. These are the things you still have to reason about yourself.&lt;/p&gt;

&lt;p&gt;The path of least resistance problem applies here too. The model will happily fix a symptom in the UI when the root cause is three layers deeper. You have to know enough to ask the right questions. “Fix this bug” and “find the root cause of this bug” produce very different results.&lt;/p&gt;

&lt;p&gt;Still — a designer with zero Swift experience shipping a native macOS app in about two months. That’s new. The tools made it possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  From one cloud provider to three processing modes
&lt;/h2&gt;

&lt;p&gt;At launch, the managed cloud path used Groq with Llama models because speed and cost mattered for batch renaming. That was the right starting point, but it was too narrow as a long-term setup.&lt;/p&gt;

&lt;p&gt;Zush now offers three processing modes: managed Cloud AI built into the app, BYOK with Gemini, Groq, OpenAI, or Claude, and Offline AI with a local Ollama model for supported files.&lt;/p&gt;

&lt;p&gt;BYOK gives users control over the provider and model they pay for. Offline AI is for supported workflows that should stay on the machine. Both are available within the same 50-rename free allowance; PRO removes the rename limit across every mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexible naming rules, templates, and Custom AI Blocks
&lt;/h2&gt;

&lt;p&gt;One feature I’m particularly happy with is the naming system. Instead of accepting a rigid AI-generated title, users can build reusable Templates from 145+ Naming Blocks: dates, counters, metadata, original filename elements, separators, case styles, and other structured fields.&lt;/p&gt;

&lt;p&gt;Custom AI Blocks cover the details that are not already available as metadata. You describe the field you want Zush to extract, then reuse that block inside any Template.&lt;/p&gt;

&lt;p&gt;A photographer can combine the date, camera model, and an AI-generated description. An accountant can extract a vendor or invoice number. A legal team can include a document type, party, or date. The same app follows a different naming convention for each workflow.&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%2Fi8hkauaef3ex3shyw495.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%2Fi8hkauaef3ex3shyw495.png" alt="Custom AI Blocks and flexible naming templates in Zush" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing changed as the product changed
&lt;/h2&gt;

&lt;p&gt;The first version of this post described an earlier one-time pricing experiment. That pricing is no longer current.&lt;/p&gt;

&lt;p&gt;The free version now includes 50 renames shared across managed Cloud AI, BYOK, and Offline AI. Zush PRO costs $10 per month or $48 as a one-time lifetime purchase. Both PRO options remove the rename limit across all three processing modes.&lt;/p&gt;

&lt;p&gt;I kept the one-time option because many utility users prefer to buy a tool once. The monthly option is there for people who prefer a lower upfront cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating releases as a solo dev
&lt;/h2&gt;

&lt;p&gt;When you’re one person, you’re the entire company. Every manual process is a tax on your time.&lt;/p&gt;

&lt;p&gt;I fully automated the release pipeline for both the direct download and the App Store. Push a git tag, CI builds, signs, notarizes, and ships. The App Store version goes through TestFlight. The direct build updates via Sparkle with delta updates.&lt;/p&gt;

&lt;p&gt;I push a tag and make tea. By the time it’s ready, both versions are live. This took significant effort to set up, but the ROI is immediate when you’re shipping updates weekly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design as competitive advantage
&lt;/h2&gt;

&lt;p&gt;Every competitor I evaluated treats design as an afterthought. This makes sense — they’re built by developers optimizing for functionality.&lt;/p&gt;

&lt;p&gt;But on macOS, users expect things to feel native. Smooth animations, proper spacing, keyboard shortcuts that behave like every other Mac app. The difference between “this works” and “this feels right” is measurable in retention, even if it’s hard to quantify upfront.&lt;/p&gt;

&lt;p&gt;I spent more time on how drag-and-drop feels than on some entire features. That’s a luxury of being a designer who also ships the product. You don’t have to convince anyone that the animation curve matters. You just fix it.&lt;/p&gt;

&lt;p&gt;Photographers turned out to be the most excited audience. Zush now supports 104 file formats in total, including common RAW camera formats, and naming templates can include EXIF and other metadata fields. The niche within the niche was the real market.&lt;/p&gt;

&lt;h2&gt;
  
  
  What came next
&lt;/h2&gt;

&lt;p&gt;The Windows version shipped. It is a separate native Windows app rather than a wrapper around the Mac build.&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%2F4rny5d2fvmk373lwxao9.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%2F4rny5d2fvmk373lwxao9.png" alt="Zush for Windows" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The models keep getting faster and cheaper. What used to require a larger team and significant infrastructure is now practical in a desktop tool built by a solo developer.&lt;/p&gt;

&lt;p&gt;I don’t think this is unique to me. The tools are there for anyone with domain expertise and a problem worth solving. The hard part was never only the code. It was knowing what the product should feel like.&lt;/p&gt;

&lt;p&gt;Zush is available for Mac and Windows at &lt;a href="https://zushapp.com" rel="noopener noreferrer"&gt;zushapp.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>swift</category>
      <category>ai</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
