<rss xmlns:source="http://source.scripting.com/" version="2.0">
  <channel>
    <title>Numeric Citizen I/O — A Blog About Blogging</title>
    <link>https://meta.numericcitizen.me/</link>
    <description></description>
    
    <language>en-us</language>
    
    <lastBuildDate>Mon, 04 May 2026 06:36:56 -0400</lastBuildDate>
    <item>
      <title>The Numeric Citizen Digital Ecosystem — Edition 2026-04</title>
      <link>https://meta.numericcitizen.me/2026/04/27/the-numeric-citizen-digital-ecosystem.html</link>
      <pubDate>Mon, 27 Apr 2026 17:38:17 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/27/the-numeric-citizen-digital-ecosystem.html</guid>
      <description>&lt;p&gt;Today, I’m excited to share my latest digital ecosystem update, previously known as “The Numeric Citizen Content Creator Workflow”. The diagram sports a new title: “The Numeric Citizen Digital Ecosystem” to better reflect its scope: to enumerate services and apps at the center of my digital presence. It was entirely rebuilt in Apple Freeform, leaving Apple Keynote behind. Freeform is a joy to use; it’s much more flexible and powerful than Keynote, too. The content was also expanded to include a new set of tools I have built over the last few months since publishing &lt;a href=&#34;https://meta.numericcitizen.me/2025/11/02/my-content-creation-ecosystem-fall.html&#34;&gt;the previous update&lt;/a&gt;. Let&#39;s dive in for all the details. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-0-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;The entire ecosystem diagram was rebuilt from the ground up. Full resolution version available &lt;a href=&#34;https://go.numericcitizen.me/kXrGe2Fk&#34;&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At a high level, both Micro.blog and Ghost remain the two hosting and publishing pillars for most of my *.numericcitizen.me websites, while a few other websites, like my Ko-fi page and my new about website, Who Is Numeric Citizen, are hosted elsewhere. On the diagram, my websites are positioned on the left and in the top-left portion. &lt;/p&gt;
