<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Observed]]></title><description><![CDATA[Notes, experiments, and second thoughts on AI. 
An engineer's log on LLM agents, RAG, and computer vision — written while building.]]></description><link>https://blog.yunasim.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 18 May 2026 19:59:03 GMT</lastBuildDate><atom:link href="https://blog.yunasim.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[One Post, Four Destinations: How I Built a Multi-Channel Tech Blog Pipeline]]></title><description><![CDATA[This is the first post on this blog — and naturally, it's about how I built the blog itself.
I'm an AI engineer working on LLM/RAG agents and computer vision. I've been building things for a while — r]]></description><link>https://blog.yunasim.dev/multi-channel-tech-blog-pipeline</link><guid isPermaLink="true">https://blog.yunasim.dev/multi-channel-tech-blog-pipeline</guid><category><![CDATA[Blogging]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[Dev.to]]></category><category><![CDATA[SEO]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[cross-posting]]></category><dc:creator><![CDATA[Yuna Sim]]></dc:creator><pubDate>Sat, 28 Mar 2026 20:16:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69c814e77cf2706510437b5b/4e07fbe2-e820-4c89-b5b3-211752e137f5.svg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is the first post on this blog — and naturally, it's about how I built the blog itself.</p>
<p>I'm an AI engineer working on LLM/RAG agents and computer vision. I've been building things for a while — research projects, side projects, production systems — but most of that work lived in private repos and slide decks nobody would ever see again. I wanted a place to write — in English, for a global audience — about what I build, why I make certain decisions, and what breaks along the way.</p>
<p>The requirements were simple: a technical blog in English, with a way to reach Korean readers too, without maintaining two completely separate blogs.</p>
<p>Here's how I set it up.</p>
<h2>Choosing Hashnode — The Real Decision</h2>
<p>I'll save you the five-platform comparison table. I ruled out self-hosting early — spinning up a Hugo or Jekyll site is fun, but maintaining it is a distraction I don't need right now. Medium I kept, but for essays, not technical writing (more on that later).</p>
<p>The actual decision came down to <strong>dev.to vs Hashnode</strong>.</p>
<p>Both are free, markdown-based, and have built-in developer communities. Both have good SEO. On the surface, they look almost interchangeable. But one thing tipped the scale:</p>
<p><strong>Hashnode lets you own your canonical URL.</strong></p>
<p>With Hashnode, I mapped my custom domain (<code>blog.yunasim.dev</code>) and every post lives there. When I cross-post to dev.to, the canonical URL points back to <em>my</em> domain, not Hashnode's. That means Google indexes my site as the original source, and all the SEO juice flows back to me.</p>
<p>On dev.to, your posts live on <code>dev.to/yourusername</code>. You can set a canonical URL pointing elsewhere, but the platform is designed around <em>their</em> domain. If I'd gone with dev.to as my primary, I'd be building on rented land.</p>
<table>
<thead>
<tr>
<th></th>
<th><strong>Hashnode</strong></th>
<th><strong>dev.to</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Custom domain</td>
<td>✅ Free, full ownership</td>
<td>❌ Posts live on dev.to</td>
</tr>
<tr>
<td>Canonical URL</td>
<td>Your domain by default</td>
<td>Manual, points to external</td>
</tr>
<tr>
<td>SEO ownership</td>
<td>Your domain by default</td>
<td>dev.to domain by default</td>
</tr>
<tr>
<td>Community</td>
<td>Smaller, growing</td>
<td>Large, very active</td>
</tr>
<tr>
<td>Cross-posting</td>
<td>Built-in import</td>
<td>Built-in canonical URL field</td>
</tr>
</tbody></table>
<p>The trade-off is community size — dev.to has a bigger, more active feed. But that's exactly why I use <em>both</em>: Hashnode as home, dev.to as distribution.</p>
<h2>The Pipeline — One Post, Four Destinations</h2>
<p>Here's the part I actually want to talk about.</p>
<p>Most developers either blog on one platform and call it a day, or try to maintain multiple blogs and burn out in a week. I wanted a middle ground: <strong>write once, distribute strategically</strong>.</p>
<p>The key insight was separating my content into two tracks:</p>
<h3>Tech Track vs Essay Track</h3>
<p>Not everything I write belongs in the same place. A deep dive into how I built a RAG pipeline is a fundamentally different piece of content from an essay about why self-help advice rarely reaches who it should.</p>
<p><strong>Tech track</strong> (code, architecture, project retrospectives):</p>
<ul>
<li><p><strong>Hashnode</strong> (<code>blog.yunasim.dev</code>) → English original, canonical source</p>
</li>
<li><p><strong>dev.to</strong> → English cross-post, canonical URL points back to Hashnode</p>
</li>
</ul>
<p>I also translate select posts to Korean on <a href="https://velog.io/@yunaisme">velog</a>, but that's a separate workflow — the core pipeline is English-first.</p>
<p><strong>Essay track</strong> (ideas, perspectives, takes):</p>
<ul>
<li><p><strong>Substack</strong> (<code>yunaisme.substack.com</code>) → English original</p>
</li>
<li><p><strong>Medium</strong> → Abridged/teaser version, funnels readers to Substack</p>
</li>
</ul>
<p><strong>LinkedIn</strong> sits in the middle as a hub — 2-3 lines of insight from either track, with the full link dropped in the first comment.</p>
<h3>Why Separate Them?</h3>
<p>A few reasons:</p>
<p><strong>Different audiences.</strong> The person reading a technical walkthrough of my VLM document parsing pipeline is not the same person reading my thoughts on the frame card method for structuring essays. Mixing both on one platform dilutes the signal for both audiences.</p>
<p><strong>Different formats.</strong> Tech posts need code blocks, diagrams, and headers. Essays need breathing room and flow. Hashnode is optimized for the former; Substack for the latter.</p>
<p><strong>Different discovery channels.</strong> Tech posts get discovered through dev.to feeds, Google searches, and Hashnode's community. Essays travel through newsletter subscriptions and social sharing. Separate tracks let each piece find its natural audience.</p>
<h3>The Actual Publishing Flow</h3>
<p>Here's what happens when I finish a tech post:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69c814e77cf2706510437b5b/102753a6-4cce-4faf-bf6f-db6f3816c015.svg" alt="" style="display:block;margin:0 auto" />

