[{"data":1,"prerenderedAt":1140},["ShallowReactive",2],{"work-\u002Fwork\u002Fanonymous-link-generator":3},{"id":4,"title":5,"body":6,"date":1122,"description":1123,"extension":1124,"externalUrl":1125,"featured":1126,"kind":1127,"meta":1128,"navigation":183,"path":1130,"seo":1131,"stem":1132,"tags":1133,"__hash__":1139},"work\u002Fwork\u002Fanonymous-link-generator.md","Bulk link generator: platform extension",{"type":7,"value":8,"toc":1109},"minimark",[9,13,18,27,35,39,42,61,64,68,71,88,93,96,729,733,742,779,787,829,837,950,954,957,989,993,1039,1043,1046,1057,1060,1064,1067,1070,1074,1077,1080,1094,1097,1100,1105],[10,11,5],"h1",{"id":12},"bulk-link-generator-platform-extension",[14,15,17],"h2",{"id":16},"context","Context",[19,20,21,22,26],"p",{},"Sometimes the most satisfying solutions come from working around limitations rather than waiting for them to be solved. When our Customer Success team came to me with an urgent request, the situation was clear: A client needed to generate hundreds of anonymous form links, but our platform only supported creating these one at a time (via our UI). The proper feature was on the roadmap, but the client needed a solution ",[23,24,25],"em",{},"now",".",[28,29,30],"blockquote",{},[19,31,32],{},[23,33,34],{},"Note: While specific client details are kept confidential, this case study shows how creative automation can bridge the gap between immediate customer needs and planned feature development.",[14,36,38],{"id":37},"the-challenge","The Challenge",[19,40,41],{},"Picture this: You have a platform feature that lets you create a single anonymous form link. Great! But what if you need 173 of them? Not so great. The manual process would involve:",[43,44,45,49,52,55,58],"ol",{},[46,47,48],"li",{},"Start a new workflow",[46,50,51],{},"Wait for it to initialize",[46,53,54],{},"Find the anonymous link in the metadata",[46,56,57],{},"Copy it somewhere safe",[46,59,60],{},"Repeat... 172 more times 😱",[19,62,63],{},"Our CSM team's collective response: \"There has to be a better way!\"",[14,65,67],{"id":66},"what-i-built","What I Built",[19,69,70],{},"I developed what I like to call the \"Link-O-Matic 3000\" (okay, it's just a TypeScript script, but let's have some fun with it). The script could:",[43,72,73,76,79,82,85],{},[46,74,75],{},"Authenticate with our platform",[46,77,78],{},"Create workflows in rapid succession",[46,80,81],{},"Extract anonymous links from workflow metadata",[46,83,84],{},"Generate a nicely formatted CSV file",[46,86,87],{},"Do it all without human intervention",[89,90,92],"h3",{"id":91},"the-secret-sauce","The Secret Sauce",[19,94,95],{},"The magic happened in understanding the workflow creation process. Here's the core logic:",[97,98,103],"pre",{"className":99,"code":100,"language":101,"meta":102,"style":102},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark","const organization = \"qhseportal\";\nconst workflowName = \"UK Health & Safety Review\";\nconst numberOfWorkflows = 173; \u002F\u002F The magic number!\n\n\u002F\u002F Create workflows and extract links\nfor (let i = 0; i \u003C numberOfWorkflows; i++) {\n  console.log(`Creating workflow ${i + 1} of ${numberOfWorkflows}`);\n\n  const workflow = await startNewWorkflow(\n    tenant.id,\n    concerendWorkflow?.workflowCollectionId,\n    concerendWorkflow?.tenantTeamId,\n  );\n\n  const workflowProcess = await getWorkflowProcess({\n    workflowId: workflow.data.startWorkflowProcess.id,\n    tenantId: tenant.id,\n  });\n\n  \u002F\u002F Hunt for that precious anonymous link in the metadata\n  const anonymousLinkAvailable = workflowProcess.allTasks.find((task) =>\n    task.metadata.includes(\"anonymousLink\"),\n  );\n\n  if (anonymousLinkAvailable) {\n    const anonymousLinkMetadata = JSON.parse(anonymousLinkAvailable.metadata);\n    const anonymousLink = anonymousLinkMetadata.anonymousLink;\n\n    \u002F\u002F Save it for posterity (and the client)\n    const csvContent = `${i + 1},${anonymousLink}\\n`;\n    fs.appendFileSync(csvPath, csvContent);\n  }\n\n  \u002F\u002F Be nice to our API\n  await new Promise((resolve) => setTimeout(resolve, 1000));\n}\n","typescript","",[104,105,106,138,157,178,185,191,237,290,295,315,329,343,355,363,368,387,414,431,441,446,452,487,516,523,528,543,574,592,597,603,640,664,670,675,681,723],"code",{"__ignoreMap":102},[107,108,111,115,119,123,127,131,134],"span",{"class":109,"line":110},"line",1,[107,112,114],{"class":113},"sbsja","const",[107,116,118],{"class":117},"s_hVV"," organization",[107,120,122],{"class":121},"smGrS"," =",[107,124,126],{"class":125},"sjJ54"," \"",[107,128,130],{"class":129},"s_sjI","qhseportal",[107,132,133],{"class":125},"\"",[107,135,137],{"class":136},"sP7_E",";\n",[107,139,141,143,146,148,150,153,155],{"class":109,"line":140},2,[107,142,114],{"class":113},[107,144,145],{"class":117}," workflowName",[107,147,122],{"class":121},[107,149,126],{"class":125},[107,151,152],{"class":129},"UK Health & Safety Review",[107,154,133],{"class":125},[107,156,137],{"class":136},[107,158,160,162,165,167,171,174],{"class":109,"line":159},3,[107,161,114],{"class":113},[107,163,164],{"class":117}," numberOfWorkflows",[107,166,122],{"class":121},[107,168,170],{"class":169},"srdBf"," 173",[107,172,173],{"class":136},";",[107,175,177],{"class":176},"sutJx"," \u002F\u002F The magic number!\n",[107,179,181],{"class":109,"line":180},4,[107,182,184],{"emptyLinePlaceholder":183},true,"\n",[107,186,188],{"class":109,"line":187},5,[107,189,190],{"class":176},"\u002F\u002F Create workflows and extract links\n",[107,192,194,198,202,205,208,211,214,216,218,221,223,225,228,231,234],{"class":109,"line":193},6,[107,195,197],{"class":196},"sVHd0","for",[107,199,201],{"class":200},"su5hD"," (",[107,203,204],{"class":113},"let",[107,206,207],{"class":200}," i ",[107,209,210],{"class":121},"=",[107,212,213],{"class":169}," 0",[107,215,173],{"class":136},[107,217,207],{"class":200},[107,219,220],{"class":121},"\u003C",[107,222,164],{"class":200},[107,224,173],{"class":136},[107,226,227],{"class":200}," i",[107,229,230],{"class":121},"++",[107,232,233],{"class":200},") ",[107,235,236],{"class":136},"{\n",[107,238,240,243,245,249,253,256,259,262,265,268,271,274,277,279,282,285,288],{"class":109,"line":239},7,[107,241,242],{"class":200},"  console",[107,244,26],{"class":136},[107,246,248],{"class":247},"sGLFI","log",[107,250,252],{"class":251},"skxfh","(",[107,254,255],{"class":125},"`",[107,257,258],{"class":129},"Creating workflow ",[107,260,261],{"class":125},"${",[107,263,264],{"class":200},"i",[107,266,267],{"class":121}," +",[107,269,270],{"class":169}," 1",[107,272,273],{"class":125},"}",[107,275,276],{"class":129}," of ",[107,278,261],{"class":125},[107,280,281],{"class":200},"numberOfWorkflows",[107,283,284],{"class":125},"}`",[107,286,287],{"class":251},")",[107,289,137],{"class":136},[107,291,293],{"class":109,"line":292},8,[107,294,184],{"emptyLinePlaceholder":183},[107,296,298,301,304,306,309,312],{"class":109,"line":297},9,[107,299,300],{"class":113},"  const",[107,302,303],{"class":117}," workflow",[107,305,122],{"class":121},[107,307,308],{"class":196}," await",[107,310,311],{"class":247}," startNewWorkflow",[107,313,314],{"class":251},"(\n",[107,316,318,321,323,326],{"class":109,"line":317},10,[107,319,320],{"class":200},"    tenant",[107,322,26],{"class":136},[107,324,325],{"class":200},"id",[107,327,328],{"class":136},",\n",[107,330,332,335,338,341],{"class":109,"line":331},11,[107,333,334],{"class":200},"    concerendWorkflow",[107,336,337],{"class":136},"?.",[107,339,340],{"class":200},"workflowCollectionId",[107,342,328],{"class":136},[107,344,346,348,350,353],{"class":109,"line":345},12,[107,347,334],{"class":200},[107,349,337],{"class":136},[107,351,352],{"class":200},"tenantTeamId",[107,354,328],{"class":136},[107,356,358,361],{"class":109,"line":357},13,[107,359,360],{"class":251},"  )",[107,362,137],{"class":136},[107,364,366],{"class":109,"line":365},14,[107,367,184],{"emptyLinePlaceholder":183},[107,369,371,373,376,378,380,383,385],{"class":109,"line":370},15,[107,372,300],{"class":113},[107,374,375],{"class":117}," workflowProcess",[107,377,122],{"class":121},[107,379,308],{"class":196},[107,381,382],{"class":247}," getWorkflowProcess",[107,384,252],{"class":251},[107,386,236],{"class":136},[107,388,390,393,396,398,400,403,405,408,410,412],{"class":109,"line":389},16,[107,391,392],{"class":251},"    workflowId",[107,394,395],{"class":136},":",[107,397,303],{"class":200},[107,399,26],{"class":136},[107,401,402],{"class":200},"data",[107,404,26],{"class":136},[107,406,407],{"class":200},"startWorkflowProcess",[107,409,26],{"class":136},[107,411,325],{"class":200},[107,413,328],{"class":136},[107,415,417,420,422,425,427,429],{"class":109,"line":416},17,[107,418,419],{"class":251},"    tenantId",[107,421,395],{"class":136},[107,423,424],{"class":200}," tenant",[107,426,26],{"class":136},[107,428,325],{"class":200},[107,430,328],{"class":136},[107,432,434,437,439],{"class":109,"line":433},18,[107,435,436],{"class":136},"  }",[107,438,287],{"class":251},[107,440,137],{"class":136},[107,442,444],{"class":109,"line":443},19,[107,445,184],{"emptyLinePlaceholder":183},[107,447,449],{"class":109,"line":448},20,[107,450,451],{"class":176},"  \u002F\u002F Hunt for that precious anonymous link in the metadata\n",[107,453,455,457,460,462,464,466,469,471,474,476,478,482,484],{"class":109,"line":454},21,[107,456,300],{"class":113},[107,458,459],{"class":117}," anonymousLinkAvailable",[107,461,122],{"class":121},[107,463,375],{"class":200},[107,465,26],{"class":136},[107,467,468],{"class":200},"allTasks",[107,470,26],{"class":136},[107,472,473],{"class":247},"find",[107,475,252],{"class":251},[107,477,252],{"class":136},[107,479,481],{"class":480},"s99_P","task",[107,483,287],{"class":136},[107,485,486],{"class":113}," =>\n",[107,488,490,493,495,498,500,503,505,507,510,512,514],{"class":109,"line":489},22,[107,491,492],{"class":200},"    task",[107,494,26],{"class":136},[107,496,497],{"class":200},"metadata",[107,499,26],{"class":136},[107,501,502],{"class":247},"includes",[107,504,252],{"class":251},[107,506,133],{"class":125},[107,508,509],{"class":129},"anonymousLink",[107,511,133],{"class":125},[107,513,287],{"class":251},[107,515,328],{"class":136},[107,517,519,521],{"class":109,"line":518},23,[107,520,360],{"class":251},[107,522,137],{"class":136},[107,524,526],{"class":109,"line":525},24,[107,527,184],{"emptyLinePlaceholder":183},[107,529,531,534,536,539,541],{"class":109,"line":530},25,[107,532,533],{"class":196},"  if",[107,535,201],{"class":251},[107,537,538],{"class":200},"anonymousLinkAvailable",[107,540,233],{"class":251},[107,542,236],{"class":136},[107,544,546,549,552,554,557,559,562,564,566,568,570,572],{"class":109,"line":545},26,[107,547,548],{"class":113},"    const",[107,550,551],{"class":117}," anonymousLinkMetadata",[107,553,122],{"class":121},[107,555,556],{"class":117}," JSON",[107,558,26],{"class":136},[107,560,561],{"class":247},"parse",[107,563,252],{"class":251},[107,565,538],{"class":200},[107,567,26],{"class":136},[107,569,497],{"class":200},[107,571,287],{"class":251},[107,573,137],{"class":136},[107,575,577,579,582,584,586,588,590],{"class":109,"line":576},27,[107,578,548],{"class":113},[107,580,581],{"class":117}," anonymousLink",[107,583,122],{"class":121},[107,585,551],{"class":200},[107,587,26],{"class":136},[107,589,509],{"class":200},[107,591,137],{"class":136},[107,593,595],{"class":109,"line":594},28,[107,596,184],{"emptyLinePlaceholder":183},[107,598,600],{"class":109,"line":599},29,[107,601,602],{"class":176},"    \u002F\u002F Save it for posterity (and the client)\n",[107,604,606,608,611,613,616,618,620,622,624,627,629,631,633,636,638],{"class":109,"line":605},30,[107,607,548],{"class":113},[107,609,610],{"class":117}," csvContent",[107,612,122],{"class":121},[107,614,615],{"class":125}," `${",[107,617,264],{"class":200},[107,619,267],{"class":121},[107,621,270],{"class":169},[107,623,273],{"class":125},[107,625,626],{"class":129},",",[107,628,261],{"class":125},[107,630,509],{"class":200},[107,632,273],{"class":125},[107,634,635],{"class":117},"\\n",[107,637,255],{"class":125},[107,639,137],{"class":136},[107,641,643,646,648,651,653,656,658,660,662],{"class":109,"line":642},31,[107,644,645],{"class":200},"    fs",[107,647,26],{"class":136},[107,649,650],{"class":247},"appendFileSync",[107,652,252],{"class":251},[107,654,655],{"class":200},"csvPath",[107,657,626],{"class":136},[107,659,610],{"class":200},[107,661,287],{"class":251},[107,663,137],{"class":136},[107,665,667],{"class":109,"line":666},32,[107,668,669],{"class":136},"  }\n",[107,671,673],{"class":109,"line":672},33,[107,674,184],{"emptyLinePlaceholder":183},[107,676,678],{"class":109,"line":677},34,[107,679,680],{"class":176},"  \u002F\u002F Be nice to our API\n",[107,682,684,687,690,694,696,698,701,703,706,709,711,713,715,718,721],{"class":109,"line":683},35,[107,685,686],{"class":196},"  await",[107,688,689],{"class":121}," new",[107,691,693],{"class":692},"sZMiF"," Promise",[107,695,252],{"class":251},[107,697,252],{"class":136},[107,699,700],{"class":480},"resolve",[107,702,287],{"class":136},[107,704,705],{"class":113}," =>",[107,707,708],{"class":247}," setTimeout",[107,710,252],{"class":251},[107,712,700],{"class":200},[107,714,626],{"class":136},[107,716,717],{"class":169}," 1000",[107,719,720],{"class":251},"))",[107,722,137],{"class":136},[107,724,726],{"class":109,"line":725},36,[107,727,728],{"class":136},"}\n",[89,730,732],{"id":731},"thoughtful-details","Thoughtful Details",[43,734,735],{},[46,736,737,741],{},[738,739,740],"strong",{},"Rate Limiting",": Added a 1-second delay between requests because being a good API citizen is important!",[97,743,745],{"className":99,"code":744,"language":101,"meta":102,"style":102},"await new Promise((resolve) => setTimeout(resolve, 1000));\n",[104,746,747],{"__ignoreMap":102},[107,748,749,752,754,756,758,760,762,764,766,768,771,773,775,777],{"class":109,"line":110},[107,750,751],{"class":196},"await",[107,753,689],{"class":121},[107,755,693],{"class":692},[107,757,252],{"class":200},[107,759,252],{"class":136},[107,761,700],{"class":480},[107,763,287],{"class":136},[107,765,705],{"class":113},[107,767,708],{"class":247},[107,769,770],{"class":200},"(resolve",[107,772,626],{"class":136},[107,774,717],{"class":169},[107,776,720],{"class":200},[107,778,137],{"class":136},[43,780,781],{"start":140},[46,782,783,786],{},[738,784,785],{},"Real-time Progress",": Because watching numbers go up is satisfying:",[97,788,790],{"className":99,"code":789,"language":101,"meta":102,"style":102},"console.log(`Creating workflow ${i + 1} of ${numberOfWorkflows}`);\n",[104,791,792],{"__ignoreMap":102},[107,793,794,797,799,801,803,805,807,809,811,813,815,817,819,821,823,825,827],{"class":109,"line":110},[107,795,796],{"class":200},"console",[107,798,26],{"class":136},[107,800,248],{"class":247},[107,802,252],{"class":200},[107,804,255],{"class":125},[107,806,258],{"class":129},[107,808,261],{"class":125},[107,810,264],{"class":200},[107,812,267],{"class":121},[107,814,270],{"class":169},[107,816,273],{"class":125},[107,818,276],{"class":129},[107,820,261],{"class":125},[107,822,281],{"class":200},[107,824,284],{"class":125},[107,826,287],{"class":200},[107,828,137],{"class":136},[43,830,831],{"start":159},[46,832,833,836],{},[738,834,835],{},"Timestamp-based Files",": Each run creates a unique CSV file:",[97,838,840],{"className":99,"code":839,"language":101,"meta":102,"style":102},"const timestamp = new Date().toISOString().replace(\u002F[:.]\u002Fg, \"-\");\nconst csvPath = path.join(__dirname, `anonymousLinks-${timestamp}.csv`);\n",[104,841,842,906],{"__ignoreMap":102},[107,843,844,846,849,851,853,856,859,861,864,866,868,871,873,876,880,884,887,889,893,895,897,900,902,904],{"class":109,"line":110},[107,845,114],{"class":113},[107,847,848],{"class":117}," timestamp",[107,850,122],{"class":121},[107,852,689],{"class":121},[107,854,855],{"class":247}," Date",[107,857,858],{"class":200},"()",[107,860,26],{"class":136},[107,862,863],{"class":247},"toISOString",[107,865,858],{"class":200},[107,867,26],{"class":136},[107,869,870],{"class":247},"replace",[107,872,252],{"class":200},[107,874,875],{"class":125},"\u002F",[107,877,879],{"class":878},"s39Yj","[",[107,881,883],{"class":882},"stzsN",":.",[107,885,886],{"class":878},"]",[107,888,875],{"class":125},[107,890,892],{"class":891},"sw1J6","g",[107,894,626],{"class":136},[107,896,126],{"class":125},[107,898,899],{"class":129},"-",[107,901,133],{"class":125},[107,903,287],{"class":200},[107,905,137],{"class":136},[107,907,908,910,913,915,918,920,923,926,928,931,934,936,939,941,944,946,948],{"class":109,"line":140},[107,909,114],{"class":113},[107,911,912],{"class":117}," csvPath",[107,914,122],{"class":121},[107,916,917],{"class":200}," path",[107,919,26],{"class":136},[107,921,922],{"class":247},"join",[107,924,925],{"class":200},"(__dirname",[107,927,626],{"class":136},[107,929,930],{"class":125}," `",[107,932,933],{"class":129},"anonymousLinks-",[107,935,261],{"class":125},[107,937,938],{"class":200},"timestamp",[107,940,273],{"class":125},[107,942,943],{"class":129},".csv",[107,945,255],{"class":125},[107,947,287],{"class":200},[107,949,137],{"class":136},[14,951,953],{"id":952},"the-results","The Results",[19,955,956],{},"The script turned what would have been hours of mind-numbing clicking into a 5-minute automated process. The output? A beautiful CSV file with rows of anonymous links, ready to be handed to the client:",[97,958,962],{"className":959,"code":960,"language":961,"meta":102,"style":102},"language-csv shiki shiki-themes material-theme-lighter github-light github-dark","Row,AnonymousLink\n1,https:\u002F\u002Fcapptions.direct\u002F...\u002Fanonymous-task\u002Fc2d7556c-...\n2,https:\u002F\u002Fcapptions.direct\u002F...\u002Fanonymous-task\u002F1103443e-...\n...\n173,https:\u002F\u002Fcapptions.direct\u002F...\u002Fanonymous-task\u002Fa5dc22ca-...\n","csv",[104,963,964,969,974,979,984],{"__ignoreMap":102},[107,965,966],{"class":109,"line":110},[107,967,968],{},"Row,AnonymousLink\n",[107,970,971],{"class":109,"line":140},[107,972,973],{},"1,https:\u002F\u002Fcapptions.direct\u002F...\u002Fanonymous-task\u002Fc2d7556c-...\n",[107,975,976],{"class":109,"line":159},[107,977,978],{},"2,https:\u002F\u002Fcapptions.direct\u002F...\u002Fanonymous-task\u002F1103443e-...\n",[107,980,981],{"class":109,"line":180},[107,982,983],{},"...\n",[107,985,986],{"class":109,"line":187},[107,987,988],{},"173,https:\u002F\u002Fcapptions.direct\u002F...\u002Fanonymous-task\u002Fa5dc22ca-...\n",[14,990,992],{"id":991},"what-i-learned","What I Learned",[43,994,995,1001,1007,1025],{},[46,996,997,1000],{},[738,998,999],{},"The Power of Workarounds",": Sometimes the best solution isn't waiting for the \"proper\" feature but finding creative ways to use what you have.",[46,1002,1003,1006],{},[738,1004,1005],{},"API Understanding is Crucial",": By understanding our platform's GraphQL API flow, I could automate what was designed to be a manual process.",[46,1008,1009,1012,1013],{},[738,1010,1011],{},"Customer Success Partnership",": Working closely with CSM team led to a solution that:",[1014,1015,1016,1019,1022],"ul",{},[46,1017,1018],{},"Saved them time",[46,1020,1021],{},"Made customers happy",[46,1023,1024],{},"Bought development time for the proper feature",[46,1026,1027,1030,1031,1034,1035,1038],{},[738,1028,1029],{},"Rate Limiting is Your Friend",": Just because you ",[23,1032,1033],{},"can"," hammer an API doesn't mean you ",[23,1036,1037],{},"should",". A small delay between requests makes everyone happier... and avoid network related issues (ew!).",[14,1040,1042],{"id":1041},"impact-reusability","Impact & Reusability",[19,1044,1045],{},"The script became something of a hit with our CSM team. They came back multiple times for different clients needing bulk anonymous links. Each time, it was just a matter of:",[43,1047,1048,1051,1054],{},[46,1049,1050],{},"Update the organization and workflow name",[46,1052,1053],{},"Set the number of links needed",[46,1055,1056],{},"Run and wait for the CSV",[19,1058,1059],{},"It was a perfect example of how a small automation script can have an outsized impact on customer satisfaction and team efficiency.",[14,1061,1063],{"id":1062},"whats-next","What's Next?",[19,1065,1066],{},"While this script served its purpose beautifully (and got multiple encores!), it was always meant to be a temporary solution. The proper feature has since been built into the platform, making this script a fond memory of creative problem-solving.",[19,1068,1069],{},"But the lesson lives on: Sometimes the best solutions come not from building the perfect feature, but from creatively using what you have to solve immediate problems.",[14,1071,1073],{"id":1072},"key-takeaways","Key Takeaways",[19,1075,1076],{},"Well, a little realisation was that being a good developer isn't just about writing the best or most efficient code - it's about solving problems. Sometimes that means building new features, and sometimes it means finding clever ways to make existing features do new tricks. ...or just automating the heck out of your platform with its current GQL APIs. 😉",[19,1078,1079],{},"The script might have been temporary, but it:",[1014,1081,1082,1085,1088,1091],{},[46,1083,1084],{},"Solved an immediate customer need",[46,1086,1087],{},"Gave the development team breathing room",[46,1089,1090],{},"Provided valuable insights for the eventual feature",[46,1092,1093],{},"Made our CSM team's life easier",[19,1095,1096],{},"And really, isn't that what good automation is all about?",[1098,1099],"hr",{},[19,1101,1102],{},[23,1103,1104],{},"Note: This case study focuses on the technical implementation while respecting confidentiality around specific client details. The script has since been retired in favor of proper platform features, but its legacy lives on in happy customers and satisfied CSMs.",[1106,1107,1108],"style",{},"html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":102,"searchDepth":140,"depth":140,"links":1110},[1111,1112,1113,1117,1118,1119,1120,1121],{"id":16,"depth":140,"text":17},{"id":37,"depth":140,"text":38},{"id":66,"depth":140,"text":67,"children":1114},[1115,1116],{"id":91,"depth":159,"text":92},{"id":731,"depth":159,"text":732},{"id":952,"depth":140,"text":953},{"id":991,"depth":140,"text":992},{"id":1041,"depth":140,"text":1042},{"id":1062,"depth":140,"text":1063},{"id":1072,"depth":140,"text":1073},"2025-06-18","Built a creative automation solution to generate hundreds of anonymous form links, bridging the gap between customer needs and platform capabilities while the proper feature was in development.","md",null,false,"case-study",{"slug":1129},"anonymous-link-generator","\u002Fwork\u002Fanonymous-link-generator",{"title":5,"description":1123},"work\u002Fanonymous-link-generator",[1134,1135,1136,1137,1138],"TypeScript","Automation","GraphQL","CSV","Scripting","VAcaPGkEAHeciskAjWdaAcABzXjzQnntd7-h9GDhe_Y",1780955296649]