Pipeline flow
Every garden moment flows from capture, through processing, to a live, citable record.
Field notes, plant profiles, pest research, seasonal reflections. Markdown frontmatter that n8n can parse.
- Vault folder:
Brandon-Vault/20 Projects/Horticulture/ - 5 templates: plant observation, pest log, propagation log, bed plan, seasonal reflection
- Frontmatter keys map directly to
garden.jsonarrays - Quick capture inbox:
inbox/
Structured operations: who does what when. Six relational databases imported from CSV templates.
- Plants (17 rows pre-seeded)
- Tasks (11 open, priority + due-date sorted)
- Inventory (9 items)
- Treatments, Properties, Propagation
- Each row carries Photo Ref linking back to
garden.json
Four cron-scheduled workflows move data between the tools and the live dashboard without manual copy-paste.
- iCloud photo intake every 5 min
- Notion Tasks → Todoist push every 15 min
- Obsidian markdown →
garden.jsonhourly - Daily 07:00 morning briefing email
Obsidian templates
Drop these into Templater. Each one writes frontmatter that the importer recognizes.
| Template | Frontmatter type | Maps to |
|---|---|---|
plant-observation.md | plant_observation | plants[] |
pest-log.md | pest_log | pests[] |
propagation-log.md | propagation_log | propagation[] |
bed-plan.md | bed_plan | beds[] |
seasonal-reflection.md | seasonal_reflection | meta.seasons[] |
Path: ~/Desktop/Brandon-Vault/20 Projects/Horticulture/templates/
Notion CSV databases
Import each CSV via Notion → New Page → Import → CSV. Pick the matching database template.
| CSV | Notion database | Row count |
|---|---|---|
plants.csv | Plants | 17 |
tasks.csv | Tasks | 11 |
inventory.csv | Inventory | 9 |
treatments.csv | Treatments | 2 |
propagation.csv | Propagation | 11 |
properties.csv | Properties | 1 |
Path: ~/Projects/horticulture-pipeline/notion-csvs/
n8n workflows
Import each JSON via n8n → Workflows → Import. Wire credentials, save, activate.
| # | Workflow | Trigger | What it does |
|---|---|---|---|
| 01 | 01-icloud-photo-intake.json |
Every 5 min | Move new garden photos from iCloud sfg/garden-inbox into the dashboard's img folder, append a JSON record per photo, redeploy. |
| 02 | 02-notion-tasks-to-todoist.json |
Every 15 min | Pull unsynced Open tasks from Notion Tasks database, create matching Todoist tasks with priority + due date, mark synced. |
| 03 | 03-obsidian-to-garden-json.json |
Hourly | Find Obsidian markdown changed since last sync, parse frontmatter into garden.json deltas, redeploy. |
| 04 | 04-morning-briefing.json |
Daily 07:00 | Pull live garden.json, count overdue + due-today tasks + high-severity risks, email a one-screen briefing. |
Path: ~/Projects/horticulture-pipeline/n8n-workflows/
Supporting Python scripts
n8n calls these. You can also run them manually from the command line.
scripts/import_obsidian.py— Parse vault markdown frontmatter intogarden.jsonby note type, upsert by primary key, idempotent.scripts/intake_photos.py— Move new iCloud inbox photos into the dashboard's img folder, append empty JSON entries, bump the next-photo-id counter.
What to install once
One-time setup before the cron jobs do anything useful.
- Create the 6 Notion databases by importing the CSVs in order: Plants, Beds (Properties), Tasks, Inventory, Propagation, Treatments.
- Add an
NOTION_TASKS_DATABASE_IDenv var in n8n with the Tasks database ID. - Connect Notion + Todoist + Email OAuth credentials in n8n.
- Create the iCloud inbox folder:
~/Library/Mobile Documents/com~apple~CloudDocs/sfg/garden-inbox/. - Activate each n8n workflow after a manual test run.
How the three tools split work
- Use Obsidian for thinking: when you need rich notes, observations, research, seasonal insight that needs paragraphs, not fields.
- Use Notion for operations: when sortable, filterable, relational records win over prose.
- Use the live dashboard for triage: when you want one screen to tell you what's urgent today.
- Use n8n for the boring middle: the copying, parsing, notifying, deploying that you should never do by hand.