[{"data":1,"prerenderedAt":3980},["ShallowReactive",2],{"navigation":3,"/templates/nextjs-saas-starter":95,"/templates/nextjs-saas-starter-surround":3975},[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":66,"body":97,"description":114,"extension":3969,"links":3970,"meta":3971,"navigation":3972,"path":67,"seo":3973,"stem":68,"__hash__":3974},"docs/templates/nextjs-saas-starter.md",{"type":98,"value":99,"toc":3895},"minimark",[100,105,115,118,123,129,134,222,226,229,243,245,249,253,265,269,281,285,307,316,318,322,326,329,370,374,393,397,402,407,418,422,426,437,439,443,447,485,489,522,526,564,566,570,574,613,617,668,671,679,683,689,693,733,737,748,752,764,772,776,894,1078,1082,1086,1138,1142,1183,1187,1190,1195,1220,1225,1304,1308,1311,1350,1354,1470,1474,1477,1527,1530,1536,1540,1557,1561,1611,1613,1617,1621,1625,1667,1671,1677,1849,1853,1858,2101,2105,2110,2279,2283,2286,2290,2324,2328,2345,2349,2353,2414,2418,2458,2462,2481,2485,2489,2494,2634,2638,2653,2655,2659,2663,2821,2825,2880,2884,2891,2947,2951,3022,3024,3028,3032,3037,3043,3047,3107,3111,3115,3123,3127,3143,3147,3151,3156,3160,3234,3238,3242,3248,3252,3292,3296,3300,3305,3309,3323,3325,3329,3333,3339,3356,3362,3366,3374,3391,3395,3402,3418,3423,3434,3438,3443,3469,3475,3479,3484,3507,3511,3516,3532,3536,3540,3554,3558,3563,3589,3593,3598,3616,3620,3629,3640,3644,3649,3666,3668,3672,3676,3718,3722,3736,3740,3771,3775,3789,3791,3795,3801,3807,3821,3827,3829,3833,3838,3846,3851,3863,3868,3876,3878,3882,3888,3891],[101,102,104],"h1",{"id":103},"nextjs-saas-starter-kit-panduan-lengkap","📄 Next.js SaaS Starter Kit - Panduan Lengkap",[106,107,108],"blockquote",{},[109,110,111],"p",{},[112,113,114],"strong",{},"Contoh dokumentasi produk untuk template SaaS berbasis Next.js + TypeScript + Supabase",[116,117],"hr",{},[119,120,122],"h2",{"id":121},"tentang-produk","📦 Tentang Produk",[109,124,125,128],{},[112,126,127],{},"Next.js SaaS Starter Kit"," adalah template siap pakai untuk membangun aplikasi SaaS modern dengan teknologi terkini. Hemat waktu development hingga 100+ jam dengan foundation yang solid dan best practices.",[130,131,133],"h3",{"id":132},"fitur-utama","✨ Fitur Utama",[135,136,137,145,152,159,166,173,180,187,194,201,208,215],"ul",{},[138,139,140,141,144],"li",{},"🚀 ",[112,142,143],{},"Next.js 14"," dengan App Router & Server Components",[138,146,147,148,151],{},"🔐 ",[112,149,150],{},"Authentication"," lengkap (Email, Google, GitHub)",[138,153,154,155,158],{},"💳 ",[112,156,157],{},"Payment Integration"," dengan Stripe",[138,160,161,162,165],{},"🎨 ",[112,163,164],{},"UI Components"," 50+ komponen siap pakai",[138,167,168,169,172],{},"📊 ",[112,170,171],{},"Admin Dashboard"," untuk manage users & data",[138,174,175,176,179],{},"📧 ",[112,177,178],{},"Email Service"," dengan Resend/SendGrid",[138,181,182,183,186],{},"🗄️ ",[112,184,185],{},"Database"," Supabase (PostgreSQL)",[138,188,189,190,193],{},"🎯 ",[112,191,192],{},"Landing Page"," conversion-optimized",[138,195,196,197,200],{},"📱 ",[112,198,199],{},"Responsive"," mobile-first design",[138,202,203,204,207],{},"🌙 ",[112,205,206],{},"Dark Mode"," support",[138,209,210,211,214],{},"🔍 ",[112,212,213],{},"SEO Optimized"," dengan metadata lengkap",[138,216,217,218,221],{},"📈 ",[112,219,220],{},"Analytics"," Google Analytics & Umami ready",[130,223,225],{"id":224},"untuk-siapa-produk-ini","💡 Untuk Siapa Produk Ini?",[109,227,228],{},"Produk ini cocok untuk:",[135,230,231,234,237,240],{},[138,232,233],{},"👨‍💻 Developers yang ingin launch SaaS dengan cepat",[138,235,236],{},"🚀 Startup yang butuh MVP dalam hitungan hari",[138,238,239],{},"💼 Freelancer yang sering build aplikasi web",[138,241,242],{},"🎓 Learners yang ingin belajar modern web development",[116,244],{},[119,246,248],{"id":247},"cara-membeli-produk","🛒 Cara Membeli Produk",[130,250,252],{"id":251},"langkah-1-pilih-produk","Langkah 1: Pilih Produk",[254,255,256,259,262],"ol",{},[138,257,258],{},"Kunjungi halaman produk di website kami",[138,260,261],{},"Baca deskripsi lengkap dan demo live",[138,263,264],{},"Cek bagian \"Kompatibel dengan\" untuk memastikan produk sesuai",[130,266,268],{"id":267},"langkah-2-klik-tombol-unduh-sekarang","Langkah 2: Klik Tombol \"Unduh Sekarang\"",[254,270,271,278],{},[138,272,273,274,277],{},"Klik tombol ",[112,275,276],{},"\"Unduh Sekarang\""," berwarna hijau",[138,279,280],{},"Anda akan diarahkan ke halaman checkout",[130,282,284],{"id":283},"langkah-3-lengkapi-pembayaran","Langkah 3: Lengkapi Pembayaran",[254,286,287,290,293],{},[138,288,289],{},"Pilih metode pembayaran favorit Anda",[138,291,292],{},"Ikuti instruksi pembayaran",[138,294,295,296],{},"Setelah berhasil, Anda akan menerima:\n",[135,297,298,301,304],{},[138,299,300],{},"✅ Email konfirmasi dengan link download",[138,302,303],{},"✅ Invoice pembelian",[138,305,306],{},"✅ Akses ke folder Google Drive",[106,308,309],{},[109,310,311,312,315],{},"⏱️ ",[112,313,314],{},"Waktu Proses",": Link download dikirim dalam 5-10 menit setelah pembayaran",[116,317],{},[119,319,321],{"id":320},"cara-download-produk-dari-google-drive","📥 Cara Download Produk dari Google Drive",[130,323,325],{"id":324},"metode-recommended-add-to-my-drive-untuk-file-1gb","Metode Recommended: Add to My Drive (Untuk File >1GB)",[109,327,328],{},"Karena ukuran produk cukup besar (~1.5GB), kami sarankan metode ini:",[254,330,331,337,343,350,353,356,361,364],{},[138,332,333,336],{},[112,334,335],{},"Klik link Google Drive"," yang diterima via email",[138,338,339,342],{},[112,340,341],{},"Login"," dengan akun Google Anda",[138,344,345,346,349],{},"Klik ikon ",[112,347,348],{},"\"Add to My Drive\""," (folder dengan tanda +) di pojok kanan atas",[138,351,352],{},"Pilih lokasi folder di Drive Anda",[138,354,355],{},"Tunggu proses copy selesai (2-5 menit)",[138,357,358],{},[112,359,360],{},"Buka Google Drive Anda",[138,362,363],{},"Cari folder \"Next.js SaaS Starter Kit\"",[138,365,366,369],{},[112,367,368],{},"Klik kanan > Download"," (atau gunakan Google Drive Desktop App untuk sync otomatis)",[130,371,373],{"id":372},"metode-alternatif-download-langsung","Metode Alternatif: Download Langsung",[254,375,376,378,384,390],{},[138,377,335],{},[138,379,273,380,383],{},[112,381,382],{},"\"Download\""," di pojok kanan atas",[138,385,386,387],{},"Jika muncul warning \"Can't scan for viruses\", klik ",[112,388,389],{},"\"Download anyway\"",[138,391,392],{},"File akan didownload sebagai ZIP",[130,394,396],{"id":395},"troubleshooting-download","Troubleshooting Download",[398,399,401],"h4",{"id":400},"download-quota-exceeded","❌ \"Download quota exceeded\"",[109,403,404],{},[112,405,406],{},"Solusi:",[254,408,409,412,415],{},[138,410,411],{},"Gunakan akun Google yang berbeda",[138,413,414],{},"ATAU tunggu 24 jam",[138,416,417],{},"ATAU gunakan metode \"Add to My Drive\"",[398,419,421],{"id":420},"download-terputus-di-tengah-jalan","❌ Download terputus di tengah jalan",[109,423,424],{},[112,425,406],{},[254,427,428,431,434],{},[138,429,430],{},"Gunakan download manager (IDM, Free Download Manager)",[138,432,433],{},"ATAU gunakan Google Drive Desktop App (auto-resume)",[138,435,436],{},"ATAU \"Add to My Drive\" lalu sync dengan desktop app",[116,438],{},[119,440,442],{"id":441},"persyaratan-sistem","💻 Persyaratan Sistem",[130,444,446],{"id":445},"minimal-requirements","Minimal Requirements",[135,448,449,455,461,467,473,479],{},[138,450,451,454],{},[112,452,453],{},"OS",": Windows 10, macOS 12+, atau Ubuntu 20.04+",[138,456,457,460],{},[112,458,459],{},"Processor",": Intel Core i3 / AMD Ryzen 3",[138,462,463,466],{},[112,464,465],{},"RAM",": 8GB minimum",[138,468,469,472],{},[112,470,471],{},"Storage",": 2GB ruang kosong",[138,474,475,478],{},[112,476,477],{},"Node.js",": Version 18.17 atau lebih baru",[138,480,481,484],{},[112,482,483],{},"Git",": Untuk version control (optional tapi recommended)",[130,486,488],{"id":487},"recommended-requirements","Recommended Requirements",[135,490,491,496,501,506,511,516],{},[138,492,493,495],{},[112,494,453],{},": Windows 11, macOS 13+, atau Ubuntu 22.04+",[138,497,498,500],{},[112,499,459],{},": Intel Core i5 / AMD Ryzen 5 atau lebih baik",[138,502,503,505],{},[112,504,465],{},": 16GB",[138,507,508,510],{},[112,509,471],{},": 5GB ruang kosong (untuk node_modules)",[138,512,513,515],{},[112,514,477],{},": Version 20 LTS",[138,517,518,521],{},[112,519,520],{},"Internet",": Koneksi stabil untuk install dependencies",[130,523,525],{"id":524},"software-yang-dibutuhkan","Software yang Dibutuhkan",[135,527,528,543,549,557],{},[138,529,530,531,534,535,542],{},"✅ ",[112,532,533],{},"Node.js & npm"," (",[536,537,541],"a",{"href":538,"rel":539},"https://nodejs.org/",[540],"nofollow","Download",")",[138,544,530,545,548],{},[112,546,547],{},"Code Editor"," (VS Code recommended)",[138,550,530,551,534,553,542],{},[112,552,483],{},[536,554,541],{"href":555,"rel":556},"https://git-scm.com/",[540],[138,558,559,560,563],{},"⚙️ ",[112,561,562],{},"pnpm"," (optional, tapi lebih cepat dari npm)",[116,565],{},[119,567,569],{"id":568},"instalasi-setup","🚀 Instalasi & Setup",[130,571,573],{"id":572},"langkah-1-extract-file","Langkah 1: Extract File",[254,575,576,582,592,603],{},[138,577,578,579],{},"Setelah download selesai, cari file di folder ",[112,580,581],{},"Downloads",[138,583,584,587,588],{},[112,585,586],{},"Klik kanan"," pada file ",[589,590,591],"code",{},"nextjs-saas-starter.zip",[138,593,594,595,598,599,602],{},"Pilih ",[112,596,597],{},"\"Extract All\""," (Windows) atau ",[112,600,601],{},"double-click"," (macOS)",[138,604,605,606,609,610],{},"Extract ke lokasi yang mudah diakses, misalnya ",[589,607,608],{},"C:\\Projects"," atau ",[589,611,612],{},"~/Projects",[130,614,616],{"id":615},"langkah-2-buka-project-di-vs-code","Langkah 2: Buka Project di VS Code",[618,619,624],"pre",{"className":620,"code":621,"language":622,"meta":623,"style":623},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Buka terminal/command prompt\ncd ~/Projects/nextjs-saas-starter\n\n# Buka di VS Code\ncode .\n","bash","",[589,625,626,635,646,653,659],{"__ignoreMap":623},[627,628,631],"span",{"class":629,"line":630},"line",1,[627,632,634],{"class":633},"sHwdD","# Buka terminal/command prompt\n",[627,636,638,642],{"class":629,"line":637},2,[627,639,641],{"class":640},"s2Zo4","cd",[627,643,645],{"class":644},"sfazB"," ~/Projects/nextjs-saas-starter\n",[627,647,649],{"class":629,"line":648},3,[627,650,652],{"emptyLinePlaceholder":651},true,"\n",[627,654,656],{"class":629,"line":655},4,[627,657,658],{"class":633},"# Buka di VS Code\n",[627,660,662,665],{"class":629,"line":661},5,[627,663,589],{"class":664},"sBMFI",[627,666,667],{"class":644}," .\n",[109,669,670],{},"Struktur folder akan terlihat seperti ini:",[618,672,677],{"className":673,"code":675,"language":676},[674],"language-text","nextjs-saas-starter/\n├── README.md                 # Dokumentasi utama\n├── SETUP.md                  # Setup guide singkat\n├── CHANGELOG.md              # Update history\n├── .env.example              # Template environment variables\n├── .gitignore                \n├── package.json              \n├── tsconfig.json             \n├── next.config.js            \n├── tailwind.config.ts        \n├── src/\n│   ├── app/                  # Next.js App Router\n│   ├── components/           # React components\n│   ├── lib/                  # Utilities & helpers\n│   └── styles/               # Global styles\n├── public/                   # Static assets\n├── supabase/\n│   ├── migrations/           # Database migrations\n│   └── seed.sql              # Sample data\n└── docs/                     # Extended documentation\n","text",[589,678,675],{"__ignoreMap":623},[130,680,682],{"id":681},"langkah-3-install-dependencies","Langkah 3: Install Dependencies",[109,684,685,686,688],{},"Pilih salah satu package manager (kami recommend ",[112,687,562],{}," karena lebih cepat):",[398,690,692],{"id":691},"menggunakan-pnpm-recommended","Menggunakan pnpm (Recommended):",[618,694,696],{"className":620,"code":695,"language":622,"meta":623,"style":623},"# Install pnpm jika belum punya\nnpm install -g pnpm\n\n# Install dependencies\npnpm install\n",[589,697,698,703,717,721,726],{"__ignoreMap":623},[627,699,700],{"class":629,"line":630},[627,701,702],{"class":633},"# Install pnpm jika belum punya\n",[627,704,705,708,711,714],{"class":629,"line":637},[627,706,707],{"class":664},"npm",[627,709,710],{"class":644}," install",[627,712,713],{"class":644}," -g",[627,715,716],{"class":644}," pnpm\n",[627,718,719],{"class":629,"line":648},[627,720,652],{"emptyLinePlaceholder":651},[627,722,723],{"class":629,"line":655},[627,724,725],{"class":633},"# Install dependencies\n",[627,727,728,730],{"class":629,"line":661},[627,729,562],{"class":664},[627,731,732],{"class":644}," install\n",[398,734,736],{"id":735},"menggunakan-npm","Menggunakan npm:",[618,738,740],{"className":620,"code":739,"language":622,"meta":623,"style":623},"npm install\n",[589,741,742],{"__ignoreMap":623},[627,743,744,746],{"class":629,"line":630},[627,745,707],{"class":664},[627,747,732],{"class":644},[398,749,751],{"id":750},"menggunakan-yarn","Menggunakan yarn:",[618,753,755],{"className":620,"code":754,"language":622,"meta":623,"style":623},"yarn install\n",[589,756,757],{"__ignoreMap":623},[627,758,759,762],{"class":629,"line":630},[627,760,761],{"class":664},"yarn",[627,763,732],{"class":644},[106,765,766],{},[109,767,311,768,771],{},[112,769,770],{},"Waktu install",": 3-5 menit tergantung koneksi internet",[130,773,775],{"id":774},"langkah-4-setup-environment-variables","Langkah 4: Setup Environment Variables",[254,777,778,831,889],{},[138,779,780,783,784,787,788,791,792],{},[112,781,782],{},"Copy file"," ",[589,785,786],{},".env.example"," menjadi ",[589,789,790],{},".env.local",":",[618,793,795],{"className":620,"code":794,"language":622,"meta":623,"style":623},"# macOS/Linux\ncp .env.example .env.local\n\n# Windows (Command Prompt)\ncopy .env.example .env.local\n",[589,796,797,802,813,817,822],{"__ignoreMap":623},[627,798,799],{"class":629,"line":630},[627,800,801],{"class":633},"# macOS/Linux\n",[627,803,804,807,810],{"class":629,"line":637},[627,805,806],{"class":664},"cp",[627,808,809],{"class":644}," .env.example",[627,811,812],{"class":644}," .env.local\n",[627,814,815],{"class":629,"line":648},[627,816,652],{"emptyLinePlaceholder":651},[627,818,819],{"class":629,"line":655},[627,820,821],{"class":633},"# Windows (Command Prompt)\n",[627,823,824,827,829],{"class":629,"line":661},[627,825,826],{"class":664},"copy",[627,828,809],{"class":644},[627,830,812],{"class":644},[138,832,833,783,836,791,838],{},[112,834,835],{},"Edit file",[589,837,790],{},[618,839,841],{"className":620,"code":840,"language":622,"meta":623,"style":623},"# macOS\nopen .env.local\n\n# Windows\nnotepad .env.local\n\n# VS Code\ncode .env.local\n",[589,842,843,848,855,859,864,871,876,882],{"__ignoreMap":623},[627,844,845],{"class":629,"line":630},[627,846,847],{"class":633},"# macOS\n",[627,849,850,853],{"class":629,"line":637},[627,851,852],{"class":664},"open",[627,854,812],{"class":644},[627,856,857],{"class":629,"line":648},[627,858,652],{"emptyLinePlaceholder":651},[627,860,861],{"class":629,"line":655},[627,862,863],{"class":633},"# Windows\n",[627,865,866,869],{"class":629,"line":661},[627,867,868],{"class":664},"notepad",[627,870,812],{"class":644},[627,872,874],{"class":629,"line":873},6,[627,875,652],{"emptyLinePlaceholder":651},[627,877,879],{"class":629,"line":878},7,[627,880,881],{"class":633},"# VS Code\n",[627,883,885,887],{"class":629,"line":884},8,[627,886,589],{"class":664},[627,888,812],{"class":644},[138,890,891,791],{},[112,892,893],{},"Konfigurasi yang wajib diisi",[618,895,899],{"className":896,"code":897,"language":898,"meta":623,"style":623},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# =================\n# APP CONFIGURATION\n# =================\nNEXT_PUBLIC_APP_URL=http://localhost:3000\nNEXT_PUBLIC_APP_NAME=\"My SaaS App\"\n\n# =================\n# SUPABASE\n# =================\nNEXT_PUBLIC_SUPABASE_URL=your-project-url.supabase.co\nNEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key\nSUPABASE_SERVICE_ROLE_KEY=your-service-role-key\n\n# =================\n# STRIPE (Optional - untuk payment)\n# =================\nNEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_xxxxx\nSTRIPE_SECRET_KEY=sk_test_xxxxx\nSTRIPE_WEBHOOK_SECRET=whsec_xxxxx\n\n# =================\n# EMAIL (Optional - untuk email notifications)\n# =================\nRESEND_API_KEY=re_xxxxx\nEMAIL_FROM=noreply@yourdomain.com\n\n# =================\n# OAUTH (Optional - untuk social login)\n# =================\nGOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\nGOOGLE_CLIENT_SECRET=xxxxx\nGITHUB_CLIENT_ID=xxxxx\nGITHUB_CLIENT_SECRET=xxxxx\n","env",[589,900,901,906,911,915,920,925,929,933,938,943,949,955,961,966,971,977,982,988,994,1000,1005,1010,1016,1021,1027,1033,1038,1043,1049,1054,1060,1066,1072],{"__ignoreMap":623},[627,902,903],{"class":629,"line":630},[627,904,905],{},"# =================\n",[627,907,908],{"class":629,"line":637},[627,909,910],{},"# APP CONFIGURATION\n",[627,912,913],{"class":629,"line":648},[627,914,905],{},[627,916,917],{"class":629,"line":655},[627,918,919],{},"NEXT_PUBLIC_APP_URL=http://localhost:3000\n",[627,921,922],{"class":629,"line":661},[627,923,924],{},"NEXT_PUBLIC_APP_NAME=\"My SaaS App\"\n",[627,926,927],{"class":629,"line":873},[627,928,652],{"emptyLinePlaceholder":651},[627,930,931],{"class":629,"line":878},[627,932,905],{},[627,934,935],{"class":629,"line":884},[627,936,937],{},"# SUPABASE\n",[627,939,941],{"class":629,"line":940},9,[627,942,905],{},[627,944,946],{"class":629,"line":945},10,[627,947,948],{},"NEXT_PUBLIC_SUPABASE_URL=your-project-url.supabase.co\n",[627,950,952],{"class":629,"line":951},11,[627,953,954],{},"NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key\n",[627,956,958],{"class":629,"line":957},12,[627,959,960],{},"SUPABASE_SERVICE_ROLE_KEY=your-service-role-key\n",[627,962,964],{"class":629,"line":963},13,[627,965,652],{"emptyLinePlaceholder":651},[627,967,969],{"class":629,"line":968},14,[627,970,905],{},[627,972,974],{"class":629,"line":973},15,[627,975,976],{},"# STRIPE (Optional - untuk payment)\n",[627,978,980],{"class":629,"line":979},16,[627,981,905],{},[627,983,985],{"class":629,"line":984},17,[627,986,987],{},"NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_xxxxx\n",[627,989,991],{"class":629,"line":990},18,[627,992,993],{},"STRIPE_SECRET_KEY=sk_test_xxxxx\n",[627,995,997],{"class":629,"line":996},19,[627,998,999],{},"STRIPE_WEBHOOK_SECRET=whsec_xxxxx\n",[627,1001,1003],{"class":629,"line":1002},20,[627,1004,652],{"emptyLinePlaceholder":651},[627,1006,1008],{"class":629,"line":1007},21,[627,1009,905],{},[627,1011,1013],{"class":629,"line":1012},22,[627,1014,1015],{},"# EMAIL (Optional - untuk email notifications)\n",[627,1017,1019],{"class":629,"line":1018},23,[627,1020,905],{},[627,1022,1024],{"class":629,"line":1023},24,[627,1025,1026],{},"RESEND_API_KEY=re_xxxxx\n",[627,1028,1030],{"class":629,"line":1029},25,[627,1031,1032],{},"EMAIL_FROM=noreply@yourdomain.com\n",[627,1034,1036],{"class":629,"line":1035},26,[627,1037,652],{"emptyLinePlaceholder":651},[627,1039,1041],{"class":629,"line":1040},27,[627,1042,905],{},[627,1044,1046],{"class":629,"line":1045},28,[627,1047,1048],{},"# OAUTH (Optional - untuk social login)\n",[627,1050,1052],{"class":629,"line":1051},29,[627,1053,905],{},[627,1055,1057],{"class":629,"line":1056},30,[627,1058,1059],{},"GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n",[627,1061,1063],{"class":629,"line":1062},31,[627,1064,1065],{},"GOOGLE_CLIENT_SECRET=xxxxx\n",[627,1067,1069],{"class":629,"line":1068},32,[627,1070,1071],{},"GITHUB_CLIENT_ID=xxxxx\n",[627,1073,1075],{"class":629,"line":1074},33,[627,1076,1077],{},"GITHUB_CLIENT_SECRET=xxxxx\n",[130,1079,1081],{"id":1080},"langkah-5-setup-supabase-database","Langkah 5: Setup Supabase Database",[398,1083,1085],{"id":1084},"a-buat-project-di-supabase","A. Buat Project di Supabase",[254,1087,1088,1096,1103,1109,1135],{},[138,1089,1090,1091],{},"Buka ",[536,1092,1095],{"href":1093,"rel":1094},"https://supabase.com",[540],"supabase.com",[138,1097,1098,609,1101],{},[112,1099,1100],{},"Sign up",[112,1102,341],{},[138,1104,1105,1106],{},"Klik ",[112,1107,1108],{},"\"New Project\"",[138,1110,1111,1112],{},"Isi detail project:\n",[135,1113,1114,1120,1129],{},[138,1115,1116,1119],{},[112,1117,1118],{},"Name",": My SaaS App",[138,1121,1122,1125,1126],{},[112,1123,1124],{},"Database Password",": ",[627,1127,1128],{},"password yang kuat",[138,1130,1131,1134],{},[112,1132,1133],{},"Region",": Singapore (Southeast Asia)",[138,1136,1137],{},"Tunggu project selesai dibuat (~2 menit)",[398,1139,1141],{"id":1140},"b-dapatkan-credentials","B. Dapatkan Credentials",[254,1143,1144,1150],{},[138,1145,1146,1147],{},"Di dashboard Supabase, buka ",[112,1148,1149],{},"Settings > API",[138,1151,1152,1153,1155,1156],{},"Copy credentials berikut ke ",[589,1154,790],{},":\n",[135,1157,1158,1167,1175],{},[138,1159,1160,1163,1164],{},[112,1161,1162],{},"Project URL"," → ",[589,1165,1166],{},"NEXT_PUBLIC_SUPABASE_URL",[138,1168,1169,1163,1172],{},[112,1170,1171],{},"Anon/Public Key",[589,1173,1174],{},"NEXT_PUBLIC_SUPABASE_ANON_KEY",[138,1176,1177,1163,1180],{},[112,1178,1179],{},"Service Role Key",[589,1181,1182],{},"SUPABASE_SERVICE_ROLE_KEY",[398,1184,1186],{"id":1185},"c-run-database-migrations","C. Run Database Migrations",[109,1188,1189],{},"Kita akan create tables yang dibutuhkan:",[109,1191,1192],{},[112,1193,1194],{},"Option 1: Via Supabase Dashboard (Mudah)",[254,1196,1197,1203,1209,1212,1217],{},[138,1198,1090,1199,1202],{},[112,1200,1201],{},"SQL Editor"," di dashboard Supabase",[138,1204,1205,1206],{},"Copy isi file ",[589,1207,1208],{},"supabase/migrations/001_initial_schema.sql",[138,1210,1211],{},"Paste di SQL Editor",[138,1213,1105,1214],{},[112,1215,1216],{},"Run",[138,1218,1219],{},"Ulangi untuk semua file migration",[109,1221,1222],{},[112,1223,1224],{},"Option 2: Via Supabase CLI (Recommended untuk development)",[618,1226,1228],{"className":620,"code":1227,"language":622,"meta":623,"style":623},"# Install Supabase CLI\nnpm install -g supabase\n\n# Login\nsupabase login\n\n# Link ke project Anda\nsupabase link --project-ref your-project-ref\n\n# Run all migrations\nsupabase db push\n",[589,1229,1230,1235,1246,1250,1255,1263,1267,1272,1285,1289,1294],{"__ignoreMap":623},[627,1231,1232],{"class":629,"line":630},[627,1233,1234],{"class":633},"# Install Supabase CLI\n",[627,1236,1237,1239,1241,1243],{"class":629,"line":637},[627,1238,707],{"class":664},[627,1240,710],{"class":644},[627,1242,713],{"class":644},[627,1244,1245],{"class":644}," supabase\n",[627,1247,1248],{"class":629,"line":648},[627,1249,652],{"emptyLinePlaceholder":651},[627,1251,1252],{"class":629,"line":655},[627,1253,1254],{"class":633},"# Login\n",[627,1256,1257,1260],{"class":629,"line":661},[627,1258,1259],{"class":664},"supabase",[627,1261,1262],{"class":644}," login\n",[627,1264,1265],{"class":629,"line":873},[627,1266,652],{"emptyLinePlaceholder":651},[627,1268,1269],{"class":629,"line":878},[627,1270,1271],{"class":633},"# Link ke project Anda\n",[627,1273,1274,1276,1279,1282],{"class":629,"line":884},[627,1275,1259],{"class":664},[627,1277,1278],{"class":644}," link",[627,1280,1281],{"class":644}," --project-ref",[627,1283,1284],{"class":644}," your-project-ref\n",[627,1286,1287],{"class":629,"line":940},[627,1288,652],{"emptyLinePlaceholder":651},[627,1290,1291],{"class":629,"line":945},[627,1292,1293],{"class":633},"# Run all migrations\n",[627,1295,1296,1298,1301],{"class":629,"line":951},[627,1297,1259],{"class":664},[627,1299,1300],{"class":644}," db",[627,1302,1303],{"class":644}," push\n",[398,1305,1307],{"id":1306},"d-seed-sample-data-optional","D. Seed Sample Data (Optional)",[109,1309,1310],{},"Jika ingin data contoh untuk testing:",[618,1312,1314],{"className":620,"code":1313,"language":622,"meta":623,"style":623},"# Via CLI\nsupabase db reset --db-url your-connection-string\n\n# ATAU via SQL Editor\n# Copy-paste isi file supabase/seed.sql\n",[589,1315,1316,1321,1336,1340,1345],{"__ignoreMap":623},[627,1317,1318],{"class":629,"line":630},[627,1319,1320],{"class":633},"# Via CLI\n",[627,1322,1323,1325,1327,1330,1333],{"class":629,"line":637},[627,1324,1259],{"class":664},[627,1326,1300],{"class":644},[627,1328,1329],{"class":644}," reset",[627,1331,1332],{"class":644}," --db-url",[627,1334,1335],{"class":644}," your-connection-string\n",[627,1337,1338],{"class":629,"line":648},[627,1339,652],{"emptyLinePlaceholder":651},[627,1341,1342],{"class":629,"line":655},[627,1343,1344],{"class":633},"# ATAU via SQL Editor\n",[627,1346,1347],{"class":629,"line":661},[627,1348,1349],{"class":633},"# Copy-paste isi file supabase/seed.sql\n",[130,1351,1353],{"id":1352},"langkah-6-setup-stripe-optional-skip-jika-tidak-butuh-payment","Langkah 6: Setup Stripe (Optional - Skip jika tidak butuh payment)",[254,1355,1356,1364,1371,1376,1399,1442],{},[138,1357,1358,1359],{},"Buat akun di ",[536,1360,1363],{"href":1361,"rel":1362},"https://stripe.com",[540],"stripe.com",[138,1365,1366,1367,1370],{},"Aktifkan ",[112,1368,1369],{},"Test Mode"," (toggle di dashboard)",[138,1372,1090,1373],{},[112,1374,1375],{},"Developers > API Keys",[138,1377,1378,1379,791,1381],{},"Copy keys ke ",[589,1380,790],{},[135,1382,1383,1391],{},[138,1384,1385,1163,1388],{},[112,1386,1387],{},"Publishable key",[589,1389,1390],{},"NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY",[138,1392,1393,1163,1396],{},[112,1394,1395],{},"Secret key",[589,1397,1398],{},"STRIPE_SECRET_KEY",[138,1400,1401,1404,1405],{},[112,1402,1403],{},"Setup Webhook"," (untuk production nanti):",[135,1406,1407,1412,1420,1433],{},[138,1408,1090,1409],{},[112,1410,1411],{},"Developers > Webhooks",[138,1413,1414,1125,1417],{},[112,1415,1416],{},"Add endpoint",[589,1418,1419],{},"https://yourdomain.com/api/webhooks/stripe",[138,1421,1422,1423,1426,1427,1426,1430],{},"Select events: ",[589,1424,1425],{},"checkout.session.completed",", ",[589,1428,1429],{},"customer.subscription.updated",[589,1431,1432],{},"customer.subscription.deleted",[138,1434,1435,1436,1163,1439],{},"Copy ",[112,1437,1438],{},"Signing secret",[589,1440,1441],{},"STRIPE_WEBHOOK_SECRET",[138,1443,1444,1447,1448],{},[112,1445,1446],{},"Create Products"," di Stripe Dashboard:",[135,1449,1450,1455,1461],{},[138,1451,1090,1452],{},[112,1453,1454],{},"Products",[138,1456,1457,1460],{},[112,1458,1459],{},"Add product"," untuk setiap pricing tier",[138,1462,1435,1463,1466,1467],{},[112,1464,1465],{},"Price ID"," dan update di ",[589,1468,1469],{},"src/config/pricing.ts",[130,1471,1473],{"id":1472},"langkah-7-run-development-server","Langkah 7: Run Development Server",[109,1475,1476],{},"Sekarang kita siap menjalankan aplikasi!",[618,1478,1480],{"className":620,"code":1479,"language":622,"meta":623,"style":623},"# Menggunakan npm\nnpm run dev\n\n# Menggunakan pnpm\npnpm dev\n\n# Menggunakan yarn\nyarn dev\n",[589,1481,1482,1487,1497,1501,1506,1512,1516,1521],{"__ignoreMap":623},[627,1483,1484],{"class":629,"line":630},[627,1485,1486],{"class":633},"# Menggunakan npm\n",[627,1488,1489,1491,1494],{"class":629,"line":637},[627,1490,707],{"class":664},[627,1492,1493],{"class":644}," run",[627,1495,1496],{"class":644}," dev\n",[627,1498,1499],{"class":629,"line":648},[627,1500,652],{"emptyLinePlaceholder":651},[627,1502,1503],{"class":629,"line":655},[627,1504,1505],{"class":633},"# Menggunakan pnpm\n",[627,1507,1508,1510],{"class":629,"line":661},[627,1509,562],{"class":664},[627,1511,1496],{"class":644},[627,1513,1514],{"class":629,"line":873},[627,1515,652],{"emptyLinePlaceholder":651},[627,1517,1518],{"class":629,"line":878},[627,1519,1520],{"class":633},"# Menggunakan yarn\n",[627,1522,1523,1525],{"class":629,"line":884},[627,1524,761],{"class":664},[627,1526,1496],{"class":644},[109,1528,1529],{},"Tunggu hingga muncul pesan:",[618,1531,1534],{"className":1532,"code":1533,"language":676},[674],"✓ Ready in 2.5s\n○ Local:        http://localhost:3000\n○ Network:      http://192.168.1.100:3000\n",[589,1535,1533],{"__ignoreMap":623},[130,1537,1539],{"id":1538},"langkah-8-buka-di-browser","Langkah 8: Buka di Browser",[254,1541,1542,1545,1554],{},[138,1543,1544],{},"Buka browser favorit Anda",[138,1546,1547,1548],{},"Akses ",[112,1549,1550],{},[536,1551,1552],{"href":1552,"rel":1553},"http://localhost:3000",[540],[138,1555,1556],{},"Anda akan melihat landing page SaaS starter kit! 🎉",[398,1558,1560],{"id":1559},"pages-yang-tersedia","Pages yang Tersedia:",[135,1562,1563,1569,1575,1581,1587,1593,1599,1605],{},[138,1564,1565,1568],{},[589,1566,1567],{},"/"," - Landing page",[138,1570,1571,1574],{},[589,1572,1573],{},"/pricing"," - Pricing plans",[138,1576,1577,1580],{},[589,1578,1579],{},"/features"," - Feature showcase",[138,1582,1583,1586],{},[589,1584,1585],{},"/docs"," - Documentation",[138,1588,1589,1592],{},[589,1590,1591],{},"/auth/login"," - Login page",[138,1594,1595,1598],{},[589,1596,1597],{},"/auth/signup"," - Signup page",[138,1600,1601,1604],{},[589,1602,1603],{},"/dashboard"," - User dashboard (require auth)",[138,1606,1607,1610],{},[589,1608,1609],{},"/admin"," - Admin panel (require admin role)",[116,1612],{},[119,1614,1616],{"id":1615},"️-konfigurasi-lanjutan","⚙️ Konfigurasi Lanjutan",[130,1618,1620],{"id":1619},"_1-kustomisasi-branding","1. Kustomisasi Branding",[398,1622,1624],{"id":1623},"update-logo-favicon","Update Logo & Favicon",[618,1626,1628],{"className":620,"code":1627,"language":622,"meta":623,"style":623},"# Replace file-file ini dengan logo Anda:\npublic/logo.svg          # Logo utama\npublic/logo-dark.svg     # Logo untuk dark mode\npublic/favicon.ico       # Favicon\npublic/og-image.png      # Open Graph image untuk social share\n",[589,1629,1630,1635,1643,1651,1659],{"__ignoreMap":623},[627,1631,1632],{"class":629,"line":630},[627,1633,1634],{"class":633},"# Replace file-file ini dengan logo Anda:\n",[627,1636,1637,1640],{"class":629,"line":637},[627,1638,1639],{"class":664},"public/logo.svg",[627,1641,1642],{"class":633},"          # Logo utama\n",[627,1644,1645,1648],{"class":629,"line":648},[627,1646,1647],{"class":664},"public/logo-dark.svg",[627,1649,1650],{"class":633},"     # Logo untuk dark mode\n",[627,1652,1653,1656],{"class":629,"line":655},[627,1654,1655],{"class":664},"public/favicon.ico",[627,1657,1658],{"class":633},"       # Favicon\n",[627,1660,1661,1664],{"class":629,"line":661},[627,1662,1663],{"class":664},"public/og-image.png",[627,1665,1666],{"class":633},"      # Open Graph image untuk social share\n",[398,1668,1670],{"id":1669},"update-colors-theme","Update Colors & Theme",[109,1672,1673,1674,791],{},"Edit file ",[589,1675,1676],{},"tailwind.config.ts",[618,1678,1682],{"className":1679,"code":1680,"language":1681,"meta":623,"style":623},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default {\n  theme: {\n    extend: {\n      colors: {\n        // Ganti dengan brand colors Anda\n        primary: {\n          DEFAULT: '#10b981', // Green\n          foreground: '#ffffff',\n        },\n        secondary: {\n          DEFAULT: '#84cc16', // Lime\n          foreground: '#000000',\n        },\n      },\n    },\n  },\n}\n","typescript",[589,1683,1684,1697,1707,1716,1725,1730,1739,1761,1778,1783,1792,1810,1825,1829,1834,1839,1844],{"__ignoreMap":623},[627,1685,1686,1690,1693],{"class":629,"line":630},[627,1687,1689],{"class":1688},"s7zQu","export",[627,1691,1692],{"class":1688}," default",[627,1694,1696],{"class":1695},"sMK4o"," {\n",[627,1698,1699,1703,1705],{"class":629,"line":637},[627,1700,1702],{"class":1701},"swJcz","  theme",[627,1704,791],{"class":1695},[627,1706,1696],{"class":1695},[627,1708,1709,1712,1714],{"class":629,"line":648},[627,1710,1711],{"class":1701},"    extend",[627,1713,791],{"class":1695},[627,1715,1696],{"class":1695},[627,1717,1718,1721,1723],{"class":629,"line":655},[627,1719,1720],{"class":1701},"      colors",[627,1722,791],{"class":1695},[627,1724,1696],{"class":1695},[627,1726,1727],{"class":629,"line":661},[627,1728,1729],{"class":633},"        // Ganti dengan brand colors Anda\n",[627,1731,1732,1735,1737],{"class":629,"line":873},[627,1733,1734],{"class":1701},"        primary",[627,1736,791],{"class":1695},[627,1738,1696],{"class":1695},[627,1740,1741,1744,1746,1749,1752,1755,1758],{"class":629,"line":878},[627,1742,1743],{"class":1701},"          DEFAULT",[627,1745,791],{"class":1695},[627,1747,1748],{"class":1695}," '",[627,1750,1751],{"class":644},"#10b981",[627,1753,1754],{"class":1695},"'",[627,1756,1757],{"class":1695},",",[627,1759,1760],{"class":633}," // Green\n",[627,1762,1763,1766,1768,1770,1773,1775],{"class":629,"line":884},[627,1764,1765],{"class":1701},"          foreground",[627,1767,791],{"class":1695},[627,1769,1748],{"class":1695},[627,1771,1772],{"class":644},"#ffffff",[627,1774,1754],{"class":1695},[627,1776,1777],{"class":1695},",\n",[627,1779,1780],{"class":629,"line":940},[627,1781,1782],{"class":1695},"        },\n",[627,1784,1785,1788,1790],{"class":629,"line":945},[627,1786,1787],{"class":1701},"        secondary",[627,1789,791],{"class":1695},[627,1791,1696],{"class":1695},[627,1793,1794,1796,1798,1800,1803,1805,1807],{"class":629,"line":951},[627,1795,1743],{"class":1701},[627,1797,791],{"class":1695},[627,1799,1748],{"class":1695},[627,1801,1802],{"class":644},"#84cc16",[627,1804,1754],{"class":1695},[627,1806,1757],{"class":1695},[627,1808,1809],{"class":633}," // Lime\n",[627,1811,1812,1814,1816,1818,1821,1823],{"class":629,"line":957},[627,1813,1765],{"class":1701},[627,1815,791],{"class":1695},[627,1817,1748],{"class":1695},[627,1819,1820],{"class":644},"#000000",[627,1822,1754],{"class":1695},[627,1824,1777],{"class":1695},[627,1826,1827],{"class":629,"line":963},[627,1828,1782],{"class":1695},[627,1830,1831],{"class":629,"line":968},[627,1832,1833],{"class":1695},"      },\n",[627,1835,1836],{"class":629,"line":973},[627,1837,1838],{"class":1695},"    },\n",[627,1840,1841],{"class":629,"line":979},[627,1842,1843],{"class":1695},"  },\n",[627,1845,1846],{"class":629,"line":984},[627,1847,1848],{"class":1695},"}\n",[398,1850,1852],{"id":1851},"update-site-metadata","Update Site Metadata",[109,1854,1673,1855,791],{},[589,1856,1857],{},"src/app/layout.tsx",[618,1859,1861],{"className":1679,"code":1860,"language":1681,"meta":623,"style":623},"export const metadata: Metadata = {\n  title: 'Your SaaS Name',\n  description: 'Your SaaS Description',\n  keywords: ['saas', 'your', 'keywords'],\n  authors: [{ name: 'Your Name' }],\n  creator: 'Your Name',\n  openGraph: {\n    title: 'Your SaaS Name',\n    description: 'Your SaaS Description',\n    url: 'https://yourdomain.com',\n    siteName: 'Your SaaS Name',\n    images: ['/og-image.png'],\n  },\n}\n",[589,1862,1863,1885,1901,1917,1957,1988,2003,2012,2027,2042,2058,2073,2093,2097],{"__ignoreMap":623},[627,1864,1865,1867,1871,1875,1877,1880,1883],{"class":629,"line":630},[627,1866,1689],{"class":1688},[627,1868,1870],{"class":1869},"spNyl"," const",[627,1872,1874],{"class":1873},"sTEyZ"," metadata",[627,1876,791],{"class":1695},[627,1878,1879],{"class":664}," Metadata",[627,1881,1882],{"class":1695}," =",[627,1884,1696],{"class":1695},[627,1886,1887,1890,1892,1894,1897,1899],{"class":629,"line":637},[627,1888,1889],{"class":1701},"  title",[627,1891,791],{"class":1695},[627,1893,1748],{"class":1695},[627,1895,1896],{"class":644},"Your SaaS Name",[627,1898,1754],{"class":1695},[627,1900,1777],{"class":1695},[627,1902,1903,1906,1908,1910,1913,1915],{"class":629,"line":648},[627,1904,1905],{"class":1701},"  description",[627,1907,791],{"class":1695},[627,1909,1748],{"class":1695},[627,1911,1912],{"class":644},"Your SaaS Description",[627,1914,1754],{"class":1695},[627,1916,1777],{"class":1695},[627,1918,1919,1922,1924,1927,1929,1932,1934,1936,1938,1941,1943,1945,1947,1950,1952,1955],{"class":629,"line":655},[627,1920,1921],{"class":1701},"  keywords",[627,1923,791],{"class":1695},[627,1925,1926],{"class":1873}," [",[627,1928,1754],{"class":1695},[627,1930,1931],{"class":644},"saas",[627,1933,1754],{"class":1695},[627,1935,1757],{"class":1695},[627,1937,1748],{"class":1695},[627,1939,1940],{"class":644},"your",[627,1942,1754],{"class":1695},[627,1944,1757],{"class":1695},[627,1946,1748],{"class":1695},[627,1948,1949],{"class":644},"keywords",[627,1951,1754],{"class":1695},[627,1953,1954],{"class":1873},"]",[627,1956,1777],{"class":1695},[627,1958,1959,1962,1964,1966,1969,1972,1974,1976,1979,1981,1984,1986],{"class":629,"line":661},[627,1960,1961],{"class":1701},"  authors",[627,1963,791],{"class":1695},[627,1965,1926],{"class":1873},[627,1967,1968],{"class":1695},"{",[627,1970,1971],{"class":1701}," name",[627,1973,791],{"class":1695},[627,1975,1748],{"class":1695},[627,1977,1978],{"class":644},"Your Name",[627,1980,1754],{"class":1695},[627,1982,1983],{"class":1695}," }",[627,1985,1954],{"class":1873},[627,1987,1777],{"class":1695},[627,1989,1990,1993,1995,1997,1999,2001],{"class":629,"line":873},[627,1991,1992],{"class":1701},"  creator",[627,1994,791],{"class":1695},[627,1996,1748],{"class":1695},[627,1998,1978],{"class":644},[627,2000,1754],{"class":1695},[627,2002,1777],{"class":1695},[627,2004,2005,2008,2010],{"class":629,"line":878},[627,2006,2007],{"class":1701},"  openGraph",[627,2009,791],{"class":1695},[627,2011,1696],{"class":1695},[627,2013,2014,2017,2019,2021,2023,2025],{"class":629,"line":884},[627,2015,2016],{"class":1701},"    title",[627,2018,791],{"class":1695},[627,2020,1748],{"class":1695},[627,2022,1896],{"class":644},[627,2024,1754],{"class":1695},[627,2026,1777],{"class":1695},[627,2028,2029,2032,2034,2036,2038,2040],{"class":629,"line":940},[627,2030,2031],{"class":1701},"    description",[627,2033,791],{"class":1695},[627,2035,1748],{"class":1695},[627,2037,1912],{"class":644},[627,2039,1754],{"class":1695},[627,2041,1777],{"class":1695},[627,2043,2044,2047,2049,2051,2054,2056],{"class":629,"line":945},[627,2045,2046],{"class":1701},"    url",[627,2048,791],{"class":1695},[627,2050,1748],{"class":1695},[627,2052,2053],{"class":644},"https://yourdomain.com",[627,2055,1754],{"class":1695},[627,2057,1777],{"class":1695},[627,2059,2060,2063,2065,2067,2069,2071],{"class":629,"line":951},[627,2061,2062],{"class":1701},"    siteName",[627,2064,791],{"class":1695},[627,2066,1748],{"class":1695},[627,2068,1896],{"class":644},[627,2070,1754],{"class":1695},[627,2072,1777],{"class":1695},[627,2074,2075,2078,2080,2082,2084,2087,2089,2091],{"class":629,"line":957},[627,2076,2077],{"class":1701},"    images",[627,2079,791],{"class":1695},[627,2081,1926],{"class":1873},[627,2083,1754],{"class":1695},[627,2085,2086],{"class":644},"/og-image.png",[627,2088,1754],{"class":1695},[627,2090,1954],{"class":1873},[627,2092,1777],{"class":1695},[627,2094,2095],{"class":629,"line":963},[627,2096,1843],{"class":1695},[627,2098,2099],{"class":629,"line":968},[627,2100,1848],{"class":1695},[130,2102,2104],{"id":2103},"_2-kustomisasi-landing-page","2. Kustomisasi Landing Page",[109,2106,1673,2107,791],{},[589,2108,2109],{},"src/app/page.tsx",[618,2111,2115],{"className":2112,"code":2113,"language":2114,"meta":623,"style":623},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Update hero section\n\u003CHeroSection\n  title=\"Your Catchy Headline\"\n  subtitle=\"Your compelling subtitle that explains the value\"\n  ctaText=\"Get Started Free\"\n  ctaLink=\"/auth/signup\"\n/>\n\n// Update features\nconst features = [\n  {\n    title: 'Your Feature 1',\n    description: 'Description of feature 1',\n    icon: \u003CZap />,\n  },\n  // ... more features\n]\n","tsx",[589,2116,2117,2122,2130,2146,2160,2174,2187,2192,2196,2201,2214,2219,2234,2249,2265,2269,2274],{"__ignoreMap":623},[627,2118,2119],{"class":629,"line":630},[627,2120,2121],{"class":633},"// Update hero section\n",[627,2123,2124,2127],{"class":629,"line":637},[627,2125,2126],{"class":1695},"\u003C",[627,2128,2129],{"class":664},"HeroSection\n",[627,2131,2132,2134,2137,2140,2143],{"class":629,"line":648},[627,2133,1889],{"class":1869},[627,2135,2136],{"class":1695},"=",[627,2138,2139],{"class":1695},"\"",[627,2141,2142],{"class":644},"Your Catchy Headline",[627,2144,2145],{"class":1695},"\"\n",[627,2147,2148,2151,2153,2155,2158],{"class":629,"line":655},[627,2149,2150],{"class":1869},"  subtitle",[627,2152,2136],{"class":1695},[627,2154,2139],{"class":1695},[627,2156,2157],{"class":644},"Your compelling subtitle that explains the value",[627,2159,2145],{"class":1695},[627,2161,2162,2165,2167,2169,2172],{"class":629,"line":661},[627,2163,2164],{"class":1869},"  ctaText",[627,2166,2136],{"class":1695},[627,2168,2139],{"class":1695},[627,2170,2171],{"class":644},"Get Started Free",[627,2173,2145],{"class":1695},[627,2175,2176,2179,2181,2183,2185],{"class":629,"line":873},[627,2177,2178],{"class":1869},"  ctaLink",[627,2180,2136],{"class":1695},[627,2182,2139],{"class":1695},[627,2184,1597],{"class":644},[627,2186,2145],{"class":1695},[627,2188,2189],{"class":629,"line":878},[627,2190,2191],{"class":1695},"/>\n",[627,2193,2194],{"class":629,"line":884},[627,2195,652],{"emptyLinePlaceholder":651},[627,2197,2198],{"class":629,"line":940},[627,2199,2200],{"class":633},"// Update features\n",[627,2202,2203,2206,2209,2211],{"class":629,"line":945},[627,2204,2205],{"class":1869},"const",[627,2207,2208],{"class":1873}," features ",[627,2210,2136],{"class":1695},[627,2212,2213],{"class":1873}," [\n",[627,2215,2216],{"class":629,"line":951},[627,2217,2218],{"class":1695},"  {\n",[627,2220,2221,2223,2225,2227,2230,2232],{"class":629,"line":957},[627,2222,2016],{"class":1701},[627,2224,791],{"class":1695},[627,2226,1748],{"class":1695},[627,2228,2229],{"class":644},"Your Feature 1",[627,2231,1754],{"class":1695},[627,2233,1777],{"class":1695},[627,2235,2236,2238,2240,2242,2245,2247],{"class":629,"line":963},[627,2237,2031],{"class":1701},[627,2239,791],{"class":1695},[627,2241,1748],{"class":1695},[627,2243,2244],{"class":644},"Description of feature 1",[627,2246,1754],{"class":1695},[627,2248,1777],{"class":1695},[627,2250,2251,2254,2256,2259,2262],{"class":629,"line":968},[627,2252,2253],{"class":1701},"    icon",[627,2255,791],{"class":1695},[627,2257,2258],{"class":1695}," \u003C",[627,2260,2261],{"class":664},"Zap",[627,2263,2264],{"class":1695}," />,\n",[627,2266,2267],{"class":629,"line":973},[627,2268,1843],{"class":1695},[627,2270,2271],{"class":629,"line":979},[627,2272,2273],{"class":633},"  // ... more features\n",[627,2275,2276],{"class":629,"line":984},[627,2277,2278],{"class":1873},"]\n",[130,2280,2282],{"id":2281},"_3-setup-email-notifications","3. Setup Email Notifications",[109,2284,2285],{},"Kami support 2 email providers:",[398,2287,2289],{"id":2288},"option-a-resend-recommended","Option A: Resend (Recommended)",[254,2291,2292,2300,2303,2306],{},[138,2293,2294,2295],{},"Daftar di ",[536,2296,2299],{"href":2297,"rel":2298},"https://resend.com",[540],"resend.com",[138,2301,2302],{},"Verify domain Anda",[138,2304,2305],{},"Create API key",[138,2307,2308,2309,1155,2311],{},"Add ke ",[589,2310,790],{},[618,2312,2314],{"className":896,"code":2313,"language":898,"meta":623,"style":623},"RESEND_API_KEY=re_xxxxx\nEMAIL_FROM=noreply@yourdomain.com\n",[589,2315,2316,2320],{"__ignoreMap":623},[627,2317,2318],{"class":629,"line":630},[627,2319,1026],{},[627,2321,2322],{"class":629,"line":637},[627,2323,1032],{},[398,2325,2327],{"id":2326},"option-b-sendgrid","Option B: SendGrid",[254,2329,2330,2337,2339],{},[138,2331,2294,2332],{},[536,2333,2336],{"href":2334,"rel":2335},"https://sendgrid.com",[540],"sendgrid.com",[138,2338,2305],{},[138,2340,2341,2342],{},"Update config di ",[589,2343,2344],{},"src/lib/email.ts",[130,2346,2348],{"id":2347},"_4-setup-oauth-providers","4. Setup OAuth Providers",[398,2350,2352],{"id":2351},"google-oauth","Google OAuth",[254,2354,2355,2362,2365,2371,2402],{},[138,2356,1090,2357],{},[536,2358,2361],{"href":2359,"rel":2360},"https://console.cloud.google.com",[540],"Google Cloud Console",[138,2363,2364],{},"Create new project",[138,2366,2367,2368],{},"Enable ",[112,2369,2370],{},"Google+ API",[138,2372,2373,2374,1155,2377],{},"Create ",[112,2375,2376],{},"OAuth 2.0 Client ID",[135,2378,2379,2385],{},[138,2380,2381,2384],{},[112,2382,2383],{},"Application type",": Web application",[138,2386,2387,1155,2390],{},[112,2388,2389],{},"Authorized redirect URIs",[135,2391,2392,2397],{},[138,2393,2394],{},[589,2395,2396],{},"http://localhost:3000/api/auth/callback/google",[138,2398,2399],{},[589,2400,2401],{},"https://yourdomain.com/api/auth/callback/google",[138,2403,1435,2404,2407,2408,2411,2412],{},[112,2405,2406],{},"Client ID"," dan ",[112,2409,2410],{},"Client Secret"," ke ",[589,2413,790],{},[398,2415,2417],{"id":2416},"github-oauth","GitHub OAuth",[254,2419,2420,2425,2447,2454],{},[138,2421,1090,2422],{},[112,2423,2424],{},"GitHub Settings > Developer settings > OAuth Apps",[138,2426,2427,1155,2430],{},[112,2428,2429],{},"New OAuth App",[135,2431,2432,2439],{},[138,2433,2434,1125,2437],{},[112,2435,2436],{},"Homepage URL",[589,2438,1552],{},[138,2440,2441,1125,2444],{},[112,2442,2443],{},"Authorization callback URL",[589,2445,2446],{},"http://localhost:3000/api/auth/callback/github",[138,2448,1435,2449,2451,2452],{},[112,2450,2406],{}," dan generate ",[112,2453,2410],{},[138,2455,2308,2456],{},[589,2457,790],{},[398,2459,2461],{"id":2460},"enable-di-supabase","Enable di Supabase",[254,2463,2464,2470,2478],{},[138,2465,1090,2466,2469],{},[112,2467,2468],{},"Authentication > Providers"," di Supabase Dashboard",[138,2471,2367,2472,2407,2475],{},[112,2473,2474],{},"Google",[112,2476,2477],{},"GitHub",[138,2479,2480],{},"Paste Client ID dan Secret dari step sebelumnya",[130,2482,2484],{"id":2483},"_5-setup-analytics","5. Setup Analytics",[398,2486,2488],{"id":2487},"google-analytics","Google Analytics",[109,2490,2491,2492,791],{},"Edit ",[589,2493,1857],{},[618,2495,2497],{"className":1679,"code":2496,"language":1681,"meta":623,"style":623},"import { GoogleAnalytics } from '@next/third-parties/google'\n\nexport default function RootLayout() {\n  return (\n    \u003Chtml>\n      \u003Cbody>\n        {children}\n        \u003CGoogleAnalytics gaId=\"G-XXXXXXXXXX\" />\n      \u003C/body>\n    \u003C/html>\n  )\n}\n",[589,2498,2499,2523,2527,2544,2552,2563,2573,2584,2607,2616,2625,2630],{"__ignoreMap":623},[627,2500,2501,2504,2507,2510,2512,2515,2517,2520],{"class":629,"line":630},[627,2502,2503],{"class":1688},"import",[627,2505,2506],{"class":1695}," {",[627,2508,2509],{"class":1873}," GoogleAnalytics",[627,2511,1983],{"class":1695},[627,2513,2514],{"class":1688}," from",[627,2516,1748],{"class":1695},[627,2518,2519],{"class":644},"@next/third-parties/google",[627,2521,2522],{"class":1695},"'\n",[627,2524,2525],{"class":629,"line":637},[627,2526,652],{"emptyLinePlaceholder":651},[627,2528,2529,2531,2533,2536,2539,2542],{"class":629,"line":648},[627,2530,1689],{"class":1688},[627,2532,1692],{"class":1688},[627,2534,2535],{"class":1869}," function",[627,2537,2538],{"class":640}," RootLayout",[627,2540,2541],{"class":1695},"()",[627,2543,1696],{"class":1695},[627,2545,2546,2549],{"class":629,"line":655},[627,2547,2548],{"class":1688},"  return",[627,2550,2551],{"class":1701}," (\n",[627,2553,2554,2557,2560],{"class":629,"line":661},[627,2555,2556],{"class":1701},"    \u003C",[627,2558,2559],{"class":664},"html",[627,2561,2562],{"class":1701},">\n",[627,2564,2565,2568,2571],{"class":629,"line":873},[627,2566,2567],{"class":1701},"      \u003C",[627,2569,2570],{"class":664},"body",[627,2572,2562],{"class":1701},[627,2574,2575,2578,2582],{"class":629,"line":878},[627,2576,2577],{"class":1695},"        {",[627,2579,2581],{"class":2580},"sHdIc","children",[627,2583,1848],{"class":1695},[627,2585,2586,2589,2592,2595,2597,2599,2602,2604],{"class":629,"line":884},[627,2587,2588],{"class":1695},"        \u003C",[627,2590,2591],{"class":1873},"GoogleAnalytics",[627,2593,2594],{"class":1873}," gaId",[627,2596,2136],{"class":1695},[627,2598,2139],{"class":1695},[627,2600,2601],{"class":644},"G-XXXXXXXXXX",[627,2603,2139],{"class":1695},[627,2605,2606],{"class":1695}," />\n",[627,2608,2609,2612,2614],{"class":629,"line":940},[627,2610,2611],{"class":1695},"      \u003C/",[627,2613,2570],{"class":1873},[627,2615,2562],{"class":1695},[627,2617,2618,2621,2623],{"class":629,"line":945},[627,2619,2620],{"class":1695},"    \u003C/",[627,2622,2559],{"class":1873},[627,2624,2562],{"class":1695},[627,2626,2627],{"class":629,"line":951},[627,2628,2629],{"class":1701},"  )\n",[627,2631,2632],{"class":629,"line":957},[627,2633,1848],{"class":1695},[398,2635,2637],{"id":2636},"umami-analytics-privacy-friendly-alternative","Umami Analytics (Privacy-friendly alternative)",[618,2639,2641],{"className":896,"code":2640,"language":898,"meta":623,"style":623},"NEXT_PUBLIC_UMAMI_WEBSITE_ID=xxxxx\nNEXT_PUBLIC_UMAMI_URL=https://analytics.yourdomain.com\n",[589,2642,2643,2648],{"__ignoreMap":623},[627,2644,2645],{"class":629,"line":630},[627,2646,2647],{},"NEXT_PUBLIC_UMAMI_WEBSITE_ID=xxxxx\n",[627,2649,2650],{"class":629,"line":637},[627,2651,2652],{},"NEXT_PUBLIC_UMAMI_URL=https://analytics.yourdomain.com\n",[116,2654],{},[119,2656,2658],{"id":2657},"deploy-ke-production","🚢 Deploy ke Production",[130,2660,2662],{"id":2661},"option-1-vercel-recommended-untuk-nextjs","Option 1: Vercel (Recommended untuk Next.js)",[254,2664,2665,2740,2777,2796],{},[138,2666,2667,791,2670],{},[112,2668,2669],{},"Push ke GitHub",[618,2671,2673],{"className":620,"code":2672,"language":622,"meta":623,"style":623},"git init\ngit add .\ngit commit -m \"Initial commit\"\ngit remote add origin https://github.com/yourusername/your-saas.git\ngit push -u origin main\n",[589,2674,2675,2683,2692,2710,2725],{"__ignoreMap":623},[627,2676,2677,2680],{"class":629,"line":630},[627,2678,2679],{"class":664},"git",[627,2681,2682],{"class":644}," init\n",[627,2684,2685,2687,2690],{"class":629,"line":637},[627,2686,2679],{"class":664},[627,2688,2689],{"class":644}," add",[627,2691,667],{"class":644},[627,2693,2694,2696,2699,2702,2705,2708],{"class":629,"line":648},[627,2695,2679],{"class":664},[627,2697,2698],{"class":644}," commit",[627,2700,2701],{"class":644}," -m",[627,2703,2704],{"class":1695}," \"",[627,2706,2707],{"class":644},"Initial commit",[627,2709,2145],{"class":1695},[627,2711,2712,2714,2717,2719,2722],{"class":629,"line":655},[627,2713,2679],{"class":664},[627,2715,2716],{"class":644}," remote",[627,2718,2689],{"class":644},[627,2720,2721],{"class":644}," origin",[627,2723,2724],{"class":644}," https://github.com/yourusername/your-saas.git\n",[627,2726,2727,2729,2732,2735,2737],{"class":629,"line":661},[627,2728,2679],{"class":664},[627,2730,2731],{"class":644}," push",[627,2733,2734],{"class":644}," -u",[627,2736,2721],{"class":644},[627,2738,2739],{"class":644}," main\n",[138,2741,2742,791,2745],{},[112,2743,2744],{},"Deploy di Vercel",[135,2746,2747,2754,2760,2763,2771],{},[138,2748,1090,2749],{},[536,2750,2753],{"href":2751,"rel":2752},"https://vercel.com",[540],"vercel.com",[138,2755,2756,2759],{},[112,2757,2758],{},"Import Project"," dari GitHub",[138,2761,2762],{},"Vercel akan auto-detect Next.js",[138,2764,2765,2768,2769],{},[112,2766,2767],{},"Add environment variables"," dari ",[589,2770,790],{},[138,2772,2773,2774],{},"Click ",[112,2775,2776],{},"Deploy",[138,2778,2779,791,2782],{},[112,2780,2781],{},"Setup Custom Domain",[135,2783,2784,2790,2793],{},[138,2785,2786,2787],{},"Di Vercel dashboard, buka ",[112,2788,2789],{},"Settings > Domains",[138,2791,2792],{},"Add domain Anda",[138,2794,2795],{},"Update DNS records sesuai instruksi",[138,2797,2798,791,2801],{},[112,2799,2800],{},"Update Environment Variables",[135,2802,2803,2808,2815,2818],{},[138,2804,1090,2805],{},[112,2806,2807],{},"Settings > Environment Variables",[138,2809,2810,2811,2814],{},"Update ",[589,2812,2813],{},"NEXT_PUBLIC_APP_URL"," dengan domain production",[138,2816,2817],{},"Update Stripe Webhook URL",[138,2819,2820],{},"Update OAuth redirect URLs",[130,2822,2824],{"id":2823},"option-2-netlify","Option 2: Netlify",[618,2826,2828],{"className":620,"code":2827,"language":622,"meta":623,"style":623},"# Install Netlify CLI\nnpm install -g netlify-cli\n\n# Login\nnetlify login\n\n# Deploy\nnetlify deploy --prod\n",[589,2829,2830,2835,2846,2850,2854,2861,2865,2870],{"__ignoreMap":623},[627,2831,2832],{"class":629,"line":630},[627,2833,2834],{"class":633},"# Install Netlify CLI\n",[627,2836,2837,2839,2841,2843],{"class":629,"line":637},[627,2838,707],{"class":664},[627,2840,710],{"class":644},[627,2842,713],{"class":644},[627,2844,2845],{"class":644}," netlify-cli\n",[627,2847,2848],{"class":629,"line":648},[627,2849,652],{"emptyLinePlaceholder":651},[627,2851,2852],{"class":629,"line":655},[627,2853,1254],{"class":633},[627,2855,2856,2859],{"class":629,"line":661},[627,2857,2858],{"class":664},"netlify",[627,2860,1262],{"class":644},[627,2862,2863],{"class":629,"line":873},[627,2864,652],{"emptyLinePlaceholder":651},[627,2866,2867],{"class":629,"line":878},[627,2868,2869],{"class":633},"# Deploy\n",[627,2871,2872,2874,2877],{"class":629,"line":884},[627,2873,2858],{"class":664},[627,2875,2876],{"class":644}," deploy",[627,2878,2879],{"class":644}," --prod\n",[130,2881,2883],{"id":2882},"option-3-vps-docker","Option 3: VPS (Docker)",[109,2885,2886,2887,2890],{},"File ",[589,2888,2889],{},"Dockerfile"," sudah included:",[618,2892,2894],{"className":620,"code":2893,"language":622,"meta":623,"style":623},"# Build image\ndocker build -t my-saas .\n\n# Run container\ndocker run -p 3000:3000 --env-file .env.local my-saas\n",[589,2895,2896,2901,2917,2921,2926],{"__ignoreMap":623},[627,2897,2898],{"class":629,"line":630},[627,2899,2900],{"class":633},"# Build image\n",[627,2902,2903,2906,2909,2912,2915],{"class":629,"line":637},[627,2904,2905],{"class":664},"docker",[627,2907,2908],{"class":644}," build",[627,2910,2911],{"class":644}," -t",[627,2913,2914],{"class":644}," my-saas",[627,2916,667],{"class":644},[627,2918,2919],{"class":629,"line":648},[627,2920,652],{"emptyLinePlaceholder":651},[627,2922,2923],{"class":629,"line":655},[627,2924,2925],{"class":633},"# Run container\n",[627,2927,2928,2930,2932,2935,2938,2941,2944],{"class":629,"line":661},[627,2929,2905],{"class":664},[627,2931,1493],{"class":644},[627,2933,2934],{"class":644}," -p",[627,2936,2937],{"class":644}," 3000:3000",[627,2939,2940],{"class":644}," --env-file",[627,2942,2943],{"class":644}," .env.local",[627,2945,2946],{"class":644}," my-saas\n",[130,2948,2950],{"id":2949},"post-deployment-checklist","Post-Deployment Checklist",[135,2952,2955,2968,2974,2980,2986,2992,2998,3004,3010,3016],{"className":2953},[2954],"contains-task-list",[138,2956,2959,2963,2964,2967],{"className":2957},[2958],"task-list-item",[2960,2961],"input",{"disabled":651,"type":2962},"checkbox"," Update ",[589,2965,2966],{},".env"," production values",[138,2969,2971,2973],{"className":2970},[2958],[2960,2972],{"disabled":651,"type":2962}," Configure custom domain",[138,2975,2977,2979],{"className":2976},[2958],[2960,2978],{"disabled":651,"type":2962}," Setup SSL certificate (auto di Vercel/Netlify)",[138,2981,2983,2985],{"className":2982},[2958],[2960,2984],{"disabled":651,"type":2962}," Test authentication flow",[138,2987,2989,2991],{"className":2988},[2958],[2960,2990],{"disabled":651,"type":2962}," Test payment flow dengan Stripe test cards",[138,2993,2995,2997],{"className":2994},[2958],[2960,2996],{"disabled":651,"type":2962}," Setup monitoring (Sentry, LogRocket)",[138,2999,3001,3003],{"className":3000},[2958],[2960,3002],{"disabled":651,"type":2962}," Configure backup strategy untuk database",[138,3005,3007,3009],{"className":3006},[2958],[2960,3008],{"disabled":651,"type":2962}," Setup error monitoring",[138,3011,3013,3015],{"className":3012},[2958],[2960,3014],{"disabled":651,"type":2962}," Test email notifications",[138,3017,3019,3021],{"className":3018},[2958],[2960,3020],{"disabled":651,"type":2962}," Update OAuth redirect URLs ke production domain",[116,3023],{},[119,3025,3027],{"id":3026},"troubleshooting","🔧 Troubleshooting",[130,3029,3031],{"id":3030},"problem-1-module-not-found-error","Problem 1: \"Module not found\" Error",[109,3033,3034],{},[112,3035,3036],{},"Gejala:",[618,3038,3041],{"className":3039,"code":3040,"language":676},[674],"Error: Cannot find module 'xxx'\n",[589,3042,3040],{"__ignoreMap":623},[109,3044,3045],{},[112,3046,406],{},[618,3048,3050],{"className":620,"code":3049,"language":622,"meta":623,"style":623},"# Clear cache dan reinstall\nrm -rf node_modules .next\nnpm cache clean --force\nnpm install\n\n# Restart dev server\nnpm run dev\n",[589,3051,3052,3057,3071,3084,3090,3094,3099],{"__ignoreMap":623},[627,3053,3054],{"class":629,"line":630},[627,3055,3056],{"class":633},"# Clear cache dan reinstall\n",[627,3058,3059,3062,3065,3068],{"class":629,"line":637},[627,3060,3061],{"class":664},"rm",[627,3063,3064],{"class":644}," -rf",[627,3066,3067],{"class":644}," node_modules",[627,3069,3070],{"class":644}," .next\n",[627,3072,3073,3075,3078,3081],{"class":629,"line":648},[627,3074,707],{"class":664},[627,3076,3077],{"class":644}," cache",[627,3079,3080],{"class":644}," clean",[627,3082,3083],{"class":644}," --force\n",[627,3085,3086,3088],{"class":629,"line":655},[627,3087,707],{"class":664},[627,3089,732],{"class":644},[627,3091,3092],{"class":629,"line":661},[627,3093,652],{"emptyLinePlaceholder":651},[627,3095,3096],{"class":629,"line":873},[627,3097,3098],{"class":633},"# Restart dev server\n",[627,3100,3101,3103,3105],{"class":629,"line":878},[627,3102,707],{"class":664},[627,3104,1493],{"class":644},[627,3106,1496],{"class":644},[130,3108,3110],{"id":3109},"problem-2-supabase-connection-error","Problem 2: Supabase Connection Error",[109,3112,3113],{},[112,3114,3036],{},[135,3116,3117,3120],{},[138,3118,3119],{},"\"Invalid API key\"",[138,3121,3122],{},"\"Connection refused\"",[109,3124,3125],{},[112,3126,406],{},[254,3128,3129,3134,3137,3140],{},[138,3130,3131,3132],{},"Double-check credentials di ",[589,3133,790],{},[138,3135,3136],{},"Pastikan tidak ada trailing spaces",[138,3138,3139],{},"Restart dev server setelah update env",[138,3141,3142],{},"Check Supabase project status (might be paused)",[130,3144,3146],{"id":3145},"problem-3-stripe-webhook-fails-in-local","Problem 3: Stripe Webhook Fails in Local",[109,3148,3149],{},[112,3150,3036],{},[135,3152,3153],{},[138,3154,3155],{},"Payment success tapi tidak tercatat di database",[109,3157,3158],{},[112,3159,406],{},[618,3161,3163],{"className":620,"code":3162,"language":622,"meta":623,"style":623},"# Install Stripe CLI\nbrew install stripe/stripe-cli/stripe  # macOS\n# atau download dari stripe.com/docs/stripe-cli\n\n# Login\nstripe login\n\n# Forward webhooks ke local\nstripe listen --forward-to localhost:3000/api/webhooks/stripe\n\n# Copy webhook signing secret ke .env.local\n",[589,3164,3165,3170,3183,3188,3192,3196,3203,3207,3212,3225,3229],{"__ignoreMap":623},[627,3166,3167],{"class":629,"line":630},[627,3168,3169],{"class":633},"# Install Stripe CLI\n",[627,3171,3172,3175,3177,3180],{"class":629,"line":637},[627,3173,3174],{"class":664},"brew",[627,3176,710],{"class":644},[627,3178,3179],{"class":644}," stripe/stripe-cli/stripe",[627,3181,3182],{"class":633},"  # macOS\n",[627,3184,3185],{"class":629,"line":648},[627,3186,3187],{"class":633},"# atau download dari stripe.com/docs/stripe-cli\n",[627,3189,3190],{"class":629,"line":655},[627,3191,652],{"emptyLinePlaceholder":651},[627,3193,3194],{"class":629,"line":661},[627,3195,1254],{"class":633},[627,3197,3198,3201],{"class":629,"line":873},[627,3199,3200],{"class":664},"stripe",[627,3202,1262],{"class":644},[627,3204,3205],{"class":629,"line":878},[627,3206,652],{"emptyLinePlaceholder":651},[627,3208,3209],{"class":629,"line":884},[627,3210,3211],{"class":633},"# Forward webhooks ke local\n",[627,3213,3214,3216,3219,3222],{"class":629,"line":940},[627,3215,3200],{"class":664},[627,3217,3218],{"class":644}," listen",[627,3220,3221],{"class":644}," --forward-to",[627,3223,3224],{"class":644}," localhost:3000/api/webhooks/stripe\n",[627,3226,3227],{"class":629,"line":945},[627,3228,652],{"emptyLinePlaceholder":651},[627,3230,3231],{"class":629,"line":951},[627,3232,3233],{"class":633},"# Copy webhook signing secret ke .env.local\n",[130,3235,3237],{"id":3236},"problem-4-build-error-di-production","Problem 4: Build Error di Production",[109,3239,3240],{},[112,3241,3036],{},[618,3243,3246],{"className":3244,"code":3245,"language":676},[674],"Error: Page not found\n",[589,3247,3245],{"__ignoreMap":623},[109,3249,3250],{},[112,3251,406],{},[254,3253,3254,3260,3263,3266],{},[138,3255,3256,3257,3259],{},"Check ",[589,3258,2966],{}," variables di production",[138,3261,3262],{},"Pastikan semua required env vars sudah diset",[138,3264,3265],{},"Check build logs untuk error spesifik",[138,3267,3268,3269],{},"Test build locally:\n",[618,3270,3272],{"className":620,"code":3271,"language":622,"meta":623,"style":623},"npm run build\nnpm run start\n",[589,3273,3274,3283],{"__ignoreMap":623},[627,3275,3276,3278,3280],{"class":629,"line":630},[627,3277,707],{"class":664},[627,3279,1493],{"class":644},[627,3281,3282],{"class":644}," build\n",[627,3284,3285,3287,3289],{"class":629,"line":637},[627,3286,707],{"class":664},[627,3288,1493],{"class":644},[627,3290,3291],{"class":644}," start\n",[130,3293,3295],{"id":3294},"problem-5-oauth-redirect-error","Problem 5: OAuth Redirect Error",[109,3297,3298],{},[112,3299,3036],{},[135,3301,3302],{},[138,3303,3304],{},"\"Redirect URI mismatch\"",[109,3306,3307],{},[112,3308,406],{},[254,3310,3311,3314,3317,3320],{},[138,3312,3313],{},"Pastikan redirect URLs di Google/GitHub OAuth settings sudah benar",[138,3315,3316],{},"Check format URL (http vs https, dengan/tanpa trailing slash)",[138,3318,3319],{},"Di Supabase, check Authorization settings",[138,3321,3322],{},"Clear browser cookies dan try again",[116,3324],{},[119,3326,3328],{"id":3327},"faq","📚 FAQ",[130,3330,3332],{"id":3331},"q-apakah-saya-perlu-pengalaman-coding-untuk-menggunakan-produk-ini","Q: Apakah saya perlu pengalaman coding untuk menggunakan produk ini?",[109,3334,3335,3338],{},[112,3336,3337],{},"A:"," Ya, minimal Anda harus familiar dengan:",[135,3340,3341,3344,3347,3350,3353],{},[138,3342,3343],{},"⚡ JavaScript/TypeScript basics",[138,3345,3346],{},"⚛️ React fundamentals",[138,3348,3349],{},"🎯 HTML & CSS",[138,3351,3352],{},"📦 npm/package managers",[138,3354,3355],{},"🌐 Basic web development concepts",[109,3357,3358,3361],{},[112,3359,3360],{},"Level",": Intermediate",[130,3363,3365],{"id":3364},"q-apakah-saya-bisa-menggunakan-untuk-proyek-komersial","Q: Apakah saya bisa menggunakan untuk proyek komersial?",[109,3367,3368,783,3370,3373],{},[112,3369,3337],{},[112,3371,3372],{},"YA!"," Lisensi sudah termasuk commercial use:",[135,3375,3376,3379,3382,3385,3388],{},[138,3377,3378],{},"✅ Proyek client",[138,3380,3381],{},"✅ SaaS products",[138,3383,3384],{},"✅ Startup MVPs",[138,3386,3387],{},"✅ Commercial applications",[138,3389,3390],{},"❌ Tidak boleh resell sebagai template",[130,3392,3394],{"id":3393},"q-apakah-dapat-update-gratis","Q: Apakah dapat update gratis?",[109,3396,3397,783,3399,3401],{},[112,3398,3337],{},[112,3400,3372],{}," Semua updates gratis selamanya:",[135,3403,3404,3407,3410,3413,3416],{},[138,3405,3406],{},"🐛 Bug fixes",[138,3408,3409],{},"✨ New features",[138,3411,3412],{},"📚 Documentation updates",[138,3414,3415],{},"🔒 Security patches",[138,3417],{},[109,3419,3420],{},[112,3421,3422],{},"Cara update:",[254,3424,3425,3428,3431],{},[138,3426,3427],{},"Download versi terbaru dari link yang sama",[138,3429,3430],{},"Compare changes dengan project Anda",[138,3432,3433],{},"Merge changes yang dibutuhkan",[130,3435,3437],{"id":3436},"q-berapa-biaya-runningmaintenance","Q: Berapa biaya running/maintenance?",[109,3439,3440,3442],{},[112,3441,3337],{}," Biaya infrastruktur (estimate per bulan):",[135,3444,3445,3452,3458,3464],{},[138,3446,3447,3448,3451],{},"💾 ",[112,3449,3450],{},"Supabase",": $0 - $25 (Free tier cukup untuk start)",[138,3453,140,3454,3457],{},[112,3455,3456],{},"Vercel",": $0 - $20 (Free tier support hobby projects)",[138,3459,154,3460,3463],{},[112,3461,3462],{},"Stripe",": 2.9% + $0.30 per transaction",[138,3465,175,3466,3468],{},[112,3467,178],{},": $0 - $10 (Free tier: 100-1000 emails/hari)",[109,3470,3471,3474],{},[112,3472,3473],{},"Total untuk startup",": $0 - $55/bulan",[130,3476,3478],{"id":3477},"q-apakah-seo-friendly","Q: Apakah SEO-friendly?",[109,3480,3481,3483],{},[112,3482,3337],{}," Ya! Built-in SEO features:",[135,3485,3486,3489,3492,3495,3498,3501,3504],{},[138,3487,3488],{},"✅ Server-side rendering",[138,3490,3491],{},"✅ Dynamic meta tags",[138,3493,3494],{},"✅ Sitemap generator",[138,3496,3497],{},"✅ robots.txt",[138,3499,3500],{},"✅ Structured data (JSON-LD)",[138,3502,3503],{},"✅ Optimized images",[138,3505,3506],{},"✅ Fast page load (\u003C2s)",[130,3508,3510],{"id":3509},"q-apakah-mobile-responsive","Q: Apakah mobile responsive?",[109,3512,3513,3515],{},[112,3514,3337],{}," 100% responsive! Tested di:",[135,3517,3518,3521,3524,3527,3530],{},[138,3519,3520],{},"📱 iPhone (Safari)",[138,3522,3523],{},"🤖 Android (Chrome)",[138,3525,3526],{},"💻 Desktop (Chrome, Firefox, Safari, Edge)",[138,3528,3529],{},"🖥️ Tablet (iPad, Android tablets)",[138,3531],{},[130,3533,3535],{"id":3534},"q-support-browser-apa-saja","Q: Support browser apa saja?",[109,3537,3538],{},[112,3539,3337],{},[135,3541,3542,3545,3548,3551],{},[138,3543,3544],{},"✅ Chrome/Edge (last 2 versions)",[138,3546,3547],{},"✅ Firefox (last 2 versions)",[138,3549,3550],{},"✅ Safari 14+",[138,3552,3553],{},"❌ Internet Explorer (not supported)",[130,3555,3557],{"id":3556},"q-bagaimana-dengan-security","Q: Bagaimana dengan security?",[109,3559,3560,3562],{},[112,3561,3337],{}," Built-in security features:",[135,3564,3565,3568,3571,3574,3577,3580,3583,3586],{},[138,3566,3567],{},"🔐 Row Level Security (RLS) di database",[138,3569,3570],{},"🔑 JWT authentication",[138,3572,3573],{},"🛡️ CSRF protection",[138,3575,3576],{},"🔒 XSS prevention",[138,3578,3579],{},"📝 Input sanitization",[138,3581,3582],{},"🚫 SQL injection protection",[138,3584,3585],{},"🔐 Encrypted passwords (bcrypt)",[138,3587,3588],{},"🌐 HTTPS enforced",[130,3590,3592],{"id":3591},"q-ada-dokumentasi-api","Q: Ada dokumentasi API?",[109,3594,3595,3597],{},[112,3596,3337],{}," Ya! Dokumentasi lengkap tersedia:",[135,3599,3600,3607,3610,3613],{},[138,3601,3602,3603,3606],{},"📖 ",[589,3604,3605],{},"/docs/api"," - API reference",[138,3608,3609],{},"🎯 Postman collection included",[138,3611,3612],{},"💻 Code examples untuk setiap endpoint",[138,3614,3615],{},"🔍 Interactive API tester",[130,3617,3619],{"id":3618},"q-bisa-digunakan-untuk-mobile-app","Q: Bisa digunakan untuk mobile app?",[109,3621,3622,3624,3625,3628],{},[112,3623,3337],{}," Template ini untuk ",[112,3626,3627],{},"web app",", tapi bisa:",[135,3630,3631,3634,3637],{},[138,3632,3633],{},"📱 Buat Progressive Web App (PWA)",[138,3635,3636],{},"🔌 Consume API dari React Native/Flutter",[138,3638,3639],{},"📦 Export komponen untuk mobile",[130,3641,3643],{"id":3642},"q-ada-limit-usertraffic","Q: Ada limit user/traffic?",[109,3645,3646,3648],{},[112,3647,3337],{}," Tidak ada limit dari template. Tergantung hosting:",[135,3650,3651,3657,3663],{},[138,3652,3653,3656],{},[112,3654,3655],{},"Vercel Free",": 100GB bandwidth/bulan",[138,3658,3659,3662],{},[112,3660,3661],{},"Supabase Free",": 500MB database, 1GB file storage, 2GB bandwidth",[138,3664,3665],{},"Scale up kapan saja dengan upgrade tier",[116,3667],{},[119,3669,3671],{"id":3670},"resources-next-steps","🎓 Resources & Next Steps",[130,3673,3675],{"id":3674},"learn-more","📚 Learn More",[135,3677,3678,3686,3694,3702,3710],{},[138,3679,3680,3681],{},"📘 ",[536,3682,3685],{"href":3683,"rel":3684},"https://nextjs.org/docs",[540],"Next.js Documentation",[138,3687,3688,3689],{},"📗 ",[536,3690,3693],{"href":3691,"rel":3692},"https://react.dev",[540],"React Documentation",[138,3695,3696,3697],{},"📕 ",[536,3698,3701],{"href":3699,"rel":3700},"https://www.typescriptlang.org/docs/",[540],"TypeScript Handbook",[138,3703,3704,3705],{},"📙 ",[536,3706,3709],{"href":3707,"rel":3708},"https://tailwindcss.com/docs",[540],"Tailwind CSS Docs",[138,3711,3712,3713],{},"📓 ",[536,3714,3717],{"href":3715,"rel":3716},"https://supabase.com/docs",[540],"Supabase Docs",[130,3719,3721],{"id":3720},"video-tutorials","🎥 Video Tutorials",[135,3723,3724,3727,3730,3733],{},[138,3725,3726],{},"🎬 Setup & Installation (coming soon)",[138,3728,3729],{},"🎬 Customization Guide (coming soon)",[138,3731,3732],{},"🎬 Deployment Tutorial (coming soon)",[138,3734,3735],{},"🎬 Stripe Integration Deep Dive (coming soon)",[130,3737,3739],{"id":3738},"community-support","💬 Community & Support",[135,3741,3742,3749,3758,3764],{},[138,3743,3744,3745,3748],{},"💬 ",[112,3746,3747],{},"Discord Community",": Coming soon",[138,3750,175,3751,1125,3754],{},[112,3752,3753],{},"Email Support",[536,3755,3757],{"href":3756},"mailto:support@yourdomain.com","support@yourdomain.com",[138,3759,196,3760,3763],{},[112,3761,3762],{},"WhatsApp",": +62-xxx-xxxx-xxxx",[138,3765,3766,3767,3770],{},"🐦 ",[112,3768,3769],{},"Twitter",": @yourhandle",[130,3772,3774],{"id":3773},"️-useful-tools","🛠️ Useful Tools",[135,3776,3777,3780,3783,3786],{},[138,3778,3779],{},"🎨 Figma Design Files (coming soon)",[138,3781,3782],{},"💻 VS Code Extensions",[138,3784,3785],{},"📦 Component Library",[138,3787,3788],{},"🎯 Deployment Checklist",[116,3790],{},[119,3792,3794],{"id":3793},"terima-kasih","🙏 Terima Kasih!",[109,3796,3797,3798,3800],{},"Terima kasih telah memilih ",[112,3799,127],{},"!",[109,3802,3803,3804],{},"🌟 ",[112,3805,3806],{},"Bantu kami dengan:",[135,3808,3809,3812,3815,3818],{},[138,3810,3811],{},"⭐ Star produk kami",[138,3813,3814],{},"📝 Tulis review",[138,3816,3817],{},"🔗 Share ke developer lain",[138,3819,3820],{},"💬 Join community Discord",[109,3822,3823,3826],{},[112,3824,3825],{},"We'd love to see what you build!"," Tag kami @yourhandle saat launch aplikasi Anda! 🚀",[116,3828],{},[119,3830,3832],{"id":3831},"need-help","📞 Need Help?",[109,3834,3835],{},[112,3836,3837],{},"Support Hours:",[135,3839,3840,3843],{},[138,3841,3842],{},"Senin - Jumat: 09:00 - 18:00 WIB",[138,3844,3845],{},"Sabtu: 10:00 - 14:00 WIB",[109,3847,3848],{},[112,3849,3850],{},"Contact:",[135,3852,3853,3857,3860],{},[138,3854,175,3855],{},[536,3856,3757],{"href":3756},[138,3858,3859],{},"💬 WhatsApp: +62-xxx-xxxx-xxxx",[138,3861,3862],{},"🌐 Documentation: docs.yourdomain.com",[109,3864,3865],{},[112,3866,3867],{},"Response Time:",[135,3869,3870,3873],{},[138,3871,3872],{},"Email: 24-48 jam",[138,3874,3875],{},"WhatsApp (urgent): 2-4 jam",[116,3877],{},[130,3879,3881],{"id":3880},"happy-building","🚀 Happy Building!",[109,3883,3884,3885],{},"Made with ❤️ by ",[627,3886,3887],{},"Your Name/Company",[109,3889,3890],{},"© 2024 All rights reserved.",[3892,3893,3894],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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":623,"searchDepth":630,"depth":637,"links":3896},[3897,3901,3906,3911,3916,3926,3933,3939,3946,3959,3965,3966],{"id":121,"depth":637,"text":122,"children":3898},[3899,3900],{"id":132,"depth":648,"text":133},{"id":224,"depth":648,"text":225},{"id":247,"depth":637,"text":248,"children":3902},[3903,3904,3905],{"id":251,"depth":648,"text":252},{"id":267,"depth":648,"text":268},{"id":283,"depth":648,"text":284},{"id":320,"depth":637,"text":321,"children":3907},[3908,3909,3910],{"id":324,"depth":648,"text":325},{"id":372,"depth":648,"text":373},{"id":395,"depth":648,"text":396},{"id":441,"depth":637,"text":442,"children":3912},[3913,3914,3915],{"id":445,"depth":648,"text":446},{"id":487,"depth":648,"text":488},{"id":524,"depth":648,"text":525},{"id":568,"depth":637,"text":569,"children":3917},[3918,3919,3920,3921,3922,3923,3924,3925],{"id":572,"depth":648,"text":573},{"id":615,"depth":648,"text":616},{"id":681,"depth":648,"text":682},{"id":774,"depth":648,"text":775},{"id":1080,"depth":648,"text":1081},{"id":1352,"depth":648,"text":1353},{"id":1472,"depth":648,"text":1473},{"id":1538,"depth":648,"text":1539},{"id":1615,"depth":637,"text":1616,"children":3927},[3928,3929,3930,3931,3932],{"id":1619,"depth":648,"text":1620},{"id":2103,"depth":648,"text":2104},{"id":2281,"depth":648,"text":2282},{"id":2347,"depth":648,"text":2348},{"id":2483,"depth":648,"text":2484},{"id":2657,"depth":637,"text":2658,"children":3934},[3935,3936,3937,3938],{"id":2661,"depth":648,"text":2662},{"id":2823,"depth":648,"text":2824},{"id":2882,"depth":648,"text":2883},{"id":2949,"depth":648,"text":2950},{"id":3026,"depth":637,"text":3027,"children":3940},[3941,3942,3943,3944,3945],{"id":3030,"depth":648,"text":3031},{"id":3109,"depth":648,"text":3110},{"id":3145,"depth":648,"text":3146},{"id":3236,"depth":648,"text":3237},{"id":3294,"depth":648,"text":3295},{"id":3327,"depth":637,"text":3328,"children":3947},[3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958],{"id":3331,"depth":648,"text":3332},{"id":3364,"depth":648,"text":3365},{"id":3393,"depth":648,"text":3394},{"id":3436,"depth":648,"text":3437},{"id":3477,"depth":648,"text":3478},{"id":3509,"depth":648,"text":3510},{"id":3534,"depth":648,"text":3535},{"id":3556,"depth":648,"text":3557},{"id":3591,"depth":648,"text":3592},{"id":3618,"depth":648,"text":3619},{"id":3642,"depth":648,"text":3643},{"id":3670,"depth":637,"text":3671,"children":3960},[3961,3962,3963,3964],{"id":3674,"depth":648,"text":3675},{"id":3720,"depth":648,"text":3721},{"id":3738,"depth":648,"text":3739},{"id":3773,"depth":648,"text":3774},{"id":3793,"depth":637,"text":3794},{"id":3831,"depth":637,"text":3832,"children":3967},[3968],{"id":3880,"depth":648,"text":3881},"md",null,{},{"icon":69},{"title":66,"description":114},"2bBAj6NHPaBm8yw6Hb7dSme6AD6qTKTR_P3Rz8Ppgqs",[3976,3978],{"title":62,"path":63,"stem":64,"description":3977,"icon":60,"children":-1},"Tutorial lengkap setup Laravel dari download template, instalasi dependencies, database, hingga deployment ke server",{"title":71,"path":72,"stem":73,"description":3979,"icon":60,"children":-1},"Tutorial lengkap setup Next.js dari pemilihan template, instalasi, konfigurasi, hingga siap deploy ke production",1763121032401]