<?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: Yusuf Can Ozan</title>
    <description>The latest articles on DEV Community by Yusuf Can Ozan (@yusufcanozan).</description>
    <link>https://dev.to/yusufcanozan</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%2F3650077%2Ff8a4754d-0108-484a-9b00-b1995f5bd12c.jpeg</url>
      <title>DEV Community: Yusuf Can Ozan</title>
      <link>https://dev.to/yusufcanozan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yusufcanozan"/>
    <language>en</language>
    <item>
      <title>Building DevToolbox: 37 Local-First Developer Tools in One Browser Workspace</title>
      <dc:creator>Yusuf Can Ozan</dc:creator>
      <pubDate>Thu, 01 Oct 2026 14:44:41 +0000</pubDate>
      <link>https://dev.to/yusufcanozan/building-devtoolbox-37-local-first-developer-tools-in-one-browser-workspace-3d6</link>
      <guid>https://dev.to/yusufcanozan/building-devtoolbox-37-local-first-developer-tools-in-one-browser-workspace-3d6</guid>
      <description>&lt;p&gt;I’ve been working on &lt;strong&gt;DevToolbox&lt;/strong&gt;, an open-source browser workspace that brings common developer utilities together in one place.&lt;/p&gt;

&lt;p&gt;The project currently includes &lt;strong&gt;37 tools&lt;/strong&gt; for working with code, structured data, images, PDFs, archives, encoders, generators, and other everyday developer tasks.&lt;/p&gt;

&lt;p&gt;But the main goal was never simply to build another collection of online tools.&lt;/p&gt;

&lt;p&gt;I wanted the tools to work together while keeping processing as local and private as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built DevToolbox
&lt;/h2&gt;

&lt;p&gt;There are many great online developer utilities, but I often found myself jumping between different websites for simple tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;formatting JSON&lt;/li&gt;
&lt;li&gt;inspecting files&lt;/li&gt;
&lt;li&gt;converting images&lt;/li&gt;
&lt;li&gt;working with PDFs&lt;/li&gt;
&lt;li&gt;generating hashes&lt;/li&gt;
&lt;li&gt;testing regular expressions&lt;/li&gt;
&lt;li&gt;converting structured data&lt;/li&gt;
&lt;li&gt;creating ZIP archives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another concern was file processing.&lt;/p&gt;

&lt;p&gt;For many small developer tasks, uploading a file to a remote service feels unnecessary.&lt;/p&gt;

&lt;p&gt;So I started building DevToolbox around a simple principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Process supported inputs locally in the browser whenever possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DevToolbox does not require an account, and it does not use a conversion backend or analytics service.&lt;/p&gt;

&lt;h2&gt;
  
  
  37 tools, one workspace
&lt;/h2&gt;

&lt;p&gt;Instead of treating every tool as an isolated page, DevToolbox includes a persistent &lt;strong&gt;Workspace&lt;/strong&gt; backed by IndexedDB.&lt;/p&gt;

&lt;p&gt;A file can be imported once and reused by compatible tools.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PDF
↓
PDF → Images
↓
Workspace
↓
Image Cropper
↓
Image Compressor
↓
Download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the application feel more like a small browser-based developer workspace than a directory of unrelated utilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  The central tool registry
&lt;/h2&gt;

&lt;p&gt;One architectural decision that became increasingly useful as the project grew was keeping tool metadata in a central registry.&lt;/p&gt;

&lt;p&gt;The registry drives things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;routes&lt;/li&gt;
&lt;li&gt;categories&lt;/li&gt;
&lt;li&gt;global search&lt;/li&gt;
&lt;li&gt;favorites&lt;/li&gt;
&lt;li&gt;recently used tools&lt;/li&gt;
&lt;li&gt;file compatibility&lt;/li&gt;
&lt;li&gt;Workspace handoffs&lt;/li&gt;
&lt;li&gt;related-tool recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means adding or changing a tool does not require maintaining the same metadata independently across several parts of the UI.&lt;/p&gt;

&lt;p&gt;With 37 tools, this became especially important.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in v4.1
&lt;/h2&gt;

&lt;p&gt;The latest release focuses heavily on the Workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workspace Collections
&lt;/h3&gt;

&lt;p&gt;Files can now be organized into collections.&lt;/p&gt;

&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create collections&lt;/li&gt;
&lt;li&gt;rename them&lt;/li&gt;
&lt;li&gt;move individual files&lt;/li&gt;
&lt;li&gt;move multiple selected files&lt;/li&gt;
&lt;li&gt;filter the Workspace by collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deleting a collection does not delete the files inside it.&lt;/p&gt;

&lt;p&gt;The IndexedDB schema was also migrated additively so existing Workspace data is preserved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart File Inspector
&lt;/h3&gt;

&lt;p&gt;The new Smart File Inspector can inspect supported files locally.&lt;/p&gt;

&lt;p&gt;It currently understands formats such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;images&lt;/li&gt;
&lt;li&gt;PDFs&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;ZIP archives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can examine metadata and recommend compatible DevToolbox tools.&lt;/p&gt;

