From 0c62fecf586f94577000c8907e5d71ee32862c76 Mon Sep 17 00:00:00 2001 From: Anatoly Wein Date: Mon, 10 Aug 2026 13:31:59 +0200 Subject: [PATCH 1/6] create workspace examples config, scalable example workspaces --- ROADMAP.md | 7 +- torii-desktop/src/recent/mod.rs | 86 +++++++++++------- torii-desktop/tauri.conf.json | 3 +- torii-workspaces/README.md | 11 +++ .../contributors}/Architecture.md | 0 .../contributors}/Plugin API.md | 0 .../contributors}/README.md | 0 .../dev-tests}/Flower.md | 0 .../dev-tests}/Flower.png | Bin .../dev-tests}/Kobe City.banner.png | Bin .../dev-tests}/Kobe City.md | 0 .../dev-tests}/README.md | 0 .../dev-tests}/Sky Castle.banner.png | Bin .../dev-tests}/Sky Castle.md | 0 .../dev-tests}/Sky Castle.png | Bin .../welcome}/Changelog.md | 0 .../welcome}/Components.md | 0 .../welcome}/Components/Article.md | 0 .../welcome}/Components/Folder.md | 0 .../welcome}/Components/Images.md | 0 .../welcome}/README.md | 0 .../welcome}/README.png | Bin .../welcome}/Vision.md | 0 .../welcome}/Vision/Cartography.md | 0 .../welcome}/Vision/Infoboxes.md | 0 .../welcome}/Vision/Languages.md | 0 .../welcome}/Vision/Plugins.md | 0 torii-workspaces/workspaces.json | 17 ++++ 28 files changed, 87 insertions(+), 37 deletions(-) create mode 100644 torii-workspaces/README.md rename {torii-workspace-contrib => torii-workspaces/contributors}/Architecture.md (100%) rename {torii-workspace-contrib => torii-workspaces/contributors}/Plugin API.md (100%) rename {torii-workspace-contrib => torii-workspaces/contributors}/README.md (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Flower.md (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Flower.png (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Kobe City.banner.png (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Kobe City.md (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/README.md (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Sky Castle.banner.png (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Sky Castle.md (100%) rename {torii-workspace-dev => torii-workspaces/dev-tests}/Sky Castle.png (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Changelog.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Components.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Components/Article.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Components/Folder.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Components/Images.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/README.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/README.png (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Vision.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Vision/Cartography.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Vision/Infoboxes.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Vision/Languages.md (100%) rename {torii-workspace-welcome => torii-workspaces/welcome}/Vision/Plugins.md (100%) create mode 100644 torii-workspaces/workspaces.json diff --git a/ROADMAP.md b/ROADMAP.md index 90f04e5..9e6889f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -100,10 +100,12 @@ The first stage of the project is to create a simple file browser like applicati - [x] View Mode: Fix layout/ spacing when image or banner is gone. - [ ] Fix: Control + click for local file links not working. - [ ] Implement Rust path normalization in workspace and record +- [x] Refactor workspaces to scale more easily ### `v0.0.0-dev10` -- [ ] Client Documentationn (Types, Github CI) +- [ ] Client Documentation (Types, Github CI) + - [ ] [clean-jsdoc-theme](https://www.npmjs.com/package/@clean-jsdoc-theme/typedoc) - [ ] Remove Naive UI dependency and implement custom vue components - [ ] Expand Footer with Source mode. - [ ] Source Mode: Raw source of the file, only when MIME type is not a binary. @@ -124,6 +126,9 @@ The first stage of the project is to create a simple file browser like applicati - [ ] Define CSS variables, modularize CSS - [ ] Add UX to move banner offset in edit mode. (scroll, zoom) +- [ ] Add infoboxes + - [ ] Infobox Definition Component: Table, Attributes, Types + - [ ] Values stored `config.json`, as well as relative component definition path. ### `v0.0.0-dev13` diff --git a/torii-desktop/src/recent/mod.rs b/torii-desktop/src/recent/mod.rs index 0f0c586..7eeee11 100644 --- a/torii-desktop/src/recent/mod.rs +++ b/torii-desktop/src/recent/mod.rs @@ -4,7 +4,7 @@ //! from the desktop application. use serde::{Deserialize, Serialize}; -use serde_json::Value; +use serde_json::{Map, Value}; use std::{fs::File, io::ErrorKind, path::PathBuf}; use tauri::{AppHandle, Manager, path::BaseDirectory}; @@ -79,45 +79,61 @@ impl RecentProjectMetadata { pub async fn get_extended(app: AppHandle) -> Result, String> { let mut projects = Self::get(app.clone()).await?; - if cfg!(dev) { - // If we are in development mode, link the `torii-example` demo workspace. This - // Torii project is version tracked in this repository and shared with collaborators. - let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); + // Parse the definition of example workspaces + const WORKSPACE_CONFIGURATION: &str = include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../torii-workspaces/workspaces.json" + )); + let example_projects: Vec> = + serde_json::from_str(WORKSPACE_CONFIGURATION) + .expect("configuration file `workspaces.json` should be valid JSON"); + + // If we are in development mode, link the `torii-example` demo workspace. This + // Torii project is version tracked in this repository and shared with collaborators. + #[cfg(dev)] + let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); + + // If we are in production mode, we want to link only the "Torii Welcome" workspace, + // by adding it to the list of recent projects. The welcome workspace is stored in + // resources. + #[cfg(not(dev))] + let release_example_workspace = + match app.path().resolve("workspaces", BaseDirectory::Resource) { + Ok(o) => o, + _ => return Ok(projects), + }; + + for p in example_projects.iter() { + let name = p + .get("name") + .and_then(|v| v.as_str()) + .expect("configuration file `workspaces.json` should follow schema"); + let path = p + .get("path") + .and_then(|v| v.as_str()) + .expect("configuration file `workspaces.json` should follow schema"); + + #[cfg(not(dev))] + let release = p.get("release").and_then(|b| b.as_bool()).unwrap_or(false); + + #[cfg(not(dev))] + if !release { + continue; + } + + #[cfg(dev)] + let full_path = PathBuf::from(&manifest_dir) + .join("../torii-workspaces") + .join(path); + #[cfg(not(dev))] + let full_path = release_example_workspace.join(path); - // Link demo workspaces for development purposes. projects.push(RecentProjectMetadata { - name: "Torii Welcome".to_string(), - path: PathBuf::from(&manifest_dir).join("../torii-workspace-welcome"), + name: name.to_string(), + path: full_path, is_system: true, last_opened: 0, }); - projects.push(RecentProjectMetadata { - name: "Torii Contributors".to_string(), - path: PathBuf::from(&manifest_dir).join("../torii-workspace-contrib"), - is_system: true, - last_opened: 0, - }); - projects.push(RecentProjectMetadata { - name: "Torii Dev Tests".to_string(), - path: PathBuf::from(&manifest_dir).join("../torii-workspace-dev"), - is_system: true, - last_opened: 0, - }); - } else { - // If we are in production mode, we want to link only the "Torii Welcome" workspace, - // by adding it to the list of recent projects. The welcome workspace is stored in - // resources. - app.path() - .resolve("workspace-welcome", BaseDirectory::Resource) - .map(|welcome_dir| { - projects.push(RecentProjectMetadata { - name: "Torii Welcome".to_string(), - path: welcome_dir, - is_system: true, - last_opened: 0, - }); - }) - .unwrap_or(()); } Ok(projects) diff --git a/torii-desktop/tauri.conf.json b/torii-desktop/tauri.conf.json index 5d5b949..84176ba 100644 --- a/torii-desktop/tauri.conf.json +++ b/torii-desktop/tauri.conf.json @@ -39,7 +39,8 @@ "debugApplicationIdSuffix": ".debug" }, "resources": { - "../torii-workspace-welcome/": "workspace-welcome/" + "../torii-workspaces/welcome": "workspaces/welcome/", + "../torii-workspaces/workspaces.json": "workspaces/workspaces.json" } } } diff --git a/torii-workspaces/README.md b/torii-workspaces/README.md new file mode 100644 index 0000000..4594564 --- /dev/null +++ b/torii-workspaces/README.md @@ -0,0 +1,11 @@ +# Torii Workspaces + +This folder contains all example workspaces, which will be visible when running the Torii application. + +### Contributing + +Usually there is no need to create new workspaces, but for the rare case when a new workspace is needed, please be aware to change the following: + +- Create a new directory in this folder. +- In [workspaces.json](./workspaces.json), add a new entry for the workspace, giving it a name and the name of the newly created folder. If this repository should only be visible in dev builds, the `release` attribute should be `false`. +- If this workspace for some reason needs to end up in the release build, you need to link the newly created workspace in [tauri.conf.json](../torii-desktop/tauri.conf.json) as a resource. The repository is not copied to the workspace resources per default. diff --git a/torii-workspace-contrib/Architecture.md b/torii-workspaces/contributors/Architecture.md similarity index 100% rename from torii-workspace-contrib/Architecture.md rename to torii-workspaces/contributors/Architecture.md diff --git a/torii-workspace-contrib/Plugin API.md b/torii-workspaces/contributors/Plugin API.md similarity index 100% rename from torii-workspace-contrib/Plugin API.md rename to torii-workspaces/contributors/Plugin API.md diff --git a/torii-workspace-contrib/README.md b/torii-workspaces/contributors/README.md similarity index 100% rename from torii-workspace-contrib/README.md rename to torii-workspaces/contributors/README.md diff --git a/torii-workspace-dev/Flower.md b/torii-workspaces/dev-tests/Flower.md similarity index 100% rename from torii-workspace-dev/Flower.md rename to torii-workspaces/dev-tests/Flower.md diff --git a/torii-workspace-dev/Flower.png b/torii-workspaces/dev-tests/Flower.png similarity index 100% rename from torii-workspace-dev/Flower.png rename to torii-workspaces/dev-tests/Flower.png diff --git a/torii-workspace-dev/Kobe City.banner.png b/torii-workspaces/dev-tests/Kobe City.banner.png similarity index 100% rename from torii-workspace-dev/Kobe City.banner.png rename to torii-workspaces/dev-tests/Kobe City.banner.png diff --git a/torii-workspace-dev/Kobe City.md b/torii-workspaces/dev-tests/Kobe City.md similarity index 100% rename from torii-workspace-dev/Kobe City.md rename to torii-workspaces/dev-tests/Kobe City.md diff --git a/torii-workspace-dev/README.md b/torii-workspaces/dev-tests/README.md similarity index 100% rename from torii-workspace-dev/README.md rename to torii-workspaces/dev-tests/README.md diff --git a/torii-workspace-dev/Sky Castle.banner.png b/torii-workspaces/dev-tests/Sky Castle.banner.png similarity index 100% rename from torii-workspace-dev/Sky Castle.banner.png rename to torii-workspaces/dev-tests/Sky Castle.banner.png diff --git a/torii-workspace-dev/Sky Castle.md b/torii-workspaces/dev-tests/Sky Castle.md similarity index 100% rename from torii-workspace-dev/Sky Castle.md rename to torii-workspaces/dev-tests/Sky Castle.md diff --git a/torii-workspace-dev/Sky Castle.png b/torii-workspaces/dev-tests/Sky Castle.png similarity index 100% rename from torii-workspace-dev/Sky Castle.png rename to torii-workspaces/dev-tests/Sky Castle.png diff --git a/torii-workspace-welcome/Changelog.md b/torii-workspaces/welcome/Changelog.md similarity index 100% rename from torii-workspace-welcome/Changelog.md rename to torii-workspaces/welcome/Changelog.md diff --git a/torii-workspace-welcome/Components.md b/torii-workspaces/welcome/Components.md similarity index 100% rename from torii-workspace-welcome/Components.md rename to torii-workspaces/welcome/Components.md diff --git a/torii-workspace-welcome/Components/Article.md b/torii-workspaces/welcome/Components/Article.md similarity index 100% rename from torii-workspace-welcome/Components/Article.md rename to torii-workspaces/welcome/Components/Article.md diff --git a/torii-workspace-welcome/Components/Folder.md b/torii-workspaces/welcome/Components/Folder.md similarity index 100% rename from torii-workspace-welcome/Components/Folder.md rename to torii-workspaces/welcome/Components/Folder.md diff --git a/torii-workspace-welcome/Components/Images.md b/torii-workspaces/welcome/Components/Images.md similarity index 100% rename from torii-workspace-welcome/Components/Images.md rename to torii-workspaces/welcome/Components/Images.md diff --git a/torii-workspace-welcome/README.md b/torii-workspaces/welcome/README.md similarity index 100% rename from torii-workspace-welcome/README.md rename to torii-workspaces/welcome/README.md diff --git a/torii-workspace-welcome/README.png b/torii-workspaces/welcome/README.png similarity index 100% rename from torii-workspace-welcome/README.png rename to torii-workspaces/welcome/README.png diff --git a/torii-workspace-welcome/Vision.md b/torii-workspaces/welcome/Vision.md similarity index 100% rename from torii-workspace-welcome/Vision.md rename to torii-workspaces/welcome/Vision.md diff --git a/torii-workspace-welcome/Vision/Cartography.md b/torii-workspaces/welcome/Vision/Cartography.md similarity index 100% rename from torii-workspace-welcome/Vision/Cartography.md rename to torii-workspaces/welcome/Vision/Cartography.md diff --git a/torii-workspace-welcome/Vision/Infoboxes.md b/torii-workspaces/welcome/Vision/Infoboxes.md similarity index 100% rename from torii-workspace-welcome/Vision/Infoboxes.md rename to torii-workspaces/welcome/Vision/Infoboxes.md diff --git a/torii-workspace-welcome/Vision/Languages.md b/torii-workspaces/welcome/Vision/Languages.md similarity index 100% rename from torii-workspace-welcome/Vision/Languages.md rename to torii-workspaces/welcome/Vision/Languages.md diff --git a/torii-workspace-welcome/Vision/Plugins.md b/torii-workspaces/welcome/Vision/Plugins.md similarity index 100% rename from torii-workspace-welcome/Vision/Plugins.md rename to torii-workspaces/welcome/Vision/Plugins.md diff --git a/torii-workspaces/workspaces.json b/torii-workspaces/workspaces.json new file mode 100644 index 0000000..7a0447e --- /dev/null +++ b/torii-workspaces/workspaces.json @@ -0,0 +1,17 @@ +[ + { + "path": "welcome", + "name": "Torii Welcome", + "release": true + }, + { + "path": "contributors", + "name": "Torii Contributors", + "release": false + }, + { + "path": "dev-tests", + "name": "Torii Dev Tests", + "release": false + } +] From 3218696f3612859851e4c51be38738c280986d60 Mon Sep 17 00:00:00 2001 From: Anatoly Wein Date: Mon, 10 Aug 2026 13:57:23 +0200 Subject: [PATCH 2/6] add new workspace for writing theory and start summarizing video --- torii-workspaces/README.md | 6 +- torii-workspaces/workspaces.json | 5 + .../writing-theory/40 Chapter Outline.md | 235 ++++++++++++++++++ 3 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 torii-workspaces/writing-theory/40 Chapter Outline.md diff --git a/torii-workspaces/README.md b/torii-workspaces/README.md index 4594564..db131fc 100644 --- a/torii-workspaces/README.md +++ b/torii-workspaces/README.md @@ -2,7 +2,11 @@ This folder contains all example workspaces, which will be visible when running the Torii application. -### Contributing +### Contributing (New Files) + +If you want to contribute new records to existing workspaces, just run Torii in development mode and edit the files. Git will automatically track the file changes. + +### Contributing (New Workspaces) Usually there is no need to create new workspaces, but for the rare case when a new workspace is needed, please be aware to change the following: diff --git a/torii-workspaces/workspaces.json b/torii-workspaces/workspaces.json index 7a0447e..16fb797 100644 --- a/torii-workspaces/workspaces.json +++ b/torii-workspaces/workspaces.json @@ -9,6 +9,11 @@ "name": "Torii Contributors", "release": false }, + { + "path": "writing-theory", + "name": "Writing Theory", + "release": true + }, { "path": "dev-tests", "name": "Torii Dev Tests", diff --git a/torii-workspaces/writing-theory/40 Chapter Outline.md b/torii-workspaces/writing-theory/40 Chapter Outline.md new file mode 100644 index 0000000..88dca84 --- /dev/null +++ b/torii-workspaces/writing-theory/40 Chapter Outline.md @@ -0,0 +1,235 @@ +# 40 Chapter Outline + +This document summarizes the 40 chapter plot structure for stories as discussed in ["The Only Plot Structure You Will Ever Need"](https://www.youtube.com/watch?v=vAbMAzhFiGc) by [TheNerdyNovelist](https://www.youtube.com/@TheNerdyNovelist). + +### Act 1 + +Introduce the protagonist and ordinary world they live in, their goals, flaws and the inciting incident that makes them leave their ordinary world. + + + +**0. Prologue** (optional) +Starts with an **opening image setting the tone and genre of the story**, shows how the world we're in is in trouble. Represents central conflict. Doesn't have to be about protagonist. + + + +**1. Really Bad Day** (protagonist general intro) +We get introduced to the protagonist and the "ordinary world", this should be done through a **lense which visually represents as much as possible about the protagonist**. The protagonist wants something, a "solution" (doesn't need to relate to plot), that will 'fix' their life, but there's an obstacle preventing it from happening (= really bad day). We learn the character's flaw, the thing that preventing them from getting to the "solution". The protagonist gets a "save the cat" moment to become likable (act of kindness, humor, competence, sympathy through oppression, etc.), despite being flawed. + + + +**2. Mystery and Theme** (protagonist flaw intro) +Introduce an event foreshadowing future events and **"stating" the flaw of the protagonist** (e.g. character flaw: they don't take themself too serious, then the theme is stated by another person saying: you're too hard on yourself, the "theme" = "life lesson" is ignored by protagonist). +The protagonist is "stubborn" and has **distractions that prevent protagonist from understanding consequences** of the event, we learn more unresolved emotional struggles of protagonist that highlight source of their flaws. + + + +**3. Link to Antagonist** (relation to antagonist discovery) +Protagonist discovers link to antagonist (more than regular citizen, **"unique" connection to antagonist which cannot be ignored**). Something happens to the protagonist, a challenge, threat or opportunity (e.g. treasure map, Aang learning his forsakening of the Avatar duty led to catastrophic results): The two become linked. + + + +**4. Grasping the Straws** (**resisting** relation to antagonist) +The **urge for the protagonist to go on an "adventure" grows**, stronger glimpse at characters' flaw as they criticize the world they live in. They are **not yet fully honest about what they need**. (e.g. Zuko and his boyfriend Honour) + + + +**5. Stasis is Death** (**motive to go for adventure**) +Here the protagonist realises that inaction is very bad (e.g. Frodo learns from Gandalf he has the One Ring). Here we learn that protagonist will die (literally, metaphorically, rhetorically, symbolically, theoretically) or never be happy (unfulfilled). This scene sums up what we learned in previous chapters. + + + +**6. Inciting Incident** (drama) +Something dramatic happens to upset the status quo in the ordinary world, lots of conflict and the disruption is something that cannot be resolved on its' own. This should impact the protagonist deeply, but not enough for protagonist to willingly leave ordinary world yet. + + + +**7. The Call to Adventure** (second motive to go for adventure) +The protagonist is forced into a situation where they have no choice but to focus on the new issueses arising and the immediate fallout of the inciting incident. The call to adventure should get in the way of protagonists previous plans and goals. + +*With the characters and their flaws, how does protagonist react to the flaw? How do they begin to push back against it? What is the protagonists' emotional state in the light of the call? Are they mad or depressed over having their original plans foiled?* + + + +**8. Meeting the Mentor** (understanding the journey) +A mentor enters protagonists' life (doesn't have to be a person, can be information, etc.) encouraging protagonist to take action and heed the call to adventure. The mentor gives protagonist the right tools, training, information or support that they will need. The mentor gives first hint of protagonists' fatal flaws, but protagonist doesn't realize or ignores it. + + + +**9. Refusal of the Call** (emotional climax) +Protagonists' last refusal to deal with adventure and accepts reality (e.g. Bilbo understands he could die on the adventure). Intrigue, tension, mystery, maybe even supernatural events are building up, and protagonist tries their best to ignore. Protagonist begins to build regret and doubt and is increasingly unable to remain inactive. + + + +**10. Pull Out the Rag** (negative) +Protagonist tries to fix issueses of ordinary world in order to resist call for adventure, something happens that pulls the rug out of them and sends them to a point of no return: They are forced to act (e.g. kidnapping, death, in JJBA III. Jotaro discovers his mother is ill and has to go for Dio). This scene should hook the reader showing that the stakes are high: The protagonist must take the mission or fall, as the event is personal, forcing the protagonist to get involved even if they do not want to (e.g. Frodo thinks he has to do the Quest alone, but is afraid to do so and he meditates at the Falls of Rauros). + +### Act 2A + +First half of the middle section, showing a positive rising action as the protagonist enters new world, learns grows and has more success than failure. + + + +**11. First Plot Point** (decision to go for adventure) +Protagonist actively choses to enter new world and its' comfortable (it can literally be new environment, but also something like change of setting, eg. trying something new). This is a big turning point in the story. There's no going back at this point in the story. The protagonist still has flaws, but is trying to fight the challenges of the new world. + + + +**12. Enemies & Allies** (introduce cast remains) +We get a sense of the new life in the new world as the protagonist feels like a fish out of water and their new role is established. Any remaining characters should be introduced here, as well as character archetypes like love interest or ally, at least one of them representing the B story. Often there can be conflicts with these characters from whome protagonist faces antagonism. + + + +**13. The B Story** (working on the flaw) +Protagonist spends time with B story character, where the B story character figuratively holds mirror to protagonist (e.g. Zuko to Zhao, Aang to Zuko, Strider to Nazgul). Explained why protagonist can't go back and given reasons to continue. (e.g. Frodo learning of what could happen in Galadriels' mirror). The theme is again restated here, but protagonist yet refuses to learn (e.g. Iroh repeatedly offering Zuko "calming" theme, to which he "angrily without thinking" responds) + + + +**14. Games & Trials** +Some of the more interesting things the new world offers are presented. The protagonist explores the new world and learns to navigate it, they receive some form of training, +#to-do + + + +**15. No More Games** +#to-do + + + +**16. Earning Respect** +#to-do + + + +**17. First Pinch Point** +#to-do + + + +**18. Problem Revealed** +#to-do + + + +**19. Truth & Ultimatum** +#to-do + + + +**20. Midpoint** +#to-do + + + +### Act 2B + +Second half of the middle section, reversal of 2A with negative rising action as the protagonist struggles and things start to fall apart. + + + +**21. External Demons Close In** +#to-do + + + +**22. Things Get Worse** +#to-do + + + +**23. Internal Demons Close In** +#to-do + + + +**24. Plan of Attack** +#to-do + + + +**25. Crucial Role** +#to-do + + + +**26. Second Pinch Point** +#to-do + + + +**27. All Is Lost** +#to-do + + + +**28. Shocking Revelation** +#to-do + + + +**29. Giving Up** +#to-do + + + +**30. Pep Talk** +#to-do + +### Act 3 + +Climax of the story where the protagonist confonts their inner flaw and overcomes it, allowing them to defeat the antagonist "despite all odds" + + + +**31. Seizing the Sword** +#to-do + + + +**32. Gathering the Team** +#to-do + + + +**33. Final Battle (Stage One)** +#to-do + + + +**34. Final Battle (Stage Two)** +#to-do + + + +**35. Final Battle (Stage Three)** +#to-do + + + +**36. Ultimate Defeat** +#to-do + + + +**37. Use the Force, Luke** +#to-do + + + +**38. Unexpected Victory** +#to-do + + + +**39. Bittersweet Reflection** +#to-do + + + +**40. Death of Self** +#to-do + + + +**41. After-Credit Scene** (optional) +Involves a closing image, visually representing conflict for future books or series, in a way that increases stakes (e.g. when Ozai tells Azula that her brother Zuko is a failure and Iroh a traitor and to go after them) \ No newline at end of file From b30e845074d0d7371ff96451e56f690be44b56d1 Mon Sep 17 00:00:00 2001 From: Anatoly Wein Date: Mon, 10 Aug 2026 15:28:03 +0200 Subject: [PATCH 3/6] refactor 40 chapter outline by TheNerdyNovelist --- torii-workspaces/writing-theory/Act 3.md | 59 ++++++ .../writing-theory/Plot Structure.md | 3 + .../Plot Structure/40 Chapter Outline.md | 9 + .../40 Chapter Outline/Act 1.md} | 197 ++---------------- .../40 Chapter Outline/Act 2A.md | 58 ++++++ .../40 Chapter Outline/Act 2B.md | 54 +++++ .../40 Chapter Outline/Act 3.md | 2 + 7 files changed, 197 insertions(+), 185 deletions(-) create mode 100644 torii-workspaces/writing-theory/Act 3.md create mode 100644 torii-workspaces/writing-theory/Plot Structure.md create mode 100644 torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline.md rename torii-workspaces/writing-theory/{40 Chapter Outline.md => Plot Structure/40 Chapter Outline/Act 1.md} (53%) create mode 100644 torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2A.md create mode 100644 torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2B.md create mode 100644 torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md diff --git a/torii-workspaces/writing-theory/Act 3.md b/torii-workspaces/writing-theory/Act 3.md new file mode 100644 index 0000000..e3c1daa --- /dev/null +++ b/torii-workspaces/writing-theory/Act 3.md @@ -0,0 +1,59 @@ +# Act 3 + +Climax of the story where the protagonist confonts their inner flaw and overcomes it, allowing them to defeat the antagonist "despite all odds" + + + +**31. Seizing the Sword** +#to-do + + + +**32. Gathering the Team** +#to-do + + + +**33. Final Battle (Stage One)** +#to-do + + + +**34. Final Battle (Stage Two)** +#to-do + + + +**35. Final Battle (Stage Three)** +#to-do + + + +**36. Ultimate Defeat** +#to-do + + + +**37. Use the Force, Luke** +#to-do + + + +**38. Unexpected Victory** +#to-do + + + +**39. Bittersweet Reflection** +#to-do + + + +**40. Death of Self** +#to-do + + + +**41. After-Credit Scene** (optional) +Involves a closing image, visually representing conflict for future books or series, in a way that increases stakes (e.g. when Ozai tells Azula that her brother Zuko is a failure and Iroh a traitor and to go after them) + diff --git a/torii-workspaces/writing-theory/Plot Structure.md b/torii-workspaces/writing-theory/Plot Structure.md new file mode 100644 index 0000000..a1565ad --- /dev/null +++ b/torii-workspaces/writing-theory/Plot Structure.md @@ -0,0 +1,3 @@ +# Plot Structure + +This section gives the analysis and some short summaries for different mainstream plot structures. They can be used strictly, as reference, de- and reconstructed or completely ignored. \ No newline at end of file diff --git a/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline.md b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline.md new file mode 100644 index 0000000..4121379 --- /dev/null +++ b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline.md @@ -0,0 +1,9 @@ +# 40 Chapter Outline + +This document summarizes the 40 chapter plot structure for stories as discussed in ["The Only Plot Structure You Will Ever Need"](https://www.youtube.com/watch?v=vAbMAzhFiGc) by [TheNerdyNovelist](https://www.youtube.com/@TheNerdyNovelist). + +- [Act 1](./40%20Chapter%20Outline/Act%201.md) - **Introduce the protagonist and ordinary world** they live in, their goals, flaws and the inciting incident that makes them leave their ordinary world. +- [Act 2A](./40%20Chapter%20Outline/Act%202A.md) - First half of the middle section, showing a positive rising action as the **protagonist enters new world**, learns, grows and has more success than failure. +- [Act 2B](./40%20Chapter%20Outline/Act%202B.md) - Second half of the middle section, reversal of 2A with negative rising action as the **protagonist struggles and things start to fall apart**. +- [Act 3](./40%20Chapter%20Outline/Act%203.md) - Climax of the story where the **protagonist confonts their inner flaw** and overcomes it, allowing them to defeat the antagonist "despite all odds" + diff --git a/torii-workspaces/writing-theory/40 Chapter Outline.md b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 1.md similarity index 53% rename from torii-workspaces/writing-theory/40 Chapter Outline.md rename to torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 1.md index 88dca84..140bd4e 100644 --- a/torii-workspaces/writing-theory/40 Chapter Outline.md +++ b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 1.md @@ -1,8 +1,4 @@ -# 40 Chapter Outline - -This document summarizes the 40 chapter plot structure for stories as discussed in ["The Only Plot Structure You Will Ever Need"](https://www.youtube.com/watch?v=vAbMAzhFiGc) by [TheNerdyNovelist](https://www.youtube.com/@TheNerdyNovelist). - -### Act 1 +# Act 1 Introduce the protagonist and ordinary world they live in, their goals, flaws and the inciting incident that makes them leave their ordinary world. @@ -13,223 +9,54 @@ Starts with an **opening image setting the tone and genre of the story**, shows -**1. Really Bad Day** (protagonist general intro) +**1. Really Bad Day** (protagonist general intro) We get introduced to the protagonist and the "ordinary world", this should be done through a **lense which visually represents as much as possible about the protagonist**. The protagonist wants something, a "solution" (doesn't need to relate to plot), that will 'fix' their life, but there's an obstacle preventing it from happening (= really bad day). We learn the character's flaw, the thing that preventing them from getting to the "solution". The protagonist gets a "save the cat" moment to become likable (act of kindness, humor, competence, sympathy through oppression, etc.), despite being flawed. -**2. Mystery and Theme** (protagonist flaw intro) -Introduce an event foreshadowing future events and **"stating" the flaw of the protagonist** (e.g. character flaw: they don't take themself too serious, then the theme is stated by another person saying: you're too hard on yourself, the "theme" = "life lesson" is ignored by protagonist). +**2. Mystery and Theme** (protagonist flaw intro) +Introduce an event foreshadowing future events and **"stating" the flaw of the protagonist** (e.g. character flaw: they don't take themself too serious, then the theme is stated by another person saying: you're too hard on yourself, the "theme" = "life lesson" is ignored by protagonist). The protagonist is "stubborn" and has **distractions that prevent protagonist from understanding consequences** of the event, we learn more unresolved emotional struggles of protagonist that highlight source of their flaws. -**3. Link to Antagonist** (relation to antagonist discovery) +**3. Link to Antagonist** (relation to antagonist discovery) Protagonist discovers link to antagonist (more than regular citizen, **"unique" connection to antagonist which cannot be ignored**). Something happens to the protagonist, a challenge, threat or opportunity (e.g. treasure map, Aang learning his forsakening of the Avatar duty led to catastrophic results): The two become linked. -**4. Grasping the Straws** (**resisting** relation to antagonist) +**4. Grasping the Straws** (**resisting** relation to antagonist) The **urge for the protagonist to go on an "adventure" grows**, stronger glimpse at characters' flaw as they criticize the world they live in. They are **not yet fully honest about what they need**. (e.g. Zuko and his boyfriend Honour) -**5. Stasis is Death** (**motive to go for adventure**) +**5. Stasis is Death** (**motive to go for adventure**) Here the protagonist realises that inaction is very bad (e.g. Frodo learns from Gandalf he has the One Ring). Here we learn that protagonist will die (literally, metaphorically, rhetorically, symbolically, theoretically) or never be happy (unfulfilled). This scene sums up what we learned in previous chapters. -**6. Inciting Incident** (drama) +**6. Inciting Incident** (drama) Something dramatic happens to upset the status quo in the ordinary world, lots of conflict and the disruption is something that cannot be resolved on its' own. This should impact the protagonist deeply, but not enough for protagonist to willingly leave ordinary world yet. -**7. The Call to Adventure** (second motive to go for adventure) +**7. The Call to Adventure** (second motive to go for adventure) The protagonist is forced into a situation where they have no choice but to focus on the new issueses arising and the immediate fallout of the inciting incident. The call to adventure should get in the way of protagonists previous plans and goals. *With the characters and their flaws, how does protagonist react to the flaw? How do they begin to push back against it? What is the protagonists' emotional state in the light of the call? Are they mad or depressed over having their original plans foiled?* -**8. Meeting the Mentor** (understanding the journey) +**8. Meeting the Mentor** (understanding the journey) A mentor enters protagonists' life (doesn't have to be a person, can be information, etc.) encouraging protagonist to take action and heed the call to adventure. The mentor gives protagonist the right tools, training, information or support that they will need. The mentor gives first hint of protagonists' fatal flaws, but protagonist doesn't realize or ignores it. -**9. Refusal of the Call** (emotional climax) +**9. Refusal of the Call** (emotional climax) Protagonists' last refusal to deal with adventure and accepts reality (e.g. Bilbo understands he could die on the adventure). Intrigue, tension, mystery, maybe even supernatural events are building up, and protagonist tries their best to ignore. Protagonist begins to build regret and doubt and is increasingly unable to remain inactive. -**10. Pull Out the Rag** (negative) +**10. Pull Out the Rag** (negative) Protagonist tries to fix issueses of ordinary world in order to resist call for adventure, something happens that pulls the rug out of them and sends them to a point of no return: They are forced to act (e.g. kidnapping, death, in JJBA III. Jotaro discovers his mother is ill and has to go for Dio). This scene should hook the reader showing that the stakes are high: The protagonist must take the mission or fall, as the event is personal, forcing the protagonist to get involved even if they do not want to (e.g. Frodo thinks he has to do the Quest alone, but is afraid to do so and he meditates at the Falls of Rauros). -### Act 2A - -First half of the middle section, showing a positive rising action as the protagonist enters new world, learns grows and has more success than failure. - - - -**11. First Plot Point** (decision to go for adventure) -Protagonist actively choses to enter new world and its' comfortable (it can literally be new environment, but also something like change of setting, eg. trying something new). This is a big turning point in the story. There's no going back at this point in the story. The protagonist still has flaws, but is trying to fight the challenges of the new world. - - - -**12. Enemies & Allies** (introduce cast remains) -We get a sense of the new life in the new world as the protagonist feels like a fish out of water and their new role is established. Any remaining characters should be introduced here, as well as character archetypes like love interest or ally, at least one of them representing the B story. Often there can be conflicts with these characters from whome protagonist faces antagonism. - - - -**13. The B Story** (working on the flaw) -Protagonist spends time with B story character, where the B story character figuratively holds mirror to protagonist (e.g. Zuko to Zhao, Aang to Zuko, Strider to Nazgul). Explained why protagonist can't go back and given reasons to continue. (e.g. Frodo learning of what could happen in Galadriels' mirror). The theme is again restated here, but protagonist yet refuses to learn (e.g. Iroh repeatedly offering Zuko "calming" theme, to which he "angrily without thinking" responds) - - - -**14. Games & Trials** -Some of the more interesting things the new world offers are presented. The protagonist explores the new world and learns to navigate it, they receive some form of training, -#to-do - - - -**15. No More Games** -#to-do - - - -**16. Earning Respect** -#to-do - - - -**17. First Pinch Point** -#to-do - - - -**18. Problem Revealed** -#to-do - - - -**19. Truth & Ultimatum** -#to-do - - - -**20. Midpoint** -#to-do - - - -### Act 2B - -Second half of the middle section, reversal of 2A with negative rising action as the protagonist struggles and things start to fall apart. - - - -**21. External Demons Close In** -#to-do - - - -**22. Things Get Worse** -#to-do - - - -**23. Internal Demons Close In** -#to-do - - - -**24. Plan of Attack** -#to-do - - - -**25. Crucial Role** -#to-do - - - -**26. Second Pinch Point** -#to-do - - - -**27. All Is Lost** -#to-do - - - -**28. Shocking Revelation** -#to-do - - - -**29. Giving Up** -#to-do - - - -**30. Pep Talk** -#to-do - -### Act 3 - -Climax of the story where the protagonist confonts their inner flaw and overcomes it, allowing them to defeat the antagonist "despite all odds" - - - -**31. Seizing the Sword** -#to-do - - - -**32. Gathering the Team** -#to-do - - - -**33. Final Battle (Stage One)** -#to-do - - - -**34. Final Battle (Stage Two)** -#to-do - - - -**35. Final Battle (Stage Three)** -#to-do - - - -**36. Ultimate Defeat** -#to-do - - - -**37. Use the Force, Luke** -#to-do - - - -**38. Unexpected Victory** -#to-do - - - -**39. Bittersweet Reflection** -#to-do - - - -**40. Death of Self** -#to-do - - - -**41. After-Credit Scene** (optional) -Involves a closing image, visually representing conflict for future books or series, in a way that increases stakes (e.g. when Ozai tells Azula that her brother Zuko is a failure and Iroh a traitor and to go after them) \ No newline at end of file diff --git a/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2A.md b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2A.md new file mode 100644 index 0000000..96143fe --- /dev/null +++ b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2A.md @@ -0,0 +1,58 @@ +# Act 2A + +First half of the middle section, showing a positive rising action as the protagonist enters new world, learns grows and has more success than failure. + + + +**11. First Plot Point** (decision to go for adventure) +Protagonist actively choses to enter new world and its' comfortable (it can literally be new environment, but also something like change of setting, eg. trying something new). This is a big turning point in the story. There's no going back at this point in the story. The protagonist still has flaws, but is trying to fight the challenges of the new world. + + + +**12. Enemies & Allies** (introduce cast remains) +We get a sense of the new life in the new world as the protagonist feels like a fish out of water and their new role is established. Any remaining characters should be introduced here, as well as character archetypes like love interest or ally, at least one of them representing the B story. Often there can be conflicts with these characters from whome protagonist faces antagonism. + + + +**13. The B Story** (working on the flaw) +Protagonist spends time with B story character, where the B story character figuratively holds mirror to protagonist (e.g. Zuko to Zhao, Aang to Zuko, Strider to Nazgul, Frodo to Gollum). Explained why protagonist can't go back and given reasons to continue. (e.g. Frodo learning of what could happen in Galadriels' mirror). The theme is again restated here, but protagonist yet refuses to learn (e.g. Iroh repeatedly offering Zuko "calming" theme, to which he "angrily without thinking" responds) + + + +**14. Games & Trials** +Some of the more interesting things the new world offers are presented. The protagonist explores the new world and learns to navigate it, they receive some form of training and grow from it (e.g. as a form of a challenge, where even losing makes the protagonist understand new things = grow) + + + +#to-do + + + +**15. No More Games** +#to-do + + + +**16. Earning Respect** +#to-do + + + +**17. First Pinch Point** +#to-do + + + +**18. Problem Revealed** +#to-do + + + +**19. Truth & Ultimatum** +#to-do + + + +**20. Midpoint** +#to-do + diff --git a/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2B.md b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2B.md new file mode 100644 index 0000000..04ac2e3 --- /dev/null +++ b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 2B.md @@ -0,0 +1,54 @@ +# Act 2B + +Second half of the middle section, reversal of 2A with negative rising action as the protagonist struggles and things start to fall apart. + + + +**21. External Demons Close In** +#to-do + + + +**22. Things Get Worse** +#to-do + + + +**23. Internal Demons Close In** +#to-do + + + +**24. Plan of Attack** +#to-do + + + +**25. Crucial Role** +#to-do + + + +**26. Second Pinch Point** +#to-do + + + +**27. All Is Lost** +#to-do + + + +**28. Shocking Revelation** +#to-do + + + +**29. Giving Up** +#to-do + + + +**30. Pep Talk** +#to-do + diff --git a/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md new file mode 100644 index 0000000..09f37b3 --- /dev/null +++ b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md @@ -0,0 +1,2 @@ +# New File + From e756baf997d5320991367257d591583e9d3f979c Mon Sep 17 00:00:00 2001 From: Anatoly Wein Date: Mon, 10 Aug 2026 16:44:12 +0200 Subject: [PATCH 4/6] refactor --- ROADMAP.md | 5 +- torii-workspaces/writing-theory/Act 3.md | 59 ------------------- .../writing-theory/Plot Structure.md | 14 ++++- .../40 Chapter Outline/Act 3.md | 59 ++++++++++++++++++- 4 files changed, 75 insertions(+), 62 deletions(-) delete mode 100644 torii-workspaces/writing-theory/Act 3.md diff --git a/ROADMAP.md b/ROADMAP.md index 9e6889f..49d6973 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -97,9 +97,12 @@ The first stage of the project is to create a simple file browser like applicati - [ ] View Mode: Hides placeholder grids and no interaction - [ ] View Mode: Hide autocomplete - [ ] View Mode: Fix: Link should be clickable + - [ ] Remote URL + - [ ] Local Files/ Relative Paths - [x] View Mode: Fix layout/ spacing when image or banner is gone. -- [ ] Fix: Control + click for local file links not working. +- [ ] Remove: Control + click. - [ ] Implement Rust path normalization in workspace and record +- [ ] Autocomplete should fill encoded paths (e.g. space should become `%20`) - [x] Refactor workspaces to scale more easily ### `v0.0.0-dev10` diff --git a/torii-workspaces/writing-theory/Act 3.md b/torii-workspaces/writing-theory/Act 3.md deleted file mode 100644 index e3c1daa..0000000 --- a/torii-workspaces/writing-theory/Act 3.md +++ /dev/null @@ -1,59 +0,0 @@ -# Act 3 - -Climax of the story where the protagonist confonts their inner flaw and overcomes it, allowing them to defeat the antagonist "despite all odds" - - - -**31. Seizing the Sword** -#to-do - - - -**32. Gathering the Team** -#to-do - - - -**33. Final Battle (Stage One)** -#to-do - - - -**34. Final Battle (Stage Two)** -#to-do - - - -**35. Final Battle (Stage Three)** -#to-do - - - -**36. Ultimate Defeat** -#to-do - - - -**37. Use the Force, Luke** -#to-do - - - -**38. Unexpected Victory** -#to-do - - - -**39. Bittersweet Reflection** -#to-do - - - -**40. Death of Self** -#to-do - - - -**41. After-Credit Scene** (optional) -Involves a closing image, visually representing conflict for future books or series, in a way that increases stakes (e.g. when Ozai tells Azula that her brother Zuko is a failure and Iroh a traitor and to go after them) - diff --git a/torii-workspaces/writing-theory/Plot Structure.md b/torii-workspaces/writing-theory/Plot Structure.md index a1565ad..a58b889 100644 --- a/torii-workspaces/writing-theory/Plot Structure.md +++ b/torii-workspaces/writing-theory/Plot Structure.md @@ -1,3 +1,15 @@ # Plot Structure -This section gives the analysis and some short summaries for different mainstream plot structures. They can be used strictly, as reference, de- and reconstructed or completely ignored. \ No newline at end of file +This section gives the analysis and some short summaries for different mainstream plot structures. They can be used strictly, as reference, de- and reconstructed or completely ignored. The subsections are divided by general theory/ guides and analysis of the plot structure of specific shows. + +### Theory + +- [40 Chapter Outline](./Plot%20Structure/40%20Chapter%20Outline.md) by [TheNerdyNovelist](https://www.youtube.com/@TheNerdyNovelist). + +### Analysis + +- TBA + + + +  \ No newline at end of file diff --git a/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md index 09f37b3..e3c1daa 100644 --- a/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md +++ b/torii-workspaces/writing-theory/Plot Structure/40 Chapter Outline/Act 3.md @@ -1,2 +1,59 @@ -# New File +# Act 3 + +Climax of the story where the protagonist confonts their inner flaw and overcomes it, allowing them to defeat the antagonist "despite all odds" + + + +**31. Seizing the Sword** +#to-do + + + +**32. Gathering the Team** +#to-do + + + +**33. Final Battle (Stage One)** +#to-do + + + +**34. Final Battle (Stage Two)** +#to-do + + + +**35. Final Battle (Stage Three)** +#to-do + + + +**36. Ultimate Defeat** +#to-do + + + +**37. Use the Force, Luke** +#to-do + + + +**38. Unexpected Victory** +#to-do + + + +**39. Bittersweet Reflection** +#to-do + + + +**40. Death of Self** +#to-do + + + +**41. After-Credit Scene** (optional) +Involves a closing image, visually representing conflict for future books or series, in a way that increases stakes (e.g. when Ozai tells Azula that her brother Zuko is a failure and Iroh a traitor and to go after them) From a2e6d5ccec8a41eb6ed010ea3924ebcf40f02d27 Mon Sep 17 00:00:00 2001 From: Anatoly Wein Date: Mon, 10 Aug 2026 16:51:10 +0200 Subject: [PATCH 5/6] refactor `Value` to `ExampleWorkspace` --- torii-desktop/src/recent/mod.rs | 34 ++++++++++++++------------------- torii-desktop/tauri.conf.json | 1 + 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/torii-desktop/src/recent/mod.rs b/torii-desktop/src/recent/mod.rs index 7eeee11..8dc834a 100644 --- a/torii-desktop/src/recent/mod.rs +++ b/torii-desktop/src/recent/mod.rs @@ -34,6 +34,14 @@ pub struct RecentProjectMetadata { pub last_opened: u64, } +/// This is used for example workspaces. +#[derive(Serialize, Deserialize, Debug)] +struct ExampleWorkspace { + pub name: String, + pub path: PathBuf, + pub release: bool, +} + /// Gets the current time in milliseconds since the Unix epoch. This is used to /// set the `last_opened` field of the `RecentProjectMetadata` struct when a project /// is added to the list of recent projects. @@ -84,9 +92,8 @@ impl RecentProjectMetadata { env!("CARGO_MANIFEST_DIR"), "/../torii-workspaces/workspaces.json" )); - let example_projects: Vec> = - serde_json::from_str(WORKSPACE_CONFIGURATION) - .expect("configuration file `workspaces.json` should be valid JSON"); + let example_projects: Vec = serde_json::from_str(WORKSPACE_CONFIGURATION) + .expect("configuration file `workspaces.json` should be valid JSON"); // If we are in development mode, link the `torii-example` demo workspace. This // Torii project is version tracked in this repository and shared with collaborators. @@ -104,32 +111,19 @@ impl RecentProjectMetadata { }; for p in example_projects.iter() { - let name = p - .get("name") - .and_then(|v| v.as_str()) - .expect("configuration file `workspaces.json` should follow schema"); - let path = p - .get("path") - .and_then(|v| v.as_str()) - .expect("configuration file `workspaces.json` should follow schema"); - - #[cfg(not(dev))] - let release = p.get("release").and_then(|b| b.as_bool()).unwrap_or(false); - - #[cfg(not(dev))] - if !release { + if cfg!(not(dev)) && !p.release { continue; } #[cfg(dev)] let full_path = PathBuf::from(&manifest_dir) .join("../torii-workspaces") - .join(path); + .join(&p.path); #[cfg(not(dev))] - let full_path = release_example_workspace.join(path); + let full_path = release_example_workspace.join(&p.path); projects.push(RecentProjectMetadata { - name: name.to_string(), + name: p.name.to_string(), path: full_path, is_system: true, last_opened: 0, diff --git a/torii-desktop/tauri.conf.json b/torii-desktop/tauri.conf.json index 84176ba..d31dfd1 100644 --- a/torii-desktop/tauri.conf.json +++ b/torii-desktop/tauri.conf.json @@ -40,6 +40,7 @@ }, "resources": { "../torii-workspaces/welcome": "workspaces/welcome/", + "../torii-workspaces/writing-theory": "workspaces/writing-theory/", "../torii-workspaces/workspaces.json": "workspaces/workspaces.json" } } From 6eaff35d93d340534a5766d56f4e95c0f072ac75 Mon Sep 17 00:00:00 2001 From: Anatoly Wein Date: Mon, 10 Aug 2026 16:55:48 +0200 Subject: [PATCH 6/6] removed unused imports --- torii-desktop/src/recent/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/torii-desktop/src/recent/mod.rs b/torii-desktop/src/recent/mod.rs index 8dc834a..7cc931a 100644 --- a/torii-desktop/src/recent/mod.rs +++ b/torii-desktop/src/recent/mod.rs @@ -4,9 +4,9 @@ //! from the desktop application. use serde::{Deserialize, Serialize}; -use serde_json::{Map, Value}; +use serde_json::Value; use std::{fs::File, io::ErrorKind, path::PathBuf}; -use tauri::{AppHandle, Manager, path::BaseDirectory}; +use tauri::{AppHandle, Manager}; /// The path to the file where recent projects are stored. This is a JSON file /// that contains an array of `RecentProjectMetadata` objects. The parent is