Daniel Cohen

Routines

Routines

Two scheduled routines: a newsletter digest and a dashboard refresh that stops on bad data.

Why I built itI subscribed to 12 product newsletters and rarely read them, so a routine now reads them for me.
  • The digest arrives Monday and Thursday morning: 4 headlines, one product-sense drill from a 24-topic curriculum and one thing to use this week.
  • A cap on each section keeps a read to about 4 minutes.
  • The routine stores its state in the sent email's footer, so it needs no database.
  • When a source sheet changes, the dashboard refresh stops and names the failed check, so a run with a failed check publishes nothing.
30 to 45 minClaude CodeOpen routines/ on GitHub
One digest, with the caps from routine-prompt.mdLayout
SectionItems
HeadlinesExactly 4, at least 2 from product news, 15 words each
Product sense drill1, from a 24-topic curriculum
Product news2 to 4
Tech and models2 to 3
AI in PM1 to 3
Other0 to 2
Read in full0 to 1
Use it this week1 line

Each item: a title up to 8 words, one fact sentence up to 30 words, then the source name and date as a link. About a 4-minute read.

The dashboard refresh ends each run with a one-line report: the date, the row count, the last closed period and any parser notes.

What you get

Two routines you can copy.

  • PM digest reads a curated list of newsletters from your inbox twice a week.
    • The digest carries product news and tech news below the headlines.
  • Metrics dashboard refresh pulls spreadsheets, validates them and publishes only the data file.
    • The example parser writes a data file only when its checks pass.
    • Replace those checks with the rules for your data before connecting it to a dashboard.
    • The page reads a published data file. Check that file for private data before publishing it.

Copy it

Time to set up: 30 to 45 minutes. Pick the assistant you use. The choice is remembered on this device.

Setup steps

  1. PM digest: subscribe to your newsletters, create a Gmail label and a filter that applies it, then copy routine-prompt.md and replace each placeholder in angle brackets.
  2. Create a scheduled routine in Claude Code with the Gmail connector and WebFetch enabled, paste the prompt, and run it once by hand. Fix the prompt until the output reads well (30 to 45 minutes in total).
  3. Metrics dashboard refresh: in ~/how-i-work/routines/metrics-dashboard-refresh, run python3 parse_example.py --input data/sample-open-period.csv --out dist/data.js on the ten fictional sample rows. Exit code 0 means the file was written. Exit code 1 means a check failed and nothing was written. Then replace the schema and checks in parse_example.py with yours and point --input at your export.
  4. Wire it to a schedule with a skill or routine that downloads the sources, runs the parser, publishes the data file only when the exit code is 0 and reports in one line. Keep file IDs and URLs in a private config.

Try the digest once

First prompt
Run the PM digest prompt I supplied once, using my configured newsletter label. Return the digest here for review before scheduling or sending anything.

Expected result: a digest linked to the source newsletters and a product-sense exercise; check the links and your chosen date range.

Where it works

AssistantSupport
Claude CodeA scheduled routine with the Gmail connector and WebFetch.
Claude appPaste the prompt and run it by hand. The schedule needs Claude Code.
Other assistantsNeeds email access to read newsletters. The dashboard parser runs anywhere with Python 3.

Came from

The digest came from working alone across several products and needing a steady, short input on the craft.

  • The refresh pattern is the validate-then-publish rule behind step 9, Measure and learn, of the nine steps, where the north star (the one number that shows users get value) is read from numbers you can check.