all work
#web2026· Founder + Lead Engineer

VoiceLink

AI LinkedIn growth tool — voice-matched daily posts with real research, image generation, Telegram approval, and free-tier AI stack ($0/mo).

LinkedIn growth tools either spam generic AI slop or require hours per post. Neither produces the voice-matched, research-grounded content that actually converts. The brief was a copilot that learns the user's voice, grounds claims in real research, and lets the user approve from a phone in seconds.

  • Next.js 15
  • Hono
  • Drizzle
  • Postgres
  • Gemini
  • Tavily
  • Plasmo
voicelink

What I owned

Designing and building a pnpm + Turborepo monorepo: Next.js 15 dashboard for post queue and voice builder, Hono on Node 20 backend with cron worker and Telegram webhook, Plasmo MV3 browser extension for grabbing inspiration posts on linkedin.com, and shared packages for LLM (Gemini + Claude swappable wrapper with prompt-cache support), LinkedIn OAuth + UGC Posts + image upload, Tavily research + LLM fact extraction, Pollinations.ai image generation with satori SVG fallback, Telegram bot with inline-keyboard approval, and the voice DNA extractor + post drafter.

Constraints

  • Voice DNA must blend up to 5 inspiration profiles plus the user's own voice
  • Research must produce grounded claims with sources, not generic LLM output
  • Free-tier stack: Gemini Flash, Pollinations.ai, Postgres on user's VPS
  • Approval path must work from a phone in under 10 seconds

Process

  1. 01

    Voice DNA extraction

    User-supplied past posts and 1-5 inspiration profiles run through a style-fingerprint extractor that becomes in-context examples at draft time.

  2. 02

    Daily research

    Tavily search → LLM extracts grounded factual claims with source URLs, fed into the draft prompt.

  3. 03

    Image generation

    User uploads image, AI generates via Pollinations, or satori SVG template fallback.

  4. 04

    Approval

    Cron worker drafts daily, sends Telegram with inline approve/edit/skip buttons. Web dashboard mirror for full editing.

  5. 05

    Publish

    LinkedIn UGC Posts API publishes with image upload. Failure modes recorded for retry.

Approach

The architecture choice that mattered most was making the LLM swappable from day one. Gemini Flash for drafting (free), Claude for hard cases (paid), via a single wrapper with prompt-cache support. This made cost control a configuration concern rather than a rewrite. The browser extension was the second non-obvious call — letting users grab inspiration posts directly from LinkedIn beats asking them to copy-paste.

Deliverables

  • Next.js 15 dashboard with post queue and voice builder
  • Hono backend with cron, OAuth, and Telegram webhook
  • Plasmo MV3 browser extension for LinkedIn
  • Voice DNA extractor and post drafter
  • Tavily-grounded research pipeline
  • Pollinations.ai + satori SVG image generation
  • Telegram bot with inline-keyboard approval
  • PGlite for local dev, real Postgres for production

Outcomes

  • Free-tier stack achieves $0/month operating cost for solo users
  • Voice DNA produces drafts that pass blind reviewer tests against the user's actual writing
  • Telegram approval path takes under 10 seconds end to end
  • Three operating modes (auto/semi-auto/manual) cover the spectrum from full automation to assisted writing

Have a project that calls for this kind of work?

Start a project