<?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: Cengiz Selçuk</title>
    <description>The latest articles on DEV Community by Cengiz Selçuk (@cengiz_selcuk).</description>
    <link>https://dev.to/cengiz_selcuk</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%2F3784635%2F0be51fe6-0703-4d37-9f1e-095900c54f2b.jpg</url>
      <title>DEV Community: Cengiz Selçuk</title>
      <link>https://dev.to/cengiz_selcuk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cengiz_selcuk"/>
    <language>en</language>
    <item>
      <title>I built a system-wide tech dictionary because AI made me feel dumb</title>
      <dc:creator>Cengiz Selçuk</dc:creator>
      <pubDate>Sun, 22 Feb 2026 05:16:37 +0000</pubDate>
      <link>https://dev.to/cengiz_selcuk/i-built-a-system-wide-tech-dictionary-because-ai-made-me-feel-dumb-e31</link>
      <guid>https://dev.to/cengiz_selcuk/i-built-a-system-wide-tech-dictionary-because-ai-made-me-feel-dumb-e31</guid>
      <description>&lt;h2&gt;
  
  
  The moment that started it all
&lt;/h2&gt;

&lt;p&gt;A few months ago, I asked Claude to help me set up a deployment pipeline. It gave me a perfectly working config with nginx reverse proxy, Docker multi-stage builds, health check endpoints, and graceful shutdown handlers.&lt;/p&gt;

&lt;p&gt;It worked on the first try.&lt;/p&gt;

&lt;p&gt;And I understood maybe 40% of it.&lt;/p&gt;

&lt;p&gt;I could &lt;em&gt;use&lt;/em&gt; it. I could copy-paste it. I could even modify it slightly. But if someone asked me what a reverse proxy actually does, or why the Docker build had multiple FROM statements, I'd have to fake my way through.&lt;/p&gt;

&lt;p&gt;This is the new normal for a lot of us. AI writes code that works, but it uses vocabulary we haven't fully internalized. And the gap between "it works" and "I understand why" keeps growing.&lt;/p&gt;

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

&lt;p&gt;The obvious answer is "just look it up." But here's what that actually looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You're in VS Code, reading AI-generated code&lt;/li&gt;
&lt;li&gt;You hit a term you don't fully get&lt;/li&gt;
&lt;li&gt;You open a browser, Google it&lt;/li&gt;
&lt;li&gt;You get a Stack Overflow answer written for someone with a different context&lt;/li&gt;
&lt;li&gt;You read three paragraphs, open two more tabs&lt;/li&gt;
&lt;li&gt;You forgot what you were doing&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or you ask the AI to explain, which opens a new chat thread, loses context, and turns a 5-second question into a 2-minute conversation.&lt;/p&gt;

&lt;p&gt;What I wanted was: select the term, press a key, get an answer, keep going.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I built it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Quill&lt;/strong&gt; is a macOS menu bar app. It does one thing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select any term in any app&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl+Option+Q&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A floating panel appears near your cursor with an explanation&lt;/li&gt;
&lt;li&gt;The panel doesn't steal focus — your source app stays active&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's the core. But a few features make it actually useful for learning, not just quick lookups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explanation levels
&lt;/h2&gt;

&lt;p&gt;Not everyone needs the same depth. Quill has 5 levels you can switch between with one click:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ELI5&lt;/strong&gt; — Simple words, analogies. "A WebSocket is like a phone call instead of sending letters."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ELI15&lt;/strong&gt; — Real terms, clear language. Good for intermediate learners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt; — Trade-offs, patterns, when to use what, edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Samples&lt;/strong&gt; — 2-3 practical code snippets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resources&lt;/strong&gt; — What to study next, official docs, common pitfalls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key insight: you often start at ELI5, then want to go deeper once it clicks. Having all levels one click away makes that natural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drill-down: the rabbit hole feature
&lt;/h2&gt;

&lt;p&gt;This is the part I use the most. The AI marks related terms in the explanation with double brackets, and Quill turns them into clickable links.&lt;/p&gt;

