<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andreas Häggström</title>
    <description>The latest articles on DEV Community by Andreas Häggström (@andreas_hggstrm_e36cf5f).</description>
    <link>https://dev.to/andreas_hggstrm_e36cf5f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3820549%2F429703b4-d7bd-489b-855c-3d0dcd118c4e.jpg</url>
      <title>DEV Community: Andreas Häggström</title>
      <link>https://dev.to/andreas_hggstrm_e36cf5f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andreas_hggstrm_e36cf5f"/>
    <language>en</language>
    <item>
      <title>I built a visual CMS that lives in your GitHub repo</title>
      <dc:creator>Andreas Häggström</dc:creator>
      <pubDate>Thu, 12 Mar 2026 14:34:18 +0000</pubDate>
      <link>https://dev.to/andreas_hggstrm_e36cf5f/i-built-a-visual-cms-that-lives-in-your-github-repo-286o</link>
      <guid>https://dev.to/andreas_hggstrm_e36cf5f/i-built-a-visual-cms-that-lives-in-your-github-repo-286o</guid>
      <description>&lt;p&gt;Every project I've worked on has the same problem.&lt;/p&gt;

&lt;p&gt;Someone needs to change a headline. Or fix a typo. Or update pricing copy. And because the content lives in JSON files or markdown in a repo, that someone is always me.&lt;/p&gt;

&lt;p&gt;It's a 30-second change that takes 15 minutes of context switching. Multiply that by every teammate, every project, every week — and it adds up.&lt;/p&gt;

&lt;p&gt;So I built something to fix it for myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I made
&lt;/h2&gt;

&lt;p&gt;It's called &lt;a href="https://skyblobs.com" rel="noopener noreferrer"&gt;SkyBlobs&lt;/a&gt;. You connect a GitHub repo, and it gives you a visual editor for your content files — JSON, YAML, markdown.&lt;/p&gt;

&lt;p&gt;You edit the text, see a live preview, and either save to a branch or open a PR. That's the whole thing. No database migration, no new API, no moving your content somewhere else. The files stay in your repo.&lt;/p&gt;

&lt;p&gt;I built it because I didn't want to set up Contentful or Sanity for projects that just have a few JSON files with copy in them. That felt like overkill. I just wanted a way to say "here's the editor, change what you need, I'll review the PR."&lt;/p&gt;

&lt;h2&gt;
  
  
  How I use it
&lt;/h2&gt;

&lt;p&gt;I hand the link to whoever needs to make content changes — a co-founder, a client, a marketing person. They log in with GitHub, see the files, edit what they need, and open a PR. I review it like any other code change.&lt;/p&gt;

&lt;p&gt;No more Slack messages asking me to change a button label.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boring details
&lt;/h2&gt;

&lt;p&gt;Built with Next.js (App Router), Clerk for auth, GitHub API for repo access. Hosted on Vercel. Nothing fancy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It's not a full CMS — there's no content modeling, no schemas, no workflows. It edits files that already exist in your repo.&lt;/li&gt;
&lt;li&gt;Live preview works best with Next.js and Vite projects right now.&lt;/li&gt;
&lt;li&gt;It's early. I'm the only one building it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it if you want
&lt;/h2&gt;

&lt;p&gt;It's free for one repo. No credit card, no trial expiry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://skyblobs.com" rel="noopener noreferrer"&gt;skyblobs.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've dealt with the same "can you just change this text" problem, I'd be curious to hear how you solved it. And if you try it, feedback is very welcome — I'm figuring out what to build next.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>github</category>
    </item>
  </channel>
</rss>
