diff --git a/static/ui-generation-sketch-01/access.js b/static/2024-04-26-ui-generation-sketch-01/access.js similarity index 100% rename from static/ui-generation-sketch-01/access.js rename to static/2024-04-26-ui-generation-sketch-01/access.js diff --git a/static/ui-generation-sketch-01/arena.js b/static/2024-04-26-ui-generation-sketch-01/arena.js similarity index 100% rename from static/ui-generation-sketch-01/arena.js rename to static/2024-04-26-ui-generation-sketch-01/arena.js diff --git a/static/ui-generation-sketch-01/index.html b/static/2024-04-26-ui-generation-sketch-01/index.html similarity index 100% rename from static/ui-generation-sketch-01/index.html rename to static/2024-04-26-ui-generation-sketch-01/index.html diff --git a/static/ui-generation-sketch-01/llm.js b/static/2024-04-26-ui-generation-sketch-01/llm.js similarity index 100% rename from static/ui-generation-sketch-01/llm.js rename to static/2024-04-26-ui-generation-sketch-01/llm.js diff --git a/static/ui-generation-sketch-02/access.js b/static/2024-04-28-ui-generation-sketch-02/access.js similarity index 100% rename from static/ui-generation-sketch-02/access.js rename to static/2024-04-28-ui-generation-sketch-02/access.js diff --git a/static/ui-generation-sketch-02/arena.js b/static/2024-04-28-ui-generation-sketch-02/arena.js similarity index 100% rename from static/ui-generation-sketch-02/arena.js rename to static/2024-04-28-ui-generation-sketch-02/arena.js diff --git a/static/ui-generation-sketch-02/index.html b/static/2024-04-28-ui-generation-sketch-02/index.html similarity index 100% rename from static/ui-generation-sketch-02/index.html rename to static/2024-04-28-ui-generation-sketch-02/index.html diff --git a/static/ui-generation-sketch-02/llm.js b/static/2024-04-28-ui-generation-sketch-02/llm.js similarity index 100% rename from static/ui-generation-sketch-02/llm.js rename to static/2024-04-28-ui-generation-sketch-02/llm.js diff --git a/static/ui-generation-sketch-02/viewer.html b/static/2024-04-28-ui-generation-sketch-02/viewer.html similarity index 100% rename from static/ui-generation-sketch-02/viewer.html rename to static/2024-04-28-ui-generation-sketch-02/viewer.html diff --git a/static/frp-graph-01/graph.js b/static/2024-05-12-frp-graph-01/graph.js similarity index 100% rename from static/frp-graph-01/graph.js rename to static/2024-05-12-frp-graph-01/graph.js diff --git a/static/frp-graph-01/index.html b/static/2024-05-12-frp-graph-01/index.html similarity index 100% rename from static/frp-graph-01/index.html rename to static/2024-05-12-frp-graph-01/index.html diff --git a/static/frp-graph-02/graph.js b/static/2024-05-12-frp-graph-02/graph.js similarity index 100% rename from static/frp-graph-02/graph.js rename to static/2024-05-12-frp-graph-02/graph.js diff --git a/static/frp-graph-02/index.html b/static/2024-05-12-frp-graph-02/index.html similarity index 100% rename from static/frp-graph-02/index.html rename to static/2024-05-12-frp-graph-02/index.html diff --git a/static/dissector/analysis-card.js b/static/2024-05-15-dissector/analysis-card.js similarity index 100% rename from static/dissector/analysis-card.js rename to static/2024-05-15-dissector/analysis-card.js diff --git a/static/dissector/app.js b/static/2024-05-15-dissector/app.js similarity index 100% rename from static/dissector/app.js rename to static/2024-05-15-dissector/app.js diff --git a/static/dissector/index.html b/static/2024-05-15-dissector/index.html similarity index 100% rename from static/dissector/index.html rename to static/2024-05-15-dissector/index.html diff --git a/static/dissector/styles.css b/static/2024-05-15-dissector/styles.css similarity index 100% rename from static/dissector/styles.css rename to static/2024-05-15-dissector/styles.css diff --git a/static/ui-generation-sketch-03/index.html b/static/2024-05-15-ui-generation-sketch-03/index.html similarity index 100% rename from static/ui-generation-sketch-03/index.html rename to static/2024-05-15-ui-generation-sketch-03/index.html diff --git a/static/frp-graph-03/apiKey.js b/static/2024-05-21-frp-graph-03/apiKey.js similarity index 100% rename from static/frp-graph-03/apiKey.js rename to static/2024-05-21-frp-graph-03/apiKey.js diff --git a/static/frp-graph-03/connect.js b/static/2024-05-21-frp-graph-03/connect.js similarity index 100% rename from static/frp-graph-03/connect.js rename to static/2024-05-21-frp-graph-03/connect.js diff --git a/static/frp-graph-03/graph.js b/static/2024-05-21-frp-graph-03/graph.js similarity index 100% rename from static/frp-graph-03/graph.js rename to static/2024-05-21-frp-graph-03/graph.js diff --git a/static/frp-graph-03/imagine.js b/static/2024-05-21-frp-graph-03/imagine.js similarity index 100% rename from static/frp-graph-03/imagine.js rename to static/2024-05-21-frp-graph-03/imagine.js diff --git a/static/frp-graph-03/index.html b/static/2024-05-21-frp-graph-03/index.html similarity index 100% rename from static/frp-graph-03/index.html rename to static/2024-05-21-frp-graph-03/index.html diff --git a/static/frp-graph-03/llm.js b/static/2024-05-21-frp-graph-03/llm.js similarity index 100% rename from static/frp-graph-03/llm.js rename to static/2024-05-21-frp-graph-03/llm.js diff --git a/static/frp-graph-03/nodes/BehaviourNode.js b/static/2024-05-21-frp-graph-03/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-03/nodes/BehaviourNode.js rename to static/2024-05-21-frp-graph-03/nodes/BehaviourNode.js diff --git a/static/frp-graph-03/nodes/CombinedDataUI.js b/static/2024-05-21-frp-graph-03/nodes/CombinedDataUI.js similarity index 100% rename from static/frp-graph-03/nodes/CombinedDataUI.js rename to static/2024-05-21-frp-graph-03/nodes/CombinedDataUI.js diff --git a/static/frp-graph-03/nodes/Cursor.js b/static/2024-05-21-frp-graph-03/nodes/Cursor.js similarity index 100% rename from static/frp-graph-03/nodes/Cursor.js rename to static/2024-05-21-frp-graph-03/nodes/Cursor.js diff --git a/static/frp-graph-03/nodes/DangerousUI.js b/static/2024-05-21-frp-graph-03/nodes/DangerousUI.js similarity index 100% rename from static/frp-graph-03/nodes/DangerousUI.js rename to static/2024-05-21-frp-graph-03/nodes/DangerousUI.js diff --git a/static/frp-graph-03/nodes/GeneratedBackstoryUI.js b/static/2024-05-21-frp-graph-03/nodes/GeneratedBackstoryUI.js similarity index 100% rename from static/frp-graph-03/nodes/GeneratedBackstoryUI.js rename to static/2024-05-21-frp-graph-03/nodes/GeneratedBackstoryUI.js diff --git a/static/frp-graph-03/nodes/GeneratedNameTagUI.js b/static/2024-05-21-frp-graph-03/nodes/GeneratedNameTagUI.js similarity index 100% rename from static/frp-graph-03/nodes/GeneratedNameTagUI.js rename to static/2024-05-21-frp-graph-03/nodes/GeneratedNameTagUI.js diff --git a/static/frp-graph-03/nodes/GeneratedNameUI.js b/static/2024-05-21-frp-graph-03/nodes/GeneratedNameUI.js similarity index 100% rename from static/frp-graph-03/nodes/GeneratedNameUI.js rename to static/2024-05-21-frp-graph-03/nodes/GeneratedNameUI.js diff --git a/static/frp-graph-03/nodes/NameTagUI.js b/static/2024-05-21-frp-graph-03/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-03/nodes/NameTagUI.js rename to static/2024-05-21-frp-graph-03/nodes/NameTagUI.js diff --git a/static/frp-graph-03/nodes/NameUI.js b/static/2024-05-21-frp-graph-03/nodes/NameUI.js similarity index 100% rename from static/frp-graph-03/nodes/NameUI.js rename to static/2024-05-21-frp-graph-03/nodes/NameUI.js diff --git a/static/frp-graph-03/policy.js b/static/2024-05-21-frp-graph-03/policy.js similarity index 100% rename from static/frp-graph-03/policy.js rename to static/2024-05-21-frp-graph-03/policy.js diff --git a/static/frp-graph-03/render.js b/static/2024-05-21-frp-graph-03/render.js similarity index 100% rename from static/frp-graph-03/render.js rename to static/2024-05-21-frp-graph-03/render.js diff --git a/static/frp-graph-03/state.js b/static/2024-05-21-frp-graph-03/state.js similarity index 100% rename from static/frp-graph-03/state.js rename to static/2024-05-21-frp-graph-03/state.js diff --git a/static/frp-graph-04/apiKey.js b/static/2024-05-21-frp-graph-04/apiKey.js similarity index 100% rename from static/frp-graph-04/apiKey.js rename to static/2024-05-21-frp-graph-04/apiKey.js diff --git a/static/frp-graph-04/connect.js b/static/2024-05-21-frp-graph-04/connect.js similarity index 100% rename from static/frp-graph-04/connect.js rename to static/2024-05-21-frp-graph-04/connect.js diff --git a/static/frp-graph-04/demo.js b/static/2024-05-21-frp-graph-04/demo.js similarity index 100% rename from static/frp-graph-04/demo.js rename to static/2024-05-21-frp-graph-04/demo.js diff --git a/static/frp-graph-04/graph.js b/static/2024-05-21-frp-graph-04/graph.js similarity index 100% rename from static/frp-graph-04/graph.js rename to static/2024-05-21-frp-graph-04/graph.js diff --git a/static/frp-graph-04/imagine.js b/static/2024-05-21-frp-graph-04/imagine.js similarity index 100% rename from static/frp-graph-04/imagine.js rename to static/2024-05-21-frp-graph-04/imagine.js diff --git a/static/frp-graph-04/index.html b/static/2024-05-21-frp-graph-04/index.html similarity index 100% rename from static/frp-graph-04/index.html rename to static/2024-05-21-frp-graph-04/index.html diff --git a/static/frp-graph-04/llm.js b/static/2024-05-21-frp-graph-04/llm.js similarity index 100% rename from static/frp-graph-04/llm.js rename to static/2024-05-21-frp-graph-04/llm.js diff --git a/static/frp-graph-04/nodes/BehaviourNode.js b/static/2024-05-21-frp-graph-04/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-04/nodes/BehaviourNode.js rename to static/2024-05-21-frp-graph-04/nodes/BehaviourNode.js diff --git a/static/frp-graph-04/nodes/CombinedDataUI.js b/static/2024-05-21-frp-graph-04/nodes/CombinedDataUI.js similarity index 100% rename from static/frp-graph-04/nodes/CombinedDataUI.js rename to static/2024-05-21-frp-graph-04/nodes/CombinedDataUI.js diff --git a/static/frp-graph-04/nodes/Cursor.js b/static/2024-05-21-frp-graph-04/nodes/Cursor.js similarity index 100% rename from static/frp-graph-04/nodes/Cursor.js rename to static/2024-05-21-frp-graph-04/nodes/Cursor.js diff --git a/static/frp-graph-04/nodes/DangerousUI.js b/static/2024-05-21-frp-graph-04/nodes/DangerousUI.js similarity index 100% rename from static/frp-graph-04/nodes/DangerousUI.js rename to static/2024-05-21-frp-graph-04/nodes/DangerousUI.js diff --git a/static/frp-graph-04/nodes/GeneratedBackstoryUI.js b/static/2024-05-21-frp-graph-04/nodes/GeneratedBackstoryUI.js similarity index 100% rename from static/frp-graph-04/nodes/GeneratedBackstoryUI.js rename to static/2024-05-21-frp-graph-04/nodes/GeneratedBackstoryUI.js diff --git a/static/frp-graph-04/nodes/GeneratedNameTagUI.js b/static/2024-05-21-frp-graph-04/nodes/GeneratedNameTagUI.js similarity index 100% rename from static/frp-graph-04/nodes/GeneratedNameTagUI.js rename to static/2024-05-21-frp-graph-04/nodes/GeneratedNameTagUI.js diff --git a/static/frp-graph-04/nodes/GeneratedNameUI.js b/static/2024-05-21-frp-graph-04/nodes/GeneratedNameUI.js similarity index 100% rename from static/frp-graph-04/nodes/GeneratedNameUI.js rename to static/2024-05-21-frp-graph-04/nodes/GeneratedNameUI.js diff --git a/static/frp-graph-04/nodes/GeneratedStatsUI.js b/static/2024-05-21-frp-graph-04/nodes/GeneratedStatsUI.js similarity index 100% rename from static/frp-graph-04/nodes/GeneratedStatsUI.js rename to static/2024-05-21-frp-graph-04/nodes/GeneratedStatsUI.js diff --git a/static/frp-graph-04/nodes/NameTagUI.js b/static/2024-05-21-frp-graph-04/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-04/nodes/NameTagUI.js rename to static/2024-05-21-frp-graph-04/nodes/NameTagUI.js diff --git a/static/frp-graph-04/nodes/NameUI.js b/static/2024-05-21-frp-graph-04/nodes/NameUI.js similarity index 100% rename from static/frp-graph-04/nodes/NameUI.js rename to static/2024-05-21-frp-graph-04/nodes/NameUI.js diff --git a/static/frp-graph-04/nodes/PortraitUI.js b/static/2024-05-21-frp-graph-04/nodes/PortraitUI.js similarity index 100% rename from static/frp-graph-04/nodes/PortraitUI.js rename to static/2024-05-21-frp-graph-04/nodes/PortraitUI.js diff --git a/static/frp-graph-04/policy.js b/static/2024-05-21-frp-graph-04/policy.js similarity index 100% rename from static/frp-graph-04/policy.js rename to static/2024-05-21-frp-graph-04/policy.js diff --git a/static/frp-graph-04/render.js b/static/2024-05-21-frp-graph-04/render.js similarity index 100% rename from static/frp-graph-04/render.js rename to static/2024-05-21-frp-graph-04/render.js diff --git a/static/frp-graph-04/state.js b/static/2024-05-21-frp-graph-04/state.js similarity index 100% rename from static/frp-graph-04/state.js rename to static/2024-05-21-frp-graph-04/state.js diff --git a/static/frp-graph-05/apiKey.js b/static/2024-05-21-frp-graph-05/apiKey.js similarity index 100% rename from static/frp-graph-05/apiKey.js rename to static/2024-05-21-frp-graph-05/apiKey.js diff --git a/static/frp-graph-05/connect.js b/static/2024-05-21-frp-graph-05/connect.js similarity index 100% rename from static/frp-graph-05/connect.js rename to static/2024-05-21-frp-graph-05/connect.js diff --git a/static/frp-graph-05/graph.js b/static/2024-05-21-frp-graph-05/graph.js similarity index 100% rename from static/frp-graph-05/graph.js rename to static/2024-05-21-frp-graph-05/graph.js diff --git a/static/frp-graph-05/imagine.js b/static/2024-05-21-frp-graph-05/imagine.js similarity index 100% rename from static/frp-graph-05/imagine.js rename to static/2024-05-21-frp-graph-05/imagine.js diff --git a/static/frp-graph-05/index.html b/static/2024-05-21-frp-graph-05/index.html similarity index 100% rename from static/frp-graph-05/index.html rename to static/2024-05-21-frp-graph-05/index.html diff --git a/static/frp-graph-05/llm.js b/static/2024-05-21-frp-graph-05/llm.js similarity index 100% rename from static/frp-graph-05/llm.js rename to static/2024-05-21-frp-graph-05/llm.js diff --git a/static/frp-graph-05/nodes/BehaviourNode.js b/static/2024-05-21-frp-graph-05/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-05/nodes/BehaviourNode.js rename to static/2024-05-21-frp-graph-05/nodes/BehaviourNode.js diff --git a/static/frp-graph-05/nodes/CombinedDataUI.js b/static/2024-05-21-frp-graph-05/nodes/CombinedDataUI.js similarity index 100% rename from static/frp-graph-05/nodes/CombinedDataUI.js rename to static/2024-05-21-frp-graph-05/nodes/CombinedDataUI.js diff --git a/static/frp-graph-05/nodes/Cursor.js b/static/2024-05-21-frp-graph-05/nodes/Cursor.js similarity index 100% rename from static/frp-graph-05/nodes/Cursor.js rename to static/2024-05-21-frp-graph-05/nodes/Cursor.js diff --git a/static/frp-graph-05/nodes/DangerousUI.js b/static/2024-05-21-frp-graph-05/nodes/DangerousUI.js similarity index 100% rename from static/frp-graph-05/nodes/DangerousUI.js rename to static/2024-05-21-frp-graph-05/nodes/DangerousUI.js diff --git a/static/frp-graph-05/nodes/GeneratedBackstoryUI.js b/static/2024-05-21-frp-graph-05/nodes/GeneratedBackstoryUI.js similarity index 100% rename from static/frp-graph-05/nodes/GeneratedBackstoryUI.js rename to static/2024-05-21-frp-graph-05/nodes/GeneratedBackstoryUI.js diff --git a/static/frp-graph-05/nodes/GeneratedNameTagUI.js b/static/2024-05-21-frp-graph-05/nodes/GeneratedNameTagUI.js similarity index 100% rename from static/frp-graph-05/nodes/GeneratedNameTagUI.js rename to static/2024-05-21-frp-graph-05/nodes/GeneratedNameTagUI.js diff --git a/static/frp-graph-05/nodes/GeneratedNameUI.js b/static/2024-05-21-frp-graph-05/nodes/GeneratedNameUI.js similarity index 100% rename from static/frp-graph-05/nodes/GeneratedNameUI.js rename to static/2024-05-21-frp-graph-05/nodes/GeneratedNameUI.js diff --git a/static/frp-graph-05/nodes/GeneratedStatsUI.js b/static/2024-05-21-frp-graph-05/nodes/GeneratedStatsUI.js similarity index 100% rename from static/frp-graph-05/nodes/GeneratedStatsUI.js rename to static/2024-05-21-frp-graph-05/nodes/GeneratedStatsUI.js diff --git a/static/frp-graph-05/nodes/GeneratedUI.js b/static/2024-05-21-frp-graph-05/nodes/GeneratedUI.js similarity index 100% rename from static/frp-graph-05/nodes/GeneratedUI.js rename to static/2024-05-21-frp-graph-05/nodes/GeneratedUI.js diff --git a/static/frp-graph-05/nodes/NameTagUI.js b/static/2024-05-21-frp-graph-05/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-05/nodes/NameTagUI.js rename to static/2024-05-21-frp-graph-05/nodes/NameTagUI.js diff --git a/static/frp-graph-05/nodes/NameUI.js b/static/2024-05-21-frp-graph-05/nodes/NameUI.js similarity index 100% rename from static/frp-graph-05/nodes/NameUI.js rename to static/2024-05-21-frp-graph-05/nodes/NameUI.js diff --git a/static/frp-graph-05/nodes/PortraitUI.js b/static/2024-05-21-frp-graph-05/nodes/PortraitUI.js similarity index 100% rename from static/frp-graph-05/nodes/PortraitUI.js rename to static/2024-05-21-frp-graph-05/nodes/PortraitUI.js diff --git a/static/frp-graph-05/policy.js b/static/2024-05-21-frp-graph-05/policy.js similarity index 100% rename from static/frp-graph-05/policy.js rename to static/2024-05-21-frp-graph-05/policy.js diff --git a/static/frp-graph-05/render.js b/static/2024-05-21-frp-graph-05/render.js similarity index 100% rename from static/frp-graph-05/render.js rename to static/2024-05-21-frp-graph-05/render.js diff --git a/static/frp-graph-05/state.js b/static/2024-05-21-frp-graph-05/state.js similarity index 100% rename from static/frp-graph-05/state.js rename to static/2024-05-21-frp-graph-05/state.js diff --git a/static/frp-graph-06-no-static-ui-code/apiKey.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/apiKey.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/apiKey.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/apiKey.js diff --git a/static/frp-graph-06-no-static-ui-code/connect.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/connect.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/connect.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/connect.js diff --git a/static/frp-graph-06-no-static-ui-code/graph.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/graph.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/graph.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/graph.js diff --git a/static/frp-graph-06-no-static-ui-code/imagine.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/imagine.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/imagine.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/imagine.js diff --git a/static/frp-graph-06-no-static-ui-code/index.html b/static/2024-05-21-frp-graph-06-no-static-ui-code/index.html similarity index 100% rename from static/frp-graph-06-no-static-ui-code/index.html rename to static/2024-05-21-frp-graph-06-no-static-ui-code/index.html diff --git a/static/frp-graph-06-no-static-ui-code/llm.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/llm.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/llm.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/llm.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/BehaviourNode.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/BehaviourNode.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/BehaviourNode.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/CombinedDataUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/CombinedDataUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/CombinedDataUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/CombinedDataUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/Cursor.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/Cursor.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/Cursor.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/Cursor.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/DangerousUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/DangerousUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/DangerousUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/DangerousUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/GeneratedBackstoryUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedBackstoryUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/GeneratedBackstoryUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedBackstoryUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/GeneratedNameTagUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedNameTagUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/GeneratedNameTagUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedNameTagUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/GeneratedNameUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedNameUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/GeneratedNameUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedNameUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/GeneratedStatsUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedStatsUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/GeneratedStatsUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedStatsUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/GeneratedUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/GeneratedUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/GeneratedUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/NameTagUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/NameTagUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/NameTagUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/NameUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/NameUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/NameUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/NameUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/PortraitUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/PortraitUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/PortraitUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/PortraitUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/SerializedGeneratedUI.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/SerializedGeneratedUI.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/SerializedGeneratedUI.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/SerializedGeneratedUI.js diff --git a/static/frp-graph-06-no-static-ui-code/nodes/SerializedLLMNode.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/SerializedLLMNode.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/nodes/SerializedLLMNode.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/nodes/SerializedLLMNode.js diff --git a/static/frp-graph-06-no-static-ui-code/policy.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/policy.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/policy.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/policy.js diff --git a/static/frp-graph-06-no-static-ui-code/render.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/render.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/render.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/render.js diff --git a/static/frp-graph-06-no-static-ui-code/state.js b/static/2024-05-21-frp-graph-06-no-static-ui-code/state.js similarity index 100% rename from static/frp-graph-06-no-static-ui-code/state.js rename to static/2024-05-21-frp-graph-06-no-static-ui-code/state.js diff --git a/static/frp-graph-07-llm-generated/apiKey.js b/static/2024-05-21-frp-graph-07-llm-generated/apiKey.js similarity index 100% rename from static/frp-graph-07-llm-generated/apiKey.js rename to static/2024-05-21-frp-graph-07-llm-generated/apiKey.js diff --git a/static/frp-graph-07-llm-generated/connect.js b/static/2024-05-21-frp-graph-07-llm-generated/connect.js similarity index 100% rename from static/frp-graph-07-llm-generated/connect.js rename to static/2024-05-21-frp-graph-07-llm-generated/connect.js diff --git a/static/frp-graph-07-llm-generated/graph.js b/static/2024-05-21-frp-graph-07-llm-generated/graph.js similarity index 100% rename from static/frp-graph-07-llm-generated/graph.js rename to static/2024-05-21-frp-graph-07-llm-generated/graph.js diff --git a/static/frp-graph-07-llm-generated/imagine.js b/static/2024-05-21-frp-graph-07-llm-generated/imagine.js similarity index 100% rename from static/frp-graph-07-llm-generated/imagine.js rename to static/2024-05-21-frp-graph-07-llm-generated/imagine.js diff --git a/static/frp-graph-07-llm-generated/index.html b/static/2024-05-21-frp-graph-07-llm-generated/index.html similarity index 100% rename from static/frp-graph-07-llm-generated/index.html rename to static/2024-05-21-frp-graph-07-llm-generated/index.html diff --git a/static/frp-graph-07-llm-generated/llm.js b/static/2024-05-21-frp-graph-07-llm-generated/llm.js similarity index 100% rename from static/frp-graph-07-llm-generated/llm.js rename to static/2024-05-21-frp-graph-07-llm-generated/llm.js diff --git a/static/frp-graph-07-llm-generated/nodes/BehaviourNode.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/BehaviourNode.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/BehaviourNode.js diff --git a/static/frp-graph-07-llm-generated/nodes/CombinedDataUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/CombinedDataUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/CombinedDataUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/CombinedDataUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/Cursor.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/Cursor.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/Cursor.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/Cursor.js diff --git a/static/frp-graph-07-llm-generated/nodes/DangerousUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/DangerousUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/DangerousUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/DangerousUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/GeneratedBackstoryUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedBackstoryUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/GeneratedBackstoryUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedBackstoryUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/GeneratedNameTagUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedNameTagUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/GeneratedNameTagUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedNameTagUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/GeneratedNameUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedNameUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/GeneratedNameUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedNameUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/GeneratedStatsUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedStatsUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/GeneratedStatsUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedStatsUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/GeneratedUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/GeneratedUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/GeneratedUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/NameTagUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/NameTagUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/NameTagUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/NameUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/NameUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/NameUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/NameUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/PortraitUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/PortraitUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/PortraitUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/PortraitUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/SerializedGeneratedUI.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/SerializedGeneratedUI.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/SerializedGeneratedUI.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/SerializedGeneratedUI.js diff --git a/static/frp-graph-07-llm-generated/nodes/SerializedLLMNode.js b/static/2024-05-21-frp-graph-07-llm-generated/nodes/SerializedLLMNode.js similarity index 100% rename from static/frp-graph-07-llm-generated/nodes/SerializedLLMNode.js rename to static/2024-05-21-frp-graph-07-llm-generated/nodes/SerializedLLMNode.js diff --git a/static/frp-graph-07-llm-generated/policy.js b/static/2024-05-21-frp-graph-07-llm-generated/policy.js similarity index 100% rename from static/frp-graph-07-llm-generated/policy.js rename to static/2024-05-21-frp-graph-07-llm-generated/policy.js diff --git a/static/frp-graph-07-llm-generated/render.js b/static/2024-05-21-frp-graph-07-llm-generated/render.js similarity index 100% rename from static/frp-graph-07-llm-generated/render.js rename to static/2024-05-21-frp-graph-07-llm-generated/render.js diff --git a/static/frp-graph-07-llm-generated/state.js b/static/2024-05-21-frp-graph-07-llm-generated/state.js similarity index 100% rename from static/frp-graph-07-llm-generated/state.js rename to static/2024-05-21-frp-graph-07-llm-generated/state.js diff --git a/static/frp-graph-08-describe-ports/apiKey.js b/static/2024-05-23-frp-graph-08-describe-ports/apiKey.js similarity index 100% rename from static/frp-graph-08-describe-ports/apiKey.js rename to static/2024-05-23-frp-graph-08-describe-ports/apiKey.js diff --git a/static/frp-graph-08-describe-ports/connect.js b/static/2024-05-23-frp-graph-08-describe-ports/connect.js similarity index 100% rename from static/frp-graph-08-describe-ports/connect.js rename to static/2024-05-23-frp-graph-08-describe-ports/connect.js diff --git a/static/frp-graph-08-describe-ports/graph.js b/static/2024-05-23-frp-graph-08-describe-ports/graph.js similarity index 100% rename from static/frp-graph-08-describe-ports/graph.js rename to static/2024-05-23-frp-graph-08-describe-ports/graph.js diff --git a/static/frp-graph-08-describe-ports/imagine.js b/static/2024-05-23-frp-graph-08-describe-ports/imagine.js similarity index 100% rename from static/frp-graph-08-describe-ports/imagine.js rename to static/2024-05-23-frp-graph-08-describe-ports/imagine.js diff --git a/static/frp-graph-08-describe-ports/index.html b/static/2024-05-23-frp-graph-08-describe-ports/index.html similarity index 100% rename from static/frp-graph-08-describe-ports/index.html rename to static/2024-05-23-frp-graph-08-describe-ports/index.html diff --git a/static/frp-graph-08-describe-ports/llm.js b/static/2024-05-23-frp-graph-08-describe-ports/llm.js similarity index 100% rename from static/frp-graph-08-describe-ports/llm.js rename to static/2024-05-23-frp-graph-08-describe-ports/llm.js diff --git a/static/frp-graph-08-describe-ports/nodes/BehaviourNode.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/BehaviourNode.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/BehaviourNode.js diff --git a/static/frp-graph-08-describe-ports/nodes/CodeNode.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/CodeNode.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/CodeNode.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/CodeNode.js diff --git a/static/frp-graph-08-describe-ports/nodes/CombinedDataUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/CombinedDataUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/CombinedDataUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/CombinedDataUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/Cursor.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/Cursor.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/Cursor.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/Cursor.js diff --git a/static/frp-graph-08-describe-ports/nodes/DangerousUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/DangerousUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/DangerousUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/DangerousUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/GeneratedBackstoryUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedBackstoryUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/GeneratedBackstoryUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedBackstoryUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/GeneratedNameTagUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedNameTagUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/GeneratedNameTagUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedNameTagUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/GeneratedNameUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedNameUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/GeneratedNameUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedNameUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/GeneratedStatsUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedStatsUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/GeneratedStatsUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedStatsUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/GeneratedUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/GeneratedUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/GeneratedUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/NameTagUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/NameTagUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/NameTagUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/NameUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/NameUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/NameUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/NameUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/PortraitUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/PortraitUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/PortraitUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/PortraitUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/SerializedGeneratedUI.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/SerializedGeneratedUI.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/SerializedGeneratedUI.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/SerializedGeneratedUI.js diff --git a/static/frp-graph-08-describe-ports/nodes/SerializedLLMNode.js b/static/2024-05-23-frp-graph-08-describe-ports/nodes/SerializedLLMNode.js similarity index 100% rename from static/frp-graph-08-describe-ports/nodes/SerializedLLMNode.js rename to static/2024-05-23-frp-graph-08-describe-ports/nodes/SerializedLLMNode.js diff --git a/static/frp-graph-08-describe-ports/policy.js b/static/2024-05-23-frp-graph-08-describe-ports/policy.js similarity index 100% rename from static/frp-graph-08-describe-ports/policy.js rename to static/2024-05-23-frp-graph-08-describe-ports/policy.js diff --git a/static/frp-graph-08-describe-ports/render.js b/static/2024-05-23-frp-graph-08-describe-ports/render.js similarity index 100% rename from static/frp-graph-08-describe-ports/render.js rename to static/2024-05-23-frp-graph-08-describe-ports/render.js diff --git a/static/frp-graph-08-describe-ports/state.js b/static/2024-05-23-frp-graph-08-describe-ports/state.js similarity index 100% rename from static/frp-graph-08-describe-ports/state.js rename to static/2024-05-23-frp-graph-08-describe-ports/state.js diff --git a/static/frp-graph-09-llm-generated-2/apiKey.js b/static/2024-05-25-frp-graph-09-llm-generated-2/apiKey.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/apiKey.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/apiKey.js diff --git a/static/frp-graph-09-llm-generated-2/connect.js b/static/2024-05-25-frp-graph-09-llm-generated-2/connect.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/connect.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/connect.js diff --git a/static/frp-graph-09-llm-generated-2/graph copy 2.js b/static/2024-05-25-frp-graph-09-llm-generated-2/graph copy 2.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/graph copy 2.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/graph copy 2.js diff --git a/static/frp-graph-09-llm-generated-2/graph copy.js b/static/2024-05-25-frp-graph-09-llm-generated-2/graph copy.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/graph copy.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/graph copy.js diff --git a/static/frp-graph-09-llm-generated-2/graph.js b/static/2024-05-25-frp-graph-09-llm-generated-2/graph.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/graph.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/graph.js diff --git a/static/frp-graph-09-llm-generated-2/imagine.js b/static/2024-05-25-frp-graph-09-llm-generated-2/imagine.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/imagine.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/imagine.js diff --git a/static/frp-graph-09-llm-generated-2/index.html b/static/2024-05-25-frp-graph-09-llm-generated-2/index.html similarity index 100% rename from static/frp-graph-09-llm-generated-2/index.html rename to static/2024-05-25-frp-graph-09-llm-generated-2/index.html diff --git a/static/frp-graph-09-llm-generated-2/llm.js b/static/2024-05-25-frp-graph-09-llm-generated-2/llm.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/llm.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/llm.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/BehaviourNode.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/BehaviourNode.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/BehaviourNode.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/BehaviourNode.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/CodeNode.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/CodeNode.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/CodeNode.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/CodeNode.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/GeneratedUI.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/GeneratedUI.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/GeneratedUI.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/GeneratedUI.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/JSONLLMNode.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/JSONLLMNode.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/JSONLLMNode.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/JSONLLMNode.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/NameTagUI.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/NameTagUI.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/NameTagUI.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/NameTagUI.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/NameUI.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/NameUI.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/NameUI.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/NameUI.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/SerializedGeneratedUI.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/SerializedGeneratedUI.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/SerializedGeneratedUI.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/SerializedGeneratedUI.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/SerializedLLMNode.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/SerializedLLMNode.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/SerializedLLMNode.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/SerializedLLMNode.js diff --git a/static/frp-graph-09-llm-generated-2/nodes/TextLLMNode.js b/static/2024-05-25-frp-graph-09-llm-generated-2/nodes/TextLLMNode.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/nodes/TextLLMNode.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/nodes/TextLLMNode.js diff --git a/static/frp-graph-09-llm-generated-2/policy.js b/static/2024-05-25-frp-graph-09-llm-generated-2/policy.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/policy.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/policy.js diff --git a/static/frp-graph-09-llm-generated-2/render.js b/static/2024-05-25-frp-graph-09-llm-generated-2/render.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/render.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/render.js diff --git a/static/frp-graph-09-llm-generated-2/state.js b/static/2024-05-25-frp-graph-09-llm-generated-2/state.js similarity index 100% rename from static/frp-graph-09-llm-generated-2/state.js rename to static/2024-05-25-frp-graph-09-llm-generated-2/state.js diff --git a/static/2024-05-29-interpreted-graph/graph.js b/static/2024-05-29-interpreted-graph/graph.js new file mode 100644 index 000000000..b048f9004 --- /dev/null +++ b/static/2024-05-29-interpreted-graph/graph.js @@ -0,0 +1,403 @@ +import { BehaviorSubject, combineLatest } from 'https://cdn.jsdelivr.net/npm/rxjs@7.8.1/+esm'; +import Ajv from 'https://cdn.jsdelivr.net/npm/ajv@8.14.0/+esm' +import Mustache from 'https://cdn.jsdelivr.net/npm/mustache@4.2.0/+esm' +import { render, html } from 'https://cdn.jsdelivr.net/npm/lit-html@3.1.3/+esm' + +const tag = (name) => (props, ...children) => ({ name, props, children }); +const VStack = tag('div'); +const Checkbox = tag('checkbox'); +const Label = tag('label'); +const Heading = tag('h1'); +const ForEach = (items, template) => { + return items.map(template) +}; +const TodoItem = ({ label, checked, onClick }) => Label({ label, onClick }, Checkbox({ checked })) + +// next steps: +// 1. updating state and re-rendering via callbacks (implies using a different templating system) +// 2. bind in two phases, register names in context and then for each note, using "imports", we map those global names to local names + +export function start() { } + +function coerce(val) { + if (val == 'true') return true; + if (val == 'false') return false; + if (!isNaN(val)) return parseFloat(val); + return val; +} + +const system = { + get: (key) => { + if (key == 'todos') { + return [ + { label: 'Buy groceries', checked: false }, + { label: 'Vacuum house', checked: true }, + { label: 'Learn RxJS', checked: false } + ] + } + } +}; + +// Function to create the RxJS network from JSON document +function createRxJSNetworkFromJson(jsonDocument) { + const context = {}; + const validators = {}; + + // Create subjects and validators for each cell + jsonDocument.conversation.forEach(conversation => { + conversation.messages.forEach(message => { + if (message.role === 'assistant') { + const cellName = message.name || generateUniqueId(); + context[cellName] = new BehaviorSubject(message.output.schema.default || null); + } + }); + }); + + // Define a unique ID generator + function generateUniqueId() { + return '_' + Math.random().toString(36).substr(2, 9); + } + + // Process messages and set up reactive bindings + jsonDocument.conversation.forEach(conversation => { + conversation.messages.forEach(message => { + if (message.role === 'assistant') { + const cellName = message.name || generateUniqueId(); + + if (message.contentType === 'text/javascript') { + // Evaluate the JavaScript content and bind it to the subject + const func = new Function('system', ...message.content.args, message.content.body); + const result = func(system, { + get: (key) => context[key].getValue(), + set: (key, value) => context[key].next(value) + }); + + // // Validate the result against the output schema + // if (validators[`${cellName}_output`] && !validators[`${cellName}_output`](result)) { + // console.error(`Output validation failed for cell ${cellName}`, validators[`${cellName}_output`].errors); + // } else { + context[cellName].next(result); + // } + } else if (message.contentType === 'text/vnd.common.template') { + // Set up template rendering + const { inputs } = message; + const inputObservables = []; + + for (const [key, schema] of Object.entries(inputs)) { + const inputName = key; + if (context[inputName]) { + inputObservables.push(context[inputName]); + } + } + + combineLatest(inputObservables).subscribe(values => { + const inputValues = values.reduce((acc, value, index) => { + const key = Object.keys(inputs)[index]; + acc[key] = value; + return acc; + }, {}); + + const renderedTemplate = (message.content(inputValues)); + context[cellName]?.next(renderedTemplate); + }); + } + } + }); + }); + + return context; +} + +// Example JSON document +const jsonDocument = { + "conversation": [ + { + "id": "", + "messages": [ + { + "role": "user", + "content": "Write a title" + }, + { + "role": "assistant", + "contentType": "text/javascript", + "name": "title", + "inputs": {}, + "output": { + "schema": { + "type": "string", + } + }, + "content": { + args: [], + body: "return 'hello'" + } + } + ] + }, + { + "id": "", + "messages": [ + { + "role": "user", + "content": "Get my todos" + }, + { + "role": "assistant", + "contentType": "text/javascript", + "name": "todos", + "inputs": {}, + "output": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "checked": { + "type": "boolean", + "default": false + } + }, + "required": ["label"], + }, + "default": [] + } + }, + "content": { + args: [], + body: "return system.get('todos')" + } + } + ] + }, + { + "id": "", + "messages": [ + { + "role": "user", + "content": "I would like a todo item component, e.g. vacuum house" + }, + { + "role": "assistant", + "contentType": "text/vnd.common.template", + "tag": "todo-item", + "inputs": { + "checked": { + "type": "boolean", + "default": false + }, + "label": { + "type": "string" + } + }, + "output": { + "schema": { + "type": "template" + } + }, + "imports": { + "Label": "common:ui/label.component.json", + "Checkbox": "common:ui/checkbox.component.json" + }, + "content": ({ label, checked }) => Label({ label, test: 'test' }, Checkbox({ checked })) + } + ] + }, + { + "id": "", + "messages": [ + { + "role": "user", + "content": "Ok, now make a task list using that todo item." + }, + { + "role": "assistant", + "contentType": "text/vnd.common.template", + "name": "ui", + "inputs": { + "title": { + "type": "string", + }, + "todos": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "checked": { + "type": "boolean", + "default": false + } + }, + "required": ["label"] + }, + "default": [] + } + }, + "output": { + "schema": { + "type": "template" + } + }, + // use these to bind names in context, don't infer via the inputs + "imports": { + "todos": "todos", + "title": "title", + "VStack": "common:ui/vstack.component.json", + "Header": "common:ui/label.component.json", + "Checkbox": "common:ui/checkbox.component.json", + "TodoItem": "todo-item" + }, + "content": ({ title, todos }) => + VStack({}, + Heading({ text: title }), + VStack({}, + ForEach(todos, TodoItem) + ) + ) + } + ] + } + ] +}; + +const calendar = { + "conversation": [ + { + "id": "", + "messages": [ + { + "role": "user", + "content": "Get my calendar events" + }, + { + "role": "assistant", + "contentType": "text/javascript", + "name": "calendarEvents", + "inputs": {}, + "output": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "date": { + "type": "string", + "format": "date-time" + } + }, + "required": ["title", "date"] + } + } + }, + "content": { + "args": [], + "body": "return system.get('calendarEvents')" + } + } + ] + }, + { + "id": "", + "messages": [ + { + "role": "user", + "content": "I would like a calendar event item component, e.g. Meeting with Bob - 2024-05-29T14:30:00Z" + }, + { + "role": "assistant", + "contentType": "text/vnd.common.template", + "tag": "calendar-event", + "inputs": { + "title": { + "type": "string" + }, + "date": { + "type": "string", + "format": "date-time" + } + }, + "output": { + "schema": { + "type": "template" + } + }, + "content": "
{{title}} - {{date}}
" + } + ] + }, + { + "id": "", + "messages": [ + { + "role": "user", + "content": "Ok, now make a calendar list using that calendar event." + }, + { + "role": "assistant", + "contentType": "text/vnd.common.template", + "name": "ui", + "inputs": { + "events": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "date": { + "type": "string", + "format": "date-time" + } + }, + "required": ["title", "date"] + }, + "default": [] + } + }, + "output": { + "schema": { + "type": "template" + } + }, + "imports": { + "event": "calendar-event" + }, + "content": "