<p>The whole thing takes maybe 20 extra minutes per post beyond the initial writing.</p>
<h3>The Canonical URL Thing — Why It Actually Matters</h3>
<p>When the same content exists on multiple URLs, search engines need to know which one is the "real" one. My setup ensures every cross-posted article's canonical URL points back to <code>blog.yunasim.dev</code> — so dev.to and Medium serve as distribution channels, but Google credits my domain. It's a small technical detail that compounds over time.</p>
<h2>What's Next</h2>
<p>This pipeline is running, but there's more I want to set up:</p>
<ul>
<li><p><strong>RSS automation</strong> — right now the dev.to cross-post is manual. Hashnode has RSS feeds that dev.to can auto-import, but I haven't wired it up yet.</p>
</li>
<li><p><strong>Newsletter integration</strong> — Hashnode has a built-in newsletter feature. I want to connect it so new posts automatically go to subscribers.</p>
</li>
<li><p><strong>Post templates</strong> — I'm developing a standard structure for project retrospectives (Problem → Approach → What Broke → Solution → Lessons). Having a template will cut writing time.</p>
</li>
</ul>
<p>This is post number one. If you're reading this on dev.to — now you know how it got there.</p>
<hr />
<p><em>This blog is called</em> <em><strong>Observed</strong></em> <em>— because the best insights come from paying close attention to what's actually happening, not what you expected to happen. More posts coming soon.</em></p>
<p><em>Find me:</em> <a href="https://blog.yunasim.dev"><em>blog.yunasim.dev</em></a> <em>·</em> <a href="https://dev.to/yunasim"><em>dev.to</em></a> <em>·</em> <a href="https://velog.io/@yunasim"><em>velog</em></a> <em>·</em> <a href="https://linkedin.com/in/yunasim"><em>LinkedIn</em></a> <em>·</em> <a href="https://yunasim.dev"><em>yunasim.dev</em></a></p>
]]></content:encoded></item></channel></rss>