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. Both share the same intents, comment history, and prompt guardrail. 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. First, keep a real feed of people worth following. The native LinkedIn feed is built for the algorithm, not for your network. Second, write thoughtful comments on other creators' posts so you build relationships and visibility. Third, reply to traction on your own posts without losing a full afternoon every time a post 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. You add people to a feed by pasting their LinkedIn URL, manage replies on your own posts, browse comment history, edit intents, and check analytics. The Chrome extension lives on linkedin.com so you can act in the moment. It adds an AI Comment Generator next to the comment box, an intent picker, and a Feed Manager button on profiles. Before AI generates anything, you pick an intent (3 defaults plus your own custom ones) and a length. The prompt has a quality guardrail so output sounds like a creator wrote it, 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 that replaced an earlier Python service, OpenAI on Free, and Anthropic Claude Haiku 4.5 on Pro. Backend on Railway. Marketing site on Next.js 14 and Vercel, in waitlist mode while Creem.io payments are wired up. 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 and growth marketers 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 to sound like them, not like a script. 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 audience.

Two surfaces, one workflow

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

Reply manager, traction without burnout

When a post hits and a hundred comments land, replying turns into a job that 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. It generates AI drafts in your voice for each comment, and lets you Approve, Edit, Regenerate, or Dismiss per draft. You keep the final word on every reply. 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

Design, web app, extension, marketing site, backend, AI, anti detection, Playwright E2E and SMTP testing, deploy, support. One person across a 6 package monorepo, with Cursor and Claude Code as the engineering multiplier. The work is not 'I let AI write everything.' It's 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 curation

Ralfy treats the feed as a list of people, not keywords. To add someone to a custom feed, you paste their LinkedIn URL. Each custom feed sits alongside a generic LinkedIn feed view. The curated ones are the daily driver.

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

Reading posts in your feed

Posts render in a focused view. Full text, native video, engagement counts, and a comment input that lives in the web app so you never switch tabs back to LinkedIn just to comment.

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 components

Before AI generates anything, you pick an intent (3 defaults plus your own custom ones) and a length. The AI sparkle in the comment input is the trigger. The dropdown is where you make the choice.

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

Reply management, the landing

My Posts is the back office for replies. Each post shows how many new comments need a reply. The 200 a month cap is calibrated to respect LinkedIn's Depth Score.

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

AI drafts in action

Ralfy generates a draft per pending comment, batched. Each draft sits next to the original comment for context. Approve, Edit, Regenerate, or Dismiss. Never auto posted.

AI generated reply drafts shown alongside the original comments
AI reply drafts with original comments for contextEach AI draft sits inside the original comment thread so you see what you're replying to before deciding. Approve, Edit, sparkle AI (regenerate), or Dismiss per draft.
More AI reply drafts with Approve, Edit, AI, Dismiss actions
More drafts further down the queueThe pattern stays consistent across the whole queue. Author headline, original comment, AI draft, four action verbs. The eye does not relearn the layout per row.

Reply UI moments

Bulk actions on multiple drafts at once (Approve, Regenerate, Reject). The single AI Draft card with its four action verbs. The Reply Queue mini panel that shows progress as approved replies ship one by one.

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

Chrome extension on LinkedIn profiles

Add people to your custom feed without leaving LinkedIn. The extension drops a Ralfy pill next to LinkedIn's own actions. Click it to open a feed picker. Create new feeds inline.

LinkedIn profile with a Ralfy button injected next to the platform's own actions
1. Ralfy pill on a LinkedIn profileOn any LinkedIn profile, the extension drops a Ralfy pill next to Connect, Message, and Visit my website. It respects LinkedIn's existing layout and does not take it over.
LinkedIn profile with the Ralfy 'Add to feed' dropdown open
2. Click the pill, dropdown opensClick the pill. An Add to feed dropdown shows every custom feed you have, with checkboxes. Multi select means one profile can land in multiple feeds at once.
Add to feed modal with checkboxes for existing feeds and a New Feed action
3. Add to feed modal close upA close up of the dropdown. The + New Feed action lets you create a feed inline. Feed creation never asks you to leave LinkedIn or switch tabs to the dashboard.
Single feed row with edit and delete actions
4. Inline edit and delete on each rowEach feed row supports inline edit and delete. Feed management lives where you use it, not behind a separate Settings page.

Chrome extension on LinkedIn posts

Draft a thoughtful comment without leaving the post. The extension drops a small Ralfy icon into LinkedIn's own comment box. Click it to open an intent picker. The generated text lands as a draft in LinkedIn's input field for you to edit before posting.

A LinkedIn post seen on the platform, the kind Ralfy targets for engagement
1. The kind of post Ralfy targetsA typical LinkedIn post worth engaging with. Long form content where a thoughtful comment matters more than 'great post!'.
Another LinkedIn post showing the platform's native UI
2. Another context shotA viral list post with high engagement. The kind of moment where a thoughtful, in voice comment stands out from low effort replies.
LinkedIn comment box with a small Ralfy icon injected on the right
3. Ralfy icon injected into the comment boxA small Ralfy icon appears alongside LinkedIn's native emoji and image actions. No takeover, no overlay. Just one extra trigger you opt into.
Choose tone dropdown open over the LinkedIn comment box
4. Choose tone with intent pickerClick the icon. A Choose tone dropdown opens with the same intents as the web app (Insightful, Inquisitive, Supportive, Thanks and engage, Funny absurd, Funny). The + New intent action lets you create one inline.
AI generated comment text appearing in the LinkedIn comment box
5. Draft lands in LinkedIn's own inputGenerated text fills LinkedIn's native comment input as a draft. You edit before posting. The submit button stays LinkedIn's, never Ralfy's. Zero auto post, by design.

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