Skip to content
MiloJoin the waitlist
Private beta · building in the open

Know when your resume gets seen.

Share your resume through Milo and see when it’s viewed, downloaded, and where the traffic came from.

Your resume stays where it already lives. Milo provides the analytics layer.

No spam. One email when Milo opens up, then nothing.

See how it works

01 · Today

Your resume already lives somewhere.

On your site, in Drive, on GitHub. Milo does not move it, copy it, or store it. It stays exactly where you put it.

How it works

Three steps, and nothing moves.

Milo is an analytics layer over a file you already host. Setup is one form, and there is nothing to install.

  1. 01

    Paste the URL your resume already has

    Your site, GitHub, Drive, Dropbox, anywhere public. Milo stores the link and some metadata. It never uploads or keeps a copy of your PDF.

    https://yoursite.com/resume.pdf

  2. 02

    Share the Milo link instead

    One short link per resume. Put a different one in each application, or add UTM tags to tell LinkedIn from a referral.

    milo.app/r/abc123

  3. 03

    Watch how it performs

    Views, unique viewers, downloads, which pages held attention and for how long. Aggregate patterns, never identities.

    12 views · 8 viewers · 3 downloads

Milo works on the link, not the file

Share the Milo link and every open, page turn and download is measurable. Attach the raw PDF to an email or upload it to a job portal and Milo sees nothing: a file that leaves your hands stops reporting back. Embedding a tracker inside the PDF would change that, and it is exactly the invisible tracking Milo refuses to do. So use the link in LinkedIn messages, cold emails, referrals, your portfolio and your signature.

The dashboard

Everything you get. Nothing you shouldn't.

Performance, sources, and per-page attention. No IP, no city, no company name, no identity, because Milo never collects them.

Example data

Resume views

12

Unique viewers

8

Downloads

3

Download rate

38%

Traffic sources

  • LinkedIn5
  • GitHub2
  • Portfolio2
  • Email1
  • Direct2

Page engagement

  • Page 112 viewers0m 48s
  • Page 210 viewers1m 31s
  • Page 37 viewers0m 22s

Average reading time1m 42s

Recent activity

  • 10:42Resume viewedLinkedIn · Desktop
  • 10:35Resume viewedDirect · Mobile
  • 10:21Resume downloadedLinkedIn · Desktop

No name, no company, no location. By design.

Features

Built for one job: the job hunt.

No CRM, no lead scoring, no pitch-deck analytics. Milo does one thing for people applying to roles.

Your file, your host

Milo stores the URL and the analytics, never the document. Move or replace the PDF and the tracking link keeps working.

Views and unique viewers

Separate a recruiter opening your resume four times from four different people opening it once.

Per-page attention

Which page held someone the longest, and where they stopped reading. Deduplicated, so scrolling back does not inflate the count.

Download tracking

Downloads are recorded before the file is handed over, and repeat clicks within a short window count once.

Source attribution

UTM tags first, referrer domain second, Direct when neither is available. Honest about what it cannot know.

Anonymous by construction

Sessions are anonymous and scoped to one resume. There is no identity field in the schema to fill in later.

Privacy

Milo tells you how, not who.

A recruiter opening your resume did not sign up for anything. The only honest way to build this is to collect the minimum that answers your question and nothing beyond it.

What Milo records

  • Timestamp of the view
  • An anonymous session ID, scoped to one resume
  • Device category, desktop, mobile or tablet
  • Browser and operating system
  • Referrer domain, e.g. linkedin.com
  • UTM parameters you added to your own link
  • Which page of the resume was on screen
  • Roughly how long each page was open
  • Whether the PDF was opened and whether it was downloaded

What Milo will not do

  • IP addresses shown to you, or stored longer than a request needs
  • City, country, or any location derived from an address
  • GPS or precise location
  • Names, emails, or LinkedIn profiles of viewers
  • Device fingerprints
  • Tracking across other websites
  • Camera, microphone, or browser history
Read the full privacy page

Written in plain language, without legal claims we cannot back up.

Path

Built in the open, dated honestly.

Milo is early and being built in the open. Every technical and product decision lands here as it gets made, dated the day it shipped, including the quiet weeks.

  1. 13 August 2026

    2 releases
    • Shipped

      Product app, and the design system underneath it

      Marketing shell for the app, with a story section where one beat index drives the copy feed, the figure pose and a WebGL backdrop of 54 cards rendered as a single InstancedMesh. Tokens and shared components moved into their own packages so both apps render from one source; Tailwind v4 needs explicit source globs to scan a linked package, verified against the built CSS rather than assumed.

      • React
      • Three.js
      • Design system
      • Monorepo
    • Shipped

      Polyglot monorepo with a single task runner

      npm workspaces for TypeScript, Poetry for the FastAPI service, and a Makefile so one command lints both languages. CI splits into parallel JavaScript and Python jobs. Prettier is fenced out of the Python package, proven by dropping an identical malformed file into each and checking only one was flagged.

      • Infrastructure
      • CI
      • Python
  2. 12 August 2026

    1 release
    • Shipped

      Source-available licensing, notices generated not guessed

      Elastic License 2.0, diffed byte for byte against two official Elastic repositories rather than reproduced from memory. Third-party notices built from each dependency own license file, which surfaced that lucide-react carries ISC terms plus a separate MIT notice for Feather-derived code.

      • Licensing
      • Compliance
  3. 9 August 2026

    1 release
    • Shipped

      Waitlist API, and a Mongo client that survives a cold start

      Zod validation at the boundary, rate limiting, and a honeypot that returns success so bots learn nothing. Duplicates are rejected by a unique index rather than a read-then-write check that would race. One cached client per serverless instance, and a rejected connect promise clears itself, since a memoised rejection makes a warm instance fail forever after the cluster is fixed.

      • API
      • MongoDB
      • Security
      • Reliability
See everything that shipped →

Stop guessing whether anyone opened it.

Milo is in private beta. Leave your email and we’ll send one message when tracking links open up, no drip sequence, no newsletter.

No spam. One email when Milo opens up, then nothing.