Skip to main content

Changelog

Track our journey of continuous improvement. New features, bug fixes, and technical insights from our engineering team.

2025

Latest
v1.2.0
November 21, 2025
7 updates

Blog Cross-Posting Automation & RSS Feed

Automatically syndicate your blog content across multiple platforms including Dev.to, Medium, Hashnode, LinkedIn, and Hackernoon. Increase your reach and save time with automated cross-posting.

New Features

4

Multi-Platform Blog Cross-Posting

Automatically publish blog posts to Dev.to, Medium, Hashnode, LinkedIn, and Hackernoon with a single command. Includes canonical URL handling for SEO safety and platform-specific optimizations.

high

RSS Feed Generation

Dynamic RSS feed at /blog/rss.xml for automatic content syndication. Compatible with RSS readers and platform auto-import features like Dev.to.

medium

LinkedIn OAuth Integration

Professional network integration with OAuth 2.0 authentication. Share technical and business content with 900M+ professionals automatically.

high

Hackernoon Editorial Submission

Automated submission to Hackernoon's editorial review process. Reach 7M+ tech readers with high-quality technical content.

medium

Improvements

3

Selective Cross-Posting

Choose which platforms to publish to on a per-post basis using frontmatter configuration. Full control over content distribution.

medium

Dry-Run Testing Mode

Test cross-posting configuration without actually publishing. Preview what would be posted to each platform before going live.

low

Canonical URL Management

Automatic canonical URL setting on all cross-posted content to protect SEO rankings and establish original source.

high
Implementation Architecture

The blog cross-posting system consists of three main components:

1. RSS Feed Generation

  • Dynamic route at /blog/rss.xml using Next.js API routes
  • Real-time generation from database posts
  • RSS 2.0 standard with full content support
  • Caching for performance (1 hour)

2. Cross-Posting Automation Script

  • Platform-agnostic architecture with pluggable integrations
  • API clients for Dev.to, Medium, Hashnode, LinkedIn, and Hackernoon
  • OAuth 2.0 flow for LinkedIn authentication
  • Rate limiting and error handling
  • Markdown to platform-specific format conversion

3. Content Management

  • Frontmatter-based configuration
  • Selective platform targeting per post
  • Canonical URL tracking
  • Publication status monitoring

Key Features:

  • Write once, publish everywhere
  • SEO-safe with canonical URLs
  • Platform-specific optimizations (tag limits, formatting)
  • Dry-run testing mode
  • OAuth helper for LinkedIn setup

Tech Stack:

  • Next.js 15 for RSS feed
  • TypeScript for type safety
  • Prisma for database queries
  • Platform APIs: REST (Dev.to, Medium, Hackernoon, LinkedIn) and GraphQL (Hashnode)
  • OAuth 2.0 for LinkedIn authentication
v1.1.0
November 21, 2025
4 updates

Multi-Provider Authentication Support

Users can now sign in with multiple authentication providers using the same email address, making it easier to access your account from different platforms.

New Features

1

Multi-Provider Account Linking

You can now use multiple sign-in methods (Keycloak, Google, GitHub, etc.) with the same email address. Your accounts are automatically linked, giving you the flexibility to sign in however you prefer.

high

Improvements

2

Enhanced Authentication Flow

Improved the sign-in process with better error messages and smoother account linking. If you previously used one provider, you can now add others seamlessly.

medium

Better Error Handling

Clear, user-friendly error messages during authentication help you understand what's happening and how to resolve any issues.

medium

Bug Fixes

1

OAuthAccountNotLinked Error Resolved

Fixed the 'This email is already associated with another account' error that prevented users from signing in with different providers.

high
How We Built Multi-Provider Authentication

The Challenge

Many users wanted to sign in with different authentication providers (like Keycloak at work and Google on their phone) using the same email address. NextAuth.js blocks this by default for security reasons, showing an "OAuthAccountNotLinked" error.

The Solution

We implemented a comprehensive multi-provider authentication system:

1. Provider-Level Configuration: Enabled allowDangerousEmailAccountLinking at the provider level in NextAuth configuration

2. Custom Adapter Logic: Built a custom Prisma adapter that intelligently handles account linking:

  • Checks if a user exists by email
  • Links new provider accounts to existing users
  • Updates tokens and session data seamlessly

3. Enhanced Error Recovery: Added graceful error handling to recover from constraint violations and edge cases

Key Technical Implementation

KeycloakProvider({
  clientId: process.env.KEYCLOAK_CLIENT_ID,
  clientSecret: process.env.KEYCLOAK_CLIENT_SECRET,
  issuer: process.env.KEYCLOAK_ISSUER,
  allowDangerousEmailAccountLinking: true, // Critical setting
  profile: (profile, tokens) => {
    // Custom profile mapping
  }
})

Security Considerations

While "dangerous" in name, this feature is safe when:

  • Using trusted OAuth providers with email verification
  • Implementing proper adapter logic to prevent account takeover
  • Logging all account linking events for audit trails

What We Learned

  • NextAuth v4 requires allowDangerousEmailAccountLinking at the provider level, not globally
  • Custom adapters need comprehensive error handling for database constraints
  • Detailed logging is crucial for debugging authentication flows
  • TypeScript type assertions (as any) can be necessary to preserve runtime config properties

Impact

Users can now:

  • ✅ Sign in with multiple providers using one email
  • ✅ Switch between providers seamlessly
  • ✅ Maintain one account with all their data intact

Stay Updated

Want to be notified about new features and updates? Follow our blog for in-depth technical articles and implementation details.

Visit Our Blog