Pavle
Back to Work
LinkedInCreator ToolsChrome Extension

Ralfy, LinkedIn Tool for Content Creators

Founder & Design Engineer · 2025 to now

Built for content creators. Custom feed, AI comments, reply manager.

In short
  • 01

    Built for content creators on LinkedIn, not for SDRs running cold outreach.

  • 02

    Two surfaces, one workflow. Web app for back office, Chrome extension live on linkedin.com.

  • 03

    Zero auto post. AI drafts every comment, you submit every reply.

Ralfy is a LinkedIn tool for content creators. Two surfaces, one workflow. The web app is your back office. The Chrome extension lives on linkedin.com so you never have to switch tabs. Three core jobs: a custom feed of people you choose, AI assisted comments in your voice, and a reply manager for your own posts. Built solo as a 6 package monorepo with React + Vite, Express + Supabase, and dual model AI (OpenAI on Free, Anthropic Claude on Pro).

Context

A content creator's day on LinkedIn has three jobs. Keep a real feed of people worth following (the native feed is built for the algorithm, not your network). Write thoughtful comments on other creators' posts to build relationships and visibility. Reply to traction on your own posts without losing a full afternoon every time something hits. Most LinkedIn tools pick one of these jobs. Ralfy is built around all three.

Approach

Two surfaces, one workflow. The web app is the back office: add people by pasting their LinkedIn URL, manage replies on your own posts, browse comment history, edit intents, check analytics. The Chrome extension lives on linkedin.com so you act in the moment. Before AI generates anything, you pick an intent (3 defaults plus custom ones) and a length. A quality guardrail keeps output sounding like a creator, not a bot. Generated text always lands as a draft inside LinkedIn. You hit submit, not Ralfy. Stack: React 19 + Vite for the dashboard, Express + Supabase for the backend, a TypeScript LinkedIn client, OpenAI on Free, Anthropic Claude Haiku 4.5 on Pro. Backend on Railway, marketing site on Next.js 14 and Vercel. Built with Cursor and Claude Code.

How I worked

  1. 01 · Discover

    Talked to creators about their LinkedIn day. Three jobs surfaced. Custom feed, thoughtful comments, reply management when traction lands.

  2. 02 · Sketch

    Two surfaces decided early. Back office in a web app, real time work inside an extension on linkedin.com.

  3. 03 · Prototype

    Web app first. React 19, Vite, Supabase. Then the extension wrapped around the same backend with a TypeScript LinkedIn client.

  4. 04 · Ship

    Live at ralfy.app in waitlist mode. Creem.io payments wiring up. Dual model AI on Free and Pro.

  5. 05 · Iterate

    March 2026 LinkedIn obfuscation broke selectors. RSC selector recovery added in the same week.

Built solo by Pavle. Design, code, AI, deploy, one person, in public.

About

What I shipped

Design

Brand, web app UX, extension UI, marketing site, design system

Web app

Custom feed, reply manager, comment history, intent CRUD, analytics, admin config (React 19 + Vite + shadcn/ui + Zustand)

Chrome extension

AI Comment Generator + Intent Picker inline on LinkedIn, Feed Manager button, cookie sync, anti detection

Marketing site

Next.js 14 on Vercel, waitlist mode while Creem.io payments wire up

Backend

Express + Supabase, TypeScript LinkedIn client replacing the original Python service

AI

Dual model (OpenAI Free, Anthropic Pro), custom intents, free text override, content quality guardrail, separate prompt for reply manager

AI assisted coding

Cursor + Claude Code as the engineering multiplier across a 6 package monorepo. Architect and editor, not author.

Anti detection

6 detection layers + declarativeNetRequest rules + RSC selector recovery (March 2026 LinkedIn obfuscation)

Testing

Playwright E2E, Inbucket SMTP for email auth flows, unit + API tests, GitHub Actions smoke tests on every push

Data + ops

Taplio dataset (~2.78M posts, ~78K profiles), 11 Slack notifications across 7 channels, 6 cron jobs

Admin

84 dynamic config keys editable from /admin/system-config without redeploy

Solo ownership

Idea → design → engineering → deploy → support, single operator across the entire monorepo

Key decisions

Built for creators, not for funnels

Most LinkedIn AI tools target SDRs who want 500 cold outreach comments a day at any quality. Ralfy excludes that customer on purpose. The audience is content creators: people who post on their own, build a real network, and need engagement that sounds like them. Pricing tiers (Free 10 a day, Pro 50 a day), no bulk comment features, and a reply manager that only matters once you have inbound traction. Each choice enforces the positioning.

Two surfaces, one workflow

The web app is the back office: feed, reply manager, comment history, intents, analytics. The extension is the live surface on linkedin.com: AI Comment Generator, intent picker, Feed Manager button. Same prompt across both, different UI for different jobs. The extension never calls LinkedIn directly. It provides UI and syncs auth cookies to the backend.

Reply manager, traction without burnout

When a post hits and a hundred comments land, replying eats a full afternoon. Most LinkedIn tools ignore this entirely. Ralfy makes it a first class feature. My Posts shows every post that needs replies, generates AI drafts in your voice for each, and lets you Approve, Edit, Regenerate, or Dismiss per draft. You keep the final word. The 200 a month cap is calibrated to respect LinkedIn's own engagement signals.

