Dayflow

by caezium
5
4
3
2
1
Score: 35/100

Description

This plugin has not been manually reviewed by Obsidian staff. Read your Dayflow activity timeline read-only and write daily + weekly notes into your vault, with inline SVG charts, Bases dashboards, and optional ActivityWatch enrichment.

Reviews

No reviews yet.

Stats

stars
14
downloads
0
forks
1
days
NaN
days
NaN
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
0
commits

Latest Version

Invalid date

Changelog

README file from

Github

Dayflow for Obsidian

Bring Dayflow into your Obsidian vault.

This plugin reads Dayflow's chunks.sqlite read-only and writes daily + weekly notes into your vault, with inline SVG charts, Bases dashboards, optional ActivityWatch enrichment, and a side-pane Today view that refreshes after every sync.

Local-first. Zero network calls. (Except optional localhost:5600 when you opt in to ActivityWatch enrichment.)


What you get

Daily notes

A > [!info] Day at a glance callout at the top — tracked hours, top categories, focus/distraction progress, current focus streak. Then a compact 24-cell hourly strip colored by what you mostly did each hour, your standup highlights/tasks/blockers, journal intentions and reflections, the full timeline (each card with thumbs-up/down ratings inline), top apps, and goal categories. Frontmatter exposes every signal — total_minutes, focus_pct, categories, top_apps, etc. — so Bases and Dataview can slice it freely.

Weekly notes

