<?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>Forem: Omnivocal Dev</title>
    <description>The latest articles on Forem by Omnivocal Dev (@omnivocal).</description>
    <link>https://forem.com/omnivocal</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%2F3838238%2Fbd5cbf9a-cc87-41c5-8baf-7fec95e141d4.png</url>
      <title>Forem: Omnivocal Dev</title>
      <link>https://forem.com/omnivocal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/omnivocal"/>
    <language>en</language>
    <item>
      <title>Dev Log #2: OmniVocal in Production</title>
      <dc:creator>Omnivocal Dev</dc:creator>
      <pubDate>Sun, 05 Apr 2026 19:33:11 +0000</pubDate>
      <link>https://forem.com/omnivocal/dev-log-2-omnivocal-in-production-127p</link>
      <guid>https://forem.com/omnivocal/dev-log-2-omnivocal-in-production-127p</guid>
      <description>&lt;h1&gt;
  
  
  Dev Log #2: OmniVocal in Production
&lt;/h1&gt;

&lt;p&gt;Two weeks since Dev Log #1. Here's what shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  10 channels now live
&lt;/h2&gt;

&lt;p&gt;Bluesky, dev.to, Hashnode, GitHub, Mastodon, Ghost, Slack, Discord, Brevo, and Telegram. One broadcast call reaches all of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Telegram approval flow
&lt;/h2&gt;

&lt;p&gt;Before any post goes live, the bot sends a preview with Approve / Reject buttons. You review from your phone — one tap and it broadcasts. This is what makes it "assisted publishing" rather than "automated publishing."&lt;/p&gt;

&lt;h2&gt;
  
  
  Email onboarding
&lt;/h2&gt;

&lt;p&gt;New signups get a 3-email sequence via Brevo, fired on first dashboard login. Plain text, signed with a human name. No behavioral conditionals — just time delays, which is all you need at launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this post was published
&lt;/h2&gt;

&lt;p&gt;Written in VS Code. Broadcast with one MCP tool call to &lt;code&gt;broadcast_post&lt;/code&gt;. Social channels got a short version; dev.to, Hashnode, Ghost, and Brevo got this one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Paddle billing (end-to-end test in progress)&lt;/li&gt;
&lt;li&gt;X and Threads adapters&lt;/li&gt;
&lt;li&gt;Scheduling support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try it: &lt;a href="https://omnivocal.io" rel="noopener noreferrer"&gt;https://omnivocal.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>devjournal</category>
      <category>showdev</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>Dev Log #1: Building in Public with MCP</title>
      <dc:creator>Omnivocal Dev</dc:creator>
      <pubDate>Sun, 22 Mar 2026 21:34:15 +0000</pubDate>
      <link>https://forem.com/omnivocal/dev-log-1-building-in-public-with-mcp-jef</link>
      <guid>https://forem.com/omnivocal/dev-log-1-building-in-public-with-mcp-jef</guid>
      <description>&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;p&gt;OmniVocal is a tool that lets you publish blog posts to multiple platforms simultaneously via a single API call — or directly from your AI assistant using MCP (Model Context Protocol).&lt;/p&gt;

&lt;p&gt;This post is being published via the OmniVocal MCP server, running locally during development. The same flow works in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Workers&lt;/strong&gt; — edge API, zero cold starts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D1&lt;/strong&gt; — SQLite at the edge for posts, channels, API keys&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — exposes &lt;code&gt;broadcast_post&lt;/code&gt; and &lt;code&gt;list_credentials&lt;/code&gt; tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adapters&lt;/strong&gt; — per-platform publish logic (Hashnode, dev.to, Medium, GitHub, Bluesky)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why MCP?
&lt;/h2&gt;

&lt;p&gt;The interesting thing about building an MCP server for content distribution is that it collapses the workflow. Instead of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open dashboard&lt;/li&gt;
&lt;li&gt;Paste content&lt;/li&gt;
&lt;li&gt;Select platforms&lt;/li&gt;
&lt;li&gt;Click publish&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You just describe what you want published in chat and the agent handles the rest — including formatting differences per platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Paddle billing integration&lt;/li&gt;
&lt;li&gt;Medium and GitHub channels&lt;/li&gt;
&lt;li&gt;Scheduling support (Solo plan)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More dev logs coming as we build.&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>mcp</category>
      <category>buildinpublic</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Test UA</title>
      <dc:creator>Omnivocal Dev</dc:creator>
      <pubDate>Sun, 22 Mar 2026 21:34:03 +0000</pubDate>
      <link>https://forem.com/omnivocal/test-ua-iia</link>
      <guid>https://forem.com/omnivocal/test-ua-iia</guid>
      <description>&lt;p&gt;Hello UA.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hello from OmniVocal</title>
      <dc:creator>Omnivocal Dev</dc:creator>
      <pubDate>Sun, 22 Mar 2026 20:51:45 +0000</pubDate>
      <link>https://forem.com/omnivocal/hello-from-omnivocal-18h9</link>
      <guid>https://forem.com/omnivocal/hello-from-omnivocal-18h9</guid>
      <description>&lt;p&gt;Hello from OmniVocal — testing the setup and that everything works.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>devlog</category>
    </item>
  </channel>
</rss>
