[{"data":1,"prerenderedAt":1596},["ShallowReactive",2],{"navigation-en":3,"page-\u002Fen\u002Ftutorials\u002Fstep-by-step":134,"\u002Fen\u002Ftutorials\u002Fstep-by-step-surround":1591},[4],{"title":5,"path":6,"stem":7,"children":8,"page":26},"En","\u002Fen","en",[9,27,48,77,90,97],{"title":10,"path":11,"stem":12,"children":13,"page":26},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[14,18,22],{"title":15,"path":16,"stem":17},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction",{"title":19,"path":20,"stem":21},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation",{"title":23,"path":24,"stem":25},"Configuration Reference","\u002Fen\u002Fgetting-started\u002Fconfiguration","en\u002F1.getting-started\u002F3.configuration",false,{"title":28,"path":29,"stem":30,"children":31,"page":26},"Composables","\u002Fen\u002Fcomposables","en\u002F2.composables",[32,36,40,44],{"title":33,"path":34,"stem":35},"useGSheet","\u002Fen\u002Fcomposables\u002Fuse-gsheet","en\u002F2.composables\u002F1.use-gsheet",{"title":37,"path":38,"stem":39},"useGSheetAsObject","\u002Fen\u002Fcomposables\u002Fuse-gsheet-as-object","en\u002F2.composables\u002F2.use-gsheet-as-object",{"title":41,"path":42,"stem":43},"useGSheetRow","\u002Fen\u002Fcomposables\u002Fuse-gsheet-row","en\u002F2.composables\u002F3.use-gsheet-row",{"title":45,"path":46,"stem":47},"useGSheetWrite","\u002Fen\u002Fcomposables\u002Fuse-gsheet-write","en\u002F2.composables\u002F4.use-gsheet-write",{"title":49,"path":50,"stem":51,"children":52,"page":26},"Authentication Modes","\u002Fen\u002Fauth-modes","en\u002F3.auth-modes",[53,57,61,65,69,73],{"title":54,"path":55,"stem":56},"Authentication Modes Overview","\u002Fen\u002Fauth-modes\u002Foverview","en\u002F3.auth-modes\u002F1.overview",{"title":58,"path":59,"stem":60},"GViz Mode (Google Visualization API)","\u002Fen\u002Fauth-modes\u002Fgviz","en\u002F3.auth-modes\u002F2.gviz",{"title":62,"path":63,"stem":64},"CSV Export Mode","\u002Fen\u002Fauth-modes\u002Fcsv","en\u002F3.auth-modes\u002F3.csv",{"title":66,"path":67,"stem":68},"Google Apps Script Mode","\u002Fen\u002Fauth-modes\u002Fappscript","en\u002F3.auth-modes\u002F4.appscript",{"title":70,"path":71,"stem":72},"API Key Mode","\u002Fen\u002Fauth-modes\u002Fapikey","en\u002F3.auth-modes\u002F5.apikey",{"title":74,"path":75,"stem":76},"Service Account Mode","\u002Fen\u002Fauth-modes\u002Fservice-account","en\u002F3.auth-modes\u002F6.service-account",{"title":78,"path":79,"stem":80,"children":81,"page":26},"AI","\u002Fen\u002Fai","en\u002F4.ai",[82,86],{"title":83,"path":84,"stem":85},"Agent Skills (AI Integration)","\u002Fen\u002Fai\u002Fagent-skills","en\u002F4.ai\u002F1.agent-skills",{"title":87,"path":88,"stem":89},"Model Context Protocol (MCP)","\u002Fen\u002Fai\u002Fmcp","en\u002F4.ai\u002F2.mcp",{"title":91,"path":92,"stem":93,"children":94},"Demos","\u002Fen\u002Fdemos","en\u002F5.demos\u002Findex",[95],{"title":96,"path":92,"stem":93},"Live Demos",{"title":98,"path":99,"stem":100,"children":101,"page":26},"Tutorials","\u002Fen\u002Ftutorials","en\u002F6.tutorials",[102,106,110,114,118,122,126,130],{"title":103,"path":104,"stem":105},"Tutorials Overview","\u002Fen\u002Ftutorials\u002Foverview","en\u002F6.tutorials\u002F0.overview",{"title":107,"path":108,"stem":109},"Apps Script Web App Tutorial","\u002Fen\u002Ftutorials\u002Fappscript-tutorial","en\u002F6.tutorials\u002F1.appscript-tutorial",{"title":111,"path":112,"stem":113},"Complete Step-by-Step Tutorial","\u002Fen\u002Ftutorials\u002Fstep-by-step","en\u002F6.tutorials\u002F1.step-by-step",{"title":115,"path":116,"stem":117},"GViz SQL Analytics Tutorial","\u002Fen\u002Ftutorials\u002Fgviz-sql-tutorial","en\u002F6.tutorials\u002F2.gviz-sql-tutorial",{"title":119,"path":120,"stem":121},"CSV Product Catalog Tutorial","\u002Fen\u002Ftutorials\u002Fcsv-catalog-tutorial","en\u002F6.tutorials\u002F3.csv-catalog-tutorial",{"title":123,"path":124,"stem":125},"API Key Inventory Tutorial","\u002Fen\u002Ftutorials\u002Fapikey-tutorial","en\u002F6.tutorials\u002F4.apikey-tutorial",{"title":127,"path":128,"stem":129},"Service Account HR & Payroll Tutorial","\u002Fen\u002Ftutorials\u002Fservice-account-tutorial","en\u002F6.tutorials\u002F5.service-account-tutorial",{"title":131,"path":132,"stem":133},"Sheet Routing Map Tutorial","\u002Fen\u002Ftutorials\u002Fsheets-routing-tutorial","en\u002F6.tutorials\u002F6.sheets-routing-tutorial",{"id":135,"title":111,"body":136,"description":1585,"extension":1586,"icon":1587,"links":1587,"meta":1588,"navigation":1587,"path":112,"seo":1589,"stem":113,"__hash__":1590},"docs_en\u002Fen\u002F6.tutorials\u002F1.step-by-step.md",{"type":137,"value":138,"toc":1576},"minimark",[139,143,148,194,621,647,664,668,676,1001,1008,1572],[140,141,142],"p",{},"A step-by-step tutorial covering how to set up Google Sheets, deploy Apps Script, configure GCP credentials, and build a full-stack Nuxt 3\u002F4 Student Directory & Admin Management Portal.",[144,145,147],"h2",{"id":146},"step-1-create-google-sheet-apps-script","Step 1: Create Google Sheet & Apps Script",[149,150,151,167,183],"ol",{},[152,153,154,155,159,160,166],"li",{},"Open Google Sheets -> Create spreadsheet ",[156,157,158],"strong",{},"Student Portal"," -> Sheet tab ",[156,161,162],{},[163,164,165],"code",{},"students",".",[152,168,169,170,173,174,173,177,173,180,166],{},"Headers in row 1: ",[163,171,172],{},"id",", ",[163,175,176],{},"name",[163,178,179],{},"email",[163,181,182],{},"grade",[152,184,185,186,189,190,193],{},"Open ",[156,187,188],{},"Extensions"," -> ",[156,191,192],{},"Apps Script"," -> Paste backend script:",[195,196,202],"pre",{"className":197,"code":198,"filename":199,"language":200,"meta":201,"style":201},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function doGet(e) {\n  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.parameter.sheet || 'students');\n  const values = sheet.getRange(e.parameter.range || 'A1:Z100').getValues();\n  return ContentService.createTextOutput(JSON.stringify(values)).setMimeType(ContentService.MimeType.JSON);\n}\n\nfunction doPost(e) {\n  const data = JSON.parse(e.postData.contents);\n  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(data.sheet || 'students');\n  if (data.values) data.values.forEach(r => sheet.appendRow(r));\n  return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);\n}\n","Code.gs","javascript","",[163,203,204,231,292,342,398,404,411,427,463,505,557,616],{"__ignoreMap":201},[205,206,209,213,217,221,225,228],"span",{"class":207,"line":208},"line",1,[205,210,212],{"class":211},"spNyl","function",[205,214,216],{"class":215},"s2Zo4"," doGet",[205,218,220],{"class":219},"sMK4o","(",[205,222,224],{"class":223},"sHdIc","e",[205,226,227],{"class":219},")",[205,229,230],{"class":219}," {\n",[205,232,234,237,241,244,247,249,252,256,258,261,263,265,267,270,272,275,278,281,284,287,289],{"class":207,"line":233},2,[205,235,236],{"class":211},"  const",[205,238,240],{"class":239},"sTEyZ"," sheet",[205,242,243],{"class":219}," =",[205,245,246],{"class":239}," SpreadsheetApp",[205,248,166],{"class":219},[205,250,251],{"class":215},"getActiveSpreadsheet",[205,253,255],{"class":254},"swJcz","()",[205,257,166],{"class":219},[205,259,260],{"class":215},"getSheetByName",[205,262,220],{"class":254},[205,264,224],{"class":239},[205,266,166],{"class":219},[205,268,269],{"class":239},"parameter",[205,271,166],{"class":219},[205,273,274],{"class":239},"sheet",[205,276,277],{"class":219}," ||",[205,279,280],{"class":219}," '",[205,282,165],{"class":283},"sfazB",[205,285,286],{"class":219},"'",[205,288,227],{"class":254},[205,290,291],{"class":219},";\n",[205,293,295,297,300,302,304,306,309,311,313,315,317,319,322,324,326,329,331,333,335,338,340],{"class":207,"line":294},3,[205,296,236],{"class":211},[205,298,299],{"class":239}," values",[205,301,243],{"class":219},[205,303,240],{"class":239},[205,305,166],{"class":219},[205,307,308],{"class":215},"getRange",[205,310,220],{"class":254},[205,312,224],{"class":239},[205,314,166],{"class":219},[205,316,269],{"class":239},[205,318,166],{"class":219},[205,320,321],{"class":239},"range",[205,323,277],{"class":219},[205,325,280],{"class":219},[205,327,328],{"class":283},"A1:Z100",[205,330,286],{"class":219},[205,332,227],{"class":254},[205,334,166],{"class":219},[205,336,337],{"class":215},"getValues",[205,339,255],{"class":254},[205,341,291],{"class":219},[205,343,345,349,352,354,357,359,362,364,367,369,372,375,377,380,382,385,387,390,392,394,396],{"class":207,"line":344},4,[205,346,348],{"class":347},"s7zQu","  return",[205,350,351],{"class":239}," ContentService",[205,353,166],{"class":219},[205,355,356],{"class":215},"createTextOutput",[205,358,220],{"class":254},[205,360,361],{"class":239},"JSON",[205,363,166],{"class":219},[205,365,366],{"class":215},"stringify",[205,368,220],{"class":254},[205,370,371],{"class":239},"values",[205,373,374],{"class":254},"))",[205,376,166],{"class":219},[205,378,379],{"class":215},"setMimeType",[205,381,220],{"class":254},[205,383,384],{"class":239},"ContentService",[205,386,166],{"class":219},[205,388,389],{"class":239},"MimeType",[205,391,166],{"class":219},[205,393,361],{"class":239},[205,395,227],{"class":254},[205,397,291],{"class":219},[205,399,401],{"class":207,"line":400},5,[205,402,403],{"class":219},"}\n",[205,405,407],{"class":207,"line":406},6,[205,408,410],{"emptyLinePlaceholder":409},true,"\n",[205,412,414,416,419,421,423,425],{"class":207,"line":413},7,[205,415,212],{"class":211},[205,417,418],{"class":215}," doPost",[205,420,220],{"class":219},[205,422,224],{"class":223},[205,424,227],{"class":219},[205,426,230],{"class":219},[205,428,430,432,435,437,440,442,445,447,449,451,454,456,459,461],{"class":207,"line":429},8,[205,431,236],{"class":211},[205,433,434],{"class":239}," data",[205,436,243],{"class":219},[205,438,439],{"class":239}," JSON",[205,441,166],{"class":219},[205,443,444],{"class":215},"parse",[205,446,220],{"class":254},[205,448,224],{"class":239},[205,450,166],{"class":219},[205,452,453],{"class":239},"postData",[205,455,166],{"class":219},[205,457,458],{"class":239},"contents",[205,460,227],{"class":254},[205,462,291],{"class":219},[205,464,466,468,470,472,474,476,478,480,482,484,486,489,491,493,495,497,499,501,503],{"class":207,"line":465},9,[205,467,236],{"class":211},[205,469,240],{"class":239},[205,471,243],{"class":219},[205,473,246],{"class":239},[205,475,166],{"class":219},[205,477,251],{"class":215},[205,479,255],{"class":254},[205,481,166],{"class":219},[205,483,260],{"class":215},[205,485,220],{"class":254},[205,487,488],{"class":239},"data",[205,490,166],{"class":219},[205,492,274],{"class":239},[205,494,277],{"class":219},[205,496,280],{"class":219},[205,498,165],{"class":283},[205,500,286],{"class":219},[205,502,227],{"class":254},[205,504,291],{"class":219},[205,506,508,511,514,516,518,520,523,525,527,529,531,534,536,539,542,544,546,549,551,553,555],{"class":207,"line":507},10,[205,509,510],{"class":347},"  if",[205,512,513],{"class":254}," (",[205,515,488],{"class":239},[205,517,166],{"class":219},[205,519,371],{"class":239},[205,521,522],{"class":254},") ",[205,524,488],{"class":239},[205,526,166],{"class":219},[205,528,371],{"class":239},[205,530,166],{"class":219},[205,532,533],{"class":215},"forEach",[205,535,220],{"class":254},[205,537,538],{"class":223},"r",[205,540,541],{"class":211}," =>",[205,543,240],{"class":239},[205,545,166],{"class":219},[205,547,548],{"class":215},"appendRow",[205,550,220],{"class":254},[205,552,538],{"class":239},[205,554,374],{"class":254},[205,556,291],{"class":219},[205,558,560,562,564,566,568,570,572,574,576,578,581,584,587,591,594,596,598,600,602,604,606,608,610,612,614],{"class":207,"line":559},11,[205,561,348],{"class":347},[205,563,351],{"class":239},[205,565,166],{"class":219},[205,567,356],{"class":215},[205,569,220],{"class":254},[205,571,361],{"class":239},[205,573,166],{"class":219},[205,575,366],{"class":215},[205,577,220],{"class":254},[205,579,580],{"class":219},"{",[205,582,583],{"class":254}," success",[205,585,586],{"class":219},":",[205,588,590],{"class":589},"sfNiH"," true",[205,592,593],{"class":219}," }",[205,595,374],{"class":254},[205,597,166],{"class":219},[205,599,379],{"class":215},[205,601,220],{"class":254},[205,603,384],{"class":239},[205,605,166],{"class":219},[205,607,389],{"class":239},[205,609,166],{"class":219},[205,611,361],{"class":239},[205,613,227],{"class":254},[205,615,291],{"class":219},[205,617,619],{"class":207,"line":618},12,[205,620,403],{"class":219},[149,622,623,641],{"start":344},[152,624,625,626,189,629,632,633,173,637,640],{},"Click ",[156,627,628],{},"Deploy",[156,630,631],{},"New Deployment"," -> Web App (",[634,635,636],"em",{},"Execute as: Me",[634,638,639],{},"Access: Anyone",").",[152,642,643,644,586],{},"Copy URL to ",[163,645,646],{},".env",[195,648,652],{"className":649,"code":650,"filename":646,"language":651,"meta":201,"style":201},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GSHEET_APPSCRIPT_URL=https:\u002F\u002Fscript.google.com\u002Fmacros\u002Fs\u002F...\u002Fexec\nADMIN_PASSWORD=supersecretpassword\n","env",[163,653,654,659],{"__ignoreMap":201},[205,655,656],{"class":207,"line":208},[205,657,658],{},"GSHEET_APPSCRIPT_URL=https:\u002F\u002Fscript.google.com\u002Fmacros\u002Fs\u002F...\u002Fexec\n",[205,660,661],{"class":207,"line":233},[205,662,663],{},"ADMIN_PASSWORD=supersecretpassword\n",[144,665,667],{"id":666},"step-2-build-nuxt-application-pages","Step 2: Build Nuxt Application Pages",[669,670,672,673,227],"h3",{"id":671},"public-directory-pagesindexvue","Public Directory (",[163,674,675],{},"pages\u002Findex.vue",[195,677,681],{"className":678,"code":679,"filename":675,"language":680,"meta":201,"style":201},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\ninterface Student { id: string; name: string; email: string; grade: string }\nconst { data: students, pending } = await useGSheetAsObject\u003CStudent[]>('A1:D50', { sheet: 'students' })\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>Student Directory\u003C\u002Fh1>\n    \u003Cdiv v-if=\"pending\">Loading...\u003C\u002Fdiv>\n    \u003Cul v-else>\n      \u003Cli v-for=\"student in students\" :key=\"student.id\">\n        {{ student.name }} ({{ student.grade }}) - {{ student.email }}\n      \u003C\u002Fli>\n    \u003C\u002Ful>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","vue",[163,682,683,711,762,832,841,845,854,864,883,912,924,957,962,972,982,992],{"__ignoreMap":201},[205,684,685,688,691,694,697,700,703,706,708],{"class":207,"line":208},[205,686,687],{"class":219},"\u003C",[205,689,690],{"class":254},"script",[205,692,693],{"class":211}," setup",[205,695,696],{"class":211}," lang",[205,698,699],{"class":219},"=",[205,701,702],{"class":219},"\"",[205,704,705],{"class":283},"ts",[205,707,702],{"class":219},[205,709,710],{"class":219},">\n",[205,712,713,716,720,723,726,728,731,734,737,739,741,743,746,748,750,752,755,757,759],{"class":207,"line":233},[205,714,715],{"class":211},"interface",[205,717,719],{"class":718},"sBMFI"," Student",[205,721,722],{"class":219}," {",[205,724,725],{"class":254}," id",[205,727,586],{"class":219},[205,729,730],{"class":718}," string",[205,732,733],{"class":219},";",[205,735,736],{"class":254}," name",[205,738,586],{"class":219},[205,740,730],{"class":718},[205,742,733],{"class":219},[205,744,745],{"class":254}," email",[205,747,586],{"class":219},[205,749,730],{"class":718},[205,751,733],{"class":219},[205,753,754],{"class":254}," grade",[205,756,586],{"class":219},[205,758,730],{"class":718},[205,760,761],{"class":219}," }\n",[205,763,764,767,769,771,773,776,779,782,785,787,790,793,795,798,801,804,806,808,811,813,815,817,819,821,823,825,827,829],{"class":207,"line":294},[205,765,766],{"class":211},"const",[205,768,722],{"class":219},[205,770,434],{"class":254},[205,772,586],{"class":219},[205,774,775],{"class":239}," students",[205,777,778],{"class":219},",",[205,780,781],{"class":239}," pending ",[205,783,784],{"class":219},"}",[205,786,243],{"class":219},[205,788,789],{"class":347}," await",[205,791,792],{"class":215}," useGSheetAsObject",[205,794,687],{"class":219},[205,796,797],{"class":718},"Student",[205,799,800],{"class":239},"[]",[205,802,803],{"class":219},">",[205,805,220],{"class":239},[205,807,286],{"class":219},[205,809,810],{"class":283},"A1:D50",[205,812,286],{"class":219},[205,814,778],{"class":219},[205,816,722],{"class":219},[205,818,240],{"class":254},[205,820,586],{"class":219},[205,822,280],{"class":219},[205,824,165],{"class":283},[205,826,286],{"class":219},[205,828,593],{"class":219},[205,830,831],{"class":239},")\n",[205,833,834,837,839],{"class":207,"line":344},[205,835,836],{"class":219},"\u003C\u002F",[205,838,690],{"class":254},[205,840,710],{"class":219},[205,842,843],{"class":207,"line":400},[205,844,410],{"emptyLinePlaceholder":409},[205,846,847,849,852],{"class":207,"line":406},[205,848,687],{"class":219},[205,850,851],{"class":254},"template",[205,853,710],{"class":219},[205,855,856,859,862],{"class":207,"line":413},[205,857,858],{"class":219},"  \u003C",[205,860,861],{"class":254},"div",[205,863,710],{"class":219},[205,865,866,869,872,874,877,879,881],{"class":207,"line":429},[205,867,868],{"class":219},"    \u003C",[205,870,871],{"class":254},"h1",[205,873,803],{"class":219},[205,875,876],{"class":239},"Student Directory",[205,878,836],{"class":219},[205,880,871],{"class":254},[205,882,710],{"class":219},[205,884,885,887,889,892,894,896,899,901,903,906,908,910],{"class":207,"line":465},[205,886,868],{"class":219},[205,888,861],{"class":254},[205,890,891],{"class":211}," v-if",[205,893,699],{"class":219},[205,895,702],{"class":219},[205,897,898],{"class":283},"pending",[205,900,702],{"class":219},[205,902,803],{"class":219},[205,904,905],{"class":239},"Loading...",[205,907,836],{"class":219},[205,909,861],{"class":254},[205,911,710],{"class":219},[205,913,914,916,919,922],{"class":207,"line":507},[205,915,868],{"class":219},[205,917,918],{"class":254},"ul",[205,920,921],{"class":211}," v-else",[205,923,710],{"class":219},[205,925,926,929,931,934,936,938,941,943,946,948,950,953,955],{"class":207,"line":559},[205,927,928],{"class":219},"      \u003C",[205,930,152],{"class":254},[205,932,933],{"class":211}," v-for",[205,935,699],{"class":219},[205,937,702],{"class":219},[205,939,940],{"class":283},"student in students",[205,942,702],{"class":219},[205,944,945],{"class":211}," :key",[205,947,699],{"class":219},[205,949,702],{"class":219},[205,951,952],{"class":283},"student.id",[205,954,702],{"class":219},[205,956,710],{"class":219},[205,958,959],{"class":207,"line":618},[205,960,961],{"class":239},"        {{ student.name }} ({{ student.grade }}) - {{ student.email }}\n",[205,963,965,968,970],{"class":207,"line":964},13,[205,966,967],{"class":219},"      \u003C\u002F",[205,969,152],{"class":254},[205,971,710],{"class":219},[205,973,975,978,980],{"class":207,"line":974},14,[205,976,977],{"class":219},"    \u003C\u002F",[205,979,918],{"class":254},[205,981,710],{"class":219},[205,983,985,988,990],{"class":207,"line":984},15,[205,986,987],{"class":219},"  \u003C\u002F",[205,989,861],{"class":254},[205,991,710],{"class":219},[205,993,995,997,999],{"class":207,"line":994},16,[205,996,836],{"class":219},[205,998,851],{"class":254},[205,1000,710],{"class":219},[669,1002,1004,1005,227],{"id":1003},"admin-portal-pagesadminvue","Admin Portal (",[163,1006,1007],{},"pages\u002Fadmin.vue",[195,1009,1011],{"className":678,"code":1010,"filename":1007,"language":680,"meta":201,"style":201},"\u003Cscript setup lang=\"ts\">\nconst isAuthenticated = ref(false)\nconst password = ref('')\nconst name = ref('')\nconst email = ref('')\n\nconst { append } = useGSheetWrite({ sheet: 'students' })\n\nconst addStudent = async () => {\n  await append('A1:D1', [[String(Date.now()).slice(-4), name.value, email.value, 'Grade 10']])\n  alert('Student added to Google Sheet!')\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cform v-if=\"!isAuthenticated\" @submit.prevent=\"isAuthenticated = true\">\n      \u003Cinput v-model=\"password\" type=\"password\" placeholder=\"Admin Password\" required>\n      \u003Cbutton type=\"submit\">Login\u003C\u002Fbutton>\n    \u003C\u002Fform>\n\n    \u003Cform v-else @submit.prevent=\"addStudent\">\n      \u003Cinput v-model=\"name\" placeholder=\"Student Name\" required>\n      \u003Cinput v-model=\"email\" type=\"email\" placeholder=\"Email\" required>\n      \u003Cbutton type=\"submit\">Add Student\u003C\u002Fbutton>\n    \u003C\u002Fform>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[163,1012,1013,1033,1052,1070,1087,1104,1108,1142,1146,1165,1248,1264,1268,1276,1280,1288,1296,1329,1377,1407,1416,1421,1443,1475,1517,1545,1554,1563],{"__ignoreMap":201},[205,1014,1015,1017,1019,1021,1023,1025,1027,1029,1031],{"class":207,"line":208},[205,1016,687],{"class":219},[205,1018,690],{"class":254},[205,1020,693],{"class":211},[205,1022,696],{"class":211},[205,1024,699],{"class":219},[205,1026,702],{"class":219},[205,1028,705],{"class":283},[205,1030,702],{"class":219},[205,1032,710],{"class":219},[205,1034,1035,1037,1040,1042,1045,1047,1050],{"class":207,"line":233},[205,1036,766],{"class":211},[205,1038,1039],{"class":239}," isAuthenticated ",[205,1041,699],{"class":219},[205,1043,1044],{"class":215}," ref",[205,1046,220],{"class":239},[205,1048,1049],{"class":589},"false",[205,1051,831],{"class":239},[205,1053,1054,1056,1059,1061,1063,1065,1068],{"class":207,"line":294},[205,1055,766],{"class":211},[205,1057,1058],{"class":239}," password ",[205,1060,699],{"class":219},[205,1062,1044],{"class":215},[205,1064,220],{"class":239},[205,1066,1067],{"class":219},"''",[205,1069,831],{"class":239},[205,1071,1072,1074,1077,1079,1081,1083,1085],{"class":207,"line":344},[205,1073,766],{"class":211},[205,1075,1076],{"class":239}," name ",[205,1078,699],{"class":219},[205,1080,1044],{"class":215},[205,1082,220],{"class":239},[205,1084,1067],{"class":219},[205,1086,831],{"class":239},[205,1088,1089,1091,1094,1096,1098,1100,1102],{"class":207,"line":400},[205,1090,766],{"class":211},[205,1092,1093],{"class":239}," email ",[205,1095,699],{"class":219},[205,1097,1044],{"class":215},[205,1099,220],{"class":239},[205,1101,1067],{"class":219},[205,1103,831],{"class":239},[205,1105,1106],{"class":207,"line":406},[205,1107,410],{"emptyLinePlaceholder":409},[205,1109,1110,1112,1114,1117,1119,1121,1124,1126,1128,1130,1132,1134,1136,1138,1140],{"class":207,"line":413},[205,1111,766],{"class":211},[205,1113,722],{"class":219},[205,1115,1116],{"class":239}," append ",[205,1118,784],{"class":219},[205,1120,243],{"class":219},[205,1122,1123],{"class":215}," useGSheetWrite",[205,1125,220],{"class":239},[205,1127,580],{"class":219},[205,1129,240],{"class":254},[205,1131,586],{"class":219},[205,1133,280],{"class":219},[205,1135,165],{"class":283},[205,1137,286],{"class":219},[205,1139,593],{"class":219},[205,1141,831],{"class":239},[205,1143,1144],{"class":207,"line":429},[205,1145,410],{"emptyLinePlaceholder":409},[205,1147,1148,1150,1153,1155,1158,1161,1163],{"class":207,"line":465},[205,1149,766],{"class":211},[205,1151,1152],{"class":239}," addStudent ",[205,1154,699],{"class":219},[205,1156,1157],{"class":211}," async",[205,1159,1160],{"class":219}," ()",[205,1162,541],{"class":211},[205,1164,230],{"class":219},[205,1166,1167,1170,1173,1175,1177,1180,1182,1184,1187,1190,1192,1195,1197,1200,1203,1205,1208,1210,1213,1217,1219,1221,1223,1225,1228,1230,1232,1234,1236,1238,1240,1243,1245],{"class":207,"line":507},[205,1168,1169],{"class":347},"  await",[205,1171,1172],{"class":215}," append",[205,1174,220],{"class":254},[205,1176,286],{"class":219},[205,1178,1179],{"class":283},"A1:D1",[205,1181,286],{"class":219},[205,1183,778],{"class":219},[205,1185,1186],{"class":254}," [[",[205,1188,1189],{"class":215},"String",[205,1191,220],{"class":254},[205,1193,1194],{"class":239},"Date",[205,1196,166],{"class":219},[205,1198,1199],{"class":215},"now",[205,1201,1202],{"class":254},"())",[205,1204,166],{"class":219},[205,1206,1207],{"class":215},"slice",[205,1209,220],{"class":254},[205,1211,1212],{"class":219},"-",[205,1214,1216],{"class":1215},"sbssI","4",[205,1218,227],{"class":254},[205,1220,778],{"class":219},[205,1222,736],{"class":239},[205,1224,166],{"class":219},[205,1226,1227],{"class":239},"value",[205,1229,778],{"class":219},[205,1231,745],{"class":239},[205,1233,166],{"class":219},[205,1235,1227],{"class":239},[205,1237,778],{"class":219},[205,1239,280],{"class":219},[205,1241,1242],{"class":283},"Grade 10",[205,1244,286],{"class":219},[205,1246,1247],{"class":254},"]])\n",[205,1249,1250,1253,1255,1257,1260,1262],{"class":207,"line":559},[205,1251,1252],{"class":215},"  alert",[205,1254,220],{"class":254},[205,1256,286],{"class":219},[205,1258,1259],{"class":283},"Student added to Google Sheet!",[205,1261,286],{"class":219},[205,1263,831],{"class":254},[205,1265,1266],{"class":207,"line":618},[205,1267,403],{"class":219},[205,1269,1270,1272,1274],{"class":207,"line":964},[205,1271,836],{"class":219},[205,1273,690],{"class":254},[205,1275,710],{"class":219},[205,1277,1278],{"class":207,"line":974},[205,1279,410],{"emptyLinePlaceholder":409},[205,1281,1282,1284,1286],{"class":207,"line":984},[205,1283,687],{"class":219},[205,1285,851],{"class":254},[205,1287,710],{"class":219},[205,1289,1290,1292,1294],{"class":207,"line":994},[205,1291,858],{"class":219},[205,1293,861],{"class":254},[205,1295,710],{"class":219},[205,1297,1299,1301,1304,1306,1308,1310,1313,1315,1318,1320,1322,1325,1327],{"class":207,"line":1298},17,[205,1300,868],{"class":219},[205,1302,1303],{"class":254},"form",[205,1305,891],{"class":211},[205,1307,699],{"class":219},[205,1309,702],{"class":219},[205,1311,1312],{"class":283},"!isAuthenticated",[205,1314,702],{"class":219},[205,1316,1317],{"class":211}," @submit.prevent",[205,1319,699],{"class":219},[205,1321,702],{"class":219},[205,1323,1324],{"class":283},"isAuthenticated = true",[205,1326,702],{"class":219},[205,1328,710],{"class":219},[205,1330,1332,1334,1337,1340,1342,1344,1347,1349,1352,1354,1356,1358,1360,1363,1365,1367,1370,1372,1375],{"class":207,"line":1331},18,[205,1333,928],{"class":219},[205,1335,1336],{"class":254},"input",[205,1338,1339],{"class":211}," v-model",[205,1341,699],{"class":219},[205,1343,702],{"class":219},[205,1345,1346],{"class":283},"password",[205,1348,702],{"class":219},[205,1350,1351],{"class":211}," type",[205,1353,699],{"class":219},[205,1355,702],{"class":219},[205,1357,1346],{"class":283},[205,1359,702],{"class":219},[205,1361,1362],{"class":211}," placeholder",[205,1364,699],{"class":219},[205,1366,702],{"class":219},[205,1368,1369],{"class":283},"Admin Password",[205,1371,702],{"class":219},[205,1373,1374],{"class":211}," required",[205,1376,710],{"class":219},[205,1378,1380,1382,1385,1387,1389,1391,1394,1396,1398,1401,1403,1405],{"class":207,"line":1379},19,[205,1381,928],{"class":219},[205,1383,1384],{"class":254},"button",[205,1386,1351],{"class":211},[205,1388,699],{"class":219},[205,1390,702],{"class":219},[205,1392,1393],{"class":283},"submit",[205,1395,702],{"class":219},[205,1397,803],{"class":219},[205,1399,1400],{"class":239},"Login",[205,1402,836],{"class":219},[205,1404,1384],{"class":254},[205,1406,710],{"class":219},[205,1408,1410,1412,1414],{"class":207,"line":1409},20,[205,1411,977],{"class":219},[205,1413,1303],{"class":254},[205,1415,710],{"class":219},[205,1417,1419],{"class":207,"line":1418},21,[205,1420,410],{"emptyLinePlaceholder":409},[205,1422,1424,1426,1428,1430,1432,1434,1436,1439,1441],{"class":207,"line":1423},22,[205,1425,868],{"class":219},[205,1427,1303],{"class":254},[205,1429,921],{"class":211},[205,1431,1317],{"class":211},[205,1433,699],{"class":219},[205,1435,702],{"class":219},[205,1437,1438],{"class":283},"addStudent",[205,1440,702],{"class":219},[205,1442,710],{"class":219},[205,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1469,1471,1473],{"class":207,"line":1445},23,[205,1447,928],{"class":219},[205,1449,1336],{"class":254},[205,1451,1339],{"class":211},[205,1453,699],{"class":219},[205,1455,702],{"class":219},[205,1457,176],{"class":283},[205,1459,702],{"class":219},[205,1461,1362],{"class":211},[205,1463,699],{"class":219},[205,1465,702],{"class":219},[205,1467,1468],{"class":283},"Student Name",[205,1470,702],{"class":219},[205,1472,1374],{"class":211},[205,1474,710],{"class":219},[205,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1511,1513,1515],{"class":207,"line":1477},24,[205,1479,928],{"class":219},[205,1481,1336],{"class":254},[205,1483,1339],{"class":211},[205,1485,699],{"class":219},[205,1487,702],{"class":219},[205,1489,179],{"class":283},[205,1491,702],{"class":219},[205,1493,1351],{"class":211},[205,1495,699],{"class":219},[205,1497,702],{"class":219},[205,1499,179],{"class":283},[205,1501,702],{"class":219},[205,1503,1362],{"class":211},[205,1505,699],{"class":219},[205,1507,702],{"class":219},[205,1509,1510],{"class":283},"Email",[205,1512,702],{"class":219},[205,1514,1374],{"class":211},[205,1516,710],{"class":219},[205,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1539,1541,1543],{"class":207,"line":1519},25,[205,1521,928],{"class":219},[205,1523,1384],{"class":254},[205,1525,1351],{"class":211},[205,1527,699],{"class":219},[205,1529,702],{"class":219},[205,1531,1393],{"class":283},[205,1533,702],{"class":219},[205,1535,803],{"class":219},[205,1537,1538],{"class":239},"Add Student",[205,1540,836],{"class":219},[205,1542,1384],{"class":254},[205,1544,710],{"class":219},[205,1546,1548,1550,1552],{"class":207,"line":1547},26,[205,1549,977],{"class":219},[205,1551,1303],{"class":254},[205,1553,710],{"class":219},[205,1555,1557,1559,1561],{"class":207,"line":1556},27,[205,1558,987],{"class":219},[205,1560,861],{"class":254},[205,1562,710],{"class":219},[205,1564,1566,1568,1570],{"class":207,"line":1565},28,[205,1567,836],{"class":219},[205,1569,851],{"class":254},[205,1571,710],{"class":219},[1573,1574,1575],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":201,"searchDepth":208,"depth":233,"links":1577},[1578,1579],{"id":146,"depth":233,"text":147},{"id":666,"depth":233,"text":667,"children":1580},[1581,1583],{"id":671,"depth":294,"text":1582},"Public Directory (pages\u002Findex.vue)",{"id":1003,"depth":294,"text":1584},"Admin Portal (pages\u002Fadmin.vue)","End-to-end tutorial covering Apps Script, GCP Console, and Nuxt Admin Portal.","md",null,{},{"title":111,"description":1585},"BauqPZmYEWd9x8wE1hlweloNYaRa3ndnrnsOtCnaVJk",[1592,1594],{"title":107,"path":108,"stem":109,"description":1593,"children":-1},"Build a live feedback and submission portal using Google Apps Script Web App URL.",{"title":115,"path":116,"stem":117,"description":1595,"children":-1},"Build a dynamic sales analytics dashboard with GViz SQL query filtering.",1786088230258]