diff --git a/manifest.json b/manifest.json index f6e0b21..49597d4 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "visual-notes", "name": "Visual Notes", - "version": "1.0.21", + "version": "1.0.22", "minAppVersion": "1.13.0", "description": "A visual workspace built on the Canvas format: nestable freeform boards, icon tile grids, kanban boards, sticky notes, checklists, columns, drawing with pen and highlighter, labels, reactions, and more.", "author": "Daniel Anderson", diff --git a/package-lock.json b/package-lock.json index b8ca147..c2cab31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "visual-notes", - "version": "1.0.21", + "version": "1.0.22", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "visual-notes", - "version": "1.0.21", + "version": "1.0.22", "license": "MIT", "dependencies": { "sortablejs": "^1.15.7" diff --git a/package.json b/package.json index 63fa78a..b5a1e24 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "visual-notes", - "version": "1.0.21", + "version": "1.0.22", "description": "Visual Notes — a visual workspace for Obsidian", "main": "main.js", "scripts": { diff --git a/src/starter-templates.ts b/src/starter-templates.ts index a68441d..231aae2 100644 --- a/src/starter-templates.ts +++ b/src/starter-templates.ts @@ -12,6 +12,7 @@ export interface StarterTemplate { name: string; json: string; } export const STARTER_TEMPLATES: StarterTemplate[] = [ { name: "Brainstorm", json: "{\n \"nodes\": [\n { \"id\": \"bs-callout\", \"x\": -520, \"y\": -460, \"width\": 860, \"height\": 80, \"type\": \"text\",\n \"text\": \"> [!note] 💡\\n> Dump every idea around the central question — no judging yet. Then cluster, pick winners, and commit them to Now / Next / Later.\",\n \"color\": \"#F59E0B\",\n \"ib\": { \"kind\": \"callout\", \"id\": \"bs-callout\", \"text\": \"Dump every idea around the central question — no judging yet. Then cluster, pick winners, and commit them to Now / Next / Later.\", \"icon\": \"💡\", \"color\": \"#F59E0B\" } },\n { \"id\": \"bs-center\", \"x\": -140, \"y\": -160, \"width\": 280, \"height\": 140, \"type\": \"text\",\n \"text\": \"💡 CENTRAL QUESTION\\n\\nHow might we …?\",\n \"color\": \"#FEF3C7\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-center\", \"text\": \"💡 CENTRAL QUESTION\\n\\nHow might we …?\", \"color\": \"#FEF3C7\" } },\n { \"id\": \"bs-i1\", \"x\": -520, \"y\": -320, \"width\": 240, \"height\": 110, \"type\": \"text\",\n \"text\": \"Idea — the wildest version. What would this look like with no constraints?\",\n \"color\": \"#DBEAFE\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-i1\", \"text\": \"Idea — the wildest version. What would this look like with no constraints?\", \"color\": \"#DBEAFE\" } },\n { \"id\": \"bs-i2\", \"x\": -120, \"y\": -340, \"width\": 240, \"height\": 110, \"type\": \"text\",\n \"text\": \"Idea — what would a competitor do?\",\n \"color\": \"#DBEAFE\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-i2\", \"text\": \"Idea — what would a competitor do?\", \"color\": \"#DBEAFE\" } },\n { \"id\": \"bs-i3\", \"x\": 260, \"y\": -320, \"width\": 240, \"height\": 110, \"type\": \"text\",\n \"text\": \"Idea — combine two existing things.\",\n \"color\": \"#DBEAFE\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-i3\", \"text\": \"Idea — combine two existing things.\", \"color\": \"#DBEAFE\" } },\n { \"id\": \"bs-i4\", \"x\": -520, \"y\": -40, \"width\": 240, \"height\": 110, \"type\": \"text\",\n \"text\": \"Idea — invert it. What would make the problem worse? Do the opposite.\",\n \"color\": \"#FCE7F3\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-i4\", \"text\": \"Idea — invert it. What would make the problem worse? Do the opposite.\", \"color\": \"#FCE7F3\" } },\n { \"id\": \"bs-i5\", \"x\": 260, \"y\": -40, \"width\": 240, \"height\": 110, \"type\": \"text\",\n \"text\": \"Idea — what would this look like for one specific person?\",\n \"color\": \"#FCE7F3\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-i5\", \"text\": \"Idea — what would this look like for one specific person?\", \"color\": \"#FCE7F3\" } },\n { \"id\": \"bs-i6\", \"x\": -120, \"y\": 120, \"width\": 240, \"height\": 110, \"type\": \"text\",\n \"text\": \"Idea — the cheapest version we could try this week.\",\n \"color\": \"#D1FAE5\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-i6\", \"text\": \"Idea — the cheapest version we could try this week.\", \"color\": \"#D1FAE5\" } },\n { \"id\": \"bs-actions\", \"x\": -520, \"y\": 320, \"width\": 660, \"height\": 340, \"type\": \"group\", \"label\": \"Commit\",\n \"ib\": { \"kind\": \"kanban-board\", \"id\": \"bs-actions\", \"title\": \"Commit\", \"columns\": [\n { \"id\": \"ba-now\", \"title\": \"Now\", \"color\": \"#10B981\", \"items\": [\n { \"id\": \"bai-1\", \"text\": \"Prototype the cheapest version\", \"done\": false } ] },\n { \"id\": \"ba-next\", \"title\": \"Next\", \"color\": \"#F59E0B\", \"items\": [\n { \"id\": \"bai-2\", \"text\": \"User interviews ×5\", \"done\": false } ] },\n { \"id\": \"ba-later\", \"title\": \"Later\", \"color\": \"#6B7280\", \"items\": [] }\n ] } },\n { \"id\": \"bs-actions::kbhdr::ba-now\", \"x\": -508, \"y\": 356, \"width\": 204, \"height\": 28, \"type\": \"text\", \"text\": \"**Now** (1)\", \"color\": \"#10B981\" },\n { \"id\": \"bs-actions::kbitem::ba-now::bai-1\", \"x\": -508, \"y\": 392, \"width\": 204, \"height\": 44, \"type\": \"text\", \"text\": \"- [ ] Prototype the cheapest version\", \"ib\": { \"id\": \"bai-1\", \"text\": \"Prototype the cheapest version\", \"done\": false } },\n { \"id\": \"bs-actions::kbhdr::ba-next\", \"x\": -292, \"y\": 356, \"width\": 204, \"height\": 28, \"type\": \"text\", \"text\": \"**Next** (1)\", \"color\": \"#F59E0B\" },\n { \"id\": \"bs-actions::kbitem::ba-next::bai-2\", \"x\": -292, \"y\": 392, \"width\": 204, \"height\": 44, \"type\": \"text\", \"text\": \"- [ ] User interviews ×5\", \"ib\": { \"id\": \"bai-2\", \"text\": \"User interviews ×5\", \"done\": false } },\n { \"id\": \"bs-actions::kbhdr::ba-later\", \"x\": -76, \"y\": 356, \"width\": 204, \"height\": 28, \"type\": \"text\", \"text\": \"**Later** (0)\", \"color\": \"#6B7280\" },\n { \"id\": \"bs-grp-parking\", \"x\": 200, \"y\": 320, \"width\": 340, \"height\": 340, \"type\": \"group\", \"label\": \"Parking Lot\", \"color\": \"#6B7280\",\n \"ib\": { \"kind\": \"group\", \"id\": \"bs-grp-parking\", \"label\": \"Parking Lot\", \"color\": \"#6B7280\" } },\n { \"id\": \"bs-parked\", \"x\": 230, \"y\": 380, \"width\": 280, \"height\": 120, \"type\": \"text\",\n \"text\": \"🅿️ Ideas that aren't ready yet — drag them here. Nothing gets deleted during a brainstorm.\",\n \"color\": \"#F3F4F6\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"bs-parked\", \"text\": \"🅿️ Ideas that aren't ready yet — drag them here. Nothing gets deleted during a brainstorm.\", \"color\": \"#F3F4F6\" } }\n ],\n \"edges\": [\n { \"id\": \"be-1\", \"fromNode\": \"bs-center\", \"toNode\": \"bs-i1\", \"color\": \"#F59E0B\", \"ib\": { \"routing\": \"straight\", \"style\": \"solid\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"be-2\", \"fromNode\": \"bs-center\", \"toNode\": \"bs-i2\", \"color\": \"#F59E0B\", \"ib\": { \"routing\": \"straight\", \"style\": \"solid\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"be-3\", \"fromNode\": \"bs-center\", \"toNode\": \"bs-i3\", \"color\": \"#F59E0B\", \"ib\": { \"routing\": \"straight\", \"style\": \"solid\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"be-4\", \"fromNode\": \"bs-center\", \"toNode\": \"bs-i4\", \"color\": \"#F59E0B\", \"ib\": { \"routing\": \"straight\", \"style\": \"solid\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"be-5\", \"fromNode\": \"bs-center\", \"toNode\": \"bs-i5\", \"color\": \"#F59E0B\", \"ib\": { \"routing\": \"straight\", \"style\": \"solid\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"be-6\", \"fromNode\": \"bs-center\", \"toNode\": \"bs-i6\", \"color\": \"#F59E0B\", \"ib\": { \"routing\": \"straight\", \"style\": \"solid\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"be-7\", \"fromNode\": \"bs-i6\", \"toNode\": \"bs-actions\", \"color\": \"#10B981\", \"label\": \"winner\",\n \"ib\": { \"routing\": \"straight\", \"style\": \"dashed\", \"arrowhead\": \"end\", \"thickness\": 2 } }\n ],\n \"ib\": { \"version\": 1, \"layout\": \"freeform\", \"viewport\": { \"x\": 560, \"y\": 500, \"zoom\": 1 } }\n}\n" }, { name: "Cooking & Food", json: "{\n \"nodes\": [\n {\n \"id\": \"ck-callout\",\n \"x\": -520,\n \"y\": -480,\n \"width\": 820,\n \"height\": 80,\n \"type\": \"text\",\n \"text\": \"> [!note] 🍳\\n> Kitchen HQ — plan the week's meals, keep recipes and macros side by side, and save techniques worth rewatching.\",\n \"color\": \"#F97316\",\n \"ib\": {\n \"kind\": \"callout\",\n \"id\": \"ck-callout\",\n \"text\": \"Kitchen HQ — plan the week's meals, keep recipes and macros side by side, and save techniques worth rewatching.\",\n \"icon\": \"🍳\",\n \"color\": \"#F97316\"\n }\n },\n {\n \"id\": \"ck-group-inspo\",\n \"x\": -520,\n \"y\": -360,\n \"width\": 640,\n \"height\": 460,\n \"type\": \"group\",\n \"label\": \"Inspiration\",\n \"color\": \"#F97316\",\n \"ib\": {\n \"kind\": \"group\",\n \"id\": \"ck-group-inspo\",\n \"label\": \"Inspiration\",\n \"color\": \"#F97316\"\n }\n },\n {\n \"id\": \"ck-img-salad\",\n \"x\": -490,\n \"y\": -300,\n \"width\": 280,\n \"height\": 280,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=900&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"ck-img-salad\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=900&q=80\"\n },\n \"caption\": \"Fresh & seasonal\"\n }\n },\n {\n \"id\": \"ck-img-pizza\",\n \"x\": -190,\n \"y\": -300,\n \"width\": 280,\n \"height\": 340,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=900&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"ck-img-pizza\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=900&q=80\"\n },\n \"caption\": \"Friday night project\"\n }\n },\n {\n \"id\": \"ck-img-pancakes\",\n \"x\": -488,\n \"y\": 36,\n \"width\": 280,\n \"height\": 340,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=900&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"ck-img-pancakes\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=900&q=80\"\n },\n \"caption\": \"Weekend brunch\"\n }\n },\n {\n \"id\": \"ck-sticky-inspo\",\n \"x\": -190,\n \"y\": -80,\n \"width\": 280,\n \"height\": 160,\n \"type\": \"text\",\n \"text\": \"📷 Paste your own food photos here — screenshots, restaurant dishes to recreate, plating ideas.\",\n \"color\": \"#FED7AA\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"ck-sticky-inspo\",\n \"text\": \"📷 Paste your own food photos here — screenshots, restaurant dishes to recreate, plating ideas.\",\n \"color\": \"#FED7AA\"\n }\n },\n {\n \"id\": \"ck-group-recipe\",\n \"x\": 160,\n \"y\": -360,\n \"width\": 620,\n \"height\": 460,\n \"type\": \"group\",\n \"label\": \"Recipe Corner\",\n \"color\": \"#10B981\",\n \"ib\": {\n \"kind\": \"group\",\n \"id\": \"ck-group-recipe\",\n \"label\": \"Recipe Corner\",\n \"color\": \"#10B981\"\n }\n },\n {\n \"id\": \"ck-recipe\",\n \"x\": 190,\n \"y\": -300,\n \"width\": 280,\n \"height\": 380,\n \"type\": \"text\",\n \"text\": \"🍝 Weeknight Carbonara — serves 2\\n\\n1. Boil spaghetti in well-salted water.\\n2. Crisp guanciale in a dry pan.\\n3. Whisk eggs + pecorino + lots of black pepper.\\n4. Off the heat, toss pasta with guanciale, add egg mix + a splash of pasta water.\\n5. Stir fast until glossy. Serve immediately.\",\n \"color\": \"#FEF3C7\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"ck-recipe\",\n \"text\": \"🍝 Weeknight Carbonara — serves 2\\n\\n1. Boil spaghetti in well-salted water.\\n2. Crisp guanciale in a dry pan.\\n3. Whisk eggs + pecorino + lots of black pepper.\\n4. Off the heat, toss pasta with guanciale, add egg mix + a splash of pasta water.\\n5. Stir fast until glossy. Serve immediately.\",\n \"color\": \"#FEF3C7\"\n }\n },\n {\n \"id\": \"ck-ingredients\",\n \"x\": 500,\n \"y\": -300,\n \"width\": 250,\n \"height\": 380,\n \"type\": \"text\",\n \"text\": \"### Ingredients\\n\\n- [ ] Spaghetti — 200 g\\n- [ ] Guanciale — 100 g\\n- [ ] Eggs — 3 (2 yolks + 1 whole)\\n- [ ] Pecorino Romano — 50 g\\n- [ ] Black pepper — plenty\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"checklist\",\n \"id\": \"ck-ingredients\",\n \"title\": \"Ingredients\",\n \"color\": \"#FFFFFF\",\n \"accentColor\": \"#10B981\",\n \"items\": [\n {\n \"id\": \"ing-1\",\n \"text\": \"Spaghetti — 200 g\",\n \"done\": false\n },\n {\n \"id\": \"ing-2\",\n \"text\": \"Guanciale — 100 g\",\n \"done\": false\n },\n {\n \"id\": \"ing-3\",\n \"text\": \"Eggs — 3 (2 yolks + 1 whole)\",\n \"done\": false\n },\n {\n \"id\": \"ing-4\",\n \"text\": \"Pecorino Romano — 50 g\",\n \"done\": false\n },\n {\n \"id\": \"ing-5\",\n \"text\": \"Black pepper — plenty\",\n \"done\": false\n }\n ]\n }\n },\n {\n \"id\": \"ck-video\",\n \"x\": 924,\n \"y\": -436,\n \"width\": 480,\n \"height\": 270,\n \"type\": \"link\",\n \"url\": \"https://www.youtube.com/watch?v=PUP7U5vTMM0\",\n \"ib\": {\n \"kind\": \"bookmark\",\n \"id\": \"ck-video\",\n \"url\": \"https://www.youtube.com/watch?v=PUP7U5vTMM0\",\n \"fetchedAt\": 1783801043179,\n \"fetchFailed\": false\n }\n },\n {\n \"id\": \"ck-macros\",\n \"x\": 820,\n \"y\": -40,\n \"width\": 520,\n \"height\": 300,\n \"type\": \"text\",\n \"text\": \"### Macros\\n\\n| Meal | Protein g | Carbs g | Fat g | kcal |\\n| --- | --- | --- | --- | --- |\\n| Carbonara | 32 | 78 | 30 | 720 |\\n| Overnight oats | 22 | 58 | 14 | 450 |\\n| Chicken salad | 38 | 18 | 22 | 420 |\\n| | | | | |\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"table\",\n \"id\": \"ck-macros\",\n \"title\": \"Macros\",\n \"color\": \"#FFFFFF\",\n \"columns\": [\n {\n \"id\": \"m-meal\",\n \"label\": \"Meal\",\n \"type\": \"text\"\n },\n {\n \"id\": \"m-protein\",\n \"label\": \"Protein g\",\n \"type\": \"number\",\n \"align\": \"right\"\n },\n {\n \"id\": \"m-carbs\",\n \"label\": \"Carbs g\",\n \"type\": \"number\",\n \"align\": \"right\"\n },\n {\n \"id\": \"m-fat\",\n \"label\": \"Fat g\",\n \"type\": \"number\",\n \"align\": \"right\"\n },\n {\n \"id\": \"m-kcal\",\n \"label\": \"kcal\",\n \"type\": \"number\",\n \"align\": \"right\"\n }\n ],\n \"rows\": [\n {\n \"id\": \"mr-1\",\n \"cells\": {\n \"m-meal\": \"Carbonara\",\n \"m-protein\": \"32\",\n \"m-carbs\": \"78\",\n \"m-fat\": \"30\",\n \"m-kcal\": \"720\"\n }\n },\n {\n \"id\": \"mr-2\",\n \"cells\": {\n \"m-meal\": \"Overnight oats\",\n \"m-protein\": \"22\",\n \"m-carbs\": \"58\",\n \"m-fat\": \"14\",\n \"m-kcal\": \"450\"\n }\n },\n {\n \"id\": \"mr-3\",\n \"cells\": {\n \"m-meal\": \"Chicken salad\",\n \"m-protein\": \"38\",\n \"m-carbs\": \"18\",\n \"m-fat\": \"22\",\n \"m-kcal\": \"420\"\n }\n },\n {\n \"id\": \"mr-4\",\n \"cells\": {\n \"m-meal\": \"\",\n \"m-protein\": \"\",\n \"m-carbs\": \"\",\n \"m-fat\": \"\",\n \"m-kcal\": \"\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"ck-week\",\n \"x\": -604,\n \"y\": 432,\n \"width\": 640,\n \"height\": 380,\n \"type\": \"group\",\n \"label\": \"Meal Plan — This Week\",\n \"ib\": {\n \"kind\": \"kanban-board\",\n \"id\": \"ck-week\",\n \"title\": \"Meal Plan — This Week\",\n \"columns\": [\n {\n \"id\": \"wk-cook\",\n \"title\": \"To cook 🧑‍🍳\",\n \"color\": \"#F97316\",\n \"items\": [\n {\n \"id\": \"wi-1\",\n \"text\": \"Carbonara — Tue\",\n \"done\": false\n },\n {\n \"id\": \"wi-2\",\n \"text\": \"Sheet-pan salmon — Wed\",\n \"done\": false\n }\n ]\n },\n {\n \"id\": \"wk-prepped\",\n \"title\": \"Prepped 🥡\",\n \"color\": \"#3B82F6\",\n \"items\": [\n {\n \"id\": \"wi-3\",\n \"text\": \"Overnight oats ×3\",\n \"done\": false\n }\n ]\n },\n {\n \"id\": \"wk-done\",\n \"title\": \"Cooked ✔\",\n \"color\": \"#10B981\",\n \"items\": [\n {\n \"id\": \"wi-4\",\n \"text\": \"Chili con carne — froze 4 portions\",\n \"done\": true\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"ck-week::kbhdr::wk-cook\",\n \"type\": \"text\",\n \"x\": -592,\n \"y\": 468,\n \"width\": 197.33333333333334,\n \"height\": 28,\n \"text\": \"**To cook 🧑‍🍳** (2)\",\n \"color\": \"#F97316\"\n },\n {\n \"id\": \"ck-week::kbitem::wk-cook::wi-1\",\n \"type\": \"text\",\n \"x\": -592,\n \"y\": 504,\n \"width\": 197.33333333333334,\n \"height\": 44,\n \"text\": \"- [ ] Carbonara — Tue\",\n \"ib\": {\n \"id\": \"wi-1\",\n \"text\": \"Carbonara — Tue\",\n \"done\": false\n }\n },\n {\n \"id\": \"ck-week::kbitem::wk-cook::wi-2\",\n \"type\": \"text\",\n \"x\": -592,\n \"y\": 556,\n \"width\": 197.33333333333334,\n \"height\": 44,\n \"text\": \"- [ ] Sheet-pan salmon — Wed\",\n \"ib\": {\n \"id\": \"wi-2\",\n \"text\": \"Sheet-pan salmon — Wed\",\n \"done\": false\n }\n },\n {\n \"id\": \"ck-week::kbhdr::wk-prepped\",\n \"type\": \"text\",\n \"x\": -382.66666666666663,\n \"y\": 468,\n \"width\": 197.33333333333334,\n \"height\": 28,\n \"text\": \"**Prepped 🥡** (1)\",\n \"color\": \"#3B82F6\"\n },\n {\n \"id\": \"ck-week::kbitem::wk-prepped::wi-3\",\n \"type\": \"text\",\n \"x\": -382.66666666666663,\n \"y\": 504,\n \"width\": 197.33333333333334,\n \"height\": 44,\n \"text\": \"- [ ] Overnight oats ×3\",\n \"ib\": {\n \"id\": \"wi-3\",\n \"text\": \"Overnight oats ×3\",\n \"done\": false\n }\n },\n {\n \"id\": \"ck-week::kbhdr::wk-done\",\n \"type\": \"text\",\n \"x\": -173.33333333333331,\n \"y\": 468,\n \"width\": 197.33333333333334,\n \"height\": 28,\n \"text\": \"**Cooked ✔** (1)\",\n \"color\": \"#10B981\"\n },\n {\n \"id\": \"ck-week::kbitem::wk-done::wi-4\",\n \"type\": \"text\",\n \"x\": -173.33333333333331,\n \"y\": 504,\n \"width\": 197.33333333333334,\n \"height\": 44,\n \"text\": \"- [x] Chili con carne — froze 4 portions\",\n \"ib\": {\n \"id\": \"wi-4\",\n \"text\": \"Chili con carne — froze 4 portions\",\n \"done\": true\n }\n },\n {\n \"id\": \"ck-pantry\",\n \"x\": 304,\n \"y\": 608,\n \"width\": 280,\n \"height\": 380,\n \"type\": \"text\",\n \"text\": \"### Pantry Restock\\n\\n- [ ] **Produce**\\n - [ ] Basil\\n - [ ] Cherry tomatoes\\n - [ ] Lemons\\n- [ ] **Staples**\\n - [ ] Olive oil\\n - [ ] Spaghetti\\n- [ ] **Fridge**\\n - [ ] Eggs\\n - [ ] Pecorino\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"checklist\",\n \"id\": \"ck-pantry\",\n \"title\": \"Pantry Restock\",\n \"color\": \"#FFFFFF\",\n \"accentColor\": \"#F97316\",\n \"items\": [\n {\n \"id\": \"pt-h1\",\n \"text\": \"Produce\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"pt-1\",\n \"text\": \"Basil\",\n \"done\": false,\n \"parentId\": \"pt-h1\"\n },\n {\n \"id\": \"pt-2\",\n \"text\": \"Cherry tomatoes\",\n \"done\": false,\n \"parentId\": \"pt-h1\"\n },\n {\n \"id\": \"pt-3\",\n \"text\": \"Lemons\",\n \"done\": false,\n \"parentId\": \"pt-h1\"\n },\n {\n \"id\": \"pt-h2\",\n \"text\": \"Staples\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"pt-4\",\n \"text\": \"Olive oil\",\n \"done\": false,\n \"parentId\": \"pt-h2\"\n },\n {\n \"id\": \"pt-5\",\n \"text\": \"Spaghetti\",\n \"done\": false,\n \"parentId\": \"pt-h2\"\n },\n {\n \"id\": \"pt-h3\",\n \"text\": \"Fridge\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"pt-6\",\n \"text\": \"Eggs\",\n \"done\": false,\n \"parentId\": \"pt-h3\"\n },\n {\n \"id\": \"pt-7\",\n \"text\": \"Pecorino\",\n \"done\": false,\n \"parentId\": \"pt-h3\"\n }\n ]\n }\n },\n {\n \"id\": \"ck-comment\",\n \"x\": 480,\n \"y\": 200,\n \"width\": 300,\n \"height\": 220,\n \"type\": \"text\",\n \"text\": \"**Chef** _(11/07/2026, 02:13:20)_\\nCarbonara verdict: 9/10 — silkier than last time. Guanciale > pancetta, confirmed.\\n\\n---\\n**The critics** _(11/07/2026, 03:13:20)_\\nMore pepper next time! 🌶️\",\n \"color\": \"#FEF9C3\",\n \"ib\": {\n \"kind\": \"comment\",\n \"id\": \"ck-comment\",\n \"text\": \"Carbonara verdict: 9/10 — silkier than last time. Guanciale > pancetta, confirmed.\",\n \"author\": \"Chef\",\n \"createdAt\": 1783700000000,\n \"color\": \"#FEF9C3\",\n \"replies\": [\n {\n \"id\": \"cr-1\",\n \"text\": \"More pepper next time! 🌶️\",\n \"author\": \"The critics\",\n \"createdAt\": 1783703600000\n }\n ]\n }\n },\n {\n \"id\": \"ck-map\",\n \"x\": 820,\n \"y\": 320,\n \"width\": 400,\n \"height\": 300,\n \"type\": \"link\",\n \"url\": \"https://www.google.com/maps/search/Borough+Market+London\",\n \"ib\": {\n \"kind\": \"map\",\n \"id\": \"ck-map\",\n \"url\": \"https://www.google.com/maps/search/Borough+Market+London\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"ce-1\",\n \"fromNode\": \"ck-ingredients\",\n \"toNode\": \"ck-recipe\",\n \"color\": \"#10B981\",\n \"label\": \"mise en place\",\n \"ib\": {\n \"routing\": \"straight\",\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 2\n }\n },\n {\n \"id\": \"ce-2\",\n \"fromNode\": \"ck-video\",\n \"toNode\": \"ck-recipe\",\n \"color\": \"#8B5CF6\",\n \"label\": \"watch first\",\n \"ib\": {\n \"routing\": \"straight\",\n \"bend\": 222,\n \"style\": \"dashed\",\n \"arrowhead\": \"end\",\n \"thickness\": 2\n }\n },\n {\n \"id\": \"ce-3\",\n \"fromNode\": \"ck-recipe\",\n \"toNode\": \"ck-macros\",\n \"color\": \"#3B82F6\",\n \"label\": \"log it\",\n \"ib\": {\n \"routing\": \"elbow\",\n \"elbowOrientation\": \"auto\",\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 2\n }\n },\n {\n \"id\": \"ce-4\",\n \"fromNode\": \"ck-pantry\",\n \"toNode\": \"ck-week\",\n \"color\": \"#F97316\",\n \"label\": \"shop → cook\",\n \"ib\": {\n \"labelSize\": 20,\n \"routing\": \"straight\",\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 4\n }\n }\n ],\n \"ib\": {\n \"version\": 1,\n \"layout\": \"freeform\",\n \"viewport\": {\n \"zoom\": 0.6209213230591556,\n \"x\": 500.5858955902702,\n \"y\": 152.93549244309338\n }\n }\n}" }, + { name: "Creative Studio Hub", json: "{\n \"nodes\": [\n {\n \"id\": \"cs-intro\",\n \"x\": -1340,\n \"y\": -820,\n \"width\": 2940,\n \"height\": 90,\n \"type\": \"text\",\n \"text\": \"> [!note] 🎬\\n> Creative Studio Hub — one board, three workflows: a short-film pipeline, an animation corner, and a study desk. Everything here is a live card: drag, edit, connect.\",\n \"color\": \"#0EA5E9\",\n \"ib\": {\n \"kind\": \"callout\",\n \"id\": \"cs-intro\",\n \"text\": \"Creative Studio Hub — one board, three workflows: a short-film pipeline, an animation corner, and a study desk. Everything here is a live card: drag, edit, connect.\",\n \"icon\": \"🎬\",\n \"color\": \"#0EA5E9\"\n }\n },\n {\n \"id\": \"cs-film-title\",\n \"x\": -1340,\n \"y\": -660,\n \"width\": 380,\n \"height\": 170,\n \"type\": \"text\",\n \"text\": \"AFTERGLOW\\n\\na short film\",\n \"color\": \"#D9DDE3\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"cs-film-title\",\n \"text\": \"AFTERGLOW\\n\\na short film\",\n \"color\": \"#D9DDE3\",\n \"textColor\": \"#111827\",\n \"textScale\": \"lg\",\n \"textAlign\": \"center\",\n \"blank\": true,\n \"shape\": \"rect\",\n \"labels\": [\n {\n \"id\": \"cs-ft-label\",\n \"text\": \"IN PRODUCTION\",\n \"color\": \"#F59E0B\"\n }\n ]\n }\n },\n {\n \"id\": \"cs-film-still\",\n \"x\": -920,\n \"y\": -680,\n \"width\": 380,\n \"height\": 250,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=800&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"cs-film-still\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=800&q=80\"\n },\n \"caption\": \"Golden-hour grade reference\",\n \"captionHidden\": false\n }\n },\n {\n \"id\": \"cs-film-comment\",\n \"x\": -480,\n \"y\": -620,\n \"width\": 300,\n \"height\": 160,\n \"type\": \"text\",\n \"text\": \"**Sam** _(16/07/2026)_\\nThe sunset take is the keeper — grade the whole film from this still.\",\n \"color\": \"#F8FAFC\",\n \"ib\": {\n \"kind\": \"comment\",\n \"id\": \"cs-film-comment\",\n \"text\": \"The sunset take is the keeper — grade the whole film from this still.\",\n \"author\": \"Sam\",\n \"createdAt\": 1784246400000,\n \"color\": \"#F8FAFC\",\n \"resolved\": false,\n \"replies\": []\n }\n },\n {\n \"id\": \"cs-kanban\",\n \"x\": -1340,\n \"y\": -420,\n \"width\": 830,\n \"height\": 470,\n \"type\": \"group\",\n \"label\": \"Production pipeline\",\n \"ib\": {\n \"kind\": \"kanban-board\",\n \"id\": \"cs-kanban\",\n \"title\": \"Production pipeline\",\n \"locked\": false,\n \"columns\": [\n {\n \"id\": \"csk-board\",\n \"title\": \"Storyboard\",\n \"color\": \"#64748B\",\n \"bgColor\": \"#F8FAFC\",\n \"items\": [\n {\n \"id\": \"cski-1\",\n \"text\": \"Board scene 4 — rooftop chase\",\n \"done\": false,\n \"tags\": [\n \"act-2\"\n ],\n \"icon\": \"pencil\",\n \"iconColor\": \"#7C3AED\"\n },\n {\n \"id\": \"cski-2\",\n \"text\": \"Animatic pass on the opening\",\n \"done\": false,\n \"subtasks\": [\n {\n \"id\": \"cskis-1\",\n \"text\": \"Block the timing\",\n \"done\": true\n },\n {\n \"id\": \"cskis-2\",\n \"text\": \"Drop in a temp score\",\n \"done\": false\n }\n ]\n }\n ]\n },\n {\n \"id\": \"csk-shoot\",\n \"title\": \"Shooting\",\n \"color\": \"#F59E0B\",\n \"bgColor\": \"#FFFBEB\",\n \"wipLimit\": 2,\n \"items\": [\n {\n \"id\": \"cski-3\",\n \"text\": \"Golden-hour beach take\",\n \"done\": false,\n \"dueDate\": \"2026-07-22\",\n \"tags\": [\n \"priority\"\n ],\n \"thumbnail\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=400&q=80\"\n }\n },\n {\n \"id\": \"cski-4\",\n \"text\": \"Record foley — footsteps on sand\",\n \"done\": false,\n \"icon\": \"mic\",\n \"iconColor\": \"#0EA5E9\",\n \"color\": \"#E0F2FE\"\n }\n ]\n },\n {\n \"id\": \"csk-edit\",\n \"title\": \"Edit\",\n \"color\": \"#10B981\",\n \"bgColor\": \"#ECFDF5\",\n \"items\": [\n {\n \"id\": \"cski-5\",\n \"text\": \"Rough cut — act 1\",\n \"done\": false,\n \"subtasks\": [\n {\n \"id\": \"cskis-3\",\n \"text\": \"Assemble the selects\",\n \"done\": true\n },\n {\n \"id\": \"cskis-4\",\n \"text\": \"Sync music to picture\",\n \"done\": false\n }\n ]\n },\n {\n \"id\": \"cski-6\",\n \"text\": \"Title design\",\n \"done\": true,\n \"icon\": \"check-circle-2\",\n \"iconColor\": \"#16A34A\"\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"cs-kanban::kbhdr::csk-board\",\n \"type\": \"text\",\n \"x\": -1328,\n \"y\": -384,\n \"width\": 260.6666666666667,\n \"height\": 28,\n \"text\": \"**Storyboard** (2)\",\n \"color\": \"#64748B\"\n },\n {\n \"id\": \"cs-kanban::kbitem::csk-board::cski-1\",\n \"type\": \"text\",\n \"x\": -1328,\n \"y\": -348,\n \"width\": 260.6666666666667,\n \"height\": 44,\n \"text\": \"- [ ] Board scene 4 — rooftop chase\",\n \"ib\": {\n \"id\": \"cski-1\",\n \"text\": \"Board scene 4 — rooftop chase\",\n \"done\": false,\n \"tags\": [\n \"act-2\"\n ],\n \"icon\": \"pencil\",\n \"iconColor\": \"#7C3AED\"\n }\n },\n {\n \"id\": \"cs-kanban::kbitem::csk-board::cski-2\",\n \"type\": \"text\",\n \"x\": -1328,\n \"y\": -296,\n \"width\": 260.6666666666667,\n \"height\": 44,\n \"text\": \"- [ ] Animatic pass on the opening\",\n \"ib\": {\n \"id\": \"cski-2\",\n \"text\": \"Animatic pass on the opening\",\n \"done\": false,\n \"subtasks\": [\n {\n \"id\": \"cskis-1\",\n \"text\": \"Block the timing\",\n \"done\": true\n },\n {\n \"id\": \"cskis-2\",\n \"text\": \"Drop in a temp score\",\n \"done\": false\n }\n ]\n }\n },\n {\n \"id\": \"cs-kanban::kbhdr::csk-shoot\",\n \"type\": \"text\",\n \"x\": -1054.6666666666667,\n \"y\": -384,\n \"width\": 260.6666666666667,\n \"height\": 28,\n \"text\": \"**Shooting** (2)\",\n \"color\": \"#F59E0B\"\n },\n {\n \"id\": \"cs-kanban::kbitem::csk-shoot::cski-3\",\n \"type\": \"text\",\n \"x\": -1054.6666666666667,\n \"y\": -348,\n \"width\": 260.6666666666667,\n \"height\": 44,\n \"text\": \"- [ ] Golden-hour beach take\",\n \"ib\": {\n \"id\": \"cski-3\",\n \"text\": \"Golden-hour beach take\",\n \"done\": false,\n \"dueDate\": \"2026-07-22\",\n \"tags\": [\n \"priority\"\n ],\n \"thumbnail\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=400&q=80\"\n }\n }\n },\n {\n \"id\": \"cs-kanban::kbitem::csk-shoot::cski-4\",\n \"type\": \"text\",\n \"x\": -1054.6666666666667,\n \"y\": -296,\n \"width\": 260.6666666666667,\n \"height\": 44,\n \"text\": \"- [ ] Record foley — footsteps on sand\",\n \"ib\": {\n \"id\": \"cski-4\",\n \"text\": \"Record foley — footsteps on sand\",\n \"done\": false,\n \"icon\": \"mic\",\n \"iconColor\": \"#0EA5E9\",\n \"color\": \"#E0F2FE\"\n }\n },\n {\n \"id\": \"cs-kanban::kbhdr::csk-edit\",\n \"type\": \"text\",\n \"x\": -781.3333333333334,\n \"y\": -384,\n \"width\": 260.6666666666667,\n \"height\": 28,\n \"text\": \"**Edit** (2)\",\n \"color\": \"#10B981\"\n },\n {\n \"id\": \"cs-kanban::kbitem::csk-edit::cski-5\",\n \"type\": \"text\",\n \"x\": -781.3333333333334,\n \"y\": -348,\n \"width\": 260.6666666666667,\n \"height\": 44,\n \"text\": \"- [ ] Rough cut — act 1\",\n \"ib\": {\n \"id\": \"cski-5\",\n \"text\": \"Rough cut — act 1\",\n \"done\": false,\n \"subtasks\": [\n {\n \"id\": \"cskis-3\",\n \"text\": \"Assemble the selects\",\n \"done\": true\n },\n {\n \"id\": \"cskis-4\",\n \"text\": \"Sync music to picture\",\n \"done\": false\n }\n ]\n }\n },\n {\n \"id\": \"cs-kanban::kbitem::csk-edit::cski-6\",\n \"type\": \"text\",\n \"x\": -781.3333333333334,\n \"y\": -296,\n \"width\": 260.6666666666667,\n \"height\": 44,\n \"text\": \"- [x] Title design\",\n \"ib\": {\n \"id\": \"cski-6\",\n \"text\": \"Title design\",\n \"done\": true,\n \"icon\": \"check-circle-2\",\n \"iconColor\": \"#16A34A\"\n }\n },\n {\n \"id\": \"cs-script\",\n \"x\": -480,\n \"y\": -400,\n \"width\": 260,\n \"height\": 120,\n \"type\": \"file\",\n \"file\": \"_Assets/Docs/Afterglow-script-v3.pdf\",\n \"ib\": {\n \"kind\": \"file\",\n \"id\": \"cs-script\",\n \"path\": \"_Assets/Docs/Afterglow-script-v3.pdf\"\n }\n },\n {\n \"id\": \"cs-map\",\n \"x\": -480,\n \"y\": -240,\n \"width\": 320,\n \"height\": 210,\n \"type\": \"link\",\n \"url\": \"https://www.google.com/maps?q=Bondi+Beach\",\n \"ib\": {\n \"kind\": \"map\",\n \"id\": \"cs-map\",\n \"url\": \"https://www.google.com/maps?q=Bondi+Beach\"\n }\n },\n {\n \"id\": \"cs-anim-column\",\n \"x\": -60,\n \"y\": -680,\n \"width\": 400,\n \"height\": 580,\n \"type\": \"group\",\n \"label\": \"Animation refs\",\n \"color\": \"#94A3B8\",\n \"ib\": {\n \"kind\": \"column\",\n \"id\": \"cs-anim-column\",\n \"title\": \"Animation refs\",\n \"color\": \"#94A3B8\",\n \"bgColor\": \"#FFFFFF\",\n \"trayColor\": \"#F8FAFC\",\n \"borderColor\": \"#E2E8F0\",\n \"locked\": false,\n \"children\": [\n {\n \"kind\": \"image\",\n \"id\": \"cs-anim-ref\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 320,\n \"h\": 200,\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?auto=format&fit=crop&w=800&q=80\"\n },\n \"captionHidden\": true\n },\n {\n \"kind\": \"sticky\",\n \"id\": \"cs-anim-style\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 320,\n \"h\": 120,\n \"text\": \"Style: painterly light, soft rims, held frames on the 2s.\",\n \"color\": \"#FFF7ED\"\n },\n {\n \"kind\": \"file\",\n \"id\": \"cs-anim-animatic\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 320,\n \"h\": 100,\n \"path\": \"_Assets/Video/animatic-v2.mp4\"\n }\n ]\n }\n },\n {\n \"id\": \"cs-swatch-1\",\n \"x\": -60,\n \"y\": -60,\n \"width\": 90,\n \"height\": 95,\n \"type\": \"text\",\n \"text\": \"#2E1065 — Midnight Violet\",\n \"color\": \"#2E1065\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"cs-swatch-1\",\n \"color\": \"#2E1065\"\n }\n },\n {\n \"id\": \"cs-swatch-2\",\n \"x\": 50,\n \"y\": -60,\n \"width\": 90,\n \"height\": 95,\n \"type\": \"text\",\n \"text\": \"#7C3AED — Purple Zing\",\n \"color\": \"#7C3AED\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"cs-swatch-2\",\n \"color\": \"#7C3AED\"\n }\n },\n {\n \"id\": \"cs-swatch-3\",\n \"x\": 160,\n \"y\": -60,\n \"width\": 90,\n \"height\": 95,\n \"type\": \"text\",\n \"text\": \"#FB7185 — Coral Blush\",\n \"color\": \"#FB7185\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"cs-swatch-3\",\n \"color\": \"#FB7185\"\n }\n },\n {\n \"id\": \"cs-swatch-4\",\n \"x\": 270,\n \"y\": -60,\n \"width\": 90,\n \"height\": 95,\n \"type\": \"text\",\n \"text\": \"#FDE047 — Lemon Glow\",\n \"color\": \"#FDE047\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"cs-swatch-4\",\n \"color\": \"#FDE047\"\n }\n },\n {\n \"id\": \"cs-shotlist\",\n \"x\": -60,\n \"y\": 80,\n \"width\": 400,\n \"height\": 320,\n \"type\": \"text\",\n \"text\": \"### Shot list\\n\\n- [ ] **Act 1 — dawn**\\n - [x] sc01 — wide, tide coming in\\n - [ ] sc02 — close on hands\\n- [ ] **Act 2 — dusk**\\n - [ ] sc03 — silhouette walk-off\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"checklist\",\n \"id\": \"cs-shotlist\",\n \"title\": \"Shot list\",\n \"color\": \"#FFFFFF\",\n \"accentColor\": \"#7C3AED\",\n \"items\": [\n {\n \"id\": \"cs-sl-h1\",\n \"text\": \"Act 1 — dawn\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"cs-sl-1\",\n \"text\": \"sc01 — wide, tide coming in\",\n \"done\": true,\n \"parentId\": \"cs-sl-h1\"\n },\n {\n \"id\": \"cs-sl-2\",\n \"text\": \"sc02 — close on hands\",\n \"done\": false,\n \"parentId\": \"cs-sl-h1\"\n },\n {\n \"id\": \"cs-sl-h2\",\n \"text\": \"Act 2 — dusk\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"cs-sl-3\",\n \"text\": \"sc03 — silhouette walk-off\",\n \"done\": false,\n \"parentId\": \"cs-sl-h2\"\n }\n ]\n }\n },\n {\n \"id\": \"cs-keywords\",\n \"x\": 440,\n \"y\": -120,\n \"width\": 210,\n \"height\": 170,\n \"type\": \"text\",\n \"text\": \"12 fps\\n\\nheld frames\\n\\npainted light\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"cs-keywords\",\n \"text\": \"12 fps\\n\\nheld frames\\n\\npainted light\",\n \"color\": \"#FFFFFF\",\n \"textColor\": \"#7C3AED\",\n \"blank\": true,\n \"textAlign\": \"center\"\n }\n },\n {\n \"id\": \"cs-tile-storyboards\",\n \"x\": -60,\n \"y\": 460,\n \"width\": 190,\n \"height\": 200,\n \"type\": \"file\",\n \"file\": \"Storyboards.canvas\",\n \"color\": \"#7C3AED\",\n \"ib\": {\n \"kind\": \"tile\",\n \"id\": \"cs-tile-storyboards\",\n \"label\": \"Storyboards\",\n \"subtitle\": \"8 boards\",\n \"icon\": \"clapperboard\",\n \"color\": \"#7C3AED\",\n \"target\": {\n \"kind\": \"board\",\n \"path\": \"Storyboards.canvas\"\n }\n }\n },\n {\n \"id\": \"cs-tile-assets\",\n \"x\": 220,\n \"y\": 520,\n \"width\": 190,\n \"height\": 200,\n \"type\": \"file\",\n \"file\": \"Asset Library.canvas\",\n \"color\": \"#0EA5E9\",\n \"ib\": {\n \"kind\": \"tile\",\n \"id\": \"cs-tile-assets\",\n \"label\": \"Asset library\",\n \"subtitle\": \"24 files\",\n \"icon\": \"package\",\n \"color\": \"#0EA5E9\",\n \"target\": {\n \"kind\": \"board\",\n \"path\": \"Asset Library.canvas\"\n }\n }\n },\n {\n \"id\": \"cs-study-group\",\n \"x\": 700,\n \"y\": -700,\n \"width\": 900,\n \"height\": 1140,\n \"type\": \"group\",\n \"label\": \"Study desk\",\n \"color\": \"#10B981\",\n \"ib\": {\n \"kind\": \"group\",\n \"id\": \"cs-study-group\",\n \"label\": \"Study desk\",\n \"color\": \"#10B981\"\n }\n },\n {\n \"id\": \"cs-courses\",\n \"x\": 740,\n \"y\": -640,\n \"width\": 560,\n \"height\": 240,\n \"type\": \"text\",\n \"text\": \"### Course tracker\\n\\n| Course | Status | Next review | Done |\\n| --- | --- | --- | --- |\\n| Colour theory | In progress | 2026-07-21 | |\\n| Anatomy — gesture | Planned | 2026-07-27 | |\\n| Film history essay | Done | 2026-07-12 | true |\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"table\",\n \"id\": \"cs-courses\",\n \"title\": \"Course tracker\",\n \"color\": \"#FFFFFF\",\n \"columns\": [\n {\n \"id\": \"csc-course\",\n \"label\": \"Course\",\n \"type\": \"text\"\n },\n {\n \"id\": \"csc-status\",\n \"label\": \"Status\",\n \"type\": \"select\",\n \"options\": [\n {\n \"label\": \"Planned\",\n \"color\": \"#DBEAFE\"\n },\n {\n \"label\": \"In progress\",\n \"color\": \"#FEF3C7\"\n },\n {\n \"label\": \"Done\",\n \"color\": \"#DCFCE7\"\n }\n ]\n },\n {\n \"id\": \"csc-review\",\n \"label\": \"Next review\",\n \"type\": \"date\",\n \"align\": \"center\"\n },\n {\n \"id\": \"csc-done\",\n \"label\": \"Done\",\n \"type\": \"checkbox\",\n \"align\": \"center\"\n }\n ],\n \"rows\": [\n {\n \"id\": \"cscr-1\",\n \"cells\": {\n \"csc-course\": \"Colour theory\",\n \"csc-status\": \"In progress\",\n \"csc-review\": \"2026-07-21\",\n \"csc-done\": \"\"\n }\n },\n {\n \"id\": \"cscr-2\",\n \"cells\": {\n \"csc-course\": \"Anatomy — gesture\",\n \"csc-status\": \"Planned\",\n \"csc-review\": \"2026-07-27\",\n \"csc-done\": \"\"\n }\n },\n {\n \"id\": \"cscr-3\",\n \"cells\": {\n \"csc-course\": \"Film history essay\",\n \"csc-status\": \"Done\",\n \"csc-review\": \"2026-07-12\",\n \"csc-done\": \"true\"\n },\n \"color\": \"#F0FDF4\"\n }\n ]\n }\n },\n {\n \"id\": \"cs-calendar\",\n \"x\": 740,\n \"y\": -360,\n \"width\": 760,\n \"height\": 340,\n \"type\": \"text\",\n \"text\": \"📅 **Study & shoot calendar**\\n*(Visual Notes calendar view)*\",\n \"ib\": {\n \"kind\": \"calendar\",\n \"id\": \"cs-calendar\",\n \"title\": \"Study & shoot calendar\",\n \"mode\": \"month\",\n \"anchor\": \"2026-07-20\",\n \"dayStyles\": {\n \"2026-07-22\": {\n \"color\": \"#FEF3C7\",\n \"icon\": \"clapperboard\",\n \"importance\": \"high\"\n },\n \"2026-07-27\": {\n \"color\": \"#DBEAFE\",\n \"icon\": \"book-open\",\n \"importance\": \"medium\"\n }\n },\n \"notes\": [\n {\n \"id\": \"cscn-1\",\n \"date\": \"2026-07-22\",\n \"text\": \"Shoot day 1 — golden hour at the beach\",\n \"color\": \"#FEF3C7\",\n \"icon\": \"clapperboard\",\n \"importance\": \"high\"\n },\n {\n \"id\": \"cscn-2\",\n \"date\": \"2026-07-27\",\n \"text\": \"Anatomy revision session\",\n \"color\": \"#DBEAFE\",\n \"icon\": \"book-open\",\n \"importance\": \"medium\"\n }\n ]\n }\n },\n {\n \"id\": \"cs-lecture\",\n \"x\": 740,\n \"y\": 40,\n \"width\": 340,\n \"height\": 190,\n \"type\": \"link\",\n \"url\": \"https://www.youtube.com/watch?v=IlU-zDU6aQ0\",\n \"ib\": {\n \"kind\": \"bookmark\",\n \"id\": \"cs-lecture\",\n \"url\": \"https://www.youtube.com/watch?v=IlU-zDU6aQ0\",\n \"title\": \"Lecture: light & colour\",\n \"description\": \"YouTube links play inline — keep video essays next to your notes.\",\n \"fetchedAt\": 1784246400000,\n \"fetchFailed\": false\n }\n },\n {\n \"id\": \"cs-sticky-idea\",\n \"x\": 1120,\n \"y\": 40,\n \"width\": 210,\n \"height\": 180,\n \"type\": \"text\",\n \"text\": \"💡 Turn each subject's lecture notes into its own board\",\n \"color\": \"#FEF3C7\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"cs-sticky-idea\",\n \"text\": \"💡 Turn each subject's lecture notes into its own board\",\n \"color\": \"#FEF3C7\",\n \"topColor\": \"#F59E0B\",\n \"labels\": [\n {\n \"id\": \"cs-si-label\",\n \"text\": \"IDEA\",\n \"color\": \"#F59E0B\"\n }\n ],\n \"reactions\": [\n \"🔥\"\n ]\n }\n },\n {\n \"id\": \"cs-sticky-todo\",\n \"x\": 1350,\n \"y\": 90,\n \"width\": 210,\n \"height\": 180,\n \"type\": \"text\",\n \"text\": \"Export the colour script as a row of swatch cards\",\n \"color\": \"#E0F2FE\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"cs-sticky-todo\",\n \"text\": \"Export the colour script as a row of swatch cards\",\n \"color\": \"#E0F2FE\",\n \"topColor\": \"#0EA5E9\",\n \"labels\": [\n {\n \"id\": \"cs-st-label\",\n \"text\": \"TODO\",\n \"color\": \"#0EA5E9\"\n }\n ]\n }\n },\n {\n \"id\": \"cs-study-tip\",\n \"x\": 740,\n \"y\": 300,\n \"width\": 560,\n \"height\": 100,\n \"type\": \"text\",\n \"text\": \"> [!note] 🧠\\n> One board per subject — link each lecture note to a tile so revision is one click away.\",\n \"color\": \"#10B981\",\n \"ib\": {\n \"kind\": \"callout\",\n \"id\": \"cs-study-tip\",\n \"text\": \"One board per subject — link each lecture note to a tile so revision is one click away.\",\n \"icon\": \"🧠\",\n \"color\": \"#10B981\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"cs-edge-still\",\n \"fromNode\": \"cs-film-comment\",\n \"toNode\": \"cs-film-still\",\n \"color\": \"#22C55E\",\n \"ib\": {\n \"routing\": \"straight\",\n \"bend\": -45,\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 4\n }\n },\n {\n \"id\": \"cs-edge-schedule\",\n \"fromNode\": \"cs-kanban\",\n \"toNode\": \"cs-calendar\",\n \"color\": \"#7C3AED\",\n \"label\": \"schedule the shoot\",\n \"ib\": {\n \"labelSize\": 14,\n \"routing\": \"elbow\",\n \"elbowOrientation\": \"horizontal-first\",\n \"style\": \"dashed\",\n \"arrowhead\": \"end\",\n \"thickness\": 3\n }\n },\n {\n \"id\": \"cs-edge-palette\",\n \"fromNode\": \"cs-swatch-3\",\n \"toNode\": \"cs-anim-column\",\n \"color\": \"#FB7185\",\n \"label\": \"colour script\",\n \"ib\": {\n \"labelSize\": 13,\n \"routing\": \"straight\",\n \"bend\": 35,\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 2\n }\n },\n {\n \"id\": \"cs-edge-tiles\",\n \"fromNode\": \"cs-tile-storyboards\",\n \"toNode\": \"cs-tile-assets\",\n \"color\": \"#94A3B8\",\n \"ib\": {\n \"routing\": \"straight\",\n \"style\": \"solid\",\n \"arrowhead\": \"none\",\n \"thickness\": 2\n }\n }\n ],\n \"ib\": {\n \"version\": 1,\n \"layout\": \"freeform\",\n \"viewport\": {\n \"zoom\": 0.32,\n \"x\": 940,\n \"y\": 700\n },\n \"drawings\": [\n {\n \"id\": \"cs-ink-circle\",\n \"groupId\": \"cs-keywords-ink\",\n \"points\": [\n { \"x\": 695, \"y\": -37 },\n { \"x\": 687, \"y\": 8 },\n { \"x\": 661, \"y\": 44 },\n { \"x\": 622, \"y\": 71 },\n { \"x\": 573, \"y\": 84 },\n { \"x\": 520, \"y\": 82 },\n { \"x\": 471, \"y\": 67 },\n { \"x\": 432, \"y\": 40 },\n { \"x\": 405, \"y\": 2 },\n { \"x\": 395, \"y\": -38 },\n { \"x\": 406, \"y\": -76 },\n { \"x\": 434, \"y\": -112 },\n { \"x\": 473, \"y\": -139 },\n { \"x\": 521, \"y\": -154 },\n { \"x\": 572, \"y\": -152 },\n { \"x\": 621, \"y\": -137 },\n { \"x\": 660, \"y\": -110 },\n { \"x\": 688, \"y\": -74 },\n { \"x\": 698, \"y\": -45 }\n ],\n \"color\": \"#3B82F6\",\n \"width\": 5\n },\n {\n \"id\": \"cs-ink-highlight\",\n \"groupId\": \"cs-study-ink\",\n \"points\": [\n { \"x\": 760, \"y\": -600 },\n { \"x\": 1080, \"y\": -600 }\n ],\n \"color\": \"#FDE047\",\n \"width\": 22,\n \"opacity\": 0.28\n }\n ]\n }\n}\n" }, { name: "Fashion Moodboard", json: "{\n \"nodes\": [\n {\n \"id\": \"fm-callout\",\n \"x\": -480,\n \"y\": -420,\n \"width\": 740,\n \"height\": 80,\n \"type\": \"text\",\n \"text\": \"> [!note] 👗\\n> Collect inspiration, build a season palette, plan outfits, and track your wardrobe — all in one place.\",\n \"color\": \"#EC4899\",\n \"ib\": {\n \"kind\": \"callout\",\n \"id\": \"fm-callout\",\n \"text\": \"Collect inspiration, build a season palette, plan outfits, and track your wardrobe — all in one place.\",\n \"icon\": \"👗\",\n \"color\": \"#EC4899\"\n }\n },\n {\n \"id\": \"fm-group-inspo\",\n \"x\": -480,\n \"y\": -300,\n \"width\": 560,\n \"height\": 400,\n \"type\": \"group\",\n \"label\": \"Inspiration\",\n \"color\": \"#EC4899\",\n \"ib\": {\n \"kind\": \"group\",\n \"id\": \"fm-group-inspo\",\n \"label\": \"Inspiration\",\n \"color\": \"#EC4899\"\n }\n },\n {\n \"id\": \"fm-sticky-1\",\n \"x\": -450,\n \"y\": -240,\n \"width\": 240,\n \"height\": 200,\n \"type\": \"text\",\n \"text\": \"📸 Drop inspiration images here — paste from the clipboard or drag them in from your files.\",\n \"color\": \"#FBCFE8\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"fm-sticky-1\",\n \"text\": \"📸 Drop inspiration images here — paste from the clipboard or drag them in from your files.\",\n \"color\": \"#FBCFE8\"\n }\n },\n {\n \"id\": \"fm-sticky-2\",\n \"x\": -190,\n \"y\": -240,\n \"width\": 240,\n \"height\": 200,\n \"type\": \"text\",\n \"text\": \"✂️ Textures & fabrics — linen, silk, denim, knit. Note what feels right for the season.\",\n \"color\": \"#E9D5FF\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"fm-sticky-2\",\n \"text\": \"✂️ Textures & fabrics — linen, silk, denim, knit. Note what feels right for the season.\",\n \"color\": \"#E9D5FF\"\n }\n },\n {\n \"id\": \"fm-group-palette\",\n \"x\": 120,\n \"y\": -300,\n \"width\": 400,\n \"height\": 400,\n \"type\": \"group\",\n \"label\": \"Season Palette\",\n \"color\": \"#8E2A3C\",\n \"ib\": {\n \"kind\": \"group\",\n \"id\": \"fm-group-palette\",\n \"label\": \"Season Palette\",\n \"color\": \"#8E2A3C\"\n }\n },\n {\n \"id\": \"fm-swatch-1\",\n \"x\": 150,\n \"y\": -245,\n \"width\": 160,\n \"height\": 160,\n \"type\": \"text\",\n \"text\": \"#D4B896 — Desert Sand\",\n \"color\": \"#D4B896\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"fm-swatch-1\",\n \"color\": \"#D4B896\"\n }\n },\n {\n \"id\": \"fm-swatch-2\",\n \"x\": 330,\n \"y\": -245,\n \"width\": 160,\n \"height\": 160,\n \"type\": \"text\",\n \"text\": \"#2F3A45 — Merlin\",\n \"color\": \"#2F3A45\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"fm-swatch-2\",\n \"color\": \"#2F3A45\"\n }\n },\n {\n \"id\": \"fm-swatch-3\",\n \"x\": 150,\n \"y\": -70,\n \"width\": 160,\n \"height\": 160,\n \"type\": \"text\",\n \"text\": \"#8E2A3C — Chili Red\",\n \"color\": \"#8E2A3C\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"fm-swatch-3\",\n \"color\": \"#8E2A3C\"\n }\n },\n {\n \"id\": \"fm-swatch-4\",\n \"x\": 330,\n \"y\": -70,\n \"width\": 160,\n \"height\": 160,\n \"type\": \"text\",\n \"text\": \"#F3E5D8 — Cream Sand\",\n \"color\": \"#F3E5D8\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"fm-swatch-4\",\n \"color\": \"#F3E5D8\"\n }\n },\n {\n \"id\": \"fm-kanban\",\n \"x\": -480,\n \"y\": 160,\n \"width\": 620,\n \"height\": 400,\n \"type\": \"group\",\n \"label\": \"Outfit Planning\",\n \"ib\": {\n \"kind\": \"kanban-board\",\n \"id\": \"fm-kanban\",\n \"title\": \"Outfit Planning\",\n \"columns\": [\n {\n \"id\": \"kb-ideas\",\n \"title\": \"Ideas 💡\",\n \"color\": \"#EC4899\",\n \"items\": [\n {\n \"id\": \"ki-1\",\n \"text\": \"Linen co-ord for warm days\",\n \"done\": false\n },\n {\n \"id\": \"ki-2\",\n \"text\": \"Monochrome layering\",\n \"done\": false\n }\n ]\n },\n {\n \"id\": \"kb-try\",\n \"title\": \"To try on\",\n \"color\": \"#F59E0B\",\n \"items\": [\n {\n \"id\": \"ki-3\",\n \"text\": \"Denim jacket + white midi\",\n \"done\": false\n }\n ]\n },\n {\n \"id\": \"kb-ready\",\n \"title\": \"Ready to wear\",\n \"color\": \"#10B981\",\n \"items\": [\n {\n \"id\": \"ki-4\",\n \"text\": \"Black blazer evening look\",\n \"done\": true\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"fm-kanban::kbhdr::kb-ideas\",\n \"type\": \"text\",\n \"x\": -468,\n \"y\": 196,\n \"width\": 190.66666666666666,\n \"height\": 28,\n \"text\": \"**Ideas 💡** (2)\",\n \"color\": \"#EC4899\"\n },\n {\n \"id\": \"fm-kanban::kbitem::kb-ideas::ki-1\",\n \"type\": \"text\",\n \"x\": -468,\n \"y\": 232,\n \"width\": 190.66666666666666,\n \"height\": 44,\n \"text\": \"- [ ] Linen co-ord for warm days\",\n \"ib\": {\n \"id\": \"ki-1\",\n \"text\": \"Linen co-ord for warm days\",\n \"done\": false\n }\n },\n {\n \"id\": \"fm-kanban::kbitem::kb-ideas::ki-2\",\n \"type\": \"text\",\n \"x\": -468,\n \"y\": 284,\n \"width\": 190.66666666666666,\n \"height\": 44,\n \"text\": \"- [ ] Monochrome layering\",\n \"ib\": {\n \"id\": \"ki-2\",\n \"text\": \"Monochrome layering\",\n \"done\": false\n }\n },\n {\n \"id\": \"fm-kanban::kbhdr::kb-try\",\n \"type\": \"text\",\n \"x\": -265.33333333333337,\n \"y\": 196,\n \"width\": 190.66666666666666,\n \"height\": 28,\n \"text\": \"**To try on** (1)\",\n \"color\": \"#F59E0B\"\n },\n {\n \"id\": \"fm-kanban::kbitem::kb-try::ki-3\",\n \"type\": \"text\",\n \"x\": -265.33333333333337,\n \"y\": 232,\n \"width\": 190.66666666666666,\n \"height\": 44,\n \"text\": \"- [ ] Denim jacket + white midi\",\n \"ib\": {\n \"id\": \"ki-3\",\n \"text\": \"Denim jacket + white midi\",\n \"done\": false\n }\n },\n {\n \"id\": \"fm-kanban::kbhdr::kb-ready\",\n \"type\": \"text\",\n \"x\": -62.666666666666686,\n \"y\": 196,\n \"width\": 190.66666666666666,\n \"height\": 28,\n \"text\": \"**Ready to wear** (1)\",\n \"color\": \"#10B981\"\n },\n {\n \"id\": \"fm-kanban::kbitem::kb-ready::ki-4\",\n \"type\": \"text\",\n \"x\": -62.666666666666686,\n \"y\": 232,\n \"width\": 190.66666666666666,\n \"height\": 44,\n \"text\": \"- [x] Black blazer evening look\",\n \"ib\": {\n \"id\": \"ki-4\",\n \"text\": \"Black blazer evening look\",\n \"done\": true\n }\n },\n {\n \"id\": \"fm-checklist\",\n \"x\": 180,\n \"y\": 160,\n \"width\": 280,\n \"height\": 340,\n \"type\": \"text\",\n \"text\": \"### Shopping List\\n\\n- [ ] **Essentials**\\n - [ ] White button-down\\n - [ ] Straight-leg jeans\\n - [ ] Leather belt\\n- [ ] **Accessories**\\n - [ ] Gold hoops\\n - [ ] Silk scarf\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"checklist\",\n \"id\": \"fm-checklist\",\n \"title\": \"Shopping List\",\n \"color\": \"#FFFFFF\",\n \"accentColor\": \"#EC4899\",\n \"items\": [\n {\n \"id\": \"cl-h1\",\n \"text\": \"Essentials\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"cl-1\",\n \"text\": \"White button-down\",\n \"done\": false,\n \"parentId\": \"cl-h1\"\n },\n {\n \"id\": \"cl-2\",\n \"text\": \"Straight-leg jeans\",\n \"done\": false,\n \"parentId\": \"cl-h1\"\n },\n {\n \"id\": \"cl-3\",\n \"text\": \"Leather belt\",\n \"done\": false,\n \"parentId\": \"cl-h1\"\n },\n {\n \"id\": \"cl-h2\",\n \"text\": \"Accessories\",\n \"done\": false,\n \"isHeader\": true\n },\n {\n \"id\": \"cl-4\",\n \"text\": \"Gold hoops\",\n \"done\": false,\n \"parentId\": \"cl-h2\"\n },\n {\n \"id\": \"cl-5\",\n \"text\": \"Silk scarf\",\n \"done\": false,\n \"parentId\": \"cl-h2\"\n }\n ]\n }\n },\n {\n \"id\": \"fm-table\",\n \"x\": 500,\n \"y\": 160,\n \"width\": 470,\n \"height\": 340,\n \"type\": \"text\",\n \"text\": \"### Wardrobe Tracker\\n\\n| Item | Brand | Size | Price | Status |\\n| --- | --- | --- | --- | --- |\\n| Trench coat | | M | 120 | Wishlist |\\n| White sneakers | | 38 | 85 | Owned |\\n| | | | | |\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"table\",\n \"id\": \"fm-table\",\n \"title\": \"Wardrobe Tracker\",\n \"color\": \"#FFFFFF\",\n \"columns\": [\n {\n \"id\": \"c-item\",\n \"label\": \"Item\",\n \"type\": \"text\"\n },\n {\n \"id\": \"c-brand\",\n \"label\": \"Brand\",\n \"type\": \"text\"\n },\n {\n \"id\": \"c-size\",\n \"label\": \"Size\",\n \"type\": \"text\",\n \"align\": \"center\"\n },\n {\n \"id\": \"c-price\",\n \"label\": \"Price\",\n \"type\": \"number\",\n \"align\": \"right\"\n },\n {\n \"id\": \"c-status\",\n \"label\": \"Status\",\n \"type\": \"select\",\n \"options\": [\n {\n \"label\": \"Owned\",\n \"color\": \"#10B981\"\n },\n {\n \"label\": \"Wishlist\",\n \"color\": \"#F59E0B\"\n },\n {\n \"label\": \"Ordered\",\n \"color\": \"#3B82F6\"\n }\n ]\n }\n ],\n \"rows\": [\n {\n \"id\": \"r-1\",\n \"cells\": {\n \"c-item\": \"Trench coat\",\n \"c-brand\": \"\",\n \"c-size\": \"M\",\n \"c-price\": \"120\",\n \"c-status\": \"Wishlist\"\n }\n },\n {\n \"id\": \"r-2\",\n \"cells\": {\n \"c-item\": \"White sneakers\",\n \"c-brand\": \"\",\n \"c-size\": \"38\",\n \"c-price\": \"85\",\n \"c-status\": \"Owned\"\n }\n },\n {\n \"id\": \"r-3\",\n \"cells\": {\n \"c-item\": \"\",\n \"c-brand\": \"\",\n \"c-size\": \"\",\n \"c-price\": \"\",\n \"c-status\": \"\"\n }\n }\n ]\n }\n }\n ],\n \"edges\": [],\n \"ib\": {\n \"version\": 1,\n \"layout\": \"freeform\",\n \"viewport\": {\n \"zoom\": 0.6830134553650705,\n \"x\": 747.5963390478794,\n \"y\": 511.97035027918173\n }\n }\n}" }, { name: "Fitness & Habits", json: "{\n \"nodes\": [\n { \"id\": \"fh-callout\", \"x\": -520, \"y\": -420, \"width\": 860, \"height\": 80, \"type\": \"text\",\n \"text\": \"> [!note] 💪\\n> Train, track, repeat — plan the week's sessions, log what actually happened, and let the habits do the heavy lifting.\",\n \"color\": \"#DC2626\",\n \"ib\": { \"kind\": \"callout\", \"id\": \"fh-callout\", \"text\": \"Train, track, repeat — plan the week's sessions, log what actually happened, and let the habits do the heavy lifting.\", \"icon\": \"💪\", \"color\": \"#DC2626\" } },\n { \"id\": \"fh-workouts\", \"x\": -520, \"y\": -300, \"width\": 620, \"height\": 360, \"type\": \"group\", \"label\": \"Workouts\",\n \"ib\": { \"kind\": \"kanban-board\", \"id\": \"fh-workouts\", \"title\": \"Workouts\", \"columns\": [\n { \"id\": \"wo-planned\", \"title\": \"Planned\", \"color\": \"#3B82F6\", \"items\": [\n { \"id\": \"woi-1\", \"text\": \"Push day\", \"done\": false },\n { \"id\": \"woi-2\", \"text\": \"5k easy run\", \"done\": false } ] },\n { \"id\": \"wo-done\", \"title\": \"Done ✔\", \"color\": \"#10B981\", \"items\": [\n { \"id\": \"woi-3\", \"text\": \"Legs + core\", \"done\": true } ] }\n ] } },\n { \"id\": \"fh-workouts::kbhdr::wo-planned\", \"x\": -508, \"y\": -264, \"width\": 292, \"height\": 28, \"type\": \"text\", \"text\": \"**Planned** (2)\", \"color\": \"#3B82F6\" },\n { \"id\": \"fh-workouts::kbitem::wo-planned::woi-1\", \"x\": -508, \"y\": -228, \"width\": 292, \"height\": 44, \"type\": \"text\", \"text\": \"- [ ] Push day\", \"ib\": { \"id\": \"woi-1\", \"text\": \"Push day\", \"done\": false } },\n { \"id\": \"fh-workouts::kbitem::wo-planned::woi-2\", \"x\": -508, \"y\": -176, \"width\": 292, \"height\": 44, \"type\": \"text\", \"text\": \"- [ ] 5k easy run\", \"ib\": { \"id\": \"woi-2\", \"text\": \"5k easy run\", \"done\": false } },\n { \"id\": \"fh-workouts::kbhdr::wo-done\", \"x\": -204, \"y\": -264, \"width\": 292, \"height\": 28, \"type\": \"text\", \"text\": \"**Done ✔** (1)\", \"color\": \"#10B981\" },\n { \"id\": \"fh-workouts::kbitem::wo-done::woi-3\", \"x\": -204, \"y\": -228, \"width\": 292, \"height\": 44, \"type\": \"text\", \"text\": \"- [x] Legs + core\", \"ib\": { \"id\": \"woi-3\", \"text\": \"Legs + core\", \"done\": true } },\n { \"id\": \"fh-log\", \"x\": 140, \"y\": -300, \"width\": 480, \"height\": 320, \"type\": \"text\",\n \"text\": \"### Weekly Log\\n\\n| Day | Workout | Min | Done |\\n| --- | --- | --- | --- |\\n| Mon | Push day | 45 | true |\\n| Wed | Run | 30 | |\\n| Sat | Long walk | 60 | |\",\n \"color\": \"#FFFFFF\",\n \"ib\": { \"kind\": \"table\", \"id\": \"fh-log\", \"title\": \"Weekly Log\", \"color\": \"#FFFFFF\", \"columns\": [\n { \"id\": \"lg-day\", \"label\": \"Day\", \"type\": \"text\", \"align\": \"center\" },\n { \"id\": \"lg-workout\", \"label\": \"Workout\", \"type\": \"text\" },\n { \"id\": \"lg-min\", \"label\": \"Min\", \"type\": \"number\", \"align\": \"right\" },\n { \"id\": \"lg-done\", \"label\": \"Done\", \"type\": \"checkbox\", \"align\": \"center\" }\n ], \"rows\": [\n { \"id\": \"lgr-1\", \"cells\": { \"lg-day\": \"Mon\", \"lg-workout\": \"Push day\", \"lg-min\": \"45\", \"lg-done\": \"true\" } },\n { \"id\": \"lgr-2\", \"cells\": { \"lg-day\": \"Wed\", \"lg-workout\": \"Run\", \"lg-min\": \"30\", \"lg-done\": \"\" } },\n { \"id\": \"lgr-3\", \"cells\": { \"lg-day\": \"Sat\", \"lg-workout\": \"Long walk\", \"lg-min\": \"60\", \"lg-done\": \"\" } }\n ] } },\n { \"id\": \"fh-habits\", \"x\": -520, \"y\": 120, \"width\": 300, \"height\": 340, \"type\": \"text\",\n \"text\": \"### Habits\\n\\n- [ ] **Morning**\\n - [ ] Water 500 ml\\n - [ ] Stretch 10 min\\n- [ ] **Daily**\\n - [ ] 8k steps\\n - [ ] No screens after 22:00\\n- [ ] **Weekly**\\n - [ ] Meal prep\",\n \"color\": \"#FFFFFF\",\n \"ib\": { \"kind\": \"checklist\", \"id\": \"fh-habits\", \"title\": \"Habits\", \"color\": \"#FFFFFF\", \"accentColor\": \"#DC2626\", \"items\": [\n { \"id\": \"hb-h1\", \"text\": \"Morning\", \"done\": false, \"isHeader\": true },\n { \"id\": \"hb-1\", \"text\": \"Water 500 ml\", \"done\": false, \"parentId\": \"hb-h1\" },\n { \"id\": \"hb-2\", \"text\": \"Stretch 10 min\", \"done\": false, \"parentId\": \"hb-h1\" },\n { \"id\": \"hb-h2\", \"text\": \"Daily\", \"done\": false, \"isHeader\": true },\n { \"id\": \"hb-3\", \"text\": \"8k steps\", \"done\": false, \"parentId\": \"hb-h2\" },\n { \"id\": \"hb-4\", \"text\": \"No screens after 22:00\", \"done\": false, \"parentId\": \"hb-h2\" },\n { \"id\": \"hb-h3\", \"text\": \"Weekly\", \"done\": false, \"isHeader\": true },\n { \"id\": \"hb-5\", \"text\": \"Meal prep\", \"done\": false, \"parentId\": \"hb-h3\" }\n ] } },\n { \"id\": \"fh-goal\", \"x\": -180, \"y\": 120, \"width\": 280, \"height\": 140, \"type\": \"text\",\n \"text\": \"🎯 GOAL\\n\\n5k under 25:00 by October. Log every run — the trend line is the reward.\",\n \"color\": \"#FEE2E2\",\n \"ib\": { \"kind\": \"sticky\", \"id\": \"fh-goal\", \"text\": \"🎯 GOAL\\n\\n5k under 25:00 by October. Log every run — the trend line is the reward.\", \"color\": \"#FEE2E2\" } },\n { \"id\": \"fh-video\", \"x\": 140, \"y\": 80, \"width\": 420, \"height\": 240, \"type\": \"link\",\n \"url\": \"https://www.youtube.com/watch?v=v7AYKMP6rOE\",\n \"ib\": { \"kind\": \"bookmark\", \"id\": \"fh-video\", \"url\": \"https://www.youtube.com/watch?v=v7AYKMP6rOE\" } }\n ],\n \"edges\": [\n { \"id\": \"fe-1\", \"fromNode\": \"fh-habits\", \"toNode\": \"fh-log\", \"color\": \"#DC2626\", \"label\": \"track it\",\n \"ib\": { \"routing\": \"elbow\", \"elbowOrientation\": \"auto\", \"style\": \"dashed\", \"arrowhead\": \"end\", \"thickness\": 2 } },\n { \"id\": \"fe-2\", \"fromNode\": \"fh-video\", \"toNode\": \"fh-workouts\", \"color\": \"#6B7280\", \"label\": \"recovery day\",\n \"ib\": { \"routing\": \"straight\", \"style\": \"dashed\", \"arrowhead\": \"end\", \"thickness\": 2 } }\n ],\n \"ib\": { \"version\": 1, \"layout\": \"freeform\", \"viewport\": { \"x\": 560, \"y\": 460, \"zoom\": 1 } }\n}\n" }, { name: "Project Ideas", json: "{\n \"nodes\": [\n {\n \"id\": \"pi-intro\",\n \"x\": -1240,\n \"y\": -800,\n \"width\": 2420,\n \"height\": 90,\n \"type\": \"text\",\n \"text\": \"> [!note] 🗂️\\n> Project Ideas — a moodboard-style project hub: brief, inspiration, palette, budget, and this week's tasks. Replace the sample brand with your own.\",\n \"color\": \"#64748B\",\n \"ib\": {\n \"kind\": \"callout\",\n \"id\": \"pi-intro\",\n \"text\": \"Project Ideas — a moodboard-style project hub: brief, inspiration, palette, budget, and this week's tasks. Replace the sample brand with your own.\",\n \"icon\": \"🗂️\",\n \"color\": \"#64748B\"\n }\n },\n {\n \"id\": \"pi-about\",\n \"x\": -1240,\n \"y\": -640,\n \"width\": 420,\n \"height\": 500,\n \"type\": \"group\",\n \"label\": \"About\",\n \"color\": \"#94A3B8\",\n \"ib\": {\n \"kind\": \"column\",\n \"id\": \"pi-about\",\n \"title\": \"About\",\n \"color\": \"#94A3B8\",\n \"bgColor\": \"#FFFFFF\",\n \"trayColor\": \"#F8FAFC\",\n \"borderColor\": \"#E2E8F0\",\n \"locked\": false,\n \"children\": [\n {\n \"kind\": \"sticky\",\n \"id\": \"pi-about-brief\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 340,\n \"h\": 210,\n \"text\": \"MIRA is a modern fashion label known for its minimalist aesthetics, high-quality craftsmanship, and versatile pieces. The website should reflect the brand's ethos: understated elegance, sustainability, and timeless design.\",\n \"color\": \"#FFFFFF\"\n },\n {\n \"kind\": \"file\",\n \"id\": \"pi-about-pdf\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 340,\n \"h\": 110,\n \"path\": \"_Assets/Docs/Brand-Brief.pdf\"\n }\n ]\n }\n },\n {\n \"id\": \"pi-logo\",\n \"x\": -1240,\n \"y\": -70,\n \"width\": 380,\n \"height\": 210,\n \"type\": \"text\",\n \"text\": \"M I R A\",\n \"color\": \"#D9DDE3\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"pi-logo\",\n \"text\": \"M I R A\",\n \"color\": \"#D9DDE3\",\n \"textColor\": \"#111827\",\n \"textScale\": \"lg\",\n \"textAlign\": \"center\",\n \"blank\": true,\n \"shape\": \"rect\"\n }\n },\n {\n \"id\": \"pi-week\",\n \"x\": -1240,\n \"y\": 200,\n \"width\": 380,\n \"height\": 250,\n \"type\": \"text\",\n \"text\": \"### This week\\n\\n- [x] Develop moodboards\\n- [x] Present to client\\n- [ ] Create website wireframes\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"checklist\",\n \"id\": \"pi-week\",\n \"title\": \"This week\",\n \"color\": \"#FFFFFF\",\n \"items\": [\n {\n \"id\": \"pi-week-1\",\n \"text\": \"Develop moodboards\",\n \"done\": true\n },\n {\n \"id\": \"pi-week-2\",\n \"text\": \"Present to client\",\n \"done\": true\n },\n {\n \"id\": \"pi-week-3\",\n \"text\": \"Create website wireframes\",\n \"done\": false\n }\n ]\n }\n },\n {\n \"id\": \"pi-model\",\n \"x\": -760,\n \"y\": -640,\n \"width\": 330,\n \"height\": 440,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1509631179647-0177331693ae?auto=format&fit=crop&w=800&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"pi-model\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1509631179647-0177331693ae?auto=format&fit=crop&w=800&q=80\"\n },\n \"captionHidden\": true\n }\n },\n {\n \"id\": \"pi-swatch\",\n \"x\": -400,\n \"y\": -300,\n \"width\": 160,\n \"height\": 190,\n \"type\": \"text\",\n \"text\": \"#FF2E58 — Radical Red\",\n \"color\": \"#FF2E58\",\n \"ib\": {\n \"kind\": \"swatch\",\n \"id\": \"pi-swatch\",\n \"color\": \"#FF2E58\"\n }\n },\n {\n \"id\": \"pi-tile-brainstorm\",\n \"x\": -700,\n \"y\": 300,\n \"width\": 190,\n \"height\": 200,\n \"type\": \"file\",\n \"file\": \"Brainstorm.canvas\",\n \"color\": \"#A16207\",\n \"ib\": {\n \"kind\": \"tile\",\n \"id\": \"pi-tile-brainstorm\",\n \"label\": \"Brainstorm\",\n \"subtitle\": \"12 cards\",\n \"icon\": \"flower\",\n \"color\": \"#A16207\",\n \"target\": {\n \"kind\": \"board\",\n \"path\": \"Brainstorm.canvas\"\n }\n }\n },\n {\n \"id\": \"pi-tile-moodboards\",\n \"x\": -410,\n \"y\": 380,\n \"width\": 190,\n \"height\": 210,\n \"type\": \"file\",\n \"file\": \"Moodboards.canvas\",\n \"color\": \"#1E40AF\",\n \"ib\": {\n \"kind\": \"tile\",\n \"id\": \"pi-tile-moodboards\",\n \"label\": \"Moodboards\",\n \"subtitle\": \"16 cards, 2 files\",\n \"icon\": \"layout-grid\",\n \"color\": \"#1E40AF\",\n \"target\": {\n \"kind\": \"board\",\n \"path\": \"Moodboards.canvas\"\n }\n }\n },\n {\n \"id\": \"pi-inspiration\",\n \"x\": -140,\n \"y\": -640,\n \"width\": 420,\n \"height\": 640,\n \"type\": \"group\",\n \"label\": \"Inspiration\",\n \"color\": \"#94A3B8\",\n \"ib\": {\n \"kind\": \"column\",\n \"id\": \"pi-inspiration\",\n \"title\": \"Inspiration\",\n \"color\": \"#94A3B8\",\n \"bgColor\": \"#FFFFFF\",\n \"trayColor\": \"#F8FAFC\",\n \"borderColor\": \"#E2E8F0\",\n \"locked\": false,\n \"children\": [\n {\n \"kind\": \"sticky\",\n \"id\": \"pi-insp-typeface\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 340,\n \"h\": 170,\n \"text\": \"Abc\",\n \"color\": \"#22C55E\",\n \"textColor\": \"#052E16\",\n \"textScale\": \"lg\",\n \"textAlign\": \"center\",\n \"blank\": true\n },\n {\n \"kind\": \"image\",\n \"id\": \"pi-insp-runway\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 340,\n \"h\": 220,\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1515886657613-9f3515b0c78f?auto=format&fit=crop&w=800&q=80\"\n },\n \"captionHidden\": true\n },\n {\n \"kind\": \"file\",\n \"id\": \"pi-insp-video\",\n \"x\": 0,\n \"y\": 0,\n \"w\": 340,\n \"h\": 100,\n \"path\": \"_Assets/Video/runway-models.mp4\"\n }\n ]\n }\n },\n {\n \"id\": \"pi-budget\",\n \"x\": -140,\n \"y\": 90,\n \"width\": 470,\n \"height\": 250,\n \"type\": \"text\",\n \"text\": \"### Budget\\n\\n| Project stage | Cost |\\n| --- | --- |\\n| 2 x directional moodboards | $400.00 |\\n| 1 x set of wireframes | $900.00 |\\n| 2 x homepage design concepts | $1,600.00 |\\n| Total | $2,900.00 |\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"table\",\n \"id\": \"pi-budget\",\n \"title\": \"Budget\",\n \"color\": \"#FFFFFF\",\n \"columns\": [\n {\n \"id\": \"pib-stage\",\n \"label\": \"Project stage\",\n \"type\": \"text\"\n },\n {\n \"id\": \"pib-cost\",\n \"label\": \"Cost\",\n \"type\": \"text\",\n \"align\": \"right\"\n }\n ],\n \"rows\": [\n {\n \"id\": \"pibr-1\",\n \"cells\": {\n \"pib-stage\": \"2 x directional moodboards\",\n \"pib-cost\": \"$400.00\"\n }\n },\n {\n \"id\": \"pibr-2\",\n \"cells\": {\n \"pib-stage\": \"1 x set of wireframes\",\n \"pib-cost\": \"$900.00\"\n }\n },\n {\n \"id\": \"pibr-3\",\n \"cells\": {\n \"pib-stage\": \"2 x homepage design concepts\",\n \"pib-cost\": \"$1,600.00\"\n }\n },\n {\n \"id\": \"pibr-4\",\n \"cells\": {\n \"pib-stage\": \"Total\",\n \"pib-cost\": \"$2,900.00\"\n },\n \"color\": \"#F1F5F9\"\n }\n ]\n }\n },\n {\n \"id\": \"pi-texture\",\n \"x\": 420,\n \"y\": -640,\n \"width\": 360,\n \"height\": 330,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1550684376-efcbd6e3f031?auto=format&fit=crop&w=800&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"pi-texture\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1550684376-efcbd6e3f031?auto=format&fit=crop&w=800&q=80\"\n },\n \"caption\": \"Wall texture\",\n \"captionHidden\": false\n }\n },\n {\n \"id\": \"pi-comment\",\n \"x\": 860,\n \"y\": -520,\n \"width\": 320,\n \"height\": 170,\n \"type\": \"text\",\n \"text\": \"**Marc** _(15/07/2026)_\\nWould be great if we could use this honeycomb pattern on the website.\",\n \"color\": \"#F8FAFC\",\n \"ib\": {\n \"kind\": \"comment\",\n \"id\": \"pi-comment\",\n \"text\": \"Would be great if we could use this honeycomb pattern on the website.\",\n \"author\": \"Marc\",\n \"createdAt\": 1784160000000,\n \"color\": \"#F8FAFC\",\n \"resolved\": false,\n \"replies\": []\n }\n },\n {\n \"id\": \"pi-look\",\n \"x\": 880,\n \"y\": -290,\n \"width\": 300,\n \"height\": 400,\n \"type\": \"link\",\n \"url\": \"https://images.unsplash.com/photo-1495385794356-15371f348c31?auto=format&fit=crop&w=800&q=80\",\n \"ib\": {\n \"kind\": \"image\",\n \"id\": \"pi-look\",\n \"source\": {\n \"type\": \"external\",\n \"url\": \"https://images.unsplash.com/photo-1495385794356-15371f348c31?auto=format&fit=crop&w=800&q=80\"\n },\n \"captionHidden\": true\n }\n },\n {\n \"id\": \"pi-keywords\",\n \"x\": 430,\n \"y\": -230,\n \"width\": 210,\n \"height\": 180,\n \"type\": \"text\",\n \"text\": \"Sleek\\n\\nSculptural\\n\\nEdgy\",\n \"color\": \"#FFFFFF\",\n \"ib\": {\n \"kind\": \"sticky\",\n \"id\": \"pi-keywords\",\n \"text\": \"Sleek\\n\\nSculptural\\n\\nEdgy\",\n \"color\": \"#FFFFFF\",\n \"textColor\": \"#1D4ED8\",\n \"blank\": true,\n \"textAlign\": \"center\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"pi-edge-logo\",\n \"fromNode\": \"pi-swatch\",\n \"toNode\": \"pi-logo\",\n \"color\": \"#22C55E\",\n \"ib\": {\n \"routing\": \"straight\",\n \"bend\": 60,\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 4\n }\n },\n {\n \"id\": \"pi-edge-comment\",\n \"fromNode\": \"pi-comment\",\n \"toNode\": \"pi-texture\",\n \"color\": \"#22C55E\",\n \"ib\": {\n \"routing\": \"straight\",\n \"bend\": -50,\n \"style\": \"solid\",\n \"arrowhead\": \"end\",\n \"thickness\": 4\n }\n },\n {\n \"id\": \"pi-edge-tiles\",\n \"fromNode\": \"pi-tile-brainstorm\",\n \"toNode\": \"pi-tile-moodboards\",\n \"color\": \"#94A3B8\",\n \"ib\": {\n \"routing\": \"straight\",\n \"style\": \"solid\",\n \"arrowhead\": \"none\",\n \"thickness\": 2\n }\n }\n ],\n \"ib\": {\n \"version\": 1,\n \"layout\": \"freeform\",\n \"viewport\": {\n \"zoom\": 0.36,\n \"x\": 880,\n \"y\": 700\n },\n \"drawings\": [\n {\n \"id\": \"pi-ink-circle\",\n \"groupId\": \"pi-keywords-ink\",\n \"points\": [\n { \"x\": 680, \"y\": -147 },\n { \"x\": 672, \"y\": -102 },\n { \"x\": 646, \"y\": -66 },\n { \"x\": 607, \"y\": -39 },\n { \"x\": 558, \"y\": -26 },\n { \"x\": 505, \"y\": -28 },\n { \"x\": 456, \"y\": -43 },\n { \"x\": 417, \"y\": -70 },\n { \"x\": 390, \"y\": -108 },\n { \"x\": 380, \"y\": -148 },\n { \"x\": 391, \"y\": -186 },\n { \"x\": 419, \"y\": -222 },\n { \"x\": 458, \"y\": -249 },\n { \"x\": 506, \"y\": -264 },\n { \"x\": 557, \"y\": -262 },\n { \"x\": 606, \"y\": -247 },\n { \"x\": 645, \"y\": -220 },\n { \"x\": 673, \"y\": -184 },\n { \"x\": 683, \"y\": -155 }\n ],\n \"color\": \"#3B82F6\",\n \"width\": 5\n }\n ]\n }\n}\n" }, diff --git a/templates-src/Creative Studio Hub.canvas b/templates-src/Creative Studio Hub.canvas new file mode 100644 index 0000000..1eefa22 --- /dev/null +++ b/templates-src/Creative Studio Hub.canvas @@ -0,0 +1,950 @@ +{ + "nodes": [ + { + "id": "cs-intro", + "x": -1340, + "y": -820, + "width": 2940, + "height": 90, + "type": "text", + "text": "> [!note] 🎬\n> Creative Studio Hub — one board, three workflows: a short-film pipeline, an animation corner, and a study desk. Everything here is a live card: drag, edit, connect.", + "color": "#0EA5E9", + "ib": { + "kind": "callout", + "id": "cs-intro", + "text": "Creative Studio Hub — one board, three workflows: a short-film pipeline, an animation corner, and a study desk. Everything here is a live card: drag, edit, connect.", + "icon": "🎬", + "color": "#0EA5E9" + } + }, + { + "id": "cs-film-title", + "x": -1340, + "y": -660, + "width": 380, + "height": 170, + "type": "text", + "text": "AFTERGLOW\n\na short film", + "color": "#D9DDE3", + "ib": { + "kind": "sticky", + "id": "cs-film-title", + "text": "AFTERGLOW\n\na short film", + "color": "#D9DDE3", + "textColor": "#111827", + "textScale": "lg", + "textAlign": "center", + "blank": true, + "shape": "rect", + "labels": [ + { + "id": "cs-ft-label", + "text": "IN PRODUCTION", + "color": "#F59E0B" + } + ] + } + }, + { + "id": "cs-film-still", + "x": -920, + "y": -680, + "width": 380, + "height": 250, + "type": "link", + "url": "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=800&q=80", + "ib": { + "kind": "image", + "id": "cs-film-still", + "source": { + "type": "external", + "url": "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=800&q=80" + }, + "caption": "Golden-hour grade reference", + "captionHidden": false + } + }, + { + "id": "cs-film-comment", + "x": -480, + "y": -620, + "width": 300, + "height": 160, + "type": "text", + "text": "**Sam** _(16/07/2026)_\nThe sunset take is the keeper — grade the whole film from this still.", + "color": "#F8FAFC", + "ib": { + "kind": "comment", + "id": "cs-film-comment", + "text": "The sunset take is the keeper — grade the whole film from this still.", + "author": "Sam", + "createdAt": 1784246400000, + "color": "#F8FAFC", + "resolved": false, + "replies": [] + } + }, + { + "id": "cs-kanban", + "x": -1340, + "y": -420, + "width": 830, + "height": 470, + "type": "group", + "label": "Production pipeline", + "ib": { + "kind": "kanban-board", + "id": "cs-kanban", + "title": "Production pipeline", + "locked": false, + "columns": [ + { + "id": "csk-board", + "title": "Storyboard", + "color": "#64748B", + "bgColor": "#F8FAFC", + "items": [ + { + "id": "cski-1", + "text": "Board scene 4 — rooftop chase", + "done": false, + "tags": [ + "act-2" + ], + "icon": "pencil", + "iconColor": "#7C3AED" + }, + { + "id": "cski-2", + "text": "Animatic pass on the opening", + "done": false, + "subtasks": [ + { + "id": "cskis-1", + "text": "Block the timing", + "done": true + }, + { + "id": "cskis-2", + "text": "Drop in a temp score", + "done": false + } + ] + } + ] + }, + { + "id": "csk-shoot", + "title": "Shooting", + "color": "#F59E0B", + "bgColor": "#FFFBEB", + "wipLimit": 2, + "items": [ + { + "id": "cski-3", + "text": "Golden-hour beach take", + "done": false, + "dueDate": "2026-07-22", + "tags": [ + "priority" + ], + "thumbnail": { + "type": "external", + "url": "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=400&q=80" + } + }, + { + "id": "cski-4", + "text": "Record foley — footsteps on sand", + "done": false, + "icon": "mic", + "iconColor": "#0EA5E9", + "color": "#E0F2FE" + } + ] + }, + { + "id": "csk-edit", + "title": "Edit", + "color": "#10B981", + "bgColor": "#ECFDF5", + "items": [ + { + "id": "cski-5", + "text": "Rough cut — act 1", + "done": false, + "subtasks": [ + { + "id": "cskis-3", + "text": "Assemble the selects", + "done": true + }, + { + "id": "cskis-4", + "text": "Sync music to picture", + "done": false + } + ] + }, + { + "id": "cski-6", + "text": "Title design", + "done": true, + "icon": "check-circle-2", + "iconColor": "#16A34A" + } + ] + } + ] + } + }, + { + "id": "cs-kanban::kbhdr::csk-board", + "type": "text", + "x": -1328, + "y": -384, + "width": 260.6666666666667, + "height": 28, + "text": "**Storyboard** (2)", + "color": "#64748B" + }, + { + "id": "cs-kanban::kbitem::csk-board::cski-1", + "type": "text", + "x": -1328, + "y": -348, + "width": 260.6666666666667, + "height": 44, + "text": "- [ ] Board scene 4 — rooftop chase", + "ib": { + "id": "cski-1", + "text": "Board scene 4 — rooftop chase", + "done": false, + "tags": [ + "act-2" + ], + "icon": "pencil", + "iconColor": "#7C3AED" + } + }, + { + "id": "cs-kanban::kbitem::csk-board::cski-2", + "type": "text", + "x": -1328, + "y": -296, + "width": 260.6666666666667, + "height": 44, + "text": "- [ ] Animatic pass on the opening", + "ib": { + "id": "cski-2", + "text": "Animatic pass on the opening", + "done": false, + "subtasks": [ + { + "id": "cskis-1", + "text": "Block the timing", + "done": true + }, + { + "id": "cskis-2", + "text": "Drop in a temp score", + "done": false + } + ] + } + }, + { + "id": "cs-kanban::kbhdr::csk-shoot", + "type": "text", + "x": -1054.6666666666667, + "y": -384, + "width": 260.6666666666667, + "height": 28, + "text": "**Shooting** (2)", + "color": "#F59E0B" + }, + { + "id": "cs-kanban::kbitem::csk-shoot::cski-3", + "type": "text", + "x": -1054.6666666666667, + "y": -348, + "width": 260.6666666666667, + "height": 44, + "text": "- [ ] Golden-hour beach take", + "ib": { + "id": "cski-3", + "text": "Golden-hour beach take", + "done": false, + "dueDate": "2026-07-22", + "tags": [ + "priority" + ], + "thumbnail": { + "type": "external", + "url": "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=400&q=80" + } + } + }, + { + "id": "cs-kanban::kbitem::csk-shoot::cski-4", + "type": "text", + "x": -1054.6666666666667, + "y": -296, + "width": 260.6666666666667, + "height": 44, + "text": "- [ ] Record foley — footsteps on sand", + "ib": { + "id": "cski-4", + "text": "Record foley — footsteps on sand", + "done": false, + "icon": "mic", + "iconColor": "#0EA5E9", + "color": "#E0F2FE" + } + }, + { + "id": "cs-kanban::kbhdr::csk-edit", + "type": "text", + "x": -781.3333333333334, + "y": -384, + "width": 260.6666666666667, + "height": 28, + "text": "**Edit** (2)", + "color": "#10B981" + }, + { + "id": "cs-kanban::kbitem::csk-edit::cski-5", + "type": "text", + "x": -781.3333333333334, + "y": -348, + "width": 260.6666666666667, + "height": 44, + "text": "- [ ] Rough cut — act 1", + "ib": { + "id": "cski-5", + "text": "Rough cut — act 1", + "done": false, + "subtasks": [ + { + "id": "cskis-3", + "text": "Assemble the selects", + "done": true + }, + { + "id": "cskis-4", + "text": "Sync music to picture", + "done": false + } + ] + } + }, + { + "id": "cs-kanban::kbitem::csk-edit::cski-6", + "type": "text", + "x": -781.3333333333334, + "y": -296, + "width": 260.6666666666667, + "height": 44, + "text": "- [x] Title design", + "ib": { + "id": "cski-6", + "text": "Title design", + "done": true, + "icon": "check-circle-2", + "iconColor": "#16A34A" + } + }, + { + "id": "cs-script", + "x": -480, + "y": -400, + "width": 260, + "height": 120, + "type": "file", + "file": "_Assets/Docs/Afterglow-script-v3.pdf", + "ib": { + "kind": "file", + "id": "cs-script", + "path": "_Assets/Docs/Afterglow-script-v3.pdf" + } + }, + { + "id": "cs-map", + "x": -480, + "y": -240, + "width": 320, + "height": 210, + "type": "link", + "url": "https://www.google.com/maps?q=Bondi+Beach", + "ib": { + "kind": "map", + "id": "cs-map", + "url": "https://www.google.com/maps?q=Bondi+Beach" + } + }, + { + "id": "cs-anim-column", + "x": -60, + "y": -680, + "width": 400, + "height": 580, + "type": "group", + "label": "Animation refs", + "color": "#94A3B8", + "ib": { + "kind": "column", + "id": "cs-anim-column", + "title": "Animation refs", + "color": "#94A3B8", + "bgColor": "#FFFFFF", + "trayColor": "#F8FAFC", + "borderColor": "#E2E8F0", + "locked": false, + "children": [ + { + "kind": "image", + "id": "cs-anim-ref", + "x": 0, + "y": 0, + "w": 320, + "h": 200, + "source": { + "type": "external", + "url": "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?auto=format&fit=crop&w=800&q=80" + }, + "captionHidden": true + }, + { + "kind": "sticky", + "id": "cs-anim-style", + "x": 0, + "y": 0, + "w": 320, + "h": 120, + "text": "Style: painterly light, soft rims, held frames on the 2s.", + "color": "#FFF7ED" + }, + { + "kind": "file", + "id": "cs-anim-animatic", + "x": 0, + "y": 0, + "w": 320, + "h": 100, + "path": "_Assets/Video/animatic-v2.mp4" + } + ] + } + }, + { + "id": "cs-swatch-1", + "x": -60, + "y": -60, + "width": 90, + "height": 95, + "type": "text", + "text": "#2E1065 — Midnight Violet", + "color": "#2E1065", + "ib": { + "kind": "swatch", + "id": "cs-swatch-1", + "color": "#2E1065" + } + }, + { + "id": "cs-swatch-2", + "x": 50, + "y": -60, + "width": 90, + "height": 95, + "type": "text", + "text": "#7C3AED — Purple Zing", + "color": "#7C3AED", + "ib": { + "kind": "swatch", + "id": "cs-swatch-2", + "color": "#7C3AED" + } + }, + { + "id": "cs-swatch-3", + "x": 160, + "y": -60, + "width": 90, + "height": 95, + "type": "text", + "text": "#FB7185 — Coral Blush", + "color": "#FB7185", + "ib": { + "kind": "swatch", + "id": "cs-swatch-3", + "color": "#FB7185" + } + }, + { + "id": "cs-swatch-4", + "x": 270, + "y": -60, + "width": 90, + "height": 95, + "type": "text", + "text": "#FDE047 — Lemon Glow", + "color": "#FDE047", + "ib": { + "kind": "swatch", + "id": "cs-swatch-4", + "color": "#FDE047" + } + }, + { + "id": "cs-shotlist", + "x": -60, + "y": 80, + "width": 400, + "height": 320, + "type": "text", + "text": "### Shot list\n\n- [ ] **Act 1 — dawn**\n - [x] sc01 — wide, tide coming in\n - [ ] sc02 — close on hands\n- [ ] **Act 2 — dusk**\n - [ ] sc03 — silhouette walk-off", + "color": "#FFFFFF", + "ib": { + "kind": "checklist", + "id": "cs-shotlist", + "title": "Shot list", + "color": "#FFFFFF", + "accentColor": "#7C3AED", + "items": [ + { + "id": "cs-sl-h1", + "text": "Act 1 — dawn", + "done": false, + "isHeader": true + }, + { + "id": "cs-sl-1", + "text": "sc01 — wide, tide coming in", + "done": true, + "parentId": "cs-sl-h1" + }, + { + "id": "cs-sl-2", + "text": "sc02 — close on hands", + "done": false, + "parentId": "cs-sl-h1" + }, + { + "id": "cs-sl-h2", + "text": "Act 2 — dusk", + "done": false, + "isHeader": true + }, + { + "id": "cs-sl-3", + "text": "sc03 — silhouette walk-off", + "done": false, + "parentId": "cs-sl-h2" + } + ] + } + }, + { + "id": "cs-keywords", + "x": 440, + "y": -120, + "width": 210, + "height": 170, + "type": "text", + "text": "12 fps\n\nheld frames\n\npainted light", + "color": "#FFFFFF", + "ib": { + "kind": "sticky", + "id": "cs-keywords", + "text": "12 fps\n\nheld frames\n\npainted light", + "color": "#FFFFFF", + "textColor": "#7C3AED", + "blank": true, + "textAlign": "center" + } + }, + { + "id": "cs-tile-storyboards", + "x": -60, + "y": 460, + "width": 190, + "height": 200, + "type": "file", + "file": "Storyboards.canvas", + "color": "#7C3AED", + "ib": { + "kind": "tile", + "id": "cs-tile-storyboards", + "label": "Storyboards", + "subtitle": "8 boards", + "icon": "clapperboard", + "color": "#7C3AED", + "target": { + "kind": "board", + "path": "Storyboards.canvas" + } + } + }, + { + "id": "cs-tile-assets", + "x": 220, + "y": 520, + "width": 190, + "height": 200, + "type": "file", + "file": "Asset Library.canvas", + "color": "#0EA5E9", + "ib": { + "kind": "tile", + "id": "cs-tile-assets", + "label": "Asset library", + "subtitle": "24 files", + "icon": "package", + "color": "#0EA5E9", + "target": { + "kind": "board", + "path": "Asset Library.canvas" + } + } + }, + { + "id": "cs-study-group", + "x": 700, + "y": -700, + "width": 900, + "height": 1140, + "type": "group", + "label": "Study desk", + "color": "#10B981", + "ib": { + "kind": "group", + "id": "cs-study-group", + "label": "Study desk", + "color": "#10B981" + } + }, + { + "id": "cs-courses", + "x": 740, + "y": -640, + "width": 560, + "height": 240, + "type": "text", + "text": "### Course tracker\n\n| Course | Status | Next review | Done |\n| --- | --- | --- | --- |\n| Colour theory | In progress | 2026-07-21 | |\n| Anatomy — gesture | Planned | 2026-07-27 | |\n| Film history essay | Done | 2026-07-12 | true |", + "color": "#FFFFFF", + "ib": { + "kind": "table", + "id": "cs-courses", + "title": "Course tracker", + "color": "#FFFFFF", + "columns": [ + { + "id": "csc-course", + "label": "Course", + "type": "text" + }, + { + "id": "csc-status", + "label": "Status", + "type": "select", + "options": [ + { + "label": "Planned", + "color": "#DBEAFE" + }, + { + "label": "In progress", + "color": "#FEF3C7" + }, + { + "label": "Done", + "color": "#DCFCE7" + } + ] + }, + { + "id": "csc-review", + "label": "Next review", + "type": "date", + "align": "center" + }, + { + "id": "csc-done", + "label": "Done", + "type": "checkbox", + "align": "center" + } + ], + "rows": [ + { + "id": "cscr-1", + "cells": { + "csc-course": "Colour theory", + "csc-status": "In progress", + "csc-review": "2026-07-21", + "csc-done": "" + } + }, + { + "id": "cscr-2", + "cells": { + "csc-course": "Anatomy — gesture", + "csc-status": "Planned", + "csc-review": "2026-07-27", + "csc-done": "" + } + }, + { + "id": "cscr-3", + "cells": { + "csc-course": "Film history essay", + "csc-status": "Done", + "csc-review": "2026-07-12", + "csc-done": "true" + }, + "color": "#F0FDF4" + } + ] + } + }, + { + "id": "cs-calendar", + "x": 740, + "y": -360, + "width": 760, + "height": 340, + "type": "text", + "text": "📅 **Study & shoot calendar**\n*(Visual Notes calendar view)*", + "ib": { + "kind": "calendar", + "id": "cs-calendar", + "title": "Study & shoot calendar", + "mode": "month", + "anchor": "2026-07-20", + "dayStyles": { + "2026-07-22": { + "color": "#FEF3C7", + "icon": "clapperboard", + "importance": "high" + }, + "2026-07-27": { + "color": "#DBEAFE", + "icon": "book-open", + "importance": "medium" + } + }, + "notes": [ + { + "id": "cscn-1", + "date": "2026-07-22", + "text": "Shoot day 1 — golden hour at the beach", + "color": "#FEF3C7", + "icon": "clapperboard", + "importance": "high" + }, + { + "id": "cscn-2", + "date": "2026-07-27", + "text": "Anatomy revision session", + "color": "#DBEAFE", + "icon": "book-open", + "importance": "medium" + } + ] + } + }, + { + "id": "cs-lecture", + "x": 740, + "y": 40, + "width": 340, + "height": 190, + "type": "link", + "url": "https://www.youtube.com/watch?v=IlU-zDU6aQ0", + "ib": { + "kind": "bookmark", + "id": "cs-lecture", + "url": "https://www.youtube.com/watch?v=IlU-zDU6aQ0", + "title": "Lecture: light & colour", + "description": "YouTube links play inline — keep video essays next to your notes.", + "fetchedAt": 1784246400000, + "fetchFailed": false + } + }, + { + "id": "cs-sticky-idea", + "x": 1120, + "y": 40, + "width": 210, + "height": 180, + "type": "text", + "text": "💡 Turn each subject's lecture notes into its own board", + "color": "#FEF3C7", + "ib": { + "kind": "sticky", + "id": "cs-sticky-idea", + "text": "💡 Turn each subject's lecture notes into its own board", + "color": "#FEF3C7", + "topColor": "#F59E0B", + "labels": [ + { + "id": "cs-si-label", + "text": "IDEA", + "color": "#F59E0B" + } + ], + "reactions": [ + "🔥" + ] + } + }, + { + "id": "cs-sticky-todo", + "x": 1350, + "y": 90, + "width": 210, + "height": 180, + "type": "text", + "text": "Export the colour script as a row of swatch cards", + "color": "#E0F2FE", + "ib": { + "kind": "sticky", + "id": "cs-sticky-todo", + "text": "Export the colour script as a row of swatch cards", + "color": "#E0F2FE", + "topColor": "#0EA5E9", + "labels": [ + { + "id": "cs-st-label", + "text": "TODO", + "color": "#0EA5E9" + } + ] + } + }, + { + "id": "cs-study-tip", + "x": 740, + "y": 300, + "width": 560, + "height": 100, + "type": "text", + "text": "> [!note] 🧠\n> One board per subject — link each lecture note to a tile so revision is one click away.", + "color": "#10B981", + "ib": { + "kind": "callout", + "id": "cs-study-tip", + "text": "One board per subject — link each lecture note to a tile so revision is one click away.", + "icon": "🧠", + "color": "#10B981" + } + } + ], + "edges": [ + { + "id": "cs-edge-still", + "fromNode": "cs-film-comment", + "toNode": "cs-film-still", + "color": "#22C55E", + "ib": { + "routing": "straight", + "bend": -45, + "style": "solid", + "arrowhead": "end", + "thickness": 4 + } + }, + { + "id": "cs-edge-schedule", + "fromNode": "cs-kanban", + "toNode": "cs-calendar", + "color": "#7C3AED", + "label": "schedule the shoot", + "ib": { + "labelSize": 14, + "routing": "elbow", + "elbowOrientation": "horizontal-first", + "style": "dashed", + "arrowhead": "end", + "thickness": 3 + } + }, + { + "id": "cs-edge-palette", + "fromNode": "cs-swatch-3", + "toNode": "cs-anim-column", + "color": "#FB7185", + "label": "colour script", + "ib": { + "labelSize": 13, + "routing": "straight", + "bend": 35, + "style": "solid", + "arrowhead": "end", + "thickness": 2 + } + }, + { + "id": "cs-edge-tiles", + "fromNode": "cs-tile-storyboards", + "toNode": "cs-tile-assets", + "color": "#94A3B8", + "ib": { + "routing": "straight", + "style": "solid", + "arrowhead": "none", + "thickness": 2 + } + } + ], + "ib": { + "version": 1, + "layout": "freeform", + "viewport": { + "zoom": 0.32, + "x": 940, + "y": 700 + }, + "drawings": [ + { + "id": "cs-ink-circle", + "groupId": "cs-keywords-ink", + "points": [ + { "x": 695, "y": -37 }, + { "x": 687, "y": 8 }, + { "x": 661, "y": 44 }, + { "x": 622, "y": 71 }, + { "x": 573, "y": 84 }, + { "x": 520, "y": 82 }, + { "x": 471, "y": 67 }, + { "x": 432, "y": 40 }, + { "x": 405, "y": 2 }, + { "x": 395, "y": -38 }, + { "x": 406, "y": -76 }, + { "x": 434, "y": -112 }, + { "x": 473, "y": -139 }, + { "x": 521, "y": -154 }, + { "x": 572, "y": -152 }, + { "x": 621, "y": -137 }, + { "x": 660, "y": -110 }, + { "x": 688, "y": -74 }, + { "x": 698, "y": -45 } + ], + "color": "#3B82F6", + "width": 5 + }, + { + "id": "cs-ink-highlight", + "groupId": "cs-study-ink", + "points": [ + { "x": 760, "y": -600 }, + { "x": 1080, "y": -600 } + ], + "color": "#FDE047", + "width": 22, + "opacity": 0.28 + } + ] + } +} diff --git a/versions.json b/versions.json index 19af4c0..be6dd48 100644 --- a/versions.json +++ b/versions.json @@ -20,5 +20,6 @@ "1.0.18": "1.7.2", "1.0.19": "1.7.2", "1.0.20": "1.13.0", - "1.0.21": "1.13.0" + "1.0.21": "1.13.0", + "1.0.22": "1.13.0" }