&lt;p&gt;As you might notice, a lot has happened since my last update. Thanks to Claude AI and Claude Code, I made a major shift toward web app to meet two fundamental needs: a brand new bookmark manager (replacing AnyBox), and a lightweight RSS reader that integrates with my bookmark manager. Together, they support my reading workflow and help me produce the &lt;a href=&#34;https://numericcitizen.me/tag/ephemeral-scrapbook/&#34;&gt;Ephemeral Scrapbook newsletter&lt;/a&gt;. See both web apps in &lt;a href=&#34;A%20Quick%20Tour%20of%20the%20Best%20Bookmark%20Manager%20&amp;%20RSS%20Reader%20Built%20Entirely%20With%20Claude%20Code%20https://youtu.be/Wb5r61MeSQY&#34;&gt;this YouTube video&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-1-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;My custom-built RSS reader web application&lt;/p&gt;
&lt;h3&gt;What’s in, what changed since last fall &lt;/h3&gt;
&lt;p&gt;AI is now playing a more prominent role in my digital ecosystem since the beginning of 2026. It’s mainly used for vibe coding, maintaining my web applications, and content summarization. You’ll see little light bulbs (💡) in the diagram; they indicate where AI summarization is involved. Anthropic’s Claude AI replaced OpenAI’s ChatGPT in all my workflows. Plus, Claude AI and Claude Code enabled many new possibilities for helping me build small digital services and web apps for my personal needs. It’s something I couldn’t have imagined a year ago.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-2-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;Claude Code’s main window with some of my projects on the left sidebar and the DIFF view shown on the right&lt;/p&gt;
&lt;p&gt;Another milestone was to &lt;a href=&#34;https://blog.numericcitizen.me/2025/12/17/goodbye-ifttt.html&#34;&gt;replace IFTTT with n8n automation&lt;/a&gt;. It’s a major upgrade in functionality and usability. My n8n instance is running on the Digital Ocean hosting service, inside a pre-packaged “droplet” with 1 GB of RAM and 10 GB of disk space for $6 a month. Digital Ocean provides a one-click install of n8n which really made a difference in selecting Digital Ocean as a hosting service. I created more than a dozen automations, far more complex and useful than what I could build with IFTTT. Claude AI was also involved in optimizing many n8n workflows. It was possible because n8n supports the MCP endpoint that is exposed to Claude AI. In the following table, I present a summary of my n8n automation workflows. As you will see, Discord is a new entry, as it provides a custom server to receive n8n workflow outputs and some status reports from Tinylytics. Also good to know: all my n8n workflows are automatically documented in a Craft document, thanks to Claude Code, which connects to both the n8n and Craft backends. To get a well-structured documentation, I created a Claude Skill.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-3-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;A portion of an automation workflow shown in the n8n canvas&lt;/p&gt;
&lt;h4&gt;My automated n8n workflows &lt;/h4&gt;
&lt;p&gt;Here’s a list of utilities running as n8n workflows on my self-hosted DigitalOcean instance. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Credit Health Check&lt;/strong&gt; — Pre-flight check on Anthropic credits; alerts Discord if depleted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Today&#39;s Forecast&lt;/strong&gt; — Pulls weather data into the Craft daily note&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tinylytics Insights&lt;/strong&gt; — Injects site analytics summary into the Craft daily note&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple Daily News&lt;/strong&gt; — Fetches MacSurfer headlines into the Craft daily note&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup Craft Daily Note&lt;/strong&gt; — Creates the day&#39;s 8-section journaling scaffold in Craft&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic Daily Cost Report&lt;/strong&gt; — Posts 7-day and 30-day AI spend breakdown to Discord&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example of automatically propulated Craft Daily note, thanks to n8n automation. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-4-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;h4&gt;RSS &amp; News Aggregation &lt;/h4&gt;
&lt;p&gt;A few workflows are used for content processing in the context of news consumption and Micro.blog timeline processing. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RSS Daily Summary&lt;/strong&gt; — Aggregates RSS feeds and delivers an AI-summarized digest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micro.blog Timeline Highlights&lt;/strong&gt; — Summarizes Micro.blog activity via Claude&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple News Flash Alerts&lt;/strong&gt; — Real-time Apple news alerts from RSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apps &amp; Services Release Highlights&lt;/strong&gt; — Monitors release notes feeds for notable updates&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Content &amp; Publishing &lt;/h4&gt;
&lt;p&gt;Other workflows for supporting my content creation include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Craft → Ghost&lt;/strong&gt; — Two workflows (specific and generic) push Craft documents to Ghost as drafts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghost Publish Proxy&lt;/strong&gt; — Triggers final publication on Ghost via webhook&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Craft Fetch Proxy&lt;/strong&gt; — Fetches Craft document content on demand for downstream processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poke to Craft / Peek at Ghost&lt;/strong&gt; — Manual/chat-triggered utilities for quick content inspection&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Newsletter &amp; Email &lt;/h4&gt;
&lt;p&gt;A special workflow automation is processing email summarization on demand: simply forwarding an email to a dedicated Gmail account and after a few seconds I’ll receive a summary on my Discord server.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email Summarizer&lt;/strong&gt; — Polls Gmail every minute; summarizes newsletters and posts to Discord&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Maintenance &lt;/h4&gt;
&lt;p&gt;Finally, backing up my workflows is a must, just in case something really bad happens on my n8n instance. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Backup&lt;/strong&gt; — Backs up all n8n workflow definitions to a GitHub repo every Sunday&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-5-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;The Craft Agents main window&lt;/p&gt;
&lt;p&gt;The updated diagram illustrates this: Craft consists of two parts—Craft content stored in the Craft cloud backend and various Craft clients, including the native general-purpose client and Craft Agents. Additionally, Craft now supports MCP and offers a comprehensive set of APIs, emphasizing the division between data storage and client applications. These latest additions to Craft are game changers and enable new use cases. &lt;/p&gt;
&lt;p&gt;A few thoughts and observations about Craft Agents, a sort of spin-off of Craft, are worth sharing here. Think about Craft Agents as an orchestrator of AI agents. In many ways, Craft Agents can be compared to the Claude Desktop app. There is a high level of affinity between Craft Agents and Craft, connected via APIs or MCP. Consuming Craft content through Craft Agents is an obvious use case. Yet, I’m still not sure why the team behind Craft is spending so much effort on this, but it’s interesting to follow nonetheless. I’m still looking for clear use cases for it, hence the yellow dot (🟡) on its icon in the diagram. There are a few aspects of the app’s design and structure that I don’t like. I don’t like using the task manager to organize conversations. I don’t think task management belongs in this app. Plus, Craft Agents is a very hungry consumer of AI credits. It’s a major concern unless you subscribe to the highest tier of any AI provider (OpenAI, Anthropic, etc.). It’s worth noting that Craft also offers an assistant working inside Craft itself. &lt;/p&gt;
&lt;p&gt;Also added to my digital ecosystem is CleanShot Cloud for hosting publicly shared screenshots or short screen recordings. I use that to share bugs or feedback. CleanShot X is sort of the client to CleanShot Cloud and is the best Mac utility you can get if you tae a lot of screenshots. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-6-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;One last automation that prevented me from closing my IFTTT account was the process of automatically archiving my publications in DayOne. This process was briefly described in &lt;a href=&#34;https://meta.numericcitizen.me/2023/03/06/documenting-my-numeric-life-with.html&#34;&gt;this blog post&lt;/a&gt;. Each time I share a blog post or an article, it is saved in DayOne. Micro.blog added a send-to-DayOne feature, which was the last needed nail in the coffin of IFTTT. It was such a relief. &lt;/p&gt;
&lt;p&gt;Speaking of Micro.blog, I created a new website for sharing automated blog post digests on a monthly basis. Most of the process is supported by the use of AI summarization. It’s not fully automated but very effective. Each month I send my Micro.blog postss digest to Craft fo later processing using Craft Agents. The process takes less than 15 minutes to complete. I know there is a potential for a fully automated process. It’s on my todo list. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-7-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;h3&gt;What’s out since the last update &lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Chillidog Web Hosting&lt;/strong&gt; is out (the service hosting the &lt;a href=&#34;https://whois.numericcitizen.me&#34;&gt;Who Is Numeric Citizen website&lt;/a&gt;). It was replaced with Realmac Software Elements’ hosting solution. You can read the doc &lt;a href=&#34;https://docs.realmacsoftware.com/elements-docs/hosting&#34;&gt;here&lt;/a&gt;. The transition was seamless. I prefer integrated solutions, which Realmac is now offering. Plus. &lt;a href=&#34;https://support.exacthosting.com/support/solutions/articles/201000125536-chillidog-hosting-customer-acquisition-guide-welcome-to-exact-hosting&#34;&gt;Chillidog was &lt;/a&gt;purchased last year by Exact Hosting, and the purchase has been reported to degrade customer service.&lt;/p&gt;
&lt;p&gt;Last fall, I added the &lt;strong&gt;ChatGPT Atlas&lt;/strong&gt; browser to my ecosystem, but I removed it after switching to Claude AI. OpenAI Atlas was mainly used for summarizing articles, but now I do this within the Claude Desktop app. I still prefer using the ARC Browser, even though it might eventually be discontinued. The new browser, Dia, could take its place, but I’m interested to see how things unfold. Dia appears to require a Pro subscription to enable AI features in the browser. At $20 a month, I’ll pass. &lt;/p&gt;
&lt;p&gt;Gone is &lt;strong&gt;Google News&lt;/strong&gt; for cross-posting from Micro.blog. It never took off. Also gone is AnyBox, the very well-done bookmark manager available on all Apple platforms, but not available on the web, like Raindrop.io. I never liked Raindrop.io, so I built my own bookmark manager as a web-only app. It’s one of my new custom-built web apps.&lt;/p&gt;
&lt;p&gt;Finally, the &lt;strong&gt;numericcitizen.io&lt;/strong&gt; domain will be retired when it expires later this year, and the content hosted on a dedicated Craft subscription has already been moved to my main Craft subscription, helping me reduce costs. The &lt;a href=&#34;https://meta.numericcitizen.me&#34;&gt;meta.numericcitizen.me&lt;/a&gt; is taking over (my previous content was migrated there during 2025). Some of my content was also simply removed from public access. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-8-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;My newly redesigned metablog as seen in dark mode&lt;/p&gt;
&lt;h3&gt;Still pondering about these &lt;/h3&gt;
&lt;p&gt;You’ll find yellow dots on the diagram which points to services or apps that I’m reconsidering. Let’s review a few of them. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plausible vs Tinylytics&lt;/strong&gt;: I use two web analytics. Plausible has been around in my ecosystem since I left Google Analytics. Then came long Tinylytics and I wanted to support its developer plus it provides a great design compared to Plausible. Yet, I have a lot of historic data in the latter. Plus, I started using Tinylytics APIs to feed one of my workflows who inject data inside Craft daily notes and dashboard web application. I could replace this with Plausible’s APIs but I don’t feel it’s worth the effort. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Things 3&lt;/strong&gt;, a popular and highly regarded task manager, is currently being reconsidered. I like managing my to-dos, but I don’t have many. If I want to eliminate Things 3, I could switch to Craft’s basic task management, but it’s quite limited. For now, my most likely option is to create my own app, much like I did with my RSS reader or bookmark manager. However, I’m not in a hurry to switch away since it doesn’t require a subscription, giving me plenty of time to decide and develop a replacement. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ulysses&lt;/strong&gt; is another case where I’m pondering its long-term usefulness. If I can post to Micro.blog or Ghost directly from Craft (using my custom-made n8n workflows), why should I continue paying for this app? The next renewal is a year from now.&lt;/p&gt;
&lt;p&gt;Finally, my &lt;strong&gt;Flipboard&lt;/strong&gt; account hosts a magazine that pulls content from my main website via its RSS feed. I have 8 followers, apparently. I never get any reactions or comments from this place. The bigger question: is Flipboard still a thing these days?&lt;/p&gt;
&lt;h3&gt;Risk management &lt;/h3&gt;
&lt;p&gt;In this edition of the diagram, I included red dots (🔴) to indicate potential disruption risks. For example, Anthropic recently adjusted Claude&#39;s credit consumption, leading to a fivefold increase in the number of credits needed to perform the same task; something I&#39;ve noticed too. Additionally, Anthropic conducted an experiment in which new subscribers could access Claude Code only if they chose the Max subscription tier at $200 per month. Although they quickly reversed this change, it raises the concern that they might eliminate the $20 plan altogether. If that happened, I could face serious difficulties and might stop maintaining my web applications built with Claude Code. Vercel is another risk potential: I’m using the free tier, which is rather generous. If they decided to remove this free tier, I would have to reconsider my position: either drop my web application or accept paying the monthly price they charge. &lt;/p&gt;
&lt;h3&gt;Concluding thoughts &lt;/h3&gt;
&lt;p&gt;This evolution reflects a fundamental shift in how I approach my digital life. By embracing AI assistants like Claude and building custom tools tailored to my specific needs, I&#39;ve moved away from cobbling together disparate services toward a more cohesive, intentional ecosystem. The transition from automation platforms like IFTTT to n8n, coupled with the ability to code solutions with Claude Code, has given me both flexibility and control—rare commodities in the world of Software-as-a-Service.&lt;/p&gt;
&lt;p&gt;The introduction of AI summarization across my workflows has transformed how I consume information, while the consolidation of my web presence under fewer, better-managed domains simplifies my digital footprint. Yet this ecosystem remains dynamic and somewhat fragile, dependent on the sustained availability of key services and the pricing decisions of AI providers. The risk management considerations I&#39;ve outlined aren&#39;t just technical footnotes—they&#39;re essential guideposts for maintaining digital independence in an increasingly interconnected world.&lt;/p&gt;
&lt;p&gt;As I continue to iterate and refine this ecosystem, the principles remain constant: intentionality, control, and the ability to evolve. The next edition will likely bring even more changes, but I&#39;m optimistic that the foundations I&#39;ve built will prove resilient enough to adapt to whatever comes next.&lt;/p&gt;
&lt;p&gt;Previous update to my digital ecosystem can be found &lt;a href=&#34;https://meta.numericcitizen.me/categories/meta/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;Today, I’m excited to share my latest digital ecosystem update, previously known as “The Numeric Citizen Content Creator Workflow”. The diagram sports a new title: “The Numeric Citizen Digital Ecosystem” to better reflect its scope: to enumerate services and apps at the center of my digital presence. It was entirely rebuilt in Apple Freeform, leaving Apple Keynote behind. Freeform is a joy to use; it’s much more flexible and powerful than Keynote, too. The content was also expanded to include a new set of tools I have built over the last few months since publishing &lt;a href=&#34;https://meta.numericcitizen.me/2025/11/02/my-content-creation-ecosystem-fall.html&#34;&gt;the previous update&lt;/a&gt;. Let&#39;s dive in for all the details. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-0-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;The entire ecosystem diagram was rebuilt from the ground up. Full resolution version available &lt;a href=&#34;https://go.numericcitizen.me/kXrGe2Fk&#34;&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At a high level, both Micro.blog and Ghost remain the two hosting and publishing pillars for most of my *.numericcitizen.me websites, while a few other websites, like my Ko-fi page and my new about website, Who Is Numeric Citizen, are hosted elsewhere. On the diagram, my websites are positioned on the left and in the top-left portion. &lt;/p&gt;
&lt;p&gt;As you might notice, a lot has happened since my last update. Thanks to Claude AI and Claude Code, I made a major shift toward web app to meet two fundamental needs: a brand new bookmark manager (replacing AnyBox), and a lightweight RSS reader that integrates with my bookmark manager. Together, they support my reading workflow and help me produce the &lt;a href=&#34;https://numericcitizen.me/tag/ephemeral-scrapbook/&#34;&gt;Ephemeral Scrapbook newsletter&lt;/a&gt;. See both web apps in &lt;a href=&#34;A%20Quick%20Tour%20of%20the%20Best%20Bookmark%20Manager%20&amp;%20RSS%20Reader%20Built%20Entirely%20With%20Claude%20Code%20https://youtu.be/Wb5r61MeSQY&#34;&gt;this YouTube video&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-1-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;My custom-built RSS reader web application&lt;/p&gt;
&lt;h3&gt;What’s in, what changed since last fall &lt;/h3&gt;
&lt;p&gt;AI is now playing a more prominent role in my digital ecosystem since the beginning of 2026. It’s mainly used for vibe coding, maintaining my web applications, and content summarization. You’ll see little light bulbs (💡) in the diagram; they indicate where AI summarization is involved. Anthropic’s Claude AI replaced OpenAI’s ChatGPT in all my workflows. Plus, Claude AI and Claude Code enabled many new possibilities for helping me build small digital services and web apps for my personal needs. It’s something I couldn’t have imagined a year ago.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-2-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;Claude Code’s main window with some of my projects on the left sidebar and the DIFF view shown on the right&lt;/p&gt;
&lt;p&gt;Another milestone was to &lt;a href=&#34;https://blog.numericcitizen.me/2025/12/17/goodbye-ifttt.html&#34;&gt;replace IFTTT with n8n automation&lt;/a&gt;. It’s a major upgrade in functionality and usability. My n8n instance is running on the Digital Ocean hosting service, inside a pre-packaged “droplet” with 1 GB of RAM and 10 GB of disk space for $6 a month. Digital Ocean provides a one-click install of n8n which really made a difference in selecting Digital Ocean as a hosting service. I created more than a dozen automations, far more complex and useful than what I could build with IFTTT. Claude AI was also involved in optimizing many n8n workflows. It was possible because n8n supports the MCP endpoint that is exposed to Claude AI. In the following table, I present a summary of my n8n automation workflows. As you will see, Discord is a new entry, as it provides a custom server to receive n8n workflow outputs and some status reports from Tinylytics. Also good to know: all my n8n workflows are automatically documented in a Craft document, thanks to Claude Code, which connects to both the n8n and Craft backends. To get a well-structured documentation, I created a Claude Skill.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-3-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;A portion of an automation workflow shown in the n8n canvas&lt;/p&gt;
&lt;h4&gt;My automated n8n workflows &lt;/h4&gt;
&lt;p&gt;Here’s a list of utilities running as n8n workflows on my self-hosted DigitalOcean instance. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Credit Health Check&lt;/strong&gt; — Pre-flight check on Anthropic credits; alerts Discord if depleted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Today&#39;s Forecast&lt;/strong&gt; — Pulls weather data into the Craft daily note&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tinylytics Insights&lt;/strong&gt; — Injects site analytics summary into the Craft daily note&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple Daily News&lt;/strong&gt; — Fetches MacSurfer headlines into the Craft daily note&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup Craft Daily Note&lt;/strong&gt; — Creates the day&#39;s 8-section journaling scaffold in Craft&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic Daily Cost Report&lt;/strong&gt; — Posts 7-day and 30-day AI spend breakdown to Discord&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example of automatically propulated Craft Daily note, thanks to n8n automation. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-4-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;h4&gt;RSS &amp; News Aggregation &lt;/h4&gt;
&lt;p&gt;A few workflows are used for content processing in the context of news consumption and Micro.blog timeline processing. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RSS Daily Summary&lt;/strong&gt; — Aggregates RSS feeds and delivers an AI-summarized digest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micro.blog Timeline Highlights&lt;/strong&gt; — Summarizes Micro.blog activity via Claude&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple News Flash Alerts&lt;/strong&gt; — Real-time Apple news alerts from RSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apps &amp; Services Release Highlights&lt;/strong&gt; — Monitors release notes feeds for notable updates&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Content &amp; Publishing &lt;/h4&gt;
&lt;p&gt;Other workflows for supporting my content creation include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Craft → Ghost&lt;/strong&gt; — Two workflows (specific and generic) push Craft documents to Ghost as drafts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghost Publish Proxy&lt;/strong&gt; — Triggers final publication on Ghost via webhook&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Craft Fetch Proxy&lt;/strong&gt; — Fetches Craft document content on demand for downstream processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poke to Craft / Peek at Ghost&lt;/strong&gt; — Manual/chat-triggered utilities for quick content inspection&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Newsletter &amp; Email &lt;/h4&gt;
&lt;p&gt;A special workflow automation is processing email summarization on demand: simply forwarding an email to a dedicated Gmail account and after a few seconds I’ll receive a summary on my Discord server.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email Summarizer&lt;/strong&gt; — Polls Gmail every minute; summarizes newsletters and posts to Discord&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Maintenance &lt;/h4&gt;
&lt;p&gt;Finally, backing up my workflows is a must, just in case something really bad happens on my n8n instance. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Backup&lt;/strong&gt; — Backs up all n8n workflow definitions to a GitHub repo every Sunday&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-5-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;The Craft Agents main window&lt;/p&gt;
&lt;p&gt;The updated diagram illustrates this: Craft consists of two parts—Craft content stored in the Craft cloud backend and various Craft clients, including the native general-purpose client and Craft Agents. Additionally, Craft now supports MCP and offers a comprehensive set of APIs, emphasizing the division between data storage and client applications. These latest additions to Craft are game changers and enable new use cases. &lt;/p&gt;
&lt;p&gt;A few thoughts and observations about Craft Agents, a sort of spin-off of Craft, are worth sharing here. Think about Craft Agents as an orchestrator of AI agents. In many ways, Craft Agents can be compared to the Claude Desktop app. There is a high level of affinity between Craft Agents and Craft, connected via APIs or MCP. Consuming Craft content through Craft Agents is an obvious use case. Yet, I’m still not sure why the team behind Craft is spending so much effort on this, but it’s interesting to follow nonetheless. I’m still looking for clear use cases for it, hence the yellow dot (🟡) on its icon in the diagram. There are a few aspects of the app’s design and structure that I don’t like. I don’t like using the task manager to organize conversations. I don’t think task management belongs in this app. Plus, Craft Agents is a very hungry consumer of AI credits. It’s a major concern unless you subscribe to the highest tier of any AI provider (OpenAI, Anthropic, etc.). It’s worth noting that Craft also offers an assistant working inside Craft itself. &lt;/p&gt;
&lt;p&gt;Also added to my digital ecosystem is CleanShot Cloud for hosting publicly shared screenshots or short screen recordings. I use that to share bugs or feedback. CleanShot X is sort of the client to CleanShot Cloud and is the best Mac utility you can get if you tae a lot of screenshots. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-6-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;One last automation that prevented me from closing my IFTTT account was the process of automatically archiving my publications in DayOne. This process was briefly described in &lt;a href=&#34;https://meta.numericcitizen.me/2023/03/06/documenting-my-numeric-life-with.html&#34;&gt;this blog post&lt;/a&gt;. Each time I share a blog post or an article, it is saved in DayOne. Micro.blog added a send-to-DayOne feature, which was the last needed nail in the coffin of IFTTT. It was such a relief. &lt;/p&gt;
&lt;p&gt;Speaking of Micro.blog, I created a new website for sharing automated blog post digests on a monthly basis. Most of the process is supported by the use of AI summarization. It’s not fully automated but very effective. Each month I send my Micro.blog postss digest to Craft fo later processing using Craft Agents. The process takes less than 15 minutes to complete. I know there is a potential for a fully automated process. It’s on my todo list. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-7-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;h3&gt;What’s out since the last update &lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Chillidog Web Hosting&lt;/strong&gt; is out (the service hosting the &lt;a href=&#34;https://whois.numericcitizen.me&#34;&gt;Who Is Numeric Citizen website&lt;/a&gt;). It was replaced with Realmac Software Elements’ hosting solution. You can read the doc &lt;a href=&#34;https://docs.realmacsoftware.com/elements-docs/hosting&#34;&gt;here&lt;/a&gt;. The transition was seamless. I prefer integrated solutions, which Realmac is now offering. Plus. &lt;a href=&#34;https://support.exacthosting.com/support/solutions/articles/201000125536-chillidog-hosting-customer-acquisition-guide-welcome-to-exact-hosting&#34;&gt;Chillidog was &lt;/a&gt;purchased last year by Exact Hosting, and the purchase has been reported to degrade customer service.&lt;/p&gt;
&lt;p&gt;Last fall, I added the &lt;strong&gt;ChatGPT Atlas&lt;/strong&gt; browser to my ecosystem, but I removed it after switching to Claude AI. OpenAI Atlas was mainly used for summarizing articles, but now I do this within the Claude Desktop app. I still prefer using the ARC Browser, even though it might eventually be discontinued. The new browser, Dia, could take its place, but I’m interested to see how things unfold. Dia appears to require a Pro subscription to enable AI features in the browser. At $20 a month, I’ll pass. &lt;/p&gt;
&lt;p&gt;Gone is &lt;strong&gt;Google News&lt;/strong&gt; for cross-posting from Micro.blog. It never took off. Also gone is AnyBox, the very well-done bookmark manager available on all Apple platforms, but not available on the web, like Raindrop.io. I never liked Raindrop.io, so I built my own bookmark manager as a web-only app. It’s one of my new custom-built web apps.&lt;/p&gt;
&lt;p&gt;Finally, the &lt;strong&gt;numericcitizen.io&lt;/strong&gt; domain will be retired when it expires later this year, and the content hosted on a dedicated Craft subscription has already been moved to my main Craft subscription, helping me reduce costs. The &lt;a href=&#34;https://meta.numericcitizen.me&#34;&gt;meta.numericcitizen.me&lt;/a&gt; is taking over (my previous content was migrated there during 2025). Some of my content was also simply removed from public access. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-8-1777325734547.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;p&gt;My newly redesigned metablog as seen in dark mode&lt;/p&gt;
&lt;h3&gt;Still pondering about these &lt;/h3&gt;
&lt;p&gt;You’ll find yellow dots on the diagram which points to services or apps that I’m reconsidering. Let’s review a few of them. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plausible vs Tinylytics&lt;/strong&gt;: I use two web analytics. Plausible has been around in my ecosystem since I left Google Analytics. Then came long Tinylytics and I wanted to support its developer plus it provides a great design compared to Plausible. Yet, I have a lot of historic data in the latter. Plus, I started using Tinylytics APIs to feed one of my workflows who inject data inside Craft daily notes and dashboard web application. I could replace this with Plausible’s APIs but I don’t feel it’s worth the effort. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Things 3&lt;/strong&gt;, a popular and highly regarded task manager, is currently being reconsidered. I like managing my to-dos, but I don’t have many. If I want to eliminate Things 3, I could switch to Craft’s basic task management, but it’s quite limited. For now, my most likely option is to create my own app, much like I did with my RSS reader or bookmark manager. However, I’m not in a hurry to switch away since it doesn’t require a subscription, giving me plenty of time to decide and develop a replacement. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ulysses&lt;/strong&gt; is another case where I’m pondering its long-term usefulness. If I can post to Micro.blog or Ghost directly from Craft (using my custom-made n8n workflows), why should I continue paying for this app? The next renewal is a year from now.&lt;/p&gt;
&lt;p&gt;Finally, my &lt;strong&gt;Flipboard&lt;/strong&gt; account hosts a magazine that pulls content from my main website via its RSS feed. I have 8 followers, apparently. I never get any reactions or comments from this place. The bigger question: is Flipboard still a thing these days?&lt;/p&gt;
&lt;h3&gt;Risk management &lt;/h3&gt;
&lt;p&gt;In this edition of the diagram, I included red dots (🔴) to indicate potential disruption risks. For example, Anthropic recently adjusted Claude&#39;s credit consumption, leading to a fivefold increase in the number of credits needed to perform the same task; something I&#39;ve noticed too. Additionally, Anthropic conducted an experiment in which new subscribers could access Claude Code only if they chose the Max subscription tier at $200 per month. Although they quickly reversed this change, it raises the concern that they might eliminate the $20 plan altogether. If that happened, I could face serious difficulties and might stop maintaining my web applications built with Claude Code. Vercel is another risk potential: I’m using the free tier, which is rather generous. If they decided to remove this free tier, I would have to reconsider my position: either drop my web application or accept paying the monthly price they charge. &lt;/p&gt;
&lt;h3&gt;Concluding thoughts &lt;/h3&gt;
&lt;p&gt;This evolution reflects a fundamental shift in how I approach my digital life. By embracing AI assistants like Claude and building custom tools tailored to my specific needs, I&#39;ve moved away from cobbling together disparate services toward a more cohesive, intentional ecosystem. The transition from automation platforms like IFTTT to n8n, coupled with the ability to code solutions with Claude Code, has given me both flexibility and control—rare commodities in the world of Software-as-a-Service.&lt;/p&gt;
&lt;p&gt;The introduction of AI summarization across my workflows has transformed how I consume information, while the consolidation of my web presence under fewer, better-managed domains simplifies my digital footprint. Yet this ecosystem remains dynamic and somewhat fragile, dependent on the sustained availability of key services and the pricing decisions of AI providers. The risk management considerations I&#39;ve outlined aren&#39;t just technical footnotes—they&#39;re essential guideposts for maintaining digital independence in an increasingly interconnected world.&lt;/p&gt;
&lt;p&gt;As I continue to iterate and refine this ecosystem, the principles remain constant: intentionality, control, and the ability to evolve. The next edition will likely bring even more changes, but I&#39;m optimistic that the foundations I&#39;ve built will prove resilient enough to adapt to whatever comes next.&lt;/p&gt;
&lt;p&gt;Previous update to my digital ecosystem can be found &lt;a href=&#34;https://meta.numericcitizen.me/categories/meta/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title>Solving Broken Images When Exporting Craft Documents</title>
      <link>https://meta.numericcitizen.me/2026/04/25/solving-broken-images-when-exporting.html</link>
      <pubDate>Sat, 25 Apr 2026 13:27:03 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/25/solving-broken-images-when-exporting.html</guid>
      <description>&lt;h2&gt;The Problem &lt;/h2&gt;
&lt;p&gt;When exporting articles from Craft to Ulysses and Micro.blog, images referenced by temporary URLs quickly become broken links. Craft hosts images with public URLs that expire within days, leaving your published posts with missing images. This automation workflow solves that problem by re-hosting all images on Micro.blog before publishing.&lt;/p&gt;
&lt;h2&gt;How It Works &lt;/h2&gt;
&lt;p&gt;The workflow is triggered when you request to publish a Craft document to Micro.blog. Here&#39;s what happens behind the scenes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A request is send in Claude with the article title to publish&lt;/li&gt;
&lt;li&gt;The n8n automation searches my Craft space and uses a scoring algorithm to find the exact document (preventing false matches from body text mentions)&lt;/li&gt;
&lt;li&gt;The document&#39;s content is converted from Craft&#39;s block format into clean HTML, preserving headings, lists, formatting, quotes, code blocks, and more&lt;/li&gt;
&lt;li&gt;The workflow scans for all image URLs pointing to Craft&#39;s backend hosting&lt;/li&gt;
&lt;li&gt;Each image is downloaded from Craft and immediately re-uploaded to Micro.blog&#39;s permanent media storage&lt;/li&gt;
&lt;li&gt;All image references in the post are updated to point to the new, stable Micro.blog URLs&lt;/li&gt;
&lt;li&gt;The article is published as a draft to Micro.blog for review before going live, which is a manual process&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-0-1777137965533.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;h2&gt;Key Technical Features &lt;/h2&gt;
&lt;h3&gt;Smart Document Matching &lt;/h3&gt;
&lt;p&gt;The search algorithm scores results by how closely the document title matches the request. Exact matches score 100, partial matches score lower, and body-text mentions are heavily penalized. This ensures I get the right document even if multiple articles discuss similar topics. The search is done via Craft API endpoint.&lt;/p&gt;
&lt;h3&gt;Rich Content Support &lt;/h3&gt;
&lt;p&gt;The conversion preserves all the formatting: paragraph styles, heading levels (h1–h4), bullet and numbered lists, blockquotes, task checkboxes, strikethrough text, code blocks, horizontal rules, and rich link bookmarks. Consecutive list items are automatically grouped into single lists.&lt;/p&gt;
&lt;h3&gt;Graceful Image Handling &lt;/h3&gt;
&lt;p&gt;If an image fails to upload (for example, unsupported formats like AVIF), the system keeps the original Craft URL in your post rather than failing entirely. This ensures the article publishes even if one image has issues.&lt;/p&gt;
&lt;h3&gt;Manual Review &lt;/h3&gt;
&lt;p&gt;All posts are created as drafts in Micro.blog. I can review the final result, check that images loaded correctly, and make edits before publishing it live.&lt;/p&gt;
&lt;h2&gt;Workflow Specifications &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Webhook at craft-to-microblog (available in my n8n instance wirh MCP endpoint enabled)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; Simple JSON with the article title to publish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs used:&lt;/strong&gt; Craft&#39;s document search and block retrieval, Micro.blog&#39;s Micropub standard API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typical execution:&lt;/strong&gt; 4–6 seconds (image uploads add ~1.5 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; Draft post URL, preview link, and edit URL from Micro.blog&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why This Matters &lt;/h2&gt;
&lt;p&gt;This automation fills a gap in the content publishing process. I can craft and organize my articles in Craft, a versatile and attractive writing environment, and then publish them to Micro.blog without losing images or manually fixing broken links. I use a similar method to publish new editions of the Ephemeral Scrapbook newsletter, which relies on a separate n8n workflow to handle Ghost CMS-specific requirements. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-1-1777137965533.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
</description>
      <source:markdown>&lt;h2&gt;The Problem &lt;/h2&gt;
&lt;p&gt;When exporting articles from Craft to Ulysses and Micro.blog, images referenced by temporary URLs quickly become broken links. Craft hosts images with public URLs that expire within days, leaving your published posts with missing images. This automation workflow solves that problem by re-hosting all images on Micro.blog before publishing.&lt;/p&gt;
&lt;h2&gt;How It Works &lt;/h2&gt;
&lt;p&gt;The workflow is triggered when you request to publish a Craft document to Micro.blog. Here&#39;s what happens behind the scenes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A request is send in Claude with the article title to publish&lt;/li&gt;
&lt;li&gt;The n8n automation searches my Craft space and uses a scoring algorithm to find the exact document (preventing false matches from body text mentions)&lt;/li&gt;
&lt;li&gt;The document&#39;s content is converted from Craft&#39;s block format into clean HTML, preserving headings, lists, formatting, quotes, code blocks, and more&lt;/li&gt;
&lt;li&gt;The workflow scans for all image URLs pointing to Craft&#39;s backend hosting&lt;/li&gt;
&lt;li&gt;Each image is downloaded from Craft and immediately re-uploaded to Micro.blog&#39;s permanent media storage&lt;/li&gt;
&lt;li&gt;All image references in the post are updated to point to the new, stable Micro.blog URLs&lt;/li&gt;
&lt;li&gt;The article is published as a draft to Micro.blog for review before going live, which is a manual process&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-0-1777137965533.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
&lt;h2&gt;Key Technical Features &lt;/h2&gt;
&lt;h3&gt;Smart Document Matching &lt;/h3&gt;
&lt;p&gt;The search algorithm scores results by how closely the document title matches the request. Exact matches score 100, partial matches score lower, and body-text mentions are heavily penalized. This ensures I get the right document even if multiple articles discuss similar topics. The search is done via Craft API endpoint.&lt;/p&gt;
&lt;h3&gt;Rich Content Support &lt;/h3&gt;
&lt;p&gt;The conversion preserves all the formatting: paragraph styles, heading levels (h1–h4), bullet and numbered lists, blockquotes, task checkboxes, strikethrough text, code blocks, horizontal rules, and rich link bookmarks. Consecutive list items are automatically grouped into single lists.&lt;/p&gt;
&lt;h3&gt;Graceful Image Handling &lt;/h3&gt;
&lt;p&gt;If an image fails to upload (for example, unsupported formats like AVIF), the system keeps the original Craft URL in your post rather than failing entirely. This ensures the article publishes even if one image has issues.&lt;/p&gt;
&lt;h3&gt;Manual Review &lt;/h3&gt;
&lt;p&gt;All posts are created as drafts in Micro.blog. I can review the final result, check that images loaded correctly, and make edits before publishing it live.&lt;/p&gt;
&lt;h2&gt;Workflow Specifications &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Webhook at craft-to-microblog (available in my n8n instance wirh MCP endpoint enabled)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; Simple JSON with the article title to publish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs used:&lt;/strong&gt; Craft&#39;s document search and block retrieval, Micro.blog&#39;s Micropub standard API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typical execution:&lt;/strong&gt; 4–6 seconds (image uploads add ~1.5 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; Draft post URL, preview link, and edit URL from Micro.blog&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why This Matters &lt;/h2&gt;
&lt;p&gt;This automation fills a gap in the content publishing process. I can craft and organize my articles in Craft, a versatile and attractive writing environment, and then publish them to Micro.blog without losing images or manually fixing broken links. I use a similar method to publish new editions of the Ephemeral Scrapbook newsletter, which relies on a separate n8n workflow to handle Ghost CMS-specific requirements. &lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/craft-image-1-1777137965533.png&#34; alt=&#34;&#34;&gt;&lt;/figure&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/04/24/now-that-i-manage-all.html</link>
      <pubDate>Fri, 24 Apr 2026 09:22:57 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/24/now-that-i-manage-all.html</guid>
      <description>&lt;p&gt;Now that I manage all my issues and enhancements in GitHub Issues, I just realized that I could automate many manual workflows on issues closure&amp;hellip; many interesting ideas here, like updating the README.md file once an issue is closed by Claude Code. 🤓&lt;/p&gt;
</description>
      <source:markdown>Now that I manage all my issues and enhancements in GitHub Issues, I just realized that I could automate many manual workflows on issues closure... many interesting ideas here, like updating the README.md file once an issue is closed by Claude Code. 🤓
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/04/23/im-not-planning-to-go.html</link>
      <pubDate>Thu, 23 Apr 2026 22:18:53 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/23/im-not-planning-to-go.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not planning to go any further with &lt;a href=&#34;https://meta.numericcitizen.me/2026/04/19/just-testing-something-for-my.html&#34;&gt;my Lovable experimentation&lt;/a&gt;. The reason? On the free plan, custom domains are not supported. It&amp;rsquo;s a complete deal-breaker. Plus, the free tier doesn&amp;rsquo;t provide enough credits to build something meaningful, and you have to wait 24 hours before getting more. Too bad, it was somewhat promising. Pass. 😔 The good thing is that I&amp;rsquo;m focusing on Vercel for hosting web apps like mine.&lt;/p&gt;
</description>
      <source:markdown>I&#39;m not planning to go any further with [my Lovable experimentation](https://meta.numericcitizen.me/2026/04/19/just-testing-something-for-my.html). The reason? On the free plan, custom domains are not supported. It&#39;s a complete deal-breaker. Plus, the free tier doesn&#39;t provide enough credits to build something meaningful, and you have to wait 24 hours before getting more. Too bad, it was somewhat promising. Pass. 😔 The good thing is that I&#39;m focusing on Vercel for hosting web apps like mine. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/04/23/restarted-work-for-maintaining-and.html</link>
      <pubDate>Thu, 23 Apr 2026 07:32:29 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/23/restarted-work-for-maintaining-and.html</guid>
      <description>&lt;p&gt;Restarted work for maintaining and updating the &amp;ldquo;&lt;a href=&#34;https://whois.numericcitizen.me&#34;&gt;Who Is Numeric Citizen&lt;/a&gt;&amp;rdquo; website, now that my 90% of my vibe coding work is completed. See the latest &lt;a href=&#34;https://whois.numericcitizen.me/news/&#34;&gt;news post&lt;/a&gt; for more details.&lt;/p&gt;
</description>
      <source:markdown>Restarted work for maintaining and updating the &#34;[Who Is Numeric Citizen](https://whois.numericcitizen.me)&#34; website, now that my 90% of my vibe coding work is completed. See the latest [news post](https://whois.numericcitizen.me/news/) for more details.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/04/19/just-testing-something-for-my.html</link>
      <pubDate>Sun, 19 Apr 2026 17:14:13 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/19/just-testing-something-for-my.html</guid>
      <description>&lt;p&gt;Just testing something for my next project&amp;hellip; for that one, I might try Lovable instead of Vercel&amp;hellip; because I want to try different services.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/testing-lovable-things3-duplicate.png&#34; width=&#34;600&#34; height=&#34;345&#34; alt=&#34;&#34;&gt;
</description>
      <source:markdown>Just testing something for my next project... for that one, I might try Lovable instead of Vercel... because I want to try different services.

&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/testing-lovable-things3-duplicate.png&#34; width=&#34;600&#34; height=&#34;345&#34; alt=&#34;&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/04/16/from-now-on-i-will.html</link>
      <pubDate>Thu, 16 Apr 2026 21:59:31 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/16/from-now-on-i-will.html</guid>
      <description>&lt;p&gt;From now on, I will document and track all bugs in my custom web apps using GitHub, instead of relying on checklists in Craft. Centralizing everything isn’t ideal; organizing issues in their appropriate locations is smarter. Additionally, Claude Code will be able to close issues on my request.&lt;/p&gt;
</description>
      <source:markdown>From now on, I will document and track all bugs in my custom web apps using GitHub, instead of relying on checklists in Craft. Centralizing everything isn’t ideal; organizing issues in their appropriate locations is smarter. Additionally, Claude Code will be able to close issues on my request. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/04/12/today-i-went-ahead-and.html</link>
      <pubDate>Sun, 12 Apr 2026 09:16:49 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/12/today-i-went-ahead-and.html</guid>
      <description>&lt;p&gt;Today I went ahead and fully migrated &amp;ldquo;&lt;a href=&#34;https://whois.numericcitizen.me&#34;&gt;Who Is Numeric Citizen&lt;/a&gt;&amp;rdquo; website to Realmac Software Elements Hosting instead of Chillidog Hosting service. Here&amp;rsquo;s why: A) Chillidog was recently sold, and people are already complaining about a decline in service quality. B) What Realmac Software accomplished with Elements in the last year is nothing less than exemplary. They built mature, native web design software for the Mac and a hosting service. I prefer to reward this company for this hard work.&lt;/p&gt;
&lt;p&gt;The migration was really simple and took me less than an hour. The service is a bit more expensive but includes more storage and unlimited network bandwidth. This could enable a future option for hosting more photography-related content. Finally, the web service feels snappier, too!&lt;/p&gt;
</description>
      <source:markdown>Today I went ahead and fully migrated &#34;[Who Is Numeric Citizen](https://whois.numericcitizen.me)&#34; website to Realmac Software Elements Hosting instead of Chillidog Hosting service. Here&#39;s why: A) Chillidog was recently sold, and people are already complaining about a decline in service quality. B) What Realmac Software accomplished with Elements in the last year is nothing less than exemplary. They built mature, native web design software for the Mac and a hosting service. I prefer to reward this company for this hard work.

The migration was really simple and took me less than an hour. The service is a bit more expensive but includes more storage and unlimited network bandwidth. This could enable a future option for hosting more photography-related content. Finally, the web service feels snappier, too! 
</source:markdown>
    </item>
    
    <item>
      <title>Coming Soon </title>
      <link>https://meta.numericcitizen.me/2026/04/09/coming-soon.html</link>
      <pubDate>Thu, 09 Apr 2026 19:20:16 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/04/09/coming-soon.html</guid>
      <description>&lt;p&gt;One of the first things I’m going to do when I come back home is to deploy my new blog visual theme built entirely with Claude Code. It’s ready. I’m anxiously awaiting for the moment I put that project behind. Next, I’ll spend some time on &lt;a href=&#34;https://whois.numericcitizen.me&#34;&gt;Who Is Numeric Citizen website&lt;/a&gt; design and hosting solution (I’m thinking of leaving Chillidog Hosting hosting service to go with Elements’ built in solution instead).&lt;/p&gt;
</description>
      <source:markdown>One of the first things I’m going to do when I come back home is to deploy my new blog visual theme built entirely with Claude Code. It’s ready. I’m anxiously awaiting for the moment I put that project behind. Next, I’ll spend some time on [Who Is Numeric Citizen website](https://whois.numericcitizen.me) design and hosting solution (I’m thinking of leaving Chillidog Hosting hosting service to go with Elements’ built in solution instead). 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/03/30/i-realized-i-forgot-to.html</link>
      <pubDate>Mon, 30 Mar 2026 20:42:52 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/30/i-realized-i-forgot-to.html</guid>
      <description>&lt;p&gt;I realized I forgot to clearly state the design goals before starting to build this custom theme for Micro.blog. They became clearer as I progressed and explored how Hugo and Micro.blog work, especially with assistance from Claude AI, and as I encountered various challenges. Here are the goals: a) I want a theme that stands out and doesn&amp;rsquo;t resemble typical Micro.blog blogs. b) I aim to minimize the use of external plugins, ensuring that all functionality is integrated within the custom theme. c) I want the same theme to be usable on more than one blog (I have two). Stay tuned for more news.&lt;/p&gt;
