DEV Community

Egor Karpovich
Egor Karpovich

Posted on

Why I Open-Sourced My LinkedIn AI Assistant

I built an AI-powered LinkedIn comment assistant as a SaaS product. Then I gave it all away for free. Here's why — and how it works under the hood.

What is LiPilot?

LiPilot is a Chrome extension that helps you write better LinkedIn comments, replies, and DMs using AI. It sits right inside your LinkedIn feed, reads the context of a post (including images), and suggests a thoughtful comment in your voice — not generic ChatGPT-speak.

You pick your LLM provider (OpenAI, Anthropic, Gemini, or even a local Ollama instance), plug in your API key, and you're set. No account creation. No subscription. No server in between.

Why I Went From Commercial to Open-Source

I originally built LiPilot as a paid tool. The plan was straightforward: freemium Chrome extension, usage-based pricing, the usual SaaS playbook.

But as I used it myself and watched others interact with similar tools, something felt off. Most AI writing assistants for LinkedIn are black boxes — your data flows through someone else's server, your writing patterns get stored who-knows-where, and you're paying a monthly fee for what is essentially an API call wrapper.

I'm a co-founder of Travel Code, an AI-powered corporate travel platform. That's my main business. LiPilot was a side project born out of a real need: I spend a lot of time on LinkedIn, and I wanted to engage more without it eating hours of my day.

So I made a decision: AI tools that help professionals communicate should be free and private. I open-sourced the entire thing under the MIT license.

No catch. No "open core" with paid features. The full product.

Technical Overview

LiPilot is a standard Chrome Extension v3 (Manifest V3) built with:

  • React 18 for the UI
  • Vite for builds
  • Tailwind CSS for styling
  • TypeScript throughout

The architecture is intentionally simple. There's no backend server. The extension injects a content script into LinkedIn pages, renders its UI via shadow DOM (to avoid CSS conflicts), and communicates directly with your chosen LLM provider's API from the browser.

User's Browser
├── Content Script (injected into linkedin.com)
│   ├── Post/comment context extraction
│   ├── Shadow DOM UI overlay
│   └── Image analysis (multimodal)
├── Background Service Worker
│   ├── LLM API calls (OpenAI / Anthropic / Gemini / Ollama)
│   └── Voice profile storage (chrome.storage.local)
└── Options Page
    └── Provider config, voice settings, preferences
Enter fullscreen mode Exit fullscreen mode

All LLM calls go directly from the service worker to the provider API. Your API key stays in chrome.storage.local. Nothing routes through our servers because there are no servers.

Supporting multiple providers was a deliberate choice. If you want to use a local Ollama model for complete privacy, you can. If you prefer Claude or GPT-4, just swap the config. The prompt engineering layer is provider-agnostic.

How "Learn Your Voice" Works

This is the feature I'm most proud of. Most AI writing tools produce output that sounds like... an AI writing tool. LiPilot learns how you actually communicate.

Here's the mechanism: every time LiPilot suggests a comment and you edit it before posting, the extension captures that delta. Over time, it builds a communication style profile — your preferred tone, sentence structure patterns, phrases you gravitate toward, and things you consistently remove.

This profile is stored entirely in chrome.storage.local and gets injected into the system prompt when generating suggestions. The result: after a week or two of use, suggestions start sounding like you wrote them, not like a language model did.

No training data leaves your machine. The profile never hits a server. It's your voice, kept private.

Key Features

Beyond basic comment generation, LiPilot packs a few things I haven't seen in other tools:

  • Multimodal awareness — If a post contains images, LiPilot analyzes them via the vision capabilities of your chosen model. It won't suggest "Great post!" on an infographic it can't see.

  • Thread-aware replies — When replying to a comment within a thread, the extension captures the full conversation context, not just the top-level post.

  • DM co-pilot — Works in LinkedIn messaging too. Suggests responses based on conversation history.

  • Comment scoring — Before you post, LiPilot scores your comment on relevance and engagement potential. Useful for catching low-effort responses.

  • Service offer integration — If you configure your professional services, LiPilot can naturally weave relevant context into comments where appropriate (without being spammy — it scores for that too).

Privacy First

Let me be explicit about what LiPilot does not do:

  • ❌ No account required
  • ❌ No analytics or tracking
  • ❌ No data collection
  • ❌ No server-side processing
  • ❌ No cookies or fingerprinting

Your LinkedIn content, your API keys, your voice profile — everything stays in your browser's local storage. The source code is MIT-licensed and fully auditable. If you don't trust me, read the code. That's the point.

Install in 2 Minutes

git clone https://github.com/egorceo/lipilot.git
cd lipilot
npm install
npm run build
Enter fullscreen mode Exit fullscreen mode

Then in Chrome:

  1. Navigate to chrome://extensions
  2. Enable "Developer mode"
  3. Click "Load unpacked"
  4. Select the dist folder

Open LinkedIn, and you'll see LiPilot's UI appear on posts. Configure your LLM provider in the extension options, and you're ready to go.

What's Next

LiPilot is fully functional today, but there's plenty of room to grow. Some things on my radar:

  • Firefox support
  • More granular voice profile controls
  • Export/import of voice profiles
  • Better Ollama model recommendations for local use

Contributions are very welcome. It's a clean React + TypeScript codebase — easy to jump into.

Try It Out

If you find it useful, star the repo. If you find a bug, open an issue. If you have ideas, PRs are open.

I'd especially love feedback from folks who are active on LinkedIn and have opinions about AI-assisted writing. What feels helpful vs. what feels fake? That's the line I'm trying to walk.


I'm Egor Karpovich, co-founder of Travel Code. LiPilot is a side project supported by Travel Code. Hit me up on GitHub or LinkedIn if you want to chat about it.

Top comments (0)