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¶
- Title field naming is chaos. 10 distinct title field names across 17 DBs. The brain's
tool_query_notionhard-codes"property": "title"lowercase plus the wrong filter shape (rich_textinstead oftitle); search-by-text returns empty for every DB. Live bug, not just style. - 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
Brandproperty. - Published is orphan.
jwvr_publishedexists, has 9 properties including pillar relation + per-platform metrics, but is missing fromNOTION_DBSinforge_telegram_inbox_brain.py. The brain can read or write Content Ideas and Production but cannot record a Published item. - 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.
- Sponsors title field is named
Brand. Confusing; reads as the sponsor's brand-name but UI surfaces it as the page title. Should beSponsororName. Also: no relation from Sponsors to Production or Published, so "this video is sponsored by X" can't be expressed. - Areas has a
Colorproperty holding category names.Color(select) options areHealth, 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. - Status enums are all 3-state
Not started / In progress / Done. Inadequate for several DBs: Reading needsWant to read, Sponsors needsOutreach / Pitching / Active deal / Lost, Production needsIdea / Scripted / Filmed / Edited / Scheduled, Projects needsActive / Paused / Archived. - 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.
Tagsis wrong shape for this; needs aDestinationselect. - Priority emoji inconsistency. Tasks Priority is
['🔥 Urgent', 'High', 'Medium', 'Low']. One emoji, three plain. Either all four get visual hierarchy or none do. - 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. TEST DELETE MEghost DB still exists at3500950b-d7a9-816b-87e3-fe14d30fd136under 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 | ||
| 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
tool_query_notionline 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 perdatabasekey, OR callnotion-get-databaseonce and cache.tool_update_taskline 376: filters on"property": "Task"for the Life OS tasks DB. Couples to title-field naming. Same fix needed.tool_create_taskbrand routing: only knowslifeosandjwvr; will need to expand tonova,fishing,bass(or get killed entirely if Tasks is unified).NOTION_DBSis missingjwvr_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]