Developer Build
Doc Chain Sync: One Source, Two Knowledge Destinations
Built a Python pipeline that detects changed Obsidian Markdown and incrementally synchronizes it to Notion and Google Drive, keeping one local source connected to two downstream knowledge systems.
View sourceEvidence
What the work demonstrates
- 98 automated tests passing
- Notion and Google Drive updated from one source
- Incremental state prevents unchanged files from resyncing
Impact
Doc Chain Sync turns one changed Markdown file into controlled updates in both Notion and Google Drive. The local vault remains the source while downstream systems receive the formats and folder structure they need.
The supported impact is functional: one pipeline replaces two separate synchronization paths and skips unchanged files. I do not attach a time-saved, uptime, or adoption metric.
Problem
A local knowledge base can be ideal for authoring while collaboration and retrieval happen elsewhere. Copying documents by hand creates drift, and running full exports on every cycle wastes work while increasing the chance of duplicates.
The system needed to detect change, preserve useful metadata, update existing destinations, and recover cleanly without making either Notion or Google Drive the new source of truth.
Product decision
I chose an incremental dispatcher with explicit state instead of a continuous event system. On each run, it scans selected folders, compares file state, routes changed documents to both destinations, and records successful synchronization.
That design is intentionally boring. A five-minute LaunchAgent schedule is enough for document workflows, easy to inspect, and easier to recover than a queue or webhook system that the use case did not require.
Implementation
The Python dispatcher separates Notion, Google Drive, state, and logging concerns into small modules. The Notion client uses the standard library HTTP stack, while Google Drive synchronization delegates transfer behavior to rclone. A JSON state file records incremental progress.
Dry-run and force modes make changes inspectable. Folder caches avoid redundant destination creation calls during a run, and rotating logs provide an operational record without adding a service dependency.
Verification
Fresh local verification on July 31, 2026 passed 98 automated tests. Coverage exercises dispatch decisions, Notion create and update behavior, Google Drive synchronization, incremental state, dry runs, and smoke paths.
The repository is public and original, so the source and tests are directly inspectable from this case.
Evidence boundary
This case demonstrates system design, Python implementation, API integration, idempotent synchronization behavior, and automated verification. It does not claim production service levels, usage by other people, or measured productivity improvement.
The implementation expects users to supply their own destination credentials and local paths. No private vault content or credential value is part of the public project.