@powerhousedao/academy 5.0.0-staging.1 → 5.0.0-staging.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/.vscode/settings.json +1 -1
  2. package/CHANGELOG.md +64 -0
  3. package/README.md +3 -3
  4. package/babel.config.js +1 -1
  5. package/blog/BeyondCommunication-ABlueprintForDevelopment.md +25 -24
  6. package/blog/TheChallengeOfChange.md +21 -21
  7. package/docs/academy/01-GetStarted/00-ExploreDemoPackage.mdx +61 -24
  8. package/docs/academy/01-GetStarted/01-CreateNewPowerhouseProject.md +21 -12
  9. package/docs/academy/01-GetStarted/02-DefineToDoListDocumentModel.md +24 -19
  10. package/docs/academy/01-GetStarted/03-ImplementOperationReducers.md +44 -41
  11. package/docs/academy/01-GetStarted/04-BuildToDoListEditor.md +10 -10
  12. package/docs/academy/01-GetStarted/05-SpecDrivenAI.md +143 -0
  13. package/docs/academy/01-GetStarted/home.mdx +185 -90
  14. package/docs/academy/01-GetStarted/styles.module.css +5 -5
  15. package/docs/academy/02-MasteryTrack/01-BuilderEnvironment/01-Prerequisites.md +46 -18
  16. package/docs/academy/02-MasteryTrack/01-BuilderEnvironment/02-StandardDocumentModelWorkflow.md +118 -68
  17. package/docs/academy/02-MasteryTrack/01-BuilderEnvironment/03-BuilderTools.md +75 -33
  18. package/docs/academy/02-MasteryTrack/01-BuilderEnvironment/_category_.json +6 -6
  19. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/01-WhatIsADocumentModel.md +30 -21
  20. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/02-SpecifyTheStateSchema.md +41 -37
  21. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/03-SpecifyDocumentOperations.md +29 -25
  22. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/04-UseTheDocumentModelGenerator.md +36 -37
  23. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/05-ImplementDocumentReducers.md +128 -109
  24. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/06-ImplementDocumentModelTests.md +95 -86
  25. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/07-ExampleToDoListRepository.md +7 -9
  26. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/_category_.json +6 -6
  27. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/01-BuildingDocumentEditors.md +65 -47
  28. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/02-ConfiguringDrives.md +77 -62
  29. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/03-BuildingADriveExplorer.md +360 -349
  30. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/00-DocumentToolbar.mdx +16 -10
  31. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/01-OperationHistory.md +10 -7
  32. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/02-RevisionHistoryTimeline.md +26 -11
  33. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/_category_.json +6 -6
  34. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/07-Authorization/01-RenownAuthenticationFlow.md +14 -7
  35. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/07-Authorization/02-Authorization.md +0 -1
  36. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/07-Authorization/_category_.json +5 -5
  37. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/_category_.json +1 -1
  38. package/docs/academy/02-MasteryTrack/04-WorkWithData/01-GraphQLAtPowerhouse.md +45 -33
  39. package/docs/academy/02-MasteryTrack/04-WorkWithData/02-UsingTheAPI.mdx +61 -18
  40. package/docs/academy/02-MasteryTrack/04-WorkWithData/03-UsingSubgraphs.md +50 -54
  41. package/docs/academy/02-MasteryTrack/04-WorkWithData/04-analytics-processor.md +126 -110
  42. package/docs/academy/02-MasteryTrack/04-WorkWithData/05-RelationalDbProcessor.md +75 -45
  43. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/GraphQL References/QueryingADocumentWithGraphQL.md +23 -21
  44. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/best-practices.md +9 -9
  45. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/graphql/index.md +11 -23
  46. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/graphql/integration.md +25 -9
  47. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/intro.md +10 -10
  48. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/typescript/benchmarks.md +1 -1
  49. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/typescript/index.md +16 -11
  50. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/typescript/memory.md +6 -5
  51. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/typescript/schema.md +2 -2
  52. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/typescript/utilities.md +7 -5
  53. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/use-cases/maker.md +32 -58
  54. package/docs/academy/02-MasteryTrack/04-WorkWithData/06-Analytics Engine/use-cases/processors.md +1 -1
  55. package/docs/academy/02-MasteryTrack/04-WorkWithData/07-drive-analytics.md +105 -71
  56. package/docs/academy/02-MasteryTrack/04-WorkWithData/_ARCHIVE-AnalyticsProcessorTutorial/_01-SetupBuilderEnvironment.md +22 -0
  57. package/docs/academy/02-MasteryTrack/04-WorkWithData/_ARCHIVE-AnalyticsProcessorTutorial/_02-CreateNewPowerhouseProject.md +9 -8
  58. package/docs/academy/02-MasteryTrack/04-WorkWithData/_ARCHIVE-AnalyticsProcessorTutorial/_03-GenerateAnAnalyticsProcessor.md +28 -32
  59. package/docs/academy/02-MasteryTrack/04-WorkWithData/_ARCHIVE-AnalyticsProcessorTutorial/_04-UpdateAnalyticsProcessor.md +25 -26
  60. package/docs/academy/02-MasteryTrack/04-WorkWithData/_ARCHIVE-AnalyticsProcessorTutorial/_category_.json +1 -1
  61. package/docs/academy/02-MasteryTrack/04-WorkWithData/_category_.json +7 -7
  62. package/docs/academy/02-MasteryTrack/05-Launch/01-IntroductionToPackages.md +3 -4
  63. package/docs/academy/02-MasteryTrack/05-Launch/02-PublishYourProject.md +69 -45
  64. package/docs/academy/02-MasteryTrack/05-Launch/03-SetupEnvironment.md +70 -40
  65. package/docs/academy/02-MasteryTrack/05-Launch/04-ConfigureEnvironment.md +1 -0
  66. package/docs/academy/02-MasteryTrack/05-Launch/_category_.json +7 -7
  67. package/docs/academy/02-MasteryTrack/_category_.json +6 -6
  68. package/docs/academy/03-ExampleUsecases/Chatroom/02-CreateNewPowerhouseProject.md +5 -3
  69. package/docs/academy/03-ExampleUsecases/Chatroom/03-DefineChatroomDocumentModel.md +38 -37
  70. package/docs/academy/03-ExampleUsecases/Chatroom/04-ImplementOperationReducers.md +45 -41
  71. package/docs/academy/03-ExampleUsecases/Chatroom/05-ImplementChatroomEditor.md +14 -14
  72. package/docs/academy/03-ExampleUsecases/Chatroom/06-LaunchALocalReactor.md +6 -6
  73. package/docs/academy/03-ExampleUsecases/Chatroom/_category_.json +1 -1
  74. package/docs/academy/04-APIReferences/00-PowerhouseCLI.md +9 -7
  75. package/docs/academy/04-APIReferences/01-ReactHooks.md +177 -129
  76. package/docs/academy/04-APIReferences/04-RelationalDatabase.md +121 -113
  77. package/docs/academy/04-APIReferences/05-PHDocumentMigrationGuide.md +48 -41
  78. package/docs/academy/04-APIReferences/_category_.json +6 -6
  79. package/docs/academy/05-Architecture/00-PowerhouseArchitecture.md +1 -2
  80. package/docs/academy/05-Architecture/01-WorkingWithTheReactor.md +11 -8
  81. package/docs/academy/05-Architecture/05-DocumentModelTheory/_category_.json +1 -1
  82. package/docs/academy/05-Architecture/_category_.json +6 -6
  83. package/docs/academy/06-ComponentLibrary/00-DocumentEngineering.md +25 -23
  84. package/docs/academy/06-ComponentLibrary/02-CreateCustomScalars.md +105 -93
  85. package/docs/academy/06-ComponentLibrary/03-IntegrateIntoAReactComponent.md +1 -0
  86. package/docs/academy/06-ComponentLibrary/_category_.json +7 -7
  87. package/docs/academy/07-Cookbook.md +267 -34
  88. package/docs/academy/08-Glossary.md +7 -1
  89. package/docs/bookofpowerhouse/01-Overview.md +2 -2
  90. package/docs/bookofpowerhouse/02-GeneralFrameworkAndPhilosophy.md +1 -7
  91. package/docs/bookofpowerhouse/03-PowerhouseSoftwareArchitecture.md +10 -7
  92. package/docs/bookofpowerhouse/04-DevelopmentApproaches.md +10 -4
  93. package/docs/bookofpowerhouse/05-SNOsandANewModelForOSSandPublicGoods.md +23 -30
  94. package/docs/bookofpowerhouse/06-SNOsInActionAndPlatformEconomies.md +0 -7
  95. package/docusaurus.config.ts +64 -66
  96. package/package.json +1 -1
  97. package/scripts/generate-combined-cli-docs.ts +43 -13
  98. package/sidebars.ts +1 -0
  99. package/src/components/HomepageFeatures/index.tsx +171 -78
  100. package/src/components/HomepageFeatures/styles.module.css +1 -2
  101. package/src/css/custom.css +89 -89
  102. package/src/pages/_archive-homepage.tsx +17 -16
  103. package/src/theme/DocCardList/index.tsx +9 -8
  104. package/static.json +6 -6