&lt;p&gt;For supported binary formats, detection can also use file signatures instead of relying only on the reported MIME type or filename.&lt;/p&gt;

&lt;p&gt;The inspector is intentionally deterministic.&lt;/p&gt;

&lt;p&gt;It does not send files to an AI service or backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Package.json Analyzer
&lt;/h3&gt;

&lt;p&gt;I also added a local &lt;code&gt;package.json&lt;/code&gt; analyzer.&lt;/p&gt;

&lt;p&gt;It can display:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;project metadata&lt;/li&gt;
&lt;li&gt;dependency groups&lt;/li&gt;
&lt;li&gt;scripts&lt;/li&gt;
&lt;li&gt;structural diagnostics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Input can come from pasted JSON, a local file, or the DevToolbox Workspace.&lt;/p&gt;

&lt;p&gt;It does not query npm or claim that a dependency is outdated or vulnerable.&lt;/p&gt;

&lt;p&gt;The analysis is based only on the provided file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local processing and workers
&lt;/h2&gt;

&lt;p&gt;Some tasks are heavier than simple text transformations.&lt;/p&gt;

&lt;p&gt;DevToolbox uses browser-side processing for features including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF operations&lt;/li&gt;
&lt;li&gt;PDF.js rendering&lt;/li&gt;
&lt;li&gt;ZIP processing with fflate&lt;/li&gt;
&lt;li&gt;code formatting with Prettier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where appropriate, heavier work is moved into local workers.&lt;/p&gt;

&lt;p&gt;This helps keep the UI responsive without introducing a processing backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  PWA and offline support
&lt;/h2&gt;

&lt;p&gt;DevToolbox is also installable as a PWA.&lt;/p&gt;

&lt;p&gt;After the required assets have been cached, many parts of the application can continue working without a network connection.&lt;/p&gt;

&lt;p&gt;Workspace files remain separate from the service-worker cache and are stored locally through IndexedDB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy by design
&lt;/h2&gt;

&lt;p&gt;The current architecture intentionally avoids several things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no account system&lt;/li&gt;
&lt;li&gt;no analytics&lt;/li&gt;
&lt;li&gt;no automatic cloud upload&lt;/li&gt;
&lt;li&gt;no conversion API&lt;/li&gt;
&lt;li&gt;no backend required for supported processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Files only leave the application when the user explicitly downloads or exports something.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the project
&lt;/h2&gt;

&lt;p&gt;As the number of tools increased, regression testing became much more important.&lt;/p&gt;

&lt;p&gt;The project currently includes unit and end-to-end coverage, and the application is verified across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chromium&lt;/li&gt;
&lt;li&gt;Firefox&lt;/li&gt;
&lt;li&gt;WebKit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The GitHub Pages production build is also tested with the &lt;code&gt;/DevToolbox/&lt;/code&gt; base path because routing and asset paths can behave differently when an application is hosted inside a repository subdirectory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;The main stack currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 19&lt;/li&gt;
&lt;li&gt;TypeScript 6&lt;/li&gt;
&lt;li&gt;Vite 8&lt;/li&gt;
&lt;li&gt;Tailwind CSS 4&lt;/li&gt;
&lt;li&gt;React Router&lt;/li&gt;
&lt;li&gt;IndexedDB&lt;/li&gt;
&lt;li&gt;vite-plugin-pwa&lt;/li&gt;
&lt;li&gt;pdf-lib&lt;/li&gt;
&lt;li&gt;PDF.js&lt;/li&gt;
&lt;li&gt;fflate&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is completely open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live application:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://can-ozan.github.io/DevToolbox/" rel="noopener noreferrer"&gt;https://can-ozan.github.io/DevToolbox/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Can-Ozan/DevToolbox" rel="noopener noreferrer"&gt;https://github.com/Can-Ozan/DevToolbox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m particularly interested in feedback about the &lt;strong&gt;Workspace model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Does moving files between compatible browser tools feel useful compared with using isolated utilities?&lt;/p&gt;

&lt;p&gt;I’d also like to hear which developer tools you think would fit naturally into a local-first workspace.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Most GitHub README Generators out there feel identical and lacking. 🤦‍♂️

I'm building a modern, highly customizable open-source tool.

What’s that ONE feature you always wished a profile README generator had? Drop your thoughts below! 👇

#buildinpublic</title>
      <dc:creator>Yusuf Can Ozan</dc:creator>
      <pubDate>Wed, 22 Jul 2026 14:37:51 +0000</pubDate>
      <link>https://dev.to/yusufcanozan/most-github-readme-generators-out-there-feel-identical-and-lacking-im-building-a-modern-f7k</link>
      <guid>https://dev.to/yusufcanozan/most-github-readme-generators-out-there-feel-identical-and-lacking-im-building-a-modern-f7k</guid>
      <description></description>
      <category>buildinpublic</category>
      <category>github</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
