[{"data":1,"prerenderedAt":1552},["ShallowReactive",2],{"handbook-\u002Fhandbook\u002Fengineering\u002Fpackaging":3,"handbook-nav":841},{"id":4,"title":5,"body":6,"description":16,"extension":834,"meta":835,"navigation":836,"path":837,"seo":838,"stem":839,"__hash__":840},"handbook\u002Fhandbook\u002Fengineering\u002Fpackaging.md","Packaging Guidelines",{"type":7,"value":8,"toc":817},"minimark",[9,13,17,35,40,45,80,84,104,108,111,123,127,140,143,152,157,160,173,176,238,242,249,252,260,286,290,294,311,315,325,336,349,356,359,363,374,378,381,390,521,538,542,545,562,579,585,593,599,610,613,619,680,692,703,707,715,726,734,737,743,747,750,754,780,784,799,803,813],[10,11,5],"h1",{"id":12},"packaging-guidelines",[14,15,16],"p",{},"This section describes the requirements we have for all GitHub repositories,\nand npm modules we maintain.",[14,18,19,20,30,31,34],{},"To help ensure all of the requirements are met, an issue should be raised in\n",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fadmin\u002Fissues\u002Fnew\u002Fchoose",[25],"nofollow",[27,28,29],"code",{},"FlowFuse\u002Fadmin","\nusing the ",[27,32,33],{},"New Repository Checklist"," and then worked through.",[36,37,39],"h2",{"id":38},"github-projects","GitHub projects",[41,42,44],"h3",{"id":43},"naming","Naming",[46,47,48,55,61,67],"ul",{},[49,50,51,52],"li",{},"FlowFuse Components should start with ",[27,53,54],{},"flowfuse-",[49,56,57,58],{},"If a Node-RED plugin\u002Fnode should start with ",[27,59,60],{},"nr-",[49,62,63,64],{},"FlowFuse Certified nodes should start with ",[27,65,66],{},"ffcn-",[49,68,69,70,72,73,76,77],{},"Installers or Orchestration projects are named without the leading ",[27,71,54],{}," e.g. ",[27,74,75],{},"installer"," or ",[27,78,79],{},"helm",[41,81,83],{"id":82},"settings","Settings",[46,85,86,97],{},[49,87,88,89,92,93,96],{},"A rule should be added under the projects ",[27,90,91],{},"settings\u002Fbranches"," to prevent pushing directly to the ",[27,94,95],{},"main"," branch",[49,98,99,100,103],{},"The ",[27,101,102],{},"Do not allow bypassing the above settings"," rule should be ticked when creating the branch rules",[41,105,107],{"id":106},"content","Content",[14,109,110],{},"All Git Repositories must contain the following files:",[46,112,113,118],{},[49,114,115],{},[27,116,117],{},"README.md",[49,119,120],{},[27,121,122],{},"LICENSE",[41,124,126],{"id":125},"linting","Linting",[14,128,129,130,133,134,139],{},"All code repositories should be using ESLint V9 or greater and adopt our standard linting rules by copying\n",[27,131,132],{},"eslint.config.mjs"," from the ",[21,135,138],{"href":136,"rel":137},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002F.github\u002Fblob\u002Fmain\u002Feslint.config.mjs",[25],"FlowFuse\u002F.github repository",".",[14,141,142],{},"If a repository has any additional requirements for linting, such as handling Vue\ncode, then additional plugins can be added.",[14,144,145,146,151],{},"We stick closely to the ",[21,147,150],{"href":148,"rel":149},"https:\u002F\u002Fstandardjs.com\u002F",[25],"StandardJS",", with one exception - 4 spaces not 2.",[153,154,156],"h4",{"id":155},"scripts-for-linting-in-packagejson","Scripts for linting in package.json",[14,158,159],{},"We add 2 common scripts for linting:",[161,162,163,168],"ol",{},[49,164,165],{},[27,166,167],{},"lint",[49,169,170],{},[27,171,172],{},"lint:fix",[14,174,175],{},"Below is a typical example:",[177,178,183],"pre",{"className":179,"code":180,"language":181,"meta":182,"style":182},"language-json shiki shiki-themes github-light github-dark","    \"scripts\": {\n        \u002F\u002F ...other scripts...\n        \"lint\": \"eslint -c eslint.config.mjs\",\n        \"lint:fix\": \"eslint -c eslint.config.mjs --fix\"\n    },\n","json","",[27,184,185,198,205,221,232],{"__ignoreMap":182},[186,187,190,194],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"sZZnC","    \"scripts\"",[186,195,197],{"class":196},"sVt8B",": {\n",[186,199,201],{"class":188,"line":200},2,[186,202,204],{"class":203},"sJ8bj","        \u002F\u002F ...other scripts...\n",[186,206,208,212,215,218],{"class":188,"line":207},3,[186,209,211],{"class":210},"sj4cs","        \"lint\"",[186,213,214],{"class":196},": ",[186,216,217],{"class":192},"\"eslint -c eslint.config.mjs\"",[186,219,220],{"class":196},",\n",[186,222,224,227,229],{"class":188,"line":223},4,[186,225,226],{"class":210},"        \"lint:fix\"",[186,228,214],{"class":196},[186,230,231],{"class":192},"\"eslint -c eslint.config.mjs --fix\"\n",[186,233,235],{"class":188,"line":234},5,[186,236,237],{"class":196},"    },\n",[41,239,241],{"id":240},"notifications","Notifications",[14,243,244,245,248],{},"Repositories should be added to the appropriate Slack channel. For core code repositories,\nthis would be in the ",[27,246,247],{},"#gh-flowfuse"," channel.",[14,250,251],{},"To create a subscription, go to that channel and type the message:",[177,253,258],{"className":254,"code":256,"language":257},[255],"language-text","\u002Fgithub subscribe FlowFuse\u002FNAME-OF-REPO comments reviews\n","text",[27,259,256],{"__ignoreMap":182},[14,261,262,263,266,267,266,270,266,273,266,276,266,279,282,283,139],{},"This will subscribe to any notifications covering: ",[27,264,265],{},"issues",", ",[27,268,269],{},"pulls",[27,271,272],{},"commits",[27,274,275],{},"releases",[27,277,278],{},"deployments",[27,280,281],{},"comments"," and ",[27,284,285],{},"reviews",[41,287,289],{"id":288},"workflows","Workflows",[153,291,293],{"id":292},"project-automation","Project Automation",[14,295,296,297,304,305,310],{},"All code repositories must have the Project Automation workflow added. This is done\nby adding ",[21,298,301],{"href":299,"rel":300},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fproject-automation.yml",[25],[27,302,303],{},".github\u002Fworkflows\u002Fproject-automation.yml",".\nThis workflow will ensure any opened issues are automatically added to the ",[21,306,309],{"href":307,"rel":308},"https:\u002F\u002Fgithub.com\u002Forgs\u002FFlowFuse\u002Fprojects\u002F3",[25],"Product board"," where it can be triaged and prioritised.",[153,312,314],{"id":313},"release-publish","Release Publish",[14,316,317,318,139],{},"For any repositories that contain modules to be published to public npm, they should also\nhave a copy of ",[21,319,322],{"href":320,"rel":321},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Frelease-publish.yml",[25],[27,323,324],{},".github\u002Fworkflows\u002Frelease-publish.yml",[14,326,327,328,331,332,335],{},"For modules being published to the Certified Nodes npm registry this ",[27,329,330],{},"release-publish.yml"," file should be edited to point to the ",[27,333,334],{},"https:\u002F\u002Fregistry.flowfuse.com"," registry and to make use of the correct token.",[14,337,338,339,344,345,348],{},"An example can be in the ",[21,340,343],{"href":341,"rel":342},"https:\u002F\u002Fgithub.com\u002FFlowfuse\u002Fnr-mcp-server-nodes\u002Fblob\u002Fmain\u002F.github\u002Fworkflose\u002Frelease-publish.yml",[25],"flowfuse\u002Fnr-mcp-server-nodes"," project. The ",[27,346,347],{},"CERTIFIED_NODES_PUBLISH_TOKEN"," should be added to the projects Secrets and can be found in 1Password.",[14,350,351,352,355],{},"This workflow will publish to npm whenever the repository is tagged with a ",[27,353,354],{},"vX.Y.Z"," format\ntag.",[14,357,358],{},"Note that each repository may have slightly different pre-publish requirements - for\nexample if there is a build step or not. You may need to customise the workflow\nto match what is needed.",[153,360,362],{"id":361},"static-application-security-testing","Static Application Security Testing",[14,364,365,366,373],{},"For any repository that contains code, the Static Application Security Testing workflow should be added.\nThis is done by adding ",[21,367,370],{"href":368,"rel":369},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fsast-scan.yml",[25],[27,371,372],{},".github\u002Fworkflows\u002Fsast.yml"," to the repository. This workflow will run on any pull request and will scan the code for any known security vulnerabilities. By default, scan results are added to The GitHub Advanced Security tab of the repository, but can be configured to also post comments on the pull request if vulnerabilities are found (see reusable workflow for details).",[41,375,377],{"id":376},"labels","Labels",[14,379,380],{},"We have a standard set of labels that should be applied to all repositories. This\nensures we have a consistent approach to planning and tracking of work.",[14,382,383,384,389],{},"The definitive list of labels is maintained ",[21,385,388],{"href":386,"rel":387},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002F.github\u002Fblob\u002Fmain\u002Flabels.json",[25],"here","\nand are synchronized across all repositories via GitHub Actions.",[46,391,392,410,431,464,476,485,500],{},[49,393,394,395,266,398,266,401,266,404,266,407],{},"Type: ",[27,396,397],{},"epic",[27,399,400],{},"story",[27,402,403],{},"task",[27,405,406],{},"bug",[27,408,409],{},"artwork",[49,411,412,413,266,416,266,419,266,422,266,425,266,428],{},"Sizing: ",[27,414,415],{},"XS - 1",[27,417,418],{},"S - 2",[27,420,421],{},"M - 3",[27,423,424],{},"L - 5",[27,426,427],{},"XL - 8",[27,429,430],{},"XXL - 13",[49,432,433,434,266,437,266,440,266,443,266,446,266,449,266,452,266,455,266,458,266,461],{},"Area: ",[27,435,436],{},"area:docs",[27,438,439],{},"area:db",[27,441,442],{},"area:migration",[27,444,445],{},"area:frontend",[27,447,448],{},"area:api",[27,450,451],{},"area:device",[27,453,454],{},"area:billing",[27,456,457],{},"area:infrastrucutre",[27,459,460],{},"area:install",[27,462,463],{},"design",[49,465,466,467,266,470,266,473],{},"Priority: ",[27,468,469],{},"priority:high",[27,471,472],{},"priority:medium",[27,474,475],{},"priority:low",[49,477,478,479,266,482],{},"Status: ",[27,480,481],{},"blocked",[27,483,484],{},"consideration",[49,486,487,488,266,491,266,494,266,497],{},"Product Scope: ",[27,489,490],{},"scope:devices",[27,492,493],{},"scope:enterprise",[27,495,496],{},"scope:node-red",[27,498,499],{},"scope:collaboration",[49,501,502,503,266,506,266,509,266,512,266,515,266,518],{},"Other: ",[27,504,505],{},"good first issue",[27,507,508],{},"upstream",[27,510,511],{},"needs-triage",[27,513,514],{},"headline",[27,516,517],{},"backport",[27,519,520],{},"research",[14,522,523,524,531,532,537],{},"New repositories must be added to the list in ",[21,525,528],{"href":526,"rel":527},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002F.github\u002Fblob\u002Fmain\u002Fflowforge-repositories.yml",[25],[27,529,530],{},"flowforge-repositories.yml",",\nand then the ",[21,533,536],{"href":534,"rel":535},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002F.github\u002Factions\u002Fworkflows\u002Fsync-labels.yml",[25],"Synchronize Labels"," action manually run.",[36,539,541],{"id":540},"npm-packages","NPM packages",[41,543,44],{"id":544},"naming-1",[14,546,547,551,552,555,556,561],{},[548,549,550],"em",{},"Note:"," we are migrating to the ",[27,553,554],{},"@flowfuse"," scope of packages. See ",[21,557,560],{"href":558,"rel":559},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fadmin\u002Fissues\u002F211",[25],"this issue","\nfor details. This section of the handbook will be updated as part of the migration.",[46,563,564],{},[49,565,566,567,570,571,574,575,578],{},"npm packages should be scoped as either ",[27,568,569],{},"@flowfuse\u002F"," (pubilc) ",[27,572,573],{},"@flowfuse-nodes\u002F"," (restricted) or ",[27,576,577],{},"@flowfuse-certified-nodes\u002F"," (certified nodes)",[14,580,581,582,584],{},"Node-RED plugins should start with ",[27,583,60],{}," e.g.",[46,586,587,590],{},[49,588,589],{},"@flowforge\u002Fnr-storage",[49,591,592],{},"@flowforge\u002Fnr-auth",[14,594,595,596,584],{},"FlowFuse plugins should start with ",[27,597,598],{},"forge-",[46,600,601,604,607],{},[49,602,603],{},"@flowforge\u002Fforge-driver-localfs",[49,605,606],{},"@flowforge\u002Fforge-driver-docker",[49,608,609],{},"@flowforge\u002Fforge-driver-k8s",[41,611,107],{"id":612},"content-1",[14,614,99,615,618],{},[27,616,617],{},"package.json"," must contain the following keys",[46,620,621,624,633,642,651,662,671],{},[49,622,623],{},"description",[49,625,626,627],{},"repository\n",[177,628,631],{"className":629,"code":630,"language":257},[255],"\"repository\": {\n   \"type\": \"git\",\n   \"url\": \"git+https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowforge.git\"\n},\n",[27,632,630],{"__ignoreMap":182},[49,634,635,636],{},"homepage\n",[177,637,640],{"className":638,"code":639,"language":257},[255],"\"homepage\": \"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowforge#readme\",\n",[27,641,639],{"__ignoreMap":182},[49,643,644,645],{},"bugs\n",[177,646,649],{"className":647,"code":648,"language":257},[255],"\"bugs\": {\n    \"url\": \"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Fissues\"\n},\n",[27,650,648],{"__ignoreMap":182},[49,652,653,654],{},"license\n",[46,655,656,659],{},[49,657,658],{},"Apache-2.0",[49,660,661],{},"SEE LICENSE IN .\u002FLICENSE",[49,663,664,665],{},"author\n",[177,666,669],{"className":667,"code":668,"language":257},[255],"\"author\": {\n    \"name\": \"FlowFuse Inc.\"\n},\n",[27,670,668],{"__ignoreMap":182},[49,672,673,674],{},"engines\n",[177,675,678],{"className":676,"code":677,"language":257},[255],"\"engines\": {\n  \"node\": \">=16.x\"\n}\n",[27,679,677],{"__ignoreMap":182},[14,681,682,683,76,685,687,688,691],{},"Packages with ",[27,684,573],{},[27,686,577],{}," scopes should also contain the ",[27,689,690],{},"registry"," section.",[46,693,694],{},[49,695,696,697],{},"publishConfig\n",[177,698,701],{"className":699,"code":700,"language":257},[255],"\"publishConfig\": {\n   \"registry\": \"https:\u002F\u002Fregistry.flowfuse.com\"\n}\n",[27,702,700],{"__ignoreMap":182},[41,704,706],{"id":705},"package-version-numbering","Package Version Numbering",[14,708,709,710,139],{},"Package numbers should follow the Semantic Versioning Scheme as laid out on ",[21,711,714],{"href":712,"rel":713},"https:\u002F\u002Fsemver.org\u002F",[25],"semver.org",[14,716,717,718,721,722,725],{},"Each component will stay in step with the core flowforge\u002Fflowforge release numbering for ",[27,719,720],{},"major.minor"," but will increment their own ",[27,723,724],{},"fix"," values as needed. e.g. On release of v0.2.0 all components will tag and release v0.2.0, but can independently release v0.2.1 as needed.",[14,727,728,729,733],{},"Major and minor releases will follow the schedule laid out in the ",[21,730,732],{"href":731},".\u002Fproject-management#cadence","Cadence"," section of the handbook.",[14,735,736],{},"A Fix release can be made at any time, depending on the best judgement of the engineer making the fix but requires a review by another team member.",[14,738,739,740,139],{},"The process for making a release is documented ",[21,741,388],{"href":742},"\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess\u002F",[41,744,746],{"id":745},"adding-npm-packages-to-stacks","Adding NPM packages to Stacks",[14,748,749],{},"As we build more FlowFuse specific nodes we will need to add these to the Stacks",[153,751,753],{"id":752},"localfs","Localfs",[14,755,756,757,762,763,765,766,769,770,773,774,779],{},"Currently bundled packages for the localfs driver need to be added to the ",[21,758,761],{"href":759,"rel":760},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fnr-launcher",[25],"nr-launcher"," ",[27,764,617],{},"  and the path to the node needs to be added to the ",[27,767,768],{},"nodesDir"," array in the ",[27,771,772],{},"lib\u002Flauncher.js"," file (around line 70). This will be updated in the next release to be controlled by the ",[21,775,778],{"href":776,"rel":777},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdriver-localfs",[25],"driver-localfs"," project",[153,781,783],{"id":782},"docker","Docker",[14,785,786,787,789,790,793,794,779],{},"Any nodes or themes should be added to the ",[27,788,617],{}," in ",[27,791,792],{},"node-red-container\u002F"," directory of the ",[21,795,798],{"href":796,"rel":797},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdocker-compose",[25],"docker-compose",[153,800,802],{"id":801},"k8s","K8s",[14,804,786,805,789,807,793,809,779],{},[27,806,617],{},[27,808,792],{},[21,810,79],{"href":811,"rel":812},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fhelm",[25],[814,815,816],"style",{},"html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":182,"searchDepth":200,"depth":200,"links":818},[819,828],{"id":38,"depth":200,"text":39,"children":820},[821,822,823,824,825,826,827],{"id":43,"depth":207,"text":44},{"id":82,"depth":207,"text":83},{"id":106,"depth":207,"text":107},{"id":125,"depth":207,"text":126},{"id":240,"depth":207,"text":241},{"id":288,"depth":207,"text":289},{"id":376,"depth":207,"text":377},{"id":540,"depth":200,"text":541,"children":829},[830,831,832,833],{"id":544,"depth":207,"text":44},{"id":612,"depth":207,"text":107},{"id":705,"depth":207,"text":706},{"id":745,"depth":207,"text":746},"md",{"navTitle":5},true,"\u002Fhandbook\u002Fengineering\u002Fpackaging",{"title":5,"description":16},"handbook\u002Fengineering\u002Fpackaging","U9HGCReeLulOUTU3aYjS5wGNdprhCwXio1S3tfR-ZA8",[842],{"title":843,"path":844,"stem":845,"children":846},"Handbook","\u002Fhandbook","handbook",[847,850,971,1001,1196,1272,1331,1457],{"title":848,"path":844,"stem":849},"FlowFuse Handbook","handbook\u002Findex",{"title":851,"path":852,"stem":853,"children":854},"Company","\u002Fhandbook\u002Fcompany","handbook\u002Fcompany\u002Findex",[855,856,860,864,868,886,890,894,898,963,967],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859},"Board meetings","\u002Fhandbook\u002Fcompany\u002Fboard","handbook\u002Fcompany\u002Fboard",{"title":861,"path":862,"stem":863},"Communication","\u002Fhandbook\u002Fcompany\u002Fcommunication","handbook\u002Fcompany\u002Fcommunication",{"title":865,"path":866,"stem":867},"How we make decisions","\u002Fhandbook\u002Fcompany\u002Fdecisions","handbook\u002Fcompany\u002Fdecisions",{"title":869,"path":870,"stem":871,"children":872},"Guides","\u002Fhandbook\u002Fcompany\u002Fguides","handbook\u002Fcompany\u002Fguides\u002Findex",[873,874,878,882],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877},"How to use Git","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgit","handbook\u002Fcompany\u002Fguides\u002Fgit",{"title":879,"path":880,"stem":881},"Google Workspace","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgworkspace","handbook\u002Fcompany\u002Fguides\u002Fgworkspace",{"title":883,"path":884,"stem":885},"Markdown Guide","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fmarkdown","handbook\u002Fcompany\u002Fguides\u002Fmarkdown",{"title":887,"path":888,"stem":889},"Organizational Structure","\u002Fhandbook\u002Fcompany\u002Forganizational-structure","handbook\u002Fcompany\u002Forganizational-structure",{"title":891,"path":892,"stem":893},"Principles","\u002Fhandbook\u002Fcompany\u002Fprinciples","handbook\u002Fcompany\u002Fprinciples",{"title":895,"path":896,"stem":897},"Remote Work","\u002Fhandbook\u002Fcompany\u002Fremote","handbook\u002Fcompany\u002Fremote",{"title":899,"path":900,"stem":901,"children":902},"Security","\u002Fhandbook\u002Fcompany\u002Fsecurity","handbook\u002Fcompany\u002Fsecurity\u002Findex",[903,904,908,912,916,920,924,928,932,936,940,944,948,952,955,959],{"title":899,"path":900,"stem":901},{"title":905,"path":906,"stem":907},"Access Control Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Faccess-control","handbook\u002Fcompany\u002Fsecurity\u002Faccess-control",{"title":909,"path":910,"stem":911},"AI Development and Customer Data Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data","handbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data",{"title":913,"path":914,"stem":915},"Asset Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fasset-management","handbook\u002Fcompany\u002Fsecurity\u002Fasset-management",{"title":917,"path":918,"stem":919},"Business Continuity & Disaster Recovery Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity","handbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity",{"title":921,"path":922,"stem":923},"Computer Security","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security","handbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security",{"title":925,"path":926,"stem":927},"Cryptography Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcryptography","handbook\u002Fcompany\u002Fsecurity\u002Fcryptography",{"title":929,"path":930,"stem":931},"Data Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fdata-management","handbook\u002Fcompany\u002Fsecurity\u002Fdata-management",{"title":933,"path":934,"stem":935},"Human Resources Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources","handbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources",{"title":937,"path":938,"stem":939},"Incident Response Plan","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fincident-response","handbook\u002Fcompany\u002Fsecurity\u002Fincident-response",{"title":941,"path":942,"stem":943},"Information Security Policy and Acceptable Use Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security",{"title":945,"path":946,"stem":947},"Information Security Roles and Responsibilities","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles",{"title":949,"path":950,"stem":951},"Operations Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Foperations-security","handbook\u002Fcompany\u002Fsecurity\u002Foperations-security",{"title":929,"path":953,"stem":954},"\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Frisk-management","handbook\u002Fcompany\u002Fsecurity\u002Frisk-management",{"title":956,"path":957,"stem":958},"Secure Development Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fsecure-development","handbook\u002Fcompany\u002Fsecurity\u002Fsecure-development",{"title":960,"path":961,"stem":962},"Third-Party Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management","handbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management",{"title":964,"path":965,"stem":966},"Strategy","\u002Fhandbook\u002Fcompany\u002Fstrategy","handbook\u002Fcompany\u002Fstrategy",{"title":968,"path":969,"stem":970},"Values","\u002Fhandbook\u002Fcompany\u002Fvalues","handbook\u002Fcompany\u002Fvalues",{"title":972,"path":973,"stem":974,"children":975},"Design","\u002Fhandbook\u002Fdesign","handbook\u002Fdesign\u002Findex",[976,977,981,985,989,993,997],{"title":972,"path":973,"stem":974},{"title":978,"path":979,"stem":980},"Art Requests","\u002Fhandbook\u002Fdesign\u002Fart-requests","handbook\u002Fdesign\u002Fart-requests",{"title":982,"path":983,"stem":984},"FlowFuse Branding Guidelines","\u002Fhandbook\u002Fdesign\u002Fbranding","handbook\u002Fdesign\u002Fbranding",{"title":986,"path":987,"stem":988},"Design Thinking","\u002Fhandbook\u002Fdesign\u002Fdesign-thinking","handbook\u002Fdesign\u002Fdesign-thinking",{"title":990,"path":991,"stem":992},"Process","\u002Fhandbook\u002Fdesign\u002Fprocess","handbook\u002Fdesign\u002Fprocess",{"title":994,"path":995,"stem":996},"Tools","\u002Fhandbook\u002Fdesign\u002Ftools","handbook\u002Fdesign\u002Ftools",{"title":998,"path":999,"stem":1000},"Videos","\u002Fhandbook\u002Fdesign\u002Fvideos","handbook\u002Fdesign\u002Fvideos",{"title":1002,"path":1003,"stem":1004,"children":1005},"Engineering","\u002Fhandbook\u002Fengineering","handbook\u002Fengineering\u002Findex",[1006,1007,1025,1029,1051,1089,1090,1149,1153,1175,1179,1193],{"title":1002,"path":1003,"stem":1004},{"title":1008,"path":1009,"stem":1010,"children":1011},"Contributing","\u002Fhandbook\u002Fengineering\u002Fcontributing","handbook\u002Fengineering\u002Fcontributing\u002Findex",[1012,1013,1017,1021],{"title":1008,"path":1009,"stem":1010},{"title":1014,"path":1015,"stem":1016},"Certified Nodes","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes","handbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes",{"title":1018,"path":1019,"stem":1020},"Setting up a local FF Tables test environment","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fff-tables","handbook\u002Fengineering\u002Fcontributing\u002Fff-tables",{"title":1022,"path":1023,"stem":1024},"FlowFuse Team NPM Registry","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry","handbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry",{"title":1026,"path":1027,"stem":1028},"Dependency Updates","\u002Fhandbook\u002Fengineering\u002Fdependency-updates","handbook\u002Fengineering\u002Fdependency-updates",{"title":1030,"path":1031,"stem":1032,"children":1033},"Front-End","\u002Fhandbook\u002Fengineering\u002Ffrontend","handbook\u002Fengineering\u002Ffrontend\u002Findex",[1034,1035,1039,1043,1047],{"title":1030,"path":1031,"stem":1032},{"title":1036,"path":1037,"stem":1038},"Data Attributes","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes","handbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes",{"title":1040,"path":1041,"stem":1042},"Front-End Layouts","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Flayouts","handbook\u002Fengineering\u002Ffrontend\u002Flayouts",{"title":1044,"path":1045,"stem":1046},"Services","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fservices","handbook\u002Fengineering\u002Ffrontend\u002Fservices",{"title":1048,"path":1049,"stem":1050},"Front-End Testing","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting","handbook\u002Fengineering\u002Ffrontend\u002Ftesting",{"title":1052,"path":1053,"stem":1054,"children":1055},"Platform Ops","\u002Fhandbook\u002Fengineering\u002Fops","handbook\u002Fengineering\u002Fops\u002Findex",[1056,1057,1061,1065,1069,1073,1077,1081,1085],{"title":1052,"path":1053,"stem":1054},{"title":1058,"path":1059,"stem":1060},"FlowFuse Dedicated","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdedicated","handbook\u002Fengineering\u002Fops\u002Fdedicated",{"title":1062,"path":1063,"stem":1064},"Dependencies within the CI\u002FCD process","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdeployment","handbook\u002Fengineering\u002Fops\u002Fdeployment",{"title":1066,"path":1067,"stem":1068},"Incident Response","\u002Fhandbook\u002Fengineering\u002Fops\u002Fincident-response","handbook\u002Fengineering\u002Fops\u002Fincident-response",{"title":1070,"path":1071,"stem":1072},"Observability","\u002Fhandbook\u002Fengineering\u002Fops\u002Fobservability","handbook\u002Fengineering\u002Fops\u002Fobservability",{"title":1074,"path":1075,"stem":1076},"Production Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction","handbook\u002Fengineering\u002Fops\u002Fproduction",{"title":1078,"path":1079,"stem":1080},"How to Update Stacks on Production","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction-stack-update","handbook\u002Fengineering\u002Fops\u002Fproduction-stack-update",{"title":1082,"path":1083,"stem":1084},"FlowFuse Expert","\u002Fhandbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant","handbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant",{"title":1086,"path":1087,"stem":1088},"Staging Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fstaging","handbook\u002Fengineering\u002Fops\u002Fstaging",{"title":5,"path":837,"stem":839},{"title":1091,"path":1092,"stem":1093,"children":1094},"Product","\u002Fhandbook\u002Fengineering\u002Fproduct","handbook\u002Fengineering\u002Fproduct\u002Findex",[1095,1096,1100,1104,1108,1112,1116,1122,1126,1129,1133,1137,1141,1145],{"title":1091,"path":1092,"stem":1093},{"title":1097,"path":1098,"stem":1099},"Blueprints","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fblueprints","handbook\u002Fengineering\u002Fproduct\u002Fblueprints",{"title":1101,"path":1102,"stem":1103},"Node-RED Dashboard 2.0 - Project","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fdashboard","handbook\u002Fengineering\u002Fproduct\u002Fdashboard",{"title":1105,"path":1106,"stem":1107},"Product Feedback","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ffeedback","handbook\u002Fengineering\u002Fproduct\u002Ffeedback",{"title":1109,"path":1110,"stem":1111},"Glossary","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fglossary","handbook\u002Fengineering\u002Fproduct\u002Fglossary",{"title":1113,"path":1114,"stem":1115},"Product Metrics","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fmetrics","handbook\u002Fengineering\u002Fproduct\u002Fmetrics",{"title":1117,"path":1118,"stem":1119,"children":1120},"Personas","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpersonas","handbook\u002Fengineering\u002Fproduct\u002Fpersonas\u002Findex",[1121],{"title":1117,"path":1118,"stem":1119},{"title":1123,"path":1124,"stem":1125},"Pricing Principles","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpricing","handbook\u002Fengineering\u002Fproduct\u002Fpricing",{"title":891,"path":1127,"stem":1128},"\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fprinciples","handbook\u002Fengineering\u002Fproduct\u002Fprinciples",{"title":1130,"path":1131,"stem":1132},"Product Strategy","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fstrategy","handbook\u002Fengineering\u002Fproduct\u002Fstrategy",{"title":1134,"path":1135,"stem":1136},"Product Growth","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ftelemetry","handbook\u002Fengineering\u002Fproduct\u002Ftelemetry",{"title":1138,"path":1139,"stem":1140},"Versioning","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fversioning","handbook\u002Fengineering\u002Fproduct\u002Fversioning",{"title":1142,"path":1143,"stem":1144},"Market Segments","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fverticals","handbook\u002Fengineering\u002Fproduct\u002Fverticals",{"title":1146,"path":1147,"stem":1148},"Vision","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fvision","handbook\u002Fengineering\u002Fproduct\u002Fvision",{"title":1150,"path":1151,"stem":1152},"Project Management","\u002Fhandbook\u002Fengineering\u002Fproject-management","handbook\u002Fengineering\u002Fproject-management",{"title":1154,"path":1155,"stem":1156,"children":1157},"Releases","\u002Fhandbook\u002Fengineering\u002Freleases","handbook\u002Fengineering\u002Freleases\u002Findex",[1158,1159,1163,1167,1171],{"title":1154,"path":1155,"stem":1156},{"title":1160,"path":1161,"stem":1162},"Dashboard 2.0 Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdashboard-2","handbook\u002Fengineering\u002Freleases\u002Fdashboard-2",{"title":1164,"path":1165,"stem":1166},"Digital Ocean Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdigital-ocean","handbook\u002Fengineering\u002Freleases\u002Fdigital-ocean",{"title":1168,"path":1169,"stem":1170},"Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess","handbook\u002Fengineering\u002Freleases\u002Fprocess",{"title":1172,"path":1173,"stem":1174},"Writing Changelog Posts","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fwriting-changelog","handbook\u002Fengineering\u002Freleases\u002Fwriting-changelog",{"title":1176,"path":1177,"stem":1178},"Security Reporting Policy","\u002Fhandbook\u002Fengineering\u002Fsecurity","handbook\u002Fengineering\u002Fsecurity",{"title":1180,"path":1181,"stem":1182,"children":1183},"Support","\u002Fhandbook\u002Fengineering\u002Fsupport","handbook\u002Fengineering\u002Fsupport\u002Findex",[1184,1185,1189],{"title":1180,"path":1181,"stem":1182},{"title":1186,"path":1187,"stem":1188},"Support Triage Duty","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftriage","handbook\u002Fengineering\u002Fsupport\u002Ftriage",{"title":1190,"path":1191,"stem":1192},"Troubleshooting","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","handbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting",{"title":994,"path":1194,"stem":1195},"\u002Fhandbook\u002Fengineering\u002Ftools","handbook\u002Fengineering\u002Ftools",{"title":1197,"path":1198,"stem":1199,"children":1200},"Marketing department","\u002Fhandbook\u002Fmarketing","handbook\u002Fmarketing\u002Findex",[1201,1202,1206,1210,1224,1228,1232,1236,1240,1244,1248,1252,1256,1260,1264,1268],{"title":1197,"path":1198,"stem":1199},{"title":1203,"path":1204,"stem":1205},"Blog","\u002Fhandbook\u002Fmarketing\u002Fblog","handbook\u002Fmarketing\u002Fblog",{"title":1207,"path":1208,"stem":1209},"Brand Personality, Tone of Voice & Character","\u002Fhandbook\u002Fmarketing\u002Fbrand-voice","handbook\u002Fmarketing\u002Fbrand-voice",{"title":1211,"path":1212,"stem":1213,"children":1214},"Community","\u002Fhandbook\u002Fmarketing\u002Fcommunity","handbook\u002Fmarketing\u002Fcommunity\u002Findex",[1215,1216,1220],{"title":1211,"path":1212,"stem":1213},{"title":1217,"path":1218,"stem":1219},"Community Guidelines","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines","handbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines",{"title":1221,"path":1222,"stem":1223},"Forums And Support","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support","handbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support",{"title":1225,"path":1226,"stem":1227},"Customer Stories","\u002Fhandbook\u002Fmarketing\u002Fcustomer-stories","handbook\u002Fmarketing\u002Fcustomer-stories",{"title":1229,"path":1230,"stem":1231},"FlowFuse for Education","\u002Fhandbook\u002Fmarketing\u002Feducation","handbook\u002Fmarketing\u002Feducation",{"title":1233,"path":1234,"stem":1235},"Marketing Email","\u002Fhandbook\u002Fmarketing\u002Femail","handbook\u002Fmarketing\u002Femail",{"title":1237,"path":1238,"stem":1239},"Events","\u002Fhandbook\u002Fmarketing\u002Fevents","handbook\u002Fmarketing\u002Fevents",{"title":1241,"path":1242,"stem":1243},"How the marketing team works at FlowFuse","\u002Fhandbook\u002Fmarketing\u002Fhow-we-work","handbook\u002Fmarketing\u002Fhow-we-work",{"title":1245,"path":1246,"stem":1247},"Lead Activation","\u002Fhandbook\u002Fmarketing\u002Flead-activation","handbook\u002Fmarketing\u002Flead-activation",{"title":1249,"path":1250,"stem":1251},"Lead Generation","\u002Fhandbook\u002Fmarketing\u002Fleads","handbook\u002Fmarketing\u002Fleads",{"title":1253,"path":1254,"stem":1255},"Messaging","\u002Fhandbook\u002Fmarketing\u002Fmessaging","handbook\u002Fmarketing\u002Fmessaging",{"title":1257,"path":1258,"stem":1259},"Marketing Programs","\u002Fhandbook\u002Fmarketing\u002Fprograms","handbook\u002Fmarketing\u002Fprograms",{"title":1261,"path":1262,"stem":1263},"Social Media Channels","\u002Fhandbook\u002Fmarketing\u002Fsocial-media","handbook\u002Fmarketing\u002Fsocial-media",{"title":1265,"path":1266,"stem":1267},"FlowFuse Webinars","\u002Fhandbook\u002Fmarketing\u002Fwebinars","handbook\u002Fmarketing\u002Fwebinars",{"title":1269,"path":1270,"stem":1271},"Marketing Website","\u002Fhandbook\u002Fmarketing\u002Fwebsite","handbook\u002Fmarketing\u002Fwebsite",{"title":1273,"path":1274,"stem":1275,"children":1276},"Operations","\u002Fhandbook\u002Foperations","handbook\u002Foperations\u002Findex",[1277,1278,1282,1286,1290,1311,1315,1319,1323,1327],{"title":1273,"path":1274,"stem":1275},{"title":1279,"path":1280,"stem":1281},"Tax & Compliance","\u002Fhandbook\u002Foperations\u002Faccounting","handbook\u002Foperations\u002Faccounting",{"title":1283,"path":1284,"stem":1285},"Accounts","\u002Fhandbook\u002Foperations\u002Faccounts","handbook\u002Foperations\u002Faccounts",{"title":1287,"path":1288,"stem":1289},"Billing","\u002Fhandbook\u002Foperations\u002Fbilling","handbook\u002Foperations\u002Fbilling",{"title":182,"path":1291,"stem":1292,"children":1293},"\u002Fhandbook\u002Foperations\u002Fceo-ops","handbook\u002Foperations\u002Fceo-ops\u002Findex",[1294,1295,1299,1303,1307],{"title":182,"path":1291,"stem":1292},{"title":1296,"path":1297,"stem":1298},"Calendar Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management","handbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management",{"title":1300,"path":1301,"stem":1302},"Inbox Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Finbox-management","handbook\u002Foperations\u002Fceo-ops\u002Finbox-management",{"title":1304,"path":1305,"stem":1306},"Task Managment","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftask-managment","handbook\u002Foperations\u002Fceo-ops\u002Ftask-managment",{"title":1308,"path":1309,"stem":1310},"Travel Booking","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking","handbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking",{"title":1312,"path":1313,"stem":1314},"Change","\u002Fhandbook\u002Foperations\u002Fchange","handbook\u002Foperations\u002Fchange",{"title":1316,"path":1317,"stem":1318},"Commission Payment","\u002Fhandbook\u002Foperations\u002Fcommission-payment","handbook\u002Foperations\u002Fcommission-payment",{"title":1320,"path":1321,"stem":1322},"Data at FlowFuse","\u002Fhandbook\u002Foperations\u002Fdata","handbook\u002Foperations\u002Fdata",{"title":1324,"path":1325,"stem":1326},"Signatures","\u002Fhandbook\u002Foperations\u002Fsignatures","handbook\u002Foperations\u002Fsignatures",{"title":1328,"path":1329,"stem":1330},"Vendors","\u002Fhandbook\u002Foperations\u002Fvendors","handbook\u002Foperations\u002Fvendors",{"title":1332,"path":1333,"stem":1334,"children":1335},"People Operations","\u002Fhandbook\u002Fpeopleops","handbook\u002Fpeopleops\u002Findex",[1336,1337,1341,1345,1349,1353,1357,1375,1437,1441,1445,1449,1453],{"title":1332,"path":1333,"stem":1334},{"title":1338,"path":1339,"stem":1340},"Coaching Plans","\u002Fhandbook\u002Fpeopleops\u002Fcoaching-plans","handbook\u002Fpeopleops\u002Fcoaching-plans",{"title":1342,"path":1343,"stem":1344},"Code of Conduct","\u002Fhandbook\u002Fpeopleops\u002Fcode-of-conduct","handbook\u002Fpeopleops\u002Fcode-of-conduct",{"title":1346,"path":1347,"stem":1348},"Compensation","\u002Fhandbook\u002Fpeopleops\u002Fcompensation","handbook\u002Fpeopleops\u002Fcompensation",{"title":1350,"path":1351,"stem":1352},"Compliance & Training (Mineral)","\u002Fhandbook\u002Fpeopleops\u002Fcompliance","handbook\u002Fpeopleops\u002Fcompliance",{"title":1354,"path":1355,"stem":1356},"Expenses","\u002Fhandbook\u002Fpeopleops\u002Fexpenses","handbook\u002Fpeopleops\u002Fexpenses",{"title":1358,"path":1359,"stem":1360,"children":1361},"Hiring","\u002Fhandbook\u002Fpeopleops\u002Fhiring","handbook\u002Fpeopleops\u002Fhiring\u002Findex",[1362,1363,1367,1371],{"title":1358,"path":1359,"stem":1360},{"title":1364,"path":1365,"stem":1366},"Working with Recruiters","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Frecruiters","handbook\u002Fpeopleops\u002Fhiring\u002Frecruiters",{"title":1368,"path":1369,"stem":1370},"Screening Call","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call","handbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call",{"title":1372,"path":1373,"stem":1374},"Star Questions","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions","handbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions",{"title":1376,"path":1377,"stem":1378,"children":1379},"Job Descriptions","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Findex",[1380,1381,1385,1389,1393,1397,1401,1405,1409,1413,1417,1421,1425,1429,1433],{"title":1376,"path":1377,"stem":1378},{"title":1382,"path":1383,"stem":1384},"Account Executive","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive",{"title":1386,"path":1387,"stem":1388},"CEO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo",{"title":1390,"path":1391,"stem":1392},"Chief of Staff","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff",{"title":1394,"path":1395,"stem":1396},"CTO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto",{"title":1398,"path":1399,"stem":1400},"Developer Relations Advocate","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate",{"title":1402,"path":1403,"stem":1404},"Engineering Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager",{"title":1406,"path":1407,"stem":1408},"Fullstack Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer",{"title":1410,"path":1411,"stem":1412},"Fullstack Engineer (AI-Focused)","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai",{"title":1414,"path":1415,"stem":1416},"Head of Marketing","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing",{"title":1418,"path":1419,"stem":1420},"Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager",{"title":1422,"path":1423,"stem":1424},"Product Marketer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer",{"title":1426,"path":1427,"stem":1428},"Solutions Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer",{"title":1430,"path":1431,"stem":1432},"Technical Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager",{"title":1434,"path":1435,"stem":1436},"VP of Sales","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales",{"title":1438,"path":1439,"stem":1440},"Holiday and Leave","\u002Fhandbook\u002Fpeopleops\u002Fleave","handbook\u002Fpeopleops\u002Fleave",{"title":1442,"path":1443,"stem":1444},"PeopleOps policies","\u002Fhandbook\u002Fpeopleops\u002Forganization","handbook\u002Fpeopleops\u002Forganization",{"title":1446,"path":1447,"stem":1448},"Performance Review","\u002Fhandbook\u002Fpeopleops\u002Fperformance-review","handbook\u002Fpeopleops\u002Fperformance-review",{"title":1450,"path":1451,"stem":1452},"Summit","\u002Fhandbook\u002Fpeopleops\u002Fsummit","handbook\u002Fpeopleops\u002Fsummit",{"title":1454,"path":1455,"stem":1456},"Travel","\u002Fhandbook\u002Fpeopleops\u002Ftravel","handbook\u002Fpeopleops\u002Ftravel",{"title":1458,"path":1459,"stem":1460,"children":1461},"Sales department","\u002Fhandbook\u002Fsales","handbook\u002Fsales\u002Findex",[1462,1463,1469,1473,1477,1481,1485,1489,1493,1497,1514,1518,1530,1534,1540,1544,1548],{"title":1458,"path":1459,"stem":1460},{"title":1464,"path":1465,"stem":1466,"children":1467},"FY 2026 SALES COMPENSATION PLAN","\u002Fhandbook\u002Fsales\u002Fcommission-plan","handbook\u002Fsales\u002Fcommission-plan\u002Findex",[1468],{"title":1464,"path":1465,"stem":1466},{"title":1470,"path":1471,"stem":1472},"Customer Success","\u002Fhandbook\u002Fsales\u002Fcustomer-success","handbook\u002Fsales\u002Fcustomer-success",{"title":1474,"path":1475,"stem":1476},"Self Hosted Dashboard v2 Multi User Plugin","\u002Fhandbook\u002Fsales\u002Fdashboard-v2","handbook\u002Fsales\u002Fdashboard-v2",{"title":1478,"path":1479,"stem":1480},"Edge Connectivity Sales Process","\u002Fhandbook\u002Fsales\u002Fedge-connect-process","handbook\u002Fsales\u002Fedge-connect-process",{"title":1482,"path":1483,"stem":1484},"Engagements","\u002Fhandbook\u002Fsales\u002Fengagements","handbook\u002Fsales\u002Fengagements",{"title":1486,"path":1487,"stem":1488},"Forecast Review","\u002Fhandbook\u002Fsales\u002Fforecast-review","handbook\u002Fsales\u002Fforecast-review",{"title":1490,"path":1491,"stem":1492},"Hubspot","\u002Fhandbook\u002Fsales\u002Fhubspot","handbook\u002Fsales\u002Fhubspot",{"title":1494,"path":1495,"stem":1496},"Legal","\u002Fhandbook\u002Fsales\u002Flegal","handbook\u002Fsales\u002Flegal",{"title":182,"path":1498,"stem":1499,"children":1500},"\u002Fhandbook\u002Fsales\u002Fmeetings","handbook\u002Fsales\u002Fmeetings\u002Findex",[1501,1502,1506,1510],{"title":182,"path":1498,"stem":1499},{"title":1503,"path":1504,"stem":1505},"Demo","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdemo","handbook\u002Fsales\u002Fmeetings\u002Fdemo",{"title":1507,"path":1508,"stem":1509},"Discovery","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdiscovery","handbook\u002Fsales\u002Fmeetings\u002Fdiscovery",{"title":1511,"path":1512,"stem":1513},"Poc","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fpoc","handbook\u002Fsales\u002Fmeetings\u002Fpoc",{"title":1515,"path":1516,"stem":1517},"Sales Team Operating Principles","\u002Fhandbook\u002Fsales\u002Foperating-principles","handbook\u002Fsales\u002Foperating-principles",{"title":1519,"path":1520,"stem":1521,"children":1522},"Commercial Organization","\u002Fhandbook\u002Fsales\u002Forg","handbook\u002Fsales\u002Forg\u002Findex",[1523,1524],{"title":1519,"path":1520,"stem":1521},{"title":1525,"path":1526,"stem":1527,"children":1528},"Account Executives","\u002Fhandbook\u002Fsales\u002Forg\u002Faccount-executives","handbook\u002Fsales\u002Forg\u002Faccount-executives\u002Findex",[1529],{"title":1525,"path":1526,"stem":1527},{"title":1531,"path":1532,"stem":1533},"Partnerships","\u002Fhandbook\u002Fsales\u002Fpartnerships","handbook\u002Fsales\u002Fpartnerships",{"title":1535,"path":1536,"stem":1537,"children":1538},"Processes","\u002Fhandbook\u002Fsales\u002Fprocesses","handbook\u002Fsales\u002Fprocesses\u002Findex",[1539],{"title":1535,"path":1536,"stem":1537},{"title":1541,"path":1542,"stem":1543},"Professional Services","\u002Fhandbook\u002Fsales\u002Fprofessional-services","handbook\u002Fsales\u002Fprofessional-services",{"title":1545,"path":1546,"stem":1547},"Regions","\u002Fhandbook\u002Fsales\u002Fregions","handbook\u002Fsales\u002Fregions",{"title":1549,"path":1550,"stem":1551},"Sales Deck","\u002Fhandbook\u002Fsales\u002Fsales-deck","handbook\u002Fsales\u002Fsales-deck",1780070544651]