@@ -12,11 +12,33 @@ async function generateCombinedCliDocs() {
12
12
  const __dirname = path.dirname(__filename);
13
13
 
14
14
  // Define paths
15
- const academyDocsDir = path.resolve(__dirname, "..", "docs", "academy", "04-APIReferences");
15
+ const academyDocsDir = path.resolve(
16
+ __dirname,
17
+ "..",
18
+ "docs",
19
+ "academy",
20
+ "04-APIReferences",
21
+ );
16
22
  const targetDocFile = path.join(academyDocsDir, "00-PowerhouseCLI.md");
17
23
 
18
- const phCliCommandsPath = path.resolve(__dirname, "..", "..", "..", "clis", "ph-cli", "COMMANDS.md");
19
- const phCmdCommandsPath = path.resolve(__dirname, "..", "..", "..", "clis", "ph-cmd", "COMMANDS.md");
24
+ const phCliCommandsPath = path.resolve(
25
+ __dirname,
26
+ "..",
27
+ "..",
28
+ "..",
29
+ "clis",
30
+ "ph-cli",
31
+ "COMMANDS.md",
32
+ );
33
+ const phCmdCommandsPath = path.resolve(
34
+ __dirname,
35
+ "..",
36
+ "..",
37
+ "..",
38
+ "clis",
39
+ "ph-cmd",
40
+ "COMMANDS.md",
41
+ );
20
42
 
21
43
  // Read COMMANDS.md files
22
44
  const phCliCommandsContent = fs.readFileSync(phCliCommandsPath, "utf8");
@@ -27,13 +49,18 @@ async function generateCombinedCliDocs() {
27
49
  const tocHeader = "## Table of Contents";
28
50
  const tocIndex = content.indexOf(tocHeader);
29
51
  if (tocIndex === -1) {
30
- console.warn(`Warning: "## Table of Contents" not found in ${cliName} COMMANDS.md. Including entire file.`);
52
+ console.warn(
53
+ `Warning: "## Table of Contents" not found in ${cliName} COMMANDS.md. Including entire file.`,
54
+ );
31
55
  return content;
32
56
  }
33
- let commandsSection = content.substring(tocIndex + tocHeader.length).trim();
34
-
57
+ let commandsSection = content
58
+ .substring(tocIndex + tocHeader.length)
59
+ .trim();
60
+
35
61
  // Remove the auto-generation footer
36
- const footerRegex = /---\\n\\n\\\*This document was automatically generated from the help text in the codebase\\\.\\\*\\n?$/m;
62
+ const footerRegex =
63
+ /---\\n\\n\\\*This document was automatically generated from the help text in the codebase\\\.\\\*\\n?$/m;
37
64
  commandsSection = commandsSection.replace(footerRegex, "").trim();
38
65
  return commandsSection;
39
66
  };
@@ -42,7 +69,7 @@ async function generateCombinedCliDocs() {
42
69
  const phCmdDocs = extractCommands(phCmdCommandsContent, "ph-cmd");
43
70
 
44
71
  // Prepare the combined markdown
45
- let combinedDocs = `### ph-cmd Commands\\n\\n${phCmdDocs}\\n\\n### ph-cli Commands\\n\\n${phCliDocs}`;
72
+ const combinedDocs = `### ph-cmd Commands\\n\\n${phCmdDocs}\\n\\n### ph-cli Commands\\n\\n${phCliDocs}`;
46
73
 
47
74
  // Read the target documentation file
48
75
  let targetDocContent = fs.readFileSync(targetDocFile, "utf8");
@@ -54,11 +81,13 @@ async function generateCombinedCliDocs() {
54
81
  const endIndex = targetDocContent.indexOf(endPlaceholder);
55
82
 
56
83
  if (startIndex === -1 || endIndex === -1) {
57
- console.error(`Error: Placeholders not found in ${targetDocFile}. Please ensure the file contains:\\n${startPlaceholder}\\n...\\n${endPlaceholder}`);
84
+ console.error(
85
+ `Error: Placeholders not found in ${targetDocFile}. Please ensure the file contains:\\n${startPlaceholder}\\n...\\n${endPlaceholder}`,
86
+ );
58
87
  process.exit(1);
59
88
  }
60
89
 
61
- targetDocContent =
90
+ targetDocContent =
62
91
  targetDocContent.substring(0, startIndex + startPlaceholder.length) +
63
92
  "\\n<!-- This content is automatically generated. Do not edit directly. -->\\n" +
64
93
  combinedDocs +
@@ -68,8 +97,9 @@ async function generateCombinedCliDocs() {
68
97
  // Write the updated content back to the target file
69
98
  fs.writeFileSync(targetDocFile, targetDocContent);
70
99
 
71
- console.log(`✅ Combined CLI documentation has been generated at ${targetDocFile}`);
72
-
100
+ console.log(
101
+ `✅ Combined CLI documentation has been generated at ${targetDocFile}`,
102
+ );
73
103
  } catch (error) {
74
104
  console.error("Failed to generate combined CLI documentation:", error);
75
105
  process.exit(1);
@@ -77,4 +107,4 @@ async function generateCombinedCliDocs() {
77
107
  }
78
108
 
79
109
  // Run the script
80
- generateCombinedCliDocs();
110
+ generateCombinedCliDocs();
package/sidebars.ts CHANGED
@@ -24,6 +24,7 @@ const sidebars = {
24
24
  "academy/GetStarted/DefineToDoListDocumentModel",
25
25
  "academy/GetStarted/ImplementOperationReducers",
26
26
  "academy/GetStarted/BuildToDoListEditor",
27
+ "academy/GetStarted/SpecDrivenAI",
27
28
  ],
28
29
  },
29
30
  {
@@ -1,7 +1,7 @@
1
1
  import clsx from "clsx";
2
2
  import Heading from "@theme/Heading";
3
3
  import Link from "@docusaurus/Link";
4
- import React from "react";
4
+ import type React from "react";
5
5
  import styles from "./styles.module.css";
6
6
 
7
7
  type FeatureItem = {
@@ -16,11 +16,7 @@ const FeatureList: FeatureItem[] = [
16
16
  title: "Connect",
17
17
  imageSrc: require("@site/static/img/connect.png").default,
18
18
  docPath: "docs/academy/Architecture/PowerhouseArchitecture",
19
- description: (
20
- <>
21
- Learn about the private contributor tool Connect
22
- </>
23
- ),
19
+ description: <>Learn about the private contributor tool Connect</>,
24
20
  },
25
21
  {
26
22
  title: "Switchboard",
@@ -32,29 +28,20 @@ const FeatureList: FeatureItem[] = [
32
28
  title: "Fusion",
33
29
  imageSrc: require("@site/static/img/fusion.png").default,
34
30
  docPath: "docs/academy/Architecture/PowerhouseArchitecture",
35
- description: (
36
- <>
37
- Setup Fusion as your organizations dashboard
38
- </>
39
- ),
31
+ description: <>Setup Fusion as your organizations dashboard</>,
40
32
  },
41
33
  {
42
34
  title: "Renown",
43
35
  imageSrc: require("@site/static/img/renown.png").default,
44
- docPath: "/docs/academy/MasteryTrack/BuildingUserExperiences/Authorization/RenownAuthenticationFlow",
45
- description: (
46
- <>
47
- Dive into the customizable reputation system
48
- </>
49
- ),
36
+ docPath:
37
+ "/docs/academy/MasteryTrack/BuildingUserExperiences/Authorization/RenownAuthenticationFlow",
38
+ description: <>Dive into the customizable reputation system</>,
50
39
  },
51
40
  {
52
41
  title: "Reactor",
53
42
  imageSrc: require("@site/static/img/reactor.png").default,
54
43
  docPath: "/docs/academy/Architecture/WorkingWithTheReactor",
55
- description: (
56
- <>Find out how a Powerhouse Reactor node works</>
57
- ),
44
+ description: <>Find out how a Powerhouse Reactor node works</>,
58
45
  },
59
46
  ];
60
47
 
@@ -67,7 +54,9 @@ function Feature({ title, imageSrc, description, docPath }: FeatureItem) {
67
54
  <img src={imageSrc} alt={title} className={styles.featureImage} />
68
55
  </div>
69
56
  <div className={styles.featureText}>
70
- <Heading as="h4" className={styles.featureTitle}>{title}</Heading>
57
+ <Heading as="h4" className={styles.featureTitle}>
58
+ {title}
59
+ </Heading>
71
60
  <p className={styles.featureDescription}>{description}</p>
72
61
  </div>
73
62
  </div>
@@ -84,34 +73,54 @@ export default function HomepageFeatures() {
84
73
  <div className={styles.learningPath}>
85
74
  {/* Get Started Card - Full Width */}
86
75
  <div className={`${styles.pathCard} ${styles.fullWidth}`}>
87
- <div className={styles.cardHeader} style={{ justifyContent: 'center' }}>
76
+ <div
77
+ className={styles.cardHeader}
78
+ style={{ justifyContent: "center" }}
79
+ >
88
80
  <div className={styles.cardIconWrapper}>
89
81
  <img src="/img/academy/icons/Flash.svg" alt="" />
90
82
  </div>
91
83
  <h3 className={styles.cardTitle}>Get started</h3>
92
84
  </div>
93
85
  <div className={styles.cardContent}>
94
- <div style={{ maxWidth: '960px', margin: '0 auto', textAlign: 'center' }}>
95
- <div style={{ marginBottom: '1.5rem' }}>
96
- <p style={{ fontSize: '1.1rem', marginBottom: '1rem' }}><strong>Welcome to Powerhouse!</strong></p>
97
- <p style={{ lineHeight: '1.6', color: '#444' }}>As a developer, you're about to dive into a <strong>unique ecosystem built to empower decentralized organizations</strong>. Powerhouse provides the software, infrastructure, and frameworks that enable scalable network organizations to operate efficiently.</p>
86
+ <div
87
+ style={{
88
+ maxWidth: "960px",
89
+ margin: "0 auto",
90
+ textAlign: "center",
91
+ }}
92
+ >
93
+ <div style={{ marginBottom: "1.5rem" }}>
94
+ <p style={{ fontSize: "1.1rem", marginBottom: "1rem" }}>
95
+ <strong>Welcome to Powerhouse!</strong>
96
+ </p>
97
+ <p style={{ lineHeight: "1.6", color: "#444" }}>
98
+ As a developer, you're about to dive into a{" "}
99
+ <strong>
100
+ unique ecosystem built to empower decentralized
101
+ organizations
102
+ </strong>
103
+ . Powerhouse provides the software, infrastructure, and
104
+ frameworks that enable scalable network organizations to
105
+ operate efficiently.
106
+ </p>
98
107
  </div>
99
- <div style={{ margin: '20px 0', textAlign: 'center' }}>
100
- <iframe
101
- src="https://drive.google.com/file/d/17dDKy-hQeI4ZlLiUZ4xhnXL4bDhJB0N-/preview"
102
- frameBorder="0"
103
- allow="autoplay; fullscreen"
104
- allowFullScreen
105
- title="Powerhouse Introduction Video"
106
- style={{
107
- width: '100%',
108
- maxWidth: '960px',
109
- aspectRatio: '16 / 9',
110
- borderRadius: '8px',
111
- display: 'block',
112
- margin: '0 auto'
113
- }}
114
- ></iframe>
108
+ <div style={{ margin: "20px 0", textAlign: "center" }}>
109
+ <iframe
110
+ src="https://drive.google.com/file/d/17dDKy-hQeI4ZlLiUZ4xhnXL4bDhJB0N-/preview"
111
+ frameBorder="0"
112
+ allow="autoplay; fullscreen"
113
+ allowFullScreen
114
+ title="Powerhouse Introduction Video"
115
+ style={{
116
+ width: "100%",
117
+ maxWidth: "960px",
118
+ aspectRatio: "16 / 9",
119
+ borderRadius: "8px",
120
+ display: "block",
121
+ margin: "0 auto",
122
+ }}
123
+ ></iframe>
115
124
  </div>
116
125
  </div>
117
126
  </div>
@@ -126,11 +135,16 @@ export default function HomepageFeatures() {
126
135
  <h3 className={styles.cardTitle}>New Link</h3>
127
136
  </div>
128
137
  <div className={styles.cardContent}>
129
- <a href="@callmeT" className={styles.pathButton}>The Vision of Powerhouse</a>
138
+ <a href="@callmeT" className={styles.pathButton}>
139
+ The Vision of Powerhouse
140
+ </a>
130
141
  </div>
131
142
  </div>
132
143
 
133
- <div className={styles.pathCard} style={{ border: '1px solid #4FC86F' }}>
144
+ <div
145
+ className={styles.pathCard}
146
+ style={{ border: "1px solid #4FC86F" }}
147
+ >
134
148
  <div className={styles.cardHeader}>
135
149
  <div className={styles.cardIconWrapper}>
136
150
  <img src="/img/academy/icons/Create.svg" alt="" />
@@ -138,7 +152,12 @@ export default function HomepageFeatures() {
138
152
  <h3 className={styles.cardTitle}>Create</h3>
139
153
  </div>
140
154
  <div className={styles.cardContent}>
141
- <a href="/docs/academy/GetStarted/CreateNewPowerhouseProject" className={styles.pathButton}>Build a Todo-list Document Model</a>
155
+ <a
156
+ href="/docs/academy/GetStarted/CreateNewPowerhouseProject"
157
+ className={styles.pathButton}
158
+ >
159
+ Build a Todo-list Document Model
160
+ </a>
142
161
  </div>
143
162
  </div>
144
163
 
@@ -150,12 +169,20 @@ export default function HomepageFeatures() {
150
169
  <h3 className={styles.cardTitle}>Document Model Theory</h3>
151
170
  </div>
152
171
  <div className={styles.cardContent}>
153
- <a href="/docs/academy/GetStarted/DocumentModelTheory/WhatIsADocumentModel" className={styles.pathButton}>Deep Dive into Document Modelling</a>
172
+ <a
173
+ href="/docs/academy/GetStarted/DocumentModelTheory/WhatIsADocumentModel"
174
+ className={styles.pathButton}
175
+ >
176
+ Deep Dive into Document Modelling
177
+ </a>
154
178
  </div>
155
179
  </div>
156
180
 
157
181
  {/* Left Column Card with 2 buttons */}
158
- <div className={styles.pathCard} style={{ border: '1px solid #4FC86F' }}>
182
+ <div
183
+ className={styles.pathCard}
184
+ style={{ border: "1px solid #4FC86F" }}
185
+ >
159
186
  <div className={styles.cardHeader}>
160
187
  <div className={styles.cardIconWrapper}>
161
188
  <img src="/img/academy/icons/Editor.svg" alt="" />
@@ -163,36 +190,61 @@ export default function HomepageFeatures() {
163
190
  <h3 className={styles.cardTitle}>Build User Experiences</h3>
164
191
  </div>
165
192
  <div className={styles.cardContent}>
166
- <a href="/docs/academy/GetStarted/BuildToDoListEditor" className={styles.pathButton}>Building a Todo-list Editor</a>
167
- <a href="/docs/academy/BuildingUserExperiences/BuildingDocumentEditors" className={styles.pathButton}>Building Beautiful Document Editors</a>
168
- <a href="/docs/academy/MasteryTrack/BuildingUserExperiences/BuildingADriveExplorer" className={styles.pathButton}>Building Custom Drive Explorers</a>
193
+ <a
194
+ href="/docs/academy/GetStarted/BuildToDoListEditor"
195
+ className={styles.pathButton}
196
+ >
197
+ Building a Todo-list Editor
198
+ </a>
199
+ <a
200
+ href="/docs/academy/BuildingUserExperiences/BuildingDocumentEditors"
201
+ className={styles.pathButton}
202
+ >
203
+ Building Beautiful Document Editors
204
+ </a>
205
+ <a
206
+ href="/docs/academy/MasteryTrack/BuildingUserExperiences/BuildingADriveExplorer"
207
+ className={styles.pathButton}
208
+ >
209
+ Building Custom Drive Explorers
210
+ </a>
169
211
  </div>
170
212
  </div>
171
213
 
172
214
  {/* Middle column with Union.svg */}
173
- <div className={styles.middleColumn} style={{
174
- display: 'flex',
175
- justifyContent: 'center',
176
- alignItems: 'flex-start',
177
- paddingTop: '-20px',
178
- position: 'relative'
179
- }}>
215
+ <div
216
+ className={styles.middleColumn}
217
+ style={{
218
+ display: "flex",
219
+ justifyContent: "center",
220
+ alignItems: "flex-start",
221
+ paddingTop: "-20px",
222
+ position: "relative",
223
+ }}
224
+ >
180
225
  <img src="/img/Union.svg" alt="Powerhouse Union" width="250" />
181
- <div style={{
182
- position: 'absolute',
183
- top: '18px',
184
- backgroundColor: 'white',
185
- padding: '8px 16px',
186
- borderRadius: '8px',
187
- textAlign: 'center',
188
- zIndex: 2,
189
- }}>
190
- <h3 className={styles.cardTitle} style={{ margin: 0 }}>Builder Track</h3>
226
+ <div
227
+ style={{
228
+ position: "absolute",
229
+ top: "18px",
230
+ backgroundColor: "white",
231
+ padding: "8px 16px",
232
+ borderRadius: "8px",
233
+ textAlign: "center",
234
+ zIndex: 2,
235
+ }}
236
+ >
237
+ <h3 className={styles.cardTitle} style={{ margin: 0 }}>
238
+ Builder Track
239
+ </h3>
191
240
  </div>
192
241
  </div>
193
242
 
194
243
  {/* Right Column Card with 3 buttons */}
195
- <div className={styles.pathCard} style={{ border: '1px solid #4FC86F' }}>
244
+ <div
245
+ className={styles.pathCard}
246
+ style={{ border: "1px solid #4FC86F" }}
247
+ >
196
248
  <div className={styles.cardHeader}>
197
249
  <div className={styles.cardIconWrapper}>
198
250
  <img src="/img/academy/icons/Data.svg" alt="" />
@@ -200,15 +252,33 @@ export default function HomepageFeatures() {
200
252
  <h3 className={styles.cardTitle}>Work with Data</h3>
201
253
  </div>
202
254
  <div className={styles.cardContent}>
203
- <a href="//docs/academy/MasteryTrack/WorkWithData/UsingTheAPI" className={styles.pathButton}>Reading & Writing through the API</a>
204
- <a href="/docs/academy/MasteryTrack/WorkWithData/WorkingWithSubgraphs" className={styles.pathButton}>Create your own Subgraph</a>
205
- <a href="/docs/academy/WorkWithData/Analytics Engine/intro" className={styles.pathButton}>Using the Analytics Engine</a>
255
+ <a
256
+ href="//docs/academy/MasteryTrack/WorkWithData/UsingTheAPI"
257
+ className={styles.pathButton}
258
+ >
259
+ Reading & Writing through the API
260
+ </a>
261
+ <a
262
+ href="/docs/academy/MasteryTrack/WorkWithData/WorkingWithSubgraphs"
263
+ className={styles.pathButton}
264
+ >
265
+ Create your own Subgraph
266
+ </a>
267
+ <a
268
+ href="/docs/academy/WorkWithData/Analytics Engine/intro"
269
+ className={styles.pathButton}
270
+ >
271
+ Using the Analytics Engine
272
+ </a>
206
273
  </div>
207
274
  </div>
208
275
 
209
276
  {/* Launch Card - Full Width with 3 column buttons */}
210
277
  <div className={`${styles.pathCard} ${styles.fullWidth}`}>
211
- <div className={styles.cardHeader} style={{ justifyContent: 'center' }}>
278
+ <div
279
+ className={styles.cardHeader}
280
+ style={{ justifyContent: "center" }}
281
+ >
212
282
  <div className={styles.cardIconWrapper}>
213
283
  <img src="/img/academy/icons/Launch.svg" alt="" />
214
284
  </div>
@@ -216,9 +286,24 @@ export default function HomepageFeatures() {
216
286
  </div>
217
287
  <div className={styles.cardContent}>
218
288
  <div className={styles.buttonContainer}>
219
- <a href="/docs/academy/MasteryTrack/Launch/PublishYourProject" className={styles.pathButton}>Package & Publish</a>
220
- <a href="/docs/academy/Launch/LaunchYourBackend" className={styles.pathButton}>Launch Back-end</a>
221
- <a href="/docs/academy/Launch/LaunchYourFrontend" className={styles.pathButton}>Launch Front-end</a>
289
+ <a
290
+ href="/docs/academy/MasteryTrack/Launch/PublishYourProject"
291
+ className={styles.pathButton}
292
+ >
293
+ Package & Publish
294
+ </a>
295
+ <a
296
+ href="/docs/academy/Launch/LaunchYourBackend"
297
+ className={styles.pathButton}
298
+ >
299
+ Launch Back-end
300
+ </a>
301
+ <a
302
+ href="/docs/academy/Launch/LaunchYourFrontend"
303
+ className={styles.pathButton}
304
+ >
305
+ Launch Front-end
306
+ </a>
222
307
  </div>
223
308
  </div>
224
309
  </div>
@@ -232,11 +317,19 @@ export default function HomepageFeatures() {
232
317
  <Link to={props.docPath} className={styles.featureLink}>
233
318
  <div className={styles.featureContent}>
234
319
  <div className={styles.featureImageWrapper}>
235
- <img src={props.imageSrc} alt={props.title} className={styles.featureImage} />
320
+ <img
321
+ src={props.imageSrc}
322
+ alt={props.title}
323
+ className={styles.featureImage}
324
+ />
236
325
  </div>
237
326
  <div className={styles.featureText}>
238
- <Heading as="h4" className={styles.featureTitle}>{props.title}</Heading>
239
- <p className={styles.featureDescription}>{props.description}</p>
327
+ <Heading as="h4" className={styles.featureTitle}>
328
+ {props.title}
329
+ </Heading>
330
+ <p className={styles.featureDescription}>
331
+ {props.description}
332
+ </p>
240
333
  </div>
241
334
  </div>
242
335
  </Link>
@@ -156,10 +156,9 @@
156
156
  color: var(--ifm-color-primary);
157
157
  }
158
158
 
159
-
160
159
  .learningPath {
161
160
  width: 100%;
162
- padding: 3rem 0 0 0; /* Added top padding */
161
+ padding: 3rem 0 0 0; /* Added top padding */
163
162
  margin-bottom: 3rem;
164
163
  display: grid;
165
164
  grid-template-columns: repeat(3, 1fr);