[{"data":1,"prerenderedAt":1248},["ShallowReactive",2],{"handbook-\u002Fhandbook\u002Fengineering\u002Fcontributing":3,"handbook-nav":538},{"id":4,"title":5,"body":6,"description":408,"extension":529,"meta":530,"navigation":533,"path":534,"seo":535,"stem":536,"__hash__":537},"handbook\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Findex.md","Contributing",{"type":7,"value":8,"toc":513},"minimark",[9,13,18,23,35,44,62,68,100,105,109,131,135,139,146,149,154,194,198,208,214,217,221,228,231,234,242,254,258,261,264,267,299,302,313,316,322,333,336,339,343,353,356,402,409,421,426,433,436,459,464,480,484,487],[10,11,5],"h1",{"id":12},"contributing",[14,15,17],"h2",{"id":16},"coding-best-practices","Coding Best Practices",[19,20,22],"h3",{"id":21},"linting","Linting",[24,25,26,27,34],"p",{},"All code repositories adopt our standard linting rules found in the ",[28,29,33],"a",{"href":30,"rel":31},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002F.github\u002Fblob\u002Fmain\u002F.eslintrc",[32],"nofollow","flowforge\u002F.github repository",".",[24,36,37,38,43],{},"We use ",[28,39,42],{"href":40,"rel":41},"https:\u002F\u002Fstandardjs.com\u002F",[32],"StandardJS",", with one exception - 4 spaces not 2.",[24,45,46,47,52,53,57,58,61],{},"If you're using VSCode, then we recommend using the ",[28,48,51],{"href":49,"rel":50},"https:\u002F\u002Fgithub.com\u002FMicrosoft\u002Fvscode-eslint",[32],"ESLint extension"," and setting ",[54,55,56],"code",{},"all"," for the ",[54,59,60],{},"Eslint › Code Actions On Save: Mode"," setting:",[63,64],"img",{"width":65,"alt":66,"src":67},429,"ESLint - Action on Save","\u002Fhandbook\u002Fimages\u002Feslint_actiononsave.png",[24,69,70,71,74,75,78,79,84,85,90,91,84,93,95,96,99],{},"In the case of working with ",[54,72,73],{},"vue"," or ",[54,76,77],{},"njk"," files (found in the ",[28,80,83],{"href":81,"rel":82},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Ftree\u002Fmain\u002Ffrontend",[32],"frontend"," and ",[28,86,89],{"href":87,"rel":88},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fwebsite",[32],"website"," repositories), then you can add ",[54,92,73],{},[54,94,77],{}," to the ",[54,97,98],{},"Eslint: Probe"," setting in order to enable auto-formatting on save for these file types.",[63,101],{"width":102,"alt":103,"src":104},478,"ESLint - Probe","\u002Fhandbook\u002Fimages\u002Feslint_probe.png",[19,106,108],{"id":107},"editor-config","Editor Config",[24,110,111,112,116,117,124,125,130],{},"The ",[28,113,115],{"href":87,"rel":114},[32],"website repository"," uses a ",[28,118,121],{"href":119,"rel":120},"https:\u002F\u002Feditorconfig.org",[32],[54,122,123],{},".editorconfig","\nto allow editors to automatically pick up the correct style for that repository.\nSome editors, like neovim, has this pre-installed. If you're using VSCode, an\n",[28,126,129],{"href":127,"rel":128},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=EditorConfig.EditorConfig",[32],"plugin","\nis available.",[14,132,134],{"id":133},"git-best-practices","Git Best Practices",[19,136,138],{"id":137},"committing","Committing",[24,140,141,142,145],{},"Take care when adding files to a commit. It's easy just to ",[54,143,144],{},"git add -A"," (i.e. add all local changes to a commit) but this can result in commits and PRs being clogged with excessive changes that aren't linked to the actual issue\u002Ffeature at hand.",[24,147,148],{},"Take your time when committing files. Review each file carefully and ensure what you're adding to a commit is relevant and necessary.",[150,151,153],"h4",{"id":152},"git-commit-messages","Git Commit Messages",[155,156,157,161,175,178,191],"ul",{},[158,159,160],"li",{},"Capitalise the first letter, no trailing dot, 72 chars or less.",[158,162,163,164,167,168,74,171,174],{},"First line should be an imperative\u002Fpresent tense, e.g. ",[54,165,166],{},"Change"," (not ",[54,169,170],{},"Changed",[54,172,173],{},"Changes",")",[158,176,177],{},"Do not include the issue number in the first line, this means that commit message are then suitable to include in a changelog as-is.",[158,179,180,181,184,185,184,188],{},"Second line should either be blank, or reference to an issue\u002FPR using one of the GitHub recognized keywords, e.g. ",[54,182,183],{},"closes #..."," ",[54,186,187],{},"fixes #...",[54,189,190],{},"part of #...",[158,192,193],{},"The remainder should be any further narrative that is needed. Wrapped at 72 chars.",[150,195,197],{"id":196},"branching-vs-forking","Branching vs. Forking",[24,199,200,201,204,205,207],{},"Commits must never be pushed directly to ",[54,202,203],{},"main",". Instead, branch or fork from the relevant branch (most likely ",[54,206,203],{},") and work from there.",[24,209,210,211,34],{},"It is preferred that new work be added on a branch (rather than in a forked repository), although this is not enforced. Branch names should be short, informative, and if directly linked to a single issue number, reference such issue number, e.g. ",[54,212,213],{},"29-issue-summary",[24,215,216],{},"Once code is merged, please close any related branches in order to keep the repository tidy.",[19,218,220],{"id":219},"pull-requests","Pull Requests",[24,222,223,224,227],{},"PRs, when opened, should have at least one reviewer assigned, and a consequent review approved, before any merge takes place. If a PR is opened for review\u002Fdiscussion purposes, this PR should be set to ",[54,225,226],{},"draft"," state.",[24,229,230],{},"When merging a PR, you should choose the \"Squash and merge\" option. This is the default approach for merging pull requests.",[24,232,233],{},"When conducting a PR review, if you are the last (or only) reviewer and all reviews (including your own) are approvals, unless there is a comment from the author stating otherwise, you are free to conduct the merge. Otherwise, leave the merge to the author of the PR, or a future reviewer.",[24,235,236,237,34],{},"For a comprehensive review of the Pull Request, utilize the designated FlowFuse pre-staging environment. As of the composition of this document, the pre-staging verification is only available for the primary ",[28,238,241],{"href":239,"rel":240},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse",[32],"FlowFuse NPM package",[24,243,244,245,248,249,253],{},"Pre-staging environment is created for each Pull Request created within ",[54,246,247],{},"FlowFuse\u002Fflowfuse"," repo which includes changes in the source code. Read more in the ",[28,250,252],{"href":251},"#test-changes-in-staging","Test Changes in Staging"," section.",[14,255,257],{"id":256},"conducting-code-reviews","Conducting Code Reviews",[24,259,260],{},"As part of our commitment to quality, all code changes should be reviewed by at least one other developer before being merged. This is to ensure that the code is of a high standard, and that any potential issues are caught early.",[24,262,263],{},"When code is ready to review, developer should open a Pull Request (PR) and assign a reviewer. The reviewer should then review the code, and provide feedback in the form of comments on the PR.",[24,265,266],{},"When reviewing code, consider the following:",[155,268,269,287,293],{},[158,270,271,275,276,282,283,286],{},[272,273,274],"strong",{},"Functionality:"," Has the acceptance criteria on the attached issue been met? Does the code do what it is supposed to do? You ",[277,278,279],"em",{},[272,280,281],{},"must explicitly test the functionality",". It is recommended to do so in a ",[28,284,285],{"href":251},"staging environment"," as well as pulling code changes locally and testing on your own machine.",[158,288,289,292],{},[272,290,291],{},"Test Coverage:"," Are there tests for the new code introduced? Are the test cases sufficient, and do they cover more than just golden path?",[158,294,295,298],{},[272,296,297],{},"Documentation:"," Ensure that supporting documentation has been written, this is especially important for new features and options introduced.",[19,300,252],{"id":301},"test-changes-in-staging",[24,303,304,305,307,308,312],{},"For FlowFuse, when changes are merged into the ",[54,306,203],{}," branch, they are ",[28,309,311],{"href":310},"..\u002Fops\u002Fproduction#deployment-to-flowfuse-cloud","automatically deployed to the production environment",". As such, it is vital a thorough review has been conducted before merging, and that the changes have been tested in a staging environment.",[24,314,315],{},"When a pull request includes modifications to the source code, a dedicated pre-staging environment is automatically generated. This pre-staging environment is a complete replica of the staging environment, ensuring that it mirrors the conditions and configurations found in staging. The pre-staging environment serves as a testing ground, allowing developers to thoroughly evaluate their changes before they are merged into the main codebase. This ensures that any issues can be identified and addressed in an isolated setting, maintaining the integrity of the staging environment.",[24,317,318],{},[63,319],{"alt":320,"src":321},"Example entry in the PR status to show the \"Deploy Staging\" job","\u002Fhandbook-media\u002Fimages\u002Fscreenshots\u002Fdevops-pr-staging.png",[24,323,324,325,328,329,332],{},"The environment itself will then be available at: ",[54,326,327],{},"https:\u002F\u002F\u003Cpr-number>.flowfuse.dev\u002F"," . Information about the pre-staging deployment is sent to ",[54,330,331],{},"gh-pipelines"," Slack channel.",[24,334,335],{},"Access credentials for the pre-staging environment are located in the FlowFuse 1Password vault.",[24,337,338],{},"The FlowFuse application deployed from the Pull Request comes pre-configured. The environment is terminated upon PR merging or closure.",[150,340,342],{"id":341},"custom-pre-staging-environment","Custom Pre-Staging Environment",[24,344,345,346,349,350,352],{},"By default, a pre-staging environment is automatically created for each Pull Request made in the ",[54,347,348],{},"flowfuse\u002Fflowfuse"," repository, containing changes from the related feature branch.\nHowever, there are instances where it is necessary to test changes or features made in the dependency packages of ",[54,351,348],{},".\nThis can be accomplished by triggering a GitHub Actions pipeline to create a pre-staging environment with additional input parameters.",[24,354,355],{},"To create a customized pre-staging environment, please follow the steps below:",[357,358,359,365,371,377,388,395],"ol",{},[158,360,361,362,34],{},"Push the changes you want to test to the feature branch of the specific package's repository, ie. ",[54,363,364],{},"nr-project-nodes",[158,366,367,368,370],{},"In the ",[54,369,348],{}," repository, create a new feature branch. Use this branch to make any necessary changes that depend on the updated package from step 1, if applicable.",[158,372,373,374,376],{},"Create a Pull Request for the changes in the ",[54,375,348],{}," repository.",[158,378,379,380,385,386,376],{},"Navigate to the ",[28,381,384],{"href":382,"rel":383},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Factions\u002Fworkflows\u002Fbranch-deploy.yaml",[32],"Create pre-staging environment workflow page"," in the Actions tab of the ",[54,387,348],{},[158,389,390,391,394],{},"On the right side, click the ",[54,392,393],{},"Run workflow"," button.",[158,396,397,398,401],{},"Complete the ",[54,399,400],{},"Pull request number"," field and the dependent package feature branch name.",[24,403,404],{},[63,405],{"alt":406,"src":407,"dataZoomable":408},"Create pre-staging environment workflow inputs","\u002Fhandbook-media\u002Fimages\u002Fscreenshots\u002Fgh-pre-staging-workflow-inputs.png","",[357,410,412],{"start":411},7,[158,413,414,415,417,418,420],{},"Click the ",[54,416,393],{}," button and wait for the results. A Slack notification will be sent to the ",[54,419,331],{}," channel with the link to the pre-staging environment.",[422,423,425],"h5",{"id":424},"using-the-custom-node-red-stack","Using the custom Node-RED stack",[24,427,428,429,432],{},"If you decide to create a pre-staging environment using the ",[54,430,431],{},"nr-launcher"," feature branch (or its dependencies), a custom Node-RED stack will be created to allow you to test the changes.",[24,434,435],{},"Once your pre-staging environment is created, you can create a new instance that uses the custom stack:",[357,437,438,441,444,447,450,453,456],{},[158,439,440],{},"Log in to your pre-staging environment",[158,442,443],{},"Select the desired team",[158,445,446],{},"Select an application",[158,448,449],{},"Click \"Add Instance\"",[158,451,452],{},"Select the \"Custom\" entry in the \"Node-RED Version\" dropdown",[158,454,455],{},"Press Next until you reach the last step of the instance creation wizard",[158,457,458],{},"Press \"Create Instance\" to create your instance",[24,460,461],{},[272,462,463],{},"NOTES:",[155,465,466,469],{},[158,467,468],{},"If you need to update the branch used in your custom stack, you will need to re-run the \"Custom Pre-Staging Environment\" action.",[158,470,471,472],{},"Before you re-run the \"Custom Pre-Staging Environment\" action, you must do one of the following:\n",[155,473,474,477],{},[158,475,476],{},"Delete all Hosted Instances using the custom stack",[158,478,479],{},"Change all Hosted Instances using the custom stack to a non-custom stack",[19,481,483],{"id":482},"community-contributions","Community Contributions",[24,485,486],{},"As an open-core project, FlowFuse welcomes community contributions to the project. If you are, as a FlowFuse employee, conducting a review of a community contribution, please consider these additional guidelines:",[357,488,489,495,501,507],{},[158,490,491,494],{},[272,492,493],{},"Be Grateful:"," The community has taken the time to contribute to the project in their own time. They didn't need to do this, explicitly thank contributors for their Pull Requests, especially for first time contributors.",[158,496,497,500],{},[272,498,499],{},"Be Respectful:"," In some cases, contributors may not have considered all the implications of their changes, or may not have the technical acumen to make the changes themselves to the standards we may like. Remember, they are doing this because they care about the project. Be respectful, provide feedback and be encouraging of future changes. Teaching a contributor about our code, and about mechanics of the project is a great way to help them improve, and will encourage more contributions in the future.",[158,502,503,506],{},[272,504,505],{},"Don't pressure them:"," Proposing modifications and fixes to their Pull Requests are valid, and are important to ensuring we maintain a high quality codebase. However, we should never ask a contributor to do more work than they need to do. They are volunteering their time, and we shouldn't place demands on them to pick up additional issues as if they were FlowFuse employees. If they ask where they could be helpful, or want to take tasks for us, then please do assign accordingly.",[158,508,509,512],{},[272,510,511],{},"Don't be afraid to step in and make changes yourself:"," Having a contributor go from opening a PR to seeing it merged is our main objective here. Closing that loop in a timely and supportive manner will encourage more contributions in the future. Sometimes, it may be necessary to make changes to a PR yourself, and explain to the contributor the reasoning behind your modifications to their work. Teaching is vitally important still, but doing some things yourself will reduce the friction to merge for the contributor, so make assessments where this could be done.",{"title":408,"searchDepth":514,"depth":514,"links":515},2,[516,521,525],{"id":16,"depth":514,"text":17,"children":517},[518,520],{"id":21,"depth":519,"text":22},3,{"id":107,"depth":519,"text":108},{"id":133,"depth":514,"text":134,"children":522},[523,524],{"id":137,"depth":519,"text":138},{"id":219,"depth":519,"text":220},{"id":256,"depth":514,"text":257,"children":526},[527,528],{"id":301,"depth":519,"text":252},{"id":482,"depth":519,"text":483},"md",{"navTitle":5,"originalPath":531,"updated":532},"development\u002Fcontributing.md","git modified",true,"\u002Fhandbook\u002Fengineering\u002Fcontributing",{"title":5,"description":408},"handbook\u002Fengineering\u002Fcontributing\u002Findex","1yLJ-KHLZSsZbSYM7s7E61UfleoCtmqGqqFgC2yldw0",[539],{"title":540,"path":541,"stem":542,"children":543},"Handbook","\u002Fhandbook","handbook",[544,547,668,698,893,969,1027,1153],{"title":545,"path":541,"stem":546},"FlowFuse Handbook","handbook\u002Findex",{"title":548,"path":549,"stem":550,"children":551},"Company","\u002Fhandbook\u002Fcompany","handbook\u002Fcompany\u002Findex",[552,553,557,561,565,583,587,591,595,660,664],{"title":548,"path":549,"stem":550},{"title":554,"path":555,"stem":556},"Board meetings","\u002Fhandbook\u002Fcompany\u002Fboard","handbook\u002Fcompany\u002Fboard",{"title":558,"path":559,"stem":560},"Communication","\u002Fhandbook\u002Fcompany\u002Fcommunication","handbook\u002Fcompany\u002Fcommunication",{"title":562,"path":563,"stem":564},"How we make decisions","\u002Fhandbook\u002Fcompany\u002Fdecisions","handbook\u002Fcompany\u002Fdecisions",{"title":566,"path":567,"stem":568,"children":569},"Guides","\u002Fhandbook\u002Fcompany\u002Fguides","handbook\u002Fcompany\u002Fguides\u002Findex",[570,571,575,579],{"title":566,"path":567,"stem":568},{"title":572,"path":573,"stem":574},"How to use Git","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgit","handbook\u002Fcompany\u002Fguides\u002Fgit",{"title":576,"path":577,"stem":578},"Google Workspace","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgworkspace","handbook\u002Fcompany\u002Fguides\u002Fgworkspace",{"title":580,"path":581,"stem":582},"Markdown Guide","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fmarkdown","handbook\u002Fcompany\u002Fguides\u002Fmarkdown",{"title":584,"path":585,"stem":586},"Organizational Structure","\u002Fhandbook\u002Fcompany\u002Forganizational-structure","handbook\u002Fcompany\u002Forganizational-structure",{"title":588,"path":589,"stem":590},"Principles","\u002Fhandbook\u002Fcompany\u002Fprinciples","handbook\u002Fcompany\u002Fprinciples",{"title":592,"path":593,"stem":594},"Remote Work","\u002Fhandbook\u002Fcompany\u002Fremote","handbook\u002Fcompany\u002Fremote",{"title":596,"path":597,"stem":598,"children":599},"Security","\u002Fhandbook\u002Fcompany\u002Fsecurity","handbook\u002Fcompany\u002Fsecurity\u002Findex",[600,601,605,609,613,617,621,625,629,633,637,641,645,649,652,656],{"title":596,"path":597,"stem":598},{"title":602,"path":603,"stem":604},"Access Control Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Faccess-control","handbook\u002Fcompany\u002Fsecurity\u002Faccess-control",{"title":606,"path":607,"stem":608},"AI Development and Customer Data Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data","handbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data",{"title":610,"path":611,"stem":612},"Asset Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fasset-management","handbook\u002Fcompany\u002Fsecurity\u002Fasset-management",{"title":614,"path":615,"stem":616},"Business Continuity & Disaster Recovery Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity","handbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity",{"title":618,"path":619,"stem":620},"Computer Security","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security","handbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security",{"title":622,"path":623,"stem":624},"Cryptography Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcryptography","handbook\u002Fcompany\u002Fsecurity\u002Fcryptography",{"title":626,"path":627,"stem":628},"Data Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fdata-management","handbook\u002Fcompany\u002Fsecurity\u002Fdata-management",{"title":630,"path":631,"stem":632},"Human Resources Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources","handbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources",{"title":634,"path":635,"stem":636},"Incident Response Plan","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fincident-response","handbook\u002Fcompany\u002Fsecurity\u002Fincident-response",{"title":638,"path":639,"stem":640},"Information Security Policy and Acceptable Use Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security",{"title":642,"path":643,"stem":644},"Information Security Roles and Responsibilities","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles",{"title":646,"path":647,"stem":648},"Operations Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Foperations-security","handbook\u002Fcompany\u002Fsecurity\u002Foperations-security",{"title":626,"path":650,"stem":651},"\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Frisk-management","handbook\u002Fcompany\u002Fsecurity\u002Frisk-management",{"title":653,"path":654,"stem":655},"Secure Development Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fsecure-development","handbook\u002Fcompany\u002Fsecurity\u002Fsecure-development",{"title":657,"path":658,"stem":659},"Third-Party Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management","handbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management",{"title":661,"path":662,"stem":663},"Strategy","\u002Fhandbook\u002Fcompany\u002Fstrategy","handbook\u002Fcompany\u002Fstrategy",{"title":665,"path":666,"stem":667},"Values","\u002Fhandbook\u002Fcompany\u002Fvalues","handbook\u002Fcompany\u002Fvalues",{"title":669,"path":670,"stem":671,"children":672},"Design","\u002Fhandbook\u002Fdesign","handbook\u002Fdesign\u002Findex",[673,674,678,682,686,690,694],{"title":669,"path":670,"stem":671},{"title":675,"path":676,"stem":677},"Art Requests","\u002Fhandbook\u002Fdesign\u002Fart-requests","handbook\u002Fdesign\u002Fart-requests",{"title":679,"path":680,"stem":681},"FlowFuse Branding Guidelines","\u002Fhandbook\u002Fdesign\u002Fbranding","handbook\u002Fdesign\u002Fbranding",{"title":683,"path":684,"stem":685},"Design Thinking","\u002Fhandbook\u002Fdesign\u002Fdesign-thinking","handbook\u002Fdesign\u002Fdesign-thinking",{"title":687,"path":688,"stem":689},"Process","\u002Fhandbook\u002Fdesign\u002Fprocess","handbook\u002Fdesign\u002Fprocess",{"title":691,"path":692,"stem":693},"Tools","\u002Fhandbook\u002Fdesign\u002Ftools","handbook\u002Fdesign\u002Ftools",{"title":695,"path":696,"stem":697},"Videos","\u002Fhandbook\u002Fdesign\u002Fvideos","handbook\u002Fdesign\u002Fvideos",{"title":699,"path":700,"stem":701,"children":702},"Engineering","\u002Fhandbook\u002Fengineering","handbook\u002Fengineering\u002Findex",[703,704,719,723,745,783,787,846,850,872,876,890],{"title":699,"path":700,"stem":701},{"title":5,"path":534,"stem":536,"children":705},[706,707,711,715],{"title":5,"path":534,"stem":536},{"title":708,"path":709,"stem":710},"Certified Nodes","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes","handbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes",{"title":712,"path":713,"stem":714},"Setting up a local FF Tables test environment","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fff-tables","handbook\u002Fengineering\u002Fcontributing\u002Fff-tables",{"title":716,"path":717,"stem":718},"FlowFuse Team NPM Registry","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry","handbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry",{"title":720,"path":721,"stem":722},"Dependency Updates","\u002Fhandbook\u002Fengineering\u002Fdependency-updates","handbook\u002Fengineering\u002Fdependency-updates",{"title":724,"path":725,"stem":726,"children":727},"Front-End","\u002Fhandbook\u002Fengineering\u002Ffrontend","handbook\u002Fengineering\u002Ffrontend\u002Findex",[728,729,733,737,741],{"title":724,"path":725,"stem":726},{"title":730,"path":731,"stem":732},"Data Attributes","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes","handbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes",{"title":734,"path":735,"stem":736},"Front-End Layouts","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Flayouts","handbook\u002Fengineering\u002Ffrontend\u002Flayouts",{"title":738,"path":739,"stem":740},"Services","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fservices","handbook\u002Fengineering\u002Ffrontend\u002Fservices",{"title":742,"path":743,"stem":744},"Front-End Testing","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting","handbook\u002Fengineering\u002Ffrontend\u002Ftesting",{"title":746,"path":747,"stem":748,"children":749},"Platform Ops","\u002Fhandbook\u002Fengineering\u002Fops","handbook\u002Fengineering\u002Fops\u002Findex",[750,751,755,759,763,767,771,775,779],{"title":746,"path":747,"stem":748},{"title":752,"path":753,"stem":754},"FlowFuse Dedicated","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdedicated","handbook\u002Fengineering\u002Fops\u002Fdedicated",{"title":756,"path":757,"stem":758},"Dependencies within the CI\u002FCD process","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdeployment","handbook\u002Fengineering\u002Fops\u002Fdeployment",{"title":760,"path":761,"stem":762},"Incident Response","\u002Fhandbook\u002Fengineering\u002Fops\u002Fincident-response","handbook\u002Fengineering\u002Fops\u002Fincident-response",{"title":764,"path":765,"stem":766},"Observability","\u002Fhandbook\u002Fengineering\u002Fops\u002Fobservability","handbook\u002Fengineering\u002Fops\u002Fobservability",{"title":768,"path":769,"stem":770},"Production Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction","handbook\u002Fengineering\u002Fops\u002Fproduction",{"title":772,"path":773,"stem":774},"How to Update Stacks on Production","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction-stack-update","handbook\u002Fengineering\u002Fops\u002Fproduction-stack-update",{"title":776,"path":777,"stem":778},"FlowFuse Expert","\u002Fhandbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant","handbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant",{"title":780,"path":781,"stem":782},"Staging Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fstaging","handbook\u002Fengineering\u002Fops\u002Fstaging",{"title":784,"path":785,"stem":786},"Packaging Guidelines","\u002Fhandbook\u002Fengineering\u002Fpackaging","handbook\u002Fengineering\u002Fpackaging",{"title":788,"path":789,"stem":790,"children":791},"Product","\u002Fhandbook\u002Fengineering\u002Fproduct","handbook\u002Fengineering\u002Fproduct\u002Findex",[792,793,797,801,805,809,813,819,823,826,830,834,838,842],{"title":788,"path":789,"stem":790},{"title":794,"path":795,"stem":796},"Blueprints","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fblueprints","handbook\u002Fengineering\u002Fproduct\u002Fblueprints",{"title":798,"path":799,"stem":800},"Node-RED Dashboard 2.0 - Project","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fdashboard","handbook\u002Fengineering\u002Fproduct\u002Fdashboard",{"title":802,"path":803,"stem":804},"Product Feedback","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ffeedback","handbook\u002Fengineering\u002Fproduct\u002Ffeedback",{"title":806,"path":807,"stem":808},"Glossary","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fglossary","handbook\u002Fengineering\u002Fproduct\u002Fglossary",{"title":810,"path":811,"stem":812},"Product Metrics","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fmetrics","handbook\u002Fengineering\u002Fproduct\u002Fmetrics",{"title":814,"path":815,"stem":816,"children":817},"Personas","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpersonas","handbook\u002Fengineering\u002Fproduct\u002Fpersonas\u002Findex",[818],{"title":814,"path":815,"stem":816},{"title":820,"path":821,"stem":822},"Pricing Principles","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpricing","handbook\u002Fengineering\u002Fproduct\u002Fpricing",{"title":588,"path":824,"stem":825},"\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fprinciples","handbook\u002Fengineering\u002Fproduct\u002Fprinciples",{"title":827,"path":828,"stem":829},"Product Strategy","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fstrategy","handbook\u002Fengineering\u002Fproduct\u002Fstrategy",{"title":831,"path":832,"stem":833},"Product Growth","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ftelemetry","handbook\u002Fengineering\u002Fproduct\u002Ftelemetry",{"title":835,"path":836,"stem":837},"Versioning","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fversioning","handbook\u002Fengineering\u002Fproduct\u002Fversioning",{"title":839,"path":840,"stem":841},"Market Segments","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fverticals","handbook\u002Fengineering\u002Fproduct\u002Fverticals",{"title":843,"path":844,"stem":845},"Vision","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fvision","handbook\u002Fengineering\u002Fproduct\u002Fvision",{"title":847,"path":848,"stem":849},"Project Management","\u002Fhandbook\u002Fengineering\u002Fproject-management","handbook\u002Fengineering\u002Fproject-management",{"title":851,"path":852,"stem":853,"children":854},"Releases","\u002Fhandbook\u002Fengineering\u002Freleases","handbook\u002Fengineering\u002Freleases\u002Findex",[855,856,860,864,868],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859},"Dashboard 2.0 Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdashboard-2","handbook\u002Fengineering\u002Freleases\u002Fdashboard-2",{"title":861,"path":862,"stem":863},"Digital Ocean Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdigital-ocean","handbook\u002Fengineering\u002Freleases\u002Fdigital-ocean",{"title":865,"path":866,"stem":867},"Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess","handbook\u002Fengineering\u002Freleases\u002Fprocess",{"title":869,"path":870,"stem":871},"Writing Changelog Posts","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fwriting-changelog","handbook\u002Fengineering\u002Freleases\u002Fwriting-changelog",{"title":873,"path":874,"stem":875},"Security Reporting Policy","\u002Fhandbook\u002Fengineering\u002Fsecurity","handbook\u002Fengineering\u002Fsecurity",{"title":877,"path":878,"stem":879,"children":880},"Support","\u002Fhandbook\u002Fengineering\u002Fsupport","handbook\u002Fengineering\u002Fsupport\u002Findex",[881,882,886],{"title":877,"path":878,"stem":879},{"title":883,"path":884,"stem":885},"Support Triage Duty","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftriage","handbook\u002Fengineering\u002Fsupport\u002Ftriage",{"title":887,"path":888,"stem":889},"Troubleshooting","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","handbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting",{"title":691,"path":891,"stem":892},"\u002Fhandbook\u002Fengineering\u002Ftools","handbook\u002Fengineering\u002Ftools",{"title":894,"path":895,"stem":896,"children":897},"Marketing department","\u002Fhandbook\u002Fmarketing","handbook\u002Fmarketing\u002Findex",[898,899,903,907,921,925,929,933,937,941,945,949,953,957,961,965],{"title":894,"path":895,"stem":896},{"title":900,"path":901,"stem":902},"Blog","\u002Fhandbook\u002Fmarketing\u002Fblog","handbook\u002Fmarketing\u002Fblog",{"title":904,"path":905,"stem":906},"Brand Personality, Tone of Voice & Character","\u002Fhandbook\u002Fmarketing\u002Fbrand-voice","handbook\u002Fmarketing\u002Fbrand-voice",{"title":908,"path":909,"stem":910,"children":911},"Community","\u002Fhandbook\u002Fmarketing\u002Fcommunity","handbook\u002Fmarketing\u002Fcommunity\u002Findex",[912,913,917],{"title":908,"path":909,"stem":910},{"title":914,"path":915,"stem":916},"Community Guidelines","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines","handbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines",{"title":918,"path":919,"stem":920},"Forums And Support","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support","handbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support",{"title":922,"path":923,"stem":924},"Customer Stories","\u002Fhandbook\u002Fmarketing\u002Fcustomer-stories","handbook\u002Fmarketing\u002Fcustomer-stories",{"title":926,"path":927,"stem":928},"FlowFuse for Education","\u002Fhandbook\u002Fmarketing\u002Feducation","handbook\u002Fmarketing\u002Feducation",{"title":930,"path":931,"stem":932},"Marketing Email","\u002Fhandbook\u002Fmarketing\u002Femail","handbook\u002Fmarketing\u002Femail",{"title":934,"path":935,"stem":936},"Events","\u002Fhandbook\u002Fmarketing\u002Fevents","handbook\u002Fmarketing\u002Fevents",{"title":938,"path":939,"stem":940},"How the marketing team works at FlowFuse","\u002Fhandbook\u002Fmarketing\u002Fhow-we-work","handbook\u002Fmarketing\u002Fhow-we-work",{"title":942,"path":943,"stem":944},"Lead Activation","\u002Fhandbook\u002Fmarketing\u002Flead-activation","handbook\u002Fmarketing\u002Flead-activation",{"title":946,"path":947,"stem":948},"Lead Generation","\u002Fhandbook\u002Fmarketing\u002Fleads","handbook\u002Fmarketing\u002Fleads",{"title":950,"path":951,"stem":952},"Messaging","\u002Fhandbook\u002Fmarketing\u002Fmessaging","handbook\u002Fmarketing\u002Fmessaging",{"title":954,"path":955,"stem":956},"Marketing Programs","\u002Fhandbook\u002Fmarketing\u002Fprograms","handbook\u002Fmarketing\u002Fprograms",{"title":958,"path":959,"stem":960},"Social Media Channels","\u002Fhandbook\u002Fmarketing\u002Fsocial-media","handbook\u002Fmarketing\u002Fsocial-media",{"title":962,"path":963,"stem":964},"FlowFuse Webinars","\u002Fhandbook\u002Fmarketing\u002Fwebinars","handbook\u002Fmarketing\u002Fwebinars",{"title":966,"path":967,"stem":968},"Marketing Website","\u002Fhandbook\u002Fmarketing\u002Fwebsite","handbook\u002Fmarketing\u002Fwebsite",{"title":970,"path":971,"stem":972,"children":973},"Operations","\u002Fhandbook\u002Foperations","handbook\u002Foperations\u002Findex",[974,975,979,983,987,1008,1011,1015,1019,1023],{"title":970,"path":971,"stem":972},{"title":976,"path":977,"stem":978},"Tax & Compliance","\u002Fhandbook\u002Foperations\u002Faccounting","handbook\u002Foperations\u002Faccounting",{"title":980,"path":981,"stem":982},"Accounts","\u002Fhandbook\u002Foperations\u002Faccounts","handbook\u002Foperations\u002Faccounts",{"title":984,"path":985,"stem":986},"Billing","\u002Fhandbook\u002Foperations\u002Fbilling","handbook\u002Foperations\u002Fbilling",{"title":408,"path":988,"stem":989,"children":990},"\u002Fhandbook\u002Foperations\u002Fceo-ops","handbook\u002Foperations\u002Fceo-ops\u002Findex",[991,992,996,1000,1004],{"title":408,"path":988,"stem":989},{"title":993,"path":994,"stem":995},"Calendar Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management","handbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management",{"title":997,"path":998,"stem":999},"Inbox Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Finbox-management","handbook\u002Foperations\u002Fceo-ops\u002Finbox-management",{"title":1001,"path":1002,"stem":1003},"Task Managment","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftask-managment","handbook\u002Foperations\u002Fceo-ops\u002Ftask-managment",{"title":1005,"path":1006,"stem":1007},"Travel Booking","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking","handbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking",{"title":166,"path":1009,"stem":1010},"\u002Fhandbook\u002Foperations\u002Fchange","handbook\u002Foperations\u002Fchange",{"title":1012,"path":1013,"stem":1014},"Commission Payment","\u002Fhandbook\u002Foperations\u002Fcommission-payment","handbook\u002Foperations\u002Fcommission-payment",{"title":1016,"path":1017,"stem":1018},"Data at FlowFuse","\u002Fhandbook\u002Foperations\u002Fdata","handbook\u002Foperations\u002Fdata",{"title":1020,"path":1021,"stem":1022},"Signatures","\u002Fhandbook\u002Foperations\u002Fsignatures","handbook\u002Foperations\u002Fsignatures",{"title":1024,"path":1025,"stem":1026},"Vendors","\u002Fhandbook\u002Foperations\u002Fvendors","handbook\u002Foperations\u002Fvendors",{"title":1028,"path":1029,"stem":1030,"children":1031},"People Operations","\u002Fhandbook\u002Fpeopleops","handbook\u002Fpeopleops\u002Findex",[1032,1033,1037,1041,1045,1049,1053,1071,1133,1137,1141,1145,1149],{"title":1028,"path":1029,"stem":1030},{"title":1034,"path":1035,"stem":1036},"Coaching Plans","\u002Fhandbook\u002Fpeopleops\u002Fcoaching-plans","handbook\u002Fpeopleops\u002Fcoaching-plans",{"title":1038,"path":1039,"stem":1040},"Code of Conduct","\u002Fhandbook\u002Fpeopleops\u002Fcode-of-conduct","handbook\u002Fpeopleops\u002Fcode-of-conduct",{"title":1042,"path":1043,"stem":1044},"Compensation","\u002Fhandbook\u002Fpeopleops\u002Fcompensation","handbook\u002Fpeopleops\u002Fcompensation",{"title":1046,"path":1047,"stem":1048},"Compliance & Training (Mineral)","\u002Fhandbook\u002Fpeopleops\u002Fcompliance","handbook\u002Fpeopleops\u002Fcompliance",{"title":1050,"path":1051,"stem":1052},"Expenses","\u002Fhandbook\u002Fpeopleops\u002Fexpenses","handbook\u002Fpeopleops\u002Fexpenses",{"title":1054,"path":1055,"stem":1056,"children":1057},"Hiring","\u002Fhandbook\u002Fpeopleops\u002Fhiring","handbook\u002Fpeopleops\u002Fhiring\u002Findex",[1058,1059,1063,1067],{"title":1054,"path":1055,"stem":1056},{"title":1060,"path":1061,"stem":1062},"Working with Recruiters","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Frecruiters","handbook\u002Fpeopleops\u002Fhiring\u002Frecruiters",{"title":1064,"path":1065,"stem":1066},"Screening Call","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call","handbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call",{"title":1068,"path":1069,"stem":1070},"Star Questions","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions","handbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions",{"title":1072,"path":1073,"stem":1074,"children":1075},"Job Descriptions","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Findex",[1076,1077,1081,1085,1089,1093,1097,1101,1105,1109,1113,1117,1121,1125,1129],{"title":1072,"path":1073,"stem":1074},{"title":1078,"path":1079,"stem":1080},"Account Executive","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive",{"title":1082,"path":1083,"stem":1084},"CEO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo",{"title":1086,"path":1087,"stem":1088},"Chief of Staff","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff",{"title":1090,"path":1091,"stem":1092},"CTO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto",{"title":1094,"path":1095,"stem":1096},"Developer Relations Advocate","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate",{"title":1098,"path":1099,"stem":1100},"Engineering Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager",{"title":1102,"path":1103,"stem":1104},"Fullstack Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer",{"title":1106,"path":1107,"stem":1108},"Fullstack Engineer (AI-Focused)","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai",{"title":1110,"path":1111,"stem":1112},"Head of Marketing","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing",{"title":1114,"path":1115,"stem":1116},"Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager",{"title":1118,"path":1119,"stem":1120},"Product Marketer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer",{"title":1122,"path":1123,"stem":1124},"Solutions Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer",{"title":1126,"path":1127,"stem":1128},"Technical Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager",{"title":1130,"path":1131,"stem":1132},"VP of Sales","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales",{"title":1134,"path":1135,"stem":1136},"Holiday and Leave","\u002Fhandbook\u002Fpeopleops\u002Fleave","handbook\u002Fpeopleops\u002Fleave",{"title":1138,"path":1139,"stem":1140},"PeopleOps policies","\u002Fhandbook\u002Fpeopleops\u002Forganization","handbook\u002Fpeopleops\u002Forganization",{"title":1142,"path":1143,"stem":1144},"Performance Review","\u002Fhandbook\u002Fpeopleops\u002Fperformance-review","handbook\u002Fpeopleops\u002Fperformance-review",{"title":1146,"path":1147,"stem":1148},"Summit","\u002Fhandbook\u002Fpeopleops\u002Fsummit","handbook\u002Fpeopleops\u002Fsummit",{"title":1150,"path":1151,"stem":1152},"Travel","\u002Fhandbook\u002Fpeopleops\u002Ftravel","handbook\u002Fpeopleops\u002Ftravel",{"title":1154,"path":1155,"stem":1156,"children":1157},"Sales department","\u002Fhandbook\u002Fsales","handbook\u002Fsales\u002Findex",[1158,1159,1165,1169,1173,1177,1181,1185,1189,1193,1210,1214,1226,1230,1236,1240,1244],{"title":1154,"path":1155,"stem":1156},{"title":1160,"path":1161,"stem":1162,"children":1163},"FY 2026 SALES COMPENSATION PLAN","\u002Fhandbook\u002Fsales\u002Fcommission-plan","handbook\u002Fsales\u002Fcommission-plan\u002Findex",[1164],{"title":1160,"path":1161,"stem":1162},{"title":1166,"path":1167,"stem":1168},"Customer Success","\u002Fhandbook\u002Fsales\u002Fcustomer-success","handbook\u002Fsales\u002Fcustomer-success",{"title":1170,"path":1171,"stem":1172},"Self Hosted Dashboard v2 Multi User Plugin","\u002Fhandbook\u002Fsales\u002Fdashboard-v2","handbook\u002Fsales\u002Fdashboard-v2",{"title":1174,"path":1175,"stem":1176},"Edge Connectivity Sales Process","\u002Fhandbook\u002Fsales\u002Fedge-connect-process","handbook\u002Fsales\u002Fedge-connect-process",{"title":1178,"path":1179,"stem":1180},"Engagements","\u002Fhandbook\u002Fsales\u002Fengagements","handbook\u002Fsales\u002Fengagements",{"title":1182,"path":1183,"stem":1184},"Forecast Review","\u002Fhandbook\u002Fsales\u002Fforecast-review","handbook\u002Fsales\u002Fforecast-review",{"title":1186,"path":1187,"stem":1188},"Hubspot","\u002Fhandbook\u002Fsales\u002Fhubspot","handbook\u002Fsales\u002Fhubspot",{"title":1190,"path":1191,"stem":1192},"Legal","\u002Fhandbook\u002Fsales\u002Flegal","handbook\u002Fsales\u002Flegal",{"title":408,"path":1194,"stem":1195,"children":1196},"\u002Fhandbook\u002Fsales\u002Fmeetings","handbook\u002Fsales\u002Fmeetings\u002Findex",[1197,1198,1202,1206],{"title":408,"path":1194,"stem":1195},{"title":1199,"path":1200,"stem":1201},"Demo","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdemo","handbook\u002Fsales\u002Fmeetings\u002Fdemo",{"title":1203,"path":1204,"stem":1205},"Discovery","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdiscovery","handbook\u002Fsales\u002Fmeetings\u002Fdiscovery",{"title":1207,"path":1208,"stem":1209},"Poc","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fpoc","handbook\u002Fsales\u002Fmeetings\u002Fpoc",{"title":1211,"path":1212,"stem":1213},"Sales Team Operating Principles","\u002Fhandbook\u002Fsales\u002Foperating-principles","handbook\u002Fsales\u002Foperating-principles",{"title":1215,"path":1216,"stem":1217,"children":1218},"Commercial Organization","\u002Fhandbook\u002Fsales\u002Forg","handbook\u002Fsales\u002Forg\u002Findex",[1219,1220],{"title":1215,"path":1216,"stem":1217},{"title":1221,"path":1222,"stem":1223,"children":1224},"Account Executives","\u002Fhandbook\u002Fsales\u002Forg\u002Faccount-executives","handbook\u002Fsales\u002Forg\u002Faccount-executives\u002Findex",[1225],{"title":1221,"path":1222,"stem":1223},{"title":1227,"path":1228,"stem":1229},"Partnerships","\u002Fhandbook\u002Fsales\u002Fpartnerships","handbook\u002Fsales\u002Fpartnerships",{"title":1231,"path":1232,"stem":1233,"children":1234},"Processes","\u002Fhandbook\u002Fsales\u002Fprocesses","handbook\u002Fsales\u002Fprocesses\u002Findex",[1235],{"title":1231,"path":1232,"stem":1233},{"title":1237,"path":1238,"stem":1239},"Professional Services","\u002Fhandbook\u002Fsales\u002Fprofessional-services","handbook\u002Fsales\u002Fprofessional-services",{"title":1241,"path":1242,"stem":1243},"Regions","\u002Fhandbook\u002Fsales\u002Fregions","handbook\u002Fsales\u002Fregions",{"title":1245,"path":1246,"stem":1247},"Sales Deck","\u002Fhandbook\u002Fsales\u002Fsales-deck","handbook\u002Fsales\u002Fsales-deck",1780070544170]