NOTEDASHBOARD
arrowboy47

personal-data-warehouse

Append-only ETL: Obsidian daily notes + 5 Google Sheets → Postgres over SSH tunnel, with dashboard. Built via architect/contractor agent workflow.

Personal Data Warehouse

Append-only ETL pipeline that consolidates six personal data sources, Obsidian daily-note tasks plus five Google Sheets (morning check-in form, workouts, LeetCode practice, purchases, job search), into a PostgreSQL warehouse, with a dashboard on top.

Architecture

  • Sync (sync.py + pdw/): Python, no framework. Reads daily notes from disk and sheets via the Google Sheets REST API (OAuth refresh-token flow), upserts into Postgres using per-source natural keys so re-runs are idempotent.
  • Postgres runs in Docker on a separate home server; the sync opens an SSH tunnel rather than exposing 5432 on the LAN.
  • Scheduling: invoked nightly at 3am by an agent cron scheduler (no-agent script entry) with a Telegram alert on failure.
  • Dashboard (dashboard/): read-only views over the warehouse.

Design docs

The repo keeps the planning artifacts the build was driven from: PRODUCT_BRIEF.md, ARCHITECTURE.md, BUILD_PLAN.md (tasks with executable Verify: commands), TEST_PLAN.md, USER_STORIES.md. The build followed an architect/contractor workflow: a frontier model wrote the plan, a local model executed tasks, each verified by shell command.

Setup

python3 -m venv .venv && .venv/bin/pip install psycopg2-binary
cp .env.example .env   # fill in DB credentials and sheet IDs
.venv/bin/python sync.py --source all

Google auth expects an OAuth token JSON (with spreadsheets scope) — path configured in pdw/config.py.

Related

How to Install

  1. Download the dashboard markdown file from GitHub
  2. Drop it into your vault (anywhere)
  3. Install the Homepage plugin and point it at the file
  4. Enable any listed CSS snippets for the intended look

Stats

Stars

0

Forks

0

Last updated 3mo ago

Categories