&lt;p&gt;Click "TCP" inside a WebSocket explanation, and you get TCP's explanation. Click "packet" inside that, go deeper. A breadcrumb trail keeps track of where you are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WebSocket &amp;gt; TCP &amp;gt; packet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click any breadcrumb to jump back. It's like a personal Wikipedia for tech concepts, except every article is written at the level you chose.&lt;/p&gt;

&lt;p&gt;You can also just select any text in the explanation and press the hotkey again — no brackets needed. See a term you want to explore? Select it, same shortcut, deeper you go.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture (for the curious)
&lt;/h2&gt;

&lt;p&gt;I went with Hexagonal Architecture (Ports &amp;amp; Adapters) in Swift:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Domain/          — Models + Ports (AIServiceProtocol)
Infrastructure/  — AI backends, Accessibility API, Keychain
Presentation/    — FloatingPanel, Settings, MenuBar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few technical decisions that might be interesting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-activating NSPanel.&lt;/strong&gt; The floating panel uses &lt;code&gt;NSPanel&lt;/code&gt; with &lt;code&gt;.nonActivatingPanel&lt;/code&gt;. This is the critical trick — if the window activated (took focus), the source app would lose focus and the Accessibility API couldn't replace text. Most macOS floating window tutorials miss this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility API, no sandbox.&lt;/strong&gt; The app reads selected text via &lt;code&gt;AXUIElement&lt;/code&gt;. This requires the Accessibility entitlement, which means the app can't be sandboxed, which means no App Store. Worth the trade-off for system-wide functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protocol-based AI backends.&lt;/strong&gt; &lt;code&gt;AIServiceProtocol&lt;/code&gt; defines the port. Gemini, Claude API, and Claude CLI are adapters. Adding a new backend (Ollama, local LLM, etc.) means implementing one protocol. The domain never knows which backend is active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-layer JSON parsing.&lt;/strong&gt; AI responses aren't always valid JSON. The parser chain: Codable -&amp;gt; sanitize common issues -&amp;gt; JSONSerialization -&amp;gt; regex extraction -&amp;gt; raw text fallback. A brace-matching depth tracker handles truncated responses better than naive &lt;code&gt;lastIndex(of: "}")&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt via stdin.&lt;/strong&gt; The Claude CLI adapter passes the prompt through stdin to avoid it showing up in &lt;code&gt;ps&lt;/code&gt; output. Small thing, but important for security.&lt;/p&gt;

&lt;p&gt;The whole thing is ~3,000 lines of Swift with 3 dependencies. No Xcode project needed — &lt;code&gt;swift build&lt;/code&gt; works.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's free and open source
&lt;/h2&gt;

&lt;p&gt;Quill is MIT licensed. It uses Google Gemini's free tier by default, so you can start using it without paying anything. Claude is also supported if you prefer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Download:&lt;/strong&gt; &lt;a href="https://github.com/uptakeagency/quill/releases/latest" rel="noopener noreferrer"&gt;Quill-1.0.0.dmg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/uptakeagency/quill" rel="noopener noreferrer"&gt;github.com/uptakeagency/quill&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ways to contribute
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New AI backends&lt;/strong&gt; — Ollama, local LLMs, other providers (just implement &lt;code&gt;AIServiceProtocol&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI/UX&lt;/strong&gt; — floating panel design, markdown rendering, accessibility improvements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Localization&lt;/strong&gt; — the explanations adapt to your system language, but the UI is English-only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt; — hexagonal architecture makes unit testing clean, but coverage is still thin&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bigger point
&lt;/h2&gt;

&lt;p&gt;We're in this weird era where AI makes us more productive but potentially less knowledgeable. The code works, but we don't always understand why.&lt;/p&gt;

&lt;p&gt;I don't think the answer is to stop using AI. The answer is to build better bridges between "it works" and "I get it." Quill is my attempt at one small bridge.&lt;/p&gt;

&lt;p&gt;If you've ever nodded along to AI-generated code without understanding half the terms in it — give it a try. And if you have ideas for making it better, PRs are open.&lt;/p&gt;




</description>
      <category>opensource</category>
      <category>swift</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
