[{"data":1,"prerenderedAt":1394},["ShallowReactive",2],{"handbook-\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting\u002F":3,"handbook-nav":635},{"id":4,"title":5,"body":6,"description":16,"extension":628,"meta":629,"navigation":630,"path":631,"seo":632,"stem":633,"__hash__":634},"handbook\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting.md","Front-End Testing",{"type":7,"value":8,"toc":613},"minimark",[9,13,17,43,47,50,53,58,79,83,86,89,114,117,141,144,151,339,349,352,384,391,394,399,413,416,420,434,437,441,444,448,454,458,461,506,514,531,538,542,555,572,575,609],[10,11,5],"h1",{"id":12},"front-end-testing",[14,15,16],"p",{},"For our front-end we test on two fronts:",[18,19,20,29],"ul",{},[21,22,23,28],"li",{},[24,25,27],"a",{"href":26},"#unit-tests","Unit Tests"," - Focusses on individual functional testing. Each function should be tested in complete isolation",[21,30,31,35,36,42],{},[24,32,34],{"href":33},"#e2e-integration-tests","E2E Integration Tests"," - Driven by automated testing framework, ",[24,37,41],{"href":38,"rel":39},"https:\u002F\u002Fwww.cypress.io\u002F",[40],"nofollow","Cypress",", this tests our front-end in its entirety, including button clicks, navigations and API calls.",[44,45,27],"h2",{"id":46},"unit-tests",[14,48,49],{},"Not yet written",[44,51,34],{"id":52},"e2e-integration-tests",[54,55,57],"h3",{"id":56},"foreword","Foreword",[14,59,60,69],{},[61,62,63,64,68],"em",{},"When running e2e tests locally, the NPM scripts are in the ",[65,66,67],"code",{},"flowforge"," package.",[61,70,71,72,75,76,78],{},"Be sure to ",[65,73,74],{},"cd"," to ",[65,77,67],{}," before attempting to run them",[54,80,82],{"id":81},"running-locally","Running Locally",[14,84,85],{},"To run the E2E tests locally, you first need to start a web server that the tests will run against.\nFor testing purposes, a single server is configured with multiple users, teams, and projects.",[14,87,88],{},"To start the server, open a terminal and run:",[90,91,96],"pre",{"className":92,"code":93,"language":94,"meta":95,"style":95},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm run cy:web-server\n","bash","",[65,97,98],{"__ignoreMap":95},[99,100,103,107,111],"span",{"class":101,"line":102},"line",1,[99,104,106],{"class":105},"sBMFI","npm",[99,108,110],{"class":109},"sfazB"," run",[99,112,113],{"class":109}," cy:web-server\n",[14,115,116],{},"This spins up two web servers, each configured differently",[90,118,122],{"className":119,"code":120,"language":121,"meta":95,"style":95},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","OS Environment running at http:\u002F\u002Flocalhost:3001\nEE Environment running at http:\u002F\u002Flocalhost:3002\nERROR: Failed to verify email connection: Error: connect ECONNREFUSED 127.0.0.1:1025\n","shell",[65,123,124,129,135],{"__ignoreMap":95},[99,125,126],{"class":101,"line":102},[99,127,128],{},"OS Environment running at http:\u002F\u002Flocalhost:3001\n",[99,130,132],{"class":101,"line":131},2,[99,133,134],{},"EE Environment running at http:\u002F\u002Flocalhost:3002\n",[99,136,138],{"class":101,"line":137},3,[99,139,140],{},"ERROR: Failed to verify email connection: Error: connect ECONNREFUSED 127.0.0.1:1025\n",[14,142,143],{},"The email connection failure warning is expected. E2E tests that rely on email functionality will be skipped.",[14,145,146,147,150],{},"If you need to run tests involving email functionality, you'll have to enable local SMTP servers.\nTo do that, add the following section to your ",[65,148,149],{},"etc\u002Fflowforge.local.yml",":",[90,152,156],{"className":153,"code":154,"language":155,"meta":95,"style":95},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","...\ne2e:\n  email:\n    os:\n      enabled: true\n      debug: true\n      smtp:\n        host: localhost\n        port: 1025\n        web_port: 8025\n        secure: false\n    ee:\n      enabled: true\n      debug: true\n      smtp:\n        host: localhost\n        port: 1026\n        web_port: 8026\n        secure: false\n...\n","yml",[65,157,158,163,173,180,188,200,210,218,229,241,252,263,271,280,289,296,305,315,325,334],{"__ignoreMap":95},[99,159,160],{"class":101,"line":102},[99,161,162],{"class":105},"...\n",[99,164,165,169],{"class":101,"line":131},[99,166,168],{"class":167},"swJcz","e2e",[99,170,172],{"class":171},"sMK4o",":\n",[99,174,175,178],{"class":101,"line":137},[99,176,177],{"class":167},"  email",[99,179,172],{"class":171},[99,181,183,186],{"class":101,"line":182},4,[99,184,185],{"class":167},"    os",[99,187,172],{"class":171},[99,189,191,194,196],{"class":101,"line":190},5,[99,192,193],{"class":167},"      enabled",[99,195,150],{"class":171},[99,197,199],{"class":198},"sfNiH"," true\n",[99,201,203,206,208],{"class":101,"line":202},6,[99,204,205],{"class":167},"      debug",[99,207,150],{"class":171},[99,209,199],{"class":198},[99,211,213,216],{"class":101,"line":212},7,[99,214,215],{"class":167},"      smtp",[99,217,172],{"class":171},[99,219,221,224,226],{"class":101,"line":220},8,[99,222,223],{"class":167},"        host",[99,225,150],{"class":171},[99,227,228],{"class":109}," localhost\n",[99,230,232,235,237],{"class":101,"line":231},9,[99,233,234],{"class":167},"        port",[99,236,150],{"class":171},[99,238,240],{"class":239},"sbssI"," 1025\n",[99,242,244,247,249],{"class":101,"line":243},10,[99,245,246],{"class":167},"        web_port",[99,248,150],{"class":171},[99,250,251],{"class":239}," 8025\n",[99,253,255,258,260],{"class":101,"line":254},11,[99,256,257],{"class":167},"        secure",[99,259,150],{"class":171},[99,261,262],{"class":198}," false\n",[99,264,266,269],{"class":101,"line":265},12,[99,267,268],{"class":167},"    ee",[99,270,172],{"class":171},[99,272,274,276,278],{"class":101,"line":273},13,[99,275,193],{"class":167},[99,277,150],{"class":171},[99,279,199],{"class":198},[99,281,283,285,287],{"class":101,"line":282},14,[99,284,205],{"class":167},[99,286,150],{"class":171},[99,288,199],{"class":198},[99,290,292,294],{"class":101,"line":291},15,[99,293,215],{"class":167},[99,295,172],{"class":171},[99,297,299,301,303],{"class":101,"line":298},16,[99,300,223],{"class":167},[99,302,150],{"class":171},[99,304,228],{"class":109},[99,306,308,310,312],{"class":101,"line":307},17,[99,309,234],{"class":167},[99,311,150],{"class":171},[99,313,314],{"class":239}," 1026\n",[99,316,318,320,322],{"class":101,"line":317},18,[99,319,246],{"class":167},[99,321,150],{"class":171},[99,323,324],{"class":239}," 8026\n",[99,326,328,330,332],{"class":101,"line":327},19,[99,329,257],{"class":167},[99,331,150],{"class":171},[99,333,262],{"class":198},[99,335,337],{"class":101,"line":336},20,[99,338,162],{"class":105},[340,341,342],"blockquote",{},[14,343,344,348],{},[345,346,347],"strong",{},"Note",": Docker must be installed and running on your system, as the web servers are launched using Docker containers.",[14,350,351],{},"On the next start of the web server, you should see log output similar to:",[90,353,355],{"className":119,"code":354,"language":121,"meta":95,"style":95},"OS Environment running at http:\u002F\u002Flocalhost:3001\nEE Environment running at http:\u002F\u002Flocalhost:3002\nMailpit: Starting e-mail server...\nMailpit: Web UI available at http:\u002F\u002Flocalhost:8025\u002F with SMTP listening on port 1025\nMailpit: Starting e-mail server...\nMailpit: Web UI available at http:\u002F\u002Flocalhost:8026\u002F with SMTP listening on port 1026\n",[65,356,357,361,365,370,375,379],{"__ignoreMap":95},[99,358,359],{"class":101,"line":102},[99,360,128],{},[99,362,363],{"class":101,"line":131},[99,364,134],{},[99,366,367],{"class":101,"line":137},[99,368,369],{},"Mailpit: Starting e-mail server...\n",[99,371,372],{"class":101,"line":182},[99,373,374],{},"Mailpit: Web UI available at http:\u002F\u002Flocalhost:8025\u002F with SMTP listening on port 1025\n",[99,376,377],{"class":101,"line":190},[99,378,369],{},[99,380,381],{"class":101,"line":202},[99,382,383],{},"Mailpit: Web UI available at http:\u002F\u002Flocalhost:8026\u002F with SMTP listening on port 1026\n",[340,385,386],{},[14,387,388,390],{},[345,389,347],{},": In CI environments, E2E tests that rely on email functionality are run by default with SMTP servers already configured.",[14,392,393],{},"Once this is up and running, you then have two options:",[395,396,398],"h4",{"id":397},"run-tests-via-terminal","Run Tests via Terminal",[90,400,402],{"className":92,"code":401,"language":94,"meta":95,"style":95},"npm run cy:run\n",[65,403,404],{"__ignoreMap":95},[99,405,406,408,410],{"class":101,"line":102},[99,407,106],{"class":105},[99,409,110],{"class":109},[99,411,412],{"class":109}," cy:run\n",[14,414,415],{},"This will execute all of the front-end E2E tests in the terminal and display the results.\nTypically, this is the command to run if you simply want to run all of the tests\nWhen developing\u002Fdebugging tests, opening the Cypress Application will likely be more useful.",[395,417,419],{"id":418},"run-tests-via-cypress-application","Run Tests via Cypress Application",[90,421,423],{"className":92,"code":422,"language":94,"meta":95,"style":95},"npm run cy:open\n",[65,424,425],{"__ignoreMap":95},[99,426,427,429,431],{"class":101,"line":102},[99,428,106],{"class":105},[99,430,110],{"class":109},[99,432,433],{"class":109}," cy:open\n",[14,435,436],{},"Opens the Cypress application. From here, you can run individual test files, and see the framework clicking through the UI as the tests are run. If you're developing or debugging your own tests, we recommend this.",[54,438,440],{"id":439},"hints-tips","Hints & Tips",[14,442,443],{},"If you're looking to write your own Cypress tests, then here are some tips that can help you get started:",[395,445,447],{"id":446},"beforeeach","beforeEach",[14,449,450,451,453],{},"If you explore some of the existing tests, you'll see that ",[65,452,447],{}," is a very useful way of ensuring consistent behaviour across a group of tests, e.g. starting from the same point, or making sure a user is logged in.",[395,455,457],{"id":456},"helper-functions","Helper Functions",[14,459,460],{},"To make Cypress testing easier, we have created a collection of helper functions that can be called within any loop of the testing framework.",[90,462,466],{"className":463,"code":464,"language":465,"meta":95,"style":95},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cy.login(\u003Cusername>, \u003Cpassword>)\n","js",[65,467,468],{"__ignoreMap":95},[99,469,470,474,477,481,484,487,490,493,496,498,501,503],{"class":101,"line":102},[99,471,473],{"class":472},"sTEyZ","cy",[99,475,476],{"class":171},".",[99,478,480],{"class":479},"s2Zo4","login",[99,482,483],{"class":472},"(",[99,485,486],{"class":171},"\u003C",[99,488,489],{"class":167},"username",[99,491,492],{"class":171},">",[99,494,495],{"class":472},", ",[99,497,486],{"class":171},[99,499,500],{"class":167},"password",[99,502,492],{"class":171},[99,504,505],{"class":472},")\n",[14,507,508,509,476],{},"This will log you into FlowFuse as the given user. The test users are defined in the ",[24,510,513],{"href":511,"rel":512},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fflowfuse\u002Fblob\u002Fmain\u002Ftest\u002Fe2e\u002Ffrontend\u002Fenvironments\u002Fstandard.js",[40],"test environment",[90,515,517],{"className":463,"code":516,"language":465,"meta":95,"style":95},"cy.home()\n",[65,518,519],{"__ignoreMap":95},[99,520,521,523,525,528],{"class":101,"line":102},[99,522,473],{"class":472},[99,524,476],{"class":171},[99,526,527],{"class":479},"home",[99,529,530],{"class":472},"()\n",[14,532,533,534,537],{},"This will navigate the test to the homepage of the application, but more importantly it contains several ",[65,535,536],{},"cy.wait()"," calls to make sure the relevant API calls have completed before continuing.\nIt is recommended that you call this for every test that requires a login.",[395,539,541],{"id":540},"selecting-elements-actions","Selecting Elements & Actions",[14,543,544,545,550,551,554],{},"It is recommended in the ",[24,546,549],{"href":547,"rel":548},"https:\u002F\u002Fdocs.cypress.io\u002Fguides\u002Freferences\u002Fbest-practices#Selecting-Elements",[40],"Cypress Best Practices"," to utilise ",[65,552,553],{},"data-"," attributes on HTML elements in order to ensure safe selection of objects that won't evolve\u002Fchange over time.",[14,556,557,558,563,564,568,569,571],{},"Similarly, this is a best practices for ",[24,559,562],{"href":560,"rel":561},"https:\u002F\u002Fposthog.com\u002F",[40],"PostHog"," which we also use. As such, we have defined ",[24,565,567],{"href":566},"\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes","our own best practice"," set of ",[65,570,553],{}," attributes to use.",[14,573,574],{},"When writing your own tests, where possible, you should do element selection via these custom data tags, e.g.,",[90,576,578],{"className":463,"code":577,"language":465,"meta":95,"style":95},"cy.get('a[data-nav=\"team-members\"]').click()\n",[65,579,580],{"__ignoreMap":95},[99,581,582,584,586,589,591,594,597,599,602,604,607],{"class":101,"line":102},[99,583,473],{"class":472},[99,585,476],{"class":171},[99,587,588],{"class":479},"get",[99,590,483],{"class":472},[99,592,593],{"class":171},"'",[99,595,596],{"class":109},"a[data-nav=\"team-members\"]",[99,598,593],{"class":171},[99,600,601],{"class":472},")",[99,603,476],{"class":171},[99,605,606],{"class":479},"click",[99,608,530],{"class":472},[610,611,612],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":95,"searchDepth":182,"depth":182,"links":614},[615,616],{"id":46,"depth":131,"text":27},{"id":52,"depth":131,"text":34,"children":617},[618,619,623],{"id":56,"depth":137,"text":57},{"id":81,"depth":137,"text":82,"children":620},[621,622],{"id":397,"depth":182,"text":398},{"id":418,"depth":182,"text":419},{"id":439,"depth":137,"text":440,"children":624},[625,626,627],{"id":446,"depth":182,"text":447},{"id":456,"depth":182,"text":457},{"id":540,"depth":182,"text":541},"md",{},null,"\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting",{"title":5,"description":16},"handbook\u002Fengineering\u002Ffrontend\u002Ftesting","MLw-Fg3NSYzwf-vTq7cp8NWDxVkpLy3VoP8ehnUXkWQ",[636],{"title":637,"path":638,"stem":639,"children":640},"Handbook","\u002Fhandbook","handbook",[641,643,768,800,1009,1091,1153,1287],{"title":637,"path":638,"stem":642},"handbook\u002Findex",{"title":644,"group":644,"icon":645,"order":102,"path":646,"stem":647,"children":648},"Company","i-lucide-building-2","\u002Fhandbook\u002Fcompany","handbook\u002Fcompany\u002Findex",[649,650,654,658,662,681,685,689,693,760,764],{"title":644,"path":646,"stem":647},{"title":651,"path":652,"stem":653},"Board & Investors","\u002Fhandbook\u002Fcompany\u002Fboard","handbook\u002Fcompany\u002Fboard",{"title":655,"path":656,"stem":657},"Communications","\u002Fhandbook\u002Fcompany\u002Fcommunication","handbook\u002Fcompany\u002Fcommunication",{"title":659,"path":660,"stem":661},"Decision making and project management","\u002Fhandbook\u002Fcompany\u002Fdecisions","handbook\u002Fcompany\u002Fdecisions",{"title":663,"icon":664,"path":665,"stem":666,"children":667},"Guides","i-lucide-book-open","\u002Fhandbook\u002Fcompany\u002Fguides","handbook\u002Fcompany\u002Fguides\u002Findex",[668,669,673,677],{"title":663,"path":665,"stem":666},{"title":670,"path":671,"stem":672},"Editing the Handbook","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgit","handbook\u002Fcompany\u002Fguides\u002Fgit",{"title":674,"path":675,"stem":676},"Google Workspace","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgworkspace","handbook\u002Fcompany\u002Fguides\u002Fgworkspace",{"title":678,"path":679,"stem":680},"Markdown Guide","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fmarkdown","handbook\u002Fcompany\u002Fguides\u002Fmarkdown",{"title":682,"path":683,"stem":684},"Organizational Structure","\u002Fhandbook\u002Fcompany\u002Forganizational-structure","handbook\u002Fcompany\u002Forganizational-structure",{"title":686,"path":687,"stem":688},"Principles","\u002Fhandbook\u002Fcompany\u002Fprinciples","handbook\u002Fcompany\u002Fprinciples",{"title":690,"path":691,"stem":692},"Remote Work","\u002Fhandbook\u002Fcompany\u002Fremote","handbook\u002Fcompany\u002Fremote",{"title":694,"icon":695,"path":696,"stem":697,"children":698},"Security","i-lucide-shield","\u002Fhandbook\u002Fcompany\u002Fsecurity","handbook\u002Fcompany\u002Fsecurity\u002Findex",[699,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756],{"title":694,"path":696,"stem":697},{"title":701,"path":702,"stem":703},"Access Control Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Faccess-control","handbook\u002Fcompany\u002Fsecurity\u002Faccess-control",{"title":705,"path":706,"stem":707},"AI Development and Customer Data Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data","handbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data",{"title":709,"path":710,"stem":711},"Asset Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fasset-management","handbook\u002Fcompany\u002Fsecurity\u002Fasset-management",{"title":713,"path":714,"stem":715},"Business Continuity & Disaster Recovery Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity","handbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity",{"title":717,"path":718,"stem":719},"Hardware Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security","handbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security",{"title":721,"path":722,"stem":723},"Cryptography Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcryptography","handbook\u002Fcompany\u002Fsecurity\u002Fcryptography",{"title":725,"path":726,"stem":727},"Data Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fdata-management","handbook\u002Fcompany\u002Fsecurity\u002Fdata-management",{"title":729,"path":730,"stem":731},"Human Resources Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources","handbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources",{"title":733,"path":734,"stem":735},"Incident Response Plan","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fincident-response","handbook\u002Fcompany\u002Fsecurity\u002Fincident-response",{"title":737,"path":738,"stem":739},"Information Security Policy and Acceptable Use Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security",{"title":741,"path":742,"stem":743},"Information Security Roles and Responsibilities","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles",{"title":745,"path":746,"stem":747},"Operations Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Foperations-security","handbook\u002Fcompany\u002Fsecurity\u002Foperations-security",{"title":749,"path":750,"stem":751},"Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Frisk-management","handbook\u002Fcompany\u002Fsecurity\u002Frisk-management",{"title":753,"path":754,"stem":755},"Secure Development Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fsecure-development","handbook\u002Fcompany\u002Fsecurity\u002Fsecure-development",{"title":757,"path":758,"stem":759},"Third-Party Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management","handbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management",{"title":761,"path":762,"stem":763},"Strategy","\u002Fhandbook\u002Fcompany\u002Fstrategy","handbook\u002Fcompany\u002Fstrategy",{"title":765,"path":766,"stem":767},"Values","\u002Fhandbook\u002Fcompany\u002Fvalues","handbook\u002Fcompany\u002Fvalues",{"title":769,"group":770,"icon":771,"order":182,"path":772,"stem":773,"children":774},"Design","Engineering & Design Practices","i-lucide-pen-tool","\u002Fhandbook\u002Fdesign","handbook\u002Fdesign\u002Findex",[775,776,780,784,788,792,796],{"title":769,"path":772,"stem":773},{"title":777,"path":778,"stem":779},"Art Requests","\u002Fhandbook\u002Fdesign\u002Fart-requests","handbook\u002Fdesign\u002Fart-requests",{"title":781,"path":782,"stem":783},"Branding","\u002Fhandbook\u002Fdesign\u002Fbranding","handbook\u002Fdesign\u002Fbranding",{"title":785,"path":786,"stem":787},"Design Thinking","\u002Fhandbook\u002Fdesign\u002Fdesign-thinking","handbook\u002Fdesign\u002Fdesign-thinking",{"title":789,"path":790,"stem":791},"Process","\u002Fhandbook\u002Fdesign\u002Fprocess","handbook\u002Fdesign\u002Fprocess",{"title":793,"path":794,"stem":795},"Tools","\u002Fhandbook\u002Fdesign\u002Ftools","handbook\u002Fdesign\u002Ftools",{"title":797,"path":798,"stem":799},"Video","\u002Fhandbook\u002Fdesign\u002Fvideos","handbook\u002Fdesign\u002Fvideos",{"title":801,"group":770,"icon":802,"order":137,"path":803,"stem":804,"children":805},"Engineering","i-lucide-code-2","\u002Fhandbook\u002Fengineering","handbook\u002Fengineering\u002Findex",[806,807,826,830,834,853,892,896,960,964,987,991,1006],{"title":801,"path":803,"stem":804},{"title":808,"icon":809,"path":810,"stem":811,"children":812},"Contributing","i-lucide-git-pull-request","\u002Fhandbook\u002Fengineering\u002Fcontributing","handbook\u002Fengineering\u002Fcontributing\u002Findex",[813,814,818,822],{"title":808,"path":810,"stem":811},{"title":815,"path":816,"stem":817},"Certified Nodes","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes","handbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes",{"title":819,"path":820,"stem":821},"FF Tables","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fff-tables","handbook\u002Fengineering\u002Fcontributing\u002Fff-tables",{"title":823,"path":824,"stem":825},"Team NPM Registry","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry","handbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry",{"title":827,"path":828,"stem":829},"Dependency Updates","\u002Fhandbook\u002Fengineering\u002Fdependency-updates","handbook\u002Fengineering\u002Fdependency-updates",{"title":831,"path":832,"stem":833},"Feature Flags in PostHog","\u002Fhandbook\u002Fengineering\u002Ffeature-flags","handbook\u002Fengineering\u002Ffeature-flags",{"title":835,"icon":836,"path":837,"stem":838,"children":839},"Front End","i-lucide-layout-dashboard","\u002Fhandbook\u002Fengineering\u002Ffrontend","handbook\u002Fengineering\u002Ffrontend\u002Findex",[840,841,844,848,852],{"title":835,"path":837,"stem":838},{"title":842,"path":566,"stem":843},"Data Attributes","handbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes",{"title":845,"path":846,"stem":847},"Front-End Layouts","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Flayouts","handbook\u002Fengineering\u002Ffrontend\u002Flayouts",{"title":849,"path":850,"stem":851},"Front-End Services","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fservices","handbook\u002Fengineering\u002Ffrontend\u002Fservices",{"title":5,"path":631,"stem":633},{"title":854,"icon":855,"path":856,"stem":857,"children":858},"Platform Ops","i-lucide-server","\u002Fhandbook\u002Fengineering\u002Fops","handbook\u002Fengineering\u002Fops\u002Findex",[859,860,864,868,872,876,880,884,888],{"title":854,"path":856,"stem":857},{"title":861,"path":862,"stem":863},"FlowFuse Dedicated","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdedicated","handbook\u002Fengineering\u002Fops\u002Fdedicated",{"title":865,"path":866,"stem":867},"Deployment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdeployment","handbook\u002Fengineering\u002Fops\u002Fdeployment",{"title":869,"path":870,"stem":871},"Incident Response","\u002Fhandbook\u002Fengineering\u002Fops\u002Fincident-response","handbook\u002Fengineering\u002Fops\u002Fincident-response",{"title":873,"path":874,"stem":875},"Observability","\u002Fhandbook\u002Fengineering\u002Fops\u002Fobservability","handbook\u002Fengineering\u002Fops\u002Fobservability",{"title":877,"path":878,"stem":879},"Production Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction","handbook\u002Fengineering\u002Fops\u002Fproduction",{"title":881,"path":882,"stem":883},"Update Stacks on Production","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction-stack-update","handbook\u002Fengineering\u002Fops\u002Fproduction-stack-update",{"title":885,"path":886,"stem":887},"Self Hosted Assistant","\u002Fhandbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant","handbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant",{"title":889,"path":890,"stem":891},"Staging Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fstaging","handbook\u002Fengineering\u002Fops\u002Fstaging",{"title":893,"path":894,"stem":895},"Packaging Guidelines","\u002Fhandbook\u002Fengineering\u002Fpackaging","handbook\u002Fengineering\u002Fpackaging",{"title":897,"icon":898,"path":899,"stem":900,"children":901},"Product","i-lucide-package","\u002Fhandbook\u002Fengineering\u002Fproduct","handbook\u002Fengineering\u002Fproduct\u002Findex",[902,903,907,911,915,919,923,930,934,937,941,944,948,952,956],{"title":897,"path":899,"stem":900},{"title":904,"path":905,"stem":906},"Blueprints","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fblueprints","handbook\u002Fengineering\u002Fproduct\u002Fblueprints",{"title":908,"path":909,"stem":910},"Node-RED Dashboard","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fdashboard","handbook\u002Fengineering\u002Fproduct\u002Fdashboard",{"title":912,"path":913,"stem":914},"Feedback","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ffeedback","handbook\u002Fengineering\u002Fproduct\u002Ffeedback",{"title":916,"path":917,"stem":918},"Glossary","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fglossary","handbook\u002Fengineering\u002Fproduct\u002Fglossary",{"title":920,"path":921,"stem":922},"Metrics","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fmetrics","handbook\u002Fengineering\u002Fproduct\u002Fmetrics",{"title":924,"path":925,"stem":926,"children":927,"icon":929},"Personas","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpersonas","handbook\u002Fengineering\u002Fproduct\u002Fpersonas\u002Findex",[928],{"title":924,"path":925,"stem":926},"i-lucide-user-circle",{"title":931,"path":932,"stem":933},"Pricing Principles","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpricing","handbook\u002Fengineering\u002Fproduct\u002Fpricing",{"title":686,"path":935,"stem":936},"\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fprinciples","handbook\u002Fengineering\u002Fproduct\u002Fprinciples",{"title":938,"path":939,"stem":940},"Product Swimlanes","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fproduct-swimlanes","handbook\u002Fengineering\u002Fproduct\u002Fproduct-swimlanes",{"title":761,"path":942,"stem":943},"\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fstrategy","handbook\u002Fengineering\u002Fproduct\u002Fstrategy",{"title":945,"path":946,"stem":947},"Product Growth","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ftelemetry","handbook\u002Fengineering\u002Fproduct\u002Ftelemetry",{"title":949,"path":950,"stem":951},"Versioning","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fversioning","handbook\u002Fengineering\u002Fproduct\u002Fversioning",{"title":953,"path":954,"stem":955},"Market Segments","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fverticals","handbook\u002Fengineering\u002Fproduct\u002Fverticals",{"title":957,"path":958,"stem":959},"Vision","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fvision","handbook\u002Fengineering\u002Fproduct\u002Fvision",{"title":961,"path":962,"stem":963},"Project Management","\u002Fhandbook\u002Fengineering\u002Fproject-management","handbook\u002Fengineering\u002Fproject-management",{"title":965,"icon":966,"path":967,"stem":968,"children":969},"Releases","i-lucide-rocket","\u002Fhandbook\u002Fengineering\u002Freleases","handbook\u002Fengineering\u002Freleases\u002Findex",[970,971,975,979,983],{"title":965,"path":967,"stem":968},{"title":972,"path":973,"stem":974},"Dashboard 2.0 Releases","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdashboard-2","handbook\u002Fengineering\u002Freleases\u002Fdashboard-2",{"title":976,"path":977,"stem":978},"Release Process - Digital Ocean","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdigital-ocean","handbook\u002Fengineering\u002Freleases\u002Fdigital-ocean",{"title":980,"path":981,"stem":982},"Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess","handbook\u002Fengineering\u002Freleases\u002Fprocess",{"title":984,"path":985,"stem":986},"Changelog Posts","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fwriting-changelog","handbook\u002Fengineering\u002Freleases\u002Fwriting-changelog",{"title":988,"path":989,"stem":990},"Security Policy","\u002Fhandbook\u002Fengineering\u002Fsecurity","handbook\u002Fengineering\u002Fsecurity",{"title":992,"path":993,"stem":994,"children":995,"icon":1005},"Support","\u002Fhandbook\u002Fengineering\u002Fsupport","handbook\u002Fengineering\u002Fsupport\u002Findex",[996,997,1001],{"title":992,"path":993,"stem":994},{"title":998,"path":999,"stem":1000},"Triage Duty","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftriage","handbook\u002Fengineering\u002Fsupport\u002Ftriage",{"title":1002,"path":1003,"stem":1004},"Troubleshooting","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","handbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","i-lucide-life-buoy",{"title":793,"path":1007,"stem":1008},"\u002Fhandbook\u002Fengineering\u002Ftools","handbook\u002Fengineering\u002Ftools",{"title":1010,"group":1011,"icon":1012,"order":202,"path":1013,"stem":1014,"children":1015},"Marketing","Marketing department","i-lucide-megaphone","\u002Fhandbook\u002Fmarketing","handbook\u002Fmarketing\u002Findex",[1016,1017,1021,1036,1055,1059,1063,1067,1071,1075,1079,1083,1087],{"title":1010,"path":1013,"stem":1014},{"title":1018,"path":1019,"stem":1020},"Brand Voice","\u002Fhandbook\u002Fmarketing\u002Fbrand-voice","handbook\u002Fmarketing\u002Fbrand-voice",{"title":1022,"icon":1023,"path":1024,"stem":1025,"children":1026},"Community","i-lucide-users-2","\u002Fhandbook\u002Fmarketing\u002Fcommunity","handbook\u002Fmarketing\u002Fcommunity\u002Findex",[1027,1028,1032],{"title":1022,"path":1024,"stem":1025},{"title":1029,"path":1030,"stem":1031},"Community Guidelines","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines","handbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines",{"title":1033,"path":1034,"stem":1035},"Forums And Support","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support","handbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support",{"title":1037,"icon":1038,"path":1039,"stem":1040,"children":1041,"order":102},"Content Strategy","i-lucide-file-text","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy","handbook\u002Fmarketing\u002Fcontent-strategy\u002Findex",[1042,1043,1047,1051],{"title":1037,"path":1039,"stem":1040,"order":102},{"title":1044,"path":1045,"stem":1046},"Blog","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy\u002Fblog","handbook\u002Fmarketing\u002Fcontent-strategy\u002Fblog",{"title":1048,"path":1049,"stem":1050},"Customer Stories","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy\u002Fcustomer-stories","handbook\u002Fmarketing\u002Fcontent-strategy\u002Fcustomer-stories",{"title":1052,"path":1053,"stem":1054},"Webinars","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy\u002Fwebinars","handbook\u002Fmarketing\u002Fcontent-strategy\u002Fwebinars",{"title":1056,"path":1057,"stem":1058},"FlowFuse for Education","\u002Fhandbook\u002Fmarketing\u002Feducation","handbook\u002Fmarketing\u002Feducation",{"title":1060,"path":1061,"stem":1062},"Events","\u002Fhandbook\u002Fmarketing\u002Fevents","handbook\u002Fmarketing\u002Fevents",{"title":1064,"path":1065,"stem":1066},"How we work","\u002Fhandbook\u002Fmarketing\u002Fhow-we-work","handbook\u002Fmarketing\u002Fhow-we-work",{"title":1068,"path":1069,"stem":1070},"Lead Activation","\u002Fhandbook\u002Fmarketing\u002Flead-activation","handbook\u002Fmarketing\u002Flead-activation",{"title":1072,"path":1073,"stem":1074},"Lead Generation","\u002Fhandbook\u002Fmarketing\u002Fleads","handbook\u002Fmarketing\u002Fleads",{"title":1076,"path":1077,"stem":1078},"Company Messaging","\u002Fhandbook\u002Fmarketing\u002Fmessaging","handbook\u002Fmarketing\u002Fmessaging",{"title":1080,"path":1081,"stem":1082},"Marketing Programs","\u002Fhandbook\u002Fmarketing\u002Fprograms","handbook\u002Fmarketing\u002Fprograms",{"title":1084,"path":1085,"stem":1086},"Social Media","\u002Fhandbook\u002Fmarketing\u002Fsocial-media","handbook\u002Fmarketing\u002Fsocial-media",{"title":1088,"path":1089,"stem":1090},"Website","\u002Fhandbook\u002Fmarketing\u002Fwebsite","handbook\u002Fmarketing\u002Fwebsite",{"title":1092,"group":644,"icon":1093,"order":131,"path":1094,"stem":1095,"children":1096},"Operations","i-lucide-settings-2","\u002Fhandbook\u002Foperations","handbook\u002Foperations\u002Findex",[1097,1098,1102,1106,1110,1133,1137,1141,1145,1149],{"title":1092,"path":1094,"stem":1095},{"title":1099,"path":1100,"stem":1101},"Accounting","\u002Fhandbook\u002Foperations\u002Faccounting","handbook\u002Foperations\u002Faccounting",{"title":1103,"path":1104,"stem":1105},"Accounts","\u002Fhandbook\u002Foperations\u002Faccounts","handbook\u002Foperations\u002Faccounts",{"title":1107,"path":1108,"stem":1109},"Billing","\u002Fhandbook\u002Foperations\u002Fbilling","handbook\u002Foperations\u002Fbilling",{"title":1111,"icon":1112,"path":1113,"stem":1114,"children":1115},"CEO Ops","i-lucide-briefcase","\u002Fhandbook\u002Foperations\u002Fceo-ops","handbook\u002Foperations\u002Fceo-ops\u002Findex",[1116,1117,1121,1125,1129],{"title":1111,"path":1113,"stem":1114},{"title":1118,"path":1119,"stem":1120},"Calendar Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management","handbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management",{"title":1122,"path":1123,"stem":1124},"Inbox Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Finbox-management","handbook\u002Foperations\u002Fceo-ops\u002Finbox-management",{"title":1126,"path":1127,"stem":1128},"Task Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftask-managment","handbook\u002Foperations\u002Fceo-ops\u002Ftask-managment",{"title":1130,"path":1131,"stem":1132},"Travel Booking","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking","handbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking",{"title":1134,"path":1135,"stem":1136},"Change Control","\u002Fhandbook\u002Foperations\u002Fchange","handbook\u002Foperations\u002Fchange",{"title":1138,"path":1139,"stem":1140},"Commission Payment","\u002Fhandbook\u002Foperations\u002Fcommission-payment","handbook\u002Foperations\u002Fcommission-payment",{"title":1142,"path":1143,"stem":1144},"Data at FlowFuse","\u002Fhandbook\u002Foperations\u002Fdata","handbook\u002Foperations\u002Fdata",{"title":1146,"path":1147,"stem":1148},"Signatures","\u002Fhandbook\u002Foperations\u002Fsignatures","handbook\u002Foperations\u002Fsignatures",{"title":1150,"path":1151,"stem":1152},"Vendors","\u002Fhandbook\u002Foperations\u002Fvendors","handbook\u002Foperations\u002Fvendors",{"title":1154,"group":1155,"icon":1156,"order":190,"path":1157,"stem":1158,"children":1159},"People Ops","Internal Operations","i-lucide-users","\u002Fhandbook\u002Fpeopleops","handbook\u002Fpeopleops\u002Findex",[1160,1161,1165,1169,1173,1177,1181,1200,1267,1271,1275,1279,1283],{"title":1154,"path":1157,"stem":1158},{"title":1162,"path":1163,"stem":1164},"Coaching Plans","\u002Fhandbook\u002Fpeopleops\u002Fcoaching-plans","handbook\u002Fpeopleops\u002Fcoaching-plans",{"title":1166,"path":1167,"stem":1168},"Code of Conduct","\u002Fhandbook\u002Fpeopleops\u002Fcode-of-conduct","handbook\u002Fpeopleops\u002Fcode-of-conduct",{"title":1170,"path":1171,"stem":1172},"Compensation","\u002Fhandbook\u002Fpeopleops\u002Fcompensation","handbook\u002Fpeopleops\u002Fcompensation",{"title":1174,"path":1175,"stem":1176},"Compliance & Regulatory","\u002Fhandbook\u002Fpeopleops\u002Fcompliance","handbook\u002Fpeopleops\u002Fcompliance",{"title":1178,"path":1179,"stem":1180},"Expenses","\u002Fhandbook\u002Fpeopleops\u002Fexpenses","handbook\u002Fpeopleops\u002Fexpenses",{"title":1182,"path":1183,"stem":1184,"children":1185,"icon":1199},"Hiring","\u002Fhandbook\u002Fpeopleops\u002Fhiring","handbook\u002Fpeopleops\u002Fhiring\u002Findex",[1186,1187,1191,1195],{"title":1182,"path":1183,"stem":1184},{"title":1188,"path":1189,"stem":1190},"Working with Recruiters","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Frecruiters","handbook\u002Fpeopleops\u002Fhiring\u002Frecruiters",{"title":1192,"path":1193,"stem":1194},"Screening Call","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call","handbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call",{"title":1196,"path":1197,"stem":1198},"STAR Questions","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions","handbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions","i-lucide-user-plus",{"title":1201,"icon":1202,"path":1203,"stem":1204,"children":1205},"Job Descriptions","i-lucide-file-badge","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Findex",[1206,1207,1211,1215,1219,1223,1227,1231,1235,1239,1243,1247,1251,1255,1259,1263],{"title":1201,"path":1203,"stem":1204},{"title":1208,"path":1209,"stem":1210},"Account Executive","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive",{"title":1212,"path":1213,"stem":1214},"CEO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo",{"title":1216,"path":1217,"stem":1218},"Chief of Staff","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff",{"title":1220,"path":1221,"stem":1222},"CTO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto",{"title":1224,"path":1225,"stem":1226},"Developer Relations Advocate","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate",{"title":1228,"path":1229,"stem":1230},"Engineering Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager",{"title":1232,"path":1233,"stem":1234},"Fullstack Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer",{"title":1236,"path":1237,"stem":1238},"Fullstack Engineer (AI-Focused)","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai",{"title":1240,"path":1241,"stem":1242},"Head of Marketing","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing",{"title":1244,"path":1245,"stem":1246},"Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager",{"title":1248,"path":1249,"stem":1250},"Product Marketer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer",{"title":1252,"path":1253,"stem":1254},"Sales Development Representative (SDR)","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsales-development-representative","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsales-development-representative",{"title":1256,"path":1257,"stem":1258},"Solutions Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer",{"title":1260,"path":1261,"stem":1262},"Technical Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager",{"title":1264,"path":1265,"stem":1266},"VP of Sales","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales",{"title":1268,"path":1269,"stem":1270},"Holiday & Leave","\u002Fhandbook\u002Fpeopleops\u002Fleave","handbook\u002Fpeopleops\u002Fleave",{"title":1272,"path":1273,"stem":1274},"PeopleOps Policies","\u002Fhandbook\u002Fpeopleops\u002Forganization","handbook\u002Fpeopleops\u002Forganization",{"title":1276,"path":1277,"stem":1278},"Performance review","\u002Fhandbook\u002Fpeopleops\u002Fperformance-review","handbook\u002Fpeopleops\u002Fperformance-review",{"title":1280,"path":1281,"stem":1282},"Summit","\u002Fhandbook\u002Fpeopleops\u002Fsummit","handbook\u002Fpeopleops\u002Fsummit",{"title":1284,"path":1285,"stem":1286},"Travel","\u002Fhandbook\u002Fpeopleops\u002Ftravel","handbook\u002Fpeopleops\u002Ftravel",{"title":1288,"group":1289,"icon":1290,"order":212,"path":1291,"stem":1292,"children":1293},"Sales","Sales department","i-lucide-trending-up","\u002Fhandbook\u002Fsales","handbook\u002Fsales\u002Findex",[1294,1295,1302,1306,1310,1314,1318,1322,1326,1330,1349,1353,1367,1371,1378,1382,1386,1390],{"title":1288,"path":1291,"stem":1292},{"title":1296,"path":1297,"stem":1298,"children":1299,"icon":1301},"Sales Compensation Plan","\u002Fhandbook\u002Fsales\u002Fcommission-plan","handbook\u002Fsales\u002Fcommission-plan\u002Findex",[1300],{"title":1296,"path":1297,"stem":1298},"i-lucide-dollar-sign",{"title":1303,"path":1304,"stem":1305},"Customer Success","\u002Fhandbook\u002Fsales\u002Fcustomer-success","handbook\u002Fsales\u002Fcustomer-success",{"title":1307,"path":1308,"stem":1309},"Self Hosted Dashboard v2 Multi User","\u002Fhandbook\u002Fsales\u002Fdashboard-v2","handbook\u002Fsales\u002Fdashboard-v2",{"title":1311,"path":1312,"stem":1313},"Edge Connectivity Sales Process","\u002Fhandbook\u002Fsales\u002Fedge-connect-process","handbook\u002Fsales\u002Fedge-connect-process",{"title":1315,"path":1316,"stem":1317},"Engagements & Pricing","\u002Fhandbook\u002Fsales\u002Fengagements","handbook\u002Fsales\u002Fengagements",{"title":1319,"path":1320,"stem":1321},"Forecast Review","\u002Fhandbook\u002Fsales\u002Fforecast-review","handbook\u002Fsales\u002Fforecast-review",{"title":1323,"path":1324,"stem":1325},"HubSpot","\u002Fhandbook\u002Fsales\u002Fhubspot","handbook\u002Fsales\u002Fhubspot",{"title":1327,"path":1328,"stem":1329},"Legal","\u002Fhandbook\u002Fsales\u002Flegal","handbook\u002Fsales\u002Flegal",{"title":1331,"icon":1332,"path":1333,"stem":1334,"children":1335},"Sales Meetings","i-lucide-calendar","\u002Fhandbook\u002Fsales\u002Fmeetings","handbook\u002Fsales\u002Fmeetings\u002Findex",[1336,1337,1341,1345],{"title":1331,"path":1333,"stem":1334},{"title":1338,"path":1339,"stem":1340},"Demo","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdemo","handbook\u002Fsales\u002Fmeetings\u002Fdemo",{"title":1342,"path":1343,"stem":1344},"Discovery Meeting","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdiscovery","handbook\u002Fsales\u002Fmeetings\u002Fdiscovery",{"title":1346,"path":1347,"stem":1348},"Proof of Concept","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fpoc","handbook\u002Fsales\u002Fmeetings\u002Fpoc",{"title":1350,"path":1351,"stem":1352},"Sales Team Operating Principles","\u002Fhandbook\u002Fsales\u002Foperating-principles","handbook\u002Fsales\u002Foperating-principles",{"title":1354,"icon":1355,"path":1356,"stem":1357,"children":1358},"Commercial Organization","i-lucide-sitemap","\u002Fhandbook\u002Fsales\u002Forg","handbook\u002Fsales\u002Forg\u002Findex",[1359,1360],{"title":1354,"path":1356,"stem":1357},{"title":1361,"path":1362,"stem":1363,"children":1364,"icon":1366},"Account Executives","\u002Fhandbook\u002Fsales\u002Forg\u002Faccount-executives","handbook\u002Fsales\u002Forg\u002Faccount-executives\u002Findex",[1365],{"title":1361,"path":1362,"stem":1363},"i-lucide-user-check",{"title":1368,"path":1369,"stem":1370},"Partnerships","\u002Fhandbook\u002Fsales\u002Fpartnerships","handbook\u002Fsales\u002Fpartnerships",{"title":1372,"path":1373,"stem":1374,"children":1375,"icon":1377},"Processes","\u002Fhandbook\u002Fsales\u002Fprocesses","handbook\u002Fsales\u002Fprocesses\u002Findex",[1376],{"title":1372,"path":1373,"stem":1374},"i-lucide-workflow",{"title":1379,"path":1380,"stem":1381},"Professional Services","\u002Fhandbook\u002Fsales\u002Fprofessional-services","handbook\u002Fsales\u002Fprofessional-services",{"title":1383,"path":1384,"stem":1385},"Sales Regions","\u002Fhandbook\u002Fsales\u002Fregions","handbook\u002Fsales\u002Fregions",{"title":1387,"path":1388,"stem":1389},"Sales Deck","\u002Fhandbook\u002Fsales\u002Fsales-deck","handbook\u002Fsales\u002Fsales-deck",{"title":1391,"path":1392,"stem":1393},"Subscription Agreement 1.5","\u002Fhandbook\u002Fsales\u002Fsubscription-agreement-1.5","handbook\u002Fsales\u002Fsubscription-agreement-1.5",1781607303346]