</description>
      <source:markdown>I realized I forgot to clearly state the design goals before starting to build this custom theme for Micro.blog. They became clearer as I progressed and explored how Hugo and Micro.blog work, especially with assistance from Claude AI, and as I encountered various challenges. Here are the goals: a) I want a theme that stands out and doesn&#39;t resemble typical Micro.blog blogs. b) I aim to minimize the use of external plugins, ensuring that all functionality is integrated within the custom theme. c) I want the same theme to be usable on more than one blog (I have two). Stay tuned for more news. 
</source:markdown>
    </item>
    
    <item>
      <title>Takeaways From Building a Custom Micro.blog Theme Using Claude Code and Claude AI</title>
      <link>https://meta.numericcitizen.me/2026/03/29/takeaways-from-building-a-custom.html</link>
      <pubDate>Sun, 29 Mar 2026 19:14:16 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/29/takeaways-from-building-a-custom.html</guid>
      <description>&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/numericcitizen-beta-theme-small.png&#34; width=&#34;600&#34; height=&#34;677&#34; alt=&#34;&#34;&gt;
&lt;p&gt;Building a custom visual theme for Micro.blog presents unique challenges at the intersection of web design, static site generation, and AI-assisted development. This blog post captures practical insights and lessons learned from creating a custom theme with Claude Code and Claude AI, including key considerations on Hugo compatibility, plugin conflicts, and theme architecture.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude AI isn&amp;rsquo;t well-trained on Micro.blog architecture and dependency on Hugo static website generator. Claude doesn’t make a clear distinction between Hugo’s capabilities and Micro.blog’s unique features.&lt;/li&gt;
&lt;li&gt;Plugins are a challenge because they might inject conflicting formatting instructions into your custom-built theme. It’s hard to debug.&lt;/li&gt;
&lt;li&gt;Plugins can conflict with each other.&lt;/li&gt;
&lt;li&gt;Don’t use the latest Hugo version (0.158) and stay on 0.117 if you use many plugins. By removing low-value plugins, you increase your chance of using version 0.158.&lt;/li&gt;
&lt;li&gt;The workflow for updating a GitHub repo hosting your custom theme to the deployment on The process of Micro.blog is tedious because it’s manual and slow, especially for large websites and Hugo rendering engine. Hugo 0.158 could help, unless it conflicts with one plugin that you need.&lt;/li&gt;
&lt;li&gt;More than ever: less is more. Keep it simple, and problems will be kept at bay: removing low-value plugins can make a big difference.&lt;/li&gt;
&lt;li&gt;Test the website after each plugin removal, force a rebuild of the entire site to cleanup things. It’s slow but it might help debug later.&lt;/li&gt;
&lt;li&gt;If a plugin introduces support for smart code in blog posts, after removing that plugin, Hugo will generate errors. These blog posts need to be either updated or deleted.&lt;/li&gt;
&lt;li&gt;If the custom-built theme covers a specific design area, like a /photos page, don’t use a plugin touching the same area, prioritize the custom-built theme and skip the plugin. The idea is to have a self-contained custom theme.&lt;/li&gt;
&lt;li&gt;Stay away from abandoned-ware plugins.&lt;/li&gt;
&lt;li&gt;Prefer adding stuff in the custom theme instead of relying on an external plugin, so the theme is self-contained.&lt;/li&gt;
&lt;li&gt;The lower the number of plugins, the better the chance you can use the latest version of Hugo.&lt;/li&gt;
&lt;li&gt;Using the custom.css functionality, which helps externalize and override the custom-theme’s styling, speeds up testing different styling options.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Creating a custom Micro.blog theme using Claude AI revealed both the power and limitations of AI-assisted development in specialized ecosystems. While the tools provided invaluable support, the real breakthroughs came from hands-on debugging and understanding the unique interactions between Hugo, Micro.blog, and plugins. These takeaways form the foundation for a more robust theme architecture—one that will continue to improve with future iterations.&lt;/p&gt;
&lt;p&gt;I’m still not done with my design. As I progress, you can visit &lt;a href=&#34;https://numericcitizen-test.micro.blog&#34;&gt;my test blog&lt;/a&gt;.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/numericcitizen-beta-theme-small.png&#34; width=&#34;600&#34; height=&#34;677&#34; alt=&#34;&#34;&gt;

