[{"data":1,"prerenderedAt":877},["ShallowReactive",2],{"navigation_docs_id":3,"-id-guide-media":88,"-id-guide-media-surround":872},[4,18,51],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Getting Started","\u002Fid\u002Fgetting-started","id\u002F1.getting-started",[9,13],{"title":10,"path":11,"stem":12},"Pengenalan","\u002Fid\u002Fgetting-started\u002Fintroduction","id\u002F1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Instalasi & Konfigurasi","\u002Fid\u002Fgetting-started\u002Finstallation","id\u002F1.getting-started\u002F2.installation",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Guide","\u002Fid\u002Fguide","id\u002F2.guide",[23,27,31,35,39,43,47],{"title":24,"path":25,"stem":26},"Contextual Editing","\u002Fid\u002Fguide\u002Fcontextual-editing","id\u002F2.guide\u002F1.contextual-editing",{"title":28,"path":29,"stem":30},"Preview Mode","\u002Fid\u002Fguide\u002Fpreview-mode","id\u002F2.guide\u002F2.preview-mode",{"title":32,"path":33,"stem":34},"Tina Cloud & Mode Editing","\u002Fid\u002Fguide\u002Ftina-cloud","id\u002F2.guide\u002F3.tina-cloud",{"title":36,"path":37,"stem":38},"Kompatibilitas Nuxt Content","\u002Fid\u002Fguide\u002Fnuxt-content","id\u002F2.guide\u002F4.nuxt-content",{"title":40,"path":41,"stem":42},"Media","\u002Fid\u002Fguide\u002Fmedia","id\u002F2.guide\u002F5.media",{"title":44,"path":45,"stem":46},"Rich-Text Lanjutan","\u002Fid\u002Fguide\u002Frich-text-advanced","id\u002F2.guide\u002F6.rich-text-advanced",{"title":48,"path":49,"stem":50},"Deployment","\u002Fid\u002Fguide\u002Fdeployment","id\u002F2.guide\u002F7.deployment",{"title":52,"path":53,"stem":54,"children":55,"page":17},"Api","\u002Fid\u002Fapi","id\u002F3.api",[56,60,64,68,72,76,80,84],{"title":57,"path":58,"stem":59},"useTina()","\u002Fid\u002Fapi\u002Fuse-tina","id\u002F3.api\u002F1.use-tina",{"title":61,"path":62,"stem":63},"useTinaBridge()","\u002Fid\u002Fapi\u002Fuse-tina-bridge","id\u002F3.api\u002F2.use-tina-bridge",{"title":65,"path":66,"stem":67},"useTinaPreview()","\u002Fid\u002Fapi\u002Fuse-tina-preview","id\u002F3.api\u002F3.use-tina-preview",{"title":69,"path":70,"stem":71},"\u003CTinaProvider>","\u002Fid\u002Fapi\u002Ftina-provider","id\u002F3.api\u002F4.tina-provider",{"title":73,"path":74,"stem":75},"\u003CTinaMarkdown>","\u002Fid\u002Fapi\u002Ftina-markdown","id\u002F3.api\u002F5.tina-markdown",{"title":77,"path":78,"stem":79},"\u003CTinaMermaid>","\u002Fid\u002Fapi\u002Ftina-mermaid","id\u002F3.api\u002F6.tina-mermaid",{"title":81,"path":82,"stem":83},"Konfigurasi Module","\u002Fid\u002Fapi\u002Fconfiguration","id\u002F3.api\u002F7.configuration",{"title":85,"path":86,"stem":87},"Tipe Field","\u002Fid\u002Fapi\u002Ffield-types","id\u002F3.api\u002F8.field-types",{"id":89,"title":40,"body":90,"description":866,"extension":867,"links":868,"meta":869,"navigation":454,"path":41,"seo":870,"stem":42,"__hash__":871},"docs_id\u002Fid\u002F2.guide\u002F5.media.md",{"type":91,"value":92,"toc":853},"minimark",[93,98,115,199,202,206,213,256,266,269,278,283,392,411,415,422,487,555,559,580,587,664,849],[94,95,97],"h2",{"id":96},"default-berbasis-git","Default: berbasis git",[99,100,101,102,106,107,110,111,114],"p",{},"Tanpa konfigurasi tambahan, file yang diupload lewat field ",[103,104,105],"code",{},"image"," langsung di-commit ke repo, di bawah ",[103,108,109],{},"media.tina"," di ",[103,112,113],{},"tina\u002Fconfig.ts",":",[116,117,122],"pre",{"className":118,"code":119,"language":120,"meta":121,"style":121},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","media: {\n  tina: {\n    mediaRoot: 'uploads',\n    publicFolder: 'public',\n  },\n}\n","ts","",[103,123,124,139,149,170,187,193],{"__ignoreMap":121},[125,126,129,133,136],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"sBMFI","media",[125,134,114],{"class":135},"sMK4o",[125,137,138],{"class":135}," {\n",[125,140,142,145,147],{"class":127,"line":141},2,[125,143,144],{"class":131},"  tina",[125,146,114],{"class":135},[125,148,138],{"class":135},[125,150,152,155,157,160,164,167],{"class":127,"line":151},3,[125,153,154],{"class":131},"    mediaRoot",[125,156,114],{"class":135},[125,158,159],{"class":135}," '",[125,161,163],{"class":162},"sfazB","uploads",[125,165,166],{"class":135},"'",[125,168,169],{"class":135},",\n",[125,171,173,176,178,180,183,185],{"class":127,"line":172},4,[125,174,175],{"class":131},"    publicFolder",[125,177,114],{"class":135},[125,179,159],{"class":135},[125,181,182],{"class":162},"public",[125,184,166],{"class":135},[125,186,169],{"class":135},[125,188,190],{"class":127,"line":189},5,[125,191,192],{"class":135},"  },\n",[125,194,196],{"class":127,"line":195},6,[125,197,198],{"class":135},"}\n",[99,200,201],{},"Opsi paling simpel, nggak butuh infrastruktur tambahan, tapi setiap upload jadi commit Git.",[94,203,205],{"id":204},"backend-media-handler","Backend media handler",[99,207,208,209,212],{},"Buat external storage, ",[103,210,211],{},"nuxt-tina"," nyambungin backend media handler satu-satu. Cloudinary yang udah beneran diimplementasikan sekarang. Yang lain masih di roadmap, belum tersedia:",[214,215,216,229],"table",{},[217,218,219],"thead",{},[220,221,222,226],"tr",{},[223,224,225],"th",{},"Backend",[223,227,228],{},"Status",[230,231,232,241,249],"tbody",{},[220,233,234,238],{},[235,236,237],"td",{},"Cloudinary",[235,239,240],{},"Tersedia",[220,242,243,246],{},[235,244,245],{},"AWS S3 Bucket",[235,247,248],{},"Segera hadir",[220,250,251,254],{},[235,252,253],{},"DigitalOcean Spaces",[235,255,248],{},[99,257,258,261,262,265],{},[103,259,260],{},"media.provider"," sekarang cuma nerima ",[103,263,264],{},"'tina' \\| 'cloudinary'",": coba isi yang lain langsung jadi type error, bukan opsi yang diam-diam diabaikan.",[94,267,237],{"id":268},"cloudinary",[99,270,271,273,274,277],{},[103,272,211],{}," udah nyediain adapter Cloudinary siap pakai lewat ",[103,275,276],{},"next-tinacms-cloudinary"," (bukan hard dependency: cuma di-import secara dinamis pas kamu beneran pakai).",[279,280,282],"h3",{"id":281},"_1-aktifkan-server-route-nya","1. Aktifkan server route-nya",[116,284,286],{"className":118,"code":285,"language":120,"meta":121,"style":121},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['nuxt-tina'],\n  tina: {\n    media: {\n      provider: 'cloudinary', \u002F\u002F default: 'tina'\n    },\n  },\n})\n",[103,287,288,294,314,336,344,353,372,378,383],{"__ignoreMap":121},[125,289,290],{"class":127,"line":128},[125,291,293],{"class":292},"sHwdD","\u002F\u002F nuxt.config.ts\n",[125,295,296,300,303,307,311],{"class":127,"line":141},[125,297,299],{"class":298},"s7zQu","export",[125,301,302],{"class":298}," default",[125,304,306],{"class":305},"s2Zo4"," defineNuxtConfig",[125,308,310],{"class":309},"sTEyZ","(",[125,312,313],{"class":135},"{\n",[125,315,316,320,322,325,327,329,331,334],{"class":127,"line":151},[125,317,319],{"class":318},"swJcz","  modules",[125,321,114],{"class":135},[125,323,324],{"class":309}," [",[125,326,166],{"class":135},[125,328,211],{"class":162},[125,330,166],{"class":135},[125,332,333],{"class":309},"]",[125,335,169],{"class":135},[125,337,338,340,342],{"class":127,"line":172},[125,339,144],{"class":318},[125,341,114],{"class":135},[125,343,138],{"class":135},[125,345,346,349,351],{"class":127,"line":189},[125,347,348],{"class":318},"    media",[125,350,114],{"class":135},[125,352,138],{"class":135},[125,354,355,358,360,362,364,366,369],{"class":127,"line":195},[125,356,357],{"class":318},"      provider",[125,359,114],{"class":135},[125,361,159],{"class":135},[125,363,268],{"class":162},[125,365,166],{"class":135},[125,367,368],{"class":135},",",[125,370,371],{"class":292}," \u002F\u002F default: 'tina'\n",[125,373,375],{"class":127,"line":374},7,[125,376,377],{"class":135},"    },\n",[125,379,381],{"class":127,"line":380},8,[125,382,192],{"class":135},[125,384,386,389],{"class":127,"line":385},9,[125,387,388],{"class":135},"}",[125,390,391],{"class":309},")\n",[99,393,394,395,398,399,402,403,405,406,410],{},"Ini ngedaftarin ",[103,396,397],{},"\u002Fapi\u002Fcloudinary\u002F**"," (adapter Nitro buat ",[103,400,401],{},"createMediaHandler"," dari ",[103,404,276],{},"), ",[407,408,409],"strong",{},"cuma kalau diaktifkan",", jadi kalau kamu nggak pakai Cloudinary, package itu nggak pernah ke-bundle sama sekali.",[279,412,414],{"id":413},"_2-setup-credentials-nya","2. Setup credentials-nya",[99,416,417,418,421],{},"Cloudinary butuh ",[407,419,420],{},"tiga set"," env var yang berbeda. Ini bukan duplikasi yang bisa dipangkas. Masing-masing dibaca sama consumer yang beda:",[116,423,428],{"className":424,"code":425,"filename":426,"language":427,"meta":121,"style":121},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Dibaca sama Nitro runtime (handler \u002Fapi\u002Fcloudinary\u002F**)\nNUXT_TINA_CLOUDINARY_CLOUD_NAME=\u003Ccloud-name>\nNUXT_TINA_CLOUDINARY_API_KEY=\u003Capi-key>\nNUXT_TINA_CLOUDINARY_API_SECRET=\u003Capi-secret>\n\n# Dibaca sama CLI tinacms (tinacms build \u002F tinacms dev)\nTINA_TOKEN=\u003Csama-dengan-NUXT_TINA_TOKEN>\nTINA_PUBLIC_CLIENT_ID=\u003Csama-dengan-NUXT_TINA_CLIENT_ID>\n\n# Dibaca sama next-tinacms-cloudinary (package ini dari ekosistem Next.js)\nNEXT_PUBLIC_TINA_CLIENT_ID=\u003Csama-dengan-NUXT_TINA_CLIENT_ID>\n",".env","env",[103,429,430,435,440,445,450,456,461,466,471,475,481],{"__ignoreMap":121},[125,431,432],{"class":127,"line":128},[125,433,434],{},"# Dibaca sama Nitro runtime (handler \u002Fapi\u002Fcloudinary\u002F**)\n",[125,436,437],{"class":127,"line":141},[125,438,439],{},"NUXT_TINA_CLOUDINARY_CLOUD_NAME=\u003Ccloud-name>\n",[125,441,442],{"class":127,"line":151},[125,443,444],{},"NUXT_TINA_CLOUDINARY_API_KEY=\u003Capi-key>\n",[125,446,447],{"class":127,"line":172},[125,448,449],{},"NUXT_TINA_CLOUDINARY_API_SECRET=\u003Capi-secret>\n",[125,451,452],{"class":127,"line":189},[125,453,455],{"emptyLinePlaceholder":454},true,"\n",[125,457,458],{"class":127,"line":195},[125,459,460],{},"# Dibaca sama CLI tinacms (tinacms build \u002F tinacms dev)\n",[125,462,463],{"class":127,"line":374},[125,464,465],{},"TINA_TOKEN=\u003Csama-dengan-NUXT_TINA_TOKEN>\n",[125,467,468],{"class":127,"line":380},[125,469,470],{},"TINA_PUBLIC_CLIENT_ID=\u003Csama-dengan-NUXT_TINA_CLIENT_ID>\n",[125,472,473],{"class":127,"line":385},[125,474,455],{"emptyLinePlaceholder":454},[125,476,478],{"class":127,"line":477},10,[125,479,480],{},"# Dibaca sama next-tinacms-cloudinary (package ini dari ekosistem Next.js)\n",[125,482,484],{"class":127,"line":483},11,[125,485,486],{},"NEXT_PUBLIC_TINA_CLIENT_ID=\u003Csama-dengan-NUXT_TINA_CLIENT_ID>\n",[214,488,489,502],{},[217,490,491],{},[220,492,493,496,499],{},[223,494,495],{},"Var",[223,497,498],{},"Dibaca sama",[223,500,501],{},"Kenapa format ini",[230,503,504,517,537],{},[220,505,506,511,514],{},[235,507,508],{},[103,509,510],{},"NUXT_TINA_*",[235,512,513],{},"Nitro server runtime",[235,515,516],{},"Konvensi prefix env Nuxt sendiri",[220,518,519,528,534],{},[235,520,521,524,525],{},[103,522,523],{},"TINA_TOKEN"," + ",[103,526,527],{},"TINA_PUBLIC_CLIENT_ID",[235,529,530,531],{},"CLI ",[103,532,533],{},"tinacms",[235,535,536],{},"CLI-nya punya konvensi naming sendiri",[220,538,539,544,549],{},[235,540,541],{},[103,542,543],{},"NEXT_PUBLIC_TINA_CLIENT_ID",[235,545,546,547],{},"internal ",[103,548,276],{},[235,550,551,552],{},"Package ini hardcode baca env var dengan prefix ",[103,553,554],{},"NEXT_PUBLIC_",[279,556,558],{"id":557},"_3-install-dependency-nya","3. Install dependency-nya",[116,560,564],{"className":561,"code":562,"language":563,"meta":121,"style":121},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add next-tinacms-cloudinary @tinacms\u002Fauth\n","bash",[103,565,566],{"__ignoreMap":121},[125,567,568,571,574,577],{"class":127,"line":128},[125,569,570],{"class":131},"pnpm",[125,572,573],{"class":162}," add",[125,575,576],{"class":162}," next-tinacms-cloudinary",[125,578,579],{"class":162}," @tinacms\u002Fauth\n",[279,581,583,584,586],{"id":582},"_4-arahkan-tinaconfigts-ke-cloudinary","4. Arahkan ",[103,585,113],{}," ke Cloudinary",[116,588,590],{"className":118,"code":589,"language":120,"meta":121,"style":121},"import { tinaCloudinaryMediaStore } from 'nuxt-tina\u002Fmedia'\n\nexport default defineConfig({\n  media: {\n    loadCustomStore: tinaCloudinaryMediaStore,\n  },\n})\n",[103,591,592,617,621,634,643,654,658],{"__ignoreMap":121},[125,593,594,597,600,603,606,609,611,614],{"class":127,"line":128},[125,595,596],{"class":298},"import",[125,598,599],{"class":135}," {",[125,601,602],{"class":309}," tinaCloudinaryMediaStore",[125,604,605],{"class":135}," }",[125,607,608],{"class":298}," from",[125,610,159],{"class":135},[125,612,613],{"class":162},"nuxt-tina\u002Fmedia",[125,615,616],{"class":135},"'\n",[125,618,619],{"class":127,"line":141},[125,620,455],{"emptyLinePlaceholder":454},[125,622,623,625,627,630,632],{"class":127,"line":151},[125,624,299],{"class":298},[125,626,302],{"class":298},[125,628,629],{"class":305}," defineConfig",[125,631,310],{"class":309},[125,633,313],{"class":135},[125,635,636,639,641],{"class":127,"line":172},[125,637,638],{"class":318},"  media",[125,640,114],{"class":135},[125,642,138],{"class":135},[125,644,645,648,650,652],{"class":127,"line":189},[125,646,647],{"class":318},"    loadCustomStore",[125,649,114],{"class":135},[125,651,602],{"class":309},[125,653,169],{"class":135},[125,655,656],{"class":127,"line":195},[125,657,192],{"class":135},[125,659,660,662],{"class":127,"line":374},[125,661,388],{"class":135},[125,663,391],{"class":309},[665,666,667,675,699,702,779,805,811,836],"div",{"dataTinaFieldWarning":121},[94,668,670,671,674],{"id":669},"️-gotcha-jangan-pakai-processenv-di-sini-buat-toggle-onoff","⚠️ Gotcha: jangan pakai ",[103,672,673],{},"process.env"," di sini buat toggle on\u002Foff",[99,676,677,678,110,680,682,683,686,687,690,691,694,695,698],{},"Bagian ",[103,679,132],{},[103,681,113],{}," ",[407,684,685],{},"juga ke-bundle ke JavaScript yang jalan di browser admin"," (nggak cuma dieksekusi di server): ",[103,688,689],{},"@tinacms\u002Fcli"," nyalin source mentah file ini buat bagian yang mesti jalan di client-side (",[103,692,693],{},"loadCustomStore",", ",[103,696,697],{},"ui.component"," custom, dll), bukan hasil evaluasi Node-nya.",[99,700,701],{},"Artinya kalau kamu nulis:",[116,703,705],{"className":118,"code":704,"language":120,"meta":121,"style":121},"\u002F\u002F ❌ SALAH: process.env selalu undefined di browser\nconst useCloudinary = !!process.env.NUXT_TINA_CLOUDINARY_CLOUD_NAME\nmedia: useCloudinary ? { loadCustomStore: tinaCloudinaryMediaStore } : { tina: {...} }\n",[103,706,707,712,740],{"__ignoreMap":121},[125,708,709],{"class":127,"line":128},[125,710,711],{"class":292},"\u002F\u002F ❌ SALAH: process.env selalu undefined di browser\n",[125,713,714,718,721,724,727,730,733,735,737],{"class":127,"line":141},[125,715,717],{"class":716},"spNyl","const",[125,719,720],{"class":309}," useCloudinary ",[125,722,723],{"class":135},"=",[125,725,726],{"class":135}," !!",[125,728,729],{"class":309},"process",[125,731,732],{"class":135},".",[125,734,427],{"class":309},[125,736,732],{"class":135},[125,738,739],{"class":309},"NUXT_TINA_CLOUDINARY_CLOUD_NAME\n",[125,741,742,744,746,748,751,753,756,758,761,763,766,768,771,773,776],{"class":127,"line":151},[125,743,132],{"class":131},[125,745,114],{"class":135},[125,747,720],{"class":309},[125,749,750],{"class":135},"?",[125,752,599],{"class":135},[125,754,755],{"class":318}," loadCustomStore",[125,757,114],{"class":135},[125,759,760],{"class":309}," tinaCloudinaryMediaStore ",[125,762,388],{"class":135},[125,764,765],{"class":135}," :",[125,767,599],{"class":135},[125,769,770],{"class":318}," tina",[125,772,114],{"class":135},[125,774,775],{"class":135}," {...}",[125,777,778],{"class":135}," }\n",[99,780,781,782,785,786,789,790,793,794,797,798,801,802,732],{},"...toggle-nya ",[407,783,784],{},"selalu balik ke default"," di admin (Media Manager browsing filesystem project, bukan Cloudinary), meskipun credentials-nya valid dan server route-nya jalan normal pas ditest langsung pakai ",[103,787,788],{},"curl",". Cek ",[103,791,792],{},"tina\u002F__generated__\u002Fconfig.prebuild.jsx"," kalau mau lihat buktinya: ekspresi ",[103,795,796],{},"process.env.X","-nya ada di situ apa adanya, nggak pernah di-inline jadi ",[103,799,800],{},"true","\u002F",[103,803,804],{},"false",[99,806,807,810],{},[407,808,809],{},"Fix-nya",": kalau kamu mau nyalain\u002Fmatiin Cloudinary, ubah langsung nilai literal-nya di source:",[116,812,814],{"className":118,"code":813,"language":120,"meta":121,"style":121},"\u002F\u002F ✅ BENAR: literal yang fixed, bukan ekspresi env\nconst useCloudinary = true \u002F\u002F ubah manual, jangan baca env var\n",[103,815,816,821],{"__ignoreMap":121},[125,817,818],{"class":127,"line":128},[125,819,820],{"class":292},"\u002F\u002F ✅ BENAR: literal yang fixed, bukan ekspresi env\n",[125,822,823,825,827,829,833],{"class":127,"line":141},[125,824,717],{"class":716},[125,826,720],{"class":309},[125,828,723],{"class":135},[125,830,832],{"class":831},"sfNiH"," true",[125,834,835],{"class":292}," \u002F\u002F ubah manual, jangan baca env var\n",[99,837,838,839,110,841,844,845,848],{},"Toggle di sisi server (",[103,840,260],{},[103,842,843],{},"nuxt.config.ts",") ",[407,846,847],{},"nggak kena masalah ini",": itu murni Node\u002Fbuild-time dan jalan normal pakai env var biasa.",[850,851,852],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":121,"searchDepth":141,"depth":141,"links":854},[855,856,857,864],{"id":96,"depth":141,"text":97},{"id":204,"depth":141,"text":205},{"id":268,"depth":141,"text":237,"children":858},[859,860,861,862],{"id":281,"depth":151,"text":282},{"id":413,"depth":151,"text":414},{"id":557,"depth":151,"text":558},{"id":582,"depth":151,"text":863},"4. Arahkan tina\u002Fconfig.ts ke Cloudinary",{"id":669,"depth":141,"text":865},"⚠️ Gotcha: jangan pakai process.env di sini buat toggle on\u002Foff","Media store bawaan berbasis git, dan backend media handler buat external storage.","md",null,{},{"title":40,"description":866},"MhqaoPbPa1RW8tW7pTK_VItAZPqsQgV55mmvdgO5umU",[873,875],{"title":36,"path":37,"stem":38,"description":874,"children":-1},"nuxt-tina jalan standalone: ini soal bridge opsional dan manual ke @nuxt\u002Fcontent.",{"title":44,"path":45,"stem":46,"description":876,"children":-1},"Diagram Mermaid dan custom template di field rich-text, plus satu gotcha soal parser-nya.",1789757554493]