@powerhousedao/academy 0.1.0-dev.0
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.
- package/.vscode/settings.json +3 -0
- package/CHANGELOG.md +9 -0
- package/Dockerfile +31 -0
- package/ProcFile +1 -0
- package/README.md +43 -0
- package/babel.config.js +3 -0
- package/blog/BeyondCommunication-ABlueprintForDevelopment.md +88 -0
- package/blog/TheChallengeOfChange.md +86 -0
- package/blog/images/Iteration.png +0 -0
- package/blog/images/RAD.png +0 -0
- package/docs/academy/01-GetStarted/00-GetStarted.mdx +181 -0
- package/docs/academy/01-GetStarted/01_InstallDemoPackage.md +38 -0
- package/docs/academy/01-GetStarted/02-ToDoList/01-CreateNewPowerhouseProject.md +97 -0
- package/docs/academy/01-GetStarted/02-ToDoList/02-DefineToDoListDocumentModel.md +86 -0
- package/docs/academy/01-GetStarted/02-ToDoList/03-ImplementOperationReducers.md +201 -0
- package/docs/academy/01-GetStarted/02-ToDoList/04-BuildToDoListEditor.md +494 -0
- package/docs/academy/01-GetStarted/02-ToDoList/_category_.json +8 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/DocumentModelHeader.png +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/DocumentModelOperations.png +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/OpenDocumentModelEditor.gif +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/completeEditor.png +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/connectApp.gif +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/form.png +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/mytodolist.gif +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/reducers.png +0 -0
- package/docs/academy/01-GetStarted/02-ToDoList/images/vscode.png +0 -0
- package/docs/academy/01-GetStarted/styles.module.css +99 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/00-BuilderTools.md +234 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/01-SetupBuilderEnvironment.md +247 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/04-UtilitiesAndTips.md +79 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/01-SetupBuilderEnvironment.md +216 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/02-CreateNewPowerhouseProject.md +78 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/03-DefineChatroomDocumentModel.md +139 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/04-ImplementOperationReducers.md +364 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/05-ImplementChatroomEditor.md +194 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/06-LaunchALocalReactor.md +15 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/image-1.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/image-2.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/image-3.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/image-4.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/image-5.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/image.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/images/ChatRoomConnectApp.gif +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/images/ChatRoomTest.gif +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/images/completeEditor.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/images/form.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/images/reducers.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/Chatroom/images/vscode.png +0 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-MoreTutorials/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/01-Create/02-StandardDocumentModelWorkflow.md +229 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/01-BuildingBeautifulDocumentEditors.md +109 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/02-ConfiguringDrives.md +51 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/03-BuildingADriveExplorer.md +174 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/01-OperationHistory.md +67 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/02-RevisionHistoryTimeline.md +132 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/_category_.json +7 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/images/committer-address-popup.png +0 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/images/revision-hash-popup.png +0 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/images/revision-history-list.png +0 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/07-DocumentTools/images/signature-details-popup.png +0 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/images/CreateDrive.png +0 -0
- package/docs/academy/02-AdvancedTutorial/03-BuildingUserExperiences/images/mytodolist.gif +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/01-ReadingAndWritingThroughTheAPI.mdx +121 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/02-GraphQLAtPowerhouse.md +156 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/03-WorkingWithSubgraphs/02-GraphQLAndSubgraphs.mdx +119 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/03-WorkingWithSubgraphs/03-WorkingWithSubgraphs.md +312 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/03-WorkingWithSubgraphs/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/04-analytics-processor.md +342 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/01-SetupBuilderEnvironment.md +215 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/02-CreateNewPowerhouseProject.md +55 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/03-GenerateAnAnalyticsProcessor.md +173 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/04-UpdateAnalyticsProcessor.md +223 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/images/Create-SPV.gif +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/images/Create-a-new-asset.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/images/Create-a-transaction.gif +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/images/Transaction-table.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/images/create-a-new-RWA-document.gif +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/05-AnalyticsProcessorTutorial/images/granularity.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/GraphQL References/QueryingADocumentWithGraphQL.md +244 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/GraphQL References/rwa-reports/listener-raw.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/GraphQL References/rwa-reports/raw-reports1.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/GraphQL References/rwa-reports/raw-reports2.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/GraphQL References/rwa-reports/rwaRegister.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/apse.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/best-practices.md +60 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/filter.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/filteroptions.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/graphql/index.md +166 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/graphql/integration.md +75 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/dbs.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/high-level.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/indexeddb.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/libs-core.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/libs.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/lod.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/logo.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/navbar.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/overview-1.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/overview-2.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/overview-3.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/overview-4.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/overview-5.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/overview-6.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/paths-1.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/images/paths-2.jpg +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/intro.md +149 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/benchmarks.md +27 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/browser.md +77 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/compatibility.md +14 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/index.md +230 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/memory.md +72 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/pg.md +63 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/schema.md +14 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/typescript/utilities.md +102 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/use-cases/index.md +7 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/use-cases/maker.md +652 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/06-Analytics Engine/use-cases/processors.md +3 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/images/OperationHistory.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/images/OperationsQuery.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/images/QueryDocumentID.png +0 -0
- package/docs/academy/02-AdvancedTutorial/04-WorkWithData/images/SwitchboardButton.png +0 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/00-IntegrateInAFront-End +3 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/01-IntroducingFusion +18 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/02-IntroductionToPackages.md +79 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/02-PublishYourProject.md +230 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/03-RunOnACloudServer.md +279 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/03-SetupEnvironment.md +436 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/04-GraphQLNamespacing +44 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/05-LaunchYourBackend.md +3 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/06-LaunchYourFrontend.md +3 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/_category_.json +8 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/images/SSHConnection.png +0 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/images/homedesign.png +0 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/images/keyconcepts.png +0 -0
- package/docs/academy/02-AdvancedTutorial/05-Launch/images/tutorialschema.png +0 -0
- package/docs/academy/02-AdvancedTutorial/06-Authorization/Authorization.md +100 -0
- package/docs/academy/02-AdvancedTutorial/_category_.json +7 -0
- package/docs/academy/03-APIReferences/00-PowerhouseCLI.md +1 -0
- package/docs/academy/03-APIReferences/_category_.json +7 -0
- package/docs/academy/04-ComponentLibrary/01-PowerhouseDesignSystem.md +94 -0
- package/docs/academy/04-ComponentLibrary/02-BuildingWithScalars.md +54 -0
- package/docs/academy/04-ComponentLibrary/03-Scalar-Components/01-phid-field.mdx +72 -0
- package/docs/academy/04-ComponentLibrary/03-Scalar-Components/02-input-field.mdx +0 -0
- package/docs/academy/04-ComponentLibrary/04-Complex-Components/01-sidebar.mdx +36 -0
- package/docs/academy/04-ComponentLibrary/05-Layout-Components/01-test-toupdate.mdx +61 -0
- package/docs/academy/04-ComponentLibrary/06-Fragments/01-test-toupdate.mdx +61 -0
- package/docs/academy/04-ComponentLibrary/_category_.json +8 -0
- package/docs/academy/05-Architecture/00-PowerhouseArchitecture.md +50 -0
- package/docs/academy/05-Architecture/01-WorkingWithTheReactor.md +48 -0
- package/docs/academy/05-Architecture/02-ReferencingMonorepoPackages +65 -0
- package/docs/academy/05-Architecture/04-MovingBeyondCRUD +61 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/01-WhatIsADocumentModel.md +188 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/02-DAOandDocumentsModelsQ+A.md +177 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/02-domain-modeling.md +103 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/03-BenefitsOfDocumentModels.md +95 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/05-best-practices.md +257 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/_category_.json +8 -0
- package/docs/academy/05-Architecture/05-DocumentModelTheory/three-data-layers.png +0 -0
- package/docs/academy/05-Architecture/_category_.json +7 -0
- package/docs/academy/05-Architecture/images/image.png +0 -0
- package/docs/academy/06-Cookbook.md +905 -0
- package/docs/academy/07-Glossary.md +50 -0
- package/docs/bookofpowerhouse/01-Overview.md +29 -0
- package/docs/bookofpowerhouse/02-GeneralFrameworkAndPhilosophy.md +15 -0
- package/docs/bookofpowerhouse/03-PowerhouseSoftwareArchitecture.md +33 -0
- package/docs/bookofpowerhouse/04-DevelopmentApproaches.md +36 -0
- package/docs/bookofpowerhouse/05-SNOsandANewModelForOSSandPublicGoods.md +73 -0
- package/docs/bookofpowerhouse/06-SNOsInActionAndPlatformEconomies.md +17 -0
- package/docs/renown/01-intro.md +18 -0
- package/docs/renown/02-renown-login-flow.md +60 -0
- package/docusaurus +0 -0
- package/docusaurus.config.ts +170 -0
- package/package.json +50 -0
- package/powerhouse-docs@0.0.0 +0 -0
- package/sidebars.ts +33 -0
- package/src/components/HomepageFeatures/index.tsx +250 -0
- package/src/components/HomepageFeatures/styles.module.css +267 -0
- package/src/css/custom.css +450 -0
- package/src/pages/index.module.css +37 -0
- package/src/pages/index.tsx +42 -0
- package/src/pages/markdown-page.md +7 -0
- package/static/.nojekyll +0 -0
- package/static/fonts/FranieBold.otf +0 -0
- package/static/fonts/FranieRegular.otf +0 -0
- package/static/img/Powerhouse Website Drive.png +0 -0
- package/static/img/Powerhouse Website Storage Layer (1).png +0 -0
- package/static/img/Powerhouse Website Storage Layer.png +0 -0
- package/static/img/Powerhouse-main-light.svg +13 -0
- package/static/img/Powerhouse-main.svg +13 -0
- package/static/img/Renown Intro Diagram.png +0 -0
- package/static/img/Union.svg +3 -0
- package/static/img/academy/icons/Advanced.svg +4 -0
- package/static/img/academy/icons/Book.svg +5 -0
- package/static/img/academy/icons/Cookbook.svg +3 -0
- package/static/img/academy/icons/Create.svg +3 -0
- package/static/img/academy/icons/Data.svg +3 -0
- package/static/img/academy/icons/Editor.svg +3 -0
- package/static/img/academy/icons/Flash.svg +3 -0
- package/static/img/academy/icons/Launch.svg +3 -0
- package/static/img/academy-icon.png +0 -0
- package/static/img/connect-icon.png +0 -0
- package/static/img/connect.png +0 -0
- package/static/img/docusaurus-social-card.jpg +0 -0
- package/static/img/docusaurus.png +0 -0
- package/static/img/empty-background.png +0 -0
- package/static/img/favicon.ico +0 -0
- package/static/img/fusion-icon.png +0 -0
- package/static/img/fusion.png +0 -0
- package/static/img/ph-icon-light.svg +3 -0
- package/static/img/powerhouse-layer.png +0 -0
- package/static/img/powerhouse-storage-layer.png +0 -0
- package/static/img/reactor.png +0 -0
- package/static/img/renown-icon.png +0 -0
- package/static/img/renown.png +0 -0
- package/static/img/switchboard-icon.png +0 -0
- package/static/img/switchboard.png +0 -0
- package/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/static/img/undraw_docusaurus_react.svg +170 -0
- package/static/img/undraw_docusaurus_tree.svg +40 -0
- package/static/img/video-placeholder.svg +16 -0
- package/static.json +7 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Intro to Packages
|
|
2
|
+
|
|
3
|
+
Packages of document models are a core structuring mechanism in the Powerhouse framework, allowing developers to group and manage related document models efficiently. These packages serve as modular collections of document definitions, ensuring consistency, scalability, and reusability across different applications.
|
|
4
|
+
|
|
5
|
+
By packaging document models together, developers can create well-organized, interoperable sets of data structures that capture the specific needs of various operational processes. Whether used for financial operations, governance, or contributor management, these packages streamline development and integration within Powerhouse's decentralized framework.
|
|
6
|
+
|
|
7
|
+
### Key Features
|
|
8
|
+
|
|
9
|
+
- **Modular Structure** – Packages encapsulate related document models, making it easier to manage and deploy them as a cohesive unit.
|
|
10
|
+
- **Standardized Definitions** – Each document model within a package follows Powerhouse's structured schema approach, ensuring consistency in data representation.
|
|
11
|
+
- **Reusability and Extensibility** – Packages can be shared across different projects or extended with additional models as needed.
|
|
12
|
+
- **Dependency Management** – Developers can define dependencies between document models, ensuring proper relationships and data flows between interconnected components.
|
|
13
|
+
- **Automated Schema Evolution** – Versioning mechanisms allow document models within a package to evolve over time without breaking existing functionality.
|
|
14
|
+
|
|
15
|
+
### Example Use Cases
|
|
16
|
+
|
|
17
|
+
- **Finance Package** – A set of document models handling invoices, payments, budgets, and financial reporting. link
|
|
18
|
+
- **Contributor Billing Package** – Defines document models for tracking work, invoicing, and facilitating payments (in both fiat and crypto) for contributors in decentralized organizations. link
|
|
19
|
+
- **Governance Package** – Models for proposals, voting, contributor agreements, and decision-making processes. link
|
|
20
|
+
- **People Ops Package** – Documents managing contributor profiles, roles, task assignments, and reputation tracking. link
|
|
21
|
+
- **Project Management Package** – Models for task tracking, milestones, resource allocation, and deliverables. link
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
A **Powerhouse Package** is a **modular unit** that defines and automates **data structures and workflows** within the Powerhouse ecosystem. Each package includes several components that work together to ensure **seamless interaction, data processing, and automation** for different areas of decentralized operations.
|
|
25
|
+
|
|
26
|
+
Packages follow a **scoped naming convention** based on the organization that owns them or created the package:
|
|
27
|
+
|
|
28
|
+
- `@powerhousedao` The organization behind Powerhouse.
|
|
29
|
+
- `@sky-ph` The Sky / MakerDAO organization with a -ph suffix to indicate it concerns Powerhouse ecosystem packages.
|
|
30
|
+
- `@myorg-ph` Your organization with the -ph suffix included.
|
|
31
|
+
|
|
32
|
+
Within a package, you'll find **several key modules**, each serving a distinct role in structuring and processing data.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## **Modules of a Powerhouse Package**
|
|
37
|
+
|
|
38
|
+
### **1. Document Model**
|
|
39
|
+
|
|
40
|
+
The **core component** of any package, defining how data is structured and manipulated.
|
|
41
|
+
|
|
42
|
+
- Specifies **schemas** (data structures) and **state transitions** (operations).
|
|
43
|
+
- Serves as the foundation for decentralized workflows.
|
|
44
|
+
- **Example:** An **Invoice** document model might define fields like `issuer`, `recipient`, `amount`, and operations like `ADD_LINE_ITEM` or `MARK_AS_PAID`.
|
|
45
|
+
|
|
46
|
+
### **2. Document Model Editor**
|
|
47
|
+
|
|
48
|
+
A **UI component** that allows users to **interact with document models visually**.
|
|
49
|
+
|
|
50
|
+
- Enables users to **create, modify, and manage** documents without coding.
|
|
51
|
+
- Supports multiple editors for a single document model, offering different **UI experiences** tailored to specific roles.
|
|
52
|
+
|
|
53
|
+
### **3. Scripts**
|
|
54
|
+
|
|
55
|
+
**Automated actions** that run on demand or on a schedule.
|
|
56
|
+
|
|
57
|
+
- Executes **one-time or recurring tasks** within a package.
|
|
58
|
+
- Not continuously running—activated manually or at predefined intervals.
|
|
59
|
+
- **Example:** A script that **generates a weekly financial report** from invoice data.
|
|
60
|
+
|
|
61
|
+
### **4. Processors**
|
|
62
|
+
|
|
63
|
+
**Event-driven background tasks** that react to document changes.
|
|
64
|
+
|
|
65
|
+
- Subscribes to **document operations or system events** and processes data automatically.
|
|
66
|
+
- Supports real-time **data updates, analytics, and workflow automation**.
|
|
67
|
+
- **Example:** A processor that **monitors new invoices** and updates an **analytics dashboard** in real-time.
|
|
68
|
+
|
|
69
|
+
### **5. Drive-Apps**
|
|
70
|
+
|
|
71
|
+
**Custom interfaces** that provide enhanced ways to interact with a package's document models.
|
|
72
|
+
|
|
73
|
+
- Allows **visualization, sorting, and organization** of drive contents (e.g., **Kanban boards, list views**).
|
|
74
|
+
- Can aggregate data and display **key insights** from document models.
|
|
75
|
+
- **Example:** A Drive-App for **People Ops** might show a **dashboard of contributor profiles, role assignments, and activity logs**.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
Each of these modules plays a crucial role in making **Powerhouse Packages extensible, reusable, and efficient**, allowing developers and organizations to **streamline operations and automate workflows** within decentralized environments.
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Publish Your Package
|
|
2
|
+
|
|
3
|
+
This tutorial is a step by step guide tackling the following topics:
|
|
4
|
+
1. the process of **building a powerhouse project**
|
|
5
|
+
2. the process of **publishing it as a package**
|
|
6
|
+
|
|
7
|
+
:::info
|
|
8
|
+
Let's start with some **key concepts** that will help you understand the process we're going to go through in this tutorial.
|
|
9
|
+
|
|
10
|
+
- **Powerhouse Project**: The construction site of your package: A project is built with document models and editors which you will publish to NPM as a package with modules.
|
|
11
|
+
- **Powerhouse Modules**: The modules that are part of your project, such as the document models, editors, processors or scripts.
|
|
12
|
+
- **Powerhouse Drive Apps**: Customized drive interfaces that function as a drive add and enhance or augment the functionality of your documents and workflows within the drive.
|
|
13
|
+
- **Powerhouse Package**: A package is a collection of modules that are published to NPM and can be installed on a server instance or locally on your machine with help of the host apps such as Connect, Switchboard & Fusion. Organizations build packages for specific purposes or workflows.
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
:::
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## 1. Building your project
|
|
20
|
+
|
|
21
|
+
To start building your project with it's dedicated document models and editors we'll run the following command:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
ph init
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
<details>
|
|
28
|
+
<summary> Command not working? Did you install `ph-cmd`? </summary>
|
|
29
|
+
|
|
30
|
+
The Powerhouse CLI (`ph-cmd`) is a command-line interface tool that provides essential commands for managing Powerhouse projects. You can get access to the Powerhouse Ecosystem tools by installing them globally using:
|
|
31
|
+
```bash
|
|
32
|
+
pnpm install -g ph-cmd
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
For experimental features, use --version [version] which allows selecting a specific branch of our document-model-boilerplate. There are --dev and --staging options. Select `ph init --dev` to use the latest development version. Please be aware that this version can contain bugs and experimental features that aren't fully tested.
|
|
36
|
+
|
|
37
|
+
Key commands include:
|
|
38
|
+
- `ph connect` for running the Connect application locally
|
|
39
|
+
- `ph switchboard` or `ph reactor` for starting the API service
|
|
40
|
+
- `ph init` to start a new project and build a document model
|
|
41
|
+
- `ph help` to get an overview of all the available commands
|
|
42
|
+
|
|
43
|
+
This tool will be fundamental on your journey when creating, building, and running document models
|
|
44
|
+
|
|
45
|
+
</details>
|
|
46
|
+
|
|
47
|
+
<details>
|
|
48
|
+
<summary> Got `ph-cmd` installed, but command not working? Reset your package manager cache</summary>
|
|
49
|
+
|
|
50
|
+
If you need to reset your package manager, you can run the following commands for your package manager: (pnpm, npm, yarn)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm cache verify
|
|
54
|
+
pnpm store prune
|
|
55
|
+
pnpm cache clean --force
|
|
56
|
+
|
|
57
|
+
npx clear-npx-cache
|
|
58
|
+
|
|
59
|
+
npm cache verify
|
|
60
|
+
npm cache clean --force
|
|
61
|
+
npm cache verify
|
|
62
|
+
|
|
63
|
+
yarn cache list
|
|
64
|
+
yarn cache clean --force
|
|
65
|
+
yarn cache list
|
|
66
|
+
```
|
|
67
|
+
</details>
|
|
68
|
+
|
|
69
|
+
<details>
|
|
70
|
+
<summary> How to make use of different branches? </summary>
|
|
71
|
+
|
|
72
|
+
When installing or using the Powerhouse CLI commands you are able to make use of the dev & staging branches. These branches contain more experimental features then the latest stable release the PH CLI uses by default. They can be used to get access to a bugfix or features under development.
|
|
73
|
+
|
|
74
|
+
| Command | Description |
|
|
75
|
+
|---------|-------------|
|
|
76
|
+
| **pnpm install -g ph-cmd** | Install latest stable version |
|
|
77
|
+
| **pnpm install -g ph-cmd@dev** | Install development version |
|
|
78
|
+
| **pnpm install -g ph-cmd@staging** | Install staging version |
|
|
79
|
+
| **ph init** | Use latest stable version of the boilerplate |
|
|
80
|
+
| **ph init --dev** | Use development version of the boilerplate |
|
|
81
|
+
| **ph init --staging** | Use staging version of the boilerplate |
|
|
82
|
+
| **ph use** | Switch all dependencies to latest production versions |
|
|
83
|
+
| **ph use dev** | Switch all dependencies to development versions |
|
|
84
|
+
| **ph use prod** | Switch all dependencies to production versions |
|
|
85
|
+
|
|
86
|
+
Please be aware that these versions can contain bugs and experimental features that aren't fully tested.
|
|
87
|
+
</details>
|
|
88
|
+
|
|
89
|
+
### 1.1. Specifying your project details
|
|
90
|
+
|
|
91
|
+
When you are creating your own project, you will be asked to name your project.
|
|
92
|
+
Which will also become the package name when someone else wants to install it in a cloud environment via npm in the future.
|
|
93
|
+
|
|
94
|
+
Please feel free to navigate to the package.json file and fill in all the other available fields such as `name`, `version`, `author`, `license` and `main`.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
{
|
|
98
|
+
"name": "@your-org-ph/package-name", #Your organization name with the -ph suffix to indicate it's a powerhouse related organization & package.
|
|
99
|
+
"version": "1.0.0",
|
|
100
|
+
"author": "Your Name",
|
|
101
|
+
"license": "AGPL-3.0-only",
|
|
102
|
+
"main": "index.js"
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Now that you've created your powerhouse project you are ready to generate the necessary directory and file structure to add your document models.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
ph generate
|
|
110
|
+
```
|
|
111
|
+
The **generate** command will start the configuration of your powerhouse project and generates a directory with the necessary files and folders to build your project.
|
|
112
|
+
These include:
|
|
113
|
+
- `document-models`: A folder containing the document models schemas you've defined in Connect Studio Mode.
|
|
114
|
+
- `editors`: A folder containing the editors you've defined in react, potentially making use of the reusable components.
|
|
115
|
+
- `processors`: A folder containing the processors you might be running on your document models later on.
|
|
116
|
+
- `scripts`: A folder containing the scripts you might use.
|
|
117
|
+
- `tests`: A folder containing your unit tests.
|
|
118
|
+
|
|
119
|
+
### 1.2. Adding Document Models, editors and unit tests
|
|
120
|
+
|
|
121
|
+
Now that you've set up your directory.
|
|
122
|
+
Go ahead and add the document models you'd like to add by going through the standard document model building flow:
|
|
123
|
+
|
|
124
|
+
:::info
|
|
125
|
+
These steps are explained more in depth in any of our tutorials. Follow along with one of the tutorials that matches your project the most.
|
|
126
|
+
:::
|
|
127
|
+
|
|
128
|
+
1. Defining your Document Model **GraphQL Schema** in the document model document editor by launching the document model editor in Connect Studio Mode with the `ph connect` command.
|
|
129
|
+
2. Defining your Document Model **Operations** in the document model document operations editor and their graphQL counterparts.
|
|
130
|
+
3. Generating the scaffolding code by **exporting** the Zip file from connect and **importing** it into your project. (Save it in the directory you've created in the previous step) Run `ph generate <zipfile>`.
|
|
131
|
+
4. Implementing the **reducer code** and unit tests of your document models reducers.
|
|
132
|
+
5. Implementing the **document editors** to visualize and interact with your document models.
|
|
133
|
+
6. Run **unit tests** and verify the editor functionality via `ph connect` for local testing.
|
|
134
|
+
7. Add a **manifest file** to your project and updating your index.js file to export your modules.
|
|
135
|
+
|
|
136
|
+
### 1.3. Verifying your project
|
|
137
|
+
Now that we've completed our directory with the reducers, tests and editors, and your project is populated with modules we'll verify the build output and see if everything is working correctly.
|
|
138
|
+
|
|
139
|
+
Let's **verify the package build output** with the following command:
|
|
140
|
+
```bash
|
|
141
|
+
pnpm build
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
This command will **build** the project and create a build directory with the output. The code gets optimized and minified. It optimizes the code for production and distribution so different environments can use it as a package.
|
|
145
|
+
|
|
146
|
+
This command will **start a local server** and serve the build output.
|
|
147
|
+
Inspect the build output and verify that the document models are working correctly.
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
pnpm serve (Not working yet)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 1.4 Storing your project in a git repository
|
|
154
|
+
|
|
155
|
+
Now that you've verified your project is working correctly, you can store your project in a git repository.
|
|
156
|
+
Why?
|
|
157
|
+
- So you can track the changes of your project in a remote repository and benefit from the collaboration features of git.
|
|
158
|
+
- So you can publish your project to the npm registry and install it on a server instance or locally on your machine.
|
|
159
|
+
|
|
160
|
+
If you stick to the layout generated by the `ph init` command, where its folders for document models and editors, you should later be able to install your package with `ph install @<your-org/package-name>` once it's published to the npm registry.
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
git init
|
|
164
|
+
git add .
|
|
165
|
+
git commit -m "Initial commit"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This will initialize a git repository and add all the files to the repository.
|
|
169
|
+
|
|
170
|
+
## 2. Publishing your project
|
|
171
|
+
|
|
172
|
+
For this step you'll need to register your organization on npm.
|
|
173
|
+
If you haven't already registered your organization on npm, you can do so by running the following command:
|
|
174
|
+
```bash
|
|
175
|
+
pnpm adduser
|
|
176
|
+
```
|
|
177
|
+
Create an organization on [NPM](https://www.npmjs.com/) using the naming convention: `@yourorganization-ph`
|
|
178
|
+
- The `-ph` suffix indicates its a Powerhouse ecosystem package to help you and others identify it from regular NPM packages.
|
|
179
|
+
- Example: `@acme-ph`
|
|
180
|
+
|
|
181
|
+
To make sure you can differentiate between Powerhouse ecosystem packages and other packages we recommend setting up a separate npm account for your organization with the -ph suffix. **example: @yourorg-ph**
|
|
182
|
+
We advise you to **use a dedicated npm account for your organization and not your personal account**.
|
|
183
|
+
|
|
184
|
+
Once you've registered your organization on npm, you can now publish your project to the npm registry.
|
|
185
|
+
Log in via the command line:
|
|
186
|
+
```bash
|
|
187
|
+
npm login
|
|
188
|
+
```
|
|
189
|
+
You'll be prompted for your username, password, and email in a separate browser window.
|
|
190
|
+
|
|
191
|
+
Once you've logged in, you can configure your package.json for npm before publishing.
|
|
192
|
+
If you're publishing a package under a scope (like @your-org/my-package), you might need to add the `publishConfig` to ensure it's public, otherwise scoped packages default to private:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"name": "@your-org/my-package",
|
|
197
|
+
"version": "1.0.0",
|
|
198
|
+
"main": "index.js",
|
|
199
|
+
"publishConfig": {
|
|
200
|
+
"access": "public"
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
For the actual publishing step, run the following command to publish your project to the npm registry:
|
|
206
|
+
```bash
|
|
207
|
+
npm publish
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Optionally, if you are publishing a scoped package and you want it public, run:
|
|
211
|
+
```bash
|
|
212
|
+
npm publish --access public
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Now let's verify that the package(s) get published in the package repository, next to pre-existing packages that you might have been publishing before.
|
|
216
|
+
|
|
217
|
+
## 3. Deploying the host apps & project.
|
|
218
|
+
Now that we've installed all the necessary services on our server instance, we can start deploying the host apps & our packaged project from npm.
|
|
219
|
+
|
|
220
|
+
Install your project package we've published earlier on your local connect (`ph connect`) instance by running the following command:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
ph install @<your-org/package-name>
|
|
224
|
+
```
|
|
225
|
+
Alternatively you can also install the package in the settings of Connect in the 'package manager' section. (Not available yet)
|
|
226
|
+
Where you'll be able to use the same package name as you've used in the `package.json` file and install it at the click of a button.
|
|
227
|
+
|
|
228
|
+

|
|
229
|
+
|
|
230
|
+
Got this far? Congratulations on publishing your first package!
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Run it on a EC2 instance
|
|
2
|
+
|
|
3
|
+
## Tutorial Workflow
|
|
4
|
+
|
|
5
|
+
This tutorial guides you through the process of deploying your Powerhouse project on a cloud server.
|
|
6
|
+
|
|
7
|
+
To help you navigate the steps involved, the diagram below illustrates the overall workflow. It shows the different environments and actions we'll cover.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
Understanding this process is key because, within the Powerhouse ecosystem, users typically start by installing pre-built packages onto their Connect or Switchboard instances. These packages are often sourced from a central repository, similar to an app store. In the previous tutorial, we have [created and published our package](/docs/academy/AdvancedTutorial/Launch/PublishYourProject) on the Node Package Manager (NPM) registry as our "app store", and now you'll learn how to deploy your own package to a cloud environment.
|
|
12
|
+
|
|
13
|
+
## 1. Setting up your cloud environment
|
|
14
|
+
### 1.1. Launching your server instance (AWS \- EC2 \- Ubuntu)
|
|
15
|
+
|
|
16
|
+
Let's have a look at how to set up Connect & Switchboard apps on a cloud server.
|
|
17
|
+
Ask your IT provider to get access to the AWS environment to set up a server.
|
|
18
|
+
Launch a new server instance for Connect and Switchboard with the specific specs that fit your project.
|
|
19
|
+
|
|
20
|
+
The steps to create an EC2 instance:
|
|
21
|
+
- Make sure your region is set to eu-west-1 (Ireland)
|
|
22
|
+
- Name your instance something like `cloud-server` or your project's name
|
|
23
|
+
- Select Ubuntu 24.04 LTS
|
|
24
|
+
- Architecture 64-bit (x86)
|
|
25
|
+
- Scroll down to Instance type and select t2.medium (recommended)
|
|
26
|
+
- 2 vCPUs and 4 GiB of memory are the recommended minimum specs
|
|
27
|
+
- For larger projects or higher load, consider t2.large or t2.xlarge
|
|
28
|
+
- Create a new key pair and save it in a secure location from which you can connect to your instance with the SSH client later.
|
|
29
|
+
- Configure the security group to allow inbound traffic:
|
|
30
|
+
- SSH (Port 22) from your IP address
|
|
31
|
+
- HTTP (Port 80) from anywhere
|
|
32
|
+
- HTTPS (Port 443) from anywhere
|
|
33
|
+
- Custom TCP (Port 8442) for Connect
|
|
34
|
+
- Custom TCP (Port 8441) for Switchboard
|
|
35
|
+
- **Launch the instance**
|
|
36
|
+
|
|
37
|
+
Now click on your instance ID, which will open a new window with the instance details. Hit the 'Connect' button to get the connection details.
|
|
38
|
+
Within the instance details, you'll find the public IP address of your server instance. We'll use this to connect to our server instance later.
|
|
39
|
+
|
|
40
|
+
:::warning
|
|
41
|
+
Make sure to keep your key pair file (.pem) secure and never share it. Without it, you won't be able to access your instance. Also, consider setting up AWS IAM roles and policies for better security management.
|
|
42
|
+
:::
|
|
43
|
+
|
|
44
|
+
### 1.2. Setting up your SSH connection
|
|
45
|
+
|
|
46
|
+
Once you've generated your key pairs and added them to the designated folder, you can set up the SSH connections to start the process.
|
|
47
|
+
|
|
48
|
+
SSH, which stands for **Secure Shell**, is a cryptographic network protocol used to securely access and manage devices over an unsecured network. It provides a secure channel over an unsecured network by using encryption, ensuring that data transmitted between your computer and the server remains confidential and tamper-proof.
|
|
49
|
+
|
|
50
|
+
To establish an SSH connection, you'll typically use an SSH client. On Unix-like systems (Linux, macOS), the SSH client is usually pre-installed.
|
|
51
|
+
Follow the instructions for the AWS instance you've configured with Ubuntu and set up your connection by adding the necessary commands in your terminal.
|
|
52
|
+
|
|
53
|
+

|
|
54
|
+
|
|
55
|
+
Your Ubuntu instance is usually always a little out of date. So use the following commands to get it up to speed.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
sudo apt update && sudo apt upgrade
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 1.3. Installing the required software with a script
|
|
62
|
+
|
|
63
|
+
Now that we've connected to our Ubuntu instance, we'll need to install the necessary services on our server to get things going, such as NVM, Node, NPM, etc.
|
|
64
|
+
|
|
65
|
+
For this, our team has set up a small script that will help you to automate a series of installations.
|
|
66
|
+
|
|
67
|
+
Enter the base command, which will start installing the necessary services on your server by downloading the install script and running it directly in the bash shell for execution.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
curl -o- https://raw.githubusercontent.com/powerhouse-inc/powerhouse/refs/heads/main/clis/ph-cli/scripts/setup.sh | bash
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The script contains the following commands and will help you set up a series of services on your server.
|
|
74
|
+
|
|
75
|
+
- **NVM**: Node Version Manager for managing node.js 22 versions
|
|
76
|
+
- **node.js 22**: JavaScript runtime
|
|
77
|
+
- **PM2**: Process manager for node.js 22 applications
|
|
78
|
+
- **ph-cmd**: Powerhouse CLI tool for managing projects.
|
|
79
|
+
- **pnpm**: Fast, disk-space-efficient package manager
|
|
80
|
+
|
|
81
|
+
:::info
|
|
82
|
+
ph-cmd is a tool that helps you manage your Powerhouse projects. It's a command-line interface package that you can install globally on your server and personal machine. It gives you access to a series of powerful commands to create or manage your projects, start or stop your services, install your project on a server instance, etc. Visit this page to learn more about the [Powerhouse builder tooling](/docs/academy/AdvancedTutorial/Create/BuilderTools)
|
|
83
|
+
|
|
84
|
+
<details>
|
|
85
|
+
<summary> How to make use of different branches? </summary>
|
|
86
|
+
|
|
87
|
+
When installing or using the Powerhouse CLI commands you are able to make use of the dev & staging branches. These branches contain more experimental features then the latest stable release the PH CLI uses by default. They can be used to get access to a bugfix or features under development.
|
|
88
|
+
|
|
89
|
+
| Command | Description |
|
|
90
|
+
|---------|-------------|
|
|
91
|
+
| **pnpm install -g ph-cmd** | Install latest stable version |
|
|
92
|
+
| **pnpm install -g ph-cmd@dev** | Install development version |
|
|
93
|
+
| **pnpm install -g ph-cmd@staging** | Install staging version |
|
|
94
|
+
| **ph init** | Use latest stable version of the boilerplate |
|
|
95
|
+
| **ph init --dev** | Use development version of the boilerplate |
|
|
96
|
+
| **ph init --staging** | Use staging version of the boilerplate |
|
|
97
|
+
| **ph use** | Switch all dependencies to latest production versions |
|
|
98
|
+
| **ph use dev** | Switch all dependencies to development versions |
|
|
99
|
+
| **ph use prod** | Switch all dependencies to production versions |
|
|
100
|
+
|
|
101
|
+
Please be aware that these versions can contain bugs and experimental features that aren't fully tested.
|
|
102
|
+
</details>
|
|
103
|
+
|
|
104
|
+
:::
|
|
105
|
+
|
|
106
|
+
Let's have a look at the other commands that are part of the script that will help you install the necessary services on your server.
|
|
107
|
+
|
|
108
|
+
#### 1. Load NVM into the current shell session
|
|
109
|
+
```bash
|
|
110
|
+
export NVM_DIR="$HOME/.nvm"
|
|
111
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
#### 2. Checks if the file nvm.sh exists and loads it if the condition is true.
|
|
115
|
+
```bash
|
|
116
|
+
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
|
|
117
|
+
```
|
|
118
|
+
#### 3. Loading & Verifying NVM
|
|
119
|
+
```bash
|
|
120
|
+
nvm --version
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### 4. Install node.js 22 by using NVM
|
|
124
|
+
```bash
|
|
125
|
+
nvm install 22
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### 5. Install pnpm package manager globally
|
|
129
|
+
```bash
|
|
130
|
+
nvm install 22
|
|
131
|
+
pnpm setup
|
|
132
|
+
source $HOME/.bashrc
|
|
133
|
+
```
|
|
134
|
+
Now follow the instructions of your Ubuntu server at the end of the installation.
|
|
135
|
+
|
|
136
|
+
#### 6. Install Powerhouse CLI 'globally' using pnpm, making it available for command-line use anywhere. This makes it available for command-line use anywhere, not just locally within the project directory.
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pnpm install -g ph-cmd
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## 2. Deploying the host apps & project.
|
|
143
|
+
|
|
144
|
+
Now that we've installed all the necessary services on our server instance, we can start deploying the host apps & our packaged project from npm.
|
|
145
|
+
|
|
146
|
+
1. **Install your project package** that we published earlier on npm, onto the server instance.
|
|
147
|
+
```bash
|
|
148
|
+
ph install @your-org/package-name
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
2. **Start the Connect service** so that we can start interacting with our project.
|
|
152
|
+
```bash
|
|
153
|
+
ph connect --https --port 8442
|
|
154
|
+
```
|
|
155
|
+
Let's verify that the Connect service is running. Since we can't make use of localhost and we're running the Connect service on the server instance, we'll need to use the public IP address of our server instance to start interacting with our project. Copy the public IP address of your server instance and paste it into your browser. Now add the port `:8442` to the end of the URL and you should see your project running.
|
|
156
|
+
|
|
157
|
+
Create a new document and start interacting with it. Add a new item to the list so you can query the document through the GraphQL playground in Switchboard in the next step.
|
|
158
|
+
|
|
159
|
+
3. **Start the Switchboard service** and run the following command to boot the Reactor.
|
|
160
|
+
```bash
|
|
161
|
+
ph switchboard --port 8441
|
|
162
|
+
```
|
|
163
|
+
Let's verify that the Reactor has detected your project and is ready to start by navigating to the GraphQL playground.
|
|
164
|
+
Since we can't make use of localhost and we're running the Switchboard service on the server instance, we'll need to use the public IP address of our server instance to start interacting with our project. Copy the public IP address of your server instance and paste it into your browser. Now add the port `:8441` to the end of the URL and you should get access to the GraphQL playground.
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
## 3. Setup the host apps as system services
|
|
168
|
+
|
|
169
|
+
Now that we've installed the host apps and our project on the server instance, we'll configure them to run as system services. This ensures that:
|
|
170
|
+
- Services automatically start when the server boots up
|
|
171
|
+
- Services automatically restart if they crash
|
|
172
|
+
- Services continue running after you log out of SSH
|
|
173
|
+
- System resources are properly managed through PM2
|
|
174
|
+
|
|
175
|
+
### 3.1. Register services for automatic startup
|
|
176
|
+
|
|
177
|
+
Use the following command to register both Connect and Switchboard as system services:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
ph service startup
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
To remove the services from automatic startup:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
ph service unstartup
|
|
187
|
+
```
|
|
188
|
+
<details>
|
|
189
|
+
<summary>Read the ph service --help command</summary>
|
|
190
|
+
|
|
191
|
+
Usage: ph service [options] `<action>` [service]
|
|
192
|
+
|
|
193
|
+
Manage services
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
Command Overview:
|
|
197
|
+
The service command manages Powerhouse services, allowing you to start, stop, check status,
|
|
198
|
+
and more. It provides a centralized way to control the lifecycle of services in your project.
|
|
199
|
+
|
|
200
|
+
This command:
|
|
201
|
+
1. Controls service lifecycle (start, stop, status, etc.)
|
|
202
|
+
2. Manages multiple services from a single interface
|
|
203
|
+
3. Provides detailed information about running services
|
|
204
|
+
4. Uses PM2 under the hood for process management
|
|
205
|
+
|
|
206
|
+
Arguments:
|
|
207
|
+
`<action>` The action to perform. Available actions:
|
|
208
|
+
- start: Launch the specified service
|
|
209
|
+
- stop: Terminate the specified service
|
|
210
|
+
- status: Check the current status of services
|
|
211
|
+
- list: List all managed services (default)
|
|
212
|
+
- startup: Configure services to start on system boot
|
|
213
|
+
- unstartup: Remove services from system startup
|
|
214
|
+
|
|
215
|
+
[service] Optional. The service to act upon. Available services:
|
|
216
|
+
- switchboard: The document processing engine
|
|
217
|
+
- connect: The Connect Studio interface
|
|
218
|
+
- all: Act on all services (default)
|
|
219
|
+
|
|
220
|
+
Examples:
|
|
221
|
+
$ ph service # List all services (same as 'ph service list all')
|
|
222
|
+
$ ph service start switchboard # Start the Switchboard service
|
|
223
|
+
$ ph service stop connect # Stop the Connect service
|
|
224
|
+
$ ph service start all # Start all services
|
|
225
|
+
$ ph service status # Check status of all services
|
|
226
|
+
$ ph service startup # Configure services to start on system boot
|
|
227
|
+
$ ph service unstartup # Remove services from system startup
|
|
228
|
+
|
|
229
|
+
Notes:
|
|
230
|
+
- Services are managed using PM2, a process manager for node.js 22 applications
|
|
231
|
+
- The 'status' action shows uptime, memory usage, CPU usage, and other metrics
|
|
232
|
+
- The 'list' action is the default when no action is specified
|
|
233
|
+
- The 'all' service is the default when no service is specified
|
|
234
|
+
|
|
235
|
+
</details>
|
|
236
|
+
|
|
237
|
+
### 3.2. Managing individual services
|
|
238
|
+
|
|
239
|
+
You can control each service independently:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# Start individual services
|
|
243
|
+
ph service start connect # Starts only Connect
|
|
244
|
+
ph service start switchboard # Starts only Switchboard
|
|
245
|
+
|
|
246
|
+
# Stop individual services
|
|
247
|
+
ph service stop connect # Stops only Connect
|
|
248
|
+
ph service stop switchboard # Stops only Switchboard
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 3.3. Managing all services together
|
|
252
|
+
|
|
253
|
+
To control both services at once:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
ph service start # Starts both Connect and Switchboard
|
|
257
|
+
ph service stop # Stops both Connect and Switchboard
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
:::tip
|
|
261
|
+
You can check the status of your services at any time using:
|
|
262
|
+
```bash
|
|
263
|
+
ph service status
|
|
264
|
+
```
|
|
265
|
+
This will show you if services are running, their uptime, and resource usage.
|
|
266
|
+
:::
|
|
267
|
+
|
|
268
|
+
:::warning
|
|
269
|
+
After making any configuration changes to your project, remember to restart the affected services for the changes to take effect.
|
|
270
|
+
:::
|
|
271
|
+
|
|
272
|
+
## 4. Verify your project is running on your server
|
|
273
|
+
|
|
274
|
+
- Open the server domain in your browser, and you should see your project running.
|
|
275
|
+
- Verify that synchronization is working and your document is available.
|
|
276
|
+
- Try to make a change to your document and see if it's reflected in another instance with that same document.
|
|
277
|
+
- Query the document through the GraphQL playground.
|
|
278
|
+
|
|
279
|
+
Congratulations! You've now published your project and are ready to start collaborating with your team on the same document models and editors!
|