[{"data":1,"prerenderedAt":3012},["ShallowReactive",2],{"navigation":3,"/templates/nextjs-setup-guide":95,"/templates/nextjs-setup-guide-surround":3007},[4,23,48],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/getting-started","1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"About Me","i-lucide-user",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Usage","/getting-started/usage","1.getting-started/3.usage","i-lucide-sliders",false,{"title":24,"path":25,"stem":26,"children":27,"page":22},"Essentials","/essentials","2.essentials",[28,33,38,43],{"title":29,"path":30,"stem":31,"icon":32},"Markdown Syntax","/essentials/markdown-syntax","2.essentials/1.markdown-syntax","i-lucide-heading-1",{"title":34,"path":35,"stem":36,"icon":37},"Code Blocks","/essentials/code-blocks","2.essentials/2.code-blocks","i-lucide-code-xml",{"title":39,"path":40,"stem":41,"icon":42},"Prose Components","/essentials/prose-components","2.essentials/3.prose-components","i-lucide-component",{"title":44,"path":45,"stem":46,"icon":47},"Images and Embeds","/essentials/images-embeds","2.essentials/4.images-embeds","i-lucide-image",{"title":49,"path":50,"stem":51,"children":52},"Templates","/templates","templates",[53,56,61,65,70,74,78,83,87,91],{"title":49,"path":50,"stem":54,"icon":55},"templates/index","i-lucide-archive",{"title":57,"path":58,"stem":59,"icon":60},"Panduan Setup HTML/CSS - Dari Template Statis hingga Responsive Design","/templates/html-css-setup-guide","templates/html-css-setup-guide","i-lucide-file-text",{"title":62,"path":63,"stem":64,"icon":60},"Panduan Setup Laravel - Dari Template hingga Ready Production","/templates/laravel-setup-guide","templates/laravel-setup-guide",{"title":66,"path":67,"stem":68,"icon":69},"Next.js SaaS Starter Kit - Panduan Lengkap","/templates/nextjs-saas-starter","templates/nextjs-saas-starter","i-lucide-layout-template",{"title":71,"path":72,"stem":73,"icon":60},"Panduan Setup Next.js - Dari Template hingga Production Ready","/templates/nextjs-setup-guide","templates/nextjs-setup-guide",{"title":75,"path":76,"stem":77,"icon":16},"Panduan Membeli & Download Template","/templates/panduan-beli-download","templates/panduan-beli-download",{"title":79,"path":80,"stem":81,"icon":82},"Panduan Setup Lengkap Semua Tech-Stack","/templates/panduan-setup-all-stack","templates/panduan-setup-all-stack","i-lucide-rocket",{"title":84,"path":85,"stem":86,"icon":60},"Panduan Setup PHP - Dari Template Hingga Production Deployment","/templates/php-setup-guide","templates/php-setup-guide",{"title":88,"path":89,"stem":90,"icon":60},"Product Documentation Template","/templates/product-documentation","templates/product-documentation",{"title":92,"path":93,"stem":94,"icon":60},"Panduan Setup React - Dari Download hingga Konfigurasi","/templates/react-setup-guide","templates/react-setup-guide",{"id":96,"title":71,"body":97,"description":3000,"extension":3001,"links":3002,"meta":3003,"navigation":3004,"path":72,"seo":3005,"stem":73,"__hash__":3006},"docs/templates/nextjs-setup-guide.md",{"type":98,"value":99,"toc":2950},"minimark",[100,105,109,114,119,157,161,199,203,207,319,323,328,333,354,359,378,381,396,401,426,430,434,476,480,527,532,594,598,631,640,648,653,664,668,675,1048,1052,1058,1062,1066,1084,1088,1125,1129,1166,1170,1174,1219,1224,1338,1365,1369,1393,1398,1589,1593,1728,1732,1736,1741,1914,1918,2038,2042,2045,2111,2115,2218,2222,2393,2397,2401,2472,2476,2494,2498,2565,2569,2640,2644,2648,2679,2683,2710,2714,2760,2764,2809,2813,2819,2835,2841,2855,2859,2933,2936,2946],[101,102,104],"h1",{"id":103},"panduan-setup-nextjs-dari-template-hingga-production-ready","📄 Panduan Setup Next.js - Dari Template hingga Production Ready",[106,107,108],"p",{},"Panduan komprehensif untuk setup Next.js dengan template, dari download hingga production deployment.",[110,111,113],"h2",{"id":112},"_1-prasyarat-persiapan","1. Prasyarat & Persiapan",[115,116,118],"h3",{"id":117},"requirements","Requirements",[120,121,122,130,145,151],"ul",{},[123,124,125,129],"li",{},[126,127,128],"strong",{},"Node.js"," 18.17 atau lebih baru",[123,131,132,135,136,135,139,135,142],{},[126,133,134],{},"npm"," / ",[126,137,138],{},"yarn",[126,140,141],{},"pnpm",[126,143,144],{},"bun",[123,146,147,150],{},[126,148,149],{},"Text Editor"," (VS Code recommended)",[123,152,153,156],{},[126,154,155],{},"Git"," untuk version control",[115,158,160],{"id":159},"verifikasi","Verifikasi",[162,163,168],"pre",{"className":164,"code":165,"language":166,"meta":167,"style":167},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","node --version\nnpm --version\ngit --version\n","bash","",[169,170,171,184,191],"code",{"__ignoreMap":167},[172,173,176,180],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"sBMFI","node",[172,181,183],{"class":182},"sfazB"," --version\n",[172,185,187,189],{"class":174,"line":186},2,[172,188,134],{"class":178},[172,190,183],{"class":182},[172,192,194,197],{"class":174,"line":193},3,[172,195,196],{"class":178},"git",[172,198,183],{"class":182},[110,200,202],{"id":201},"_2-memilih-cara-setup-nextjs","2. Memilih Cara Setup Next.js",[115,204,206],{"id":205},"opsi-a-create-next-app-official","Opsi A: Create-Next-App (Official)",[162,208,210],{"className":164,"code":209,"language":166,"meta":167,"style":167},"# Create project baru\nnpx create-next-app@latest my-nextjs-app\n\n# Pilih opsi saat install:\n# ✔ Would you like to use TypeScript? › No / Yes\n# ✔ Would you like to use ESLint? › Yes / No\n# ✔ Would you like to use Tailwind CSS? › Yes / No\n# ✔ Would you like to use `src/` directory? › Yes / No\n# ✔ Would you like to use App Router? › Yes / No\n# ✔ Would you like to customize the import alias? › No / Yes\n\n# Masuk folder\ncd my-nextjs-app\n\n# Jalankan development server\nnpm run dev\n",[169,211,212,218,229,235,241,247,253,259,265,271,277,282,288,297,302,308],{"__ignoreMap":167},[172,213,214],{"class":174,"line":175},[172,215,217],{"class":216},"sHwdD","# Create project baru\n",[172,219,220,223,226],{"class":174,"line":186},[172,221,222],{"class":178},"npx",[172,224,225],{"class":182}," create-next-app@latest",[172,227,228],{"class":182}," my-nextjs-app\n",[172,230,231],{"class":174,"line":193},[172,232,234],{"emptyLinePlaceholder":233},true,"\n",[172,236,238],{"class":174,"line":237},4,[172,239,240],{"class":216},"# Pilih opsi saat install:\n",[172,242,244],{"class":174,"line":243},5,[172,245,246],{"class":216},"# ✔ Would you like to use TypeScript? › No / Yes\n",[172,248,250],{"class":174,"line":249},6,[172,251,252],{"class":216},"# ✔ Would you like to use ESLint? › Yes / No\n",[172,254,256],{"class":174,"line":255},7,[172,257,258],{"class":216},"# ✔ Would you like to use Tailwind CSS? › Yes / No\n",[172,260,262],{"class":174,"line":261},8,[172,263,264],{"class":216},"# ✔ Would you like to use `src/` directory? › Yes / No\n",[172,266,268],{"class":174,"line":267},9,[172,269,270],{"class":216},"# ✔ Would you like to use App Router? › Yes / No\n",[172,272,274],{"class":174,"line":273},10,[172,275,276],{"class":216},"# ✔ Would you like to customize the import alias? › No / Yes\n",[172,278,280],{"class":174,"line":279},11,[172,281,234],{"emptyLinePlaceholder":233},[172,283,285],{"class":174,"line":284},12,[172,286,287],{"class":216},"# Masuk folder\n",[172,289,291,295],{"class":174,"line":290},13,[172,292,294],{"class":293},"s2Zo4","cd",[172,296,228],{"class":182},[172,298,300],{"class":174,"line":299},14,[172,301,234],{"emptyLinePlaceholder":233},[172,303,305],{"class":174,"line":304},15,[172,306,307],{"class":216},"# Jalankan development server\n",[172,309,311,313,316],{"class":174,"line":310},16,[172,312,134],{"class":178},[172,314,315],{"class":182}," run",[172,317,318],{"class":182}," dev\n",[115,320,322],{"id":321},"opsi-b-download-template-nextjs-premium","Opsi B: Download Template Next.js Premium",[324,325,327],"h4",{"id":326},"marketplace-populer","Marketplace Populer:",[106,329,330],{},[126,331,332],{},"1. Envato Elements / ThemeForest",[120,334,335,345,348,351],{},[123,336,337,338],{},"Cari template Next.js di ",[339,340,344],"a",{"href":341,"rel":342},"https://themeforest.net",[343],"nofollow","themeforest.net",[123,346,347],{},"Filter: \"Next.js\" atau \"React Next\"",[123,349,350],{},"Purchase atau subscribe Envato Elements",[123,352,353],{},"Download file",[106,355,356],{},[126,357,358],{},"2. Vercel Templates",[120,360,361,369,372,375],{},[123,362,363,364],{},"Kunjungi ",[339,365,368],{"href":366,"rel":367},"https://vercel.com/templates",[343],"vercel.com/templates",[123,370,371],{},"Pilih template Next.js",[123,373,374],{},"Klik \"Deploy\" untuk otomatis",[123,376,377],{},"Atau \"View Source Code\" untuk clone",[106,379,380],{},"**3. Creative Tim Next.js",[120,382,383,390,393],{},[123,384,385],{},[339,386,389],{"href":387,"rel":388},"https://creativetim.com",[343],"creativetim.com",[123,391,392],{},"Filter by \"Next.js\"",[123,394,395],{},"Download template pilihan",[106,397,398],{},[126,399,400],{},"4. UI Framework Templates",[120,402,403,411,419],{},[123,404,405,410],{},[339,406,409],{"href":407,"rel":408},"https://nextui.org",[343],"Nextui.org"," - Free Next.js templates",[123,412,413,418],{},[339,414,417],{"href":415,"rel":416},"https://ui.shadcn.com",[343],"Shadcn/ui"," - Component library",[123,420,421],{},[339,422,425],{"href":423,"rel":424},"https://github.com/vercel/next.js/tree/canary/examples",[343],"Next-Starter Templates",[110,427,429],{"id":428},"_3-setup-nextjs-template-yang-didownload","3. Setup Next.js Template yang Didownload",[115,431,433],{"id":432},"step-1-extract-initial-setup","Step 1: Extract & Initial Setup",[162,435,437],{"className":164,"code":436,"language":166,"meta":167,"style":167},"# Extract template\nunzip template-nextjs.zip\ncd template-nextjs\n\n# Lihat package.json\ncat package.json\n",[169,438,439,444,452,459,463,468],{"__ignoreMap":167},[172,440,441],{"class":174,"line":175},[172,442,443],{"class":216},"# Extract template\n",[172,445,446,449],{"class":174,"line":186},[172,447,448],{"class":178},"unzip",[172,450,451],{"class":182}," template-nextjs.zip\n",[172,453,454,456],{"class":174,"line":193},[172,455,294],{"class":293},[172,457,458],{"class":182}," template-nextjs\n",[172,460,461],{"class":174,"line":237},[172,462,234],{"emptyLinePlaceholder":233},[172,464,465],{"class":174,"line":243},[172,466,467],{"class":216},"# Lihat package.json\n",[172,469,470,473],{"class":174,"line":249},[172,471,472],{"class":178},"cat",[172,474,475],{"class":182}," package.json\n",[115,477,479],{"id":478},"step-2-install-dependencies","Step 2: Install Dependencies",[162,481,483],{"className":164,"code":482,"language":166,"meta":167,"style":167},"# Dengan npm\nnpm install\n\n# Atau dengan yarn\nyarn install\n\n# Atau dengan pnpm\npnpm install\n",[169,484,485,490,497,501,506,512,516,521],{"__ignoreMap":167},[172,486,487],{"class":174,"line":175},[172,488,489],{"class":216},"# Dengan npm\n",[172,491,492,494],{"class":174,"line":186},[172,493,134],{"class":178},[172,495,496],{"class":182}," install\n",[172,498,499],{"class":174,"line":193},[172,500,234],{"emptyLinePlaceholder":233},[172,502,503],{"class":174,"line":237},[172,504,505],{"class":216},"# Atau dengan yarn\n",[172,507,508,510],{"class":174,"line":243},[172,509,138],{"class":178},[172,511,496],{"class":182},[172,513,514],{"class":174,"line":249},[172,515,234],{"emptyLinePlaceholder":233},[172,517,518],{"class":174,"line":255},[172,519,520],{"class":216},"# Atau dengan pnpm\n",[172,522,523,525],{"class":174,"line":261},[172,524,141],{"class":178},[172,526,496],{"class":182},[106,528,529],{},[126,530,531],{},"Troubleshoot Installation:",[162,533,535],{"className":164,"code":534,"language":166,"meta":167,"style":167},"# Jika ada conflict\nnpm install --legacy-peer-deps\n\n# Clear cache jika perlu\nnpm cache clean --force\nrm -rf node_modules package-lock.json\nnpm install\n",[169,536,537,542,552,556,561,574,588],{"__ignoreMap":167},[172,538,539],{"class":174,"line":175},[172,540,541],{"class":216},"# Jika ada conflict\n",[172,543,544,546,549],{"class":174,"line":186},[172,545,134],{"class":178},[172,547,548],{"class":182}," install",[172,550,551],{"class":182}," --legacy-peer-deps\n",[172,553,554],{"class":174,"line":193},[172,555,234],{"emptyLinePlaceholder":233},[172,557,558],{"class":174,"line":237},[172,559,560],{"class":216},"# Clear cache jika perlu\n",[172,562,563,565,568,571],{"class":174,"line":243},[172,564,134],{"class":178},[172,566,567],{"class":182}," cache",[172,569,570],{"class":182}," clean",[172,572,573],{"class":182}," --force\n",[172,575,576,579,582,585],{"class":174,"line":249},[172,577,578],{"class":178},"rm",[172,580,581],{"class":182}," -rf",[172,583,584],{"class":182}," node_modules",[172,586,587],{"class":182}," package-lock.json\n",[172,589,590,592],{"class":174,"line":255},[172,591,134],{"class":178},[172,593,496],{"class":182},[115,595,597],{"id":596},"step-3-environment-configuration","Step 3: Environment Configuration",[162,599,601],{"className":164,"code":600,"language":166,"meta":167,"style":167},"# Buat .env.local (Next.js file untuk environment variables)\ncp .env.example .env.local\n# atau\ntouch .env.local\n",[169,602,603,608,619,624],{"__ignoreMap":167},[172,604,605],{"class":174,"line":175},[172,606,607],{"class":216},"# Buat .env.local (Next.js file untuk environment variables)\n",[172,609,610,613,616],{"class":174,"line":186},[172,611,612],{"class":178},"cp",[172,614,615],{"class":182}," .env.example",[172,617,618],{"class":182}," .env.local\n",[172,620,621],{"class":174,"line":193},[172,622,623],{"class":216},"# atau\n",[172,625,626,629],{"class":174,"line":237},[172,627,628],{"class":178},"touch",[172,630,618],{"class":182},[106,632,633],{},[126,634,635,636,639],{},"Contoh ",[169,637,638],{},".env.local",":",[162,641,646],{"className":642,"code":644,"language":645},[643],"language-text","NEXT_PUBLIC_API_URL=http://localhost:3000\nNEXT_PUBLIC_APP_NAME=My App\nDATABASE_URL=postgresql://user:password@localhost:5432/dbname\nAPI_SECRET_KEY=your_secret_key_here\n","text",[169,647,644],{"__ignoreMap":167},[106,649,650],{},[126,651,652],{},"Catatan:",[120,654,655,661],{},[123,656,657,660],{},[169,658,659],{},"NEXT_PUBLIC_"," = accessible di client-side",[123,662,663],{},"Tanpa prefix = server-side only",[115,665,667],{"id":666},"step-4-build-configuration-jika-perlu","Step 4: Build Configuration (jika perlu)",[106,669,670,671,674],{},"Edit ",[169,672,673],{},"next.config.js"," jika diperlukan:",[162,676,680],{"className":677,"code":678,"language":679,"meta":167,"style":167},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  // Image optimization\n  images: {\n    remotePatterns: [\n      {\n        protocol: 'https',\n        hostname: 'example.com',\n      },\n    ],\n  },\n  \n  // Redirect & Rewrite\n  async redirects() {\n    return [\n      {\n        source: '/about-us',\n        destination: '/about',\n        permanent: true,\n      },\n    ]\n  },\n\n  // Headers\n  async headers() {\n    return [\n      {\n        source: '/api/:path*',\n        headers: [\n          { key: 'Access-Control-Allow-Origin', value: '*' },\n        ],\n      },\n    ]\n  },\n}\n\nmodule.exports = nextConfig\n","javascript",[169,681,682,708,725,730,740,750,755,774,790,795,802,807,812,817,830,837,841,858,875,889,894,900,905,910,916,928,935,940,956,966,1002,1010,1015,1020,1025,1031,1036],{"__ignoreMap":167},[172,683,684,687,691,695,698,702,705],{"class":174,"line":175},[172,685,686],{"class":216},"/** ",[172,688,690],{"class":689},"s7zQu","@",[172,692,694],{"class":693},"s6hCs","type",[172,696,697],{"class":689}," {",[172,699,701],{"class":700},"sFweD","import('next').NextConfig",[172,703,704],{"class":689},"}",[172,706,707],{"class":216}," */\n",[172,709,710,714,718,722],{"class":174,"line":186},[172,711,713],{"class":712},"spNyl","const",[172,715,717],{"class":716},"sTEyZ"," nextConfig ",[172,719,721],{"class":720},"sMK4o","=",[172,723,724],{"class":720}," {\n",[172,726,727],{"class":174,"line":193},[172,728,729],{"class":216},"  // Image optimization\n",[172,731,732,736,738],{"class":174,"line":237},[172,733,735],{"class":734},"swJcz","  images",[172,737,639],{"class":720},[172,739,724],{"class":720},[172,741,742,745,747],{"class":174,"line":243},[172,743,744],{"class":734},"    remotePatterns",[172,746,639],{"class":720},[172,748,749],{"class":716}," [\n",[172,751,752],{"class":174,"line":249},[172,753,754],{"class":720},"      {\n",[172,756,757,760,762,765,768,771],{"class":174,"line":255},[172,758,759],{"class":734},"        protocol",[172,761,639],{"class":720},[172,763,764],{"class":720}," '",[172,766,767],{"class":182},"https",[172,769,770],{"class":720},"'",[172,772,773],{"class":720},",\n",[172,775,776,779,781,783,786,788],{"class":174,"line":261},[172,777,778],{"class":734},"        hostname",[172,780,639],{"class":720},[172,782,764],{"class":720},[172,784,785],{"class":182},"example.com",[172,787,770],{"class":720},[172,789,773],{"class":720},[172,791,792],{"class":174,"line":267},[172,793,794],{"class":720},"      },\n",[172,796,797,800],{"class":174,"line":273},[172,798,799],{"class":716},"    ]",[172,801,773],{"class":720},[172,803,804],{"class":174,"line":279},[172,805,806],{"class":720},"  },\n",[172,808,809],{"class":174,"line":284},[172,810,811],{"class":716},"  \n",[172,813,814],{"class":174,"line":290},[172,815,816],{"class":216},"  // Redirect & Rewrite\n",[172,818,819,822,825,828],{"class":174,"line":299},[172,820,821],{"class":712},"  async",[172,823,824],{"class":734}," redirects",[172,826,827],{"class":720},"()",[172,829,724],{"class":720},[172,831,832,835],{"class":174,"line":304},[172,833,834],{"class":689},"    return",[172,836,749],{"class":734},[172,838,839],{"class":174,"line":310},[172,840,754],{"class":720},[172,842,844,847,849,851,854,856],{"class":174,"line":843},17,[172,845,846],{"class":734},"        source",[172,848,639],{"class":720},[172,850,764],{"class":720},[172,852,853],{"class":182},"/about-us",[172,855,770],{"class":720},[172,857,773],{"class":720},[172,859,861,864,866,868,871,873],{"class":174,"line":860},18,[172,862,863],{"class":734},"        destination",[172,865,639],{"class":720},[172,867,764],{"class":720},[172,869,870],{"class":182},"/about",[172,872,770],{"class":720},[172,874,773],{"class":720},[172,876,878,881,883,887],{"class":174,"line":877},19,[172,879,880],{"class":734},"        permanent",[172,882,639],{"class":720},[172,884,886],{"class":885},"sfNiH"," true",[172,888,773],{"class":720},[172,890,892],{"class":174,"line":891},20,[172,893,794],{"class":720},[172,895,897],{"class":174,"line":896},21,[172,898,899],{"class":734},"    ]\n",[172,901,903],{"class":174,"line":902},22,[172,904,806],{"class":720},[172,906,908],{"class":174,"line":907},23,[172,909,234],{"emptyLinePlaceholder":233},[172,911,913],{"class":174,"line":912},24,[172,914,915],{"class":216},"  // Headers\n",[172,917,919,921,924,926],{"class":174,"line":918},25,[172,920,821],{"class":712},[172,922,923],{"class":734}," headers",[172,925,827],{"class":720},[172,927,724],{"class":720},[172,929,931,933],{"class":174,"line":930},26,[172,932,834],{"class":689},[172,934,749],{"class":734},[172,936,938],{"class":174,"line":937},27,[172,939,754],{"class":720},[172,941,943,945,947,949,952,954],{"class":174,"line":942},28,[172,944,846],{"class":734},[172,946,639],{"class":720},[172,948,764],{"class":720},[172,950,951],{"class":182},"/api/:path*",[172,953,770],{"class":720},[172,955,773],{"class":720},[172,957,959,962,964],{"class":174,"line":958},29,[172,960,961],{"class":734},"        headers",[172,963,639],{"class":720},[172,965,749],{"class":734},[172,967,969,972,975,977,979,982,984,987,990,992,994,997,999],{"class":174,"line":968},30,[172,970,971],{"class":720},"          {",[172,973,974],{"class":734}," key",[172,976,639],{"class":720},[172,978,764],{"class":720},[172,980,981],{"class":182},"Access-Control-Allow-Origin",[172,983,770],{"class":720},[172,985,986],{"class":720},",",[172,988,989],{"class":734}," value",[172,991,639],{"class":720},[172,993,764],{"class":720},[172,995,996],{"class":182},"*",[172,998,770],{"class":720},[172,1000,1001],{"class":720}," },\n",[172,1003,1005,1008],{"class":174,"line":1004},31,[172,1006,1007],{"class":734},"        ]",[172,1009,773],{"class":720},[172,1011,1013],{"class":174,"line":1012},32,[172,1014,794],{"class":720},[172,1016,1018],{"class":174,"line":1017},33,[172,1019,899],{"class":734},[172,1021,1023],{"class":174,"line":1022},34,[172,1024,806],{"class":720},[172,1026,1028],{"class":174,"line":1027},35,[172,1029,1030],{"class":720},"}\n",[172,1032,1034],{"class":174,"line":1033},36,[172,1035,234],{"emptyLinePlaceholder":233},[172,1037,1039,1042,1045],{"class":174,"line":1038},37,[172,1040,1041],{"class":720},"module.exports",[172,1043,1044],{"class":720}," =",[172,1046,1047],{"class":716}," nextConfig\n",[110,1049,1051],{"id":1050},"_4-struktur-folder-nextjs-app-router","4. Struktur Folder Next.js (App Router)",[162,1053,1056],{"className":1054,"code":1055,"language":645},[643],"app/\n├── layout.jsx           # Root layout\n├── page.jsx             # Home page (/)\n├── globals.css          # Global styles\n├── api/\n│   ├── route.js         # API endpoint\n│   └── products/\n│       └── route.js     # GET /api/products\n├── dashboard/\n│   ├── layout.jsx       # Dashboard layout\n│   └── page.jsx         # /dashboard page\n├── blog/\n│   ├── [slug]/\n│   │   └── page.jsx     # Dynamic route /blog/[slug]\n│   └── page.jsx         # /blog\n└── (auth)/\n    ├── login/\n    │   └── page.jsx\n    └── register/\n        └── page.jsx\n\npublic/\n├── logo.png\n└── images/\n\ncomponents/\n├── Header.jsx\n├── Footer.jsx\n├── Navigation.jsx\n└── common/\n    └── Button.jsx\n\nlib/\n├── db.js\n├── auth.js\n└── utils.js\n\nstyles/\n├── globals.css\n└── variables.css\n\n.env.local              # Local environment variables\n.env.production         # Production environment\nnext.config.js         # Next.js configuration\ntsconfig.json          # TypeScript config (jika TS)\npackage.json\n",[169,1057,1055],{"__ignoreMap":167},[110,1059,1061],{"id":1060},"_5-menjalankan-project","5. Menjalankan Project",[115,1063,1065],{"id":1064},"development-server","Development Server",[162,1067,1069],{"className":164,"code":1068,"language":166,"meta":167,"style":167},"npm run dev\n# Aplikasi berjalan di http://localhost:3000\n",[169,1070,1071,1079],{"__ignoreMap":167},[172,1072,1073,1075,1077],{"class":174,"line":175},[172,1074,134],{"class":178},[172,1076,315],{"class":182},[172,1078,318],{"class":182},[172,1080,1081],{"class":174,"line":186},[172,1082,1083],{"class":216},"# Aplikasi berjalan di http://localhost:3000\n",[115,1085,1087],{"id":1086},"production-build-test","Production Build & Test",[162,1089,1091],{"className":164,"code":1090,"language":166,"meta":167,"style":167},"# Build for production\nnpm run build\n\n# Start production server\nnpm run start\n",[169,1092,1093,1098,1107,1111,1116],{"__ignoreMap":167},[172,1094,1095],{"class":174,"line":175},[172,1096,1097],{"class":216},"# Build for production\n",[172,1099,1100,1102,1104],{"class":174,"line":186},[172,1101,134],{"class":178},[172,1103,315],{"class":182},[172,1105,1106],{"class":182}," build\n",[172,1108,1109],{"class":174,"line":193},[172,1110,234],{"emptyLinePlaceholder":233},[172,1112,1113],{"class":174,"line":237},[172,1114,1115],{"class":216},"# Start production server\n",[172,1117,1118,1120,1122],{"class":174,"line":243},[172,1119,134],{"class":178},[172,1121,315],{"class":182},[172,1123,1124],{"class":182}," start\n",[115,1126,1128],{"id":1127},"lint-format","Lint & Format",[162,1130,1132],{"className":164,"code":1131,"language":166,"meta":167,"style":167},"# Check lint\nnpm run lint\n\n# Format code\nnpm run format\n",[169,1133,1134,1139,1148,1152,1157],{"__ignoreMap":167},[172,1135,1136],{"class":174,"line":175},[172,1137,1138],{"class":216},"# Check lint\n",[172,1140,1141,1143,1145],{"class":174,"line":186},[172,1142,134],{"class":178},[172,1144,315],{"class":182},[172,1146,1147],{"class":182}," lint\n",[172,1149,1150],{"class":174,"line":193},[172,1151,234],{"emptyLinePlaceholder":233},[172,1153,1154],{"class":174,"line":237},[172,1155,1156],{"class":216},"# Format code\n",[172,1158,1159,1161,1163],{"class":174,"line":243},[172,1160,134],{"class":178},[172,1162,315],{"class":182},[172,1164,1165],{"class":182}," format\n",[110,1167,1169],{"id":1168},"_6-konfigurasi-penting-untuk-production","6. Konfigurasi Penting untuk Production",[115,1171,1173],{"id":1172},"database-setup-contoh-dengan-prisma","Database Setup (Contoh dengan Prisma)",[162,1175,1177],{"className":164,"code":1176,"language":166,"meta":167,"style":167},"npm install @prisma/client\nnpm install -D prisma\n\n# Initialize Prisma\nnpx prisma init\n",[169,1178,1179,1188,1200,1204,1209],{"__ignoreMap":167},[172,1180,1181,1183,1185],{"class":174,"line":175},[172,1182,134],{"class":178},[172,1184,548],{"class":182},[172,1186,1187],{"class":182}," @prisma/client\n",[172,1189,1190,1192,1194,1197],{"class":174,"line":186},[172,1191,134],{"class":178},[172,1193,548],{"class":182},[172,1195,1196],{"class":182}," -D",[172,1198,1199],{"class":182}," prisma\n",[172,1201,1202],{"class":174,"line":193},[172,1203,234],{"emptyLinePlaceholder":233},[172,1205,1206],{"class":174,"line":237},[172,1207,1208],{"class":216},"# Initialize Prisma\n",[172,1210,1211,1213,1216],{"class":174,"line":243},[172,1212,222],{"class":178},[172,1214,1215],{"class":182}," prisma",[172,1217,1218],{"class":182}," init\n",[106,1220,670,1221,639],{},[169,1222,1223],{},"prisma/schema.prisma",[162,1225,1229],{"className":1226,"code":1227,"language":1228,"meta":167,"style":167},"language-prisma shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","datasource db {\n  provider = \"postgresql\"\n  url      = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n  provider = \"prisma-client-js\"\n}\n\nmodel User {\n  id    Int     @id @default(autoincrement())\n  email String  @unique\n  name  String?\n  posts Post[]\n}\n\nmodel Post {\n  id    Int     @id @default(autoincrement())\n  title String\n  content String?\n  author User @relation(fields: [authorId], references: [id])\n  authorId Int\n}\n","prisma",[169,1230,1231,1236,1241,1246,1250,1254,1259,1264,1268,1272,1277,1282,1287,1292,1297,1301,1305,1310,1314,1319,1324,1329,1334],{"__ignoreMap":167},[172,1232,1233],{"class":174,"line":175},[172,1234,1235],{},"datasource db {\n",[172,1237,1238],{"class":174,"line":186},[172,1239,1240],{},"  provider = \"postgresql\"\n",[172,1242,1243],{"class":174,"line":193},[172,1244,1245],{},"  url      = env(\"DATABASE_URL\")\n",[172,1247,1248],{"class":174,"line":237},[172,1249,1030],{},[172,1251,1252],{"class":174,"line":243},[172,1253,234],{"emptyLinePlaceholder":233},[172,1255,1256],{"class":174,"line":249},[172,1257,1258],{},"generator client {\n",[172,1260,1261],{"class":174,"line":255},[172,1262,1263],{},"  provider = \"prisma-client-js\"\n",[172,1265,1266],{"class":174,"line":261},[172,1267,1030],{},[172,1269,1270],{"class":174,"line":267},[172,1271,234],{"emptyLinePlaceholder":233},[172,1273,1274],{"class":174,"line":273},[172,1275,1276],{},"model User {\n",[172,1278,1279],{"class":174,"line":279},[172,1280,1281],{},"  id    Int     @id @default(autoincrement())\n",[172,1283,1284],{"class":174,"line":284},[172,1285,1286],{},"  email String  @unique\n",[172,1288,1289],{"class":174,"line":290},[172,1290,1291],{},"  name  String?\n",[172,1293,1294],{"class":174,"line":299},[172,1295,1296],{},"  posts Post[]\n",[172,1298,1299],{"class":174,"line":304},[172,1300,1030],{},[172,1302,1303],{"class":174,"line":310},[172,1304,234],{"emptyLinePlaceholder":233},[172,1306,1307],{"class":174,"line":843},[172,1308,1309],{},"model Post {\n",[172,1311,1312],{"class":174,"line":860},[172,1313,1281],{},[172,1315,1316],{"class":174,"line":877},[172,1317,1318],{},"  title String\n",[172,1320,1321],{"class":174,"line":891},[172,1322,1323],{},"  content String?\n",[172,1325,1326],{"class":174,"line":896},[172,1327,1328],{},"  author User @relation(fields: [authorId], references: [id])\n",[172,1330,1331],{"class":174,"line":902},[172,1332,1333],{},"  authorId Int\n",[172,1335,1336],{"class":174,"line":907},[172,1337,1030],{},[162,1339,1341],{"className":164,"code":1340,"language":166,"meta":167,"style":167},"# Push schema ke database\nnpx prisma migrate dev --name init\n",[169,1342,1343,1348],{"__ignoreMap":167},[172,1344,1345],{"class":174,"line":175},[172,1346,1347],{"class":216},"# Push schema ke database\n",[172,1349,1350,1352,1354,1357,1360,1363],{"class":174,"line":186},[172,1351,222],{"class":178},[172,1353,1215],{"class":182},[172,1355,1356],{"class":182}," migrate",[172,1358,1359],{"class":182}," dev",[172,1361,1362],{"class":182}," --name",[172,1364,1218],{"class":182},[115,1366,1368],{"id":1367},"authentication-setup-nextauthjs","Authentication Setup (NextAuth.js)",[162,1370,1372],{"className":164,"code":1371,"language":166,"meta":167,"style":167},"npm install next-auth\nnpx auth secret\n",[169,1373,1374,1383],{"__ignoreMap":167},[172,1375,1376,1378,1380],{"class":174,"line":175},[172,1377,134],{"class":178},[172,1379,548],{"class":182},[172,1381,1382],{"class":182}," next-auth\n",[172,1384,1385,1387,1390],{"class":174,"line":186},[172,1386,222],{"class":178},[172,1388,1389],{"class":182}," auth",[172,1391,1392],{"class":182}," secret\n",[106,1394,1395,639],{},[169,1396,1397],{},"app/api/auth/[...nextauth]/route.js",[162,1399,1401],{"className":677,"code":1400,"language":679,"meta":167,"style":167},"import NextAuth from 'next-auth'\nimport GithubProvider from 'next-auth/providers/github'\n\nexport const authOptions = {\n  providers: [\n    GithubProvider({\n      clientId: process.env.GITHUB_ID,\n      clientSecret: process.env.GITHUB_SECRET,\n    }),\n  ],\n}\n\nexport const handler = NextAuth(authOptions)\nexport { handler as GET, handler as POST }\n",[169,1402,1403,1422,1438,1442,1457,1466,1477,1500,1520,1530,1537,1541,1545,1562],{"__ignoreMap":167},[172,1404,1405,1408,1411,1414,1416,1419],{"class":174,"line":175},[172,1406,1407],{"class":689},"import",[172,1409,1410],{"class":716}," NextAuth ",[172,1412,1413],{"class":689},"from",[172,1415,764],{"class":720},[172,1417,1418],{"class":182},"next-auth",[172,1420,1421],{"class":720},"'\n",[172,1423,1424,1426,1429,1431,1433,1436],{"class":174,"line":186},[172,1425,1407],{"class":689},[172,1427,1428],{"class":716}," GithubProvider ",[172,1430,1413],{"class":689},[172,1432,764],{"class":720},[172,1434,1435],{"class":182},"next-auth/providers/github",[172,1437,1421],{"class":720},[172,1439,1440],{"class":174,"line":193},[172,1441,234],{"emptyLinePlaceholder":233},[172,1443,1444,1447,1450,1453,1455],{"class":174,"line":237},[172,1445,1446],{"class":689},"export",[172,1448,1449],{"class":712}," const",[172,1451,1452],{"class":716}," authOptions ",[172,1454,721],{"class":720},[172,1456,724],{"class":720},[172,1458,1459,1462,1464],{"class":174,"line":243},[172,1460,1461],{"class":734},"  providers",[172,1463,639],{"class":720},[172,1465,749],{"class":716},[172,1467,1468,1471,1474],{"class":174,"line":249},[172,1469,1470],{"class":293},"    GithubProvider",[172,1472,1473],{"class":716},"(",[172,1475,1476],{"class":720},"{\n",[172,1478,1479,1482,1484,1487,1490,1493,1495,1498],{"class":174,"line":255},[172,1480,1481],{"class":734},"      clientId",[172,1483,639],{"class":720},[172,1485,1486],{"class":716}," process",[172,1488,1489],{"class":720},".",[172,1491,1492],{"class":716},"env",[172,1494,1489],{"class":720},[172,1496,1497],{"class":716},"GITHUB_ID",[172,1499,773],{"class":720},[172,1501,1502,1505,1507,1509,1511,1513,1515,1518],{"class":174,"line":261},[172,1503,1504],{"class":734},"      clientSecret",[172,1506,639],{"class":720},[172,1508,1486],{"class":716},[172,1510,1489],{"class":720},[172,1512,1492],{"class":716},[172,1514,1489],{"class":720},[172,1516,1517],{"class":716},"GITHUB_SECRET",[172,1519,773],{"class":720},[172,1521,1522,1525,1528],{"class":174,"line":267},[172,1523,1524],{"class":720},"    }",[172,1526,1527],{"class":716},")",[172,1529,773],{"class":720},[172,1531,1532,1535],{"class":174,"line":273},[172,1533,1534],{"class":716},"  ]",[172,1536,773],{"class":720},[172,1538,1539],{"class":174,"line":279},[172,1540,1030],{"class":720},[172,1542,1543],{"class":174,"line":284},[172,1544,234],{"emptyLinePlaceholder":233},[172,1546,1547,1549,1551,1554,1556,1559],{"class":174,"line":290},[172,1548,1446],{"class":689},[172,1550,1449],{"class":712},[172,1552,1553],{"class":716}," handler ",[172,1555,721],{"class":720},[172,1557,1558],{"class":293}," NextAuth",[172,1560,1561],{"class":716},"(authOptions)\n",[172,1563,1564,1566,1568,1571,1574,1577,1579,1581,1583,1586],{"class":174,"line":299},[172,1565,1446],{"class":689},[172,1567,697],{"class":720},[172,1569,1570],{"class":716}," handler",[172,1572,1573],{"class":689}," as",[172,1575,1576],{"class":716}," GET",[172,1578,986],{"class":720},[172,1580,1570],{"class":716},[172,1582,1573],{"class":689},[172,1584,1585],{"class":716}," POST",[172,1587,1588],{"class":720}," }\n",[115,1590,1592],{"id":1591},"image-optimization","Image Optimization",[162,1594,1598],{"className":1595,"code":1596,"language":1597,"meta":167,"style":167},"language-jsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import Image from 'next/image'\n\nexport default function Home() {\n  return (\n    \u003CImage\n      src=\"/hero.jpg\"\n      alt=\"Hero\"\n      width={1200}\n      height={600}\n      priority\n    />\n  )\n}\n","jsx",[169,1599,1600,1616,1620,1637,1645,1653,1669,1683,1697,1709,1714,1719,1724],{"__ignoreMap":167},[172,1601,1602,1604,1607,1609,1611,1614],{"class":174,"line":175},[172,1603,1407],{"class":689},[172,1605,1606],{"class":716}," Image ",[172,1608,1413],{"class":689},[172,1610,764],{"class":720},[172,1612,1613],{"class":182},"next/image",[172,1615,1421],{"class":720},[172,1617,1618],{"class":174,"line":186},[172,1619,234],{"emptyLinePlaceholder":233},[172,1621,1622,1624,1627,1630,1633,1635],{"class":174,"line":193},[172,1623,1446],{"class":689},[172,1625,1626],{"class":689}," default",[172,1628,1629],{"class":712}," function",[172,1631,1632],{"class":293}," Home",[172,1634,827],{"class":720},[172,1636,724],{"class":720},[172,1638,1639,1642],{"class":174,"line":237},[172,1640,1641],{"class":689},"  return",[172,1643,1644],{"class":734}," (\n",[172,1646,1647,1650],{"class":174,"line":243},[172,1648,1649],{"class":720},"    \u003C",[172,1651,1652],{"class":178},"Image\n",[172,1654,1655,1658,1660,1663,1666],{"class":174,"line":249},[172,1656,1657],{"class":712},"      src",[172,1659,721],{"class":720},[172,1661,1662],{"class":720},"\"",[172,1664,1665],{"class":182},"/hero.jpg",[172,1667,1668],{"class":720},"\"\n",[172,1670,1671,1674,1676,1678,1681],{"class":174,"line":255},[172,1672,1673],{"class":712},"      alt",[172,1675,721],{"class":720},[172,1677,1662],{"class":720},[172,1679,1680],{"class":182},"Hero",[172,1682,1668],{"class":720},[172,1684,1685,1688,1691,1695],{"class":174,"line":261},[172,1686,1687],{"class":712},"      width",[172,1689,1690],{"class":720},"={",[172,1692,1694],{"class":1693},"sbssI","1200",[172,1696,1030],{"class":720},[172,1698,1699,1702,1704,1707],{"class":174,"line":267},[172,1700,1701],{"class":712},"      height",[172,1703,1690],{"class":720},[172,1705,1706],{"class":1693},"600",[172,1708,1030],{"class":720},[172,1710,1711],{"class":174,"line":273},[172,1712,1713],{"class":712},"      priority\n",[172,1715,1716],{"class":174,"line":279},[172,1717,1718],{"class":720},"    />\n",[172,1720,1721],{"class":174,"line":284},[172,1722,1723],{"class":734},"  )\n",[172,1725,1726],{"class":174,"line":290},[172,1727,1030],{"class":720},[110,1729,1731],{"id":1730},"_7-api-routes-server-actions","7. API Routes & Server Actions",[115,1733,1735],{"id":1734},"api-route-example","API Route Example",[106,1737,1738,639],{},[169,1739,1740],{},"app/api/posts/route.js",[162,1742,1744],{"className":677,"code":1743,"language":679,"meta":167,"style":167},"import { NextResponse } from 'next/server'\n\nexport async function GET() {\n  return NextResponse.json({ posts: [] })\n}\n\nexport async function POST(request) {\n  const data = await request.json()\n  // Handle POST\n  return NextResponse.json({ created: true }, { status: 201 })\n}\n",[169,1745,1746,1768,1772,1787,1816,1820,1824,1844,1867,1872,1910],{"__ignoreMap":167},[172,1747,1748,1750,1752,1755,1758,1761,1763,1766],{"class":174,"line":175},[172,1749,1407],{"class":689},[172,1751,697],{"class":720},[172,1753,1754],{"class":716}," NextResponse",[172,1756,1757],{"class":720}," }",[172,1759,1760],{"class":689}," from",[172,1762,764],{"class":720},[172,1764,1765],{"class":182},"next/server",[172,1767,1421],{"class":720},[172,1769,1770],{"class":174,"line":186},[172,1771,234],{"emptyLinePlaceholder":233},[172,1773,1774,1776,1779,1781,1783,1785],{"class":174,"line":193},[172,1775,1446],{"class":689},[172,1777,1778],{"class":712}," async",[172,1780,1629],{"class":712},[172,1782,1576],{"class":293},[172,1784,827],{"class":720},[172,1786,724],{"class":720},[172,1788,1789,1791,1793,1795,1798,1800,1803,1806,1808,1811,1813],{"class":174,"line":237},[172,1790,1641],{"class":689},[172,1792,1754],{"class":716},[172,1794,1489],{"class":720},[172,1796,1797],{"class":293},"json",[172,1799,1473],{"class":734},[172,1801,1802],{"class":720},"{",[172,1804,1805],{"class":734}," posts",[172,1807,639],{"class":720},[172,1809,1810],{"class":734}," [] ",[172,1812,704],{"class":720},[172,1814,1815],{"class":734},")\n",[172,1817,1818],{"class":174,"line":243},[172,1819,1030],{"class":720},[172,1821,1822],{"class":174,"line":249},[172,1823,234],{"emptyLinePlaceholder":233},[172,1825,1826,1828,1830,1832,1834,1836,1840,1842],{"class":174,"line":255},[172,1827,1446],{"class":689},[172,1829,1778],{"class":712},[172,1831,1629],{"class":712},[172,1833,1585],{"class":293},[172,1835,1473],{"class":720},[172,1837,1839],{"class":1838},"sHdIc","request",[172,1841,1527],{"class":720},[172,1843,724],{"class":720},[172,1845,1846,1849,1852,1854,1857,1860,1862,1864],{"class":174,"line":261},[172,1847,1848],{"class":712},"  const",[172,1850,1851],{"class":716}," data",[172,1853,1044],{"class":720},[172,1855,1856],{"class":689}," await",[172,1858,1859],{"class":716}," request",[172,1861,1489],{"class":720},[172,1863,1797],{"class":293},[172,1865,1866],{"class":734},"()\n",[172,1868,1869],{"class":174,"line":267},[172,1870,1871],{"class":216},"  // Handle POST\n",[172,1873,1874,1876,1878,1880,1882,1884,1886,1889,1891,1893,1896,1898,1901,1903,1906,1908],{"class":174,"line":273},[172,1875,1641],{"class":689},[172,1877,1754],{"class":716},[172,1879,1489],{"class":720},[172,1881,1797],{"class":293},[172,1883,1473],{"class":734},[172,1885,1802],{"class":720},[172,1887,1888],{"class":734}," created",[172,1890,639],{"class":720},[172,1892,886],{"class":885},[172,1894,1895],{"class":720}," },",[172,1897,697],{"class":720},[172,1899,1900],{"class":734}," status",[172,1902,639],{"class":720},[172,1904,1905],{"class":1693}," 201",[172,1907,1757],{"class":720},[172,1909,1815],{"class":734},[172,1911,1912],{"class":174,"line":279},[172,1913,1030],{"class":720},[115,1915,1917],{"id":1916},"server-action-example","Server Action Example",[162,1919,1921],{"className":1595,"code":1920,"language":1597,"meta":167,"style":167},"'use server'\n\nexport async function addPost(formData) {\n  const title = formData.get('title')\n  const content = formData.get('content')\n  \n  // Save to database\n  return { success: true }\n}\n",[169,1922,1923,1932,1936,1956,1984,2010,2014,2019,2034],{"__ignoreMap":167},[172,1924,1925,1927,1930],{"class":174,"line":175},[172,1926,770],{"class":720},[172,1928,1929],{"class":182},"use server",[172,1931,1421],{"class":720},[172,1933,1934],{"class":174,"line":186},[172,1935,234],{"emptyLinePlaceholder":233},[172,1937,1938,1940,1942,1944,1947,1949,1952,1954],{"class":174,"line":193},[172,1939,1446],{"class":689},[172,1941,1778],{"class":712},[172,1943,1629],{"class":712},[172,1945,1946],{"class":293}," addPost",[172,1948,1473],{"class":720},[172,1950,1951],{"class":1838},"formData",[172,1953,1527],{"class":720},[172,1955,724],{"class":720},[172,1957,1958,1960,1963,1965,1968,1970,1973,1975,1977,1980,1982],{"class":174,"line":237},[172,1959,1848],{"class":712},[172,1961,1962],{"class":716}," title",[172,1964,1044],{"class":720},[172,1966,1967],{"class":716}," formData",[172,1969,1489],{"class":720},[172,1971,1972],{"class":293},"get",[172,1974,1473],{"class":734},[172,1976,770],{"class":720},[172,1978,1979],{"class":182},"title",[172,1981,770],{"class":720},[172,1983,1815],{"class":734},[172,1985,1986,1988,1991,1993,1995,1997,1999,2001,2003,2006,2008],{"class":174,"line":243},[172,1987,1848],{"class":712},[172,1989,1990],{"class":716}," content",[172,1992,1044],{"class":720},[172,1994,1967],{"class":716},[172,1996,1489],{"class":720},[172,1998,1972],{"class":293},[172,2000,1473],{"class":734},[172,2002,770],{"class":720},[172,2004,2005],{"class":182},"content",[172,2007,770],{"class":720},[172,2009,1815],{"class":734},[172,2011,2012],{"class":174,"line":249},[172,2013,811],{"class":734},[172,2015,2016],{"class":174,"line":255},[172,2017,2018],{"class":216},"  // Save to database\n",[172,2020,2021,2023,2025,2028,2030,2032],{"class":174,"line":261},[172,2022,1641],{"class":689},[172,2024,697],{"class":720},[172,2026,2027],{"class":734}," success",[172,2029,639],{"class":720},[172,2031,886],{"class":885},[172,2033,1588],{"class":720},[172,2035,2036],{"class":174,"line":267},[172,2037,1030],{"class":720},[110,2039,2041],{"id":2040},"_8-performance-optimization","8. Performance Optimization",[115,2043,1592],{"id":2044},"image-optimization-1",[162,2046,2048],{"className":677,"code":2047,"language":679,"meta":167,"style":167},"// next.config.js\nimages: {\n  formats: ['image/avif', 'image/webp'],\n  minimumCacheTTL: 60,\n}\n",[169,2049,2050,2055,2064,2095,2107],{"__ignoreMap":167},[172,2051,2052],{"class":174,"line":175},[172,2053,2054],{"class":216},"// next.config.js\n",[172,2056,2057,2060,2062],{"class":174,"line":186},[172,2058,2059],{"class":178},"images",[172,2061,639],{"class":720},[172,2063,724],{"class":720},[172,2065,2066,2069,2071,2074,2076,2079,2081,2083,2085,2088,2090,2093],{"class":174,"line":193},[172,2067,2068],{"class":178},"  formats",[172,2070,639],{"class":720},[172,2072,2073],{"class":734}," [",[172,2075,770],{"class":720},[172,2077,2078],{"class":182},"image/avif",[172,2080,770],{"class":720},[172,2082,986],{"class":720},[172,2084,764],{"class":720},[172,2086,2087],{"class":182},"image/webp",[172,2089,770],{"class":720},[172,2091,2092],{"class":734},"]",[172,2094,773],{"class":720},[172,2096,2097,2100,2102,2105],{"class":174,"line":237},[172,2098,2099],{"class":178},"  minimumCacheTTL",[172,2101,639],{"class":720},[172,2103,2104],{"class":1693}," 60",[172,2106,773],{"class":720},[172,2108,2109],{"class":174,"line":243},[172,2110,1030],{"class":720},[115,2112,2114],{"id":2113},"code-splitting","Code Splitting",[162,2116,2118],{"className":1595,"code":2117,"language":1597,"meta":167,"style":167},"import dynamic from 'next/dynamic'\n\nconst HeavyComponent = dynamic(\n  () => import('./HeavyComponent'),\n  { loading: () => \u003Cp>Loading...\u003C/p> }\n)\n",[169,2119,2120,2136,2140,2155,2179,2214],{"__ignoreMap":167},[172,2121,2122,2124,2127,2129,2131,2134],{"class":174,"line":175},[172,2123,1407],{"class":689},[172,2125,2126],{"class":716}," dynamic ",[172,2128,1413],{"class":689},[172,2130,764],{"class":720},[172,2132,2133],{"class":182},"next/dynamic",[172,2135,1421],{"class":720},[172,2137,2138],{"class":174,"line":186},[172,2139,234],{"emptyLinePlaceholder":233},[172,2141,2142,2144,2147,2149,2152],{"class":174,"line":193},[172,2143,713],{"class":712},[172,2145,2146],{"class":716}," HeavyComponent ",[172,2148,721],{"class":720},[172,2150,2151],{"class":293}," dynamic",[172,2153,2154],{"class":716},"(\n",[172,2156,2157,2160,2163,2166,2168,2170,2173,2175,2177],{"class":174,"line":237},[172,2158,2159],{"class":720},"  ()",[172,2161,2162],{"class":712}," =>",[172,2164,2165],{"class":720}," import",[172,2167,1473],{"class":716},[172,2169,770],{"class":720},[172,2171,2172],{"class":182},"./HeavyComponent",[172,2174,770],{"class":720},[172,2176,1527],{"class":716},[172,2178,773],{"class":720},[172,2180,2181,2184,2187,2189,2192,2194,2197,2199,2202,2205,2208,2210,2212],{"class":174,"line":243},[172,2182,2183],{"class":720},"  {",[172,2185,2186],{"class":293}," loading",[172,2188,639],{"class":720},[172,2190,2191],{"class":720}," ()",[172,2193,2162],{"class":712},[172,2195,2196],{"class":720}," \u003C",[172,2198,106],{"class":734},[172,2200,2201],{"class":720},">",[172,2203,2204],{"class":716},"Loading...",[172,2206,2207],{"class":720},"\u003C/",[172,2209,106],{"class":734},[172,2211,2201],{"class":720},[172,2213,1588],{"class":720},[172,2215,2216],{"class":174,"line":249},[172,2217,1815],{"class":716},[115,2219,2221],{"id":2220},"metadata-untuk-seo","Metadata untuk SEO",[162,2223,2225],{"className":1595,"code":2224,"language":1597,"meta":167,"style":167},"export const metadata = {\n  title: 'Home Page',\n  description: 'Welcome to my Next.js app',\n  openGraph: {\n    title: 'Home Page',\n    description: 'Welcome to my Next.js app',\n    url: 'https://example.com',\n    type: 'website',\n  },\n}\n\nexport default function Home() {\n  return \u003Ch1>Welcome\u003C/h1>\n}\n",[169,2226,2227,2240,2256,2272,2281,2296,2311,2327,2343,2347,2351,2355,2369,2389],{"__ignoreMap":167},[172,2228,2229,2231,2233,2236,2238],{"class":174,"line":175},[172,2230,1446],{"class":689},[172,2232,1449],{"class":712},[172,2234,2235],{"class":716}," metadata ",[172,2237,721],{"class":720},[172,2239,724],{"class":720},[172,2241,2242,2245,2247,2249,2252,2254],{"class":174,"line":186},[172,2243,2244],{"class":734},"  title",[172,2246,639],{"class":720},[172,2248,764],{"class":720},[172,2250,2251],{"class":182},"Home Page",[172,2253,770],{"class":720},[172,2255,773],{"class":720},[172,2257,2258,2261,2263,2265,2268,2270],{"class":174,"line":193},[172,2259,2260],{"class":734},"  description",[172,2262,639],{"class":720},[172,2264,764],{"class":720},[172,2266,2267],{"class":182},"Welcome to my Next.js app",[172,2269,770],{"class":720},[172,2271,773],{"class":720},[172,2273,2274,2277,2279],{"class":174,"line":237},[172,2275,2276],{"class":734},"  openGraph",[172,2278,639],{"class":720},[172,2280,724],{"class":720},[172,2282,2283,2286,2288,2290,2292,2294],{"class":174,"line":243},[172,2284,2285],{"class":734},"    title",[172,2287,639],{"class":720},[172,2289,764],{"class":720},[172,2291,2251],{"class":182},[172,2293,770],{"class":720},[172,2295,773],{"class":720},[172,2297,2298,2301,2303,2305,2307,2309],{"class":174,"line":249},[172,2299,2300],{"class":734},"    description",[172,2302,639],{"class":720},[172,2304,764],{"class":720},[172,2306,2267],{"class":182},[172,2308,770],{"class":720},[172,2310,773],{"class":720},[172,2312,2313,2316,2318,2320,2323,2325],{"class":174,"line":255},[172,2314,2315],{"class":734},"    url",[172,2317,639],{"class":720},[172,2319,764],{"class":720},[172,2321,2322],{"class":182},"https://example.com",[172,2324,770],{"class":720},[172,2326,773],{"class":720},[172,2328,2329,2332,2334,2336,2339,2341],{"class":174,"line":261},[172,2330,2331],{"class":734},"    type",[172,2333,639],{"class":720},[172,2335,764],{"class":720},[172,2337,2338],{"class":182},"website",[172,2340,770],{"class":720},[172,2342,773],{"class":720},[172,2344,2345],{"class":174,"line":267},[172,2346,806],{"class":720},[172,2348,2349],{"class":174,"line":273},[172,2350,1030],{"class":720},[172,2352,2353],{"class":174,"line":279},[172,2354,234],{"emptyLinePlaceholder":233},[172,2356,2357,2359,2361,2363,2365,2367],{"class":174,"line":284},[172,2358,1446],{"class":689},[172,2360,1626],{"class":689},[172,2362,1629],{"class":712},[172,2364,1632],{"class":293},[172,2366,827],{"class":720},[172,2368,724],{"class":720},[172,2370,2371,2373,2375,2377,2379,2382,2384,2386],{"class":174,"line":290},[172,2372,1641],{"class":689},[172,2374,2196],{"class":720},[172,2376,101],{"class":734},[172,2378,2201],{"class":720},[172,2380,2381],{"class":716},"Welcome",[172,2383,2207],{"class":720},[172,2385,101],{"class":734},[172,2387,2388],{"class":720},">\n",[172,2390,2391],{"class":174,"line":299},[172,2392,1030],{"class":720},[110,2394,2396],{"id":2395},"_9-deployment","9. Deployment",[115,2398,2400],{"id":2399},"deploy-ke-vercel-recommended","Deploy ke Vercel (Recommended)",[162,2402,2404],{"className":164,"code":2403,"language":166,"meta":167,"style":167},"# Install Vercel CLI\nnpm i -g vercel\n\n# Deploy\nvercel\n\n# Set environment variables\nvercel env add DATABASE_URL\nvercel env add API_SECRET_KEY\n",[169,2405,2406,2411,2424,2428,2433,2438,2442,2447,2461],{"__ignoreMap":167},[172,2407,2408],{"class":174,"line":175},[172,2409,2410],{"class":216},"# Install Vercel CLI\n",[172,2412,2413,2415,2418,2421],{"class":174,"line":186},[172,2414,134],{"class":178},[172,2416,2417],{"class":182}," i",[172,2419,2420],{"class":182}," -g",[172,2422,2423],{"class":182}," vercel\n",[172,2425,2426],{"class":174,"line":193},[172,2427,234],{"emptyLinePlaceholder":233},[172,2429,2430],{"class":174,"line":237},[172,2431,2432],{"class":216},"# Deploy\n",[172,2434,2435],{"class":174,"line":243},[172,2436,2437],{"class":178},"vercel\n",[172,2439,2440],{"class":174,"line":249},[172,2441,234],{"emptyLinePlaceholder":233},[172,2443,2444],{"class":174,"line":255},[172,2445,2446],{"class":216},"# Set environment variables\n",[172,2448,2449,2452,2455,2458],{"class":174,"line":261},[172,2450,2451],{"class":178},"vercel",[172,2453,2454],{"class":182}," env",[172,2456,2457],{"class":182}," add",[172,2459,2460],{"class":182}," DATABASE_URL\n",[172,2462,2463,2465,2467,2469],{"class":174,"line":267},[172,2464,2451],{"class":178},[172,2466,2454],{"class":182},[172,2468,2457],{"class":182},[172,2470,2471],{"class":182}," API_SECRET_KEY\n",[115,2473,2475],{"id":2474},"deploy-ke-netlify","Deploy ke Netlify",[162,2477,2479],{"className":164,"code":2478,"language":166,"meta":167,"style":167},"npm run build\n# Upload folder `.next` dan `public` ke Netlify\n",[169,2480,2481,2489],{"__ignoreMap":167},[172,2482,2483,2485,2487],{"class":174,"line":175},[172,2484,134],{"class":178},[172,2486,315],{"class":182},[172,2488,1106],{"class":182},[172,2490,2491],{"class":174,"line":186},[172,2492,2493],{"class":216},"# Upload folder `.next` dan `public` ke Netlify\n",[115,2495,2497],{"id":2496},"deploy-ke-docker","Deploy ke Docker",[162,2499,2503],{"className":2500,"code":2501,"language":2502,"meta":167,"style":167},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","FROM node:18-alpine\n\nWORKDIR /app\n\nCOPY package*.json ./\nRUN npm ci\n\nCOPY . .\nRUN npm run build\n\nEXPOSE 3000\n\nCMD [\"npm\", \"start\"]\n","dockerfile",[169,2504,2505,2510,2514,2519,2523,2528,2533,2537,2542,2547,2551,2556,2560],{"__ignoreMap":167},[172,2506,2507],{"class":174,"line":175},[172,2508,2509],{},"FROM node:18-alpine\n",[172,2511,2512],{"class":174,"line":186},[172,2513,234],{"emptyLinePlaceholder":233},[172,2515,2516],{"class":174,"line":193},[172,2517,2518],{},"WORKDIR /app\n",[172,2520,2521],{"class":174,"line":237},[172,2522,234],{"emptyLinePlaceholder":233},[172,2524,2525],{"class":174,"line":243},[172,2526,2527],{},"COPY package*.json ./\n",[172,2529,2530],{"class":174,"line":249},[172,2531,2532],{},"RUN npm ci\n",[172,2534,2535],{"class":174,"line":255},[172,2536,234],{"emptyLinePlaceholder":233},[172,2538,2539],{"class":174,"line":261},[172,2540,2541],{},"COPY . .\n",[172,2543,2544],{"class":174,"line":267},[172,2545,2546],{},"RUN npm run build\n",[172,2548,2549],{"class":174,"line":273},[172,2550,234],{"emptyLinePlaceholder":233},[172,2552,2553],{"class":174,"line":279},[172,2554,2555],{},"EXPOSE 3000\n",[172,2557,2558],{"class":174,"line":284},[172,2559,234],{"emptyLinePlaceholder":233},[172,2561,2562],{"class":174,"line":290},[172,2563,2564],{},"CMD [\"npm\", \"start\"]\n",[115,2566,2568],{"id":2567},"deploy-ke-aws-digitalocean-vps","Deploy ke AWS / DigitalOcean / VPS",[162,2570,2572],{"className":164,"code":2571,"language":166,"meta":167,"style":167},"# Build\nnpm run build\n\n# Upload dengan SCP atau Git\nscp -r .next/ username@server:/var/www/nextjs/\n\n# Di server, run dengan PM2\npm2 start \"npm start\" --name nextjs-app\n",[169,2573,2574,2579,2587,2591,2596,2610,2614,2619],{"__ignoreMap":167},[172,2575,2576],{"class":174,"line":175},[172,2577,2578],{"class":216},"# Build\n",[172,2580,2581,2583,2585],{"class":174,"line":186},[172,2582,134],{"class":178},[172,2584,315],{"class":182},[172,2586,1106],{"class":182},[172,2588,2589],{"class":174,"line":193},[172,2590,234],{"emptyLinePlaceholder":233},[172,2592,2593],{"class":174,"line":237},[172,2594,2595],{"class":216},"# Upload dengan SCP atau Git\n",[172,2597,2598,2601,2604,2607],{"class":174,"line":243},[172,2599,2600],{"class":178},"scp",[172,2602,2603],{"class":182}," -r",[172,2605,2606],{"class":182}," .next/",[172,2608,2609],{"class":182}," username@server:/var/www/nextjs/\n",[172,2611,2612],{"class":174,"line":249},[172,2613,234],{"emptyLinePlaceholder":233},[172,2615,2616],{"class":174,"line":255},[172,2617,2618],{"class":216},"# Di server, run dengan PM2\n",[172,2620,2621,2624,2627,2630,2633,2635,2637],{"class":174,"line":261},[172,2622,2623],{"class":178},"pm2",[172,2625,2626],{"class":182}," start",[172,2628,2629],{"class":720}," \"",[172,2631,2632],{"class":182},"npm start",[172,2634,1662],{"class":720},[172,2636,1362],{"class":182},[172,2638,2639],{"class":182}," nextjs-app\n",[110,2641,2643],{"id":2642},"_10-troubleshooting","10. Troubleshooting",[115,2645,2647],{"id":2646},"error-module-not-found","Error: \"Module not found\"",[162,2649,2651],{"className":164,"code":2650,"language":166,"meta":167,"style":167},"rm -rf .next node_modules\nnpm install\nnpm run build\n",[169,2652,2653,2665,2671],{"__ignoreMap":167},[172,2654,2655,2657,2659,2662],{"class":174,"line":175},[172,2656,578],{"class":178},[172,2658,581],{"class":182},[172,2660,2661],{"class":182}," .next",[172,2663,2664],{"class":182}," node_modules\n",[172,2666,2667,2669],{"class":174,"line":186},[172,2668,134],{"class":178},[172,2670,496],{"class":182},[172,2672,2673,2675,2677],{"class":174,"line":193},[172,2674,134],{"class":178},[172,2676,315],{"class":182},[172,2678,1106],{"class":182},[115,2680,2682],{"id":2681},"port-3000-sudah-digunakan","Port 3000 sudah digunakan",[162,2684,2686],{"className":164,"code":2685,"language":166,"meta":167,"style":167},"# Ganti port\nPORT=3001 npm run dev\n",[169,2687,2688,2693],{"__ignoreMap":167},[172,2689,2690],{"class":174,"line":175},[172,2691,2692],{"class":216},"# Ganti port\n",[172,2694,2695,2698,2700,2703,2706,2708],{"class":174,"line":186},[172,2696,2697],{"class":716},"PORT",[172,2699,721],{"class":720},[172,2701,2702],{"class":182},"3001",[172,2704,2705],{"class":178}," npm",[172,2707,315],{"class":182},[172,2709,318],{"class":182},[115,2711,2713],{"id":2712},"build-error-dengan-typescript","Build error dengan TypeScript",[162,2715,2717],{"className":164,"code":2716,"language":166,"meta":167,"style":167},"# Jika menggunakan TypeScript\nnpm install -D typescript @types/node @types/react\n\n# Generate tsconfig\nnpx tsc --init\n",[169,2718,2719,2724,2741,2745,2750],{"__ignoreMap":167},[172,2720,2721],{"class":174,"line":175},[172,2722,2723],{"class":216},"# Jika menggunakan TypeScript\n",[172,2725,2726,2728,2730,2732,2735,2738],{"class":174,"line":186},[172,2727,134],{"class":178},[172,2729,548],{"class":182},[172,2731,1196],{"class":182},[172,2733,2734],{"class":182}," typescript",[172,2736,2737],{"class":182}," @types/node",[172,2739,2740],{"class":182}," @types/react\n",[172,2742,2743],{"class":174,"line":193},[172,2744,234],{"emptyLinePlaceholder":233},[172,2746,2747],{"class":174,"line":237},[172,2748,2749],{"class":216},"# Generate tsconfig\n",[172,2751,2752,2754,2757],{"class":174,"line":243},[172,2753,222],{"class":178},[172,2755,2756],{"class":182}," tsc",[172,2758,2759],{"class":182}," --init\n",[115,2761,2763],{"id":2762},"database-connection-error","Database connection error",[162,2765,2767],{"className":164,"code":2766,"language":166,"meta":167,"style":167},"# Verify connection string di .env.local\nDATABASE_URL=\"postgresql://user:password@localhost:5432/dbname\"\n\n# Test connection\nnpx prisma db push\n",[169,2768,2769,2774,2788,2792,2797],{"__ignoreMap":167},[172,2770,2771],{"class":174,"line":175},[172,2772,2773],{"class":216},"# Verify connection string di .env.local\n",[172,2775,2776,2779,2781,2783,2786],{"class":174,"line":186},[172,2777,2778],{"class":716},"DATABASE_URL",[172,2780,721],{"class":720},[172,2782,1662],{"class":720},[172,2784,2785],{"class":182},"postgresql://user:password@localhost:5432/dbname",[172,2787,1668],{"class":720},[172,2789,2790],{"class":174,"line":193},[172,2791,234],{"emptyLinePlaceholder":233},[172,2793,2794],{"class":174,"line":237},[172,2795,2796],{"class":216},"# Test connection\n",[172,2798,2799,2801,2803,2806],{"class":174,"line":243},[172,2800,222],{"class":178},[172,2802,1215],{"class":182},[172,2804,2805],{"class":182}," db",[172,2807,2808],{"class":182}," push\n",[110,2810,2812],{"id":2811},"_11-best-practices","11. Best Practices",[106,2814,2815,2816],{},"✅ ",[126,2817,2818],{},"Gunakan:",[120,2820,2821,2824,2827,2830,2833],{},[123,2822,2823],{},"App Router (lebih baru & lebih baik)",[123,2825,2826],{},"Server Components sebagai default",[123,2828,2829],{},"Environment variables untuk config",[123,2831,2832],{},"Image component untuk optimization",[123,2834,2221],{},[106,2836,2837,2838],{},"❌ ",[126,2839,2840],{},"Hindari:",[120,2842,2843,2846,2849,2852],{},[123,2844,2845],{},"Pages Router untuk project baru",[123,2847,2848],{},"Fetch data di client-side (gunakan Server Components)",[123,2850,2851],{},"Hardcode sensitive data",[123,2853,2854],{},"Large bundle sizes",[110,2856,2858],{"id":2857},"_12-checklist-pre-production","12. Checklist Pre-Production",[120,2860,2863,2875,2881,2887,2893,2899,2905,2911,2921,2927],{"className":2861},[2862],"contains-task-list",[123,2864,2867,2871,2872,2874],{"className":2865},[2866],"task-list-item",[2868,2869],"input",{"disabled":233,"type":2870},"checkbox"," ",[169,2873,638],{}," file sudah setup",[123,2876,2878,2880],{"className":2877},[2866],[2868,2879],{"disabled":233,"type":2870}," Database sudah terhubung",[123,2882,2884,2886],{"className":2883},[2866],[2868,2885],{"disabled":233,"type":2870}," Authentication sudah berfungsi",[123,2888,2890,2892],{"className":2889},[2866],[2868,2891],{"disabled":233,"type":2870}," API endpoints sudah tested",[123,2894,2896,2898],{"className":2895},[2866],[2868,2897],{"disabled":233,"type":2870}," Images sudah optimized",[123,2900,2902,2904],{"className":2901},[2866],[2868,2903],{"disabled":233,"type":2870}," Metadata & SEO sudah configured",[123,2906,2908,2910],{"className":2907},[2866],[2868,2909],{"disabled":233,"type":2870}," Error handling sudah implemented",[123,2912,2914,2916,2917,2920],{"className":2913},[2866],[2868,2915],{"disabled":233,"type":2870}," Build test: ",[169,2918,2919],{},"npm run build"," berjalan sukses",[123,2922,2924,2926],{"className":2923},[2866],[2868,2925],{"disabled":233,"type":2870}," Performance check dengan Lighthouse",[123,2928,2930,2932],{"className":2929},[2866],[2868,2931],{"disabled":233,"type":2870}," Security: tidak ada secrets di repo",[2934,2935],"hr",{},[106,2937,2938,2871,2941],{},[126,2939,2940],{},"Dokumentasi Resmi:",[339,2942,2945],{"href":2943,"rel":2944},"https://nextjs.org",[343],"nextjs.org",[2947,2948,2949],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}html pre.shiki code .sFweD, html code.shiki .sFweD{--shiki-light:#E2931D;--shiki-light-font-style:italic;--shiki-default:#FFCB6B;--shiki-default-font-style:italic;--shiki-dark:#FFCB6B;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":167,"searchDepth":175,"depth":186,"links":2951},[2952,2956,2960,2966,2967,2972,2977,2981,2986,2992,2998,2999],{"id":112,"depth":186,"text":113,"children":2953},[2954,2955],{"id":117,"depth":193,"text":118},{"id":159,"depth":193,"text":160},{"id":201,"depth":186,"text":202,"children":2957},[2958,2959],{"id":205,"depth":193,"text":206},{"id":321,"depth":193,"text":322},{"id":428,"depth":186,"text":429,"children":2961},[2962,2963,2964,2965],{"id":432,"depth":193,"text":433},{"id":478,"depth":193,"text":479},{"id":596,"depth":193,"text":597},{"id":666,"depth":193,"text":667},{"id":1050,"depth":186,"text":1051},{"id":1060,"depth":186,"text":1061,"children":2968},[2969,2970,2971],{"id":1064,"depth":193,"text":1065},{"id":1086,"depth":193,"text":1087},{"id":1127,"depth":193,"text":1128},{"id":1168,"depth":186,"text":1169,"children":2973},[2974,2975,2976],{"id":1172,"depth":193,"text":1173},{"id":1367,"depth":193,"text":1368},{"id":1591,"depth":193,"text":1592},{"id":1730,"depth":186,"text":1731,"children":2978},[2979,2980],{"id":1734,"depth":193,"text":1735},{"id":1916,"depth":193,"text":1917},{"id":2040,"depth":186,"text":2041,"children":2982},[2983,2984,2985],{"id":2044,"depth":193,"text":1592},{"id":2113,"depth":193,"text":2114},{"id":2220,"depth":193,"text":2221},{"id":2395,"depth":186,"text":2396,"children":2987},[2988,2989,2990,2991],{"id":2399,"depth":193,"text":2400},{"id":2474,"depth":193,"text":2475},{"id":2496,"depth":193,"text":2497},{"id":2567,"depth":193,"text":2568},{"id":2642,"depth":186,"text":2643,"children":2993},[2994,2995,2996,2997],{"id":2646,"depth":193,"text":2647},{"id":2681,"depth":193,"text":2682},{"id":2712,"depth":193,"text":2713},{"id":2762,"depth":193,"text":2763},{"id":2811,"depth":186,"text":2812},{"id":2857,"depth":186,"text":2858},"Tutorial lengkap setup Next.js dari pemilihan template, instalasi, konfigurasi, hingga siap deploy ke production","md",null,{},{"icon":60},{"title":71,"description":3000},"_HNrvfxODJK-7I8am7tbGCVhCAlI-a87PaYIpdcLk7E",[3008,3010],{"title":66,"path":67,"stem":68,"description":3009,"icon":69,"children":-1},"Contoh dokumentasi produk untuk template SaaS berbasis Next.js + TypeScript + Supabase",{"title":75,"path":76,"stem":77,"description":3011,"icon":16,"children":-1},"Langkah-langkah lengkap untuk membeli template, mengakses di Using Dev, dan download dari Google Drive",1763121030927]