Workflows

How to build a usage dot plot in Claude Cowork

How to build a usage dot plot in Claude Cowork

Below is a guide to recreating the Earmark-style dot plot - one row per user, one column per day, following Dave Lieb's "do things that don't scale" retention framework - as a self-refreshing report in Claude.


What you need

  • Claude desktop app in Cowork mode

  • The PostHog connector (MCP) hooked up to your project - or any analytics source Claude can query

  • One clearly defined value event (ours is meeting_started) — the single action that means a user got value that day


Step 1 : Tell Claude what to build

Describe the visualization in plain language. The prompt that produced ours, roughly:

"Build a Dave Lieb-style dot plot from PostHog: one row per user, one column per day for the last 60 days. A dot = a day the user fired meeting_started, sized by count (1 / 2–4 / 5+). Ring the user's first-ever day. Add small ticks for secondary events (artifact_created, artifact_copied, vibe_edit), tint rows for users with calendar connected, and add a DAU/MAU strip and weekly cohort retention curves. Group by email domain. Make it a single HTML file."

Protip: copy and paste the transcript from Dave's talk from YouTube to enrich the context.

Useful specifics to include: your value event, the time window, secondary events, and any account/user properties you want shown (name, OS, integrations connected).


Step 2 : Let Claude design the data pipeline

Claude queries PostHog with HogQL and compresses the result so it fits in a single HTML file. Ours encodes each user as one line:

email|companyIdx|firstMeetingDate|grid60|cal|name|os

where grid60 is 60 base32 characters - one per day - packing meeting volume plus three event flags into a single character. 271 users × 60 days fits in ~30 KB. Three queries drive it: the per-user daily grid, per-user metadata (first-ever event date, email, name, OS), and current calendar-connection status from the persons table.

Tip: ask Claude to verify its own output - regex-check every data line, cross-check totals against an independent query, and run the page headlessly to catch JS errors before publishing.

Step 3 : Save it as a Cowork artifact

Ask Claude to save the page as an artifact (ours is earmark-dot-plot). Artifacts persist across sessions, so the page code becomes the single source of truth that later runs can update in place.

Step 4 : Schedule the weekly refresh

Say something like: "Every Friday at noon, refresh this with the latest 60 days of data, update the artifact, and summarize week-over-week." Claude creates a scheduled task whose instructions capture everything a fresh session needs: the exact queries, the encoding spec, verification rules, and known quirks of the data source. Each run only swaps the data payload and dates - the design stays untouched.

Our weekly summary reports: active users and user-days vs last week, one-and-done signups, the newest cohort's W1 retention, churn-risk users (heavy usage then 14+ days silent), and accounts whose active seats dropped.

Step 5 : Iterate in conversation

Changes are one message each, and Claude persists them to both the artifact and the scheduled task so future runs keep them. Real examples from this report: "make the email clickable so it copies to the clipboard," "add first/last name on hover," "add a PC or Mac designation as a column."


The Result


Lessons learned

  • Pick one value event and stay loyal to it. The whole chart reads at a glance because a dot means exactly one thing.

  • Encode server-side, decode client-side. Connector tools cap output size; compressing per-user data into short strings keeps queries fast and payloads small.

  • Write the quirks into the scheduled task. Each run starts fresh, so anything you debugged once (HogQL type gotchas, row caps, join limitations) should live in the task instructions.

  • Make verification part of the job. Every refresh re-checks line format, totals, and page rendering before touching the artifact.

Mark Barbir

Earmark Co-founder & CEO

Let your meetings finish the work.

Earmark turns conversations into finished work — so the follow-up is already started when the call ends.