CreatorTrack LifeOS Apps, Build Plan (2026-07-01)¶
URL: https://mkdocs.justinsforge.com/memory/plans/creatortrack-lifeos-apps-build-2026-07-01/
Approved by Justin 2026-07-01 after architecture brainstorm. Companion audit: creatortrack-notion-parity-audit-2026-07-01.
Locked architecture¶
- One collections engine (app.nodes + collection props/views/values/relations). Apps store data as system collections; NO new dedicated domain tables.
- App = node type claimed in components/registry.tsx rendering a custom React module (lens). Data stays ordinary database rows underneath (openable as plain tables).
- App node wraps system child databases it provisions itself, idempotently, code-owned schema (e.g. Habits node -> Definitions + Logs child databases).
- ONE canonical Tasks database; Projects collection relates to it; To-do app is a lens over Tasks; other apps (finance) create task rows via the same mutation path.
- Telegram capture writes through CreatorTrack HTTP API with a bot service token acting as Justin (single source of truth for mutations; Python never duplicates position/RLS/unique-id logic).
- Old Phase 2 Flask-era tables (tasks/habits/inbox/docs schemas) are frozen, not extended. Migration of their rows = optional later one-shot.
Phase 1 (the win): Telegram -> Habits end-to-end¶
lib/system-apps.ts(forge-suite): declarative schema per app +ensureSystemApp(workspaceId, kind)provisioning via existing mutations (createNode/ensureCollection/addProp/addView). Idempotent by slug/type lookup.- Capture API:
app/api/capture/[verb]/route.ts(task | inbox | habit-log), bearer token from env (CAPTURE_TOKEN, secret in ~/.forge-secrets/creatortrack.env, wired into creatortrack-dev.service), maps to Justin's user id, auto-provisions, writes rows via asUser. HabitsAppReact module (components/apps/habits/) registered on typehabits: today checklist (tap = log), streak counts, year heat-map grid per habit. New kit components: StreakGrid, RingProgress.- Sidebar install: creating the
habitsapp node in the workspace (via AppLibrary install or provisioning). - Repoint
scripts/forge_workspace_capture.py(forge repo): newWORKSPACE_WRITE_TARGET=creatortrackmode posting to the capture API;postgresmode kept as rollback. Restart forge-inbox-capture/forge-brain-server with the new flag. Seed the 7 starter habits. - End-to-end test: Telegram "log
" -> row visible in HabitsApp + in the raw Logs database.
Phase 2: Tasks + Projects + To-do lens¶
- Provision canonical Tasks + Projects collections (status/due/priority/relation props). Notion-style views come free from the engine.
- To-do app (type
todoor lens route): Today / overdue / unplanned, TickTick-style, plus unlogged habits surfaced as checkable items. - Capture verbs create_task/save_to_inbox land here.
Phase 3: the connective tissue¶
- Inline/linked database block (embed filtered views in any page) -> Justin's home page.
- Relation display polish (title-aware sort), @mention-a-page in text.
- Food tracker (Meals + Log collections, MFP lens, new log_food capture verb). Finance/fitness re-skins stay later per roadmap.
[Claude Code]