Zero auto post, on purpose

Generated text lands in LinkedIn's own UI as a draft, never auto submitted. True for both comments on other people's posts and replies on your own. The submit button stays LinkedIn's, not Ralfy's. LinkedIn's March 2026 Depth Score penalizes generic AI comments at scale, so the constraint is also a positioning bet.

Architect, not author

One person across design, web app, extension, marketing site, backend, AI, anti detection, testing, deploy, and support. A 6 package monorepo with Cursor and Claude Code as the engineering multiplier. The work is editing fast, throwing out 80% of what comes back, and keeping a tight quality bar across every surface.
0

Auto posts. The submit button stays LinkedIn's, never Ralfy's. Even on the reply manager with a 200 a month cap.

How it fits together

Chrome extension

Lives on linkedin.com. AI Comment Generator above the comment box, intent picker, Feed Manager button. A background worker syncs auth cookies to the backend. The extension never calls LinkedIn directly.

Web app (React + Vite)

Back office workflow. Custom feed, reply manager for your own posts, comment history, intent editor, settings, analytics, admin config. Uses Zustand and shadcn/ui.

Backend (Express)

Handles auth, AI orchestration, intent and reply queues, feed ingestion. Talks to LinkedIn via a TypeScript client (with optional IPRoyal proxy) that replaced an earlier Python service.

Supabase

Postgres and auth. Stores user data, intents, feeds, sessions, reply queue, and 84 dynamic admin config keys.

AI providers

OpenAI on Free (10 a day) or Anthropic Claude Haiku 4.5 on Pro (50 a day). Same prompt for both comments and replies, with a quality guardrail to keep output sounding human.

Inside the product

Feeds and reading posts

Curate a feed of people you choose, then read their posts in a focused view without leaving Ralfy.

Feeds page in the Ralfy web app with multiple curated feeds
Feeds page
Inside a custom feed showing posts from people the user follows
Inside a custom feed (My leads)
Add People modal for tracking LinkedIn profiles by URL
Add People modal
Single post detail view with embedded LinkedIn video
Post detail with native video
Post detail with an inline comment composer at the bottom
Post with inline comment composer

AI commenting, intent picker, and drafts

Choose an intent and a length before AI generates anything, then approve or edit the draft before it touches LinkedIn.

Comment composer input with an AI sparkle trigger and character counter
Composer with AI trigger
Intent picker showing Custom, Insightful, Inquisitive, Supportive intents and Short / Medium / Long length tiers
Intent picker (3 defaults + length tier)
Generate Drafts button revealing the intent picker dropdown
Generate Drafts trigger
AI generated reply drafts shown alongside the original comments
AI reply drafts with original comments for context
More AI reply drafts with Approve, Edit, AI, Dismiss actions
More drafts further down the queue
Bulk actions toolbar with 3 selected, Approve, Regenerate, Reject
Bulk actions toolbar
Single AI draft card with Approve, Edit, AI, Dismiss buttons
Single AI Draft card
Reply queue mini panel showing 3 replies being processed
Reply Queue with live progress

Reply management

My Posts shows every post with unreplied comments so you can work through a traction spike without losing an afternoon.

My Posts page in the Ralfy web app showing posts with unreplied comments
My Posts (200/200 monthly cap visible)
Single post card with a new comments badge
Post card with new comments badge

Chrome extension on LinkedIn profiles and posts

The extension drops a Ralfy pill on profiles and a comment trigger on posts so you never leave LinkedIn to act.

LinkedIn profile with a Ralfy button injected next to the platform's own actions
1. Ralfy pill on a LinkedIn profile
LinkedIn profile with the Ralfy 'Add to feed' dropdown open
2. Click the pill, dropdown opens
Add to feed modal with checkboxes for existing feeds and a New Feed action
3. Add to feed modal close up
Single feed row with edit and delete actions
4. Inline edit and delete on each row
A LinkedIn post seen on the platform, the kind Ralfy targets for engagement
5. The kind of post Ralfy targets
Another LinkedIn post showing the platform's native UI
6. Another context shot
LinkedIn comment box with a small Ralfy icon injected on the right
7. Ralfy icon injected into the comment box
Choose tone dropdown open over the LinkedIn comment box
8. Choose tone with intent picker
AI generated comment text appearing in the LinkedIn comment box
9. Draft lands in LinkedIn's own input

Result

Unlimited

Custom feeds

0

Auto posts

1 person

Built by

Live at ralfy.app, in waitlist mode while Creem.io payments are wired up. Two surfaces (web app and Chrome extension), one workflow, shipped solo across design, web, extension, backend, AI, marketing site, and Playwright E2E. The category is loud about volume. Ralfy is the small, deliberate alternative for creators who care about engagement and visibility, not bulk output.

Reflection

What I'd do differently: lead with the three job workflow earlier. The loop of custom feed, AI commenting, and reply management is the real argument, and it lived in code for months before the marketing copy said so. Most LinkedIn tools pick one of those jobs and call it a day. The bet here is that creators care about all three.

Tech stack
React 19ViteExpressTypeScriptSupabaseTailwind CSSOpenAIAnthropicChrome APIs