Unwrapped

Legacy SaaS dossier · docsend

DocSend

DocSend

CategoryDocument trackingDocSend Advanced (Dropbox upsell)Site ↗

A short-link generator with page-by-page view tracking. A weekend project sold as a sales-enablement category.

01 · Data

Data the SaaS sits on

S3 (PDFs)
S3 (PDFs)Yours
PDF.js renderer
PDF.js rendererPublic
Resend (alerts)
Resend (alerts)API

Internal Build Score

0.84

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 · 84%
  • U

    User adoption gap

    weight 0.250.60

    How much licensed surface area sits idle.

  • C

    Core simplicity

    weight 0.250.97

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

  • D

    Data portability

    weight 0.200.85

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

  • I

    Integration burden (inverse)

    weight 0.150.92

    How few external systems must keep working through the SaaS.

  • M

    Moat erosion

    weight 0.150.95

    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

  • Upload PDF, get a short link
  • Per-recipient link with email gate
  • Page-by-page view duration
  • Email alert when a deck is opened
  • Revoke / expire link

Rarely touched

06

  • Spaces, folders of links
  • Data rooms competing with a real VDR
  • eSign add-on inside the Dropbox suite
  • Per-page commenting nobody uses on a pitch deck
  • Branded portals on the top tier
  • Custom domains as an enterprise SKU

Internal build

Build it yourself

01 · Stack & flow

Next.js
Next.js
Postgres
Postgres
PDF.js
PDF.js
S3
S3
Resend
Resend

Internal build map

Data in

PDF in S3
Recipient link
Viewer heartbeats

Agent layer

View summariser

Logic

email gate
5s page heartbeat
first-open alert
14-day roll-up

Outputs

Events table
Open alert
Engagement digest
Build time
1 weeks
Run cost
$0.25/seat·mo
vs. SaaS
$15K / yr

Build outline

  1. S3 upload + signed URL per recipient
  2. PDF.js viewer with email-gate intercept
  3. Heartbeat every 5s with current page
  4. Events table: open / page / time-on-page
  5. Email + Slack webhook on first open

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 · DocSend

// Build: internal document tracking (DocSend replacement) # Paste into Cursor or Claude Code in an empty repo. Build an internal doc-tracking tool covering the part of DocSend we use: a per-recipient link to a PDF, page-by-page view tracking, an open alert, and a one-line engagement summary. Ship a v1 in a weekend. Stack: Next.js + Postgres + PDF.js + S3 + Resend. Data model: - docs(id, owner_id, s3_key, title) - links(id, doc_id, recipient_email, token, expires_at, revoked) - events(id, link_id, page, duration_ms, at) Build, in order: 1. Upload a PDF to S3; mint a per-recipient signed link with an email gate. 2. A PDF.js viewer that posts a heartbeat every 5s with the current page. 3. Email/Slack alert on first open; revoke + expire links. 4. AI assist, an engagement summary. Call Claude: """ Given one prospect's 14-day view events (ts, page, duration_ms) + the slide titles, return JSON { summary, confidence(strong|weak|noise), hot_slides[], skipped_slides[] }. Describe behaviour only; never infer intent. """ Skip: data rooms, eSign, per-page comments, branded portals. Done when: send a link, watch page-level engagement, and get a one-line read on each viewer.

03 · Result

Summary for prospect ACME, Series A deck
deck:series-a-v3#prospect:acme

Spent most time on slides 5 (Market) and 11 (Pricing); skipped Team; opened 4× across 6 days. Strong signal.