[{"data":1,"prerenderedAt":987},["ShallowReactive",2],{"navigation":3,"\u002Fdocumentation\u002Fapi-usage":90,"\u002Fdocumentation\u002Fapi-usage-surround":982},[4,73],{"title":5,"path":6,"stem":7,"children":8,"icon":72},"Documentation","\u002Fdocumentation","1.documentation\u002F01.index",[9,12,17,22,27,32,37,42,47,52,57,62,67],{"title":10,"path":6,"stem":7,"icon":11},"Welcome","i-lucide-info",{"title":13,"path":14,"stem":15,"icon":16},"Requirements","\u002Fdocumentation\u002Frequirements","1.documentation\u002F02.requirements","i-lucide-alert-triangle",{"title":18,"path":19,"stem":20,"icon":21},"Getting Started","\u002Fdocumentation\u002Fgetting-started","1.documentation\u002F03.getting-started","i-lucide-package",{"title":23,"path":24,"stem":25,"icon":26},"Folder Structure","\u002Fdocumentation\u002Ffolder-structure","1.documentation\u002F04.folder-structure","i-lucide-folder-tree",{"title":28,"path":29,"stem":30,"icon":31},"Customization","\u002Fdocumentation\u002Fcustomization","1.documentation\u002F05.customization","i-lucide-palette",{"title":33,"path":34,"stem":35,"icon":36},"Deployment","\u002Fdocumentation\u002Fdeployment","1.documentation\u002F06.deployment","i-lucide-cloud-upload",{"title":38,"path":39,"stem":40,"icon":41},"API Usage","\u002Fdocumentation\u002Fapi-usage","1.documentation\u002F07.api-usage","i-lucide-plug",{"title":43,"path":44,"stem":45,"icon":46},"Backend Integration","\u002Fdocumentation\u002Fbackend-integration","1.documentation\u002F08.backend-integration","i-lucide-server",{"title":48,"path":49,"stem":50,"icon":51},"Install PWA","\u002Fdocumentation\u002Finstall-pwa","1.documentation\u002F09.install-pwa","i-lucide-smartphone",{"title":53,"path":54,"stem":55,"icon":56},"Configuration","\u002Fdocumentation\u002Fconfiguration","1.documentation\u002F10.configuration","i-lucide-settings",{"title":58,"path":59,"stem":60,"icon":61},"Screens Overview","\u002Fdocumentation\u002Fscreens-overview","1.documentation\u002F11.screens-overview","i-lucide-layout-dashboard",{"title":63,"path":64,"stem":65,"icon":66},"FAQ & Troubleshooting","\u002Fdocumentation\u002Ffaq","1.documentation\u002F12.faq","i-lucide-circle-help",{"title":68,"path":69,"stem":70,"icon":71},"Authentication","\u002Fdocumentation\u002Fauthentication","1.documentation\u002F13.authentication","i-lucide-lock",false,{"title":74,"path":75,"stem":76,"children":77,"icon":72},"Support","\u002Fsupport","2.support\u002F1.index",[78,80,85],{"title":74,"path":75,"stem":76,"icon":79},"i-lucide-life-buoy",{"title":81,"path":82,"stem":83,"icon":84},"Changelog","\u002Fsupport\u002Fchangelog","2.support\u002F2.changelog","i-lucide-scroll-text",{"title":86,"path":87,"stem":88,"icon":89},"Source & Credits","\u002Fsupport\u002Fsource-and-credits","2.support\u002F3.source-&-credits","i-lucide-award",{"id":91,"title":38,"body":92,"description":975,"extension":976,"links":977,"meta":978,"navigation":979,"path":39,"seo":980,"stem":40,"__hash__":981},"docs\u002F1.documentation\u002F07.api-usage.md",{"type":93,"value":94,"toc":969},"minimark",[95,109,116,121,141,145,152,159,237,240,287,298,302,941,945,965],[96,97,98,99,103,104,108],"p",{},"By default, the application uses ",[100,101,102],"strong",{},"static JSON files"," located in ",[105,106,107],"code",{},"app\u002Fmocks",". These serve as static data sources that can be replaced with real API endpoints in production.",[96,110,111],{},[112,113],"img",{"alt":114,"src":115},"JSON files location","\u002Fimages\u002F04.png",[117,118,120],"h2",{"id":119},"data-files","Data Files",[122,123,124,133],"card-group",{},[125,126,130],"card",{"icon":21,"target":127,"title":128,"to":129},"_blank","products.json","mocks\u002Fproducts.json",[96,131,132],{},"Contains data for the products items.",[125,134,138],{"icon":135,"target":127,"title":136,"to":137},"i-lucide-ticket-percent","promocodes.json","mocks\u002Fpromocodes.json",[96,139,140],{},"Contains the list of promocodes.",[117,142,144],{"id":143},"how-it-works","How It Works",[146,147,149],"callout",{"color":148,"icon":11},"warning",[96,150,151],{},"There are no real API requests to a server. The application reads data directly from these static JSON files. You can modify or extend them as needed.",[96,153,154,155,158],{},"All JSON files are exported through a single entry point — ",[105,156,157],{},"app\u002Fmocks\u002Findex.ts",":",[160,161,166],"pre",{"className":162,"code":163,"filename":157,"language":164,"meta":165,"style":165},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export { default as products } from \".\u002Fproducts.json\";\nexport { default as promocodes } from \".\u002Fpromocodes.json\";\n","ts","",[105,167,168,210],{"__ignoreMap":165},[169,170,173,177,181,184,187,191,194,197,200,204,207],"span",{"class":171,"line":172},"line",1,[169,174,176],{"class":175},"s7zQu","export",[169,178,180],{"class":179},"sMK4o"," {",[169,182,183],{"class":175}," default",[169,185,186],{"class":175}," as",[169,188,190],{"class":189},"sTEyZ"," products",[169,192,193],{"class":179}," }",[169,195,196],{"class":175}," from",[169,198,199],{"class":179}," \"",[169,201,203],{"class":202},"sfazB",".\u002Fproducts.json",[169,205,206],{"class":179},"\"",[169,208,209],{"class":179},";\n",[169,211,213,215,217,219,221,224,226,228,230,233,235],{"class":171,"line":212},2,[169,214,176],{"class":175},[169,216,180],{"class":179},[169,218,183],{"class":175},[169,220,186],{"class":175},[169,222,223],{"class":189}," promocodes",[169,225,193],{"class":179},[169,227,196],{"class":175},[169,229,199],{"class":179},[169,231,232],{"class":202},".\u002Fpromocodes.json",[169,234,206],{"class":179},[169,236,209],{"class":179},[96,238,239],{},"Pages import data directly from this file:",[160,241,243],{"className":162,"code":242,"language":164,"meta":165,"style":165},"import { products } from \"~\u002Fmocks\";\nimport { promocodes } from \"~\u002Fmocks\";\n",[105,244,245,267],{"__ignoreMap":165},[169,246,247,250,252,254,256,258,260,263,265],{"class":171,"line":172},[169,248,249],{"class":175},"import",[169,251,180],{"class":179},[169,253,190],{"class":189},[169,255,193],{"class":179},[169,257,196],{"class":175},[169,259,199],{"class":179},[169,261,262],{"class":202},"~\u002Fmocks",[169,264,206],{"class":179},[169,266,209],{"class":179},[169,268,269,271,273,275,277,279,281,283,285],{"class":171,"line":212},[169,270,249],{"class":175},[169,272,180],{"class":179},[169,274,223],{"class":189},[169,276,193],{"class":179},[169,278,196],{"class":175},[169,280,199],{"class":179},[169,282,262],{"class":202},[169,284,206],{"class":179},[169,286,209],{"class":179},[96,288,289,290,293,294,297],{},"To switch to a real backend, follow the steps below. The approach uses Nuxt's ",[105,291,292],{},"useRuntimeConfig"," for environment variables and a shared ",[105,295,296],{},"useApi"," composable as a single entry point for all requests.",[117,299,301],{"id":300},"connecting-a-real-api","Connecting a Real API",[303,304,305,310,317,335,341,420,427,431,434,651,655,664,702,705,709,716],"steps",{},[306,307,309],"h3",{"id":308},"set-your-api-base-url","Set Your API Base URL",[96,311,312,313,316],{},"Add your backend URL to ",[105,314,315],{},".env"," at the project root:",[160,318,322],{"className":319,"code":320,"filename":315,"language":321,"meta":165,"style":165},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","NUXT_PUBLIC_API_BASE=https:\u002F\u002Fapi.yourserver.com\n","bash",[105,323,324],{"__ignoreMap":165},[169,325,326,329,332],{"class":171,"line":172},[169,327,328],{"class":189},"NUXT_PUBLIC_API_BASE",[169,330,331],{"class":179},"=",[169,333,334],{"class":202},"https:\u002F\u002Fapi.yourserver.com\n",[96,336,337,338,158],{},"Then expose it in ",[105,339,340],{},"nuxt.config.ts",[160,342,344],{"className":162,"code":343,"filename":340,"language":164,"meta":165,"style":165},"export default defineNuxtConfig({\n  runtimeConfig: {\n    public: {\n      apiBase: \"\",\n    },\n  },\n});\n",[105,345,346,362,373,383,397,403,409],{"__ignoreMap":165},[169,347,348,350,352,356,359],{"class":171,"line":172},[169,349,176],{"class":175},[169,351,183],{"class":175},[169,353,355],{"class":354},"s2Zo4"," defineNuxtConfig",[169,357,358],{"class":189},"(",[169,360,361],{"class":179},"{\n",[169,363,364,368,370],{"class":171,"line":212},[169,365,367],{"class":366},"swJcz","  runtimeConfig",[169,369,158],{"class":179},[169,371,372],{"class":179}," {\n",[169,374,376,379,381],{"class":171,"line":375},3,[169,377,378],{"class":366},"    public",[169,380,158],{"class":179},[169,382,372],{"class":179},[169,384,386,389,391,394],{"class":171,"line":385},4,[169,387,388],{"class":366},"      apiBase",[169,390,158],{"class":179},[169,392,393],{"class":179}," \"\"",[169,395,396],{"class":179},",\n",[169,398,400],{"class":171,"line":399},5,[169,401,402],{"class":179},"    },\n",[169,404,406],{"class":171,"line":405},6,[169,407,408],{"class":179},"  },\n",[169,410,412,415,418],{"class":171,"line":411},7,[169,413,414],{"class":179},"}",[169,416,417],{"class":189},")",[169,419,209],{"class":179},[96,421,422,423,426],{},"Variables under ",[105,424,425],{},"public"," are available both on the server and in the browser.",[306,428,430],{"id":429},"create-a-base-api-composable","Create a Base API Composable",[96,432,433],{},"Create one shared composable that all others will use. It automatically picks up the base URL and attaches an authorization header if a token is present:",[160,435,438],{"className":162,"code":436,"filename":437,"language":164,"meta":165,"style":165},"export const useApi = \u003CT>(endpoint: string) => {\n  const {\n    public: { apiBase },\n  } = useRuntimeConfig();\n  const token = useCookie(\"auth_token\");\n\n  return useFetch\u003CT>(`${apiBase}${endpoint}`, {\n    headers: token.value ? { Authorization: `Bearer ${token.value}` } : {},\n  });\n};\n","app\u002Fcomposables\u002FuseApi.ts",[105,439,440,479,486,500,516,541,547,584,636,645],{"__ignoreMap":165},[169,441,442,444,448,451,453,456,460,463,467,469,472,474,477],{"class":171,"line":172},[169,443,176],{"class":175},[169,445,447],{"class":446},"spNyl"," const",[169,449,450],{"class":189}," useApi ",[169,452,331],{"class":179},[169,454,455],{"class":179}," \u003C",[169,457,459],{"class":458},"sBMFI","T",[169,461,462],{"class":179},">(",[169,464,466],{"class":465},"sHdIc","endpoint",[169,468,158],{"class":179},[169,470,471],{"class":458}," string",[169,473,417],{"class":179},[169,475,476],{"class":446}," =>",[169,478,372],{"class":179},[169,480,481,484],{"class":171,"line":212},[169,482,483],{"class":446},"  const",[169,485,372],{"class":179},[169,487,488,490,492,494,497],{"class":171,"line":375},[169,489,378],{"class":366},[169,491,158],{"class":179},[169,493,180],{"class":179},[169,495,496],{"class":189}," apiBase",[169,498,499],{"class":179}," },\n",[169,501,502,505,508,511,514],{"class":171,"line":385},[169,503,504],{"class":179},"  }",[169,506,507],{"class":179}," =",[169,509,510],{"class":354}," useRuntimeConfig",[169,512,513],{"class":366},"()",[169,515,209],{"class":179},[169,517,518,520,523,525,528,530,532,535,537,539],{"class":171,"line":399},[169,519,483],{"class":446},[169,521,522],{"class":189}," token",[169,524,507],{"class":179},[169,526,527],{"class":354}," useCookie",[169,529,358],{"class":366},[169,531,206],{"class":179},[169,533,534],{"class":202},"auth_token",[169,536,206],{"class":179},[169,538,417],{"class":366},[169,540,209],{"class":179},[169,542,543],{"class":171,"line":405},[169,544,546],{"emptyLinePlaceholder":545},true,"\n",[169,548,549,552,555,558,560,563,565,568,571,574,576,579,582],{"class":171,"line":411},[169,550,551],{"class":175},"  return",[169,553,554],{"class":354}," useFetch",[169,556,557],{"class":179},"\u003C",[169,559,459],{"class":458},[169,561,562],{"class":179},">",[169,564,358],{"class":366},[169,566,567],{"class":179},"`${",[169,569,570],{"class":189},"apiBase",[169,572,573],{"class":179},"}${",[169,575,466],{"class":189},[169,577,578],{"class":179},"}`",[169,580,581],{"class":179},",",[169,583,372],{"class":179},[169,585,587,590,592,594,597,600,603,605,608,610,613,616,619,622,624,626,628,630,633],{"class":171,"line":586},8,[169,588,589],{"class":366},"    headers",[169,591,158],{"class":179},[169,593,522],{"class":189},[169,595,596],{"class":179},".",[169,598,599],{"class":189},"value",[169,601,602],{"class":179}," ?",[169,604,180],{"class":179},[169,606,607],{"class":366}," Authorization",[169,609,158],{"class":179},[169,611,612],{"class":179}," `",[169,614,615],{"class":202},"Bearer ",[169,617,618],{"class":179},"${",[169,620,621],{"class":189},"token",[169,623,596],{"class":179},[169,625,599],{"class":189},[169,627,578],{"class":179},[169,629,193],{"class":179},[169,631,632],{"class":179}," :",[169,634,635],{"class":179}," {},\n",[169,637,639,641,643],{"class":171,"line":638},9,[169,640,504],{"class":179},[169,642,417],{"class":366},[169,644,209],{"class":179},[169,646,648],{"class":171,"line":647},10,[169,649,650],{"class":179},"};\n",[306,652,654],{"id":653},"replace-json-sources-with-real-endpoints","Replace JSON Sources with Real Endpoints",[96,656,657,658,661,662,158],{},"Instead of pointing to ",[105,659,660],{},"app\u002Fmocks\u002Fproducts.json",", call your real endpoint through ",[105,663,296],{},[160,665,668],{"className":162,"code":666,"filename":667,"language":164,"meta":165,"style":165},"export const useProducts = () => useApi(\"\u002Fproducts\");\n","app\u002Fcomposables\u002FuseProducts.ts",[105,669,670],{"__ignoreMap":165},[169,671,672,674,676,679,681,684,686,689,691,693,696,698,700],{"class":171,"line":172},[169,673,176],{"class":175},[169,675,447],{"class":446},[169,677,678],{"class":189}," useProducts ",[169,680,331],{"class":179},[169,682,683],{"class":179}," ()",[169,685,476],{"class":446},[169,687,688],{"class":354}," useApi",[169,690,358],{"class":189},[169,692,206],{"class":179},[169,694,695],{"class":202},"\u002Fproducts",[169,697,206],{"class":179},[169,699,417],{"class":189},[169,701,209],{"class":179},[96,703,704],{},"All other composables follow the same pattern — one line each.",[306,706,708],{"id":707},"use-the-composable-in-a-component","Use the Composable in a Component",[96,710,711,712,715],{},"Nuxt auto-imports everything from ",[105,713,714],{},"app\u002Fcomposables\u002F"," — no manual imports needed:",[160,717,722],{"className":718,"code":719,"filename":720,"language":721,"meta":165,"style":165},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst { data: products, pending, error } = await useProducts();\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"pending\">Loading...\u003C\u002Fdiv>\n  \u003Cdiv v-else-if=\"error\">Error: {{ error }}\u003C\u002Fdiv>\n  \u003Cul v-else>\n    \u003Cli v-for=\"product in products\" :key=\"product.id\">{{ product.name }}\u003C\u002Fli>\n  \u003C\u002Ful>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FProductList.vue","vue",[105,723,724,748,786,795,799,808,839,868,880,923,932],{"__ignoreMap":165},[169,725,726,728,731,734,737,739,741,743,745],{"class":171,"line":172},[169,727,557],{"class":179},[169,729,730],{"class":366},"script",[169,732,733],{"class":446}," setup",[169,735,736],{"class":446}," lang",[169,738,331],{"class":179},[169,740,206],{"class":179},[169,742,164],{"class":202},[169,744,206],{"class":179},[169,746,747],{"class":179},">\n",[169,749,750,753,755,758,760,762,764,767,769,772,774,776,779,782,784],{"class":171,"line":212},[169,751,752],{"class":446},"const",[169,754,180],{"class":179},[169,756,757],{"class":366}," data",[169,759,158],{"class":179},[169,761,190],{"class":189},[169,763,581],{"class":179},[169,765,766],{"class":189}," pending",[169,768,581],{"class":179},[169,770,771],{"class":189}," error ",[169,773,414],{"class":179},[169,775,507],{"class":179},[169,777,778],{"class":175}," await",[169,780,781],{"class":354}," useProducts",[169,783,513],{"class":189},[169,785,209],{"class":179},[169,787,788,791,793],{"class":171,"line":375},[169,789,790],{"class":179},"\u003C\u002F",[169,792,730],{"class":366},[169,794,747],{"class":179},[169,796,797],{"class":171,"line":385},[169,798,546],{"emptyLinePlaceholder":545},[169,800,801,803,806],{"class":171,"line":399},[169,802,557],{"class":179},[169,804,805],{"class":366},"template",[169,807,747],{"class":179},[169,809,810,813,816,819,821,823,826,828,830,833,835,837],{"class":171,"line":405},[169,811,812],{"class":179},"  \u003C",[169,814,815],{"class":366},"div",[169,817,818],{"class":446}," v-if",[169,820,331],{"class":179},[169,822,206],{"class":179},[169,824,825],{"class":202},"pending",[169,827,206],{"class":179},[169,829,562],{"class":179},[169,831,832],{"class":189},"Loading...",[169,834,790],{"class":179},[169,836,815],{"class":366},[169,838,747],{"class":179},[169,840,841,843,845,848,850,852,855,857,859,862,864,866],{"class":171,"line":411},[169,842,812],{"class":179},[169,844,815],{"class":366},[169,846,847],{"class":446}," v-else-if",[169,849,331],{"class":179},[169,851,206],{"class":179},[169,853,854],{"class":202},"error",[169,856,206],{"class":179},[169,858,562],{"class":179},[169,860,861],{"class":189},"Error: {{ error }}",[169,863,790],{"class":179},[169,865,815],{"class":366},[169,867,747],{"class":179},[169,869,870,872,875,878],{"class":171,"line":586},[169,871,812],{"class":179},[169,873,874],{"class":366},"ul",[169,876,877],{"class":446}," v-else",[169,879,747],{"class":179},[169,881,882,885,888,891,893,895,898,900,903,905,907,910,912,914,917,919,921],{"class":171,"line":638},[169,883,884],{"class":179},"    \u003C",[169,886,887],{"class":366},"li",[169,889,890],{"class":446}," v-for",[169,892,331],{"class":179},[169,894,206],{"class":179},[169,896,897],{"class":202},"product in products",[169,899,206],{"class":179},[169,901,902],{"class":446}," :key",[169,904,331],{"class":179},[169,906,206],{"class":179},[169,908,909],{"class":202},"product.id",[169,911,206],{"class":179},[169,913,562],{"class":179},[169,915,916],{"class":189},"{{ product.name }}",[169,918,790],{"class":179},[169,920,887],{"class":366},[169,922,747],{"class":179},[169,924,925,928,930],{"class":171,"line":647},[169,926,927],{"class":179},"  \u003C\u002F",[169,929,874],{"class":366},[169,931,747],{"class":179},[169,933,935,937,939],{"class":171,"line":934},11,[169,936,790],{"class":179},[169,938,805],{"class":366},[169,940,747],{"class":179},[117,942,944],{"id":943},"summary","Summary",[146,946,949],{"color":947,"icon":948},"info","i-lucide-lightbulb",[96,950,951,952,954,955,958,959,961,962,964],{},"Keep ",[105,953,315],{}," out of version control — add it to ",[105,956,957],{},".gitignore",". Store your real API base URL there and access it via ",[105,960,292],{},". Use a single ",[105,963,296],{}," composable as the base for all data fetching so that auth headers, base URLs, and other settings are defined in one place.",[966,967,968],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":165,"searchDepth":172,"depth":212,"links":970},[971,972,973,974],{"id":119,"depth":212,"text":120},{"id":143,"depth":212,"text":144},{"id":300,"depth":212,"text":301},{"id":943,"depth":212,"text":944},"Learn how to work with APIs and integrate external services.","md",null,{},{"icon":41},{"title":38,"description":975},"amxX8I7uBnrVjr6XjeuMNkaMbrcdeKAjJ9r0PoOZNGY",[983,985],{"title":33,"path":34,"stem":35,"description":984,"icon":36,"children":-1},"Build and deploy the project for production using recommended methods.",{"title":43,"path":44,"stem":45,"description":986,"icon":46,"children":-1},"How to connect Rosavo to a real backend using PayloadCMS.",1784271367332]