viszkit493 downloadsDaily word goal webhook + minimal sidebar heatmap with detailed stats view.
Writing Tracker Heatmap Streaks is an Obsidian plugin that tracks the new words you write each day, sends a webhook when you hit your goal, and shows your writing history in a compact heatmap sidebar with a detailed stats view.

Install Writing Tracker Heatmap Streaks from Obsidian's community plugins browser:
The plugin tracks your current daily word count in the status bar. Words are counted as growth from each note's daily baseline, and if you delete older text below that baseline, the baseline lowers so future writing starts counting from the new length. The sidebar heatmap can be opened when needed, and each day is shaded based on progress toward your daily word goal. Days where the goal was reached use the strongest shade, while days at 150% or more receive a brighter glow.
Click a day in the sidebar heatmap to open its daily note. The plugin uses your Periodic Notes daily settings first, then Obsidian's core Daily Notes settings, and resolves the note from the configured folder and Moment-style date format. Date tokens follow Obsidian's locale, so localized month and weekday names such as Mai or Dienstag are supported. If the expected daily note is missing or daily notes are not configured, Obsidian shows a notice instead of failing silently.

Commands:
Open writing heatmapOpen writing statsShow today's word countImport word counts from daily notesSettings:
Zettelkasten/Notes/. Changing the list or mode removes newly filtered notes from today's active count.When the goal is reached, the plugin sends a POST request with a JSON payload like:
{
"event": "daily_word_goal_reached",
"goal": 500,
"actual": 512,
"date": "2026-03-27",
"timestamp": "2026-03-27T14:23:01.000Z",
"test": false
}

.obsidian/plugins/word-goal-webhook/data.json.data.backup-1.json, data.backup-2.json, and data.backup-3.json. Backup rotation starts only after the data has at least two non-zero history days, so a fresh or one-day reset state should not replace older useful backups.data.json as missing, empty, stale, or conflicted, Obsidian can load the plugin as if it were a fresh install and a later save may overwrite your previous progress.iCloud Drive/Obsidian/<Vault Name>, mark the Obsidian folder as Keep Downloaded where available, avoid mixing iCloud with another sync service for the same vault, and consider Obsidian Sync or regular backups if the writing history is important to you.POST requests only to the URL you enter when your daily goal is reached or when you click Send test webhook.npm install
npm run build
npm run deploy:runtime
npm run deploy:runtime copies only main.js, manifest.json, and styles.css into the local Obsidian plugin folder and removes development-only files from that installed copy. Set OBSIDIAN_PLUGIN_DIR to deploy to a different vault.
Create releases by pushing a version tag that matches the manifest version. The GitHub release workflow builds from source, runs tests, uploads main.js, manifest.json, and styles.css, and creates GitHub artifact attestations for those release assets.