[{"data":1,"prerenderedAt":2918},["ShallowReactive",2],{"navigation":3,"/templates/laravel-setup-guide":95,"/templates/laravel-setup-guide-surround":2913},[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":62,"body":97,"description":2906,"extension":2907,"links":2908,"meta":2909,"navigation":2910,"path":63,"seo":2911,"stem":64,"__hash__":2912},"docs/templates/laravel-setup-guide.md",{"type":98,"value":99,"toc":2847},"minimark",[100,105,109,114,119,154,158,228,232,237,265,270,309,314,383,387,391,473,479,483,527,531,536,541,560,565,581,586,597,602,613,617,621,684,688,726,730,769,778,874,878,976,980,1034,1038,1046,1050,1054,1089,1094,1098,1224,1228,1232,1279,1285,1336,1340,1401,1405,1409,1448,1452,1480,1484,1488,1520,1529,1538,1543,1747,1751,1755,1822,1826,1869,1873,1877,1891,1899,2012,2016,2020,2088,2092,2110,2155,2159,2347,2351,2470,2474,2493,2497,2501,2525,2529,2576,2580,2636,2640,2644,2661,2665,2682,2686,2723,2727,2750,2754,2830,2833,2843],[101,102,104],"h1",{"id":103},"panduan-setup-laravel-dari-template-hingga-ready-production","📄 Panduan Setup Laravel - Dari Template hingga Ready Production",[106,107,108],"p",{},"Panduan komprehensif untuk setup framework Laravel, mulai dari template, instalasi, konfigurasi database, hingga production deployment.",[110,111,113],"h2",{"id":112},"_1-persiapan-requirements","1. Persiapan & Requirements",[115,116,118],"h3",{"id":117},"kebutuhan-sistem","Kebutuhan Sistem",[120,121,122,130,136,142,148],"ul",{},[123,124,125,129],"li",{},[126,127,128],"strong",{},"PHP"," 8.1+ (atau versi yang di-support Laravel)",[123,131,132,135],{},[126,133,134],{},"Composer"," (PHP Package Manager)",[123,137,138,141],{},[126,139,140],{},"Database",": MySQL 5.7+, PostgreSQL, atau SQLite",[123,143,144,147],{},[126,145,146],{},"Text Editor",": VS Code, PhpStorm, atau Sublime",[123,149,150,153],{},[126,151,152],{},"Git"," untuk version control",[115,155,157],{"id":156},"verifikasi-instalasi","Verifikasi Instalasi",[159,160,165],"pre",{"className":161,"code":162,"language":163,"meta":164,"style":164},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Cek PHP version\nphp --version\n\n# Cek Composer\ncomposer --version\n\n# Cek MySQL/Database\nmysql --version\n","bash","",[166,167,168,177,188,195,201,209,214,220],"code",{"__ignoreMap":164},[169,170,173],"span",{"class":171,"line":172},"line",1,[169,174,176],{"class":175},"sHwdD","# Cek PHP version\n",[169,178,180,184],{"class":171,"line":179},2,[169,181,183],{"class":182},"sBMFI","php",[169,185,187],{"class":186},"sfazB"," --version\n",[169,189,191],{"class":171,"line":190},3,[169,192,194],{"emptyLinePlaceholder":193},true,"\n",[169,196,198],{"class":171,"line":197},4,[169,199,200],{"class":175},"# Cek Composer\n",[169,202,204,207],{"class":171,"line":203},5,[169,205,206],{"class":182},"composer",[169,208,187],{"class":186},[169,210,212],{"class":171,"line":211},6,[169,213,194],{"emptyLinePlaceholder":193},[169,215,217],{"class":171,"line":216},7,[169,218,219],{"class":175},"# Cek MySQL/Database\n",[169,221,223,226],{"class":171,"line":222},8,[169,224,225],{"class":182},"mysql",[169,227,187],{"class":186},[115,229,231],{"id":230},"install-requirements-jika-belum","Install Requirements (jika belum)",[106,233,234],{},[126,235,236],{},"Windows:",[120,238,239,249,257],{},[123,240,241,242],{},"Download PHP dari ",[243,244,248],"a",{"href":245,"rel":246},"https://windows.php.net",[247],"nofollow","windows.php.net",[123,250,251,252],{},"Download Composer dari ",[243,253,256],{"href":254,"rel":255},"https://getcomposer.org",[247],"getcomposer.org",[123,258,259,260],{},"Download MySQL dari ",[243,261,264],{"href":262,"rel":263},"https://mysql.com",[247],"mysql.com",[106,266,267],{},[126,268,269],{},"macOS:",[159,271,273],{"className":161,"code":272,"language":163,"meta":164,"style":164},"# Dengan Homebrew\nbrew install php\nbrew install composer\nbrew install mysql\n",[166,274,275,280,291,300],{"__ignoreMap":164},[169,276,277],{"class":171,"line":172},[169,278,279],{"class":175},"# Dengan Homebrew\n",[169,281,282,285,288],{"class":171,"line":179},[169,283,284],{"class":182},"brew",[169,286,287],{"class":186}," install",[169,289,290],{"class":186}," php\n",[169,292,293,295,297],{"class":171,"line":190},[169,294,284],{"class":182},[169,296,287],{"class":186},[169,298,299],{"class":186}," composer\n",[169,301,302,304,306],{"class":171,"line":197},[169,303,284],{"class":182},[169,305,287],{"class":186},[169,307,308],{"class":186}," mysql\n",[106,310,311],{},[126,312,313],{},"Linux (Ubuntu/Debian):",[159,315,317],{"className":161,"code":316,"language":163,"meta":164,"style":164},"sudo apt-get update\nsudo apt-get install php php-curl php-mbstring php-xml mysql-server\ncurl -sS https://getcomposer.org/installer | php\nsudo mv composer.phar /usr/local/bin/composer\n",[166,318,319,330,353,370],{"__ignoreMap":164},[169,320,321,324,327],{"class":171,"line":172},[169,322,323],{"class":182},"sudo",[169,325,326],{"class":186}," apt-get",[169,328,329],{"class":186}," update\n",[169,331,332,334,336,338,341,344,347,350],{"class":171,"line":179},[169,333,323],{"class":182},[169,335,326],{"class":186},[169,337,287],{"class":186},[169,339,340],{"class":186}," php",[169,342,343],{"class":186}," php-curl",[169,345,346],{"class":186}," php-mbstring",[169,348,349],{"class":186}," php-xml",[169,351,352],{"class":186}," mysql-server\n",[169,354,355,358,361,364,368],{"class":171,"line":190},[169,356,357],{"class":182},"curl",[169,359,360],{"class":186}," -sS",[169,362,363],{"class":186}," https://getcomposer.org/installer",[169,365,367],{"class":366},"sMK4o"," |",[169,369,290],{"class":182},[169,371,372,374,377,380],{"class":171,"line":197},[169,373,323],{"class":182},[169,375,376],{"class":186}," mv",[169,378,379],{"class":186}," composer.phar",[169,381,382],{"class":186}," /usr/local/bin/composer\n",[110,384,386],{"id":385},"_2-memilih-cara-setup-laravel","2. Memilih Cara Setup Laravel",[115,388,390],{"id":389},"opsi-a-laravel-installer-paling-mudah","Opsi A: Laravel Installer (Paling Mudah)",[159,392,394],{"className":161,"code":393,"language":163,"meta":164,"style":164},"# Install Laravel installer\ncomposer global require laravel/installer\n\n# Buat project baru\nlaravel new my-laravel-app\n\n# Masuk folder\ncd my-laravel-app\n\n# Jalankan development server\nphp artisan serve\n",[166,395,396,401,414,418,423,434,438,443,451,456,462],{"__ignoreMap":164},[169,397,398],{"class":171,"line":172},[169,399,400],{"class":175},"# Install Laravel installer\n",[169,402,403,405,408,411],{"class":171,"line":179},[169,404,206],{"class":182},[169,406,407],{"class":186}," global",[169,409,410],{"class":186}," require",[169,412,413],{"class":186}," laravel/installer\n",[169,415,416],{"class":171,"line":190},[169,417,194],{"emptyLinePlaceholder":193},[169,419,420],{"class":171,"line":197},[169,421,422],{"class":175},"# Buat project baru\n",[169,424,425,428,431],{"class":171,"line":203},[169,426,427],{"class":182},"laravel",[169,429,430],{"class":186}," new",[169,432,433],{"class":186}," my-laravel-app\n",[169,435,436],{"class":171,"line":211},[169,437,194],{"emptyLinePlaceholder":193},[169,439,440],{"class":171,"line":216},[169,441,442],{"class":175},"# Masuk folder\n",[169,444,445,449],{"class":171,"line":222},[169,446,448],{"class":447},"s2Zo4","cd",[169,450,433],{"class":186},[169,452,454],{"class":171,"line":453},9,[169,455,194],{"emptyLinePlaceholder":193},[169,457,459],{"class":171,"line":458},10,[169,460,461],{"class":175},"# Jalankan development server\n",[169,463,465,467,470],{"class":171,"line":464},11,[169,466,183],{"class":182},[169,468,469],{"class":186}," artisan",[169,471,472],{"class":186}," serve\n",[106,474,475,476],{},"Server akan berjalan di ",[166,477,478],{},"http://localhost:8000",[115,480,482],{"id":481},"opsi-b-menggunakan-composer-directly","Opsi B: Menggunakan Composer Directly",[159,484,486],{"className":161,"code":485,"language":163,"meta":164,"style":164},"# Create project dari template resmi\ncomposer create-project laravel/laravel my-laravel-app\n\ncd my-laravel-app\n\nphp artisan serve\n",[166,487,488,493,505,509,515,519],{"__ignoreMap":164},[169,489,490],{"class":171,"line":172},[169,491,492],{"class":175},"# Create project dari template resmi\n",[169,494,495,497,500,503],{"class":171,"line":179},[169,496,206],{"class":182},[169,498,499],{"class":186}," create-project",[169,501,502],{"class":186}," laravel/laravel",[169,504,433],{"class":186},[169,506,507],{"class":171,"line":190},[169,508,194],{"emptyLinePlaceholder":193},[169,510,511,513],{"class":171,"line":197},[169,512,448],{"class":447},[169,514,433],{"class":186},[169,516,517],{"class":171,"line":203},[169,518,194],{"emptyLinePlaceholder":193},[169,520,521,523,525],{"class":171,"line":211},[169,522,183],{"class":182},[169,524,469],{"class":186},[169,526,472],{"class":186},[115,528,530],{"id":529},"opsi-c-download-template-laravel-premium","Opsi C: Download Template Laravel Premium",[532,533,535],"h4",{"id":534},"marketplace-populer","Marketplace Populer:",[106,537,538],{},[126,539,540],{},"1. Envato Elements / CodeCanyon",[120,542,543,551,554,557],{},[123,544,545,546],{},"Cari template Laravel di ",[243,547,550],{"href":548,"rel":549},"https://codecanyon.net",[247],"codecanyon.net",[123,552,553],{},"Filter: \"Laravel\" atau \"PHP\"",[123,555,556],{},"Download template pilihan",[123,558,559],{},"Extract file",[106,561,562],{},[126,563,564],{},"2. Creative Tim Laravel Templates",[120,566,567,575,578],{},[123,568,569,570],{},"Kunjungi ",[243,571,574],{"href":572,"rel":573},"https://creativetim.com",[247],"creativetim.com",[123,576,577],{},"Filter by \"Laravel\"",[123,579,580],{},"Download template",[106,582,583],{},[126,584,585],{},"3. GitHub Repositories",[120,587,588,591],{},[123,589,590],{},"Search \"Laravel template\" di GitHub",[123,592,593,594],{},"Clone dengan: ",[166,595,596],{},"git clone repo-url",[106,598,599],{},[126,600,601],{},"4. Marketplace Lokal",[120,603,604,607,610],{},[123,605,606],{},"Envato Elements",[123,608,609],{},"Themeforest",[123,611,612],{},"CodeCanyon",[110,614,616],{"id":615},"_3-setup-laravel-template-yang-didownload","3. Setup Laravel Template yang Didownload",[115,618,620],{"id":619},"step-1-extract-folder-setup","Step 1: Extract & Folder Setup",[159,622,624],{"className":161,"code":623,"language":163,"meta":164,"style":164},"# Extract template\nunzip laravel-template.zip\ncd laravel-template\n\n# Buat folder yang diperlukan (jika belum)\nmkdir -p storage/logs\nchmod -R 775 storage bootstrap/cache\n",[166,625,626,631,639,646,650,655,666],{"__ignoreMap":164},[169,627,628],{"class":171,"line":172},[169,629,630],{"class":175},"# Extract template\n",[169,632,633,636],{"class":171,"line":179},[169,634,635],{"class":182},"unzip",[169,637,638],{"class":186}," laravel-template.zip\n",[169,640,641,643],{"class":171,"line":190},[169,642,448],{"class":447},[169,644,645],{"class":186}," laravel-template\n",[169,647,648],{"class":171,"line":197},[169,649,194],{"emptyLinePlaceholder":193},[169,651,652],{"class":171,"line":203},[169,653,654],{"class":175},"# Buat folder yang diperlukan (jika belum)\n",[169,656,657,660,663],{"class":171,"line":211},[169,658,659],{"class":182},"mkdir",[169,661,662],{"class":186}," -p",[169,664,665],{"class":186}," storage/logs\n",[169,667,668,671,674,678,681],{"class":171,"line":216},[169,669,670],{"class":182},"chmod",[169,672,673],{"class":186}," -R",[169,675,677],{"class":676},"sbssI"," 775",[169,679,680],{"class":186}," storage",[169,682,683],{"class":186}," bootstrap/cache\n",[115,685,687],{"id":686},"step-2-install-dependencies","Step 2: Install Dependencies",[159,689,691],{"className":161,"code":690,"language":163,"meta":164,"style":164},"# Install semua package via Composer\ncomposer install\n\n# Jika ada issue dengan dependencies\ncomposer install --no-interaction --prefer-dist\n",[166,692,693,698,705,709,714],{"__ignoreMap":164},[169,694,695],{"class":171,"line":172},[169,696,697],{"class":175},"# Install semua package via Composer\n",[169,699,700,702],{"class":171,"line":179},[169,701,206],{"class":182},[169,703,704],{"class":186}," install\n",[169,706,707],{"class":171,"line":190},[169,708,194],{"emptyLinePlaceholder":193},[169,710,711],{"class":171,"line":197},[169,712,713],{"class":175},"# Jika ada issue dengan dependencies\n",[169,715,716,718,720,723],{"class":171,"line":203},[169,717,206],{"class":182},[169,719,287],{"class":186},[169,721,722],{"class":186}," --no-interaction",[169,724,725],{"class":186}," --prefer-dist\n",[115,727,729],{"id":728},"step-3-environment-configuration","Step 3: Environment Configuration",[159,731,733],{"className":161,"code":732,"language":163,"meta":164,"style":164},"# Copy environment file\ncp .env.example .env\n\n# Generate application key\nphp artisan key:generate\n",[166,734,735,740,751,755,760],{"__ignoreMap":164},[169,736,737],{"class":171,"line":172},[169,738,739],{"class":175},"# Copy environment file\n",[169,741,742,745,748],{"class":171,"line":179},[169,743,744],{"class":182},"cp",[169,746,747],{"class":186}," .env.example",[169,749,750],{"class":186}," .env\n",[169,752,753],{"class":171,"line":190},[169,754,194],{"emptyLinePlaceholder":193},[169,756,757],{"class":171,"line":197},[169,758,759],{"class":175},"# Generate application key\n",[169,761,762,764,766],{"class":171,"line":203},[169,763,183],{"class":182},[169,765,469],{"class":186},[169,767,768],{"class":186}," key:generate\n",[106,770,771],{},[126,772,773,774,777],{},"Edit ",[166,775,776],{},".env"," file:",[159,779,783],{"className":780,"code":781,"language":782,"meta":164,"style":164},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","APP_NAME=MyApp\nAPP_ENV=local\nAPP_DEBUG=true\nAPP_URL=http://localhost:8000\n\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=laravel_db\nDB_USERNAME=root\nDB_PASSWORD=your_password\n\nMAIL_DRIVER=smtp\nMAIL_HOST=smtp.mailtrap.io\nMAIL_PORT=2525\nMAIL_USERNAME=your_username\nMAIL_PASSWORD=your_password\n","env",[166,784,785,790,795,800,805,809,814,819,824,829,834,839,844,850,856,862,868],{"__ignoreMap":164},[169,786,787],{"class":171,"line":172},[169,788,789],{},"APP_NAME=MyApp\n",[169,791,792],{"class":171,"line":179},[169,793,794],{},"APP_ENV=local\n",[169,796,797],{"class":171,"line":190},[169,798,799],{},"APP_DEBUG=true\n",[169,801,802],{"class":171,"line":197},[169,803,804],{},"APP_URL=http://localhost:8000\n",[169,806,807],{"class":171,"line":203},[169,808,194],{"emptyLinePlaceholder":193},[169,810,811],{"class":171,"line":211},[169,812,813],{},"DB_CONNECTION=mysql\n",[169,815,816],{"class":171,"line":216},[169,817,818],{},"DB_HOST=127.0.0.1\n",[169,820,821],{"class":171,"line":222},[169,822,823],{},"DB_PORT=3306\n",[169,825,826],{"class":171,"line":453},[169,827,828],{},"DB_DATABASE=laravel_db\n",[169,830,831],{"class":171,"line":458},[169,832,833],{},"DB_USERNAME=root\n",[169,835,836],{"class":171,"line":464},[169,837,838],{},"DB_PASSWORD=your_password\n",[169,840,842],{"class":171,"line":841},12,[169,843,194],{"emptyLinePlaceholder":193},[169,845,847],{"class":171,"line":846},13,[169,848,849],{},"MAIL_DRIVER=smtp\n",[169,851,853],{"class":171,"line":852},14,[169,854,855],{},"MAIL_HOST=smtp.mailtrap.io\n",[169,857,859],{"class":171,"line":858},15,[169,860,861],{},"MAIL_PORT=2525\n",[169,863,865],{"class":171,"line":864},16,[169,866,867],{},"MAIL_USERNAME=your_username\n",[169,869,871],{"class":171,"line":870},17,[169,872,873],{},"MAIL_PASSWORD=your_password\n",[115,875,877],{"id":876},"step-4-database-setup","Step 4: Database Setup",[159,879,881],{"className":161,"code":880,"language":163,"meta":164,"style":164},"# Create database (dari MySQL client)\nmysql -u root -p\nCREATE DATABASE laravel_db;\nEXIT;\n\n# Atau gunakan Laravel artisan\nphp artisan migrate:install\n\n# Run migrations\nphp artisan migrate\n\n# Seed database (jika ada seeders)\nphp artisan db:seed\n",[166,882,883,888,901,915,922,926,931,940,944,949,958,962,967],{"__ignoreMap":164},[169,884,885],{"class":171,"line":172},[169,886,887],{"class":175},"# Create database (dari MySQL client)\n",[169,889,890,892,895,898],{"class":171,"line":179},[169,891,225],{"class":182},[169,893,894],{"class":186}," -u",[169,896,897],{"class":186}," root",[169,899,900],{"class":186}," -p\n",[169,902,903,906,909,912],{"class":171,"line":190},[169,904,905],{"class":182},"CREATE",[169,907,908],{"class":186}," DATABASE",[169,910,911],{"class":186}," laravel_db",[169,913,914],{"class":366},";\n",[169,916,917,920],{"class":171,"line":197},[169,918,919],{"class":182},"EXIT",[169,921,914],{"class":366},[169,923,924],{"class":171,"line":203},[169,925,194],{"emptyLinePlaceholder":193},[169,927,928],{"class":171,"line":211},[169,929,930],{"class":175},"# Atau gunakan Laravel artisan\n",[169,932,933,935,937],{"class":171,"line":216},[169,934,183],{"class":182},[169,936,469],{"class":186},[169,938,939],{"class":186}," migrate:install\n",[169,941,942],{"class":171,"line":222},[169,943,194],{"emptyLinePlaceholder":193},[169,945,946],{"class":171,"line":453},[169,947,948],{"class":175},"# Run migrations\n",[169,950,951,953,955],{"class":171,"line":458},[169,952,183],{"class":182},[169,954,469],{"class":186},[169,956,957],{"class":186}," migrate\n",[169,959,960],{"class":171,"line":464},[169,961,194],{"emptyLinePlaceholder":193},[169,963,964],{"class":171,"line":841},[169,965,966],{"class":175},"# Seed database (jika ada seeders)\n",[169,968,969,971,973],{"class":171,"line":846},[169,970,183],{"class":182},[169,972,469],{"class":186},[169,974,975],{"class":186}," db:seed\n",[115,977,979],{"id":978},"step-5-generate-assets-jika-menggunakan-tailwindbootstrap","Step 5: Generate Assets (jika menggunakan Tailwind/Bootstrap)",[159,981,983],{"className":161,"code":982,"language":163,"meta":164,"style":164},"# Install NPM dependencies\nnpm install\n\n# Build assets\nnpm run dev\n\n# Atau untuk production\nnpm run build\n",[166,984,985,990,997,1001,1006,1016,1020,1025],{"__ignoreMap":164},[169,986,987],{"class":171,"line":172},[169,988,989],{"class":175},"# Install NPM dependencies\n",[169,991,992,995],{"class":171,"line":179},[169,993,994],{"class":182},"npm",[169,996,704],{"class":186},[169,998,999],{"class":171,"line":190},[169,1000,194],{"emptyLinePlaceholder":193},[169,1002,1003],{"class":171,"line":197},[169,1004,1005],{"class":175},"# Build assets\n",[169,1007,1008,1010,1013],{"class":171,"line":203},[169,1009,994],{"class":182},[169,1011,1012],{"class":186}," run",[169,1014,1015],{"class":186}," dev\n",[169,1017,1018],{"class":171,"line":211},[169,1019,194],{"emptyLinePlaceholder":193},[169,1021,1022],{"class":171,"line":216},[169,1023,1024],{"class":175},"# Atau untuk production\n",[169,1026,1027,1029,1031],{"class":171,"line":222},[169,1028,994],{"class":182},[169,1030,1012],{"class":186},[169,1032,1033],{"class":186}," build\n",[110,1035,1037],{"id":1036},"_4-struktur-folder-laravel","4. Struktur Folder Laravel",[159,1039,1044],{"className":1040,"code":1042,"language":1043},[1041],"language-text","app/\n├── Http/\n│   ├── Controllers/     # Business logic\n│   │   └── PostController.php\n│   └── Middleware/      # Request middleware\n├── Models/              # Database models\n│   └── Post.php\n├── Mail/                # Mailable classes\n└── Jobs/                # Queueable jobs\n\ndatabase/\n├── migrations/          # Database schema\n│   └── 2024_01_01_create_posts_table.php\n├── seeders/             # Database seeders\n│   └── PostSeeder.php\n└── factories/           # Model factories\n\nresources/\n├── views/               # Blade templates\n│   ├── layouts/\n│   │   └── app.blade.php\n│   ├── posts/\n│   │   ├── index.blade.php\n│   │   └── show.blade.php\n│   └── welcome.blade.php\n├── css/\n│   └── app.css\n└── js/\n    └── app.js\n\nroutes/\n├── web.php              # Web routes\n└── api.php              # API routes\n\nconfig/\n├── app.php              # App configuration\n├── database.php         # Database config\n├── mail.php             # Mail config\n└── services.php         # External services\n\nstorage/\n├── app/                 # File uploads\n├── logs/                # Application logs\n└── framework/           # Cache & sessions\n\ntests/\n├── Feature/             # Feature tests\n├── Unit/                # Unit tests\n└── TestCase.php\n\n.env                     # Environment variables\n.env.example             # Environment template\nartisan                  # Command CLI\ncomposer.json            # PHP dependencies\npackage.json             # Node dependencies\n","text",[166,1045,1042],{"__ignoreMap":164},[110,1047,1049],{"id":1048},"_5-menjalankan-project","5. Menjalankan Project",[115,1051,1053],{"id":1052},"development-server","Development Server",[159,1055,1057],{"className":161,"code":1056,"language":163,"meta":164,"style":164},"# Terminal 1: Jalankan Laravel server\nphp artisan serve\n\n# Terminal 2: Jalankan asset builder (jika ada)\nnpm run dev\n",[166,1058,1059,1064,1072,1076,1081],{"__ignoreMap":164},[169,1060,1061],{"class":171,"line":172},[169,1062,1063],{"class":175},"# Terminal 1: Jalankan Laravel server\n",[169,1065,1066,1068,1070],{"class":171,"line":179},[169,1067,183],{"class":182},[169,1069,469],{"class":186},[169,1071,472],{"class":186},[169,1073,1074],{"class":171,"line":190},[169,1075,194],{"emptyLinePlaceholder":193},[169,1077,1078],{"class":171,"line":197},[169,1079,1080],{"class":175},"# Terminal 2: Jalankan asset builder (jika ada)\n",[169,1082,1083,1085,1087],{"class":171,"line":203},[169,1084,994],{"class":182},[169,1086,1012],{"class":186},[169,1088,1015],{"class":186},[106,1090,1091,1092],{},"Akses di ",[166,1093,478],{},[115,1095,1097],{"id":1096},"command-penting","Command Penting",[159,1099,1101],{"className":161,"code":1100,"language":163,"meta":164,"style":164},"# Database migrations\nphp artisan migrate\nphp artisan migrate:rollback\nphp artisan migrate:refresh\n\n# Database seeding\nphp artisan db:seed\n\n# Clear cache\nphp artisan cache:clear\nphp artisan config:clear\nphp artisan view:clear\n\n# Check routes\nphp artisan route:list\n\n# Tinker (Laravel REPL)\nphp artisan tinker\n",[166,1102,1103,1108,1116,1125,1134,1138,1143,1151,1155,1160,1169,1178,1187,1191,1196,1205,1209,1214],{"__ignoreMap":164},[169,1104,1105],{"class":171,"line":172},[169,1106,1107],{"class":175},"# Database migrations\n",[169,1109,1110,1112,1114],{"class":171,"line":179},[169,1111,183],{"class":182},[169,1113,469],{"class":186},[169,1115,957],{"class":186},[169,1117,1118,1120,1122],{"class":171,"line":190},[169,1119,183],{"class":182},[169,1121,469],{"class":186},[169,1123,1124],{"class":186}," migrate:rollback\n",[169,1126,1127,1129,1131],{"class":171,"line":197},[169,1128,183],{"class":182},[169,1130,469],{"class":186},[169,1132,1133],{"class":186}," migrate:refresh\n",[169,1135,1136],{"class":171,"line":203},[169,1137,194],{"emptyLinePlaceholder":193},[169,1139,1140],{"class":171,"line":211},[169,1141,1142],{"class":175},"# Database seeding\n",[169,1144,1145,1147,1149],{"class":171,"line":216},[169,1146,183],{"class":182},[169,1148,469],{"class":186},[169,1150,975],{"class":186},[169,1152,1153],{"class":171,"line":222},[169,1154,194],{"emptyLinePlaceholder":193},[169,1156,1157],{"class":171,"line":453},[169,1158,1159],{"class":175},"# Clear cache\n",[169,1161,1162,1164,1166],{"class":171,"line":458},[169,1163,183],{"class":182},[169,1165,469],{"class":186},[169,1167,1168],{"class":186}," cache:clear\n",[169,1170,1171,1173,1175],{"class":171,"line":464},[169,1172,183],{"class":182},[169,1174,469],{"class":186},[169,1176,1177],{"class":186}," config:clear\n",[169,1179,1180,1182,1184],{"class":171,"line":841},[169,1181,183],{"class":182},[169,1183,469],{"class":186},[169,1185,1186],{"class":186}," view:clear\n",[169,1188,1189],{"class":171,"line":846},[169,1190,194],{"emptyLinePlaceholder":193},[169,1192,1193],{"class":171,"line":852},[169,1194,1195],{"class":175},"# Check routes\n",[169,1197,1198,1200,1202],{"class":171,"line":858},[169,1199,183],{"class":182},[169,1201,469],{"class":186},[169,1203,1204],{"class":186}," route:list\n",[169,1206,1207],{"class":171,"line":864},[169,1208,194],{"emptyLinePlaceholder":193},[169,1210,1211],{"class":171,"line":870},[169,1212,1213],{"class":175},"# Tinker (Laravel REPL)\n",[169,1215,1217,1219,1221],{"class":171,"line":1216},18,[169,1218,183],{"class":182},[169,1220,469],{"class":186},[169,1222,1223],{"class":186}," tinker\n",[110,1225,1227],{"id":1226},"_6-konfigurasi-penting-untuk-production","6. Konfigurasi Penting untuk Production",[115,1229,1231],{"id":1230},"buat-model-migration","Buat Model & Migration",[159,1233,1235],{"className":161,"code":1234,"language":163,"meta":164,"style":164},"# Buat model dengan migration\nphp artisan make:model Post -m\n\n# Atau dengan controller\nphp artisan make:model Post -mc\n",[166,1236,1237,1242,1257,1261,1266],{"__ignoreMap":164},[169,1238,1239],{"class":171,"line":172},[169,1240,1241],{"class":175},"# Buat model dengan migration\n",[169,1243,1244,1246,1248,1251,1254],{"class":171,"line":179},[169,1245,183],{"class":182},[169,1247,469],{"class":186},[169,1249,1250],{"class":186}," make:model",[169,1252,1253],{"class":186}," Post",[169,1255,1256],{"class":186}," -m\n",[169,1258,1259],{"class":171,"line":190},[169,1260,194],{"emptyLinePlaceholder":193},[169,1262,1263],{"class":171,"line":197},[169,1264,1265],{"class":175},"# Atau dengan controller\n",[169,1267,1268,1270,1272,1274,1276],{"class":171,"line":203},[169,1269,183],{"class":182},[169,1271,469],{"class":186},[169,1273,1250],{"class":186},[169,1275,1253],{"class":186},[169,1277,1278],{"class":186}," -mc\n",[106,1280,773,1281,1284],{},[166,1282,1283],{},"database/migrations/YYYY_MM_DD_create_posts_table.php",":",[159,1286,1289],{"className":1287,"code":1288,"language":183,"meta":164,"style":164},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Schema::create('posts', function (Blueprint $table) {\n    $table->id();\n    $table->string('title');\n    $table->text('content');\n    $table->string('slug')->unique();\n    $table->unsignedBigInteger('user_id');\n    $table->foreign('user_id')->references('id')->on('users');\n    $table->timestamps();\n});\n",[166,1290,1291,1296,1301,1306,1311,1316,1321,1326,1331],{"__ignoreMap":164},[169,1292,1293],{"class":171,"line":172},[169,1294,1295],{},"Schema::create('posts', function (Blueprint $table) {\n",[169,1297,1298],{"class":171,"line":179},[169,1299,1300],{},"    $table->id();\n",[169,1302,1303],{"class":171,"line":190},[169,1304,1305],{},"    $table->string('title');\n",[169,1307,1308],{"class":171,"line":197},[169,1309,1310],{},"    $table->text('content');\n",[169,1312,1313],{"class":171,"line":203},[169,1314,1315],{},"    $table->string('slug')->unique();\n",[169,1317,1318],{"class":171,"line":211},[169,1319,1320],{},"    $table->unsignedBigInteger('user_id');\n",[169,1322,1323],{"class":171,"line":216},[169,1324,1325],{},"    $table->foreign('user_id')->references('id')->on('users');\n",[169,1327,1328],{"class":171,"line":222},[169,1329,1330],{},"    $table->timestamps();\n",[169,1332,1333],{"class":171,"line":453},[169,1334,1335],{},"});\n",[115,1337,1339],{"id":1338},"setup-authentication","Setup Authentication",[159,1341,1343],{"className":161,"code":1342,"language":163,"meta":164,"style":164},"# Install Laravel Breeze (simple auth)\ncomposer require laravel/breeze --dev\nphp artisan breeze:install\n\n# Atau gunakan Jetstream (lebih lengkap)\ncomposer require laravel/jetstream\nphp artisan jetstream:install livewire\n",[166,1344,1345,1350,1362,1371,1375,1380,1389],{"__ignoreMap":164},[169,1346,1347],{"class":171,"line":172},[169,1348,1349],{"class":175},"# Install Laravel Breeze (simple auth)\n",[169,1351,1352,1354,1356,1359],{"class":171,"line":179},[169,1353,206],{"class":182},[169,1355,410],{"class":186},[169,1357,1358],{"class":186}," laravel/breeze",[169,1360,1361],{"class":186}," --dev\n",[169,1363,1364,1366,1368],{"class":171,"line":190},[169,1365,183],{"class":182},[169,1367,469],{"class":186},[169,1369,1370],{"class":186}," breeze:install\n",[169,1372,1373],{"class":171,"line":197},[169,1374,194],{"emptyLinePlaceholder":193},[169,1376,1377],{"class":171,"line":203},[169,1378,1379],{"class":175},"# Atau gunakan Jetstream (lebih lengkap)\n",[169,1381,1382,1384,1386],{"class":171,"line":211},[169,1383,206],{"class":182},[169,1385,410],{"class":186},[169,1387,1388],{"class":186}," laravel/jetstream\n",[169,1390,1391,1393,1395,1398],{"class":171,"line":216},[169,1392,183],{"class":182},[169,1394,469],{"class":186},[169,1396,1397],{"class":186}," jetstream:install",[169,1399,1400],{"class":186}," livewire\n",[115,1402,1404],{"id":1403},"setup-email-configuration","Setup Email Configuration",[106,1406,773,1407,1284],{},[166,1408,776],{},[159,1410,1412],{"className":780,"code":1411,"language":782,"meta":164,"style":164},"MAIL_DRIVER=smtp\nMAIL_HOST=smtp.gmail.com\nMAIL_PORT=587\nMAIL_USERNAME=your-email@gmail.com\nMAIL_PASSWORD=your-app-password\nMAIL_ENCRYPTION=tls\nMAIL_FROM_ADDRESS=noreply@example.com\n",[166,1413,1414,1418,1423,1428,1433,1438,1443],{"__ignoreMap":164},[169,1415,1416],{"class":171,"line":172},[169,1417,849],{},[169,1419,1420],{"class":171,"line":179},[169,1421,1422],{},"MAIL_HOST=smtp.gmail.com\n",[169,1424,1425],{"class":171,"line":190},[169,1426,1427],{},"MAIL_PORT=587\n",[169,1429,1430],{"class":171,"line":197},[169,1431,1432],{},"MAIL_USERNAME=your-email@gmail.com\n",[169,1434,1435],{"class":171,"line":203},[169,1436,1437],{},"MAIL_PASSWORD=your-app-password\n",[169,1439,1440],{"class":171,"line":211},[169,1441,1442],{},"MAIL_ENCRYPTION=tls\n",[169,1444,1445],{"class":171,"line":216},[169,1446,1447],{},"MAIL_FROM_ADDRESS=noreply@example.com\n",[115,1449,1451],{"id":1450},"setup-storage-untuk-upload-file","Setup Storage untuk Upload File",[159,1453,1455],{"className":161,"code":1454,"language":163,"meta":164,"style":164},"# Create storage link\nphp artisan storage:link\n\n# Akses file dari storage/app/public\n",[166,1456,1457,1462,1471,1475],{"__ignoreMap":164},[169,1458,1459],{"class":171,"line":172},[169,1460,1461],{"class":175},"# Create storage link\n",[169,1463,1464,1466,1468],{"class":171,"line":179},[169,1465,183],{"class":182},[169,1467,469],{"class":186},[169,1469,1470],{"class":186}," storage:link\n",[169,1472,1473],{"class":171,"line":190},[169,1474,194],{"emptyLinePlaceholder":193},[169,1476,1477],{"class":171,"line":197},[169,1478,1479],{"class":175},"# Akses file dari storage/app/public\n",[110,1481,1483],{"id":1482},"_7-api-development","7. API Development",[115,1485,1487],{"id":1486},"buat-api-resource","Buat API Resource",[159,1489,1491],{"className":161,"code":1490,"language":163,"meta":164,"style":164},"php artisan make:resource PostResource\nphp artisan make:controller Api/PostController --api\n",[166,1492,1493,1505],{"__ignoreMap":164},[169,1494,1495,1497,1499,1502],{"class":171,"line":172},[169,1496,183],{"class":182},[169,1498,469],{"class":186},[169,1500,1501],{"class":186}," make:resource",[169,1503,1504],{"class":186}," PostResource\n",[169,1506,1507,1509,1511,1514,1517],{"class":171,"line":179},[169,1508,183],{"class":182},[169,1510,469],{"class":186},[169,1512,1513],{"class":186}," make:controller",[169,1515,1516],{"class":186}," Api/PostController",[169,1518,1519],{"class":186}," --api\n",[106,1521,1522],{},[126,1523,1524,1525,1528],{},"Routes (",[166,1526,1527],{},"routes/api.php","):",[159,1530,1532],{"className":1287,"code":1531,"language":183,"meta":164,"style":164},"Route::apiResource('posts', PostController::class);\n",[166,1533,1534],{"__ignoreMap":164},[169,1535,1536],{"class":171,"line":172},[169,1537,1531],{},[106,1539,1540],{},[126,1541,1542],{},"Controller Example:",[159,1544,1546],{"className":1287,"code":1545,"language":183,"meta":164,"style":164},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Post;\nuse App\\Http\\Resources\\PostResource;\nuse Illuminate\\Http\\Request;\n\nclass PostController extends Controller\n{\n    public function index()\n    {\n        return PostResource::collection(Post::paginate());\n    }\n\n    public function store(Request $request)\n    {\n        $post = Post::create($request->validated());\n        return new PostResource($post);\n    }\n\n    public function show(Post $post)\n    {\n        return new PostResource($post);\n    }\n\n    public function update(Request $request, Post $post)\n    {\n        $post->update($request->validated());\n        return new PostResource($post);\n    }\n\n    public function destroy(Post $post)\n    {\n        $post->delete();\n        return response()->noContent();\n    }\n}\n",[166,1547,1548,1553,1557,1562,1566,1571,1576,1581,1586,1590,1595,1600,1605,1610,1615,1620,1624,1629,1633,1639,1645,1650,1655,1661,1666,1671,1676,1681,1687,1692,1698,1703,1708,1713,1719,1724,1730,1736,1741],{"__ignoreMap":164},[169,1549,1550],{"class":171,"line":172},[169,1551,1552],{},"\u003C?php\n",[169,1554,1555],{"class":171,"line":179},[169,1556,194],{"emptyLinePlaceholder":193},[169,1558,1559],{"class":171,"line":190},[169,1560,1561],{},"namespace App\\Http\\Controllers\\Api;\n",[169,1563,1564],{"class":171,"line":197},[169,1565,194],{"emptyLinePlaceholder":193},[169,1567,1568],{"class":171,"line":203},[169,1569,1570],{},"use App\\Http\\Controllers\\Controller;\n",[169,1572,1573],{"class":171,"line":211},[169,1574,1575],{},"use App\\Models\\Post;\n",[169,1577,1578],{"class":171,"line":216},[169,1579,1580],{},"use App\\Http\\Resources\\PostResource;\n",[169,1582,1583],{"class":171,"line":222},[169,1584,1585],{},"use Illuminate\\Http\\Request;\n",[169,1587,1588],{"class":171,"line":453},[169,1589,194],{"emptyLinePlaceholder":193},[169,1591,1592],{"class":171,"line":458},[169,1593,1594],{},"class PostController extends Controller\n",[169,1596,1597],{"class":171,"line":464},[169,1598,1599],{},"{\n",[169,1601,1602],{"class":171,"line":841},[169,1603,1604],{},"    public function index()\n",[169,1606,1607],{"class":171,"line":846},[169,1608,1609],{},"    {\n",[169,1611,1612],{"class":171,"line":852},[169,1613,1614],{},"        return PostResource::collection(Post::paginate());\n",[169,1616,1617],{"class":171,"line":858},[169,1618,1619],{},"    }\n",[169,1621,1622],{"class":171,"line":864},[169,1623,194],{"emptyLinePlaceholder":193},[169,1625,1626],{"class":171,"line":870},[169,1627,1628],{},"    public function store(Request $request)\n",[169,1630,1631],{"class":171,"line":1216},[169,1632,1609],{},[169,1634,1636],{"class":171,"line":1635},19,[169,1637,1638],{},"        $post = Post::create($request->validated());\n",[169,1640,1642],{"class":171,"line":1641},20,[169,1643,1644],{},"        return new PostResource($post);\n",[169,1646,1648],{"class":171,"line":1647},21,[169,1649,1619],{},[169,1651,1653],{"class":171,"line":1652},22,[169,1654,194],{"emptyLinePlaceholder":193},[169,1656,1658],{"class":171,"line":1657},23,[169,1659,1660],{},"    public function show(Post $post)\n",[169,1662,1664],{"class":171,"line":1663},24,[169,1665,1609],{},[169,1667,1669],{"class":171,"line":1668},25,[169,1670,1644],{},[169,1672,1674],{"class":171,"line":1673},26,[169,1675,1619],{},[169,1677,1679],{"class":171,"line":1678},27,[169,1680,194],{"emptyLinePlaceholder":193},[169,1682,1684],{"class":171,"line":1683},28,[169,1685,1686],{},"    public function update(Request $request, Post $post)\n",[169,1688,1690],{"class":171,"line":1689},29,[169,1691,1609],{},[169,1693,1695],{"class":171,"line":1694},30,[169,1696,1697],{},"        $post->update($request->validated());\n",[169,1699,1701],{"class":171,"line":1700},31,[169,1702,1644],{},[169,1704,1706],{"class":171,"line":1705},32,[169,1707,1619],{},[169,1709,1711],{"class":171,"line":1710},33,[169,1712,194],{"emptyLinePlaceholder":193},[169,1714,1716],{"class":171,"line":1715},34,[169,1717,1718],{},"    public function destroy(Post $post)\n",[169,1720,1722],{"class":171,"line":1721},35,[169,1723,1609],{},[169,1725,1727],{"class":171,"line":1726},36,[169,1728,1729],{},"        $post->delete();\n",[169,1731,1733],{"class":171,"line":1732},37,[169,1734,1735],{},"        return response()->noContent();\n",[169,1737,1739],{"class":171,"line":1738},38,[169,1740,1619],{},[169,1742,1744],{"class":171,"line":1743},39,[169,1745,1746],{},"}\n",[110,1748,1750],{"id":1749},"_8-database-relationships","8. Database & Relationships",[115,1752,1754],{"id":1753},"model-dengan-relationships","Model dengan Relationships",[159,1756,1758],{"className":1287,"code":1757,"language":183,"meta":164,"style":164},"\u003C?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\nclass User extends Model\n{\n    public function posts(): HasMany\n    {\n        return $this->hasMany(Post::class);\n    }\n}\n",[166,1759,1760,1764,1768,1773,1777,1782,1787,1791,1796,1800,1805,1809,1814,1818],{"__ignoreMap":164},[169,1761,1762],{"class":171,"line":172},[169,1763,1552],{},[169,1765,1766],{"class":171,"line":179},[169,1767,194],{"emptyLinePlaceholder":193},[169,1769,1770],{"class":171,"line":190},[169,1771,1772],{},"namespace App\\Models;\n",[169,1774,1775],{"class":171,"line":197},[169,1776,194],{"emptyLinePlaceholder":193},[169,1778,1779],{"class":171,"line":203},[169,1780,1781],{},"use Illuminate\\Database\\Eloquent\\Model;\n",[169,1783,1784],{"class":171,"line":211},[169,1785,1786],{},"use Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n",[169,1788,1789],{"class":171,"line":216},[169,1790,194],{"emptyLinePlaceholder":193},[169,1792,1793],{"class":171,"line":222},[169,1794,1795],{},"class User extends Model\n",[169,1797,1798],{"class":171,"line":453},[169,1799,1599],{},[169,1801,1802],{"class":171,"line":458},[169,1803,1804],{},"    public function posts(): HasMany\n",[169,1806,1807],{"class":171,"line":464},[169,1808,1609],{},[169,1810,1811],{"class":171,"line":841},[169,1812,1813],{},"        return $this->hasMany(Post::class);\n",[169,1815,1816],{"class":171,"line":846},[169,1817,1619],{},[169,1819,1820],{"class":171,"line":852},[169,1821,1746],{},[115,1823,1825],{"id":1824},"eager-loading","Eager Loading",[159,1827,1829],{"className":1287,"code":1828,"language":183,"meta":164,"style":164},"// Efficient queries\n$users = User::with('posts')->get();\n\n// Lazy loading (slower)\n$users = User::all();\nforeach ($users as $user) {\n    $user->posts;  // N+1 problem\n}\n",[166,1830,1831,1836,1841,1845,1850,1855,1860,1865],{"__ignoreMap":164},[169,1832,1833],{"class":171,"line":172},[169,1834,1835],{},"// Efficient queries\n",[169,1837,1838],{"class":171,"line":179},[169,1839,1840],{},"$users = User::with('posts')->get();\n",[169,1842,1843],{"class":171,"line":190},[169,1844,194],{"emptyLinePlaceholder":193},[169,1846,1847],{"class":171,"line":197},[169,1848,1849],{},"// Lazy loading (slower)\n",[169,1851,1852],{"class":171,"line":203},[169,1853,1854],{},"$users = User::all();\n",[169,1856,1857],{"class":171,"line":211},[169,1858,1859],{},"foreach ($users as $user) {\n",[169,1861,1862],{"class":171,"line":216},[169,1863,1864],{},"    $user->posts;  // N+1 problem\n",[169,1866,1867],{"class":171,"line":222},[169,1868,1746],{},[110,1870,1872],{"id":1871},"_9-testing","9. Testing",[115,1874,1876],{"id":1875},"setup-testing","Setup Testing",[159,1878,1880],{"className":161,"code":1879,"language":163,"meta":164,"style":164},"php artisan test\n",[166,1881,1882],{"__ignoreMap":164},[169,1883,1884,1886,1888],{"class":171,"line":172},[169,1885,183],{"class":182},[169,1887,469],{"class":186},[169,1889,1890],{"class":186}," test\n",[106,1892,1893],{},[126,1894,1895,1896,1528],{},"Example Test (",[166,1897,1898],{},"tests/Feature/PostTest.php",[159,1900,1902],{"className":1287,"code":1901,"language":183,"meta":164,"style":164},"\u003C?php\n\nnamespace Tests\\Feature;\n\nuse Tests\\TestCase;\nuse App\\Models\\Post;\n\nclass PostTest extends TestCase\n{\n    public function test_can_get_posts()\n    {\n        $response = $this->get('/api/posts');\n        $response->assertStatus(200);\n    }\n\n    public function test_can_create_post()\n    {\n        $response = $this->postJson('/api/posts', [\n            'title' => 'Test Post',\n            'content' => 'Test content'\n        ]);\n        $response->assertStatus(201);\n    }\n}\n",[166,1903,1904,1908,1912,1917,1921,1926,1930,1934,1939,1943,1948,1952,1957,1962,1966,1970,1975,1979,1984,1989,1994,1999,2004,2008],{"__ignoreMap":164},[169,1905,1906],{"class":171,"line":172},[169,1907,1552],{},[169,1909,1910],{"class":171,"line":179},[169,1911,194],{"emptyLinePlaceholder":193},[169,1913,1914],{"class":171,"line":190},[169,1915,1916],{},"namespace Tests\\Feature;\n",[169,1918,1919],{"class":171,"line":197},[169,1920,194],{"emptyLinePlaceholder":193},[169,1922,1923],{"class":171,"line":203},[169,1924,1925],{},"use Tests\\TestCase;\n",[169,1927,1928],{"class":171,"line":211},[169,1929,1575],{},[169,1931,1932],{"class":171,"line":216},[169,1933,194],{"emptyLinePlaceholder":193},[169,1935,1936],{"class":171,"line":222},[169,1937,1938],{},"class PostTest extends TestCase\n",[169,1940,1941],{"class":171,"line":453},[169,1942,1599],{},[169,1944,1945],{"class":171,"line":458},[169,1946,1947],{},"    public function test_can_get_posts()\n",[169,1949,1950],{"class":171,"line":464},[169,1951,1609],{},[169,1953,1954],{"class":171,"line":841},[169,1955,1956],{},"        $response = $this->get('/api/posts');\n",[169,1958,1959],{"class":171,"line":846},[169,1960,1961],{},"        $response->assertStatus(200);\n",[169,1963,1964],{"class":171,"line":852},[169,1965,1619],{},[169,1967,1968],{"class":171,"line":858},[169,1969,194],{"emptyLinePlaceholder":193},[169,1971,1972],{"class":171,"line":864},[169,1973,1974],{},"    public function test_can_create_post()\n",[169,1976,1977],{"class":171,"line":870},[169,1978,1609],{},[169,1980,1981],{"class":171,"line":1216},[169,1982,1983],{},"        $response = $this->postJson('/api/posts', [\n",[169,1985,1986],{"class":171,"line":1635},[169,1987,1988],{},"            'title' => 'Test Post',\n",[169,1990,1991],{"class":171,"line":1641},[169,1992,1993],{},"            'content' => 'Test content'\n",[169,1995,1996],{"class":171,"line":1647},[169,1997,1998],{},"        ]);\n",[169,2000,2001],{"class":171,"line":1652},[169,2002,2003],{},"        $response->assertStatus(201);\n",[169,2005,2006],{"class":171,"line":1657},[169,2007,1619],{},[169,2009,2010],{"class":171,"line":1663},[169,2011,1746],{},[110,2013,2015],{"id":2014},"_10-deployment-ke-production","10. Deployment ke Production",[115,2017,2019],{"id":2018},"persiapan-pre-deployment","Persiapan Pre-Deployment",[159,2021,2023],{"className":161,"code":2022,"language":163,"meta":164,"style":164},"# Set production environment\n# Edit .env: APP_ENV=production, APP_DEBUG=false\n\n# Optimize untuk production\nphp artisan config:cache\nphp artisan route:cache\nphp artisan view:cache\n\n# Compile assets\nnpm run build\n",[166,2024,2025,2030,2035,2039,2044,2053,2062,2071,2075,2080],{"__ignoreMap":164},[169,2026,2027],{"class":171,"line":172},[169,2028,2029],{"class":175},"# Set production environment\n",[169,2031,2032],{"class":171,"line":179},[169,2033,2034],{"class":175},"# Edit .env: APP_ENV=production, APP_DEBUG=false\n",[169,2036,2037],{"class":171,"line":190},[169,2038,194],{"emptyLinePlaceholder":193},[169,2040,2041],{"class":171,"line":197},[169,2042,2043],{"class":175},"# Optimize untuk production\n",[169,2045,2046,2048,2050],{"class":171,"line":203},[169,2047,183],{"class":182},[169,2049,469],{"class":186},[169,2051,2052],{"class":186}," config:cache\n",[169,2054,2055,2057,2059],{"class":171,"line":211},[169,2056,183],{"class":182},[169,2058,469],{"class":186},[169,2060,2061],{"class":186}," route:cache\n",[169,2063,2064,2066,2068],{"class":171,"line":216},[169,2065,183],{"class":182},[169,2067,469],{"class":186},[169,2069,2070],{"class":186}," view:cache\n",[169,2072,2073],{"class":171,"line":222},[169,2074,194],{"emptyLinePlaceholder":193},[169,2076,2077],{"class":171,"line":453},[169,2078,2079],{"class":175},"# Compile assets\n",[169,2081,2082,2084,2086],{"class":171,"line":458},[169,2083,994],{"class":182},[169,2085,1012],{"class":186},[169,2087,1033],{"class":186},[115,2089,2091],{"id":2090},"deploy-ke-shared-hosting-cpanel","Deploy ke Shared Hosting (cPanel)",[2093,2094,2095,2101,2104,2107],"ol",{},[123,2096,2097,2098],{},"Compress project: ",[166,2099,2100],{},"zip -r laravel.zip . -x \"node_modules/*\" \".git/*\"",[123,2102,2103],{},"Upload via File Manager",[123,2105,2106],{},"Extract di folder public_html",[123,2108,2109],{},"SSH ke server:",[159,2111,2113],{"className":161,"code":2112,"language":163,"meta":164,"style":164},"cd public_html/laravel\ncomposer install --no-dev\nphp artisan migrate --force\nchmod -R 775 storage bootstrap/cache\n",[166,2114,2115,2122,2131,2143],{"__ignoreMap":164},[169,2116,2117,2119],{"class":171,"line":172},[169,2118,448],{"class":447},[169,2120,2121],{"class":186}," public_html/laravel\n",[169,2123,2124,2126,2128],{"class":171,"line":179},[169,2125,206],{"class":182},[169,2127,287],{"class":186},[169,2129,2130],{"class":186}," --no-dev\n",[169,2132,2133,2135,2137,2140],{"class":171,"line":190},[169,2134,183],{"class":182},[169,2136,469],{"class":186},[169,2138,2139],{"class":186}," migrate",[169,2141,2142],{"class":186}," --force\n",[169,2144,2145,2147,2149,2151,2153],{"class":171,"line":197},[169,2146,670],{"class":182},[169,2148,673],{"class":186},[169,2150,677],{"class":676},[169,2152,680],{"class":186},[169,2154,683],{"class":186},[115,2156,2158],{"id":2157},"deploy-ke-vps-digitalocean-linode-aws","Deploy ke VPS (DigitalOcean, Linode, AWS)",[159,2160,2162],{"className":161,"code":2161,"language":163,"meta":164,"style":164},"# SSH ke server\nssh root@your_server_ip\n\n# Install dependencies\nsudo apt-get update\nsudo apt-get install php-fpm php-mysql nginx mysql-server git composer\n\n# Clone repo\ncd /var/www\ngit clone your-repo-url laravel-app\ncd laravel-app\n\n# Setup\ncomposer install\ncp .env.example .env\nphp artisan key:generate\nphp artisan migrate\n\n# Setup Nginx\n# Create config file /etc/nginx/sites-available/laravel\n# Start services\nsudo systemctl start nginx\nsudo systemctl start php8.1-fpm\nsudo systemctl start mysql\n",[166,2163,2164,2169,2177,2181,2186,2194,2219,2223,2228,2235,2249,2255,2259,2264,2270,2278,2286,2294,2298,2303,2308,2313,2326,2337],{"__ignoreMap":164},[169,2165,2166],{"class":171,"line":172},[169,2167,2168],{"class":175},"# SSH ke server\n",[169,2170,2171,2174],{"class":171,"line":179},[169,2172,2173],{"class":182},"ssh",[169,2175,2176],{"class":186}," root@your_server_ip\n",[169,2178,2179],{"class":171,"line":190},[169,2180,194],{"emptyLinePlaceholder":193},[169,2182,2183],{"class":171,"line":197},[169,2184,2185],{"class":175},"# Install dependencies\n",[169,2187,2188,2190,2192],{"class":171,"line":203},[169,2189,323],{"class":182},[169,2191,326],{"class":186},[169,2193,329],{"class":186},[169,2195,2196,2198,2200,2202,2205,2208,2211,2214,2217],{"class":171,"line":211},[169,2197,323],{"class":182},[169,2199,326],{"class":186},[169,2201,287],{"class":186},[169,2203,2204],{"class":186}," php-fpm",[169,2206,2207],{"class":186}," php-mysql",[169,2209,2210],{"class":186}," nginx",[169,2212,2213],{"class":186}," mysql-server",[169,2215,2216],{"class":186}," git",[169,2218,299],{"class":186},[169,2220,2221],{"class":171,"line":216},[169,2222,194],{"emptyLinePlaceholder":193},[169,2224,2225],{"class":171,"line":222},[169,2226,2227],{"class":175},"# Clone repo\n",[169,2229,2230,2232],{"class":171,"line":453},[169,2231,448],{"class":447},[169,2233,2234],{"class":186}," /var/www\n",[169,2236,2237,2240,2243,2246],{"class":171,"line":458},[169,2238,2239],{"class":182},"git",[169,2241,2242],{"class":186}," clone",[169,2244,2245],{"class":186}," your-repo-url",[169,2247,2248],{"class":186}," laravel-app\n",[169,2250,2251,2253],{"class":171,"line":464},[169,2252,448],{"class":447},[169,2254,2248],{"class":186},[169,2256,2257],{"class":171,"line":841},[169,2258,194],{"emptyLinePlaceholder":193},[169,2260,2261],{"class":171,"line":846},[169,2262,2263],{"class":175},"# Setup\n",[169,2265,2266,2268],{"class":171,"line":852},[169,2267,206],{"class":182},[169,2269,704],{"class":186},[169,2271,2272,2274,2276],{"class":171,"line":858},[169,2273,744],{"class":182},[169,2275,747],{"class":186},[169,2277,750],{"class":186},[169,2279,2280,2282,2284],{"class":171,"line":864},[169,2281,183],{"class":182},[169,2283,469],{"class":186},[169,2285,768],{"class":186},[169,2287,2288,2290,2292],{"class":171,"line":870},[169,2289,183],{"class":182},[169,2291,469],{"class":186},[169,2293,957],{"class":186},[169,2295,2296],{"class":171,"line":1216},[169,2297,194],{"emptyLinePlaceholder":193},[169,2299,2300],{"class":171,"line":1635},[169,2301,2302],{"class":175},"# Setup Nginx\n",[169,2304,2305],{"class":171,"line":1641},[169,2306,2307],{"class":175},"# Create config file /etc/nginx/sites-available/laravel\n",[169,2309,2310],{"class":171,"line":1647},[169,2311,2312],{"class":175},"# Start services\n",[169,2314,2315,2317,2320,2323],{"class":171,"line":1652},[169,2316,323],{"class":182},[169,2318,2319],{"class":186}," systemctl",[169,2321,2322],{"class":186}," start",[169,2324,2325],{"class":186}," nginx\n",[169,2327,2328,2330,2332,2334],{"class":171,"line":1657},[169,2329,323],{"class":182},[169,2331,2319],{"class":186},[169,2333,2322],{"class":186},[169,2335,2336],{"class":186}," php8.1-fpm\n",[169,2338,2339,2341,2343,2345],{"class":171,"line":1663},[169,2340,323],{"class":182},[169,2342,2319],{"class":186},[169,2344,2322],{"class":186},[169,2346,308],{"class":186},[115,2348,2350],{"id":2349},"deploy-dengan-docker","Deploy dengan Docker",[159,2352,2356],{"className":2353,"code":2354,"language":2355,"meta":164,"style":164},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","FROM php:8.1-fpm\n\nWORKDIR /app\n\nRUN apt-get update && apt-get install -y \\\n    git \\\n    curl \\\n    libpng-dev \\\n    libonig-dev \\\n    libxml2-dev \\\n    zip \\\n    unzip\n\nRUN docker-php-ext-install pdo_mysql mbstring exif pcntl gd\n\nCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer\n\nCOPY . .\n\nRUN composer install\n\nEXPOSE 9000\n\nCMD [\"php-fpm\"]\n","dockerfile",[166,2357,2358,2363,2367,2372,2376,2381,2386,2391,2396,2401,2406,2411,2416,2420,2425,2429,2434,2438,2443,2447,2452,2456,2461,2465],{"__ignoreMap":164},[169,2359,2360],{"class":171,"line":172},[169,2361,2362],{},"FROM php:8.1-fpm\n",[169,2364,2365],{"class":171,"line":179},[169,2366,194],{"emptyLinePlaceholder":193},[169,2368,2369],{"class":171,"line":190},[169,2370,2371],{},"WORKDIR /app\n",[169,2373,2374],{"class":171,"line":197},[169,2375,194],{"emptyLinePlaceholder":193},[169,2377,2378],{"class":171,"line":203},[169,2379,2380],{},"RUN apt-get update && apt-get install -y \\\n",[169,2382,2383],{"class":171,"line":211},[169,2384,2385],{},"    git \\\n",[169,2387,2388],{"class":171,"line":216},[169,2389,2390],{},"    curl \\\n",[169,2392,2393],{"class":171,"line":222},[169,2394,2395],{},"    libpng-dev \\\n",[169,2397,2398],{"class":171,"line":453},[169,2399,2400],{},"    libonig-dev \\\n",[169,2402,2403],{"class":171,"line":458},[169,2404,2405],{},"    libxml2-dev \\\n",[169,2407,2408],{"class":171,"line":464},[169,2409,2410],{},"    zip \\\n",[169,2412,2413],{"class":171,"line":841},[169,2414,2415],{},"    unzip\n",[169,2417,2418],{"class":171,"line":846},[169,2419,194],{"emptyLinePlaceholder":193},[169,2421,2422],{"class":171,"line":852},[169,2423,2424],{},"RUN docker-php-ext-install pdo_mysql mbstring exif pcntl gd\n",[169,2426,2427],{"class":171,"line":858},[169,2428,194],{"emptyLinePlaceholder":193},[169,2430,2431],{"class":171,"line":864},[169,2432,2433],{},"COPY --from=composer:latest /usr/bin/composer /usr/bin/composer\n",[169,2435,2436],{"class":171,"line":870},[169,2437,194],{"emptyLinePlaceholder":193},[169,2439,2440],{"class":171,"line":1216},[169,2441,2442],{},"COPY . .\n",[169,2444,2445],{"class":171,"line":1635},[169,2446,194],{"emptyLinePlaceholder":193},[169,2448,2449],{"class":171,"line":1641},[169,2450,2451],{},"RUN composer install\n",[169,2453,2454],{"class":171,"line":1647},[169,2455,194],{"emptyLinePlaceholder":193},[169,2457,2458],{"class":171,"line":1652},[169,2459,2460],{},"EXPOSE 9000\n",[169,2462,2463],{"class":171,"line":1657},[169,2464,194],{"emptyLinePlaceholder":193},[169,2466,2467],{"class":171,"line":1663},[169,2468,2469],{},"CMD [\"php-fpm\"]\n",[115,2471,2473],{"id":2472},"deploy-dengan-forge-automated","Deploy dengan Forge (Automated)",[2093,2475,2476,2484,2487,2490],{},[123,2477,2478,2479],{},"Sign up di ",[243,2480,2483],{"href":2481,"rel":2482},"https://forge.laravel.com",[247],"forge.laravel.com",[123,2485,2486],{},"Connect server (DigitalOcean, Linode, AWS)",[123,2488,2489],{},"Create site dari Git repo",[123,2491,2492],{},"Forge akan handle deployment otomatis",[110,2494,2496],{"id":2495},"_11-performance-optimization","11. Performance Optimization",[115,2498,2500],{"id":2499},"caching","Caching",[159,2502,2504],{"className":1287,"code":2503,"language":183,"meta":164,"style":164},"// Cache query results\n$posts = Cache::remember('posts', now()->addHour(), function () {\n    return Post::all();\n});\n",[166,2505,2506,2511,2516,2521],{"__ignoreMap":164},[169,2507,2508],{"class":171,"line":172},[169,2509,2510],{},"// Cache query results\n",[169,2512,2513],{"class":171,"line":179},[169,2514,2515],{},"$posts = Cache::remember('posts', now()->addHour(), function () {\n",[169,2517,2518],{"class":171,"line":190},[169,2519,2520],{},"    return Post::all();\n",[169,2522,2523],{"class":171,"line":197},[169,2524,1335],{},[115,2526,2528],{"id":2527},"database-optimization","Database Optimization",[159,2530,2532],{"className":1287,"code":2531,"language":183,"meta":164,"style":164},"// Eager load relations\nPost::with('user', 'comments')->get();\n\n// Chunk large queries\nPost::chunk(100, function ($posts) {\n    foreach ($posts as $post) {\n        // Process\n    }\n});\n",[166,2533,2534,2539,2544,2548,2553,2558,2563,2568,2572],{"__ignoreMap":164},[169,2535,2536],{"class":171,"line":172},[169,2537,2538],{},"// Eager load relations\n",[169,2540,2541],{"class":171,"line":179},[169,2542,2543],{},"Post::with('user', 'comments')->get();\n",[169,2545,2546],{"class":171,"line":190},[169,2547,194],{"emptyLinePlaceholder":193},[169,2549,2550],{"class":171,"line":197},[169,2551,2552],{},"// Chunk large queries\n",[169,2554,2555],{"class":171,"line":203},[169,2556,2557],{},"Post::chunk(100, function ($posts) {\n",[169,2559,2560],{"class":171,"line":211},[169,2561,2562],{},"    foreach ($posts as $post) {\n",[169,2564,2565],{"class":171,"line":216},[169,2566,2567],{},"        // Process\n",[169,2569,2570],{"class":171,"line":222},[169,2571,1619],{},[169,2573,2574],{"class":171,"line":453},[169,2575,1335],{},[115,2577,2579],{"id":2578},"asset-optimization","Asset Optimization",[159,2581,2583],{"className":161,"code":2582,"language":163,"meta":164,"style":164},"# Minify & optimize assets\nnpm run build\n\n# Gzip compression di Nginx\ngzip on;\ngzip_types text/plain text/css application/json application/javascript;\n",[166,2584,2585,2590,2598,2602,2607,2617],{"__ignoreMap":164},[169,2586,2587],{"class":171,"line":172},[169,2588,2589],{"class":175},"# Minify & optimize assets\n",[169,2591,2592,2594,2596],{"class":171,"line":179},[169,2593,994],{"class":182},[169,2595,1012],{"class":186},[169,2597,1033],{"class":186},[169,2599,2600],{"class":171,"line":190},[169,2601,194],{"emptyLinePlaceholder":193},[169,2603,2604],{"class":171,"line":197},[169,2605,2606],{"class":175},"# Gzip compression di Nginx\n",[169,2608,2609,2612,2615],{"class":171,"line":203},[169,2610,2611],{"class":182},"gzip",[169,2613,2614],{"class":186}," on",[169,2616,914],{"class":366},[169,2618,2619,2622,2625,2628,2631,2634],{"class":171,"line":211},[169,2620,2621],{"class":182},"gzip_types",[169,2623,2624],{"class":186}," text/plain",[169,2626,2627],{"class":186}," text/css",[169,2629,2630],{"class":186}," application/json",[169,2632,2633],{"class":186}," application/javascript",[169,2635,914],{"class":366},[110,2637,2639],{"id":2638},"_12-troubleshooting","12. Troubleshooting",[115,2641,2643],{"id":2642},"class-not-found","\"Class not found\"",[159,2645,2647],{"className":161,"code":2646,"language":163,"meta":164,"style":164},"# Regenerate autoloader\ncomposer dump-autoload\n",[166,2648,2649,2654],{"__ignoreMap":164},[169,2650,2651],{"class":171,"line":172},[169,2652,2653],{"class":175},"# Regenerate autoloader\n",[169,2655,2656,2658],{"class":171,"line":179},[169,2657,206],{"class":182},[169,2659,2660],{"class":186}," dump-autoload\n",[115,2662,2664],{"id":2663},"permission-denied-on-storage","Permission denied on storage",[159,2666,2668],{"className":161,"code":2667,"language":163,"meta":164,"style":164},"chmod -R 775 storage bootstrap/cache\n",[166,2669,2670],{"__ignoreMap":164},[169,2671,2672,2674,2676,2678,2680],{"class":171,"line":172},[169,2673,670],{"class":182},[169,2675,673],{"class":186},[169,2677,677],{"class":676},[169,2679,680],{"class":186},[169,2681,683],{"class":186},[115,2683,2685],{"id":2684},"database-connection-error","Database connection error",[159,2687,2689],{"className":161,"code":2688,"language":163,"meta":164,"style":164},"# Verify .env database config\n# Test connection\nphp artisan tinker\nDB::connection()->getPdo()\n",[166,2690,2691,2696,2701,2709],{"__ignoreMap":164},[169,2692,2693],{"class":171,"line":172},[169,2694,2695],{"class":175},"# Verify .env database config\n",[169,2697,2698],{"class":171,"line":179},[169,2699,2700],{"class":175},"# Test connection\n",[169,2702,2703,2705,2707],{"class":171,"line":190},[169,2704,183],{"class":182},[169,2706,469],{"class":186},[169,2708,1223],{"class":186},[169,2710,2711,2714,2717,2720],{"class":171,"line":197},[169,2712,2713],{"class":447},"DB::connection",[169,2715,2716],{"class":366},"()",[169,2718,2719],{"class":447},"->getPdo",[169,2721,2722],{"class":366},"()\n",[115,2724,2726],{"id":2725},"composer-memory-limit","Composer memory limit",[159,2728,2730],{"className":161,"code":2729,"language":163,"meta":164,"style":164},"php -d memory_limit=-1 composer install\n",[166,2731,2732],{"__ignoreMap":164},[169,2733,2734,2736,2739,2742,2745,2748],{"class":171,"line":172},[169,2735,183],{"class":182},[169,2737,2738],{"class":186}," -d",[169,2740,2741],{"class":186}," memory_limit=",[169,2743,2744],{"class":676},"-1",[169,2746,2747],{"class":186}," composer",[169,2749,704],{"class":186},[110,2751,2753],{"id":2752},"_13-checklist-pre-production","13. Checklist Pre-Production",[120,2755,2758,2770,2776,2782,2788,2794,2800,2806,2812,2818,2824],{"className":2756},[2757],"contains-task-list",[123,2759,2762,2766,2767,2769],{"className":2760},[2761],"task-list-item",[2763,2764],"input",{"disabled":193,"type":2765},"checkbox"," ",[166,2768,776],{}," configured dengan production values",[123,2771,2773,2775],{"className":2772},[2761],[2763,2774],{"disabled":193,"type":2765}," Database migrations sudah run",[123,2777,2779,2781],{"className":2778},[2761],[2763,2780],{"disabled":193,"type":2765}," APP_DEBUG = false",[123,2783,2785,2787],{"className":2784},[2761],[2763,2786],{"disabled":193,"type":2765}," APP_ENV = production",[123,2789,2791,2793],{"className":2790},[2761],[2763,2792],{"disabled":193,"type":2765}," Assets sudah di-build",[123,2795,2797,2799],{"className":2796},[2761],[2763,2798],{"disabled":193,"type":2765}," Storage link sudah di-create",[123,2801,2803,2805],{"className":2802},[2761],[2763,2804],{"disabled":193,"type":2765}," Permissions pada storage/bootstrap sudah 775",[123,2807,2809,2811],{"className":2808},[2761],[2763,2810],{"disabled":193,"type":2765}," Email config sudah setup",[123,2813,2815,2817],{"className":2814},[2761],[2763,2816],{"disabled":193,"type":2765}," Backup database sebelum production",[123,2819,2821,2823],{"className":2820},[2761],[2763,2822],{"disabled":193,"type":2765}," SSL certificate sudah installed",[123,2825,2827,2829],{"className":2826},[2761],[2763,2828],{"disabled":193,"type":2765}," Monitor logs secara berkala",[2831,2832],"hr",{},[106,2834,2835,2766,2838],{},[126,2836,2837],{},"Dokumentasi Resmi:",[243,2839,2842],{"href":2840,"rel":2841},"https://laravel.com/docs",[247],"laravel.com",[2844,2845,2846],"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":164,"searchDepth":172,"depth":179,"links":2848},[2849,2854,2859,2866,2867,2871,2877,2880,2884,2887,2894,2899,2905],{"id":112,"depth":179,"text":113,"children":2850},[2851,2852,2853],{"id":117,"depth":190,"text":118},{"id":156,"depth":190,"text":157},{"id":230,"depth":190,"text":231},{"id":385,"depth":179,"text":386,"children":2855},[2856,2857,2858],{"id":389,"depth":190,"text":390},{"id":481,"depth":190,"text":482},{"id":529,"depth":190,"text":530},{"id":615,"depth":179,"text":616,"children":2860},[2861,2862,2863,2864,2865],{"id":619,"depth":190,"text":620},{"id":686,"depth":190,"text":687},{"id":728,"depth":190,"text":729},{"id":876,"depth":190,"text":877},{"id":978,"depth":190,"text":979},{"id":1036,"depth":179,"text":1037},{"id":1048,"depth":179,"text":1049,"children":2868},[2869,2870],{"id":1052,"depth":190,"text":1053},{"id":1096,"depth":190,"text":1097},{"id":1226,"depth":179,"text":1227,"children":2872},[2873,2874,2875,2876],{"id":1230,"depth":190,"text":1231},{"id":1338,"depth":190,"text":1339},{"id":1403,"depth":190,"text":1404},{"id":1450,"depth":190,"text":1451},{"id":1482,"depth":179,"text":1483,"children":2878},[2879],{"id":1486,"depth":190,"text":1487},{"id":1749,"depth":179,"text":1750,"children":2881},[2882,2883],{"id":1753,"depth":190,"text":1754},{"id":1824,"depth":190,"text":1825},{"id":1871,"depth":179,"text":1872,"children":2885},[2886],{"id":1875,"depth":190,"text":1876},{"id":2014,"depth":179,"text":2015,"children":2888},[2889,2890,2891,2892,2893],{"id":2018,"depth":190,"text":2019},{"id":2090,"depth":190,"text":2091},{"id":2157,"depth":190,"text":2158},{"id":2349,"depth":190,"text":2350},{"id":2472,"depth":190,"text":2473},{"id":2495,"depth":179,"text":2496,"children":2895},[2896,2897,2898],{"id":2499,"depth":190,"text":2500},{"id":2527,"depth":190,"text":2528},{"id":2578,"depth":190,"text":2579},{"id":2638,"depth":179,"text":2639,"children":2900},[2901,2902,2903,2904],{"id":2642,"depth":190,"text":2643},{"id":2663,"depth":190,"text":2664},{"id":2684,"depth":190,"text":2685},{"id":2725,"depth":190,"text":2726},{"id":2752,"depth":179,"text":2753},"Tutorial lengkap setup Laravel dari download template, instalasi dependencies, database, hingga deployment ke server","md",null,{},{"icon":60},{"title":62,"description":2906},"uFRFe02SohlK10c66uJbSPp8kgIaHcRjCnJYXTJLAmU",[2914,2916],{"title":57,"path":58,"stem":59,"description":2915,"icon":60,"children":-1},"Tutorial lengkap setup HTML dan CSS dari download template, struktur folder, customization, hingga deployment website statis",{"title":66,"path":67,"stem":68,"description":2917,"icon":69,"children":-1},"Contoh dokumentasi produk untuk template SaaS berbasis Next.js + TypeScript + Supabase",1763121031008]