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

Ambitious automation tool with solid onboarding, but trust gaps and immature release cadence make a first-timer hesitate.

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

last scored 2026-06-09

The rubric

  • First Glance

    82

    Clear value prop and demo upfront; knows exactly what it is and who it's for.

    The README leads with a crisp one-liner (AI SDR for B2B, self-hosted, no per-seat pricing), a YouTube demo link, and a hero image. The feature list is thorough and shows real specificity (63% improvement in connection reliability, 3-layer prompt hierarchy). A first-timer gets the premise instantly and sees it's not vaporware.

  • Onboarding Runway

    78

    Docker and Node.js paths are clear; environment setup is straightforward but requires external API keys.

    The README gives three clean options: Opsily one-click, Docker compose, or Node.js. The .env.example is populated with helpful comments, and docker-compose.yml is simple. However, a first-timer hitting 'npm run build' requires Node 22+, and the actual payoff (building a campaign) demands LinkedIn Sales Navigator, OpenRouter API key, optional Apollo key, and SMTP/IMAP accounts—each is a separate login/config step.

  • Core Payoff

    65

    The core feature (build and launch AI-driven outreach campaigns) is buried under 7 mandatory setup steps plus external integrations.

    Steps 1–5 must be completed before touching a campaign: LinkedIn account, authentication, email setup, AI config, Apollo enrich. Step 6 requires a LinkedIn Sales Navigator subscription to import leads. Only then (step 7) can a first-timer build a campaign. The feature itself is powerful, but the path to first success is long and gated by third-party APIs and subscriptions.

  • Trust Signals

    58

    No visible tests, no change log, version is 0.1.0, and the license is non-standard ('Sustainable Use')—red flags for a production-grade outreach tool handling real LinkedIn accounts.

    The repo shows zero test files, no CI/CD pipeline, no GitHub releases or CHANGELOG, and a highly permissive but unusual license (Linki Sustainable Use License). The code is substantial (pages/api, lib/ are comprehensive), but without test coverage or a public roadmap, a first-timer running real campaigns risks silent failures. The LICENSE file text is not included in the snapshot, making the actual terms opaque.

  • Friction Feel

    68

    Missing key docs, no API reference, and scattered setup instructions across different pages create friction at multiple touch points.

    The setup guide mixes UI-based steps (Settings → LinkedIn) with environment config steps, but there's no architecture diagram or API reference. The Dockerfile references 'moaljumaa/linki:latest' (a Docker Hub image) without documenting how it's built or versioned. Critical details like how Apollo enrichment works or what the MCP endpoints do are absent. A first-timer implementing LinkedIn authentication via browser cookies has no guide for what goes wrong.

  • Signs of Life

    71

    Latest commit is June 2026 (future-dated, likely test data), zero stars, zero issues, and no visible release history—the project reads as either brand new or abandoned.

    The repo has 0 stars, 0 open issues, and the snapshot shows 'Last pushed: 2026-06-01'—a future date that suggests test/mocked data or a timezone quirk. There's a VERSION file (likely '0.1.0') but no GitHub releases, no public issues or PRs, and no sign of community engagement. The Opsily integration suggests commercial backing, but there's no sign a maintainer is actively triaging reports or merging PRs.

