LinkedOut was built to help manage hectic LinkedIn inboxes on mobile and desktop. It includes AI draft replies and static text snippets library, making it a nimble assistant without being ChatGPT. Front-end built with Next.js, TypeScript, and Tailwind CSS. Backend runs on n8n and PocketBase. Clone it, tweak it, make it yours.
- AI-powered message drafts
- Responsive design for mobile and desktop
- Beautiful UI with dark mode support
- Secure authentication
- Setup wizard to deploy backend and set up database
- Open source: Self-host it, fork it.
- Emoji reactions will not show
- Group threads do not show (only Classic LinkedIN inbox, no Sales navigator either). Should be easy to tweak.
- Draft reply only takes previous message (and name) as context.
- Text Snippets can be Created/ Updated / Deleted via PocketBase, not yet in-app.
- Manual setup route not documented yet (working on it)
- Setup flow does not configure AI model nodes in n8n workflow (WIP)
- Framework: Next.js (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: shadcn/ui
- Authentication: Custom auth with JWT
- Database & Auth: PocketBase
- Workflows as Backend: n8n via webhook endpoints, and n8n api for /setup
- LinkedIn API Access: Unipile
- Node.js 18+
- npm or yarn
- PocketBase instance
- n8n instance for automation workflows. Get 50% off n8n cloud for 12 months with MAX50. Enter coupon after free trial when choosing a plan.
- A Unipile account for LinkedIn API access. Get 50% off Unipile for 3 months with MAXFROMN8N code (message support with code after sign up)
Watch a set up video on YouTube.
- Set up the one-click LinkedOut + PocketBase template on CloudStation: CloudStation LinkedOut Template. You'll need an n8n instance ready by this step.
- Open LinkedOut front end from CloudStation dashboard and sign in with PocketBase superuser credentials (see them in PocketBase deployment env variables in CloudStation dashboard)
- Complete the setup wizard (go to /setup if you get redirected to /inbox)
- Open your n8n workflows and replace any AI model steps with your own (not yet part of setup flow).
-
Set up n8n
- Create a Unipile [LinkedIn API] Header credential with your Unipile API key
- Import the following workflows from the GitHub repository:
/inbox backend [linkedout]
/thread backend [linkedout]
New message ingress [linkedout]
/setup backend [linkedout]
(optional)
- Update all placeholder values in the workflows:
****POCKETBASE_BASE_URL****
: Your PocketBase URL****POCKETBASE_SERVICE_USER_EMAIL****
: Service account email****POCKETBASE_SERVICE_USER_PASSWORD****
: Service account password****UNIPILE_ACCOUNT_ID****
: Your Unipile account ID****UNIPILE_DSN****
: Your Unipile DSN
-
Set up PocketBase
- Create the following collections:
users
(with auth enabled)threads
messages
text_snippets
- Create a service account with email
[email protected]
(or update workflows with your preferred email) - Set a secure password for the service account (and update workflows accordingly)
- Create the following collections:
-
Deploy the Frontend
- Clone the repository:
git clone https://github.com/maxt-n8n/linkedout.git
- Install dependencies:
npm install
oryarn install
- Set environment variables:
NEXT_PUBLIC_POCKETBASE_URL
: Your PocketBase URLNEXT_PUBLIC_N8N_WEBHOOK_URL
: Your n8n webhook URL
- Build and start the application:
- Development:
npm run dev
oryarn dev
- Production:
npm run build && npm start
oryarn build && yarn start
- Development:
- Clone the repository:
Note: Do not include trailing slashes in URL environment variables.
Variable | Description | Required |
---|---|---|
NEXT_PUBLIC_N8N_WEBHOOK_URL |
N8N URL (without /webhook) | Yes |
NEXT_PUBLIC_POCKETBASE_URL |
PocketBase URL | Yes |
Note: do not include '/' trailing slash in URL env variables. It will break things (WIP to filter that out). |
Post an issue to discuss merging in a change. We'll open it up for more streamlined contributions if there's interest.