{{title}}

" + } + ] + } + ] +} + +// Create the RxJS network +const subjects = createRxJSNetworkFromJson(jsonDocument); + +// Example usage: Adding a new todo item +// subjects['todos'].next([ +// { label: 'Buy groceries', checked: false }, +// { label: 'Vacuum house', checked: true }, +// { label: 'Learn RxJS', checked: false } +// ]); + +// Example usage: Updating the title +subjects['title'].next('My Updated Task List'); + +console.log(subjects) + +subjects['ui'].subscribe(console.log); +// subjects['calendarEvents'].subscribe(console.log); +subjects['ui'].subscribe(html => { + document.getElementById('tree').innerHTML = JSON.stringify(html, null, 2); +}); + +window.subjects = subjects; diff --git a/static/2024-05-29-interpreted-graph/index.html b/static/2024-05-29-interpreted-graph/index.html new file mode 100644 index 000000000..d71f74a9a --- /dev/null +++ b/static/2024-05-29-interpreted-graph/index.html @@ -0,0 +1,48 @@ + + + + rxjs + + + + +
+
+ +

+
+        
+    
+
diff --git a/static/2024-05-29-interpreted-graph/json-ui-tree-sketch-bindings.js b/static/2024-05-29-interpreted-graph/json-ui-tree-sketch-bindings.js
new file mode 100644
index 000000000..7b0921fed
--- /dev/null
+++ b/static/2024-05-29-interpreted-graph/json-ui-tree-sketch-bindings.js
@@ -0,0 +1,102 @@
+const clicks = () => {
+  return Signal(0)
+}
+
+const todoItem = {
+  "tag": "div",
+  "props": {},
+  "children": [{
+    "tag": "label",
+    "props": {
+      "label": {
+        "type": "string"
+      }
+    },
+    "children": [
+      {
+        "tag": "checkbox",
+        "props": {
+          "checked": {
+            "type": "boolean"
+          },
+          "onclick": {
+            "$id": "https://common.tools/stream-binding.schema.json",
+            "name": "clicks"
+          }
+        },
+        "children": []
+      }
+    ]
+  }]
+}
+
+const tree = {
+  "tag": "div",
+  "props": {},
+  "children": [
+    {
+      "tag": "h1",
+      "props": {
+        "text": "My Updated Task List"
+      },
+      "children": []
+    },
+    {
+      "tag": "div",
+      "props": {},
+      "children": [
+        [
+          {
+            "tag": "label",
+            "props": {
+              "label": "Buy groceries"
+            },
+            "children": [
+              {
+                "tag": "checkbox",
+                "props": {
+                  "checked": false,
+                  "onclick": {
+                    "$id": "https://common.tools/stream-binding.schema.json",
+                    "name": "clicks"
+                  }
+                },
+                "children": []
+              }
+            ]
+          },
+          {
+            "tag": "label",
+            "props": {
+              "label": "Vacuum house"
+            },
+            "children": [
+              {
+                "tag": "checkbox",
+                "props": {
+                  "checked": true
+                },
+                "children": []
+              }
+            ]
+          },
+          {
+            "tag": "label",
+            "props": {
+              "label": "Learn RxJS"
+            },
+            "children": [
+              {
+                "tag": "checkbox",
+                "props": {
+                  "checked": false
+                },
+                "children": []
+              }
+            ]
+          }
+        ]
+      ]
+    }
+  ]
+}
diff --git a/static/2024-05-30-json-to-html/index.html b/static/2024-05-30-json-to-html/index.html
new file mode 100644
index 000000000..4f4975ac8
--- /dev/null
+++ b/static/2024-05-30-json-to-html/index.html
@@ -0,0 +1,34 @@
+
+
+    
+        test
+    
+    
+    
+        
+
+ +
+

