Skip to content
NewClientOS is live — the self-hosted client portal for agencies.
work/growthdesk

Platform · Link-building operations

GrowthDesk

Find sites, email from your own mailboxes, negotiate, buy, verify and bill: link building without the spreadsheets.

  • Operations platform · Email automation
  • 2026
GrowthDesk — Platform · Link-building operations

About GrowthDesk

Introduction

Link building runs on memory and spreadsheets: prices scattered across email threads and mailboxes, the same site bought twice at different rates, and client reports that accidentally leak vendor names and margin. GrowthDesk puts the whole operation in one place — one record per domain with metrics and every vendor’s price, outreach sequences sent from the team’s own mailboxes, replies read back and classified, negotiation tracked against a target and a ceiling, and a client portal that shows results without exposing anything behind them.

Details

Project
GrowthDesk
Timeframe
2026
Type
Operations platform · Email automation
Stack
  • Next.js
  • NestJS
  • PostgreSQL
  • Drizzle
  • WebSockets
  • Vitest
  • Playwright
  • Docker
Problem
Outreach, pricing and delivery live across inboxes and spreadsheets, so teams overpay, lose negotiation history and struggle to report cleanly to clients.
What we built
An operations app with multi-step email sequences, IMAP reply ingestion, domain records enriched from Ahrefs, negotiation rules with approval for deals that go past them, orders and vendor invoices, and AI-suggested replies and negotiation advice.
Outcome
Built and deployed as an internal platform, with a read-only portal for end clients.
pipeline stages, from shortlisted to verified
9
inbox channels: email, WhatsApp and Telegram
3
intents a reply is sorted into
7
AI providers the admin can choose from
6

Inside the workspace.

The app an agency runs its link building from, rebuilt here in code from its own screens. Pick a page, or click the sidebar.

GrowthDesk — Inbox

Every channel, one thread per deal

Email, WhatsApp and Telegram land in one inbox, filed by what they need from you: a reply, a decision, a payment. The negotiation sits above the conversation it belongs to.

  • Email, WhatsApp and Telegram
  • List, current, target and the gap
  • A suggested reply, one AI credit
  • Snooze, archive or mark as spam

Recreated from the workspace’s interface. Labels, columns and states are GrowthDesk’s own; the agency, people, websites, prices and numbers are samples.

The parts, up close.

The pieces of the workspace that do the deciding, at full size.

What went into it.

  1. 01

    Outreach

    Sequences with variants, business-hours windows and a daily cap per mailbox, sent from Gmail, Google Workspace, Zoho or custom SMTP.

  2. 02

    Negotiation & buying

    Every vendor price on one domain record, a target and a ceiling per deal, approval above the ceiling, and cost per link by client and month.

  3. 03

    AI assistance

    Suggested replies, negotiation advice, reply classification and site-quality notes, on the AI provider of the admin’s choice.

How it is built.

The running parts

Three web apps
The workspace, the back office, and a public site that also serves client reports and email tracking — all Next.js.
API
NestJS, reachable only through the web apps rather than exposed on its own.
Worker and realtime
A job loop for sending, syncing and enrichment, and a WebSocket server for live updates, each its own process.
PostgreSQL, and only PostgreSQL
The data, the job queue and the messages between processes all live in one database. There is no Redis to run.
Deployment and checks
Docker Compose with a migration step. CI runs type checks, lint, unit tests, the build and Playwright on every change.

The hard parts

  1. 01

    Sending without burning a mailbox

    What can go out today is the lowest of three ceilings: the mailbox, the workspace and the plan. Each email leaves from the connected mailbox that has sent least, and a recipient with no capacity left moves to the next sending window.

  2. 02

    Replies land on the right thread

    Incoming mail is matched to the email it answers by its headers, falling back to the last unanswered send to that address. A message is stored once, a reply stops the sequence, and bounces are caught first and marked on the contact.

  3. 03

    Replies show up in moments

    Each mailbox keeps one connection open that the mail server notifies when something arrives, which pulls the next sync forward. A poll every three minutes is the backstop.

  4. 04

    A queue and realtime without extra services

    Workers claim jobs with row locks that skip what another worker holds, duplicates are refused by a unique key, and retries back off up to a cap. Processes signal each other through PostgreSQL’s own notifications.

  5. 05

    A client portal that cannot leak

    The portal is a separate app with its own cookie, and its queries name only the columns a client may see. Vendor and price are never fetched in the first place — and a test asserts exactly that.

Start here

Have a problem worth solving?

Tell us what is slow, manual or missing. You will hear back within one working day — then get a written scope and a fixed quote, or an honest no.

brief.md
  1. # New project brief
  2. ## What is slow, manual or missing?
  3. - [x] Written scope
  4. - [x] Fixed quote
  5. - [x] Or an honest no
Reply within one working daySend brief
Message Us