[{"data":1,"prerenderedAt":2169},["ShallowReactive",2],{"project":3,"articles":240},["Reactive",4],[5,95,138,158,179,198,213,228],{"id":6,"name":7,"description":8,"images":9,"stacks":71,"urlProject":94},1,"SaaS ISP Platform — Multi-Tenant Web & Mobile","A multi-tenant SaaS platform for ISP businesses serving 40,000+ active users. I architected and built the web dashboard (billing, inventory, asset management, MikroTik management, ticketing, RBAC) and led the cross-functional team for two mobile apps: IDEConnect for customer payments, and IDEConnectHub for internal sales\u002Fmarketing\u002Ftechnician operations.",[10,13,17,21,25,29,33,37,41,45,49,52,55,58,62,65,68],{"id":6,"url":11,"title":12},"\u002Fimage\u002FSass ISP Platform-1.webp","Web — Dashboard",{"id":14,"url":15,"title":16},2,"\u002Fimage\u002FSass ISP Platform-2.webp","Web — Billing",{"id":18,"url":19,"title":20},3,"\u002Fimage\u002FSass ISP Platform-3.webp","Web — Customers",{"id":22,"url":23,"title":24},4,"\u002Fimage\u002FSass ISP Platform-4.webp","Web — Inventory",{"id":26,"url":27,"title":28},5,"\u002Fimage\u002FSass ISP Platform-5.webp","Web — Ticketing",{"id":30,"url":31,"title":32},6,"\u002Fimage\u002FSass ISP Platform-6.webp","Web — Reports",{"id":34,"url":35,"title":36},7,"\u002Fimage\u002FSass ISP Platform-7.webp","Web — MikroTik",{"id":38,"url":39,"title":40},8,"\u002Fimage\u002FSass ISP Platform-8.webp","Web — Settings",{"id":42,"url":43,"title":44},9,"\u002Fimage\u002FSass ISP Platform-9.webp","Web — RBAC",{"id":46,"url":47,"title":48},10,"\u002Fimage\u002FIDEConnect-1.webp","Mobile — IDEConnect",{"id":50,"url":51,"title":48},11,"\u002Fimage\u002FIDEConnect-2.webp",{"id":53,"url":54,"title":48},12,"\u002Fimage\u002FIDEConnect-3.webp",{"id":56,"url":57,"title":48},13,"\u002Fimage\u002FIDEConnect-4.webp",{"id":59,"url":60,"title":61},14,"\u002Fimage\u002FIDEConnectHub-1.webp","Mobile — IDEConnectHub",{"id":63,"url":64,"title":61},15,"\u002Fimage\u002FIDEConnectHub-2.webp",{"id":66,"url":67,"title":61},16,"\u002Fimage\u002FIDEConnectHub-3.webp",{"id":69,"url":70,"title":61},17,"\u002Fimage\u002FIDEConnectHub-4.webp",[72,74,76,78,80,82,84,86,88,90,92],{"id":6,"name":73},"Laravel",{"id":14,"name":75},"PostgreSQL",{"id":18,"name":77},"REST API",{"id":22,"name":79},"Flutter",{"id":26,"name":81},"Midtrans",{"id":30,"name":83},"Xendit",{"id":34,"name":85},"Finpay",{"id":38,"name":87},"MikroTik API",{"id":42,"name":89},"WhatsApp API",{"id":46,"name":91},"Play Store",{"id":50,"name":93},"App Store","#",{"id":14,"name":96,"description":97,"images":98,"stacks":131,"urlProject":94},"IDEPayroll — HRIS Web & Mobile","A comprehensive HRIS platform for employee attendance, payroll processing, and salary management. I built the web dashboard and coordinated the mobile team (design, frontend, backend) to deliver a Flutter app published on Google Play Store and Apple App Store.",[99,101,104,107,110,112,114,117,120,123,125,127,129],{"id":6,"url":100,"title":12},"\u002Fimage\u002FPayroll-1.webp",{"id":14,"url":102,"title":103},"\u002Fimage\u002FPayroll-2.webp","Web — Employees",{"id":18,"url":105,"title":106},"\u002Fimage\u002FPayroll-3.webp","Web — Attendance",{"id":22,"url":108,"title":109},"\u002Fimage\u002FPayroll-4.webp","Web — Payroll",{"id":26,"url":111,"title":32},"\u002Fimage\u002FPayroll-5.webp",{"id":30,"url":113,"title":40},"\u002Fimage\u002FPayroll-6.webp",{"id":34,"url":115,"title":116},"\u002Fimage\u002FPayroll-7.webp","Web — Salary Slip",{"id":38,"url":118,"title":119},"\u002Fimage\u002FPayroll-8.webp","Web — Analytics",{"id":42,"url":121,"title":122},"\u002Fimage\u002FIDEPayroll-1.webp","Mobile — IDEPayroll",{"id":46,"url":124,"title":122},"\u002Fimage\u002FIDEPayroll-2.webp",{"id":50,"url":126,"title":122},"\u002Fimage\u002FIDEPayroll-3.webp",{"id":53,"url":128,"title":122},"\u002Fimage\u002FIDEPayroll-4.webp",{"id":56,"url":130,"title":122},"\u002Fimage\u002FIDEPayroll-5.webp",[132,133,134,136,137],{"id":6,"name":73},{"id":14,"name":79},{"id":18,"name":135},"MySQL",{"id":22,"name":91},{"id":26,"name":93},{"id":18,"name":139,"description":140,"images":141,"stacks":148,"urlProject":157},"Rens UI: A Modern CSS Component Library","Rens UI is a CSS component library built using Tailwind CSS, providing you with access to a collection of ready-to-use components for developing captivating user interfaces With semantic class names.",[142,145],{"id":6,"url":143,"title":144},"\u002Fimage\u002Frens-ui-card.webp","Rens UI Card",{"id":14,"url":146,"title":147},"\u002Fimage\u002Frens-ui-landing.webp","Rens UI Landing",[149,151,153,155],{"id":6,"name":150},"UI",{"id":14,"name":152},"Library",{"id":18,"name":154},"Tailwindcss",{"id":22,"name":156},"Components","https:\u002F\u002Frens-ui.okriiza.my.id\u002F",{"id":22,"name":159,"description":160,"images":161,"stacks":171,"urlProject":178},"Rens Theme","Rens Theme is a theme that suit your mood. It comes with two variants, Rens Dark, Rens Dark Soft And Rens Dark Sweet.",[162,165,168],{"id":6,"url":163,"title":164},"\u002Fimage\u002Fdark.webp","Dark",{"id":14,"url":166,"title":167},"\u002Fimage\u002Fdark-soft.webp","Dark Soft",{"id":18,"url":169,"title":170},"\u002Fimage\u002Fdark-sweet.webp","Dark Sweet",[172,174,176],{"id":6,"name":173},"Theme",{"id":14,"name":175},"VSCode-Theme",{"id":18,"name":177},"Dark-Theme","https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=RendiOkriza.rens-theme",{"id":26,"name":180,"description":181,"images":182,"stacks":189,"urlProject":197},"Sistem Informasi Bimbingan Belajar ","In this project, I successfully designed and developed a comprehensive Bimbel website with various features such as attendance, employee payroll, landing page, forum, billing, and blog.",[183,186],{"id":6,"url":184,"title":185},"\u002Fimage\u002FThe-Bright-Landing-Page.webp","Landing Page",{"id":14,"url":187,"title":188},"\u002Fimage\u002FThe-Bright-Dashboard.webp","Dashboard Admin",[190,191,193,195],{"id":6,"name":73},{"id":14,"name":192},"MySql",{"id":18,"name":194},"Bootstrap",{"id":30,"name":196},"Figma","https:\u002F\u002Fthebrightcourse.com",{"id":30,"name":199,"description":200,"images":201,"stacks":207,"urlProject":212},"Sistem Informasi Pariwisata","I designed and developed a complete-featured tourism website for an easy and enjoyable travel experience. There is a main feature of managing travel packages with details of seat, facilities, pricing, destination description, and contact number for booking. Additionally, there is a feature of managing photo and video documentation for each travel journey.",[202,204],{"id":6,"url":203,"title":185},"\u002Fimage\u002FRama-Wisata-Landing.webp",{"id":14,"url":205,"title":206},"\u002Fimage\u002FRama-Wisata-Detail.webp","Detail Page",[208,209,210,211],{"id":6,"name":73},{"id":14,"name":192},{"id":18,"name":194},{"id":30,"name":196},"https:\u002F\u002Framawisata.netlify.app\u002F",{"id":34,"name":214,"description":215,"images":216,"stacks":223,"urlProject":94},"Sistem Informasi Inventory","This inventory information system is used in a building supply store to manage inventory, users, and transactions. It is equipped with features such as managing goods, users, daily-monthly-yearly transaction reports, transaction details, invoice printing, as well as daily-monthly-yearly income and daily sales information.",[217,220],{"id":6,"url":218,"title":219},"\u002Fimage\u002Finventory-dashboard.webp","Dashboard",{"id":14,"url":221,"title":222},"\u002Fimage\u002Finventory-transaction.webp","Tansaksi penjualan",[224,226,227],{"id":6,"name":225},"PHP",{"id":14,"name":192},{"id":18,"name":194},{"id":38,"name":229,"description":230,"images":231,"stacks":234,"urlProject":94},"Antares Platform IoT Solution","In this project, I am in charge of designing UI using figma and assisting the frontend team in implementing UI into code using ReactJS and TailwindCSS.",[232],{"id":6,"url":233,"title":185},"\u002Fimage\u002Fantares.webp",[235,236,238],{"id":6,"name":196},{"id":14,"name":237},"TailwindCSS",{"id":18,"name":239},"ReactJS",[241,987,1784,2073],{"id":242,"title":243,"author":244,"body":245,"createdAt":966,"description":967,"extension":968,"img":969,"meta":970,"navigation":972,"path":973,"publishedAt":974,"readingTime":975,"seo":980,"stem":981,"tags":982,"updatedAt":985,"__hash__":986},"articles\u002Farticles\u002F1.kumpulan-perintah-git-git-cheat-sheet.md","Kumpulan Perintah Git (Git Cheat Sheet)","Rendi Okriza Putra",{"type":246,"value":247,"toc":954},"minimark",[248,252,257,260,291,294,324,327,345,348,352,355,364,367,376,378,382,385,394,397,413,416,425,428,437,440,457,460,481,484,488,491,500,503,524,527,536,539,548,551,563,566,570,573,583,586,601,604,622,625,634,637,646,649,653,656,671,674,683,686,695,698,707,710,719,722,726,729,738,741,761,764,768,771,780,783,792,795,804,807,816,819,823,826,835,838,869,872,893,896,900,903,926,929,947,950],[249,250,251],"p",{},"Git adalah sistem kontrol versi terdistribusi gratis dan open source yang bertanggung jawab atas semua GitHub terkait yang terjadi secara lokal di komputer Anda. Lembar contekan ini menampilkan yang paling penting dan umum menggunakan perintah Git untuk referensi mudah.",[253,254,256],"h2",{"id":255},"setup","SETUP",[249,258,259],{},"Mengonfigurasi informasi pengguna yang digunakan di semua repositori lokal",[261,262,267],"pre",{"className":263,"code":264,"language":265,"meta":266,"style":266},"language-cmd shiki shiki-themes one-dark-pro","git config --global user.name “[firstname lastname]”\n","cmd","",[268,269,270],"code",{"__ignoreMap":266},[271,272,274,278,282,285,288],"span",{"class":273,"line":6},"line",[271,275,277],{"class":276},"sn6KH","git ",[271,279,281],{"class":280},"sVyAn","config",[271,283,284],{"class":276}," --",[271,286,287],{"class":280},"global",[271,289,290],{"class":276}," user.name “[firstname lastname]”\n",[249,292,293],{},"set a name that is identifiable for credit when review version history",[261,295,297],{"className":263,"code":296,"language":265,"meta":266,"style":266},"git config --global user.email “[valid-email]”\n",[268,298,299],{"__ignoreMap":266},[271,300,301,303,305,307,309,312,315,318,321],{"class":273,"line":6},[271,302,277],{"class":276},[271,304,281],{"class":280},[271,306,284],{"class":276},[271,308,287],{"class":280},[271,310,311],{"class":276}," user.email “[",[271,313,314],{"class":280},"valid",[271,316,317],{"class":276},"-",[271,319,320],{"class":280},"email",[271,322,323],{"class":276},"]”\n",[249,325,326],{},"set an email address that will be associated with each history marker",[261,328,330],{"className":263,"code":329,"language":265,"meta":266,"style":266},"git config --global color.ui auto\n",[268,331,332],{"__ignoreMap":266},[271,333,334,336,338,340,342],{"class":273,"line":6},[271,335,277],{"class":276},[271,337,281],{"class":280},[271,339,284],{"class":276},[271,341,287],{"class":280},[271,343,344],{"class":276}," color.ui auto\n",[249,346,347],{},"set automatic command line coloring for Git for easy reviewing",[253,349,351],{"id":350},"setup-init","SETUP & INIT",[249,353,354],{},"Mengonfigurasi informasi pengguna, menginisialisasi, dan mengkloning repositori",[261,356,358],{"className":263,"code":357,"language":265,"meta":266,"style":266},"git init\n",[268,359,360],{"__ignoreMap":266},[271,361,362],{"class":273,"line":6},[271,363,357],{"class":276},[249,365,366],{},"initialize an existing directory as a Git repository",[261,368,370],{"className":263,"code":369,"language":265,"meta":266,"style":266},"git clone [url]\n",[268,371,372],{"__ignoreMap":266},[271,373,374],{"class":273,"line":6},[271,375,369],{"class":276},[249,377,366],{},[253,379,381],{"id":380},"stage-snapshot","STAGE & SNAPSHOT",[249,383,384],{},"Bekerja dengan snapshot dan area pementasan Git",[261,386,388],{"className":263,"code":387,"language":265,"meta":266,"style":266},"git status\n",[268,389,390],{"__ignoreMap":266},[271,391,392],{"class":273,"line":6},[271,393,387],{"class":276},[249,395,396],{},"show modified files in working directory, staged for your next commit",[261,398,400],{"className":263,"code":399,"language":265,"meta":266,"style":266},"git add [file]\n",[268,401,402],{"__ignoreMap":266},[271,403,404,406,410],{"class":273,"line":6},[271,405,277],{"class":276},[271,407,409],{"class":408},"sjrmR","add",[271,411,412],{"class":276}," [file]\n",[249,414,415],{},"add a file as it looks now to your next commit (stage)",[261,417,419],{"className":263,"code":418,"language":265,"meta":266,"style":266},"git reset [file]\n",[268,420,421],{"__ignoreMap":266},[271,422,423],{"class":273,"line":6},[271,424,418],{"class":276},[249,426,427],{},"unstage a file while retaining the changes in working directory",[261,429,431],{"className":263,"code":430,"language":265,"meta":266,"style":266},"git diff\n",[268,432,433],{"__ignoreMap":266},[271,434,435],{"class":273,"line":6},[271,436,430],{"class":276},[249,438,439],{},"diff of what is changed but not staged",[261,441,443],{"className":263,"code":442,"language":265,"meta":266,"style":266},"git diff --staged\n",[268,444,445],{"__ignoreMap":266},[271,446,447,449,452,454],{"class":273,"line":6},[271,448,277],{"class":276},[271,450,451],{"class":280},"diff",[271,453,284],{"class":276},[271,455,456],{"class":280},"staged\n",[249,458,459],{},"diff of what is staged but not yet commited",[261,461,463],{"className":263,"code":462,"language":265,"meta":266,"style":266},"git commit -m “[descriptive message]”\n",[268,464,465],{"__ignoreMap":266},[271,466,467,469,472,475,478],{"class":273,"line":6},[271,468,277],{"class":276},[271,470,471],{"class":280},"commit",[271,473,474],{"class":276}," -",[271,476,477],{"class":280},"m",[271,479,480],{"class":276}," “[descriptive message]”\n",[249,482,483],{},"commit your staged content as a new commit snapshot",[253,485,487],{"id":486},"branch-merge","BRANCH & MERGE",[249,489,490],{},"Mengisolasi pekerjaan di cabang, mengubah konteks, dan mengintegrasikan perubahan",[261,492,494],{"className":263,"code":493,"language":265,"meta":266,"style":266},"git branch\n",[268,495,496],{"__ignoreMap":266},[271,497,498],{"class":273,"line":6},[271,499,493],{"class":276},[249,501,502],{},"list your branches. a * will appear next to the currently active branch",[261,504,506],{"className":263,"code":505,"language":265,"meta":266,"style":266},"git branch [branch-name]\n",[268,507,508],{"__ignoreMap":266},[271,509,510,513,516,518,521],{"class":273,"line":6},[271,511,512],{"class":276},"git branch [",[271,514,515],{"class":280},"branch",[271,517,317],{"class":276},[271,519,520],{"class":280},"name",[271,522,523],{"class":276},"]\n",[249,525,526],{},"create a new branch at the current commit",[261,528,530],{"className":263,"code":529,"language":265,"meta":266,"style":266},"git checkout\n",[268,531,532],{"__ignoreMap":266},[271,533,534],{"class":273,"line":6},[271,535,529],{"class":276},[249,537,538],{},"switch to another branch and check it out into your working directory",[261,540,542],{"className":263,"code":541,"language":265,"meta":266,"style":266},"git merge [branch]\n",[268,543,544],{"__ignoreMap":266},[271,545,546],{"class":273,"line":6},[271,547,541],{"class":276},[249,549,550],{},"merge the specified branch’s history into the current one",[261,552,554],{"className":263,"code":553,"language":265,"meta":266,"style":266},"git log\n",[268,555,556],{"__ignoreMap":266},[271,557,558,560],{"class":273,"line":6},[271,559,277],{"class":276},[271,561,562],{"class":408},"log\n",[249,564,565],{},"show all commits in the current branch’s history",[253,567,569],{"id":568},"inspect-compare","INSPECT & COMPARE",[249,571,572],{},"Memeriksa log, perbedaan, dan informasi objek",[261,574,575],{"className":263,"code":553,"language":265,"meta":266,"style":266},[268,576,577],{"__ignoreMap":266},[271,578,579,581],{"class":273,"line":6},[271,580,277],{"class":276},[271,582,562],{"class":408},[249,584,585],{},"show the commit history for the currently active branch",[261,587,589],{"className":263,"code":588,"language":265,"meta":266,"style":266},"git log branchB..branchA\n",[268,590,591],{"__ignoreMap":266},[271,592,593,595,598],{"class":273,"line":6},[271,594,277],{"class":276},[271,596,597],{"class":408},"log",[271,599,600],{"class":276}," branchB..branchA\n",[249,602,603],{},"show the commits on branchA that are not on branchB",[261,605,607],{"className":263,"code":606,"language":265,"meta":266,"style":266},"git log --follow [file]\n",[268,608,609],{"__ignoreMap":266},[271,610,611,613,615,617,620],{"class":273,"line":6},[271,612,277],{"class":276},[271,614,597],{"class":408},[271,616,284],{"class":276},[271,618,619],{"class":280},"follow",[271,621,412],{"class":276},[249,623,624],{},"show the commits that changed file, even across renames",[261,626,628],{"className":263,"code":627,"language":265,"meta":266,"style":266},"git diff branchB...branchA\n",[268,629,630],{"__ignoreMap":266},[271,631,632],{"class":273,"line":6},[271,633,627],{"class":276},[249,635,636],{},"show the diff of what is in branchA that is not in branchB",[261,638,640],{"className":263,"code":639,"language":265,"meta":266,"style":266},"git show [SHA]\n",[268,641,642],{"__ignoreMap":266},[271,643,644],{"class":273,"line":6},[271,645,639],{"class":276},[249,647,648],{},"show any object in Git in human-readable format",[253,650,652],{"id":651},"share-update","SHARE & UPDATE",[249,654,655],{},"Mengambil pembaruan dari repositori lain dan memperbarui repo lokal",[261,657,659],{"className":263,"code":658,"language":265,"meta":266,"style":266},"git remote add [alias] [url]\n",[268,660,661],{"__ignoreMap":266},[271,662,663,666,668],{"class":273,"line":6},[271,664,665],{"class":276},"git remote ",[271,667,409],{"class":408},[271,669,670],{"class":276}," [alias] [url]\n",[249,672,673],{},"add a git URL as an alias",[261,675,677],{"className":263,"code":676,"language":265,"meta":266,"style":266},"git fetch [alias]\n",[268,678,679],{"__ignoreMap":266},[271,680,681],{"class":273,"line":6},[271,682,676],{"class":276},[249,684,685],{},"fetch down all the branches from that Git remote",[261,687,689],{"className":263,"code":688,"language":265,"meta":266,"style":266},"git merge [alias]\u002F[branch]\n",[268,690,691],{"__ignoreMap":266},[271,692,693],{"class":273,"line":6},[271,694,688],{"class":276},[249,696,697],{},"merge a remote branch into your current branch to bring it up to date",[261,699,701],{"className":263,"code":700,"language":265,"meta":266,"style":266},"git push [alias] [branch]\n",[268,702,703],{"__ignoreMap":266},[271,704,705],{"class":273,"line":6},[271,706,700],{"class":276},[249,708,709],{},"Transmit local branch commits to the remote repository branch",[261,711,713],{"className":263,"code":712,"language":265,"meta":266,"style":266},"git pull\n",[268,714,715],{"__ignoreMap":266},[271,716,717],{"class":273,"line":6},[271,718,712],{"class":276},[249,720,721],{},"fetch and merge any commits from the tracking remote branch",[253,723,725],{"id":724},"rewrite-history","REWRITE HISTORY",[249,727,728],{},"Menulis ulang cabang, memperbarui komit, dan menghapus riwayat",[261,730,732],{"className":263,"code":731,"language":265,"meta":266,"style":266},"git rebase [branch]\n",[268,733,734],{"__ignoreMap":266},[271,735,736],{"class":273,"line":6},[271,737,731],{"class":276},[249,739,740],{},"apply any commits of current branch ahead of specified one",[261,742,744],{"className":263,"code":743,"language":265,"meta":266,"style":266},"git reset --hard [commit]\n",[268,745,746],{"__ignoreMap":266},[271,747,748,750,753,755,758],{"class":273,"line":6},[271,749,277],{"class":276},[271,751,752],{"class":280},"reset",[271,754,284],{"class":276},[271,756,757],{"class":280},"hard",[271,759,760],{"class":276}," [commit]\n",[249,762,763],{},"clear staging area, rewrite working tree from specified commit",[253,765,767],{"id":766},"temporary-commits","TEMPORARY COMMITS",[249,769,770],{},"Menyimpan sementara file yang dimodifikasi dan dilacak untuk mengubah cabang",[261,772,774],{"className":263,"code":773,"language":265,"meta":266,"style":266},"git stash\n",[268,775,776],{"__ignoreMap":266},[271,777,778],{"class":273,"line":6},[271,779,773],{"class":276},[249,781,782],{},"Save modified and staged changes",[261,784,786],{"className":263,"code":785,"language":265,"meta":266,"style":266},"git stash list\n",[268,787,788],{"__ignoreMap":266},[271,789,790],{"class":273,"line":6},[271,791,785],{"class":276},[249,793,794],{},"list stack-order of stashed file changes",[261,796,798],{"className":263,"code":797,"language":265,"meta":266,"style":266},"git stash pop\n",[268,799,800],{"__ignoreMap":266},[271,801,802],{"class":273,"line":6},[271,803,797],{"class":276},[249,805,806],{},"write working from top of stash stack",[261,808,810],{"className":263,"code":809,"language":265,"meta":266,"style":266},"git stash drop\n",[268,811,812],{"__ignoreMap":266},[271,813,814],{"class":273,"line":6},[271,815,809],{"class":276},[249,817,818],{},"discard the changes from top of stash stack",[253,820,822],{"id":821},"tracking-path-changes","TRACKING PATH CHANGES",[249,824,825],{},"Penghapusan file versi dan perubahan jalur",[261,827,829],{"className":263,"code":828,"language":265,"meta":266,"style":266},"git rm [file]\n",[268,830,831],{"__ignoreMap":266},[271,832,833],{"class":273,"line":6},[271,834,828],{"class":276},[249,836,837],{},"delete the file from project and stage the removal for commit",[261,839,841],{"className":263,"code":840,"language":265,"meta":266,"style":266},"git mv [existing-path] [new-path]\n",[268,842,843],{"__ignoreMap":266},[271,844,845,848,851,853,856,859,863,865,867],{"class":273,"line":6},[271,846,847],{"class":276},"git mv [",[271,849,850],{"class":280},"existing",[271,852,317],{"class":276},[271,854,855],{"class":280},"path",[271,857,858],{"class":276},"] [",[271,860,862],{"class":861},"seHd6","new",[271,864,317],{"class":276},[271,866,855],{"class":280},[271,868,523],{"class":276},[249,870,871],{},"change an existing file path and stage the move",[261,873,875],{"className":263,"code":874,"language":265,"meta":266,"style":266},"git log --stat -M\n",[268,876,877],{"__ignoreMap":266},[271,878,879,881,883,885,888,890],{"class":273,"line":6},[271,880,277],{"class":276},[271,882,597],{"class":408},[271,884,284],{"class":276},[271,886,887],{"class":280},"stat",[271,889,474],{"class":276},[271,891,892],{"class":280},"M\n",[249,894,895],{},"show all commit logs with indication of any paths that moved",[253,897,899],{"id":898},"ignoring-patterns","IGNORING PATTERNS",[249,901,902],{},"Mencegah pementasan atau pengkomitan file yang tidak disengaja",[261,904,906],{"className":263,"code":905,"language":265,"meta":266,"style":266},"logs\u002F\n*.notes\npattern*\u002F\n",[268,907,908,916,921],{"__ignoreMap":266},[271,909,910,913],{"class":273,"line":6},[271,911,912],{"class":280},"logs",[271,914,915],{"class":276},"\u002F\n",[271,917,918],{"class":273,"line":14},[271,919,920],{"class":276},"*.notes\n",[271,922,923],{"class":273,"line":18},[271,924,925],{"class":276},"pattern*\u002F\n",[249,927,928],{},"Save a file with desired paterns as .gitignore with either direct string\nmatches or wildcard globs.",[261,930,932],{"className":263,"code":931,"language":265,"meta":266,"style":266},"git config --global core.excludesfile [file]\n",[268,933,934],{"__ignoreMap":266},[271,935,936,938,940,942,944],{"class":273,"line":6},[271,937,277],{"class":276},[271,939,281],{"class":280},[271,941,284],{"class":276},[271,943,287],{"class":280},[271,945,946],{"class":276}," core.excludesfile [file]\n",[249,948,949],{},"system wide ignore patern for all local repositories",[951,952,953],"style",{},"html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}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 pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html pre.shiki code .seHd6, html code.shiki .seHd6{--shiki-default:#C678DD}",{"title":266,"searchDepth":14,"depth":14,"links":955},[956,957,958,959,960,961,962,963,964,965],{"id":255,"depth":14,"text":256},{"id":350,"depth":14,"text":351},{"id":380,"depth":14,"text":381},{"id":486,"depth":14,"text":487},{"id":568,"depth":14,"text":569},{"id":651,"depth":14,"text":652},{"id":724,"depth":14,"text":725},{"id":766,"depth":14,"text":767},{"id":821,"depth":14,"text":822},{"id":898,"depth":14,"text":899},"Mei 27, 2023","Git adalah sistem kontrol versi terdistribusi gratis dan open source yang bertanggung jawab atas semua GitHub terkait yang terjadi secara lokal di komputer Anda.","md","\u002Fimage\u002Farticle\u002Fgit-cheat-sheet.png",{"layout":971},"blog",true,"\u002Farticles\u002Fkumpulan-perintah-git-git-cheat-sheet","2023-05-27",{"text":976,"minutes":977,"time":978,"words":979},"3 min read",2.63,157800,526,{"title":243,"description":967},"articles\u002F1.kumpulan-perintah-git-git-cheat-sheet",[983,984],"git","github","Mei 28, 2023","0HcY1TA1RD1HXjojra0MRTNcRv-NhebTK-cSXFDpkYs",{"id":988,"title":989,"author":244,"body":990,"createdAt":985,"description":1770,"extension":968,"img":1771,"meta":1772,"navigation":972,"path":1773,"publishedAt":1774,"readingTime":1775,"seo":1779,"stem":1780,"tags":1781,"updatedAt":1782,"__hash__":1783},"articles\u002Farticles\u002F2.laravel-api-response-formatter.md","Laravel API Response Formatter",{"type":246,"value":991,"toc":1763},[992,997,1001,1014,1018,1021,1041,1044,1048,1054,1164,1168,1174,1208,1212,1218,1562,1573,1682,1685,1747,1757,1760],[249,993,994,996],{},[268,995,989],{}," is a class that provides methods for formatting API responses in a standardized format. It simplifies the process of creating consistent and well-structured JSON responses in your API.",[253,998,1000],{"id":999},"requirements","Requirements",[1002,1003,1004,1011],"ul",{},[1005,1006,1007,1008],"li",{},"PHP ",[268,1009,1010],{},"^7.4 | ^8.0",[1005,1012,1013],{},"Laravel 6, 7, 8, 9 or 10",[253,1015,1017],{"id":1016},"installation","Installation",[249,1019,1020],{},"You can install the package via composer:",[261,1022,1026],{"className":1023,"code":1024,"language":1025,"meta":266,"style":266},"language-bash shiki shiki-themes one-dark-pro","composer require okriiza\u002Flaravel-api-response-formatter\n","bash",[268,1027,1028],{"__ignoreMap":266},[271,1029,1030,1034,1038],{"class":273,"line":6},[271,1031,1033],{"class":1032},"sVbv2","composer",[271,1035,1037],{"class":1036},"subq3"," require",[271,1039,1040],{"class":1036}," okriiza\u002Flaravel-api-response-formatter\n",[249,1042,1043],{},"The package will automatically register itself.",[253,1045,1047],{"id":1046},"function-list","Function List",[249,1049,1050,1051,1053],{},"The ",[268,1052,989],{}," class provides the following functions:",[1055,1056,1057,1070],"table",{},[1058,1059,1060],"thead",{},[1061,1062,1063,1067],"tr",{},[1064,1065,1066],"th",{},"Function",[1064,1068,1069],{},"Description",[1071,1072,1073,1084,1094,1104,1114,1124,1134,1144,1154],"tbody",{},[1061,1074,1075,1081],{},[1076,1077,1078],"td",{},[268,1079,1080],{},"success()",[1076,1082,1083],{},"Formats a success response with optional data, message, status, and HTTP code.",[1061,1085,1086,1091],{},[1076,1087,1088],{},[268,1089,1090],{},"created()",[1076,1092,1093],{},"Formats a created response with optional data, message, status, and HTTP code.",[1061,1095,1096,1101],{},[1076,1097,1098],{},[268,1099,1100],{},"noContent()",[1076,1102,1103],{},"Formats a no content response with optional data, message, status, and HTTP code.",[1061,1105,1106,1111],{},[1076,1107,1108],{},[268,1109,1110],{},"error()",[1076,1112,1113],{},"Formats an error response with optional data, message, status, and HTTP code.",[1061,1115,1116,1121],{},[1076,1117,1118],{},[268,1119,1120],{},"unAuthenticated()",[1076,1122,1123],{},"Formats an unauthenticated response with optional data, message, status, and HTTP code.",[1061,1125,1126,1131],{},[1076,1127,1128],{},[268,1129,1130],{},"forbidden()",[1076,1132,1133],{},"Formats a forbidden response with optional data, message, status, and HTTP code.",[1061,1135,1136,1141],{},[1076,1137,1138],{},[268,1139,1140],{},"notFound()",[1076,1142,1143],{},"Formats a not found response with optional data, message, status, and HTTP code.",[1061,1145,1146,1151],{},[1076,1147,1148],{},[268,1149,1150],{},"methodNotAllowed()",[1076,1152,1153],{},"Formats a method not allowed response with optional data, message, status, and HTTP code.",[1061,1155,1156,1161],{},[1076,1157,1158],{},[268,1159,1160],{},"failedValidation()",[1076,1162,1163],{},"Formats a failed validation response with optional data, message, status, and HTTP code.",[253,1165,1167],{"id":1166},"parameters","Parameters",[249,1169,1170,1171,1173],{},"The functions in the ",[268,1172,989],{}," class accept the following parameters:",[1002,1175,1176,1182,1188,1202],{},[1005,1177,1178,1181],{},[268,1179,1180],{},"$data"," (optional): The data to be included in the response. It can be of any type.",[1005,1183,1184,1187],{},[268,1185,1186],{},"$message"," (optional): The message to be included in the response. If not provided, a default message will be used.",[1005,1189,1190,1193,1194,1197,1198,1201],{},[268,1191,1192],{},"$status"," (optional): The success status of the response. Defaults to ",[268,1195,1196],{},"true"," for success responses and ",[268,1199,1200],{},"false"," for error responses.",[1005,1203,1204,1207],{},[268,1205,1206],{},"$httpCode"," (optional): The HTTP response code to be returned. It defaults to the corresponding HTTP status code for each response type.",[253,1209,1211],{"id":1210},"example-usage","Example Usage",[249,1213,1214,1215,1217],{},"Here's an example of how you can use the ",[268,1216,989],{}," class in a user controller:",[261,1219,1224],{"className":1220,"code":1221,"filename":1222,"language":1223,"meta":266,"style":266},"language-php shiki shiki-themes one-dark-pro","\u003C?php\n\nuse Okriiza\\ApiResponseFormatter\\ApiResponse;\n\nclass UserController extends Controller\n{\n    public function show($id): JsonResponse\n    {\n        $user = User::find($id);\n\n        if ($user) {\n            return ApiResponse::success($user);\n        } else {\n            return ApiResponse::notFound(null, 'User not found');\n        }\n    }\n\n    public function create(Request $request): JsonResponse\n    {\n        \u002F\u002F Validation logic\n\n        if ($validationFails) {\n            return ApiResponse::failedValidation($validationErrors);\n        }\n\n        $user = User::create($request->all());\n\n        return ApiResponse::created($user);\n    }\n}\n","app\u002Fhttp\u002Fcontrollers\u002FUserController.php","php",[268,1225,1226,1237,1242,1257,1261,1275,1280,1303,1308,1332,1336,1350,1369,1380,1405,1410,1415,1419,1441,1446,1453,1458,1470,1489,1494,1499,1527,1532,1551,1556],{"__ignoreMap":266},[271,1227,1228,1231,1234],{"class":273,"line":6},[271,1229,1230],{"class":408},"\u003C",[271,1232,1233],{"class":861},"?",[271,1235,1236],{"class":276},"php\n",[271,1238,1239],{"class":273,"line":14},[271,1240,1241],{"emptyLinePlaceholder":972},"\n",[271,1243,1244,1247,1250,1254],{"class":273,"line":18},[271,1245,1246],{"class":861},"use",[271,1248,1249],{"class":276}," Okriiza\\ApiResponseFormatter\\",[271,1251,1253],{"class":1252},"sU0A5","ApiResponse",[271,1255,1256],{"class":276},";\n",[271,1258,1259],{"class":273,"line":22},[271,1260,1241],{"emptyLinePlaceholder":972},[271,1262,1263,1266,1269,1272],{"class":273,"line":26},[271,1264,1265],{"class":861},"class",[271,1267,1268],{"class":1252}," UserController",[271,1270,1271],{"class":861}," extends",[271,1273,1274],{"class":1252}," Controller\n",[271,1276,1277],{"class":273,"line":30},[271,1278,1279],{"class":276},"{\n",[271,1281,1282,1285,1288,1291,1294,1297,1300],{"class":273,"line":34},[271,1283,1284],{"class":861},"    public",[271,1286,1287],{"class":861}," function",[271,1289,1290],{"class":1032}," show",[271,1292,1293],{"class":276},"(",[271,1295,1296],{"class":280},"$id",[271,1298,1299],{"class":276},"): ",[271,1301,1302],{"class":1252},"JsonResponse\n",[271,1304,1305],{"class":273,"line":38},[271,1306,1307],{"class":276},"    {\n",[271,1309,1310,1313,1316,1319,1322,1325,1327,1329],{"class":273,"line":42},[271,1311,1312],{"class":280},"        $user",[271,1314,1315],{"class":408}," =",[271,1317,1318],{"class":1252}," User",[271,1320,1321],{"class":276},"::",[271,1323,1324],{"class":1032},"find",[271,1326,1293],{"class":276},[271,1328,1296],{"class":280},[271,1330,1331],{"class":276},");\n",[271,1333,1334],{"class":273,"line":46},[271,1335,1241],{"emptyLinePlaceholder":972},[271,1337,1338,1341,1344,1347],{"class":273,"line":50},[271,1339,1340],{"class":861},"        if",[271,1342,1343],{"class":276}," (",[271,1345,1346],{"class":280},"$user",[271,1348,1349],{"class":276},") {\n",[271,1351,1352,1355,1358,1360,1363,1365,1367],{"class":273,"line":53},[271,1353,1354],{"class":861},"            return",[271,1356,1357],{"class":1252}," ApiResponse",[271,1359,1321],{"class":276},[271,1361,1362],{"class":1032},"success",[271,1364,1293],{"class":276},[271,1366,1346],{"class":280},[271,1368,1331],{"class":276},[271,1370,1371,1374,1377],{"class":273,"line":56},[271,1372,1373],{"class":276},"        } ",[271,1375,1376],{"class":861},"else",[271,1378,1379],{"class":276}," {\n",[271,1381,1382,1384,1386,1388,1391,1393,1397,1400,1403],{"class":273,"line":59},[271,1383,1354],{"class":861},[271,1385,1357],{"class":1252},[271,1387,1321],{"class":276},[271,1389,1390],{"class":1032},"notFound",[271,1392,1293],{"class":276},[271,1394,1396],{"class":1395},"sVC51","null",[271,1398,1399],{"class":276},", ",[271,1401,1402],{"class":1036},"'User not found'",[271,1404,1331],{"class":276},[271,1406,1407],{"class":273,"line":63},[271,1408,1409],{"class":276},"        }\n",[271,1411,1412],{"class":273,"line":66},[271,1413,1414],{"class":276},"    }\n",[271,1416,1417],{"class":273,"line":69},[271,1418,1241],{"emptyLinePlaceholder":972},[271,1420,1422,1424,1426,1429,1431,1434,1437,1439],{"class":273,"line":1421},18,[271,1423,1284],{"class":861},[271,1425,1287],{"class":861},[271,1427,1428],{"class":1032}," create",[271,1430,1293],{"class":276},[271,1432,1433],{"class":1252},"Request",[271,1435,1436],{"class":280}," $request",[271,1438,1299],{"class":276},[271,1440,1302],{"class":1252},[271,1442,1444],{"class":273,"line":1443},19,[271,1445,1307],{"class":276},[271,1447,1449],{"class":273,"line":1448},20,[271,1450,1452],{"class":1451},"sV9Aq","        \u002F\u002F Validation logic\n",[271,1454,1456],{"class":273,"line":1455},21,[271,1457,1241],{"emptyLinePlaceholder":972},[271,1459,1461,1463,1465,1468],{"class":273,"line":1460},22,[271,1462,1340],{"class":861},[271,1464,1343],{"class":276},[271,1466,1467],{"class":280},"$validationFails",[271,1469,1349],{"class":276},[271,1471,1473,1475,1477,1479,1482,1484,1487],{"class":273,"line":1472},23,[271,1474,1354],{"class":861},[271,1476,1357],{"class":1252},[271,1478,1321],{"class":276},[271,1480,1481],{"class":1032},"failedValidation",[271,1483,1293],{"class":276},[271,1485,1486],{"class":280},"$validationErrors",[271,1488,1331],{"class":276},[271,1490,1492],{"class":273,"line":1491},24,[271,1493,1409],{"class":276},[271,1495,1497],{"class":273,"line":1496},25,[271,1498,1241],{"emptyLinePlaceholder":972},[271,1500,1502,1504,1506,1508,1510,1513,1515,1518,1521,1524],{"class":273,"line":1501},26,[271,1503,1312],{"class":280},[271,1505,1315],{"class":408},[271,1507,1318],{"class":1252},[271,1509,1321],{"class":276},[271,1511,1512],{"class":1032},"create",[271,1514,1293],{"class":276},[271,1516,1517],{"class":280},"$request",[271,1519,1520],{"class":276},"->",[271,1522,1523],{"class":1032},"all",[271,1525,1526],{"class":276},"());\n",[271,1528,1530],{"class":273,"line":1529},27,[271,1531,1241],{"emptyLinePlaceholder":972},[271,1533,1535,1538,1540,1542,1545,1547,1549],{"class":273,"line":1534},28,[271,1536,1537],{"class":861},"        return",[271,1539,1357],{"class":1252},[271,1541,1321],{"class":276},[271,1543,1544],{"class":1032},"created",[271,1546,1293],{"class":276},[271,1548,1346],{"class":280},[271,1550,1331],{"class":276},[271,1552,1554],{"class":273,"line":1553},29,[271,1555,1414],{"class":276},[271,1557,1559],{"class":273,"line":1558},30,[271,1560,1561],{"class":276},"}\n",[249,1563,1564,1565,1568,1569,1572],{},"In the above example, the ",[268,1566,1567],{},"show()"," method fetches a user by ID and returns a success response if the user exists. If the user is not found, it returns a not found response. The ",[268,1570,1571],{},"create()"," method performs validation and creates a new user. If the validation fails, it returns a failed validation response. Otherwise, it returns a created response with the created user.",[261,1574,1578],{"className":1575,"code":1576,"language":1577,"meta":266,"style":266},"language-json shiki shiki-themes one-dark-pro","{\n  \"meta\": {\n    \"code\": 200,\n    \"success\": true,\n    \"message\": \"OK\"\n  },\n  \"result\": {\n    \"id\": 1,\n    \"name\": \"John Doe\",\n    \"email\": \"john@example.com\"\n  }\n}\n","json",[268,1579,1580,1584,1592,1606,1617,1627,1632,1639,1651,1663,1673,1678],{"__ignoreMap":266},[271,1581,1582],{"class":273,"line":6},[271,1583,1279],{"class":276},[271,1585,1586,1589],{"class":273,"line":14},[271,1587,1588],{"class":280},"  \"meta\"",[271,1590,1591],{"class":276},": {\n",[271,1593,1594,1597,1600,1603],{"class":273,"line":18},[271,1595,1596],{"class":280},"    \"code\"",[271,1598,1599],{"class":276},": ",[271,1601,1602],{"class":1395},"200",[271,1604,1605],{"class":276},",\n",[271,1607,1608,1611,1613,1615],{"class":273,"line":22},[271,1609,1610],{"class":280},"    \"success\"",[271,1612,1599],{"class":276},[271,1614,1196],{"class":1395},[271,1616,1605],{"class":276},[271,1618,1619,1622,1624],{"class":273,"line":26},[271,1620,1621],{"class":280},"    \"message\"",[271,1623,1599],{"class":276},[271,1625,1626],{"class":1036},"\"OK\"\n",[271,1628,1629],{"class":273,"line":30},[271,1630,1631],{"class":276},"  },\n",[271,1633,1634,1637],{"class":273,"line":34},[271,1635,1636],{"class":280},"  \"result\"",[271,1638,1591],{"class":276},[271,1640,1641,1644,1646,1649],{"class":273,"line":38},[271,1642,1643],{"class":280},"    \"id\"",[271,1645,1599],{"class":276},[271,1647,1648],{"class":1395},"1",[271,1650,1605],{"class":276},[271,1652,1653,1656,1658,1661],{"class":273,"line":42},[271,1654,1655],{"class":280},"    \"name\"",[271,1657,1599],{"class":276},[271,1659,1660],{"class":1036},"\"John Doe\"",[271,1662,1605],{"class":276},[271,1664,1665,1668,1670],{"class":273,"line":46},[271,1666,1667],{"class":280},"    \"email\"",[271,1669,1599],{"class":276},[271,1671,1672],{"class":1036},"\"john@example.com\"\n",[271,1674,1675],{"class":273,"line":50},[271,1676,1677],{"class":276},"  }\n",[271,1679,1680],{"class":273,"line":53},[271,1681,1561],{"class":276},[249,1683,1684],{},"And for an error case:",[261,1686,1688],{"className":1575,"code":1687,"language":1577,"meta":266,"style":266},"{\n  \"meta\": {\n    \"code\": 404,\n    \"success\": false,\n    \"message\": \"User not found\"\n  },\n  \"result\": null\n}\n",[268,1689,1690,1694,1700,1711,1721,1730,1734,1743],{"__ignoreMap":266},[271,1691,1692],{"class":273,"line":6},[271,1693,1279],{"class":276},[271,1695,1696,1698],{"class":273,"line":14},[271,1697,1588],{"class":280},[271,1699,1591],{"class":276},[271,1701,1702,1704,1706,1709],{"class":273,"line":18},[271,1703,1596],{"class":280},[271,1705,1599],{"class":276},[271,1707,1708],{"class":1395},"404",[271,1710,1605],{"class":276},[271,1712,1713,1715,1717,1719],{"class":273,"line":22},[271,1714,1610],{"class":280},[271,1716,1599],{"class":276},[271,1718,1200],{"class":1395},[271,1720,1605],{"class":276},[271,1722,1723,1725,1727],{"class":273,"line":26},[271,1724,1621],{"class":280},[271,1726,1599],{"class":276},[271,1728,1729],{"class":1036},"\"User not found\"\n",[271,1731,1732],{"class":273,"line":30},[271,1733,1631],{"class":276},[271,1735,1736,1738,1740],{"class":273,"line":34},[271,1737,1636],{"class":280},[271,1739,1599],{"class":276},[271,1741,1742],{"class":1395},"null\n",[271,1744,1745],{"class":273,"line":38},[271,1746,1561],{"class":276},[249,1748,1050,1749,1752,1753,1756],{},[268,1750,1751],{},"meta"," object contains information about the response, such as the response code, status, and message. The ",[268,1754,1755],{},"result"," object holds the actual response data.",[249,1758,1759],{},"Note: The examples provided are simplified and may require modifications to fit your specific use case",[951,1761,1762],{},"html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html pre.shiki code .subq3, html code.shiki .subq3{--shiki-default:#98C379}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 pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html pre.shiki code .seHd6, html code.shiki .seHd6{--shiki-default:#C678DD}html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sU0A5, html code.shiki .sU0A5{--shiki-default:#E5C07B}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}html pre.shiki code .sVC51, html code.shiki .sVC51{--shiki-default:#D19A66}html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}",{"title":266,"searchDepth":14,"depth":14,"links":1764},[1765,1766,1767,1768,1769],{"id":999,"depth":14,"text":1000},{"id":1016,"depth":14,"text":1017},{"id":1046,"depth":14,"text":1047},{"id":1166,"depth":14,"text":1167},{"id":1210,"depth":14,"text":1211},"a simple package Format API responses throughout your Laravel application.","\u002Fimage\u002Farticle\u002Flaravel-api-response-formatter.png",{"layout":971},"\u002Farticles\u002Flaravel-api-response-formatter","2023-05-28",{"text":976,"minutes":1776,"time":1777,"words":1778},2.175,130500,435,{"title":989,"description":1770},"articles\u002F2.laravel-api-response-formatter",[983,984],"Sep 21, 2023","LOOva2ZmwkCxgzs1APY3SxbhlJDy_fMf2BjAauuV5EQ",{"id":1785,"title":1786,"author":244,"body":1787,"createdAt":2058,"description":2059,"extension":968,"img":2060,"meta":2061,"navigation":972,"path":2062,"publishedAt":2063,"readingTime":2064,"seo":2069,"stem":2070,"tags":2071,"updatedAt":2058,"__hash__":2072},"articles\u002Farticles\u002F3.git-commit-guidelines.md","Git Commit Guidelines",{"type":246,"value":1788,"toc":2047},[1789,1793,1796,1800,1803,1806,1817,1821,1845,1902,1905,1909,1922,1926,1929,1955,1959,1998,2002,2005,2016,2018,2021,2023,2026,2035,2044],[253,1790,1792],{"id":1791},"introduction","Introduction",[249,1794,1795],{},"Pada artikel kali ini saya akan membahasa mengenai guideline atau aturan format commit massage pada github yang dipakai kebanyakan programer, mungkin kalian sering melihat commit massage ketika melihat suatu repository framework ataupun repository suatu packages, pada message commit tersebut terdapat dikata awalnya fix:, chore:, feat:, docs:, dll, apasih itu? dan apa sih gunanya ?, langsung saja kita bahasa.",[253,1797,1799],{"id":1798},"git-commit","Git Commit",[249,1801,1802],{},"Dokumen ini diambil dari Kontribusi ke AngularJS. Setiap kontributor proyek harus memahami aturan-aturan berikut.",[249,1804,1805],{},"Kami memiliki aturan yang sangat spesifik mengenai format pesan git commit kami. Hal ini menghasilkan pesan-pesan yang lebih mudah dibaca dan diikuti saat melihat sejarah proyek. Selain itu, kami menggunakan pesan git commit ini untuk menghasilkan catatan perubahan kerangka tema.",[249,1807,1808,1809,1816],{},"Format pesan commit dapat ditambahkan menggunakan alur kerja git yang khas atau melalui penggunaan wizard CLI (Commitizen). Untuk menggunakan wizard, jalankan ",[1810,1811,1812],"strong",{},[1813,1814,1815],"em",{},"npm run commit"," di terminal Anda setelah memasukkan perubahan Anda ke dalam git.",[253,1818,1820],{"id":1819},"format-pesan-commit","Format Pesan Commit",[249,1822,1823,1824,1399,1827,1830,1831,1834,1835,1399,1838,1830,1841,1844],{},"Setiap pesan commit terdiri dari ",[1810,1825,1826],{},"header",[1810,1828,1829],{},"body",", dan ",[1810,1832,1833],{},"footer",". Header memiliki format khusus yang mencakup ",[1810,1836,1837],{},"jenis",[1810,1839,1840],{},"cakupan",[1810,1842,1843],{},"subjek",":",[261,1846,1848],{"className":263,"code":1847,"language":265,"meta":266,"style":266},"\u003Ctype>(\u003Cscope>): \u003Csubject>\n\u003CBARIS KOSONG>\n\n\u003Cbody&gt;\n",[268,1849,1850,1872,1884,1888],{"__ignoreMap":266},[271,1851,1852,1854,1857,1860,1863,1866,1869],{"class":273,"line":6},[271,1853,1230],{"class":276},[271,1855,1856],{"class":280},"type",[271,1858,1859],{"class":276},">(\u003C",[271,1861,1862],{"class":280},"scope",[271,1864,1865],{"class":276},">): \u003C",[271,1867,1868],{"class":280},"subject",[271,1870,1871],{"class":276},">\n",[271,1873,1874,1876,1879,1882],{"class":273,"line":14},[271,1875,1230],{"class":276},[271,1877,1878],{"class":280},"BARIS",[271,1880,1881],{"class":280}," KOSONG",[271,1883,1871],{"class":276},[271,1885,1886],{"class":273,"line":18},[271,1887,1241],{"emptyLinePlaceholder":972},[271,1889,1890,1892,1894,1897,1900],{"class":273,"line":22},[271,1891,1230],{"class":276},[271,1893,1829],{"class":280},[271,1895,1896],{"class":276},"&",[271,1898,1899],{"class":280},"gt",[271,1901,1256],{"class":276},[249,1903,1904],{},"Header adalah bagian wajib, sedangkan cakupan header adalah opsional.\nSetiap baris dalam pesan commit tidak boleh lebih dari 100 karakter! Hal ini memudahkan pembacaan pesan di GitHub serta pada berbagai alat git.",[253,1906,1908],{"id":1907},"membatalkan-revert","Membatalkan (Revert)",[249,1910,1911,1912,1915,1916,1921],{},"Jika commit membatalkan commit sebelumnya, harus dimulai dengan ",[1810,1913,1914],{},"revert",":, diikuti oleh header commit yang dibatalkan. Di dalam body, harus dituliskan: ",[1810,1917,1918],{},[1813,1919,1920],{},"This reverts commit {hash}","., di mana hash adalah SHA dari commit yang dibatalkan.",[253,1923,1925],{"id":1924},"jenis-type","Jenis (type)",[249,1927,1928],{},"Harus salah satu dari yang berikut:",[1002,1930,1931,1934,1937,1940,1943,1946,1949,1952],{},[1005,1932,1933],{},"feat: Fitur baru",[1005,1935,1936],{},"fix: Perbaikan bug",[1005,1938,1939],{},"docs: Perubahan hanya pada dokumentasi",[1005,1941,1942],{},"style: Perubahan yang tidak mempengaruhi makna kode (spasi putih, format, titik koma yang hilang, dll)",[1005,1944,1945],{},"refactor: Perubahan kode yang tidak memperbaiki bug maupun menambah fitur",[1005,1947,1948],{},"perf: Perubahan kode yang meningkatkan performa",[1005,1950,1951],{},"test: Menambahkan pengujian yang hilang",[1005,1953,1954],{},"chore: Perubahan pada proses pembangunan atau alat dan pustaka tambahan seperti pembuatan dokumentasi",[253,1956,1958],{"id":1957},"cakupan-scope","cakupan (scope)",[249,1960,1961,1962,1399,1967,1399,1972,1399,1977,1399,1982,1399,1987,1399,1992,1997],{},"Cakupan bisa berupa apa pun yang menentukan tempat perubahan commit. Misalnya ",[1810,1963,1964],{},[1813,1965,1966],{},"$location",[1810,1968,1969],{},[1813,1970,1971],{},"$browser",[1810,1973,1974],{},[1813,1975,1976],{},"$compile",[1810,1978,1979],{},[1813,1980,1981],{},"$rootScope",[1810,1983,1984],{},[1813,1985,1986],{},"ngHref",[1810,1988,1989],{},[1813,1990,1991],{},"ngClick",[1810,1993,1994],{},[1813,1995,1996],{},"ngView",", dll...",[253,1999,2001],{"id":2000},"subjek-subject","Subjek (subject)",[249,2003,2004],{},"Subjek berisi deskripsi singkat dari perubahan:",[1002,2006,2007,2010,2013],{},[1005,2008,2009],{},"gunakan kata kerja imperatif, dalam bentuk sekarang: \"ubah\" bukan \"diubah\" atau \"perubahan\"",[1005,2011,2012],{},"tidak ada huruf kapital pada huruf pertama",[1005,2014,2015],{},"tidak ada titik (.) di akhir",[253,2017,1829],{"id":1829},[249,2019,2020],{},"Seperti pada subjek, gunakan kata kerja imperatif, dalam bentuk sekarang: \"ubah\" bukan \"diubah\" atau \"perubahan\". Body harus mencakup alasan perubahan dan kontras dengan perilaku sebelumnya.",[253,2022,1833],{"id":1833},[249,2024,2025],{},"Footer harus berisi informasi tentang Perubahan yang Merusak (BREAKING CHANGE) dan juga tempat untuk merujuk GitHub issues yang ditutup oleh commit ini.",[249,2027,2028,2029,2034],{},"Perubahan yang Merusak harus dimulai dengan kata ",[1810,2030,2031],{},[1813,2032,2033],{},"BREAKING CHANGE",": diikuti dengan satu spasi atau dua baris baru.",[249,2036,2037],{},[2038,2039,2043],"a",{"href":2040,"rel":2041},"https:\u002F\u002Fec.europa.eu\u002Fcomponent-library\u002Fv1.15.0\u002Feu\u002Fdocs\u002Fconventions\u002Fgit\u002F",[2042],"nofollow","Source",[951,2045,2046],{},"html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}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);}",{"title":266,"searchDepth":14,"depth":14,"links":2048},[2049,2050,2051,2052,2053,2054,2055,2056,2057],{"id":1791,"depth":14,"text":1792},{"id":1798,"depth":14,"text":1799},{"id":1819,"depth":14,"text":1820},{"id":1907,"depth":14,"text":1908},{"id":1924,"depth":14,"text":1925},{"id":1957,"depth":14,"text":1958},{"id":2000,"depth":14,"text":2001},{"id":1829,"depth":14,"text":1829},{"id":1833,"depth":14,"text":1833},"july 02, 2023","Aturan format message pada saat git commit yang tepat agar mudah di baca dan mudah diikuti serta dimengerti.","\u002Fimage\u002Farticle\u002Fgit-commit-guidelines.png",{"layout":971},"\u002Farticles\u002Fgit-commit-guidelines","2023-07-02",{"text":2065,"minutes":2066,"time":2067,"words":2068},"2 min read",1.99,119400,398,{"title":1786,"description":2059},"articles\u002F3.git-commit-guidelines",[983,984],"02_BZTwRbpGanmiE69ekIdsDhDYnZ_dHPAbcMo7t5wk",{"id":2074,"title":2075,"author":244,"body":2076,"createdAt":2153,"description":140,"extension":968,"img":2154,"meta":2155,"navigation":972,"path":2156,"publishedAt":2157,"readingTime":2158,"seo":2163,"stem":2164,"tags":2165,"updatedAt":2153,"__hash__":2168},"articles\u002Farticles\u002F4.rens-ui-tailwindcss-component-library-with-modern-ui.md","Rens UI - Tailwind CSS Component Library With Modern UI",{"type":246,"value":2077,"toc":2149},[2078,2082,2085,2088,2091,2094,2123,2127,2130],[253,2079,2081],{"id":2080},"rens-ui-tailwind-css-component-library-with-modern-ui","Rens UI - Tailwind CSS Component Library With Modern UI.",[249,2083,2084],{},"Create with modern design and stunning visuals.",[249,2086,2087],{},"Rens UI is a CSS component library built using Tailwind CSS, providing you with access to a collection of ready-to-use components for developing captivating user interfaces.",[249,2089,2090],{},"From eye-catching buttons to elegant cards, Rens UI offers a range of options to build responsive and appealing interfaces. Enjoy the benefits of using semantic class names, making code organization and understanding a breeze.",[249,2092,2093],{},"Develop your web applications quickly and easily using Rens UI, and witness how the stunning design brings your user experience to life. Unleash creativity and innovation with Rens UI - the perfect solution for modern interface development.",[1002,2095,2096,2102,2109,2116],{},[1005,2097,2098],{},[2038,2099,2101],{"href":157,"rel":2100},[2042],"Official website →",[1005,2103,2104],{},[2038,2105,2108],{"href":2106,"rel":2107},"https:\u002F\u002Frens-ui.okriiza.my.id\u002Fgetting-started\u002Finstallation",[2042],"How to install →",[1005,2110,2111],{},[2038,2112,2115],{"href":2113,"rel":2114},"https:\u002F\u002Frens-ui.okriiza.my.id\u002Fgetting-started\u002Fusage",[2042],"How to used →",[1005,2117,2118],{},[2038,2119,2122],{"href":2120,"rel":2121},"https:\u002F\u002Frens-ui.okriiza.my.id\u002Felements\u002Faccordion\u002F",[2042],"See all components →",[253,2124,2126],{"id":2125},"inspiration-credits","Inspiration & Credits",[249,2128,2129],{},"Thanks to these following projects for providing the additional dependencies & inspirations that helps us create this project.",[1002,2131,2132,2134,2137,2140,2143,2146],{},[1005,2133,237],{},[1005,2135,2136],{},"Nuxt UI",[1005,2138,2139],{},"Ripple UI",[1005,2141,2142],{},"Postcss",[1005,2144,2145],{},"Flowbite",[1005,2147,2148],{},"daisyUI",{"title":266,"searchDepth":14,"depth":14,"links":2150},[2151,2152],{"id":2080,"depth":14,"text":2081},{"id":2125,"depth":14,"text":2126},"August 04, 2023","\u002Fimage\u002Farticle\u002Frens-ui.png",{"layout":971},"\u002Farticles\u002Frens-ui-tailwindcss-component-library-with-modern-ui","2023-08-04",{"text":2159,"minutes":2160,"time":2161,"words":2162},"1 min read",0.71,42600,142,{"title":2075,"description":140},"articles\u002F4.rens-ui-tailwindcss-component-library-with-modern-ui",[2166,2167],"ui","library","uwlP20MWUQJlUE7xcgidY0g9Mt3Olhde4soAKv47nHM",1780235711296]