Skip to content

Notion Audit, 2026-04-29

Schema-only audit of all 17 scaffolded Notion DBs (16 in the brain NOTION_DBS map + Published, which exists but isn't wired in). Read-only; no row content captured per Justin's "framework not data" direction. Source data in /tmp/notion-audit/schema-*.json and sample-*.json, regenerable via forge_n8n_call.sh notion-get-database per id.

Headline findings

  1. Title field naming is chaos. 10 distinct title field names across 17 DBs. The brain's tool_query_notion hard-codes "property": "title" lowercase plus the wrong filter shape (rich_text instead of title); search-by-text returns empty for every DB. Live bug, not just style.
  2. Two duplicate Tasks DBs. Life OS Tasks and JWVR Tasks are 90% identical schemas. Same for Projects. Maintaining two of each forks every brain tool, every view, every relation. Research consensus (Marie Poulin, August Bradley, Notion's own teamspace recommendation) is one Tasks DB with a Brand property.
  3. Published is orphan. jwvr_published exists, has 9 properties including pillar relation + per-platform metrics, but is missing from NOTION_DBS in forge_telegram_inbox_brain.py. The brain can read or write Content Ideas and Production but cannot record a Published item.
  4. Daily Log is structurally orphaned. Zero relations. No link to Tasks (what got done today), Habits (what was checked), Wellness Daily (energy data), or Knowledge (lessons captured). It's a journaling silo.
  5. Sponsors title field is named Brand. Confusing; reads as the sponsor's brand-name but UI surfaces it as the page title. Should be Sponsor or Name. Also: no relation from Sponsors to Production or Published, so "this video is sponsored by X" can't be expressed.
  6. Areas has a Color property holding category names. Color (select) options are Health, Wealth, Family, Career, Mind, Hobbies, Home, JWVR, Nova Design, Gus Outdoor. That's the area NAME being duplicated, not a color. Misnamed property; either delete (title field already holds the name) or repurpose for actual color.
  7. Status enums are all 3-state Not started / In progress / Done. Inadequate for several DBs: Reading needs Want to read, Sponsors needs Outreach / Pitching / Active deal / Lost, Production needs Idea / Scripted / Filmed / Edited / Scheduled, Projects needs Active / Paused / Archived.
  8. Inbox has no destination hint property. Capture lands here but the Sort flow (move to Task / Knowledge / Reading / Project / archive) has nowhere to record the human's decision before action. Tags is wrong shape for this; needs a Destination select.
  9. Priority emoji inconsistency. Tasks Priority is ['🔥 Urgent', 'High', 'Medium', 'Low']. One emoji, three plain. Either all four get visual hierarchy or none do.
  10. Wellness Daily is isolated. 23 properties, daily population by forge_wellness_daily_summary.py, no relation to Daily Log. The energy + sleep + HRV data is exactly what should drive a Daily Log review.
  11. TEST DELETE ME ghost DB still exists at 3500950b-d7a9-816b-87e3-fe14d30fd136 under Life OS, leftover from workflow testing.

Per-DB schema breakdown

Life OS

📥 Inbox (3500950b-d7a9-81f8-b8ec-d3125e551973)

Property Type Options
Title title
Notes rich_text
Source select Telegram, iOS Shortcut, Claude Code, Manual, Email, Other
Tags multi_select idea, todo, question, research, forge, refactor, architecture, telegram, ux, bots, inbox-behavior, notion, improvement, mobile, naming, inbox-bot, workflow, infra, cost-control, claude-usage, ai-philosophy, inbox, note, test, home, outdoor, studio, personal, travel
Created created_time
Sorted? checkbox

Observations: title field IS named Title (good, matches brain). Tags multi-select has 29 options, drift toward unmanageable. No Destination property for Sort flow. Sorted? checkbox is the only state signal; binary, no nuance.

✅ Tasks (3500950b-d7a9-81c0-bfc4-f473d7f67f01)

Property Type Options
Task title
Status status Not started, In progress, Done
Priority select 🔥 Urgent, High, Medium, Low
Source select Telegram, iOS Shortcut, Brain, Manual
Due date
Notes rich_text
Area relation -> Areas
Project relation -> Projects
Created created_time
Completed last_edited_time

Observations: title is Task. Brain tool_create_task writes Task (correct here). No Brand property; this is the duplication driver with JWVR Tasks. No Today or Schedule view-driving boolean. Completed field is last_edited_time not date(end), so completion timestamp is fake (any edit updates it).

📦 Projects (3500950b-d7a9-81dd-91ef-c2dc5b8a7e8e)

Property Type Options
Project title
Outcome rich_text
Status status Not started, In progress, Done
Start date
Due date
Area relation -> Areas
Notes rich_text
Created created_time
Related to ✅ Tasks (Project) relation (reciprocal)
Related to 🎯 Goals (Linked Projects) relation (reciprocal)

Observations: title is Project. No Brand property (ditto Tasks duplication). Status enum lacks Active / Paused / Archived lifecycle. Outcome is great (PPV influence) and worth keeping.

🎯 Areas (3500950b-d7a9-811a-8708-c7d7e8f79757)

Property Type Options
Area title
Description rich_text
Active? checkbox
Color select Health, Wealth, Family, Career, Mind, Hobbies, Home, JWVR, Nova Design, Gus Outdoor
Related to ✅ Tasks (Area) relation
Related to 📦 Projects (Area) relation
Related to 🎯 Goals (Area) relation
Related to 🧠 Knowledge (Linked Areas) relation

Sample row count: 3 (likely the seed Areas).

Observations: Color property is misnamed; values are duplicates of title. Either kill it or repurpose to actual color tags (red/orange/green). Areas could be a unification surface across all brands if structured right.

🔁 Habits (3500950b-d7a9-8125-8571-ca97e2369ea6)

Property Type Options
Entry title
Habit select Workout, Meditate, Read, Journal, Walk, No alcohol, ...
Date date
Done? checkbox
Category select Health, Mind, Skill, Social
Notes rich_text

Observations: title is Entry, real habit name lives in Habit select. Brain tool_log_habit writes f"{today}, {habit}" to Entry. Workable but title field is decorative; the queryable identity is Habit + Date. No relation to Areas. No streak rollup.

🧠 Knowledge (3500950b-d7a9-8104-8b58-c290aa756b22)

Property Type Options
Title title
Body rich_text
Source select Conversation, Reading, Observation, Other
Tags multi_select fact, insight, quote, lesson, tool, ...
Topics multi_select (empty)
Linked Areas relation -> Areas
Related to 📚 Reading & Watch (Linked Knowledge) relation (reciprocal)
Created created_time

Sample rows: 3 present.

Observations: dual Tags + Topics multi-select is confusing; pick one. Body in rich_text is fine but caps at ~2000 chars without block fan-out (brain tool truncates). No Type property (MOC vs Note vs Quote vs Reference) that would let LYT/MOC patterns work cleanly.

📝 Daily Log (3500950b-d7a9-8124-99dc-f1a152e6ef62)

Property Type Options
Date title
Mood select 😀 5, 🙂 4, 😐 3, 😕 2, 😞 1
Energy select ⚡ 5, 4, 3, 2, 1
Wins rich_text
Lessons rich_text
Notes rich_text
Created created_time

Observations: ZERO relations. Title is Date. Mood + Energy emoji-prefix select hurts API filtering. Inadequate to surface "what got done today" because Tasks-completed-today rollup is impossible without a relation.

📚 Reading & Watch (3500950b-d7a9-8164-a9c9-e49684ebf939)

Property Type Options
Title title
Type select 📖 Book, 📰 Article, 📺 Video, 🎧 Podcast, 🎓 Course
Author rich_text
Status status Not started, In progress, Done
Started date
Finished date
Rating select ⭐⭐⭐⭐⭐, ⭐⭐⭐⭐, ⭐⭐⭐, ⭐⭐, ⭐
Source URL url
Notes rich_text
Linked Knowledge relation -> Knowledge

Observations: Status should be Want to read / Reading / Finished / Abandoned / Reference. Rating as multi-character emoji string is brittle. No Brand or Pillar link, so research-for-content-creation and personal-learning pile together.

🎯 Goals (3500950b-d7a9-8195-90e3-f9eaa3a16773)

Property Type Options
Goal title
Timeframe select Annual, Quarterly, Monthly, Weekly
Year select 2026, 2027
Quarter select Q1, Q2, Q3, Q4
Status status Not started, In progress, Done
Area relation -> Areas
Linked Projects relation -> Projects
Notes rich_text

Observations: Year and Quarter as separate selects works but couples to manual year-list maintenance. Better: a single Period date or Period Start / End pair. No success metric column (PPV emphasizes measurable goal targets).

JustinWieb-VR

✅ Tasks (3500950b-d7a9-815b-bf06-ca2d98eb774a)

Identical schema to Life OS Tasks except Area relation is missing. Title is Task. Same Status / Priority enums.

Observations: ~95% duplicate of Life OS Tasks. Single biggest consolidation candidate.

📦 Projects (3500950b-d7a9-818d-969a-e2c76e6ac40c)

Same as Life OS Projects minus Area and Goals relations. Title is Project.

Observations: ~85% duplicate of Life OS Projects.

💡 Content Ideas (3500950b-d7a9-812d-81ed-c0e563839ea2)

Property Type Options
Idea title
Hook rich_text
Pillar relation -> Pillars
Platform multi_select YouTube, Instagram, TikTok, X, Newsletter
Status status Not started, In progress, Done
Tags multi_select (empty)
Notes rich_text
Related to 🎬 Production (Linked Idea) relation
Created created_time

Observations: Status enum wrong for an ideation surface. Should be Captured / Sketched / Approved / Promoted-to-Production / Killed. Hook field is good. Missing Format (long-form / short / clip / multi-part series) and Effort estimate.

🎬 Production (3500950b-d7a9-815a-8ab5-db3f2da3ba65)

Property Type Options
Title title
Stage status Not started, In progress, Done
Pillar relation
Linked Idea relation
Platform multi_select YouTube, Instagram, TikTok, X, Newsletter
Asset URLs rich_text
Due date
Notes rich_text

Observations: title is Title (different from Life OS Tasks Task etc.). Stage = Status with 3 generic states; this is the worst-fit Status enum in the workspace because video production has 6+ real stages (Idea, Scripted, Storyboarded, Filmed, Edited, QC, Scheduled, Published). Zero Sponsor link. Asset URLs rich_text instead of file/URL; can't browse. Missing duration / runtime, target publish date vs. due, repurposing-children link.

✅ Published (3500950b-d7a9-81b0-be05-f5d2160eac8c)

Property Type Options
Title title
URL url
Posted date
Platform select YouTube, Instagram, TikTok, X, Newsletter
Pillar relation
Views number
Likes number
Comments number
Notes rich_text

Observations: NOT IN BRAIN'S NOTION_DBS MAP. Brain cannot create or query Published rows. Numbers are point-in-time snapshots; no growth-tracking pattern (would need a separate metrics-snapshot DB or a date-stamped property log). No back-link to Production (the source clip).

🎨 Content Pillars (3500950b-d7a9-814f-b8fa-df15226b0f27)

Property Type Options
Pillar title
Description rich_text
Active? checkbox
Color select (no options seeded)
Related to 💡 Content Ideas relation
Related to 🎬 Production relation
Related to ✅ Published relation

Sample rows: 3 (the seeded pillars: VR Reviews, Tutorials, Family Vlogs, Industry News).

Observations: clean. Could add Target cadence (per-week / per-month) and KPI rich_text.

🤝 Sponsors (3500950b-d7a9-8138-85f5-c94938438fd5)

Property Type Options
Brand title
Contact Name rich_text
Contact Email email
Source select Inbound, Outbound, Referral, Existing
Stage status Not started, In progress, Done
Value number
Last Touched date
Notes rich_text

Observations: title named Brand (semantic confusion). Stage enum 3-state, wrong; sponsorship pipeline needs Outreach / Pitching / Negotiating / Active deal / Wrapped / Lost. No relation to Production or Published; "this video was sponsored by X" can't be expressed in either direction. No Deliverables rollup.

Cross-domain

💪 Wellness Daily (3500950b-d7a9-811c-8e10-f3065f763b35)

23 properties, populated by forge_wellness_daily_summary.py cron at 03:00. Schema is fit-for-purpose for Garmin + HA wellness signals. Title is Date. Sample row count: 1.

Observations: zero relations. Should at minimum link to Daily Log so a one-page review can roll up sleep + HRV next to wins + lessons.


Cross-DB observations

Title field naming map

DB Title prop name
Inbox Title
Tasks (Life OS) Task
Projects (Life OS) Project
Areas Area
Habits Entry
Knowledge Title
Daily Log Date
Reading & Watch Title
Goals Goal
JWVR Tasks Task
JWVR Projects Project
Content Ideas Idea
Production Title
Published Title
Pillars Pillar
Sponsors Brand
Wellness Daily Date

10 distinct title field names. Brain tool_query_notion filter shape is broken for ALL of them.

Live brain bugs to fix during redesign

Source: forge/scripts/forge_telegram_inbox_brain.py

  1. tool_query_notion line 346: {"property": "title", "rich_text": {...}} is wrong on both axes. Use {"property": "<actual title prop>", "title": {"contains": "..."}}. Easiest fix: have the brain look up the title prop name from a static map per database key, OR call notion-get-database once and cache.
  2. tool_update_task line 376: filters on "property": "Task" for the Life OS tasks DB. Couples to title-field naming. Same fix needed.
  3. tool_create_task brand routing: only knows lifeos and jwvr; will need to expand to nova, fishing, bass (or get killed entirely if Tasks is unified).
  4. NOTION_DBS is missing jwvr_published.

Empty DBs (ready to redesign without data migration)

All DBs except Areas (3 rows), Knowledge (3 rows), Pillars (3 rows), and Wellness Daily (1 row) are empty. This is the cheapest possible moment to restructure.

Cleanup target

TEST DELETE ME DB at 3500950b-d7a9-816b-87e3-fe14d30fd136 should be archived from Notion sidebar.


What this audit doesn't cover

  • Notion-side views (pinned, filtered, grouped). Notion API exposes views read-only and only partially. Justin will need to confirm or rebuild views in-app after the redesign.
  • Page templates inside DBs (page-content templates for new rows).
  • Sub-pages, callouts, and any non-DB content under Life OS or JWVR parent pages.
  • Anything in Notion outside the 17 DBs above (e.g., free-floating pages, hand-built dashboards). If those exist they're invisible to this audit.

If Justin has hand-curated dashboards or other DBs not in the brain map, flag them and I'll loop them in.

[Claude Code, Pure Phoenix Notion architect]