[{"data":1,"prerenderedAt":2587},["ShallowReactive",2],{"handbook-\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fui-conventions\u002Ffeature-flags\u002F":3,"handbook-nav":1728},{"id":4,"title":5,"body":6,"description":1720,"extension":1721,"meta":1722,"navigation":1723,"path":1724,"seo":1725,"stem":1726,"__hash__":1727},"handbook\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fui-conventions\u002Ffeature-flags.md","Feature Flags",{"type":7,"value":8,"toc":1700},"minimark",[9,13,38,44,53,58,65,122,131,135,140,205,208,353,362,366,385,390,408,459,473,477,491,582,592,596,599,625,628,634,678,689,745,751,755,763,807,811,820,869,873,882,996,1013,1016,1022,1103,1115,1124,1128,1131,1242,1287,1290,1341,1345,1348,1423,1439,1443,1453,1642,1645,1649,1696],[10,11,5],"h1",{"id":12},"feature-flags",[14,15,16,17,21,22,25,26,29,30,33,34,37],"p",{},"Every gated capability in the platform UI resolves through one place: the\n",[18,19,20],"code",{},"FEATURE_CONFIGS"," array in ",[18,23,24],{},"frontend\u002Fsrc\u002Fcomposables\u002FFeatureChecks.ts",". You\ndeclare a flag there once, and ",[18,27,28],{},"buildFeatureChecks()"," turns that declaration\ninto the booleans components read off the ",[18,31,32],{},"featuresCheck"," getter of the\n",[18,35,36],{},"account-settings"," store.",[14,39,40,41,43],{},"Declare the flag in ",[18,42,20],{}," rather than reading platform settings or\nteam properties directly in a component. Everything below (combining the\nplatform and team answers, defaults, dependencies, PostHog) is handled for you\nonce the entry exists.",[14,45,46,47,52],{},"This page covers defining a flag in code. For creating the PostHog flag itself\nand rolling it out to teams, see\n",[48,49,51],"a",{"href":50},"\u002Fhandbook\u002Fengineering\u002Ffeature-flags\u002F","Feature Flags in PostHog",".",[54,55,57],"h2",{"id":56},"the-three-checks","The three checks",[14,59,60,61,64],{},"A flag answers two separate questions, so each entry produces up to three\nbooleans, all named from its ",[18,62,63],{},"output",":",[66,67,68,81],"table",{},[69,70,71],"thead",{},[72,73,74,78],"tr",{},[75,76,77],"th",{},"Check",[75,79,80],{},"Question it answers",[82,83,84,99,112],"tbody",{},[72,85,86,92],{},[87,88,89],"td",{},[18,90,91],{},"{output}ForPlatform",[87,93,94,95,98],{},"Is the feature available on this installation at all? Driven by license and configuration. Only produced when ",[18,96,97],{},"platformKey"," is set.",[72,100,101,106],{},[87,102,103],{},[18,104,105],{},"{output}ForTeam",[87,107,108,109,98],{},"Is the feature included in the current team's team type? Only produced when ",[18,110,111],{},"teamKey",[72,113,114,119],{},[87,115,116],{},[18,117,118],{},"{output}",[87,120,121],{},"The combined answer.",[14,123,124,125,127,128,52],{},"Name the ",[18,126,63],{}," ",[18,129,130],{},"is{Feature}FeatureEnabled",[54,132,134],{"id":133},"defining-a-flag","Defining a flag",[14,136,137,138,64],{},"Add one entry to ",[18,139,20],{},[141,142,147],"pre",{"className":143,"code":144,"language":145,"meta":146,"style":146},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ output: 'isTablesFeatureEnabled', platformKey: 'tables', teamKey: 'tables' }\n","ts","",[18,148,149],{"__ignoreMap":146},[150,151,154,158,162,164,167,171,174,177,180,182,184,187,189,191,194,196,198,200,202],"span",{"class":152,"line":153},"line",1,[150,155,157],{"class":156},"sMK4o","{",[150,159,161],{"class":160},"sBMFI"," output",[150,163,64],{"class":156},[150,165,166],{"class":156}," '",[150,168,170],{"class":169},"sfazB","isTablesFeatureEnabled",[150,172,173],{"class":156},"'",[150,175,176],{"class":156},",",[150,178,179],{"class":160}," platformKey",[150,181,64],{"class":156},[150,183,166],{"class":156},[150,185,186],{"class":169},"tables",[150,188,173],{"class":156},[150,190,176],{"class":156},[150,192,193],{"class":160}," teamKey",[150,195,64],{"class":156},[150,197,166],{"class":156},[150,199,186],{"class":169},[150,201,173],{"class":156},[150,203,204],{"class":156}," }\n",[14,206,207],{},"The available fields:",[66,209,210,220],{},[69,211,212],{},[72,213,214,217],{},[75,215,216],{},"Field",[75,218,219],{},"Purpose",[82,221,222,231,240,252,266,280,290,303,313,323,339],{},[72,223,224,228],{},[87,225,226],{},[18,227,63],{},[87,229,230],{},"Required. Name of the resulting check.",[72,232,233,237],{},[87,234,235],{},[18,236,97],{},[87,238,239],{},"Key to look up in the platform features object.",[72,241,242,246],{},[87,243,244],{},[18,245,111],{},[87,247,248,249,52],{},"Key to look up in the team type's ",[18,250,251],{},"properties.features",[72,253,254,259],{},[87,255,256],{},[18,257,258],{},"optOut",[87,260,261,262,52],{},"Flips the team check's default from off to on. See ",[48,263,265],{"href":264},"#opt-in-and-opt-out","Opt-in and opt-out",[72,267,268,273],{},[87,269,270],{},[18,271,272],{},"platformSource",[87,274,275,276,279],{},"Set to ",[18,277,278],{},"'settingsRoot'"," to read a top-level settings key instead of a platform feature.",[72,281,282,287],{},[87,283,284],{},[18,285,286],{},"platformDefault",[87,288,289],{},"Value to use for a platform-only check when the key is absent.",[72,291,292,297],{},[87,293,294],{},[18,295,296],{},"dependsOn",[87,298,299,300,302],{},"The ",[18,301,63],{}," of another entry that must be enabled.",[72,304,305,310],{},[87,306,307],{},[18,308,309],{},"dependsOnPlatform",[87,311,312],{},"A platform key that must be enabled.",[72,314,315,320],{},[87,316,317],{},[18,318,319],{},"dependsOnTeam",[87,321,322],{},"A team key that must be enabled.",[72,324,325,330],{},[87,326,327],{},[18,328,329],{},"dependsOnTeamOptOut",[87,331,332,333,335,336,338],{},"Applies ",[18,334,258],{}," semantics to the ",[18,337,319],{}," check.",[72,340,341,346],{},[87,342,343],{},[18,344,345],{},"posthogKey",[87,347,348,349,52],{},"Hands the decision to a PostHog flag. See ",[48,350,352],{"href":351},"#posthog-flags","PostHog flags",[14,354,355,356,358,359,361],{},"At least one of ",[18,357,97],{}," or ",[18,360,111],{}," is required.",[54,363,365],{"id":364},"where-the-keys-come-from","Where the keys come from",[14,367,368,370,371,373,374,377,378,381,382,52],{},[18,369,97],{}," and ",[18,372,111],{}," are two independent registries that both live in the\nbackend. The names do not have to match, and sometimes they don't:\n",[18,375,376],{},"isHTTPBearerTokensFeatureEnabled"," uses the platform key ",[18,379,380],{},"httpBearerTokens"," and\nthe team key ",[18,383,384],{},"teamHttpSecurity",[386,387,389],"h3",{"id":388},"platform-keys","Platform keys",[14,391,392,393,396,397,400,401,404,405,64],{},"Register the key on the backend with ",[18,394,395],{},"app.config.features.register(name, value, isPublic)",".\nRegistrations live under ",[18,398,399],{},"forge\u002Fee\u002Flib\u002F",", behind the relevant license check.\nMany sit together in ",[18,402,403],{},"forge\u002Fee\u002Flib\u002Findex.js","; features with a module of their own\nregister there instead, as Tables does in ",[18,406,407],{},"forge\u002Fee\u002Flib\u002Ftables\u002Findex.js",[141,409,413],{"className":410,"code":411,"language":412,"meta":146,"style":146},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","app.config.features.register('tables', true, true)\n","js",[18,414,415],{"__ignoreMap":146},[150,416,417,421,423,426,428,431,433,437,440,442,444,446,448,452,454,456],{"class":152,"line":153},[150,418,420],{"class":419},"sTEyZ","app",[150,422,52],{"class":156},[150,424,425],{"class":419},"config",[150,427,52],{"class":156},[150,429,430],{"class":419},"features",[150,432,52],{"class":156},[150,434,436],{"class":435},"s2Zo4","register",[150,438,439],{"class":419},"(",[150,441,173],{"class":156},[150,443,186],{"class":169},[150,445,173],{"class":156},[150,447,176],{"class":156},[150,449,451],{"class":450},"sfNiH"," true",[150,453,176],{"class":156},[150,455,451],{"class":450},[150,457,458],{"class":419},")\n",[14,460,461,462,465,466,469,470,472],{},"The registry itself is ",[18,463,464],{},"forge\u002Fconfig\u002Ffeatures.js",", and ",[18,467,468],{},"GET \u002Fapi\u002Fv1\u002Fsettings","\nreturns the result as the ",[18,471,430],{}," object that the frontend reads.",[386,474,476],{"id":475},"team-keys","Team keys",[14,478,479,480,483,484,487,488,64],{},"Team keys are properties of a team type. To add one, put the key in\n",[18,481,482],{},"featureList"," and a human-readable label in ",[18,485,486],{},"featureNames",", both in\n",[18,489,490],{},"forge\u002Flib\u002Ffeatures.js",[141,492,494],{"className":410,"code":493,"language":412,"meta":146,"style":146},"const featureList = [\n    \u002F\u002F ...\n    'tables'\n]\n\nconst featureNames = {\n    \u002F\u002F ...\n    tables: 'Tables'\n}\n",[18,495,496,511,518,529,535,542,555,560,576],{"__ignoreMap":146},[150,497,498,502,505,508],{"class":152,"line":153},[150,499,501],{"class":500},"spNyl","const",[150,503,504],{"class":419}," featureList ",[150,506,507],{"class":156},"=",[150,509,510],{"class":419}," [\n",[150,512,514],{"class":152,"line":513},2,[150,515,517],{"class":516},"sHwdD","    \u002F\u002F ...\n",[150,519,521,524,526],{"class":152,"line":520},3,[150,522,523],{"class":156},"    '",[150,525,186],{"class":169},[150,527,528],{"class":156},"'\n",[150,530,532],{"class":152,"line":531},4,[150,533,534],{"class":419},"]\n",[150,536,538],{"class":152,"line":537},5,[150,539,541],{"emptyLinePlaceholder":540},true,"\n",[150,543,545,547,550,552],{"class":152,"line":544},6,[150,546,501],{"class":500},[150,548,549],{"class":419}," featureNames ",[150,551,507],{"class":156},[150,553,554],{"class":156}," {\n",[150,556,558],{"class":152,"line":557},7,[150,559,517],{"class":516},[150,561,563,567,569,571,574],{"class":152,"line":562},8,[150,564,566],{"class":565},"swJcz","    tables",[150,568,64],{"class":156},[150,570,166],{"class":156},[150,572,573],{"class":169},"Tables",[150,575,528],{"class":156},[150,577,579],{"class":152,"line":578},9,[150,580,581],{"class":156},"}\n",[14,583,584,585,588,589,591],{},"That file is imported directly by the admin Team Type edit dialog\n(",[18,586,587],{},"frontend\u002Fsrc\u002Fpages\u002Fadmin\u002FTeamTypes\u002Fdialogs\u002FTeamTypeEditDialog.vue","), which\nrenders a checkbox for each entry available on this installation. A team key\nthat isn't in ",[18,590,482],{}," won't appear there, so an admin will have no way to\ntoggle it.",[54,593,595],{"id":594},"how-the-checks-combine","How the checks combine",[14,597,598],{},"The base rule follows from which keys you set:",[600,601,602,615,620],"ul",{},[603,604,605,370,607,609,610,614],"li",{},[18,606,97],{},[18,608,111],{}," both set: platform ",[611,612,613],"strong",{},"AND"," team",[603,616,617,619],{},[18,618,97],{}," only: the platform answer",[603,621,622,624],{},[18,623,111],{}," only: the team answer",[386,626,265],{"id":627},"opt-in-and-opt-out",[14,629,630,631,64],{},"The team check defaults to off. The team type has to explicitly enable the\nfeature, or be marked ",[18,632,633],{},"enableAllFeatures: true",[141,635,636],{"className":143,"code":144,"language":145,"meta":146,"style":146},[18,637,638],{"__ignoreMap":146},[150,639,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,674,676],{"class":152,"line":153},[150,641,157],{"class":156},[150,643,161],{"class":160},[150,645,64],{"class":156},[150,647,166],{"class":156},[150,649,170],{"class":169},[150,651,173],{"class":156},[150,653,176],{"class":156},[150,655,179],{"class":160},[150,657,64],{"class":156},[150,659,166],{"class":156},[150,661,186],{"class":169},[150,663,173],{"class":156},[150,665,176],{"class":156},[150,667,193],{"class":160},[150,669,64],{"class":156},[150,671,166],{"class":156},[150,673,186],{"class":169},[150,675,173],{"class":156},[150,677,204],{"class":156},[14,679,680,681,684,685,688],{},"Setting ",[18,682,683],{},"optOut: true"," reverses that default. The feature counts as enabled\nunless the team type explicitly sets it to ",[18,686,687],{},"false",", so a team type that has\nnever heard of the key still gets the feature:",[141,690,692],{"className":143,"code":691,"language":145,"meta":146,"style":146},"{ output: 'isSharedLibraryFeatureEnabled', platformKey: 'shared-library', teamKey: 'shared-library', optOut: true }\n",[18,693,694],{"__ignoreMap":146},[150,695,696,698,700,702,704,707,709,711,713,715,717,720,722,724,726,728,730,732,734,736,739,741,743],{"class":152,"line":153},[150,697,157],{"class":156},[150,699,161],{"class":160},[150,701,64],{"class":156},[150,703,166],{"class":156},[150,705,706],{"class":169},"isSharedLibraryFeatureEnabled",[150,708,173],{"class":156},[150,710,176],{"class":156},[150,712,179],{"class":160},[150,714,64],{"class":156},[150,716,166],{"class":156},[150,718,719],{"class":169},"shared-library",[150,721,173],{"class":156},[150,723,176],{"class":156},[150,725,193],{"class":160},[150,727,64],{"class":156},[150,729,166],{"class":156},[150,731,719],{"class":169},[150,733,173],{"class":156},[150,735,176],{"class":156},[150,737,738],{"class":160}," optOut",[150,740,64],{"class":156},[150,742,451],{"class":450},[150,744,204],{"class":156},[14,746,747,748,750],{},"Use ",[18,749,258],{}," for capabilities every team should have unless deliberately taken\naway. Leave it off for anything sold as part of a specific tier.",[386,752,754],{"id":753},"platform-defaults","Platform defaults",[14,756,757,758,760,761,64],{},"For a platform-only check, ",[18,759,286],{}," covers the case where the key is\nmissing altogether, which is the mirror image of ",[18,762,258],{},[141,764,766],{"className":143,"code":765,"language":145,"meta":146,"style":146},"{ output: 'isRemoteInstanceFeatureEnabled', platformKey: 'remoteInstances', platformDefault: true }\n",[18,767,768],{"__ignoreMap":146},[150,769,770,772,774,776,778,781,783,785,787,789,791,794,796,798,801,803,805],{"class":152,"line":153},[150,771,157],{"class":156},[150,773,161],{"class":160},[150,775,64],{"class":156},[150,777,166],{"class":156},[150,779,780],{"class":169},"isRemoteInstanceFeatureEnabled",[150,782,173],{"class":156},[150,784,176],{"class":156},[150,786,179],{"class":160},[150,788,64],{"class":156},[150,790,166],{"class":156},[150,792,793],{"class":169},"remoteInstances",[150,795,173],{"class":156},[150,797,176],{"class":156},[150,799,800],{"class":160}," platformDefault",[150,802,64],{"class":156},[150,804,451],{"class":450},[150,806,204],{"class":156},[386,808,810],{"id":809},"reading-from-the-settings-root","Reading from the settings root",[14,812,813,814,816,817,819],{},"A few flags are plain settings values rather than registered features. Point\n",[18,815,272],{}," at ",[18,818,278],{}," to read them from the top level of the\nsettings response:",[141,821,823],{"className":143,"code":822,"language":145,"meta":146,"style":146},"{ output: 'isTelemetryEnabled', platformKey: 'telemetry:enabled', platformSource: 'settingsRoot' }\n",[18,824,825],{"__ignoreMap":146},[150,826,827,829,831,833,835,838,840,842,844,846,848,851,853,855,858,860,862,865,867],{"class":152,"line":153},[150,828,157],{"class":156},[150,830,161],{"class":160},[150,832,64],{"class":156},[150,834,166],{"class":156},[150,836,837],{"class":169},"isTelemetryEnabled",[150,839,173],{"class":156},[150,841,176],{"class":156},[150,843,179],{"class":160},[150,845,64],{"class":156},[150,847,166],{"class":156},[150,849,850],{"class":169},"telemetry:enabled",[150,852,173],{"class":156},[150,854,176],{"class":156},[150,856,857],{"class":160}," platformSource",[150,859,64],{"class":156},[150,861,166],{"class":156},[150,863,864],{"class":169},"settingsRoot",[150,866,173],{"class":156},[150,868,204],{"class":156},[386,870,872],{"id":871},"dependencies","Dependencies",[14,874,875,876,879,880,52],{},"When a feature only makes sense alongside another, gate it with a ",[18,877,878],{},"dependsOn*","\nfield. Any failing dependency forces the combined check to ",[18,881,687],{},[141,883,885],{"className":143,"code":884,"language":145,"meta":146,"style":146},"{\n    output: 'isExpertAssistantFeatureEnabled',\n    platformKey: 'expertAssistant',\n    teamKey: 'expertAssistant',\n    optOut: true,\n    dependsOnPlatform: 'ai',\n    dependsOnTeam: 'ai',\n    dependsOnTeamOptOut: true\n}\n",[18,886,887,892,909,925,940,951,967,982,992],{"__ignoreMap":146},[150,888,889],{"class":152,"line":153},[150,890,891],{"class":156},"{\n",[150,893,894,897,899,901,904,906],{"class":152,"line":513},[150,895,896],{"class":160},"    output",[150,898,64],{"class":156},[150,900,166],{"class":156},[150,902,903],{"class":169},"isExpertAssistantFeatureEnabled",[150,905,173],{"class":156},[150,907,908],{"class":156},",\n",[150,910,911,914,916,918,921,923],{"class":152,"line":520},[150,912,913],{"class":160},"    platformKey",[150,915,64],{"class":156},[150,917,166],{"class":156},[150,919,920],{"class":169},"expertAssistant",[150,922,173],{"class":156},[150,924,908],{"class":156},[150,926,927,930,932,934,936,938],{"class":152,"line":531},[150,928,929],{"class":160},"    teamKey",[150,931,64],{"class":156},[150,933,166],{"class":156},[150,935,920],{"class":169},[150,937,173],{"class":156},[150,939,908],{"class":156},[150,941,942,945,947,949],{"class":152,"line":537},[150,943,944],{"class":160},"    optOut",[150,946,64],{"class":156},[150,948,451],{"class":450},[150,950,908],{"class":156},[150,952,953,956,958,960,963,965],{"class":152,"line":544},[150,954,955],{"class":160},"    dependsOnPlatform",[150,957,64],{"class":156},[150,959,166],{"class":156},[150,961,962],{"class":169},"ai",[150,964,173],{"class":156},[150,966,908],{"class":156},[150,968,969,972,974,976,978,980],{"class":152,"line":557},[150,970,971],{"class":160},"    dependsOnTeam",[150,973,64],{"class":156},[150,975,166],{"class":156},[150,977,962],{"class":169},[150,979,173],{"class":156},[150,981,908],{"class":156},[150,983,984,987,989],{"class":152,"line":562},[150,985,986],{"class":160},"    dependsOnTeamOptOut",[150,988,64],{"class":156},[150,990,991],{"class":450}," true\n",[150,993,994],{"class":152,"line":578},[150,995,581],{"class":156},[14,997,998,370,1000,1002,1003,1005,1006,1008,1009,1012],{},[18,999,309],{},[18,1001,319],{}," take raw keys, so the feature they point\nat needs no entry of its own. ",[18,1004,296],{}," takes another entry's ",[18,1007,63],{},", and\nthat entry ",[611,1010,1011],{},"must appear earlier in the array"," so it has already been computed.",[54,1014,352],{"id":1015},"posthog-flags",[14,1017,1018,1019,1021],{},"Adding a ",[18,1020,345],{}," ties the check to a PostHog feature flag:",[141,1023,1025],{"className":143,"code":1024,"language":145,"meta":146,"style":146},"{\n    output: 'isMcpThirdPartyFeatureEnabled',\n    platformKey: 'mcpThirdParty',\n    teamKey: 'mcpThirdParty',\n    optOut: true,\n    posthogKey: 'MCP_THIRD_PARTY'\n}\n",[18,1026,1027,1031,1046,1061,1075,1085,1099],{"__ignoreMap":146},[150,1028,1029],{"class":152,"line":153},[150,1030,891],{"class":156},[150,1032,1033,1035,1037,1039,1042,1044],{"class":152,"line":513},[150,1034,896],{"class":160},[150,1036,64],{"class":156},[150,1038,166],{"class":156},[150,1040,1041],{"class":169},"isMcpThirdPartyFeatureEnabled",[150,1043,173],{"class":156},[150,1045,908],{"class":156},[150,1047,1048,1050,1052,1054,1057,1059],{"class":152,"line":520},[150,1049,913],{"class":160},[150,1051,64],{"class":156},[150,1053,166],{"class":156},[150,1055,1056],{"class":169},"mcpThirdParty",[150,1058,173],{"class":156},[150,1060,908],{"class":156},[150,1062,1063,1065,1067,1069,1071,1073],{"class":152,"line":531},[150,1064,929],{"class":160},[150,1066,64],{"class":156},[150,1068,166],{"class":156},[150,1070,1056],{"class":169},[150,1072,173],{"class":156},[150,1074,908],{"class":156},[150,1076,1077,1079,1081,1083],{"class":152,"line":537},[150,1078,944],{"class":160},[150,1080,64],{"class":156},[150,1082,451],{"class":450},[150,1084,908],{"class":156},[150,1086,1087,1090,1092,1094,1097],{"class":152,"line":544},[150,1088,1089],{"class":160},"    posthogKey",[150,1091,64],{"class":156},[150,1093,166],{"class":156},[150,1095,1096],{"class":169},"MCP_THIRD_PARTY",[150,1098,528],{"class":156},[150,1100,1101],{"class":152,"line":557},[150,1102,581],{"class":156},[14,1104,1105,1106,1108,1109,1111,1112,1114],{},"Once PostHog is loaded, its flag decides the check. It replaces the platform and\nteam answer rather than adding a condition on top of it, so reach for\n",[18,1107,345],{}," when you want PostHog to own the rollout, which is the usual case\nfor a beta you're enabling team by team. When a flag has a ",[18,1110,345],{},", gate\nyour UI on the combined ",[18,1113,118],{}," so the PostHog decision is respected.",[14,1116,1117,1118,1121,1122,52],{},"Flag keys are ",[18,1119,1120],{},"ALL_CAPS",". Create the flag and copy it to every PostHog project\nbefore you rely on it, as described in\n",[48,1123,51],{"href":50},[54,1125,1127],{"id":1126},"reading-a-check-in-the-ui","Reading a check in the UI",[14,1129,1130],{},"Map the getter in and read the check off it. In a component:",[141,1132,1134],{"className":410,"code":1133,"language":412,"meta":146,"style":146},"import { mapState } from 'pinia'\n\nimport { useAccountSettingsStore } from '@\u002Fstores\u002Faccount-settings.js'\n\nexport default {\n    computed: {\n        ...mapState(useAccountSettingsStore, ['featuresCheck'])\n    }\n}\n",[18,1135,1136,1161,1165,1185,1189,1199,1208,1233,1238],{"__ignoreMap":146},[150,1137,1138,1142,1145,1148,1151,1154,1156,1159],{"class":152,"line":153},[150,1139,1141],{"class":1140},"s7zQu","import",[150,1143,1144],{"class":156}," {",[150,1146,1147],{"class":419}," mapState",[150,1149,1150],{"class":156}," }",[150,1152,1153],{"class":1140}," from",[150,1155,166],{"class":156},[150,1157,1158],{"class":169},"pinia",[150,1160,528],{"class":156},[150,1162,1163],{"class":152,"line":513},[150,1164,541],{"emptyLinePlaceholder":540},[150,1166,1167,1169,1171,1174,1176,1178,1180,1183],{"class":152,"line":520},[150,1168,1141],{"class":1140},[150,1170,1144],{"class":156},[150,1172,1173],{"class":419}," useAccountSettingsStore",[150,1175,1150],{"class":156},[150,1177,1153],{"class":1140},[150,1179,166],{"class":156},[150,1181,1182],{"class":169},"@\u002Fstores\u002Faccount-settings.js",[150,1184,528],{"class":156},[150,1186,1187],{"class":152,"line":531},[150,1188,541],{"emptyLinePlaceholder":540},[150,1190,1191,1194,1197],{"class":152,"line":537},[150,1192,1193],{"class":1140},"export",[150,1195,1196],{"class":1140}," default",[150,1198,554],{"class":156},[150,1200,1201,1204,1206],{"class":152,"line":544},[150,1202,1203],{"class":565},"    computed",[150,1205,64],{"class":156},[150,1207,554],{"class":156},[150,1209,1210,1213,1216,1219,1221,1224,1226,1228,1230],{"class":152,"line":557},[150,1211,1212],{"class":156},"        ...",[150,1214,1215],{"class":435},"mapState",[150,1217,1218],{"class":419},"(useAccountSettingsStore",[150,1220,176],{"class":156},[150,1222,1223],{"class":419}," [",[150,1225,173],{"class":156},[150,1227,32],{"class":169},[150,1229,173],{"class":156},[150,1231,1232],{"class":419},"])\n",[150,1234,1235],{"class":152,"line":562},[150,1236,1237],{"class":156},"    }\n",[150,1239,1240],{"class":152,"line":578},[150,1241,581],{"class":156},[141,1243,1247],{"className":1244,"code":1245,"language":1246,"meta":146,"style":146},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate v-if=\"featuresCheck.isTablesFeatureEnabled\">\n    ...\n\u003C\u002Ftemplate>\n","html",[18,1248,1249,1273,1278],{"__ignoreMap":146},[150,1250,1251,1254,1257,1260,1262,1265,1268,1270],{"class":152,"line":153},[150,1252,1253],{"class":156},"\u003C",[150,1255,1256],{"class":565},"template",[150,1258,1259],{"class":500}," v-if",[150,1261,507],{"class":156},[150,1263,1264],{"class":156},"\"",[150,1266,1267],{"class":169},"featuresCheck.isTablesFeatureEnabled",[150,1269,1264],{"class":156},[150,1271,1272],{"class":156},">\n",[150,1274,1275],{"class":152,"line":513},[150,1276,1277],{"class":419},"    ...\n",[150,1279,1280,1283,1285],{"class":152,"line":520},[150,1281,1282],{"class":156},"\u003C\u002F",[150,1284,1256],{"class":565},[150,1286,1272],{"class":156},[14,1288,1289],{},"Outside a component, such as in a route guard or another store, read the getter\noff the store directly:",[141,1291,1293],{"className":410,"code":1292,"language":412,"meta":146,"style":146},"const features = useAccountSettingsStore().featuresCheck\n\nif (features.isTablesFeatureEnabled) {\n    \u002F\u002F ...\n}\n",[18,1294,1295,1314,1318,1333,1337],{"__ignoreMap":146},[150,1296,1297,1299,1302,1304,1306,1309,1311],{"class":152,"line":153},[150,1298,501],{"class":500},[150,1300,1301],{"class":419}," features ",[150,1303,507],{"class":156},[150,1305,1173],{"class":435},[150,1307,1308],{"class":419},"()",[150,1310,52],{"class":156},[150,1312,1313],{"class":419},"featuresCheck\n",[150,1315,1316],{"class":152,"line":513},[150,1317,541],{"emptyLinePlaceholder":540},[150,1319,1320,1323,1326,1328,1331],{"class":152,"line":520},[150,1321,1322],{"class":1140},"if",[150,1324,1325],{"class":419}," (features",[150,1327,52],{"class":156},[150,1329,1330],{"class":419},"isTablesFeatureEnabled) ",[150,1332,891],{"class":156},[150,1334,1335],{"class":152,"line":531},[150,1336,517],{"class":516},[150,1338,1339],{"class":152,"line":537},[150,1340,581],{"class":156},[386,1342,1344],{"id":1343},"telling-the-user-why-something-is-unavailable","Telling the user why something is unavailable",[14,1346,1347],{},"Don't just hide a gated feature. Use the split checks to show the right banner,\nso the user knows what to do about it:",[141,1349,1351],{"className":1244,"code":1350,"language":1246,"meta":146,"style":146},"\u003Ctemplate v-if=\"!featuresCheck.isTablesFeatureEnabled\">\n    \u003CFeatureUnavailable v-if=\"!featuresCheck.isTablesFeatureEnabledForPlatform\" \u002F>\n    \u003CFeatureUnavailableToTeam v-else-if=\"!featuresCheck.isTablesFeatureEnabledForTeam\" \u002F>\n\u003C\u002Ftemplate>\n",[18,1352,1353,1372,1394,1415],{"__ignoreMap":146},[150,1354,1355,1357,1359,1361,1363,1365,1368,1370],{"class":152,"line":153},[150,1356,1253],{"class":156},[150,1358,1256],{"class":565},[150,1360,1259],{"class":500},[150,1362,507],{"class":156},[150,1364,1264],{"class":156},[150,1366,1367],{"class":169},"!featuresCheck.isTablesFeatureEnabled",[150,1369,1264],{"class":156},[150,1371,1272],{"class":156},[150,1373,1374,1377,1380,1382,1384,1386,1389,1391],{"class":152,"line":513},[150,1375,1376],{"class":156},"    \u003C",[150,1378,1379],{"class":565},"FeatureUnavailable",[150,1381,1259],{"class":500},[150,1383,507],{"class":156},[150,1385,1264],{"class":156},[150,1387,1388],{"class":169},"!featuresCheck.isTablesFeatureEnabledForPlatform",[150,1390,1264],{"class":156},[150,1392,1393],{"class":156}," \u002F>\n",[150,1395,1396,1398,1401,1404,1406,1408,1411,1413],{"class":152,"line":520},[150,1397,1376],{"class":156},[150,1399,1400],{"class":565},"FeatureUnavailableToTeam",[150,1402,1403],{"class":500}," v-else-if",[150,1405,507],{"class":156},[150,1407,1264],{"class":156},[150,1409,1410],{"class":169},"!featuresCheck.isTablesFeatureEnabledForTeam",[150,1412,1264],{"class":156},[150,1414,1393],{"class":156},[150,1416,1417,1419,1421],{"class":152,"line":531},[150,1418,1282],{"class":156},[150,1420,1256],{"class":565},[150,1422,1272],{"class":156},[14,1424,1425,1427,1428,1431,1432,1434,1435,1438],{},[18,1426,1379],{}," (",[18,1429,1430],{},"components\u002Fbanners\u002FFeatureUnavailable.vue",") points at the\nupgrade documentation. ",[18,1433,1400],{},"\n(",[18,1436,1437],{},"components\u002Fbanners\u002FFeatureUnavailableToTeam.vue",") links to the team's\nchange-type page. Both accept a custom message.",[54,1440,1442],{"id":1441},"testing-a-flag","Testing a flag",[14,1444,1445,1446,1449,1450,1452],{},"Add a case to ",[18,1447,1448],{},"test\u002Funit\u002Ffrontend\u002Fcomposables\u002FFeatureChecks.spec.js",". It calls\n",[18,1451,28],{}," directly with a plain state and team object, so there's\nno store to set up:",[141,1454,1456],{"className":410,"code":1455,"language":412,"meta":146,"style":146},"const checks = buildFeatureChecks(\n    { features: { tables: true }, settings: { features: {} }, posthogFlags: {} },\n    { type: { properties: { features: { tables: true }, enableAllFeatures: false } } }\n)\n\nexpect(checks.isTablesFeatureEnabled).toBe(true)\nexpect(checks.isTablesFeatureEnabledForPlatform).toBe(true)\nexpect(checks.isTablesFeatureEnabledForTeam).toBe(true)\n",[18,1457,1458,1473,1521,1567,1571,1575,1600,1621],{"__ignoreMap":146},[150,1459,1460,1462,1465,1467,1470],{"class":152,"line":153},[150,1461,501],{"class":500},[150,1463,1464],{"class":419}," checks ",[150,1466,507],{"class":156},[150,1468,1469],{"class":435}," buildFeatureChecks",[150,1471,1472],{"class":419},"(\n",[150,1474,1475,1478,1481,1483,1485,1488,1490,1492,1495,1498,1500,1502,1504,1506,1509,1511,1514,1516,1518],{"class":152,"line":513},[150,1476,1477],{"class":156},"    {",[150,1479,1480],{"class":565}," features",[150,1482,64],{"class":156},[150,1484,1144],{"class":156},[150,1486,1487],{"class":565}," tables",[150,1489,64],{"class":156},[150,1491,451],{"class":450},[150,1493,1494],{"class":156}," },",[150,1496,1497],{"class":565}," settings",[150,1499,64],{"class":156},[150,1501,1144],{"class":156},[150,1503,1480],{"class":565},[150,1505,64],{"class":156},[150,1507,1508],{"class":156}," {}",[150,1510,1494],{"class":156},[150,1512,1513],{"class":565}," posthogFlags",[150,1515,64],{"class":156},[150,1517,1508],{"class":156},[150,1519,1520],{"class":156}," },\n",[150,1522,1523,1525,1528,1530,1532,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1556,1558,1561,1563,1565],{"class":152,"line":520},[150,1524,1477],{"class":156},[150,1526,1527],{"class":565}," type",[150,1529,64],{"class":156},[150,1531,1144],{"class":156},[150,1533,1534],{"class":565}," properties",[150,1536,64],{"class":156},[150,1538,1144],{"class":156},[150,1540,1480],{"class":565},[150,1542,64],{"class":156},[150,1544,1144],{"class":156},[150,1546,1487],{"class":565},[150,1548,64],{"class":156},[150,1550,451],{"class":450},[150,1552,1494],{"class":156},[150,1554,1555],{"class":565}," enableAllFeatures",[150,1557,64],{"class":156},[150,1559,1560],{"class":450}," false",[150,1562,1150],{"class":156},[150,1564,1150],{"class":156},[150,1566,204],{"class":156},[150,1568,1569],{"class":152,"line":531},[150,1570,458],{"class":419},[150,1572,1573],{"class":152,"line":537},[150,1574,541],{"emptyLinePlaceholder":540},[150,1576,1577,1580,1583,1585,1588,1590,1593,1595,1598],{"class":152,"line":544},[150,1578,1579],{"class":435},"expect",[150,1581,1582],{"class":419},"(checks",[150,1584,52],{"class":156},[150,1586,1587],{"class":419},"isTablesFeatureEnabled)",[150,1589,52],{"class":156},[150,1591,1592],{"class":435},"toBe",[150,1594,439],{"class":419},[150,1596,1597],{"class":450},"true",[150,1599,458],{"class":419},[150,1601,1602,1604,1606,1608,1611,1613,1615,1617,1619],{"class":152,"line":557},[150,1603,1579],{"class":435},[150,1605,1582],{"class":419},[150,1607,52],{"class":156},[150,1609,1610],{"class":419},"isTablesFeatureEnabledForPlatform)",[150,1612,52],{"class":156},[150,1614,1592],{"class":435},[150,1616,439],{"class":419},[150,1618,1597],{"class":450},[150,1620,458],{"class":419},[150,1622,1623,1625,1627,1629,1632,1634,1636,1638,1640],{"class":152,"line":562},[150,1624,1579],{"class":435},[150,1626,1582],{"class":419},[150,1628,52],{"class":156},[150,1630,1631],{"class":419},"isTablesFeatureEnabledForTeam)",[150,1633,52],{"class":156},[150,1635,1592],{"class":435},[150,1637,439],{"class":419},[150,1639,1597],{"class":450},[150,1641,458],{"class":419},[14,1643,1644],{},"Cover the interesting combination for your flag: both sides on, each side off,\nand any default or dependency you declared.",[54,1646,1648],{"id":1647},"adding-a-flag-end-to-end","Adding a flag, end to end",[1650,1651,1652,1662,1675,1683,1688,1691],"ol",{},[603,1653,1654,1655,1657,1658,1661],{},"Register the ",[18,1656,97],{}," in ",[18,1659,1660],{},"forge\u002F",", if the feature is license or config gated.",[603,1663,1664,1665,1667,1668,370,1670,1657,1672,1674],{},"Add the ",[18,1666,111],{}," to ",[18,1669,482],{},[18,1671,486],{},[18,1673,490],{},", if it varies by team type.",[603,1676,1664,1677,1679,1680,52],{},[18,1678,20],{}," entry in ",[18,1681,1682],{},"FeatureChecks.ts",[603,1684,1685,1686,52],{},"If PostHog owns the rollout, create the flag, copy it to every project, and add ",[18,1687,345],{},[603,1689,1690],{},"Gate the UI on the combined check, and add the unavailable banners.",[603,1692,1445,1693,52],{},[18,1694,1695],{},"FeatureChecks.spec.js",[1697,1698,1699],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":146,"searchDepth":531,"depth":531,"links":1701},[1702,1703,1704,1708,1714,1715,1718,1719],{"id":56,"depth":513,"text":57},{"id":133,"depth":513,"text":134},{"id":364,"depth":513,"text":365,"children":1705},[1706,1707],{"id":388,"depth":520,"text":389},{"id":475,"depth":520,"text":476},{"id":594,"depth":513,"text":595,"children":1709},[1710,1711,1712,1713],{"id":627,"depth":520,"text":265},{"id":753,"depth":520,"text":754},{"id":809,"depth":520,"text":810},{"id":871,"depth":520,"text":872},{"id":1015,"depth":513,"text":352},{"id":1126,"depth":513,"text":1127,"children":1716},[1717],{"id":1343,"depth":520,"text":1344},{"id":1441,"depth":513,"text":1442},{"id":1647,"depth":513,"text":1648},"Every gated capability in the platform UI resolves through one place: the\nFEATURE_CONFIGS array in frontend\u002Fsrc\u002Fcomposables\u002FFeatureChecks.ts. You\ndeclare a flag there once, and buildFeatureChecks() turns that declaration\ninto the booleans components read off the featuresCheck getter of the\naccount-settings store.","md",{},null,"\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fui-conventions\u002Ffeature-flags",{"title":5,"description":1720},"handbook\u002Fengineering\u002Ffrontend\u002Fui-conventions\u002Ffeature-flags","PhNRGXtgoqrLT_HWYfqUpbLoQjBc44nO1ijqums3VKM",[1729],{"title":1730,"path":1731,"stem":1732,"children":1733},"Handbook","\u002Fhandbook","handbook",[1734,1736,1861,1893,2118,2206,2268,2409,2414],{"title":1730,"path":1731,"stem":1735},"handbook\u002Findex",{"title":1737,"group":1737,"icon":1738,"order":153,"path":1739,"stem":1740,"children":1741},"Company","i-lucide-building-2","\u002Fhandbook\u002Fcompany","handbook\u002Fcompany\u002Findex",[1742,1743,1747,1751,1755,1774,1778,1782,1786,1853,1857],{"title":1737,"path":1739,"stem":1740},{"title":1744,"path":1745,"stem":1746},"Board & Investors","\u002Fhandbook\u002Fcompany\u002Fboard","handbook\u002Fcompany\u002Fboard",{"title":1748,"path":1749,"stem":1750},"Communications","\u002Fhandbook\u002Fcompany\u002Fcommunication","handbook\u002Fcompany\u002Fcommunication",{"title":1752,"path":1753,"stem":1754},"Decision making and project management","\u002Fhandbook\u002Fcompany\u002Fdecisions","handbook\u002Fcompany\u002Fdecisions",{"title":1756,"icon":1757,"path":1758,"stem":1759,"children":1760},"Guides","i-lucide-book-open","\u002Fhandbook\u002Fcompany\u002Fguides","handbook\u002Fcompany\u002Fguides\u002Findex",[1761,1762,1766,1770],{"title":1756,"path":1758,"stem":1759},{"title":1763,"path":1764,"stem":1765},"Editing the Handbook","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgit","handbook\u002Fcompany\u002Fguides\u002Fgit",{"title":1767,"path":1768,"stem":1769},"Google Workspace","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgworkspace","handbook\u002Fcompany\u002Fguides\u002Fgworkspace",{"title":1771,"path":1772,"stem":1773},"Markdown Guide","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fmarkdown","handbook\u002Fcompany\u002Fguides\u002Fmarkdown",{"title":1775,"path":1776,"stem":1777},"Organizational Structure","\u002Fhandbook\u002Fcompany\u002Forganizational-structure","handbook\u002Fcompany\u002Forganizational-structure",{"title":1779,"path":1780,"stem":1781},"Principles","\u002Fhandbook\u002Fcompany\u002Fprinciples","handbook\u002Fcompany\u002Fprinciples",{"title":1783,"path":1784,"stem":1785},"Remote Work","\u002Fhandbook\u002Fcompany\u002Fremote","handbook\u002Fcompany\u002Fremote",{"title":1787,"icon":1788,"path":1789,"stem":1790,"children":1791},"Security","i-lucide-shield","\u002Fhandbook\u002Fcompany\u002Fsecurity","handbook\u002Fcompany\u002Fsecurity\u002Findex",[1792,1793,1797,1801,1805,1809,1813,1817,1821,1825,1829,1833,1837,1841,1845,1849],{"title":1787,"path":1789,"stem":1790},{"title":1794,"path":1795,"stem":1796},"Access Control Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Faccess-control","handbook\u002Fcompany\u002Fsecurity\u002Faccess-control",{"title":1798,"path":1799,"stem":1800},"AI Development and Customer Data Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data","handbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data",{"title":1802,"path":1803,"stem":1804},"Asset Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fasset-management","handbook\u002Fcompany\u002Fsecurity\u002Fasset-management",{"title":1806,"path":1807,"stem":1808},"Business Continuity & Disaster Recovery Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity","handbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity",{"title":1810,"path":1811,"stem":1812},"Hardware Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security","handbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security",{"title":1814,"path":1815,"stem":1816},"Cryptography Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcryptography","handbook\u002Fcompany\u002Fsecurity\u002Fcryptography",{"title":1818,"path":1819,"stem":1820},"Data Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fdata-management","handbook\u002Fcompany\u002Fsecurity\u002Fdata-management",{"title":1822,"path":1823,"stem":1824},"Human Resources Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources","handbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources",{"title":1826,"path":1827,"stem":1828},"Incident Response Plan","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fincident-response","handbook\u002Fcompany\u002Fsecurity\u002Fincident-response",{"title":1830,"path":1831,"stem":1832},"Information Security Policy and Acceptable Use Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security",{"title":1834,"path":1835,"stem":1836},"Information Security Roles and Responsibilities","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles",{"title":1838,"path":1839,"stem":1840},"Operations Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Foperations-security","handbook\u002Fcompany\u002Fsecurity\u002Foperations-security",{"title":1842,"path":1843,"stem":1844},"Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Frisk-management","handbook\u002Fcompany\u002Fsecurity\u002Frisk-management",{"title":1846,"path":1847,"stem":1848},"Secure Development Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fsecure-development","handbook\u002Fcompany\u002Fsecurity\u002Fsecure-development",{"title":1850,"path":1851,"stem":1852},"Third-Party Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management","handbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management",{"title":1854,"path":1855,"stem":1856},"Strategy","\u002Fhandbook\u002Fcompany\u002Fstrategy","handbook\u002Fcompany\u002Fstrategy",{"title":1858,"path":1859,"stem":1860},"Values","\u002Fhandbook\u002Fcompany\u002Fvalues","handbook\u002Fcompany\u002Fvalues",{"title":1862,"group":1863,"icon":1864,"order":531,"path":1865,"stem":1866,"children":1867},"Design","Engineering & Design Practices","i-lucide-pen-tool","\u002Fhandbook\u002Fdesign","handbook\u002Fdesign\u002Findex",[1868,1869,1873,1877,1881,1885,1889],{"title":1862,"path":1865,"stem":1866},{"title":1870,"path":1871,"stem":1872},"Art Requests","\u002Fhandbook\u002Fdesign\u002Fart-requests","handbook\u002Fdesign\u002Fart-requests",{"title":1874,"path":1875,"stem":1876},"Branding","\u002Fhandbook\u002Fdesign\u002Fbranding","handbook\u002Fdesign\u002Fbranding",{"title":1878,"path":1879,"stem":1880},"Design Thinking","\u002Fhandbook\u002Fdesign\u002Fdesign-thinking","handbook\u002Fdesign\u002Fdesign-thinking",{"title":1882,"path":1883,"stem":1884},"Process","\u002Fhandbook\u002Fdesign\u002Fprocess","handbook\u002Fdesign\u002Fprocess",{"title":1886,"path":1887,"stem":1888},"Tools","\u002Fhandbook\u002Fdesign\u002Ftools","handbook\u002Fdesign\u002Ftools",{"title":1890,"path":1891,"stem":1892},"Video","\u002Fhandbook\u002Fdesign\u002Fvideos","handbook\u002Fdesign\u002Fvideos",{"title":1894,"group":1863,"icon":1895,"order":520,"path":1896,"stem":1897,"children":1898},"Engineering","i-lucide-code-2","\u002Fhandbook\u002Fengineering","handbook\u002Fengineering\u002Findex",[1899,1900,1904,1919,1923,1927,1930,1961,2004,2008,2065,2069,2096,2100,2115],{"title":1894,"path":1896,"stem":1897},{"title":1901,"path":1902,"stem":1903},"Blueprints","\u002Fhandbook\u002Fengineering\u002Fblueprints","handbook\u002Fengineering\u002Fblueprints",{"title":1905,"icon":1906,"path":1907,"stem":1908,"children":1909},"Contributing","i-lucide-git-pull-request","\u002Fhandbook\u002Fengineering\u002Fcontributing","handbook\u002Fengineering\u002Fcontributing\u002Findex",[1910,1911,1915],{"title":1905,"path":1907,"stem":1908},{"title":1912,"path":1913,"stem":1914},"FF Tables","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fff-tables","handbook\u002Fengineering\u002Fcontributing\u002Fff-tables",{"title":1916,"path":1917,"stem":1918},"Team NPM Registry","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry","handbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry",{"title":1920,"path":1921,"stem":1922},"Node-RED Dashboard","\u002Fhandbook\u002Fengineering\u002Fdashboard","handbook\u002Fengineering\u002Fdashboard",{"title":1924,"path":1925,"stem":1926},"Dependency Updates","\u002Fhandbook\u002Fengineering\u002Fdependency-updates","handbook\u002Fengineering\u002Fdependency-updates",{"title":51,"path":1928,"stem":1929},"\u002Fhandbook\u002Fengineering\u002Ffeature-flags","handbook\u002Fengineering\u002Ffeature-flags",{"title":1931,"icon":1932,"path":1933,"stem":1934,"children":1935},"Front End","i-lucide-layout-dashboard","\u002Fhandbook\u002Fengineering\u002Ffrontend","handbook\u002Fengineering\u002Ffrontend\u002Findex",[1936,1937,1941,1945,1949,1953],{"title":1931,"path":1933,"stem":1934},{"title":1938,"path":1939,"stem":1940},"Data Attributes","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes","handbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes",{"title":1942,"path":1943,"stem":1944},"Front-End Layouts","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Flayouts","handbook\u002Fengineering\u002Ffrontend\u002Flayouts",{"title":1946,"path":1947,"stem":1948},"Front-End Services","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fservices","handbook\u002Fengineering\u002Ffrontend\u002Fservices",{"title":1950,"path":1951,"stem":1952},"Front-End Testing","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting","handbook\u002Fengineering\u002Ffrontend\u002Ftesting",{"title":1954,"icon":1955,"path":1956,"stem":1957,"children":1958},"UI Conventions and Style Guide","i-lucide-palette","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fui-conventions","handbook\u002Fengineering\u002Ffrontend\u002Fui-conventions\u002Findex",[1959,1960],{"title":1954,"path":1956,"stem":1957},{"title":5,"path":1724,"stem":1726},{"title":1962,"icon":1963,"path":1964,"stem":1965,"children":1966},"Platform Ops","i-lucide-server","\u002Fhandbook\u002Fengineering\u002Fops","handbook\u002Fengineering\u002Fops\u002Findex",[1967,1968,1972,1976,1980,1984,1988,1992,1996,2000],{"title":1962,"path":1964,"stem":1965},{"title":1969,"path":1970,"stem":1971},"Certified Nodes","\u002Fhandbook\u002Fengineering\u002Fops\u002Fcertified-nodes","handbook\u002Fengineering\u002Fops\u002Fcertified-nodes",{"title":1973,"path":1974,"stem":1975},"FlowFuse Dedicated","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdedicated","handbook\u002Fengineering\u002Fops\u002Fdedicated",{"title":1977,"path":1978,"stem":1979},"Deployment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdeployment","handbook\u002Fengineering\u002Fops\u002Fdeployment",{"title":1981,"path":1982,"stem":1983},"Incident Response","\u002Fhandbook\u002Fengineering\u002Fops\u002Fincident-response","handbook\u002Fengineering\u002Fops\u002Fincident-response",{"title":1985,"path":1986,"stem":1987},"Observability","\u002Fhandbook\u002Fengineering\u002Fops\u002Fobservability","handbook\u002Fengineering\u002Fops\u002Fobservability",{"title":1989,"path":1990,"stem":1991},"Production Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction","handbook\u002Fengineering\u002Fops\u002Fproduction",{"title":1993,"path":1994,"stem":1995},"Update Stacks on Production","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction-stack-update","handbook\u002Fengineering\u002Fops\u002Fproduction-stack-update",{"title":1997,"path":1998,"stem":1999},"Self Hosted Assistant","\u002Fhandbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant","handbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant",{"title":2001,"path":2002,"stem":2003},"Staging Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fstaging","handbook\u002Fengineering\u002Fops\u002Fstaging",{"title":2005,"path":2006,"stem":2007},"Packaging Guidelines","\u002Fhandbook\u002Fengineering\u002Fpackaging","handbook\u002Fengineering\u002Fpackaging",{"title":2009,"icon":2010,"path":2011,"stem":2012,"children":2013},"Product","i-lucide-package","\u002Fhandbook\u002Fengineering\u002Fproduct","handbook\u002Fengineering\u002Fproduct\u002Findex",[2014,2015,2019,2023,2027,2031,2035,2042,2046,2049,2053,2057,2061],{"title":2009,"path":2011,"stem":2012},{"title":2016,"path":2017,"stem":2018},"Feature Catalog","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ffeatures","handbook\u002Fengineering\u002Fproduct\u002Ffeatures",{"title":2020,"path":2021,"stem":2022},"Feedback","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ffeedback","handbook\u002Fengineering\u002Fproduct\u002Ffeedback",{"title":2024,"path":2025,"stem":2026},"Glossary","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fglossary","handbook\u002Fengineering\u002Fproduct\u002Fglossary",{"title":2028,"path":2029,"stem":2030},"Methodology","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fmethodology","handbook\u002Fengineering\u002Fproduct\u002Fmethodology",{"title":2032,"path":2033,"stem":2034},"Metrics","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fmetrics","handbook\u002Fengineering\u002Fproduct\u002Fmetrics",{"title":2036,"path":2037,"stem":2038,"children":2039,"icon":2041},"Personas","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpersonas","handbook\u002Fengineering\u002Fproduct\u002Fpersonas\u002Findex",[2040],{"title":2036,"path":2037,"stem":2038},"i-lucide-user-circle",{"title":2043,"path":2044,"stem":2045},"Pricing Principles","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpricing","handbook\u002Fengineering\u002Fproduct\u002Fpricing",{"title":1779,"path":2047,"stem":2048},"\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fprinciples","handbook\u002Fengineering\u002Fproduct\u002Fprinciples",{"title":2050,"path":2051,"stem":2052},"Product Swimlanes","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fproduct-swimlanes","handbook\u002Fengineering\u002Fproduct\u002Fproduct-swimlanes",{"title":2054,"path":2055,"stem":2056},"Product Growth","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ftelemetry","handbook\u002Fengineering\u002Fproduct\u002Ftelemetry",{"title":2058,"path":2059,"stem":2060},"Versioning","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fversioning","handbook\u002Fengineering\u002Fproduct\u002Fversioning",{"title":2062,"path":2063,"stem":2064},"Market Segments","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fverticals","handbook\u002Fengineering\u002Fproduct\u002Fverticals",{"title":2066,"path":2067,"stem":2068},"Project Management","\u002Fhandbook\u002Fengineering\u002Fproject-management","handbook\u002Fengineering\u002Fproject-management",{"title":2070,"icon":2071,"path":2072,"stem":2073,"children":2074},"Releases","i-lucide-rocket","\u002Fhandbook\u002Fengineering\u002Freleases","handbook\u002Fengineering\u002Freleases\u002Findex",[2075,2076,2080,2084,2088,2092],{"title":2070,"path":2072,"stem":2073},{"title":2077,"path":2078,"stem":2079},"Dashboard 2.0 Releases","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdashboard-2","handbook\u002Fengineering\u002Freleases\u002Fdashboard-2",{"title":2081,"path":2082,"stem":2083},"Release Process - Digital Ocean","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdigital-ocean","handbook\u002Fengineering\u002Freleases\u002Fdigital-ocean",{"title":2085,"path":2086,"stem":2087},"Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess","handbook\u002Fengineering\u002Freleases\u002Fprocess",{"title":2089,"path":2090,"stem":2091},"Release Blogs","\u002Fhandbook\u002Fengineering\u002Freleases\u002Frelease-blogs","handbook\u002Fengineering\u002Freleases\u002Frelease-blogs",{"title":2093,"path":2094,"stem":2095},"Changelog Posts","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fwriting-changelog","handbook\u002Fengineering\u002Freleases\u002Fwriting-changelog",{"title":2097,"path":2098,"stem":2099},"Security Policy","\u002Fhandbook\u002Fengineering\u002Fsecurity","handbook\u002Fengineering\u002Fsecurity",{"title":2101,"path":2102,"stem":2103,"children":2104,"icon":2114},"Support","\u002Fhandbook\u002Fengineering\u002Fsupport","handbook\u002Fengineering\u002Fsupport\u002Findex",[2105,2106,2110],{"title":2101,"path":2102,"stem":2103},{"title":2107,"path":2108,"stem":2109},"Triage Duty","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftriage","handbook\u002Fengineering\u002Fsupport\u002Ftriage",{"title":2111,"path":2112,"stem":2113},"Troubleshooting","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","handbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","i-lucide-life-buoy",{"title":1886,"path":2116,"stem":2117},"\u002Fhandbook\u002Fengineering\u002Ftools","handbook\u002Fengineering\u002Ftools",{"title":2119,"group":2120,"icon":2121,"order":544,"path":2122,"stem":2123,"children":2124},"Marketing","Marketing department","i-lucide-megaphone","\u002Fhandbook\u002Fmarketing","handbook\u002Fmarketing\u002Findex",[2125,2126,2132,2136,2151,2170,2174,2178,2182,2186,2190,2194,2198,2202],{"title":2119,"path":2122,"stem":2123},{"title":2127,"path":2128,"stem":2129,"children":2130},"Account-Based Marketing","\u002Fhandbook\u002Fmarketing\u002Faccount-based-marketing","handbook\u002Fmarketing\u002Faccount-based-marketing\u002Findex",[2131],{"title":2127,"path":2128,"stem":2129},{"title":2133,"path":2134,"stem":2135},"Brand Voice","\u002Fhandbook\u002Fmarketing\u002Fbrand-voice","handbook\u002Fmarketing\u002Fbrand-voice",{"title":2137,"icon":2138,"path":2139,"stem":2140,"children":2141},"Community","i-lucide-users-2","\u002Fhandbook\u002Fmarketing\u002Fcommunity","handbook\u002Fmarketing\u002Fcommunity\u002Findex",[2142,2143,2147],{"title":2137,"path":2139,"stem":2140},{"title":2144,"path":2145,"stem":2146},"Community Guidelines","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines","handbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines",{"title":2148,"path":2149,"stem":2150},"Forums And Support","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support","handbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support",{"title":2152,"icon":2153,"path":2154,"stem":2155,"children":2156,"order":153},"Content Strategy","i-lucide-file-text","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy","handbook\u002Fmarketing\u002Fcontent-strategy\u002Findex",[2157,2158,2162,2166],{"title":2152,"path":2154,"stem":2155,"order":153},{"title":2159,"path":2160,"stem":2161},"Blog","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy\u002Fblog","handbook\u002Fmarketing\u002Fcontent-strategy\u002Fblog",{"title":2163,"path":2164,"stem":2165},"Customer Stories","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy\u002Fcustomer-stories","handbook\u002Fmarketing\u002Fcontent-strategy\u002Fcustomer-stories",{"title":2167,"path":2168,"stem":2169},"Webinars","\u002Fhandbook\u002Fmarketing\u002Fcontent-strategy\u002Fwebinars","handbook\u002Fmarketing\u002Fcontent-strategy\u002Fwebinars",{"title":2171,"path":2172,"stem":2173},"Events","\u002Fhandbook\u002Fmarketing\u002Fevents","handbook\u002Fmarketing\u002Fevents",{"title":2175,"path":2176,"stem":2177},"How we work","\u002Fhandbook\u002Fmarketing\u002Fhow-we-work","handbook\u002Fmarketing\u002Fhow-we-work",{"title":2179,"path":2180,"stem":2181},"Lead Activation","\u002Fhandbook\u002Fmarketing\u002Flead-activation","handbook\u002Fmarketing\u002Flead-activation",{"title":2183,"path":2184,"stem":2185},"Lead Generation","\u002Fhandbook\u002Fmarketing\u002Fleads","handbook\u002Fmarketing\u002Fleads",{"title":2187,"path":2188,"stem":2189},"Company Messaging","\u002Fhandbook\u002Fmarketing\u002Fmessaging","handbook\u002Fmarketing\u002Fmessaging",{"title":2191,"path":2192,"stem":2193},"Marketing Programs","\u002Fhandbook\u002Fmarketing\u002Fprograms","handbook\u002Fmarketing\u002Fprograms",{"title":2195,"path":2196,"stem":2197},"Sales Development Representative (SDR)","\u002Fhandbook\u002Fmarketing\u002Fsdr","handbook\u002Fmarketing\u002Fsdr",{"title":2199,"path":2200,"stem":2201},"Social Media","\u002Fhandbook\u002Fmarketing\u002Fsocial-media","handbook\u002Fmarketing\u002Fsocial-media",{"title":2203,"path":2204,"stem":2205},"Website","\u002Fhandbook\u002Fmarketing\u002Fwebsite","handbook\u002Fmarketing\u002Fwebsite",{"title":2207,"group":1737,"icon":2208,"order":513,"path":2209,"stem":2210,"children":2211},"Operations","i-lucide-settings-2","\u002Fhandbook\u002Foperations","handbook\u002Foperations\u002Findex",[2212,2213,2217,2221,2225,2248,2252,2256,2260,2264],{"title":2207,"path":2209,"stem":2210},{"title":2214,"path":2215,"stem":2216},"Accounting","\u002Fhandbook\u002Foperations\u002Faccounting","handbook\u002Foperations\u002Faccounting",{"title":2218,"path":2219,"stem":2220},"Accounts","\u002Fhandbook\u002Foperations\u002Faccounts","handbook\u002Foperations\u002Faccounts",{"title":2222,"path":2223,"stem":2224},"Billing","\u002Fhandbook\u002Foperations\u002Fbilling","handbook\u002Foperations\u002Fbilling",{"title":2226,"icon":2227,"path":2228,"stem":2229,"children":2230},"CEO Ops","i-lucide-briefcase","\u002Fhandbook\u002Foperations\u002Fceo-ops","handbook\u002Foperations\u002Fceo-ops\u002Findex",[2231,2232,2236,2240,2244],{"title":2226,"path":2228,"stem":2229},{"title":2233,"path":2234,"stem":2235},"Calendar Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management","handbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management",{"title":2237,"path":2238,"stem":2239},"Inbox Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Finbox-management","handbook\u002Foperations\u002Fceo-ops\u002Finbox-management",{"title":2241,"path":2242,"stem":2243},"Task Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftask-managment","handbook\u002Foperations\u002Fceo-ops\u002Ftask-managment",{"title":2245,"path":2246,"stem":2247},"Travel Booking","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking","handbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking",{"title":2249,"path":2250,"stem":2251},"Change Control","\u002Fhandbook\u002Foperations\u002Fchange","handbook\u002Foperations\u002Fchange",{"title":2253,"path":2254,"stem":2255},"Commission Payment","\u002Fhandbook\u002Foperations\u002Fcommission-payment","handbook\u002Foperations\u002Fcommission-payment",{"title":2257,"path":2258,"stem":2259},"Data at FlowFuse","\u002Fhandbook\u002Foperations\u002Fdata","handbook\u002Foperations\u002Fdata",{"title":2261,"path":2262,"stem":2263},"Signatures","\u002Fhandbook\u002Foperations\u002Fsignatures","handbook\u002Foperations\u002Fsignatures",{"title":2265,"path":2266,"stem":2267},"Vendors","\u002Fhandbook\u002Foperations\u002Fvendors","handbook\u002Foperations\u002Fvendors",{"title":2269,"group":2270,"icon":2271,"order":537,"path":2272,"stem":2273,"children":2274},"People Ops","Internal Operations","i-lucide-users","\u002Fhandbook\u002Fpeopleops","handbook\u002Fpeopleops\u002Findex",[2275,2276,2280,2284,2288,2292,2296,2319,2385,2389,2393,2397,2401,2405],{"title":2269,"path":2272,"stem":2273},{"title":2277,"path":2278,"stem":2279},"Coaching Plans","\u002Fhandbook\u002Fpeopleops\u002Fcoaching-plans","handbook\u002Fpeopleops\u002Fcoaching-plans",{"title":2281,"path":2282,"stem":2283},"Code of Conduct","\u002Fhandbook\u002Fpeopleops\u002Fcode-of-conduct","handbook\u002Fpeopleops\u002Fcode-of-conduct",{"title":2285,"path":2286,"stem":2287},"Compensation","\u002Fhandbook\u002Fpeopleops\u002Fcompensation","handbook\u002Fpeopleops\u002Fcompensation",{"title":2289,"path":2290,"stem":2291},"Compliance & Regulatory","\u002Fhandbook\u002Fpeopleops\u002Fcompliance","handbook\u002Fpeopleops\u002Fcompliance",{"title":2293,"path":2294,"stem":2295},"Expenses","\u002Fhandbook\u002Fpeopleops\u002Fexpenses","handbook\u002Fpeopleops\u002Fexpenses",{"title":2297,"icon":2298,"path":2299,"stem":2300,"children":2301},"Hiring","i-lucide-user-plus","\u002Fhandbook\u002Fpeopleops\u002Fhiring","handbook\u002Fpeopleops\u002Fhiring\u002Findex",[2302,2303,2307,2311,2315],{"title":2297,"path":2299,"stem":2300},{"title":2304,"path":2305,"stem":2306},"GitHub Navigation","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fgithub-navigation","handbook\u002Fpeopleops\u002Fhiring\u002Fgithub-navigation",{"title":2308,"path":2309,"stem":2310},"Working with Recruiters","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Frecruiters","handbook\u002Fpeopleops\u002Fhiring\u002Frecruiters",{"title":2312,"path":2313,"stem":2314},"Screening Call","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call","handbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call",{"title":2316,"path":2317,"stem":2318},"STAR Questions","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions","handbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions",{"title":2320,"icon":2321,"path":2322,"stem":2323,"children":2324},"Job Descriptions","i-lucide-file-badge","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Findex",[2325,2326,2330,2334,2338,2342,2346,2350,2354,2358,2362,2366,2370,2374,2377,2381],{"title":2320,"path":2322,"stem":2323},{"title":2327,"path":2328,"stem":2329},"Account Executive","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive",{"title":2331,"path":2332,"stem":2333},"CEO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo",{"title":2335,"path":2336,"stem":2337},"Chief of Staff","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff",{"title":2339,"path":2340,"stem":2341},"CTO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto",{"title":2343,"path":2344,"stem":2345},"Engineering Levels","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-levels","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-levels",{"title":2347,"path":2348,"stem":2349},"Engineering Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager",{"title":2351,"path":2352,"stem":2353},"Fullstack Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer",{"title":2355,"path":2356,"stem":2357},"Fullstack Engineer (AI-Focused)","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai",{"title":2359,"path":2360,"stem":2361},"Head of Marketing","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing",{"title":2363,"path":2364,"stem":2365},"Lead Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Flead-product-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Flead-product-manager",{"title":2367,"path":2368,"stem":2369},"Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager",{"title":2371,"path":2372,"stem":2373},"Product Marketer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer",{"title":2195,"path":2375,"stem":2376},"\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsales-development-representative","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsales-development-representative",{"title":2378,"path":2379,"stem":2380},"Solutions Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer",{"title":2382,"path":2383,"stem":2384},"VP of Sales","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales",{"title":2386,"path":2387,"stem":2388},"Holiday & Leave","\u002Fhandbook\u002Fpeopleops\u002Fleave","handbook\u002Fpeopleops\u002Fleave",{"title":2390,"path":2391,"stem":2392},"PeopleOps Policies","\u002Fhandbook\u002Fpeopleops\u002Forganization","handbook\u002Fpeopleops\u002Forganization",{"title":2394,"path":2395,"stem":2396},"Performance review","\u002Fhandbook\u002Fpeopleops\u002Fperformance-review","handbook\u002Fpeopleops\u002Fperformance-review",{"title":2398,"path":2399,"stem":2400},"Summit","\u002Fhandbook\u002Fpeopleops\u002Fsummit","handbook\u002Fpeopleops\u002Fsummit",{"title":2402,"path":2403,"stem":2404},"Travel","\u002Fhandbook\u002Fpeopleops\u002Ftravel","handbook\u002Fpeopleops\u002Ftravel",{"title":2406,"path":2407,"stem":2408},"U.S. Compliance Policies","\u002Fhandbook\u002Fpeopleops\u002Fus-compliance","handbook\u002Fpeopleops\u002Fus-compliance",{"title":2410,"path":2411,"stem":2412,"group":1730,"order":2413},"Recent Updates","\u002Fhandbook\u002Frecent-changes","handbook\u002Frecent-changes",0,{"title":2415,"group":2415,"icon":2416,"order":557,"path":2417,"stem":2418,"children":2419},"Commercial Organization","i-lucide-trending-up","\u002Fhandbook\u002Fsales","handbook\u002Fsales\u002Findex",[2420,2421,2429,2434,2438,2443,2449,2454,2459,2464,2469,2474,2479,2503,2508,2512,2534,2540,2545,2553,2557,2561,2566,2570,2574,2579,2583],{"title":2415,"path":2417,"stem":2418},{"title":2422,"path":2423,"stem":2424,"children":2425,"order":2427,"icon":2428},"Sales Compensation Plan","\u002Fhandbook\u002Fsales\u002Fcommission-plan","handbook\u002Fsales\u002Fcommission-plan\u002Findex",[2426],{"title":2422,"path":2423,"stem":2424},22,"i-lucide-dollar-sign",{"title":2430,"path":2431,"stem":2432,"order":2433},"Customer Journey Alignment","\u002Fhandbook\u002Fsales\u002Fcustomer-journey","handbook\u002Fsales\u002Fcustomer-journey",10,{"title":2435,"path":2436,"stem":2437,"order":520},"Customer Success","\u002Fhandbook\u002Fsales\u002Fcustomer-success","handbook\u002Fsales\u002Fcustomer-success",{"title":2439,"path":2440,"stem":2441,"order":2442},"Self Hosted Dashboard v2 Multi User","\u002Fhandbook\u002Fsales\u002Fdashboard-v2","handbook\u002Fsales\u002Fdashboard-v2",20,{"title":2444,"path":2445,"stem":2446,"order":2447,"icon":2448},"Demo Apps","\u002Fhandbook\u002Fsales\u002Fdemo-apps","handbook\u002Fsales\u002Fdemo-apps",13.7,"i-lucide-layout-grid",{"title":2450,"path":2451,"stem":2452,"order":2453},"Edge Connectivity Sales Process","\u002Fhandbook\u002Fsales\u002Fedge-connect-process","handbook\u002Fsales\u002Fedge-connect-process",19,{"title":2455,"path":2456,"stem":2457,"order":2458},"Engagements & Pricing","\u002Fhandbook\u002Fsales\u002Fengagements","handbook\u002Fsales\u002Fengagements",14,{"title":2460,"path":2461,"stem":2462,"order":2463,"icon":1963},"FlowFuse Trial Environment","\u002Fhandbook\u002Fsales\u002Fflowfuse-trial-environment","handbook\u002Fsales\u002Fflowfuse-trial-environment",13.6,{"title":2465,"path":2466,"stem":2467,"order":2468},"Forecast Review","\u002Fhandbook\u002Fsales\u002Fforecast-review","handbook\u002Fsales\u002Fforecast-review",15,{"title":2470,"path":2471,"stem":2472,"order":2473},"HubSpot","\u002Fhandbook\u002Fsales\u002Fhubspot","handbook\u002Fsales\u002Fhubspot",16,{"title":2475,"path":2476,"stem":2477,"order":2478},"Legal","\u002Fhandbook\u002Fsales\u002Flegal","handbook\u002Fsales\u002Flegal",21,{"title":2480,"order":2481,"icon":2482,"path":2483,"stem":2484,"children":2485},"Sales Meetings",13,"i-lucide-calendar","\u002Fhandbook\u002Fsales\u002Fmeetings","handbook\u002Fsales\u002Fmeetings\u002Findex",[2486,2487,2491,2495,2499],{"title":2480,"path":2483,"stem":2484},{"title":2488,"path":2489,"stem":2490,"order":513},"Demo","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdemo","handbook\u002Fsales\u002Fmeetings\u002Fdemo",{"title":2492,"path":2493,"stem":2494,"order":153},"Discovery Meeting","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdiscovery","handbook\u002Fsales\u002Fmeetings\u002Fdiscovery",{"title":2496,"path":2497,"stem":2498,"order":531},"Proof of Value","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fpov","handbook\u002Fsales\u002Fmeetings\u002Fpov",{"title":2500,"path":2501,"stem":2502,"order":520},"Solution","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fsolution","handbook\u002Fsales\u002Fmeetings\u002Fsolution",{"title":2504,"path":2505,"stem":2506,"order":2507},"Onboarding & Development","\u002Fhandbook\u002Fsales\u002Fonboarding","handbook\u002Fsales\u002Fonboarding",11,{"title":2509,"path":2510,"stem":2511,"order":544},"Commercial Team Operating Principles","\u002Fhandbook\u002Fsales\u002Foperating-principles","handbook\u002Fsales\u002Foperating-principles",{"title":2513,"order":537,"icon":2514,"path":2515,"stem":2516,"children":2517},"Partnerships","i-lucide-handshake","\u002Fhandbook\u002Fsales\u002Fpartnerships","handbook\u002Fsales\u002Fpartnerships\u002Findex",[2518,2519,2523],{"title":2513,"path":2515,"stem":2516},{"title":2520,"path":2521,"stem":2522,"order":513},"Channel Partners","\u002Fhandbook\u002Fsales\u002Fpartnerships\u002Fchannel-partners","handbook\u002Fsales\u002Fpartnerships\u002Fchannel-partners",{"title":2524,"path":2525,"stem":2526,"children":2527,"order":153,"icon":2533},"Hardware Partners","\u002Fhandbook\u002Fsales\u002Fpartnerships\u002Fhardware-partners","handbook\u002Fsales\u002Fpartnerships\u002Fhardware-partners\u002Findex",[2528,2529],{"title":2524,"path":2525,"stem":2526},{"title":2530,"path":2531,"stem":2532,"order":153},"Hardware Partner Workbook","\u002Fhandbook\u002Fsales\u002Fpartnerships\u002Fhardware-partners\u002Fworkbook","handbook\u002Fsales\u002Fpartnerships\u002Fhardware-partners\u002Fworkbook","i-lucide-cpu",{"title":2535,"path":2536,"stem":2537,"order":2538,"icon":2539},"PoV Workbook","\u002Fhandbook\u002Fsales\u002Fpov-workbook","handbook\u002Fsales\u002Fpov-workbook",13.5,"i-lucide-clipboard-list",{"title":2541,"path":2542,"stem":2543,"order":2544},"Pricing Decks","\u002Fhandbook\u002Fsales\u002Fpricing-decks","handbook\u002Fsales\u002Fpricing-decks",18,{"title":2546,"path":2547,"stem":2548,"children":2549,"order":2551,"icon":2552},"Processes","\u002Fhandbook\u002Fsales\u002Fprocesses","handbook\u002Fsales\u002Fprocesses\u002Findex",[2550],{"title":2546,"path":2547,"stem":2548},12,"i-lucide-workflow",{"title":2554,"path":2555,"stem":2556,"order":531},"Professional Services","\u002Fhandbook\u002Fsales\u002Fprofessional-services","handbook\u002Fsales\u002Fprofessional-services",{"title":2558,"path":2559,"stem":2560,"order":557},"Sales Regions","\u002Fhandbook\u002Fsales\u002Fregions","handbook\u002Fsales\u002Fregions",{"title":2562,"path":2563,"stem":2564,"order":2565},"Sales Deck","\u002Fhandbook\u002Fsales\u002Fsales-deck","handbook\u002Fsales\u002Fsales-deck",17,{"title":2567,"path":2568,"stem":2569,"order":153},"Sales","\u002Fhandbook\u002Fsales\u002Fsales-team","handbook\u002Fsales\u002Fsales-team",{"title":2571,"path":2572,"stem":2573,"order":513},"Solution Engineering","\u002Fhandbook\u002Fsales\u002Fsolution-engineering","handbook\u002Fsales\u002Fsolution-engineering",{"title":2575,"path":2576,"stem":2577,"order":2578},"Subscription Agreement 1.5","\u002Fhandbook\u002Fsales\u002Fsubscription-agreement-1.5","handbook\u002Fsales\u002Fsubscription-agreement-1.5",23,{"title":2580,"path":2581,"stem":2582,"order":562},"Systems & Tools","\u002Fhandbook\u002Fsales\u002Ftools","handbook\u002Fsales\u002Ftools",{"title":2584,"path":2585,"stem":2586,"order":578},"Working Norms","\u002Fhandbook\u002Fsales\u002Fworking-norms","handbook\u002Fsales\u002Fworking-norms",1788365177759]