Activity Calendar Chart
A year of effort, visible in one glance.
Turns a list of dated events into a calendar heatmap: days as cells, weeks as columns, intensity shown by shade, with annotations for streaks, gaps, and peaks — plus the tidy daily table behind it.

Install it in 3 steps
No sign-up. No CLI tools. Pick your AI, copy one line, paste it over.
Prefer doing it yourself? Buy the skill ($4.99), download the ZIP from your checkout confirmation, unzip it into the directory shown above, restart your AI session — same result. Already bought it? Your AI assistant can download it for you.
What’s inside
One SKILL.md (the playbook) + one starter template. A preview:
Activity Calendar Chart
When to use
- You want to see a year of habits, commits, workouts, or sales as a single picture instead of a spreadsheet
- You need a "year in review" visual that shows streaks, gaps, and seasonal patterns at a glance
- Your team wants a shared view of activity — support tickets, deploys, posts shipped — across weeks and months
- You are reporting progress to a client or manager and a heatmap says more than a table of daily counts
- Your raw data is a list of dated events and you need it turned into something a reader can understand in five seconds
Workflow
- Define the unit (input: raw dated events → output: counting rule)
Decide exactly what one cell means before charting anything: one day = one cell, and the value is a count (workouts done, tickets closed) or a yes/no (published or not). Write the rule down: "one cell = one day, shade = number of focused work sessions that day." Ambiguous counting produces a chart that looks precise and means nothing. - Clean the dates (input: event list → output: tidy daily table)
Normalize everything to a single daily table: one row per day in the range, zero-filled for days with no activity. Check for the classic traps — timezone shifts, duplicate entries, events dated in the future, and ranges that start mid-week. A heatmap with missing zeros lies: an empty day and an unrecorded day must be distinguishable or the gap pattern is meaningless. - Choose the scale (input: daily table → output: color scale + legend)
Pick a scale that matches the data: a sequential scale (light to dark) for counts, a binary scale for yes/no. Set the breakpoints from the actual distribution — if most days are 0–2 and a few are 20, a linear scale will wash everything out; use thresholds that separate the common range. The legend must state the unit: "darker = more sessions, max 8/day." - Annotate the story (input: scaled chart → output: annotated chart)
Add the annotations that turn a grid into a story: label the streaks, mark the gaps with a reason you actually know ("travel", "holiday"), and call out the peaks. Keep annotations short and place them outside the grid where they cannot obscure cells. Never annotate a gap with a reason you are guessing — an unexplained gap is honest; an invented explanation is fabrication. - Check readability (input: annotated chart → output: publish-ready chart)
Verify the chart at the size it will be read: month labels aligned, weekday labels legible, legend visible, color differences distinguishable without the legend. Check it in grayscale — if the scale collapses when color is removed, adjust the lightness steps. Confirm the total shown matches the source data (sum of cells = total events) before publishing.
Template preview
Activity Calendar Chart — Data & Chart Template
One dataset = one chart. Define the counting rule and clean the dates before shading a single cell.
Dataset: {what is being tracked}
Counting rule (one cell = one day, value = ?): {e.g. "number of focused work sessions that day"} Date range: {start} → {end} Timezone: {timezone used for all dates} Source of events: {where the event list came from}
Data cleaning checklist
[ ] One row per day in range, zero-filled for days with no activity [ ] Timezone shifts checked (no events landing on the wrong day) [ ] Duplicates removed [ ] Future-dated events removed or flagged


