Skip to content
moaljumaa/linki (opens in a new tab)

A genuinely useful self-hosted AI outreach tool held back by sparse documentation and no clear way to verify it works before committing.

TypeScript★ 481 open issuesOther
Overall score: 72 out of 100
Holding

last scored 2026-06-09

The rubric

  • First Glance

    82

    Clear positioning, compelling feature list, but the value prop assumes you already know what an 'AI SDR' means.

    The README immediately explains what Linki is (open-source AI SDR), who it's for (B2B founders), and why it matters (no per-seat pricing, self-hosted, data stays private). The feature breakdown and demo link are prominent. However, the README doesn't explain what an 'SDR' is or why someone should care about 'AI agent writing messages'—it assumes familiarity with the sales motion and risk tolerance around AI-generated outreach.

  • Onboarding Runway

    78

    Fast path to running the app, but missing prerequisites and deployment reality checks.

    Docker setup is clear: `cp .env.example .env.local`, fill three fields, `docker compose up -d`—under 2 minutes. Manual Node.js path is also documented. The .env.local comments are helpful. However, the snapshot shows no .env.example file, meaning a newcomer copying that command will fail. The README also doesn't mention that LinkedIn authentication requires a browser with cookies (a material prerequisite) until step 2, and doesn't clarify whether Apollo, email accounts, or a LinkedIn Sales Navigator subscription are actually mandatory to test the core product.

  • Core Payoff

    65

    The payoff is real but obscured by a 7-step setup gauntlet and no quickstart path to see it work.

    The core promise is 'build campaigns and AI writes messages for each lead.' Steps 1–7 in the README show the intended path. But there's no minimal example: a first-timer can't import test leads and generate one AI message without setting up LinkedIn auth, email accounts, Apollo enrichment, and an OpenRouter API key. The YouTube demo exists but is not called out as the critical accelerator it should be. A 'get it running in 5 minutes with dummy data' path would close this gap.

  • Trust Signals

    61

    Substantial code, but no tests, no example config, and no public issue/PR activity visible.

    The codebase is large (TypeScript, Next.js, multiple integrations), suggesting real work. A hosted deployment option (Opsily) adds credibility. However, no test files are visible in the snapshot, no CONTRIBUTING.md, no example .env or sample campaign export, and the single open issue doesn't tell us if maintainers respond quickly. The '48 stars' and 'last pushed 2026-05-21' (future date, likely a clock error in the snapshot) don't convey ongoing health clearly.

  • Friction Feel

    71

    Functional but with rough edges: missing .env.example, confusing email/LinkedIn as optional, and no error recovery docs.

    The .env.example file is referenced in the README but not visible in the snapshot, breaking the first Docker command. The setup steps list email and Apollo as 'optional' but don't clarify that running a campaign without them means no outreach—confusing for newcomers. There's no troubleshooting guide for common failures (e.g., 'LinkedIn auth failed,' 'SMTP connection timeout'). The LICENSE type is 'Other,' which doesn't inspire confidence; it's actually a sustainable-use license, but that barrier is not explained upfront.

  • Signs of Life

    68

    Project shows activity (recent push, hosted offering, homepage) but commit frequency and maintainer responsiveness are unclear.

    The repository has a homepage, Docker deployment path, and a hosted partner (Opsily), all signs of active stewardship. The last push timestamp is listed as 2026-05-21 (likely a data error), so recency can't be verified from the snapshot. Only 1 open issue is visible, which could mean either rapid resolution or dormancy; PR response time and issue comment velocity are not evident. No changelog or release notes are present to show iteration.

