Unwrapped

Legacy SaaS dossier · zendesk

Zendesk

Zendesk

CategoryCustomer support / ticketingZendesk Suite + Advanced AISite ↗

A shared inbox with macros and SLAs, sold as a Suite with an AI tier that bills extra for the LLM your agents already use in another tab.

01 · Data

Data the SaaS sits on

Inbound email
Inbound emailYours
Knowledge base
Knowledge baseYours
Customers table
Customers tableYours
Stripe
StripeAPI

Internal Build Score

0.71

Feasibility of a useful internal substitute for the actually-used 20% of this SaaS, built with Claude and your own data layer.

IBS = 0.25·U + 0.25·C + 0.20·D + 0.15·I + 0.15·Mthis record · 71%
  • U

    User adoption gap

    weight 0.250.70

    How much licensed surface area sits idle.

  • C

    Core simplicity

    weight 0.250.80

    How small the actually-used 20% is when re-implemented honestly.

  • D

    Data portability

    weight 0.200.62

    How clean the exit is, exports, formats, audit lock.

  • I

    Integration burden (inverse)

    weight 0.150.60

    How few external systems must keep working through the SaaS.

  • M

    Moat erosion

    weight 0.150.78

    How much the original differentiator has been commoditised by LLMs + cheap infra.

Editorial heuristic. Not investment advice, not a procurement recommendation.

03 · Feature usage

Commonly used vs. rarely touched

Commonly used

05

  • Email + chat → ticket queue
  • Assignee + status + priority
  • Saved replies / macros
  • SLA timers per channel
  • Searchable history + customer profile

Rarely touched

07

  • AI add-on tier billing per resolved ticket on top of seats
  • Sunshine CRM platform pretending to be a CDP
  • Explore, analytics built on a custom query language
  • Talk (voice), Sell (CRM), Guide (KB), every adjacent vertical as a SKU
  • Workforce Engagement, schedules + QA bolted on after acquisition
  • Per-light-agent / collaborator pricing oddities
  • Connectors that exist only on the highest tier

Internal build

Build it yourself

01 · Stack & flow

Postgres
Postgres
Next.js
Next.js
Claude API
Claude API
Postmark
Postmark
Twilio (voice / SMS)
Twilio (voice / SMS)

Internal build map

Data in

Inbound email
KB
Customer row

Agent layer

Reply drafter
Tagger

Logic

queue + assign
retrieve KB
draft + cite
SLA timer
escalate triggers

Outputs

Draft reply
Ticket tags
SLA alert
Build time
7 weeks
Run cost
$6/seat·mo
vs. SaaS
$240K / yr

Build outline

  1. Inbound email → tickets via Postmark MX
  2. Agent console: queue, claim, reply, tag
  3. Claude drafts first reply + categorises
  4. SLA timer service + alerts to Slack
  5. Knowledge base = same markdown repo as the wiki

02 · Build it

Paste into Cursor or Claude Code in an empty repo. It scaffolds the working core, with the AI step embedded.

Build prompt · Zendesk

// Build: internal support desk (Zendesk replacement) # Paste into Cursor or Claude Code in an empty repo. Build an internal support tool covering the part of Zendesk we use: email -> ticket queue, assignment, macros, SLA timers, and an AI first draft. Ship a working v1. Stack: Next.js + Postgres (Drizzle) + Postmark (inbound email) + Claude + Slack. Knowledge base = the same Markdown repo as the wiki. Data model: - tickets(id, customer_id, channel, subject, status, priority, assignee_id, sla_due_at) - messages(id, ticket_id, author, body, at) - macros(id, name, body) Build, in order: 1. Inbound email via Postmark MX -> tickets; an agent console (queue, claim, reply, tag). 2. SLA timers + Slack alerts on breach risk. 3. AI assist, a first-draft reply. Call Claude: """ Given one ticket (+history), the agent's top 20 macros, and retrieved KB articles, return JSON { draft, macro_match, escalation_flag, citations[] }. Resolve the real question, no boilerplate openers. Never promise refunds/policy changes. Cite KB ids; if none, say so. """ Skip: the per-resolved-ticket AI fee, Sunshine CRM, the Talk/Sell/Guide SKUs. Done when: an email becomes a ticket with a drafted reply an agent can send in one edit, and SLAs alert before they breach.

03 · Result

Charged twice for May. Please refund.
ticket:38192

Refund initiated on duplicate May charge ($29.00), Stripe ref ch_3Ru… · macro: billing-double-charge · escalation: false