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

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
- 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.
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.
Negotiation
The deal sits above the argument
A thread with a price in it carries its negotiation: list, current and target, how far the price has moved, and a counter drafted halfway to the target when no rule covers the site.
Pipeline
What is being bought, as a funnel
Every domain on every brief, at the stage the work proves. Each step counts what reached it or went past it, so each is a share of the one above.
Rules
A ceiling per niche or vendor
Where a first counter opens, how many rounds before a person takes over, and the price above which only an approver may agree.
AI drafts
A reply written from the whole thread
The assistant reads every message and note in the thread and writes toward the target. It is a draft to read before sending, and each redo costs one AI credit.
Context
What everyone else charges
Beside the conversation: the vendor’s placements, average price, reply rate and deals won, and what other vendors quoted for the same domain.
Delivery
Delivered is counted, not chosen
Each domain on an order gets a draft link, a live URL and a proof. Filling them moves the domain along the board, and the order says Delivered once every one is live.
Spam
Refused, but never lost
Incoming mail is scored on its headers, with no AI call. What is filed as spam keeps its reason, counts as no reply, and its sender can be blocked in one click.
What went into it.
- 01
Outreach
Sequences with variants, business-hours windows and a daily cap per mailbox, sent from Gmail, Google Workspace, Zoho or custom SMTP.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
Want to see more?
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.
- # New project brief
- ## What is slow, manual or missing?
- - [x] Written scope
- - [x] Fixed quote
- - [x] Or an honest no