+            

+        
+ + + + diff --git a/static/2024-05-30-json-to-html/index.js b/static/2024-05-30-json-to-html/index.js new file mode 100644 index 000000000..27963d77f --- /dev/null +++ b/static/2024-05-30-json-to-html/index.js @@ -0,0 +1,224 @@ +import { BehaviorSubject, Subject, combineLatest } from 'https://cdn.jsdelivr.net/npm/rxjs@7.8.1/+esm'; + +const STREAM = 'https://common.tools/stream-binding.schema.json' +const CELL = 'https://common.tools/cell-binding.schema.json' + +function createElement(node, context) { + if (typeof node === 'string') { + const textNode = document.createTextNode(node); + return textNode; + } + + if (!node || typeof node !== 'object') return null; + + // Handle text nodes + if (!node.tag && node.$id && node.name) { + // Bind the reactive source to update the text node if it changes + if (context[node.name] && context[node.name].subscribe) { + if (node.type == 'slot') { + const uiNode = createElement(context[node.name].getValue(), context) + context[node.name].subscribe(newValue => { + uiNode.innerHTML = ''; + uiNode.appendChild(createElement(newValue, context)); + }); + return uiNode; + } else { + const textNode = document.createTextNode(context[node.name] || ''); + context[node.name].subscribe(newValue => { + textNode.textContent = newValue; + }); + return textNode; + } + } + } + + // Handle element nodes + const element = document.createElement(node.tag); + + // Set properties + for (const [key, value] of Object.entries(node.props || {})) { + if (typeof value === 'object' && value.type) { + // Handle specific types and bind reactive sources from context + if (value.type && value["$id"] && value["$id"] === CELL) { + let name = value.name || key; + if (!context[name]) continue; + element[key] = context[name].getValue(); + context[name].subscribe(newValue => element[key] = newValue); + } else { + // Fallback to setting attribute + element.setAttribute(key, value.type); + } + } else if (value["$id"] && value["$id"] === STREAM && value.name) { + // Handle event binding to a stream + if (context[value.name]) { + element.addEventListener(key, context[value.name]); + } + } else { + element[key] = value; + } + } + + // Recursively create and append child elements + (node.children || []).forEach(childNode => { + const childElement = createElement(childNode, context); + if (childElement) { + element.appendChild(childElement); + } + }); + + return element; +} + +// Example usage +const uiTree = { + "tag": "div", + "props": { + "style": "padding: 10px; border: 1px solid #ccc;" + }, + "children": [ + { + "tag": "input", + "props": { + "type": "text", + "input": { + "$id": "https://common.tools/stream-binding.schema.json", + "name": "changes" + }, + "value": { + "$id": "https://common.tools/cell-binding.schema.json", + "type": "string", + "name": "label" + } + } + }, + { "tag": "br" }, + { + "tag": "label", + "props": {}, + "children": [ + { + "tag": "input", + "props": { + "type": "checkbox", + "checked": { + "$id": "https://common.tools/cell-binding.schema.json", + "type": "boolean" + }, + "click": { + "$id": "https://common.tools/stream-binding.schema.json", + "name": "clicks" + } + }, + "children": [] + }, + { + "$id": "https://common.tools/cell-binding.schema.json", + "type": "string", + "name": "label" + } + ] + }, + { "tag": "br" }, + { + "$id": "https://common.tools/cell-binding.schema.json", + "type": "slot", + "name": "dynamic" + }, + { "tag": "br" }, + { + "$id": "https://common.tools/cell-binding.schema.json", + "type": "slot", + "name": "list" + }, + ] +}; + + +// output of a code node, tree held in a cell +function DynamicComponent(checked) { + return { + tag: "b", + props: {}, + children: [ + { + tag: "label", + children: [ + checked ? "Yo!" : 'Nope!' + ] + }, + { + tag: "button", + props: { + disabled: checked ? false : true, + click: { + "$id": "https://common.tools/stream-binding.schema.json", + "name": "addItem" + } + }, + children: [ + "Click me!" + ] + } + ] + } +} + +function List(items) { + return { + tag: "ul", + props: {}, + children: items.map(item => { + return { + tag: "li", + props: {}, + children: [ + item + ] + } + }) + } +} + +const items = new BehaviorSubject(['one']) +const label = new BehaviorSubject('Toggle') +const checked = new BehaviorSubject(false); +const dynamic = new BehaviorSubject(DynamicComponent(false)); +const list = new BehaviorSubject(List(items.getValue())); + +const context = { + label, + checked, + dynamic, + list, + addItem: () => { + items.next([...items.getValue(), label.getValue()]); + list.next(List(items.getValue())); + }, + clicks: () => { + checked.next(!checked.getValue()); + dynamic.next(DynamicComponent(checked.getValue())); + }, + changes: (event) => { + label.next(event.target.value) + } +}; + +// Object.values(context).forEach(cell => { +// if (cell && cell.subscribe) { +// cell.subscribe(() => { +// debug(); +// }) +// } +// }); + +function debug() { + document.querySelector('#tree').innerHTML = JSON.stringify(uiTree, null, 2); + document.querySelector('#ctx').innerHTML = JSON.stringify(context, null, 2); +} + +export function start() { + debug(); + + const todoElement = createElement(uiTree, context); + document.querySelector('#app').appendChild(todoElement); +}