Building a custom visual theme for Micro.blog presents unique challenges at the intersection of web design, static site generation, and AI-assisted development. This blog post captures practical insights and lessons learned from creating a custom theme with Claude Code and Claude AI, including key considerations on Hugo compatibility, plugin conflicts, and theme architecture.

- Claude AI isn&#39;t well-trained on Micro.blog architecture and dependency on Hugo static website generator. Claude doesn’t make a clear distinction between Hugo’s capabilities and Micro.blog’s unique features. 
- Plugins are a challenge because they might inject conflicting formatting instructions into your custom-built theme. It’s hard to debug. 
- Plugins can conflict with each other.
- Don’t use the latest Hugo version (0.158) and stay on 0.117 if you use many plugins. By removing low-value plugins, you increase your chance of using version 0.158. 
- The workflow for updating a GitHub repo hosting your custom theme to the deployment on The process of Micro.blog is tedious because it’s manual and slow, especially for large websites and Hugo rendering engine. Hugo 0.158 could help, unless it conflicts with one plugin that you need. 
- More than ever: less is more. Keep it simple, and problems will be kept at bay: removing low-value plugins can make a big difference. 
- Test the website after each plugin removal, force a rebuild of the entire site to cleanup things. It’s slow but it might help debug later. 
- If a plugin introduces support for smart code in blog posts, after removing that plugin, Hugo will generate errors. These blog posts need to be either updated or deleted.
- If the custom-built theme covers a specific design area, like a /photos page, don’t use a plugin touching the same area, prioritize the custom-built theme and skip the plugin. The idea is to have a self-contained custom theme. 
- Stay away from abandoned-ware plugins. 
- Prefer adding stuff in the custom theme instead of relying on an external plugin, so the theme is self-contained.
- The lower the number of plugins, the better the chance you can use the latest version of Hugo. 
- Using the custom.css functionality, which helps externalize and override the custom-theme’s styling, speeds up testing different styling options.

Creating a custom Micro.blog theme using Claude AI revealed both the power and limitations of AI-assisted development in specialized ecosystems. While the tools provided invaluable support, the real breakthroughs came from hands-on debugging and understanding the unique interactions between Hugo, Micro.blog, and plugins. These takeaways form the foundation for a more robust theme architecture—one that will continue to improve with future iterations.