Inline SVG charts that read in both light and dark themes (they all use currentColor):

  • Donut of weekly distribution with total in the hole
  • Bar chart of category totals
  • Nested treemap — categories as soft tinted blocks, apps inside colored by brand (YouTube red, GitHub charcoal, Claude orange, …)
  • Workflow grid — 30-min × 7-day cells colored by dominant category (mirrors Dayflow's "your workflow this week")
  • Focus heatmap — intensity by hour × day
  • Context shifts vs distractions — multi-series line chart over the days
  • Sankey of app-to-app transitions
  • Week-over-week comparison▲ +2h / ▼ -3h deltas vs last week's totals + focus + distraction

Year notes

Dayflow_YYYY.md written on every sync with a GitHub-style 53-week × 7-day activity heatmap plus year totals and your best day.

Side panes

Three views you can dock anywhere:

  • Today — live-rendered today's note with refresh + last-sync indicator
  • This Week — same shape, for the current weekly note
  • Dashboard — tiny start page: hero number (today's hours), one-sentence focus-goal status, three navigation buttons. Heatmap-free, deliberately minimal.

Bases dashboards

One click installs three .base files:

  • Recent days — card gallery of the last 30 days
  • Weekly review — sortable table of every weekly note
  • Focus performance — table grouped by goal hit / close / miss

ActivityWatch enrichment (opt-in)

Flip a toggle to query your local ActivityWatch and get precise per-app minutes under every Dayflow timeline card, plus a full per-day app breakdown. Web-tab noise filtered to active-browser windows only. Localhost only — auto-detects buckets via /api/0/buckets.

Schema drift detection

Every sync checks the live chunks.sqlite against the schema fingerprint the plugin actually reads. Missing required tables abort with a clear error; unknown new tables Dayflow.app added since the plugin was written surface as a Notice so you know to check for an update.

Stamp into your Obsidian Daily Note

Optional toggle: appends a small > [!info] Dayflow callout into your existing core-Daily-Notes file linking the Dayflow note for that day. Stamp block is bounded by HTML comments so re-syncs update in place instead of duplicating.

Status bar + commands + ribbon

  • Status bar: Dayflow · synced 12m ago — click to sync now
  • Commands: Sync now, Open today's note, Open this week's note, Open Today side pane, Open This Week side pane, Open Dashboard
  • Ribbon icons: sync · Today view · Dashboard

Install

  1. Install BRAT from Obsidian's community plugin store
  2. Cmd+P → BRAT: Add a beta plugin
  3. Paste caezium/obsidian-dayflow-plugin
  4. Enable Dayflow in Settings → Community plugins

Manual install

  1. Download main.js, manifest.json, styles.css from the latest release (the SQLite WASM is bundled into main.js — no separate asset)
  2. Place them in <vault>/.obsidian/plugins/dayflow/
  3. Reload Obsidian, then enable Dayflow in Settings → Community plugins

Requirements

  • macOS (Dayflow.app is macOS-only)
  • Dayflow installed and recording activity
  • Obsidian 1.8.0 or newer

Setup

After enabling the plugin:

  1. Open Settings → Dayflow
  2. Confirm the Output folder (default 30_resources/Dayflow)
  3. Click Install Bases dashboards to drop the three .base files
  4. (Optional) Toggle Enable ActivityWatch sync if you have ActivityWatch running
  5. Trigger your first sync: Cmd+P → Dayflow: Sync now

Your daily and weekly notes appear under the configured folder. Open the side pane via Cmd+P → Open Today side pane or by clicking the activity icon in the ribbon.


Settings

Group Setting Default What it does
Output outputFolder 30_resources/Dayflow Vault folder for all generated notes
Sync syncDays 3 How many days back each sync covers
Sync skipDaysBefore (empty) YYYY-MM-DD lower bound. Days before this are never synced.
Sync syncOnStartup true Run a sync 5s after Obsidian opens
Sync intervalMinutes 30 Background sync interval. 0 disables.
Sync dbPath (empty) Override path to chunks.sqlite
Formatting categoryWikilinks true Render categories as [[wikilinks]]
Formatting includeDeleted false Include cards marked deleted in Dayflow
Formatting appendToDailyNote false Stamp a callout into your existing Daily Notes file
ActivityWatch awEnabled false Off by default — flip on if you have AW running
ActivityWatch awUrl http://localhost:5600 Your AW server URL
ActivityWatch awWebBrowserOnly true Filter web events to active-browser windows only

Privacy

  • Read-only SQLite — the plugin opens chunks.sqlite with wasmBinary + sql.js in read-only mode. It cannot modify Dayflow's data, even by accident.
  • Zero network calls by default. The only network code path is the optional ActivityWatch enrichment, which only ever talks to localhost:5600.
  • No telemetry. No analytics, no error reporting, no remote logging.
  • Desktop-only. isDesktopOnly: true in the manifest. Runtime guard via Platform.isMobile means even if loaded on mobile, the plugin no-ops cleanly with a one-line explainer.
  • Build provenance. Every release is built in GitHub Actions and signed with a sigstore attestation linking the binary to its exact source commit. Verify with gh attestation verify main.js --owner caezium.

You can audit the network surface with grep -RIE 'fetch\(|axios|requestUrl|XMLHttpRequest|https?://' src/. The only matches will be inside src/data/activitywatch.ts (gated behind the awEnabled toggle) and the SVG XML namespace (http://www.w3.org/2000/svg) which is not a network call.


Build

git clone https://github.com/caezium/obsidian-dayflow-plugin
cd obsidian-dayflow-plugin
npm install
npm run build   # type-check + bundle to main.js

Output: main.js (CJS bundle, ~1 MB — esbuild's binary loader inlines sql-wasm.wasm directly into the bundle so there's no separate asset). Drop that + manifest.json + styles.css into <vault>/.obsidian/plugins/dayflow/.


Architecture notes

  • src/db.tssql.js wrapper. The WASM blob is imported via esbuild's binary loader at build time (import wasmBytes from '../node_modules/sql.js/dist/sql-wasm.wasm') so it ends up inlined in main.js as a Uint8Array. We hand it to initSqlJs({ wasmBinary }) so sql.js never tries to fetch() it — that fails in Electron's renderer.
  • src/data/ — One module per Dayflow table: timeline, journal, standup, goals, ratings, observations. Each gracefully degrades when a table is missing (for older Dayflow schemas).
  • src/aggregators/ — Pure functions that turn rows into category breakdowns, per-app totals, focus heatmaps, context shifts, dominant-category grids, week-over-week deltas, focus streaks, etc.
  • src/viz/ — Pure-JS SVG generators (treemap with nested mode, heatmap, sankey, bars, donut, lines, workflow-grid, hourly-strip, year-heatmap). Text fills use currentColor for theme awareness; app tiles use brand colors via colorForApp.
  • src/exporters/ — Daily-note + weekly-note + year-note + Bases + daily-note-stamp.
  • src/ui/ — Three ItemView subclasses (today, week, dashboard). Today and Week embed their respective notes via MarkdownRenderer.render(); Dashboard is fully DOM-rendered.
  • src/data/activitywatch.ts — REST calls via Obsidian's requestUrl (fetch/axios are CORS-blocked). Auto-discovers window/web/afk buckets.
  • src/util/schema-check.ts — Compares the live SQLite schema to the fingerprint each fetcher expects. Notice for drift, abort for missing-required.

Acknowledgements

  • Dayflow by Jerry Liu — the app that captures everything

License

MIT — see LICENSE.