Where the grip slips

  1. highCore Payoff+18 pts if fixed

    No quickstart path to see core payoff (AI message generation) without full setup

    To generate a single AI message, users must add a LinkedIn account, authenticate with cookies, set up an email account, configure OpenRouter, and optionally enrich leads—7 mandatory or semi-mandatory steps. There is no way to test the AI agent on demo data without these integrations, meaning a skeptical newcomer can't verify the core promise works before investing time in setup.

    Fix: Add a 'Test Drive' or 'Demo Mode' that pre-loads 2–3 sample leads and lets users generate AI messages against a free or trial OpenRouter key (or hardcoded responses) without authentication. Call this out prominently in the README above the full setup section. Alternatively, provide a standalone script to generate one message given a sample lead JSON and OpenRouter key.

  2. highOnboarding Runway+15 pts if fixed

    Missing .env.example file breaks first Docker command

    The README instructs users to `cp .env.example .env.local`, but the snapshot does not show this file. A newcomer following the Docker setup will immediately fail with 'No such file or directory,' defeating the entire one-click path before they can even see what the app does.

    Fix: Create and commit .env.example with placeholder values for NEXTAUTH_URL, NEXTAUTH_SECRET, and AUTH_PASSWORD. Include comments explaining what each field does and how to generate secure values.

  3. mediumTrust Signals+12 pts if fixed

    No tests or testing documentation visible

    No test files (.test.ts, .spec.ts, or /tests directory) are visible in the snapshot. For a tool that integrates with LinkedIn, email, and AI APIs—all failure-prone—the absence of tests signals both higher risk to users and lower confidence in the maintainers' ability to catch breaking changes.

    Fix: Add a test suite for core modules: agent prompt generation, email sending, and list import parsing. Include a /tests directory with at least smoke tests for the main API routes. Document how to run tests in README.

  4. mediumOnboarding Runway+10 pts if fixed

    Missing or unclear prerequisites make setup path deceptive

    The README lists 'email accounts (optional)' and 'Apollo (optional)' but doesn't clarify that you cannot actually run an outreach campaign without either a LinkedIn account or email account set up. A newcomer may complete steps 1–6 thinking they're ready, then discover at step 7 that they cannot build a campaign without at least one channel configured.

    Fix: Restructure the setup section: clearly mark 'Required' (LinkedIn OR email account, OpenRouter API) and 'Optional' (Apollo, secondary email accounts). Add a note: 'You need at least one outreach channel (LinkedIn or email) to create a campaign.'

  5. mediumFriction Feel+8 pts if fixed

    No troubleshooting guide for common setup failures

    LinkedIn authentication can fail for many reasons (cookies expired, MFA, bot detection). Email SMTP/IMAP can fail (wrong credentials, port, TLS). Newcomers will hit these; without a troubleshooting section, they'll assume the tool is broken and abandon it.

    Fix: Add a Troubleshooting section to README covering: 'LinkedIn auth fails,' 'Email test fails,' 'AI agent returns errors,' 'Docker container won't start.' Include one-line checks (e.g., 'Verify NEXTAUTH_URL matches your actual URL' or 'Check SMTP port is open').

  6. lowTrust Signals+6 pts if fixed

    Confusing LICENSE type and terms not explained in README

    The repository lists license as 'Other' with a custom 'Linki Sustainable Use License.' The README mentions users 'can use it personally, use it for your business, self-host it' but doesn't link to the LICENSE file or explain what sustainable-use means. A cautious newcomer (especially in a company) will hesitate without clear commercial rights.

    Fix: Add a 'License' section to README with one sentence explaining: 'Linki is open-source and available for personal use and self-hosting under the Sustainable Use License; see [LICENSE](LICENSE) for full terms.' Link directly to the LICENSE file.

  7. lowCore Payoff+5 pts if fixed

    No example campaign or export to show what success looks like

    There's no example workflow, campaign, or sample data output in the repository. A newcomer can't look at a screenshot or a JSON dump of a successful campaign to understand what 'building a workflow' actually entails.

    Fix: Add a /examples directory with a sample-campaign.json showing a complete workflow (LinkedIn connect → delay → message steps) and a sample-output.json showing what enriched lead data and AI-generated messages look like. Reference this in the README.

Show your score

Latch badge
[![Latch score](https://latch.fyi/api/badge/a91bede1-9e22-4668-9acd-eb73873291e7)](https://latch.fyi/moaljumaa/linki)

Share this analysis

https://latch.fyi/moaljumaa/linki

Fixed some issues? Re-analyze to measure your progress →

Copy the whole report

Grab the entire verdict in one go — a Markdown block for a README or an issue, plain text, or a prompt you can paste straight into an LLM.

Was this verdict fair?

One tap helps — or tell us more.