I’m still not done with my design. As I progress, you can visit [my test blog](https://numericcitizen-test.micro.blog).

</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/03/28/one-positive-side-effect-of.html</link>
      <pubDate>Sat, 28 Mar 2026 14:36:45 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/28/one-positive-side-effect-of.html</guid>
      <description>&lt;p&gt;One positive side effect of this custom visual theme that I&amp;rsquo;m working on is that I&amp;rsquo;m cleaning up this plugin&amp;rsquo;s mess on my blog. I have way too many with little added value for the readers.&lt;/p&gt;
</description>
      <source:markdown>One positive side effect of this custom visual theme that I&#39;m working on is that I&#39;m cleaning up this plugin&#39;s mess on my blog. I have way too many with little added value for the readers. 
</source:markdown>
    </item>
    
    <item>
      <title>Analyzing My Installed Plugins</title>
      <link>https://meta.numericcitizen.me/2026/03/28/just-finished-compiling-the-list.html</link>
      <pubDate>Sat, 28 Mar 2026 13:52:08 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/28/just-finished-compiling-the-list.html</guid>
      <description>&lt;p&gt;Just finished compiling the list of Micro.blog plugins that my blog is using: 31 in total. Then Claude AI analyzed all GitHub repos to see if there were any potential conflicts. Here&amp;rsquo;s the complete impact report for all 31 plugins, organized by risk level:&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-avoid--direct-conflicts-with-your-theme&#34;&gt;🔴 Avoid / Direct Conflicts with Your Theme&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;micro-blog-cards-theme&lt;/code&gt;&lt;/strong&gt; — This is a full replacement theme, not a plugin. Installing it would completely override your custom theme. Skip it entirely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-collections&lt;/code&gt;&lt;/strong&gt; — Injects its own lightbox targeting &lt;code&gt;.e-content img&lt;/code&gt;. This &lt;strong&gt;directly conflicts&lt;/strong&gt; with the custom lightbox you built in v0.9.12 (&lt;code&gt;theme.js&lt;/code&gt;). Both would fight over the same images. Don&amp;rsquo;t install unless you remove your lightbox first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-opengraph-basics&lt;/code&gt;&lt;/strong&gt; — Your theme already has full Open Graph meta tags (added in v0.5.9 in &lt;code&gt;head.html&lt;/code&gt;). Installing this would generate &lt;strong&gt;duplicate OG tags&lt;/strong&gt; in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-caution--needs-attention&#34;&gt;🟡 Caution / Needs Attention&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-archive-months&lt;/code&gt;&lt;/strong&gt; — Overrides &lt;code&gt;list.archivehtml.html&lt;/code&gt;, which would take over the archive page display with its own year/month grouped layout and inline JS. Replaces the theme&amp;rsquo;s existing compact archive view.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-photos-months&lt;/code&gt;&lt;/strong&gt; — Overrides &lt;code&gt;list.photoshtml.html&lt;/code&gt;. &lt;strong&gt;Conflicts with your already-installed &lt;code&gt;plugin-all-photos&lt;/code&gt;&lt;/strong&gt;, which also provides that template. Last one installed wins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-screenshots&lt;/code&gt;&lt;/strong&gt; — Also overrides &lt;code&gt;list.photoshtml.html&lt;/code&gt;. Same conflict with &lt;code&gt;plugin-all-photos&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;kottkrig/microdotblog-photos-page&lt;/code&gt;&lt;/strong&gt; — Also overrides &lt;code&gt;list.photoshtml.html&lt;/code&gt;. Same three-way conflict. Pick only one photos page plugin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;stoot&lt;/code&gt;&lt;/strong&gt; — Its CSS expects CSS custom properties (&lt;code&gt;--gray-*&lt;/code&gt;, &lt;code&gt;--white&lt;/code&gt;, &lt;code&gt;--black&lt;/code&gt;, &lt;code&gt;--link&lt;/code&gt;, &lt;code&gt;--text-base&lt;/code&gt;) that your theme doesn&amp;rsquo;t define. Mastodon embeds will render with broken/missing styles. Fixable by adding those variables to &lt;code&gt;style.css&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-post-stats&lt;/code&gt;&lt;/strong&gt; — No dark mode support in its CSS. The stats page cards and Chart.js charts will look visually inconsistent in dark mode. Fixable with CSS overrides.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-bigfoot&lt;/code&gt;&lt;/strong&gt; — Already analyzed. jQuery 1.12.4 (~90KB) loaded on every page, and footnote popover CSS won&amp;rsquo;t respect dark mode. Set &lt;code&gt;post_separator = &amp;quot;article.h-entry&amp;quot;&lt;/code&gt; when installing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-conversation-on-mb&lt;/code&gt;&lt;/strong&gt; — Adds a &amp;ldquo;View conversation on Micro.blog&amp;rdquo; link, but requires manually calling &lt;code&gt;{{ partial &amp;quot;conversation-link.html&amp;quot; . }}&lt;/code&gt; in your theme&amp;rsquo;s single post templates. Your theme already loads Micro.blog&amp;rsquo;s &lt;code&gt;conversation.js&lt;/code&gt; via &lt;code&gt;microhook-after-post.html&lt;/code&gt;, which renders the full conversation box. This plugin adds a different thing (a link vs. a box), so they don&amp;rsquo;t conflict — but it needs a manual theme edit to integrate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-reply-by-email&lt;/code&gt;&lt;/strong&gt; — Same situation: requires &lt;code&gt;{{ partial &amp;quot;reply-by-email.html&amp;quot; . }}&lt;/code&gt; manually added to your single post template. Your theme already has &lt;code&gt;reply.js&lt;/code&gt; for native Micro.blog replies. These serve different purposes (email vs. Micro.blog) and can coexist, but need a theme edit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-reply-on-mastodon&lt;/code&gt;&lt;/strong&gt; — Repository returns 404. &lt;strong&gt;No longer exists.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;plugin-search-space&lt;/code&gt;&lt;/strong&gt; — Creates a &lt;code&gt;/search-space/&lt;/code&gt; page (different URL from your installed &lt;code&gt;/search/&lt;/code&gt; page). Having two search pages could confuse visitors. Pick one.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: The most important things to avoid are &lt;code&gt;plugin-collections&lt;/code&gt; (lightbox conflict) and &lt;code&gt;plugin-opengraph-basics&lt;/code&gt; (duplicate OG tags). For the photos page, pick only &lt;strong&gt;one&lt;/strong&gt; of: &lt;code&gt;plugin-all-photos&lt;/code&gt;, &lt;code&gt;plugin-photos-months&lt;/code&gt;, &lt;code&gt;plugin-screenshots&lt;/code&gt;, or &lt;code&gt;kottkrig/microdotblog-photos-page&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure everything has been analyzed correctly, especially when it comes to photo-related plugins.&lt;/p&gt;
</description>
      <source:markdown>Just finished compiling the list of Micro.blog plugins that my blog is using: 31 in total. Then Claude AI analyzed all GitHub repos to see if there were any potential conflicts. Here&#39;s the complete impact report for all 31 plugins, organized by risk level:

---

## 🔴 Avoid / Direct Conflicts with Your Theme

**`micro-blog-cards-theme`** — This is a full replacement theme, not a plugin. Installing it would completely override your custom theme. Skip it entirely.

**`plugin-collections`** — Injects its own lightbox targeting `.e-content img`. This **directly conflicts** with the custom lightbox you built in v0.9.12 (`theme.js`). Both would fight over the same images. Don&#39;t install unless you remove your lightbox first.

**`plugin-opengraph-basics`** — Your theme already has full Open Graph meta tags (added in v0.5.9 in `head.html`). Installing this would generate **duplicate OG tags** in the `&lt;head&gt;`.

---

## 🟡 Caution / Needs Attention

**`plugin-archive-months`** — Overrides `list.archivehtml.html`, which would take over the archive page display with its own year/month grouped layout and inline JS. Replaces the theme&#39;s existing compact archive view.

**`plugin-photos-months`** — Overrides `list.photoshtml.html`. **Conflicts with your already-installed `plugin-all-photos`**, which also provides that template. Last one installed wins.

**`plugin-screenshots`** — Also overrides `list.photoshtml.html`. Same conflict with `plugin-all-photos`.

**`kottkrig/microdotblog-photos-page`** — Also overrides `list.photoshtml.html`. Same three-way conflict. Pick only one photos page plugin.

**`stoot`** — Its CSS expects CSS custom properties (`--gray-*`, `--white`, `--black`, `--link`, `--text-base`) that your theme doesn&#39;t define. Mastodon embeds will render with broken/missing styles. Fixable by adding those variables to `style.css`.

**`plugin-post-stats`** — No dark mode support in its CSS. The stats page cards and Chart.js charts will look visually inconsistent in dark mode. Fixable with CSS overrides.

**`plugin-bigfoot`** — Already analyzed. jQuery 1.12.4 (~90KB) loaded on every page, and footnote popover CSS won&#39;t respect dark mode. Set `post_separator = &#34;article.h-entry&#34;` when installing.

**`plugin-conversation-on-mb`** — Adds a &#34;View conversation on Micro.blog&#34; link, but requires manually calling `{{ partial &#34;conversation-link.html&#34; . }}` in your theme&#39;s single post templates. Your theme already loads Micro.blog&#39;s `conversation.js` via `microhook-after-post.html`, which renders the full conversation box. This plugin adds a different thing (a link vs. a box), so they don&#39;t conflict — but it needs a manual theme edit to integrate.

**`plugin-reply-by-email`** — Same situation: requires `{{ partial &#34;reply-by-email.html&#34; . }}` manually added to your single post template. Your theme already has `reply.js` for native Micro.blog replies. These serve different purposes (email vs. Micro.blog) and can coexist, but need a theme edit.

**`plugin-reply-on-mastodon`** — Repository returns 404. **No longer exists.**

**`plugin-search-space`** — Creates a `/search-space/` page (different URL from your installed `/search/` page). Having two search pages could confuse visitors. Pick one.

---

**Bottom line**: The most important things to avoid are `plugin-collections` (lightbox conflict) and `plugin-opengraph-basics` (duplicate OG tags). For the photos page, pick only **one** of: `plugin-all-photos`, `plugin-photos-months`, `plugin-screenshots`, or `kottkrig/microdotblog-photos-page`.

I&#39;m not sure everything has been analyzed correctly, especially when it comes to photo-related plugins. 
</source:markdown>
    </item>
    
    <item>
      <title>Time for a Complete Reset</title>
      <link>https://meta.numericcitizen.me/2026/03/28/time-for-a-complete-reset.html</link>
      <pubDate>Sat, 28 Mar 2026 10:30:06 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/28/time-for-a-complete-reset.html</guid>
      <description>&lt;p&gt;It&amp;rsquo;s time for a project status update. I&amp;rsquo;ve been working hard trying to get the Micro.blog/Hugo engine to make this custom theme work the way I want. It&amp;rsquo;s not an easy task. I&amp;rsquo;m starting to think that because Micro.blog is a niche product, even though it is based on Hugo, there are some particularities in the templating system that Claude AI is not well-trained for. Micro.blog plugins make things even more complicated. I&amp;rsquo;m now at a point where I need to feed all plugin GitHub repositories into my conversation so Claude AI can fully understand what each plugin injects into the templates. Finally, due to unpredictable issues with blog posts and image deletions, I had to delete and recreate my test blog, which wiped everything.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m fairly certain that when I&amp;rsquo;m ready to apply my custom theme to my production blog, everything will break. Luckily, we can easily revert to another theme and perform a full rebuild. It&amp;rsquo;s tedious but seems like a reliable process.&lt;/p&gt;
</description>
      <source:markdown>It&#39;s time for a project status update. I&#39;ve been working hard trying to get the Micro.blog/Hugo engine to make this custom theme work the way I want. It&#39;s not an easy task. I&#39;m starting to think that because Micro.blog is a niche product, even though it is based on Hugo, there are some particularities in the templating system that Claude AI is not well-trained for. Micro.blog plugins make things even more complicated. I&#39;m now at a point where I need to feed all plugin GitHub repositories into my conversation so Claude AI can fully understand what each plugin injects into the templates. Finally, due to unpredictable issues with blog posts and image deletions, I had to delete and recreate my test blog, which wiped everything. 

I&#39;m fairly certain that when I&#39;m ready to apply my custom theme to my production blog, everything will break. Luckily, we can easily revert to another theme and perform a full rebuild. It&#39;s tedious but seems like a reliable process.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/03/27/spent-some-time-building-my.html</link>
      <pubDate>Fri, 27 Mar 2026 18:03:43 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/27/spent-some-time-building-my.html</guid>
      <description>&lt;p&gt;Spent some time building my custom theme for Micro.blog with Claude Code. It works but the nature of Hugo processing with different templates complicates the process. What works on the main timeline won’t always work on individual posts. Lot’s of back and forth to test and fix things. The good thing is that I’m building exactly what I want.&lt;/p&gt;
&lt;p&gt;You can see the current design right &lt;a href=&#34;https://numericcitizen-test.micro.blog&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
      <source:markdown>Spent some time building my custom theme for Micro.blog with Claude Code. It works but the nature of Hugo processing with different templates complicates the process. What works on the main timeline won’t always work on individual posts. Lot’s of back and forth to test and fix things. The good thing is that I’m building exactly what I want. 

You can see the current design right [here](https://numericcitizen-test.micro.blog).
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/03/26/another-milestone-accomplished-i-now.html</link>
      <pubDate>Thu, 26 Mar 2026 21:46:15 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/26/another-milestone-accomplished-i-now.html</guid>
      <description>&lt;p&gt;Another milestone accomplished: I now have a basic custom theme installed on my Micro.blog test website. It&amp;rsquo;s not a plugin per se; it&amp;rsquo;s a custom theme stored on my GitHub account that Micro.blog fetches. I don&amp;rsquo;t yet know how to turn it into a plugin with version numbering and all that, but I might not need that after all. I just wish Micro.blog would update automatically whenever I push a new change to my repo, like Vercel does.&lt;/p&gt;
</description>
      <source:markdown>Another milestone accomplished: I now have a basic custom theme installed on my Micro.blog test website. It&#39;s not a plugin per se; it&#39;s a custom theme stored on my GitHub account that Micro.blog fetches. I don&#39;t yet know how to turn it into a plugin with version numbering and all that, but I might not need that after all. I just wish Micro.blog would update automatically whenever I push a new change to my repo, like Vercel does. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/03/25/i-recently-decided-to-drop.html</link>
      <pubDate>Wed, 25 Mar 2026 20:45:13 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/25/i-recently-decided-to-drop.html</guid>
      <description>&lt;p&gt;I recently decided to drop the numericcitizen.io domain name and focus on numericcitizen.me for all my needs. The former was tied to a Craft subscription that I&amp;rsquo;ll cancel, too. I prefer to manage everything inside a single space under a single domain. It&amp;rsquo;s cheaper.&lt;/p&gt;
</description>
      <source:markdown>I recently decided to drop the numericcitizen.io domain name and focus on numericcitizen.me for all my needs. The former was tied to a Craft subscription that I&#39;ll cancel, too. I prefer to manage everything inside a single space under a single domain. It&#39;s cheaper. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2026/03/24/continuing-my-thinking-about-a.html</link>
      <pubDate>Tue, 24 Mar 2026 22:01:13 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/24/continuing-my-thinking-about-a.html</guid>
      <description>&lt;p&gt;Continuing &lt;a href=&#34;https://meta.numericcitizen.me/2026/03/23/vibe-coding-a-custombuilt-microblog.html&#34;&gt;my thinking about a custom-built Micro.blog theme plugin&lt;/a&gt;, I wondered why most of Micro.blog themes design card-based? Here&amp;rsquo;s Claude AI&amp;rsquo;s answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cards became the dominant Micro.blog theme style largely by following a broader web design trend from the mid-2010s, when Pinterest and Material Design made cards ubiquitous. Theme authors adopted them because they handle variable-length content safely and look great in screenshots. The fork-from-fork nature of many Micro.blog themes then perpetuated the pattern. The irony is that cards aren&amp;rsquo;t actually the best fit for Micro.blog&amp;rsquo;s typical stream of short title-less posts — making it a real opportunity for anyone wanting a distinctive, better-suited design.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Besides the fact that Micro.blog launched in 2018, the rest of Claude&amp;rsquo;s response makes me think that my design choice of a left sidebar, similar to Micro, is a good one.&lt;/p&gt;
</description>
      <source:markdown>Continuing [my thinking about a custom-built Micro.blog theme plugin](https://meta.numericcitizen.me/2026/03/23/vibe-coding-a-custombuilt-microblog.html), I wondered why most of Micro.blog themes design card-based? Here&#39;s Claude AI&#39;s answer:

&gt; Cards became the dominant Micro.blog theme style largely by following a broader web design trend from the mid-2010s, when Pinterest and Material Design made cards ubiquitous. Theme authors adopted them because they handle variable-length content safely and look great in screenshots. The fork-from-fork nature of many Micro.blog themes then perpetuated the pattern. The irony is that cards aren&#39;t actually the best fit for Micro.blog&#39;s typical stream of short title-less posts — making it a real opportunity for anyone wanting a distinctive, better-suited design.

Besides the fact that Micro.blog launched in 2018, the rest of Claude&#39;s response makes me think that my design choice of a left sidebar, similar to Micro, is a good one.
</source:markdown>
    </item>
    
    <item>
      <title>Vibe Coding a Custom-Built Micro.blog Theme Plugin</title>
      <link>https://meta.numericcitizen.me/2026/03/23/vibe-coding-a-custombuilt-microblog.html</link>
      <pubDate>Mon, 23 Mar 2026 12:34:00 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/03/23/vibe-coding-a-custombuilt-microblog.html</guid>
      <description>&lt;p&gt;I started working a my next vibe coding project: &lt;strong&gt;building my own Micro.blog theme plugin&lt;/strong&gt;. I wanted to have one even before vibe coding was a thing, but I didn’t have the experience with Hugo and Micro.blog theme creation. With Claude Code, having that knowledge is secondary to the task, but having a clear mind about the desired final product is paramount. I started gathering specifications that will end up in some form in the specs.md file that I’ll feed to Claude Code. I’m also gathering design tidbits that reflect what I like. Ultimately, all my Micro.blog sites will share most of the design elements. Thanks the goal.&lt;/p&gt;
&lt;p&gt;I plan to provide more updates about this little project, here on &lt;a href=&#34;https://meta.numericcitizen.me&#34;&gt;my meta blog&lt;/a&gt;. I’m doing all my work in Craft, a great tool for such project. I might decide to share my document with you dear readers if you show sign of curiosity.&lt;/p&gt;
</description>
      <source:markdown>I started working a my next vibe coding project: **building my own Micro.blog theme plugin**. I wanted to have one even before vibe coding was a thing, but I didn’t have the experience with Hugo and Micro.blog theme creation. With Claude Code, having that knowledge is secondary to the task, but having a clear mind about the desired final product is paramount. I started gathering specifications that will end up in some form in the specs.md file that I’ll feed to Claude Code. I’m also gathering design tidbits that reflect what I like. Ultimately, all my Micro.blog sites will share most of the design elements. Thanks the goal. 

I plan to provide more updates about this little project, here on [my meta blog](https://meta.numericcitizen.me). I’m doing all my work in Craft, a great tool for such project. I might decide to share my document with you dear readers if you show sign of curiosity. 
</source:markdown>
    </item>
    
    <item>
      <title>My Micro.blog Timeline Summarization Workflow</title>
      <link>https://meta.numericcitizen.me/2026/01/14/my-microblog-timeline-summarization-workflow.html</link>
      <pubDate>Wed, 14 Jan 2026 07:43:12 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/01/14/my-microblog-timeline-summarization-workflow.html</guid>
      <description>&lt;p&gt;By popular request, here&amp;rsquo;s &lt;a href=&#34;https://crafted.numericcitizen.me/FtKlZVn3GnMjbs&#34;&gt;the documentation&lt;/a&gt; for my n8n workflow. This documentation was created with Claude AI using Claude Skills and was slightly tweaked to remove any sensitive data. The diagram was manually added.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/rssfeedtrigger.png&#34; width=&#34;600&#34; height=&#34;256&#34; alt=&#34;&#34;&gt;
</description>
      <source:markdown>By popular request, here&#39;s [the documentation](https://crafted.numericcitizen.me/FtKlZVn3GnMjbs) for my n8n workflow. This documentation was created with Claude AI using Claude Skills and was slightly tweaked to remove any sensitive data. The diagram was manually added.

&lt;img src=&#34;https://cdn.uploads.micro.blog/143495/2026/rssfeedtrigger.png&#34; width=&#34;600&#34; height=&#34;256&#34; alt=&#34;&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title>What Happened in Recent Days - A LOT</title>
      <link>https://meta.numericcitizen.me/2026/01/04/what-happened-in-recent-days.html</link>
      <pubDate>Sun, 04 Jan 2026 22:33:48 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/01/04/what-happened-in-recent-days.html</guid>
      <description>&lt;p&gt;Over the past few weeks, I&amp;rsquo;ve been on an intensive learning journey exploring automation, cloud deployment, and AI integration. I&amp;rsquo;ve been hands-on, building real workflows and connecting actual services. Here&amp;rsquo;s what I discovered along the way.&lt;/p&gt;
&lt;h2 id=&#34;getting-started-with-automation&#34;&gt;Getting Started with Automation&lt;/h2&gt;
&lt;p&gt;The foundation of this exploration was deploying n8n as a self-hosted instance on a cloud provider. This wasn&amp;rsquo;t just about clicking a button—it required understanding infrastructure, configuration, and the basics of running a service in the cloud. Once that was in place, I could start building workflows.&lt;/p&gt;
&lt;p&gt;Building basic workflows in n8n taught me what it actually means to create a functional automation. It&amp;rsquo;s not enough to have a good idea; you need to understand how data flows through your workflow, how triggers initiate actions, how conditions branch logic, and how errors are handled. Meeting all the requirements for a working workflow meant learning to think systematically about each step and its dependencies.&lt;/p&gt;
&lt;h2 id=&#34;accelerating-learning-with-ai&#34;&gt;Accelerating Learning with AI&lt;/h2&gt;
&lt;p&gt;One of the biggest breakthroughs was leveraging Claude AI to accelerate my learning across different subject matters. Rather than struggling through documentation alone or spending hours debugging, I could ask targeted questions and get explanations tailored to my specific use cases. This fundamentally changed how quickly I could iterate and experiment.&lt;/p&gt;
&lt;p&gt;Claude became my learning partner—helping me understand concepts, troubleshoot issues, and even write code. This wasn&amp;rsquo;t just about saving time; it was about compressing what might have taken weeks of traditional learning into days of focused experimentation.&lt;/p&gt;
&lt;h2 id=&#34;building-and-connecting&#34;&gt;Building and Connecting&lt;/h2&gt;
&lt;p&gt;From there, I expanded into multiple directions simultaneously. I deployed Next.js apps on Vercel using Claude Code, which gave me a way to build custom web interfaces quickly. I integrated GitHub for continuous delivery, automating the process of pushing code changes to live services like Scribbles and Micro.blog.&lt;/p&gt;
&lt;p&gt;But the real power came from connecting external services directly into n8n workflows. I learned to interact with Telegram, Discord, Micro.blog, and Tinylytics through their APIs, webhooks, and HTTP requests. Each integration taught me something different about how modern services communicate with each other. Some services have well-documented APIs; others require reverse-engineering their webhook payloads. Some are straightforward; others have quirks you only discover through experimentation.&lt;/p&gt;
&lt;h2 id=&#34;the-deeper-challenges&#34;&gt;The Deeper Challenges&lt;/h2&gt;
&lt;p&gt;The more complex problems emerged when I tackled data persistence and LLM integration within n8n. Adding state management to automation workflows isn&amp;rsquo;t trivial—you need to decide where to store data, how to retrieve it, and how to keep it synchronized across multiple workflow runs. It&amp;rsquo;s one thing to run a workflow once; it&amp;rsquo;s another to run it reliably over time while maintaining context and history.&lt;/p&gt;
&lt;p&gt;Incorporating AI services—whether through pay-per-use models like Claude or subscription-based services—required careful consideration. I had to think about cost implications, rate limits, and how to structure requests efficiently. Suddenly, every API call had a price tag, and I became much more conscious of resource consumption.&lt;/p&gt;
&lt;h2 id=&#34;key-insights&#34;&gt;Key Insights&lt;/h2&gt;
&lt;p&gt;What stands out most is a clearer understanding of tool selection. Each platform has its place, and knowing when to use n8n versus a custom Next.js app versus a direct API call makes all the difference. Sometimes the right answer is a simple webhook; sometimes you need the flexibility of a full application. This contextual thinking has become invaluable.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also learned to transpose ideas into concrete use cases, leveraging service APIs from Scribbles, Tinylytics, and Micro.blog in ways I hadn&amp;rsquo;t considered before. What started as &amp;ldquo;I wonder if I can connect these services&amp;rdquo; became &amp;ldquo;Here&amp;rsquo;s a specific workflow that solves a real problem.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve discovered how to make the most of services I was already depending on—Micro.blog and Inoreader—by understanding their capabilities more deeply. These tools had features and integrations I&amp;rsquo;d overlooked, and now I&amp;rsquo;m using them in ways that actually enhance my workflow.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also expanded my toolkit with utilities like VS Code, GitHub, and Postman, each playing a crucial role in different parts of the workflow. VS Code became my development environment, GitHub my version control and deployment trigger, and Postman my tool for testing and understanding APIs before integrating them into n8n.&lt;/p&gt;
&lt;h2 id=&#34;the-bigger-picture&#34;&gt;The Bigger Picture&lt;/h2&gt;
&lt;p&gt;The journey has been about understanding not just individual tools, but how they fit together in a larger ecosystem. It&amp;rsquo;s about recognizing that modern development isn&amp;rsquo;t about mastering one tool—it&amp;rsquo;s about understanding how to orchestrate multiple tools to solve real problems. And it&amp;rsquo;s about using AI not as a replacement for learning, but as an accelerant that lets you learn faster and go deeper.&lt;/p&gt;
</description>
      <source:markdown>Over the past few weeks, I&#39;ve been on an intensive learning journey exploring automation, cloud deployment, and AI integration. I&#39;ve been hands-on, building real workflows and connecting actual services. Here&#39;s what I discovered along the way.

## Getting Started with Automation

The foundation of this exploration was deploying n8n as a self-hosted instance on a cloud provider. This wasn&#39;t just about clicking a button—it required understanding infrastructure, configuration, and the basics of running a service in the cloud. Once that was in place, I could start building workflows.

Building basic workflows in n8n taught me what it actually means to create a functional automation. It&#39;s not enough to have a good idea; you need to understand how data flows through your workflow, how triggers initiate actions, how conditions branch logic, and how errors are handled. Meeting all the requirements for a working workflow meant learning to think systematically about each step and its dependencies.

## Accelerating Learning with AI

One of the biggest breakthroughs was leveraging Claude AI to accelerate my learning across different subject matters. Rather than struggling through documentation alone or spending hours debugging, I could ask targeted questions and get explanations tailored to my specific use cases. This fundamentally changed how quickly I could iterate and experiment.

Claude became my learning partner—helping me understand concepts, troubleshoot issues, and even write code. This wasn&#39;t just about saving time; it was about compressing what might have taken weeks of traditional learning into days of focused experimentation.

## Building and Connecting

From there, I expanded into multiple directions simultaneously. I deployed Next.js apps on Vercel using Claude Code, which gave me a way to build custom web interfaces quickly. I integrated GitHub for continuous delivery, automating the process of pushing code changes to live services like Scribbles and Micro.blog.

But the real power came from connecting external services directly into n8n workflows. I learned to interact with Telegram, Discord, Micro.blog, and Tinylytics through their APIs, webhooks, and HTTP requests. Each integration taught me something different about how modern services communicate with each other. Some services have well-documented APIs; others require reverse-engineering their webhook payloads. Some are straightforward; others have quirks you only discover through experimentation.

## The Deeper Challenges

The more complex problems emerged when I tackled data persistence and LLM integration within n8n. Adding state management to automation workflows isn&#39;t trivial—you need to decide where to store data, how to retrieve it, and how to keep it synchronized across multiple workflow runs. It&#39;s one thing to run a workflow once; it&#39;s another to run it reliably over time while maintaining context and history.

Incorporating AI services—whether through pay-per-use models like Claude or subscription-based services—required careful consideration. I had to think about cost implications, rate limits, and how to structure requests efficiently. Suddenly, every API call had a price tag, and I became much more conscious of resource consumption.

## Key Insights

What stands out most is a clearer understanding of tool selection. Each platform has its place, and knowing when to use n8n versus a custom Next.js app versus a direct API call makes all the difference. Sometimes the right answer is a simple webhook; sometimes you need the flexibility of a full application. This contextual thinking has become invaluable.

I&#39;ve also learned to transpose ideas into concrete use cases, leveraging service APIs from Scribbles, Tinylytics, and Micro.blog in ways I hadn&#39;t considered before. What started as &#34;I wonder if I can connect these services&#34; became &#34;Here&#39;s a specific workflow that solves a real problem.&#34;

I&#39;ve discovered how to make the most of services I was already depending on—Micro.blog and Inoreader—by understanding their capabilities more deeply. These tools had features and integrations I&#39;d overlooked, and now I&#39;m using them in ways that actually enhance my workflow.

I&#39;ve also expanded my toolkit with utilities like VS Code, GitHub, and Postman, each playing a crucial role in different parts of the workflow. VS Code became my development environment, GitHub my version control and deployment trigger, and Postman my tool for testing and understanding APIs before integrating them into n8n.

## The Bigger Picture

The journey has been about understanding not just individual tools, but how they fit together in a larger ecosystem. It&#39;s about recognizing that modern development isn&#39;t about mastering one tool—it&#39;s about understanding how to orchestrate multiple tools to solve real problems. And it&#39;s about using AI not as a replacement for learning, but as an accelerant that lets you learn faster and go deeper.
</source:markdown>
    </item>
    
    <item>
      <title>Building an Automated Publishing Pipeline: From Craft to Ghost</title>
      <link>https://meta.numericcitizen.me/2026/01/02/building-an-automated-publishing-pipeline.html</link>
      <pubDate>Fri, 02 Jan 2026 17:57:27 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2026/01/02/building-an-automated-publishing-pipeline.html</guid>
      <description>&lt;p&gt;For months, I&amp;rsquo;ve been publishing my weekly newsletter, &lt;em&gt;The Ephemeral Scrapbook&lt;/em&gt;, using a manual process: write in Craft, export to Ulysses, copy to Ghost, reformat everything, add images, fix formatting issues, and finally publish. It worked, but it was tedious and time-consuming.&lt;/p&gt;
&lt;p&gt;Today, that process is fully automated. Here&amp;rsquo;s how Claude and I built it together.&lt;/p&gt;
&lt;h2 id=&#34;the-challenge&#34;&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;My workflow had become a bottleneck:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing newsletters in Craft Docs (my preferred writing environment)&lt;/li&gt;
&lt;li&gt;Exporting to Ulysses as an intermediary step&lt;/li&gt;
&lt;li&gt;Manual copy/paste to Ghost (my publishing platform)&lt;/li&gt;
&lt;li&gt;Reformatting all the markdown and HTML&lt;/li&gt;
&lt;li&gt;Dealing with Craft-specific formatting that Ghost didn&amp;rsquo;t understand&lt;/li&gt;
&lt;li&gt;Adding metadata like excerpts and tags manually&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wanted automation, but I also wanted to understand the infrastructure I was building. That&amp;rsquo;s where working with Claude became invaluable—not just executing commands, but learning and iterating together.&lt;/p&gt;
&lt;h2 id=&#34;the-solution-n8n-workflow-automation&#34;&gt;The Solution: n8n Workflow Automation&lt;/h2&gt;
&lt;p&gt;We decided to build an n8n workflow that would:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for a document in Craft by title&lt;/li&gt;
&lt;li&gt;Fetch all the content blocks&lt;/li&gt;
&lt;li&gt;Transform Craft&amp;rsquo;s markdown/blocks into clean HTML&lt;/li&gt;
&lt;li&gt;Publish to Ghost as a draft&lt;/li&gt;
&lt;li&gt;Return confirmation with the post URL&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Simple in concept, complex in execution.&lt;/p&gt;
&lt;h2 id=&#34;the-journey-key-milestones&#34;&gt;The Journey: Key Milestones&lt;/h2&gt;
&lt;h3 id=&#34;milestone-1-understanding-the-architecture&#34;&gt;Milestone 1: Understanding the Architecture&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt;: Should we use multiple workflows or one unified workflow?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Decision&lt;/strong&gt;: One end-to-end workflow that handles everything from search to publish.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learning&lt;/strong&gt;: Simplicity wins. Rather than orchestrating multiple workflows, we built one cohesive pipeline that&amp;rsquo;s easier to debug and maintain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workflow nodes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Webhook (trigger)&lt;/li&gt;
&lt;li&gt;HTTP Request (search Craft)&lt;/li&gt;
&lt;li&gt;HTTP Request (fetch document)&lt;/li&gt;
&lt;li&gt;Code (transform to HTML)&lt;/li&gt;
&lt;li&gt;HTTP Request (publish to Ghost)&lt;/li&gt;
&lt;li&gt;Respond to Webhook&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-iterative-building-process&#34;&gt;The Iterative Building Process&lt;/h3&gt;
&lt;p&gt;One of the most important decisions we made was to &lt;strong&gt;build and test incrementally&lt;/strong&gt;. Rather than assembling the entire workflow at once and hoping it would work, we added one node at a time, testing after each addition.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Testing Cadence&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Add Webhook → Test&lt;/strong&gt;: Confirmed the webhook received the query parameter correctly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Search Node → Test&lt;/strong&gt;: Verified we could find the document and get the correct document ID&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Fetch Node → Test&lt;/strong&gt;: Checked that we retrieved all 54 blocks of content with the proper nested structure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Code Node → Test&lt;/strong&gt;: Validated the HTML transformation, checking for clean output without Craft tags&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Ghost Publish Node → Test&lt;/strong&gt;: Ensured the post was created as a draft with all content intact&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Response Node → Test&lt;/strong&gt;: Confirmed the workflow returned post details back to Claude&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Why This Mattered&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Each test revealed issues that would have been much harder to debug in a complete workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The search node helped us understand Craft returns multiple matches (we needed the first result)&lt;/li&gt;
&lt;li&gt;The fetch node showed us the nested structure (parent document → edition page → content blocks)&lt;/li&gt;
&lt;li&gt;The code node iterations caught formatting issues (&lt;code&gt;&amp;lt;callout&amp;gt;&lt;/code&gt; tags, &lt;code&gt;##&lt;/code&gt; symbols, &lt;code&gt;&amp;lt;highlight&amp;gt;&lt;/code&gt; tags)&lt;/li&gt;
&lt;li&gt;The Ghost publish node revealed we needed the &lt;code&gt;?source=html&lt;/code&gt; query parameter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By testing at each step, we could pinpoint exactly where problems occurred. When something didn&amp;rsquo;t work, we knew it was the node we just added, not some mysterious interaction between distant parts of the workflow.&lt;/p&gt;
&lt;p&gt;This incremental approach turned what could have been hours of debugging into a smooth building process. Each successful test gave us confidence to move forward, and each failure was easy to isolate and fix.&lt;/p&gt;
&lt;h3 id=&#34;milestone-2-building-the-html-transformer&#34;&gt;Milestone 2: Building the HTML Transformer&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt;: Craft uses its own markdown dialect with special tags like &lt;code&gt;&amp;lt;callout&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;highlight color=&amp;quot;blue&amp;quot;&amp;gt;&lt;/code&gt;, and markdown headers in text blocks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we built&lt;/strong&gt;: A comprehensive JavaScript transformation engine that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removes Craft-specific tags (&lt;code&gt;&amp;lt;callout&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;highlight&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Converts markdown formatting (bold, italic, links, code)&lt;/li&gt;
&lt;li&gt;Processes different block types (text, headers, quotes, code, images, videos)&lt;/li&gt;
&lt;li&gt;Handles rich URL blocks (YouTube embeds)&lt;/li&gt;
&lt;li&gt;Preserves anchor links for internal navigation&lt;/li&gt;
&lt;li&gt;Generates proper HTML for Ghost&amp;rsquo;s Lexical editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Key functions&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;markdownToHtml()&lt;/code&gt; - Converts inline markdown to HTML&lt;/li&gt;
&lt;li&gt;&lt;code&gt;processBlock()&lt;/code&gt; - Handles each block type (text, image, richUrl, code, line, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;milestone-3-testing-and-validation&#34;&gt;Milestone 3: Testing and Validation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Process&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test with real content (Edition 2025-52 with 54 blocks)&lt;/li&gt;
&lt;li&gt;Verify HTML output in Ghost&amp;rsquo;s editor&lt;/li&gt;
&lt;li&gt;Check for Craft formatting artifacts&lt;/li&gt;
&lt;li&gt;Confirm all sections, videos, quotes, and images are preserved&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Quality Checks&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ No &lt;code&gt;&amp;lt;callout&amp;gt;&lt;/code&gt; tags&lt;/li&gt;
&lt;li&gt;✅ No &lt;code&gt;&amp;lt;highlight&amp;gt;&lt;/code&gt; tags&lt;/li&gt;
&lt;li&gt;✅ No &lt;code&gt;##&lt;/code&gt; symbols in headers&lt;/li&gt;
&lt;li&gt;✅ All YouTube videos embedded correctly&lt;/li&gt;
&lt;li&gt;✅ Blockquotes formatted properly&lt;/li&gt;
&lt;li&gt;✅ Images included&lt;/li&gt;
&lt;li&gt;✅ 9-minute reading time (17,000+ characters)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-final-workflow&#34;&gt;The Final Workflow&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Input&lt;/strong&gt;: &lt;code&gt;{&amp;quot;query&amp;quot;: &amp;quot;The Ephemeral Scrapbook — Edition 2025-52&amp;quot;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;: Draft post in Ghost with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complete HTML content&lt;/li&gt;
&lt;li&gt;All formatting preserved&lt;/li&gt;
&lt;li&gt;Clean structure&lt;/li&gt;
&lt;li&gt;Ready for manual review (add images, tags, excerpt)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Execution time&lt;/strong&gt;: ~3-4 seconds total&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Search: 1-2 seconds&lt;/li&gt;
&lt;li&gt;Fetch: 1-2 seconds&lt;/li&gt;
&lt;li&gt;Transform: 36-84ms&lt;/li&gt;
&lt;li&gt;Publish: 600-900ms&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-tools&#34;&gt;The Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Craft&lt;/strong&gt;: My writing environment with a powerful API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ghost&lt;/strong&gt;: My publishing platform with a robust Admin API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;n8n&lt;/strong&gt;: Workflow automation platform (self-hosted on DigitalOcean)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claude AI&lt;/strong&gt;: My pair-programming partner via MCP (Model Context Protocol)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-result&#34;&gt;The Result&lt;/h2&gt;
&lt;p&gt;The workflow is production-ready. My publishing workflow went from 20+ minutes of manual work through Craft, Ulysses, and Ghost to a single command:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Claude, publish Edition 2026-01 to Ghost&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And it just works. 🎉&lt;/p&gt;
</description>
      <source:markdown>For months, I&#39;ve been publishing my weekly newsletter, *The Ephemeral Scrapbook*, using a manual process: write in Craft, export to Ulysses, copy to Ghost, reformat everything, add images, fix formatting issues, and finally publish. It worked, but it was tedious and time-consuming.

Today, that process is fully automated. Here&#39;s how Claude and I built it together.

## The Challenge

My workflow had become a bottleneck:
- Writing newsletters in Craft Docs (my preferred writing environment)
- Exporting to Ulysses as an intermediary step
- Manual copy/paste to Ghost (my publishing platform)
- Reformatting all the markdown and HTML
- Dealing with Craft-specific formatting that Ghost didn&#39;t understand
- Adding metadata like excerpts and tags manually

I wanted automation, but I also wanted to understand the infrastructure I was building. That&#39;s where working with Claude became invaluable—not just executing commands, but learning and iterating together.

## The Solution: n8n Workflow Automation

We decided to build an n8n workflow that would:
1. Search for a document in Craft by title
2. Fetch all the content blocks
3. Transform Craft&#39;s markdown/blocks into clean HTML
4. Publish to Ghost as a draft
5. Return confirmation with the post URL

Simple in concept, complex in execution.

## The Journey: Key Milestones

### Milestone 1: Understanding the Architecture

**Challenge**: Should we use multiple workflows or one unified workflow?

**Decision**: One end-to-end workflow that handles everything from search to publish.

**Learning**: Simplicity wins. Rather than orchestrating multiple workflows, we built one cohesive pipeline that&#39;s easier to debug and maintain.

**Workflow nodes**:
- Webhook (trigger)
- HTTP Request (search Craft)
- HTTP Request (fetch document)
- Code (transform to HTML)
- HTTP Request (publish to Ghost)
- Respond to Webhook

### The Iterative Building Process

One of the most important decisions we made was to **build and test incrementally**. Rather than assembling the entire workflow at once and hoping it would work, we added one node at a time, testing after each addition.

**The Testing Cadence**:

1. **Add Webhook → Test**: Confirmed the webhook received the query parameter correctly
2. **Add Search Node → Test**: Verified we could find the document and get the correct document ID
3. **Add Fetch Node → Test**: Checked that we retrieved all 54 blocks of content with the proper nested structure
4. **Add Code Node → Test**: Validated the HTML transformation, checking for clean output without Craft tags
5. **Add Ghost Publish Node → Test**: Ensured the post was created as a draft with all content intact
6. **Add Response Node → Test**: Confirmed the workflow returned post details back to Claude

**Why This Mattered**:

Each test revealed issues that would have been much harder to debug in a complete workflow:
- The search node helped us understand Craft returns multiple matches (we needed the first result)
- The fetch node showed us the nested structure (parent document → edition page → content blocks)
- The code node iterations caught formatting issues (`&lt;callout&gt;` tags, `##` symbols, `&lt;highlight&gt;` tags)
- The Ghost publish node revealed we needed the `?source=html` query parameter

By testing at each step, we could pinpoint exactly where problems occurred. When something didn&#39;t work, we knew it was the node we just added, not some mysterious interaction between distant parts of the workflow.

This incremental approach turned what could have been hours of debugging into a smooth building process. Each successful test gave us confidence to move forward, and each failure was easy to isolate and fix.

### Milestone 2: Building the HTML Transformer

**Challenge**: Craft uses its own markdown dialect with special tags like `&lt;callout&gt;`, `&lt;highlight color=&#34;blue&#34;&gt;`, and markdown headers in text blocks.

**What we built**: A comprehensive JavaScript transformation engine that:
- Removes Craft-specific tags (`&lt;callout&gt;`, `&lt;highlight&gt;`)
- Converts markdown formatting (bold, italic, links, code)
- Processes different block types (text, headers, quotes, code, images, videos)
- Handles rich URL blocks (YouTube embeds)
- Preserves anchor links for internal navigation
- Generates proper HTML for Ghost&#39;s Lexical editor

**Key functions**:
- `markdownToHtml()` - Converts inline markdown to HTML
- `processBlock()` - Handles each block type (text, image, richUrl, code, line, etc.)

### Milestone 3: Testing and Validation

**The Process**:
- Test with real content (Edition 2025-52 with 54 blocks)
- Verify HTML output in Ghost&#39;s editor
- Check for Craft formatting artifacts
- Confirm all sections, videos, quotes, and images are preserved

**Quality Checks**:
- ✅ No `&lt;callout&gt;` tags
- ✅ No `&lt;highlight&gt;` tags  
- ✅ No `##` symbols in headers
- ✅ All YouTube videos embedded correctly
- ✅ Blockquotes formatted properly
- ✅ Images included
- ✅ 9-minute reading time (17,000+ characters)

## The Final Workflow

**Input**: `{&#34;query&#34;: &#34;The Ephemeral Scrapbook — Edition 2025-52&#34;}`

**Output**: Draft post in Ghost with:
- Complete HTML content
- All formatting preserved
- Clean structure
- Ready for manual review (add images, tags, excerpt)

**Execution time**: ~3-4 seconds total
- Search: 1-2 seconds
- Fetch: 1-2 seconds  
- Transform: 36-84ms
- Publish: 600-900ms

## The Tools

- **Craft**: My writing environment with a powerful API
- **Ghost**: My publishing platform with a robust Admin API
- **n8n**: Workflow automation platform (self-hosted on DigitalOcean)
- **Claude AI**: My pair-programming partner via MCP (Model Context Protocol)

## The Result

The workflow is production-ready. My publishing workflow went from 20+ minutes of manual work through Craft, Ulysses, and Ghost to a single command:

&gt; &#34;Claude, publish Edition 2026-01 to Ghost&#34;

And it just works. 🎉
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2025/12/29/heres-a-quick-demonstration-of.html</link>
      <pubDate>Mon, 29 Dec 2025 17:38:22 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2025/12/29/heres-a-quick-demonstration-of.html</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a quick demonstration of &lt;strong&gt;the Microblog Poster web app&lt;/strong&gt; I mentioned in my previous blog post.&lt;/p&gt;
&lt;p&gt;&lt;video controls=&#34;controls&#34; playsinline=&#34;playsinline&#34; preload=&#34;none&#34; width=&#34;1460&#34; height=&#34;1440&#34; poster=&#34;https://cdn.uploads.micro.blog/143495/2025/frames/1647718-0-95bfb6.jpg&#34; src=&#34;https://cdn.uploads.micro.mov/143495/2025/cleanshot-microblog-poster2025-12-2916.31.08/playlist.m3u8&#34;&gt;&lt;/video&gt;&lt;/p&gt;
</description>
      <source:markdown>Here&#39;s a quick demonstration of **the Microblog Poster web app** I mentioned in my previous blog post.


&lt;video controls=&#34;controls&#34; playsinline=&#34;playsinline&#34; preload=&#34;none&#34; width=&#34;1460&#34; height=&#34;1440&#34; poster=&#34;https://cdn.uploads.micro.blog/143495/2025/frames/1647718-0-95bfb6.jpg&#34; src=&#34;https://cdn.uploads.micro.mov/143495/2025/cleanshot-microblog-poster2025-12-2916.31.08/playlist.m3u8&#34;&gt;&lt;/video&gt;
</source:markdown>
    </item>
    
    <item>
      <title>Why I Built a Micro.blog Front End?</title>
      <link>https://meta.numericcitizen.me/2025/12/28/why-i-built-a-microblog.html</link>
      <pubDate>Sun, 28 Dec 2025 22:36:28 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2025/12/28/why-i-built-a-microblog.html</guid>
      <description>&lt;p&gt;As &lt;a href=&#34;https://blog.numericcitizen.me/2025/12/28/and-now-microblog-poster-web.html&#34;&gt;recently shared on my blog&lt;/a&gt;, I have finished (or mostly finished&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;) building a simple front end for Micro.blog. This front end, as depicted in the following screenshot, presents the user with a straightforward UI: a title field, a body field, blog post categories, and a Publish button—very focused, with no distractions. It works on desktops and mobile devices. I even added PWA support. But why did I build this?&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.numericcitizen.me/uploads/2025/cleanshot-microblog-poster2025-12-2820.08.362x.png&#34;
  alt=&#34;&#34;
  loading=&#34;lazy&#34;
  decoding=&#34;async&#34;&gt;
&lt;/p&gt;
&lt;p&gt;First, I wanted to dip my toes into &lt;a href=&#34;https://vercel.com&#34;&gt;Vercel&lt;/a&gt;. I’ve recently stumbled upon many posts about web apps built and deployed on Vercel by people claiming no programming experience. Most people were using Claude AI or Claude Code to describe their app and deploy it to Vercel. Some apps were impressively designed and functional. Yet, I thought it wasn’t that easy and required a lot of technical knowledge. I was intrigued. I was “mostly” wrong.&lt;/p&gt;
&lt;p&gt;I’ve been using Claude AI since mid-December, in conversational mode, for different tasks, including getting explanations on building apps on Vercel and other platforms. I’ve been looking for small project ideas since then. Building a simple front-end to Micro.blog quickly became the perfect test. Micro.blog offers a simple API for many things. Using Claude and the API documentation, I asked Claude AI whether it was possible to build a simple UI for posting on Micro.blog. Sure enough, it was. My initial prompt describing the envisioned app follows:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let’s build a web app hosted on Vercel that lets me to write blog posts for Micro.blog. The form will include only two text fields: a blog post title and the blog post text itself. Include a character count that will update as I type. Maximum of 5000 characters. The web page should include a title “Microblog Poster&amp;quot;, centered.&lt;/p&gt;
&lt;p&gt;Micro.blog supports Markdown, so the blog post text field should support it too.&lt;/p&gt;
&lt;p&gt;The authorization token should be stored in an environment variable named “microblog_token” which I will provide once the project is created on Vercel.&lt;/p&gt;
&lt;p&gt;I will use a GitHub repo, which should be named after the application name: “(redacted)” where the app will use the full URL: https://(redacted)&lt;/p&gt;
&lt;p&gt;Provided that Micro.blog supports draft posts as exposed in the Micro.blog APIs, a toggle named “Draft” should be on the web form and be off by default. When enabled, this means I can send the blog post to Micro.blog but with a draft status. Otherwise, the blog post is published.&lt;/p&gt;
&lt;p&gt;The initial state of the web app is to list all available blog post categories as a series of checkboxes, all off by default. You will need to retrieve possible blog post categories during the initialization phase. A blog post can have more than one category selected or none. This list of checkboxes should be left-aligned. The category list should be saved in the browser’s local storage and initialized on the first invocation of the web app.&lt;/p&gt;
&lt;p&gt;The form will contain a button “Publish” centered horizontally (like all the other UI elements, except the toggle underneath the Publish button which should be left aligned. Once clicked, if the post operation is successful, add a small banner (centered) telling me the operation was successful with an appropriate message.&lt;/p&gt;
&lt;p&gt;For a non-draft post, after hitting Publish, the form should display a clickable link to the blog post’s final URL. For the draft post, you should display the clickable link to the draft post instead.&lt;/p&gt;
&lt;p&gt;Images or any other attachments are not needed.&lt;/p&gt;
&lt;p&gt;You can look at micro.blog API documentation in the following URLs:&lt;/p&gt;
&lt;p&gt;For reading data from Micro.blog service: &lt;a href=&#34;https://help.micro.blog/t/json-api/97&#34;&gt;https://help.micro.blog/t/json-api/97&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For posting to Micro.blog service: &lt;a href=&#34;https://help.micro.blog/2017/api-posting/&#34;&gt;https://help.micro.blog/2017/api-posting/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a few hiccups and errors, it eventually worked. I had to install GitHub Desktop on My Mac as well as Visual Source Code, but I eventually realized Claude AI wasn’t optimal. I ultimately switched to Claude Code to iterate on the initial release. My experience was so much smoother. I do experience so weird issues with GitHub, but it seems without impacts on the deployment.&lt;/p&gt;
&lt;p&gt;So, building the app requires a GitHub repository for holding the source code. Vercel connects to my GitHub repo, and as soon as a new commit is made, a new app deployment happens; It’s all automatic. One important thing to know: a project environment variable&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; to hold the Micro.blog app token is needed before trying the app for the first time.&lt;/p&gt;
&lt;p&gt;My first try mainly worked as expected. I made sure to have a draft mode available in the UI so that I don’t mess up my timeline with test posts. Once the app is deployed and available for use, any modifications are made through prompting Claude Code on my local machine. Code changes are pushed to GitHub on demand. It takes a few minutes for a new iteration to be available for testing.&lt;/p&gt;
&lt;p&gt;If you have any questions or comments, feel free to post them, and I’ll do my best to answer them to the best of my knowledge.&lt;/p&gt;
&lt;p&gt;One more thing: Vercel is free to use in my case because my app is relatively lightweight. Lastly, one benefit of building my app is that it will circumvent a design issue with Micro.blog’s post editor on the web: the title field and categories aren’t listed by default. I find this to be annoying. My app shows them. I’m happy with that.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Software is never finished!&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;It’s the most secure way to keep that token away from unauthorized eyes.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      <source:markdown>As [recently shared on my blog](https://blog.numericcitizen.me/2025/12/28/and-now-microblog-poster-web.html), I have finished (or mostly finished[^1]) building a simple front end for Micro.blog. This front end, as depicted in the following screenshot, presents the user with a straightforward UI: a title field, a body field, blog post categories, and a Publish button—very focused, with no distractions. It works on desktops and mobile devices. I even added PWA support. But why did I build this?

![](https://blog.numericcitizen.me/uploads/2025/cleanshot-microblog-poster2025-12-2820.08.362x.png)

First, I wanted to dip my toes into [Vercel](https://vercel.com). I’ve recently stumbled upon many posts about web apps built and deployed on Vercel by people claiming no programming experience. Most people were using Claude AI or Claude Code to describe their app and deploy it to Vercel. Some apps were impressively designed and functional. Yet, I thought it wasn’t that easy and required a lot of technical knowledge. I was intrigued. I was “mostly” wrong. 

I’ve been using Claude AI since mid-December, in conversational mode, for different tasks, including getting explanations on building apps on Vercel and other platforms. I’ve been looking for small project ideas since then. Building a simple front-end to Micro.blog quickly became the perfect test. Micro.blog offers a simple API for many things. Using Claude and the API documentation, I asked Claude AI whether it was possible to build a simple UI for posting on Micro.blog. Sure enough, it was. My initial prompt describing the envisioned app follows:

&gt; Let’s build a web app hosted on Vercel that lets me to write blog posts for Micro.blog. The form will include only two text fields: a blog post title and the blog post text itself. Include a character count that will update as I type. Maximum of 5000 characters. The web page should include a title “Microblog Poster&#34;, centered. 
&gt; 
&gt; Micro.blog supports Markdown, so the blog post text field should support it too.
&gt; 
&gt; The authorization token should be stored in an environment variable named “microblog\_token” which I will provide once the project is created on Vercel.
&gt; 
&gt; I will use a GitHub repo, which should be named after the application name: “(redacted)” where the app will use the full URL: https://(redacted) 
&gt; 
&gt; Provided that Micro.blog supports draft posts as exposed in the Micro.blog APIs, a toggle named “Draft” should be on the web form and be off by default. When enabled, this means I can send the blog post to Micro.blog but with a draft status. Otherwise, the blog post is published.
&gt; 
&gt; The initial state of the web app is to list all available blog post categories as a series of checkboxes, all off by default. You will need to retrieve possible blog post categories during the initialization phase. A blog post can have more than one category selected or none. This list of checkboxes should be left-aligned. The category list should be saved in the browser’s local storage and initialized on the first invocation of the web app.
&gt; 
&gt; The form will contain a button “Publish” centered horizontally (like all the other UI elements, except the toggle underneath the Publish button which should be left aligned. Once clicked, if the post operation is successful, add a small banner (centered) telling me the operation was successful with an appropriate message. 
&gt; 
&gt; For a non-draft post, after hitting Publish, the form should display a clickable link to the blog post’s final URL. For the draft post, you should display the clickable link to the draft post instead.
&gt; 
&gt; Images or any other attachments are not needed. 
&gt; 
&gt; You can look at micro.blog API documentation in the following URLs: 
&gt; 
&gt; For reading data from Micro.blog service: [https://help.micro.blog/t/json-api/97](https://help.micro.blog/t/json-api/97)
&gt; 
&gt; For posting to Micro.blog service: [https://help.micro.blog/2017/api-posting/](https://help.micro.blog/2017/api-posting/)

After a few hiccups and errors, it eventually worked. I had to install GitHub Desktop on My Mac as well as Visual Source Code, but I eventually realized Claude AI wasn’t optimal. I ultimately switched to Claude Code to iterate on the initial release. My experience was so much smoother. I do experience so weird issues with GitHub, but it seems without impacts on the deployment. 

So, building the app requires a GitHub repository for holding the source code. Vercel connects to my GitHub repo, and as soon as a new commit is made, a new app deployment happens; It’s all automatic. One important thing to know: a project environment variable[^2] to hold the Micro.blog app token is needed before trying the app for the first time.

My first try mainly worked as expected. I made sure to have a draft mode available in the UI so that I don’t mess up my timeline with test posts. Once the app is deployed and available for use, any modifications are made through prompting Claude Code on my local machine. Code changes are pushed to GitHub on demand. It takes a few minutes for a new iteration to be available for testing.

If you have any questions or comments, feel free to post them, and I’ll do my best to answer them to the best of my knowledge. 

One more thing: Vercel is free to use in my case because my app is relatively lightweight. Lastly, one benefit of building my app is that it will circumvent a design issue with Micro.blog’s post editor on the web: the title field and categories aren’t listed by default. I find this to be annoying. My app shows them. I’m happy with that. 


[^1]:	Software is never finished!

[^2]:	It’s the most secure way to keep that token away from unauthorized eyes.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://meta.numericcitizen.me/2025/12/19/enabled-the-rss-feed-in.html</link>
      <pubDate>Fri, 19 Dec 2025 21:30:10 -0400</pubDate>
      
      <guid>http://numericcitizen-meta.micro.blog/2025/12/19/enabled-the-rss-feed-in.html</guid>
      <description>&lt;p&gt;Enabled the &lt;a href=&#34;https://whois.numericcitizen.me/news/feed.xml&#34;&gt;RSS feed&lt;/a&gt; in the News section of &amp;ldquo;&lt;a href=&#34;https://whois.numericcitizen.me&#34;&gt;Who is Numeric Citizen&lt;/a&gt;&amp;rdquo; website.&lt;/p&gt;
</description>
      <source:markdown>Enabled the [RSS feed](https://whois.numericcitizen.me/news/feed.xml) in the News section of &#34;[Who is Numeric Citizen](https://whois.numericcitizen.me)&#34; website. 
</source:markdown>
    </item>
    
  </channel>
</rss>