Where the grip slips

  1. highTrust Signals+18 pts if fixed

    No test suite or CI/CD pipeline visible

    A first-timer depends on this tool to automate real LinkedIn account activity and manage email reputation. With zero test files and no CI/CD, there's no evidence the core features (LinkedIn connection scheduling, email ramp-up, AI preview) are tested. Silent failures could halt campaigns or burn sender reputation.

    Fix: Add a test/ directory with Jest or Vitest covering: LinkedIn session authentication, email account connectivity, AI agent preview (mock OpenRouter), campaign step execution logic, and database migrations. Add a GitHub Actions CI workflow that runs tests on push and PR.

  2. highOnboarding Runway+16 pts if fixed

    Setup requires 7 steps and 4 external API integrations before first campaign launch

    A first-timer must set up LinkedIn account, authenticate via browser, add email accounts, configure OpenRouter, optionally add Apollo, and have a LinkedIn Sales Navigator subscription before they can import leads. This 'death by a thousand cuts' onboarding loses users at each gate.

    Fix: Add a quick-start guide or wizard that: (1) lets users import a sample lead list and build a campaign with mocked/test LinkedIn actions to see the UI payoff without real setup, (2) creates a checklist on the dashboard showing required vs. optional integrations, (3) flags missing integrations with inline help links in the UI.

  3. highSigns Of Life+14 pts if fixed

    No CHANGELOG, no releases, version is 0.1.0—maturity is opaque

    A first-timer looking to deploy a production outreach tool on their VPS sees version '0.1.0' and no release history. There's no CHANGELOG documenting what's shipped, what's broken, or what's planned. The future-dated 'Last pushed' timestamp and zero stars raise doubts about whether this is abandoned or actively developed.

    Fix: Create a CHANGELOG.md documenting v0.1.0 (initial release) with feature list, known issues, and breaking changes. Set up GitHub Releases to tag stable versions. Add a 'Roadmap' section to the README listing planned features for v0.2.0+. Include a 'Support & Issues' section with links to discussions or issue templates.

  4. highFriction Feel+12 pts if fixed

    No documentation for LinkedIn authentication flow or error handling

    Step 2 says 'Click Authenticate on your account and follow the on-screen steps to connect your LinkedIn session via browser cookies.' A first-timer has no idea what goes wrong if LinkedIn blocks the session, how to re-authenticate, or what the browser cookie flow looks like. This is a critical path step with zero error budget.

    Fix: Add a 'LinkedIn Authentication Troubleshooting' section to the README covering: (1) how the cookie-based auth works (screenshot of the browser session page), (2) common errors and fixes (rate limits, session expiry, 2FA), (3) how to test if authentication succeeded, (4) how to rotate accounts without breaking campaigns.

  5. mediumTrust Signals+10 pts if fixed

    License is non-standard ('Sustainable Use') and terms are not included in the snapshot

    The README says 'Linki is source-available under the Linki Sustainable Use License' and claims the license is in the LICENSE file, but the actual license text is not visible. A first-timer cannot verify what they can and cannot do (commercial use, forking, hosting). This is a trust blocker for businesses.

    Fix: Include the full LICENSE text in the repository and summarize the key permissions/restrictions in a 'License' section of the README (e.g., 'You can use it personally and for your business, but you may not resell it as a service'). Link to a public legal document or the SSPL/BUSL precedents for clarity.

  6. mediumFriction Feel+8 pts if fixed

    Missing API or architecture documentation

    The file tree shows extensive API endpoints (/api/mcp/*, /api/workflows/*, /api/email-accounts/*) and lib/ modules (agent.ts, linkedin/runner.ts, email/sender.ts), but there's no documentation of how these fit together. A first-timer trying to extend or debug the tool has no map.

    Fix: Add an ARCHITECTURE.md file covering: (1) high-level flow (UI → API → lib/ modules), (2) key modules (agent, linkedin/runner, email/sender, db), (3) database schema overview, (4) how campaigns are executed (step-by-step), (5) MCP endpoints and their purpose.

  7. mediumFriction Feel+6 pts if fixed

    Docker image references 'moaljumaa/linki:latest' with no versioning or build documentation

    The docker-compose.yml defaults to pulling 'moaljumaa/linki:latest' from Docker Hub, but there's no link to the image, no documentation of how it's built, and no SRI hash or version pinning. A first-timer has no assurance the image is safe or matches the repo source code.

    Fix: Either: (1) include a Dockerfile build step in compose.yml by default (comment out 'image:' and uncomment 'build:'), (2) or document the Docker Hub image with a link, versioning strategy, and verification steps (e.g., 'compare the image digest to the commit SHA'). Add a note in the README about image freshness.

  8. lowFriction Feel+4 pts if fixed

    No example .env.local values for OpenRouter or Apollo keys

    The .env.example has NEXTAUTH_URL, NEXTAUTH_SECRET, AUTH_PASSWORD, but no placeholders for OPENROUTER_API_KEY, APOLLO_API_KEY, or SMTP/IMAP credentials. A first-timer unsure where these come from has to guess or look at source code.

    Fix: Expand .env.example to include commented entries for all optional keys: # OPENROUTER_API_KEY=sk-or-v1-..., # APOLLO_API_KEY=your-key-here, # SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, # LINKEDIN_SESSION_COOKIES (or similar). Add a comment explaining where each comes from.

Show your score

Latch badge
[![Latch score](https://latch.fyi/api/badge/03f8a2cb-b91d-4dff-bf34-494361b62555)](https://latch.fyi/steffschmidt/linki)

Share this analysis

https://latch.fyi/steffschmidt/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.