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.
| Section | Items |
|---|---|
| Headlines | Exactly 4, at least 2 from product news, 15 words each |
| Product sense drill | 1, from a 24-topic curriculum |
| Product news | 2 to 4 |
| Tech and models | 2 to 3 |
| AI in PM | 1 to 3 |
| Other | 0 to 2 |
| Read in full | 0 to 1 |
| Use it this week | 1 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.
Create a scheduled routine in Claude Code with the Gmail connector and WebFetch enabled, and paste the prompt.
[ -d ~/how-i-work ] || git clone https://github.com/DanielErCohen/how-i-work.git ~/how-i-work
cp ~/how-i-work/routines/pm-digest/routine-prompt.md ./my-digest-prompt.md[ -d ~/how-i-work ] || git clone https://github.com/DanielErCohen/how-i-work.git ~/how-i-work
cd ~/how-i-work/routines/metrics-dashboard-refresh
python3 parse_example.py --input data/sample-open-period.csv --out dist/data.jsReplace each placeholder in angle brackets before you schedule it.
Open the link, copy the prompt text and paste it into a chat with the Gmail connector on, then run it by hand. The twice-weekly schedule needs Claude Code.
https://raw.githubusercontent.com/DanielErCohen/how-i-work/main/routines/pm-digest/routine-prompt.mdThe prompt reads your inbox, so an assistant needs email access to run it. The dashboard parser needs only Python 3.
https://raw.githubusercontent.com/DanielErCohen/how-i-work/main/routines/metrics-dashboard-refresh/parse_example.pySetup steps
- 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.
- 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).
- Metrics dashboard refresh: in
~/how-i-work/routines/metrics-dashboard-refresh, runpython3 parse_example.py --input data/sample-open-period.csv --out dist/data.json 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--inputat your export. - 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
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
| Assistant | Support |
|---|---|
| Claude Code | A scheduled routine with the Gmail connector and WebFetch. |
| Claude app | Paste the prompt and run it by hand. The schedule needs Claude Code. |
| Other assistants | Needs 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.