ProfileCrest Developer Blog โ€” Content Syndication & RSS
RSS & SYNDICATION June 24, 2026 8 min read CodeCrest Engineering Team

How to Embed Your Latest Blog Posts and Articles into GitHub Profile README

Showcase your technical writing without manually updating your GitHub profile every time you publish. Learn how to automatically sync posts from Substack, Medium, Dev.to, Hashnode, or a custom Next.js blog using GitHub Actions and RSS feeds.

1. Finding Your Blogโ€™s Native RSS Endpoint

Almost every modern publishing platform provides a public RSS feed URL that outputs standardized XML data. You do not need any special API keys:

PlatformFeed URL FormatExample
Substackhttps://[subdomain].substack.com/feedhttps://pragmaticengineer.substack.com/feed
Mediumhttps://medium.com/feed/@[username]https://medium.com/feed/@torvalds
Dev.tohttps://dev.to/feed/[username]https://dev.to/feed/thepracticaldev
Hashnodehttps://[domain]/rss.xmlhttps://engineering.hashnode.dev/rss.xml
Ghost / WPhttps://[domain]/rss or /feedhttps://blog.cloudflare.com/rss

2. Step-by-Step GitHub Actions Workflow

Create a new workflow file at .github/workflows/blog-sync.yml inside your username/username repository:

name: Sync Blog Posts to Readme

on:
  schedule:
    - cron: '0 0 * * *' # Executes daily at midnight UTC
  workflow_dispatch: # Allows manual trigger from Actions tab

permissions:
  contents: write # Grants GITHUB_TOKEN write access to commit changes

jobs:
  sync-posts:
    name: Pull RSS and Update Markdown
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Fetch RSS Feeds
        uses: gautamkrishnar/blog-post-workflow@v1
        with:
          feed_list: "https://yournewsletter.substack.com/feed, https://dev.to/feed/yourhandle"
          max_post_count: 5
          date_format: "mmm d, yyyy"
          template: "$newline- ๐Ÿ“„ [$title]($url) - *$date*"

3. Markdown Markers & Custom Template Tokens

Inside your README.md, place the opening and closing HTML comment tags:

### โœ๏ธ Latest Articles & Technical Deep Dives

<!-- BLOG-POST-LIST:START -->
<!-- BLOG-POST-LIST:END -->

The template parameter supports powerful interpolation tokens to customize the generated Markdown output:

  • $title: The sanitized title of the blog post.
  • $url: The direct canonical link to the article.
  • $date: Formatted publication date according to date_format.
  • $description: Short summary or excerpt of the article.
  • $newline: Inserts a newline break between feed items.

4. Troubleshooting Common Sync Failures

Cloudflare WAF / 403 Forbidden:

If your personal custom blog is protected by Cloudflare Under Attack mode or strict WAF bot challenges, GitHub Action runner IPs may be blocked. Add a custom user-agent in the action config (user_agent: "Mozilla/5.0 ProfileSyncBot") or whitelist GitHub Action IP blocks.

Empty / Blank Section:

Ensure there are no spaces or typographical errors in your comment markers. The workflow matches the exact regex <!-- BLOG-POST-LIST:START -->.

Generate Full-Featured Profiles with ProfileCrest

Use ProfileCrest to combine blog syndication, tech stack badges, and contribution stats into a cohesive layout.

๐Ÿš€ Launch ProfileCrest Generator
Previous: GitHub Actions GuideNext: Sponsors & Donation Buttons