<?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: OneSearch</title>
    <description>The latest articles on DEV Community by OneSearch (@onesearchapp).</description>
    <link>https://dev.to/onesearchapp</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%2F4041244%2F26d96073-de3f-4843-afa2-2cc2ce917658.png</url>
      <title>DEV Community: OneSearch</title>
      <link>https://dev.to/onesearchapp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onesearchapp"/>
    <language>en</language>
    <item>
      <title>Building OneSearch: turning web results into semantic folders with local AI</title>
      <dc:creator>OneSearch</dc:creator>
      <pubDate>Wed, 22 Jul 2026 06:27:55 +0000</pubDate>
      <link>https://dev.to/onesearchapp/building-onesearch-turning-web-results-into-semantic-folders-with-local-ai-52a8</link>
      <guid>https://dev.to/onesearchapp/building-onesearch-turning-web-results-into-semantic-folders-with-local-ai-52a8</guid>
      <description>&lt;p&gt;Search engines are good at finding links, but a long flat list still leaves the user with the work of building a mental model. I built &lt;strong&gt;OneSearch&lt;/strong&gt; to test a different interface: collect web results, organize related pages into semantic folders, and keep that structure visible while sources open in independent desktop tabs.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiem91dnyyfvi9natiqa1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiem91dnyyfvi9natiqa1.png" alt="OneSearch interface" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline
&lt;/h2&gt;

&lt;p&gt;A OneSearch query moves through four stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetch web search results.&lt;/li&gt;
&lt;li&gt;Create embeddings locally through Ollama.&lt;/li&gt;
&lt;li&gt;Cluster related results using the embedding vectors.&lt;/li&gt;
&lt;li&gt;Ask a local labeling model to name each cluster and build a folder hierarchy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The resulting workspace is not just a generated summary. Every original result remains available, and each page opens in its own in-app tab so the user can compare sources without losing the folder structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why local AI
&lt;/h2&gt;

&lt;p&gt;The AI classification runs on the user's computer. The free setup uses a 4B labeling model so it can run on more machines, while the Pro option can use an 8B or 14B model for more precise labels.&lt;/p&gt;

&lt;p&gt;"Local AI" does not mean the entire app is offline: search still needs the network and the selected search provider. It means the embedding and labeling stages run through the local Ollama runtime rather than sending search-result text to a hosted language model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reliability problem I hit
&lt;/h2&gt;

&lt;p&gt;Small models do not always return valid structured output. During testing, the 4B model could occasionally fail the labeling stage with malformed JSON or incomplete cluster labels. Treating that as a fatal pipeline error made the whole search feel broken even though collection, embedding, and clustering had already succeeded.&lt;/p&gt;

&lt;p&gt;For 1.0.0 I changed the failure behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate the model response against the expected cluster set.&lt;/li&gt;
&lt;li&gt;Keep model-generated labels when the response is complete.&lt;/li&gt;
&lt;li&gt;When generation fails or labels are missing, create deterministic labels from the cluster's domain, title, and keyword signals.&lt;/li&gt;
&lt;li&gt;Return the complete folder hierarchy instead of failing the search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fallback is less expressive than a successful model response, but it preserves the useful work and makes the free 4B path much more predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desktop packaging
&lt;/h2&gt;

&lt;p&gt;OneSearch is built as a Tauri desktop application for macOS Apple Silicon and Windows x64. The release bundles the application server and prepares the local Ollama runtime so first-run setup can install the required models.&lt;/p&gt;

&lt;p&gt;The current 1.0.0 binaries have been rebuilt and verified by SHA-256. macOS startup was smoke-tested from the DMG, and the Windows installer structure and x64 binaries were checked from the build environment.&lt;/p&gt;

&lt;p&gt;There is still an important limitation: Apple Developer ID/notarization and Windows code signing are pending. Gatekeeper or SmartScreen can therefore show a security warning. I document that directly instead of presenting the current build as warning-free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to learn next
&lt;/h2&gt;

&lt;p&gt;The main questions are not about adding more generated text. I want to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are the folders actually useful for research and comparison?&lt;/li&gt;
&lt;li&gt;Is first-run local-model setup understandable?&lt;/li&gt;
&lt;li&gt;When the fallback activates, are its labels still good enough to navigate?&lt;/li&gt;
&lt;li&gt;Which search workflows are worth saving and exporting?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can try OneSearch on &lt;a href="https://onesearch-download.adultdongsoo0516.chatgpt.site/?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=1-0-launch" rel="noopener noreferrer"&gt;macOS Apple Silicon or Windows x64&lt;/a&gt;. The &lt;a href="https://github.com/onesearch-app/onesearch/releases/tag/v1.0.0" rel="noopener noreferrer"&gt;GitHub release&lt;/a&gt; includes the installers, hashes, and current signing status.&lt;/p&gt;

&lt;p&gt;Feedback on the clustering, onboarding, and desktop workflow is welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>tauri</category>
    </item>
  </channel>
</rss>
