[{"data":1,"prerenderedAt":1531},["ShallowReactive",2],{"i-mdi:github":3,"i-mdi:linkedin":8,"i-mdi:instagram":10,"project":12,"i-simple-icons:internetcomputer":1517,"i-simple-icons:shopify":1519,"i-solar:check-circle-linear":1521,"i-solar:close-circle-linear":1523,"i-simple-icons:wordpress":1525,"i-simple-icons:polygon":1527,"i-simple-icons:laravel":1529},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"currentColor\" d=\"M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2zm-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.32 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93zM6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"currentColor\" d=\"M7.8 2h8.4C19.4 2 22 4.6 22 7.8v8.4a5.8 5.8 0 0 1-5.8 5.8H7.8C4.6 22 2 19.4 2 16.2V7.8A5.8 5.8 0 0 1 7.8 2m-.2 2A3.6 3.6 0 0 0 4 7.6v8.8C4 18.39 5.61 20 7.6 20h8.8a3.6 3.6 0 0 0 3.6-3.6V7.6C20 5.61 18.39 4 16.4 4zm9.65 1.5a1.25 1.25 0 0 1 1.25 1.25A1.25 1.25 0 0 1 17.25 8A1.25 1.25 0 0 1 16 6.75a1.25 1.25 0 0 1 1.25-1.25M12 7a5 5 0 0 1 5 5a5 5 0 0 1-5 5a5 5 0 0 1-5-5a5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3a3 3 0 0 0 3 3a3 3 0 0 0 3-3a3 3 0 0 0-3-3\"\u002F>",[13,321,508,680,829,1013,1377],{"id":14,"title":15,"active":16,"body":17,"collaborators":301,"color":303,"date":304,"description":305,"extension":306,"github_url":307,"icon":308,"image":309,"meta":310,"month":311,"navigation":16,"path":312,"seo":313,"sitemap":314,"stacks":315,"status":304,"stem":319,"url":304,"__hash__":320},"project\u002Fproject\u002F11.shopify-app-nuxt.md","Shopify App Nuxt",true,{"type":18,"value":19,"toc":286},"minimark",[20,25,29,32,35,38,43,55,64,67,90,93,107,111,114,117,120,134,141,144,148,151,154,157,163,167,170,175,178,182,185,189,192,196,199,203,206,210,217,220,231,234,238,241,257,260,264,267,270,274,277,280,283],[21,22,24],"h2",{"id":23},"bridging-the-gap-in-shopify-app-development","Bridging the Gap in Shopify App Development",[26,27,28],"p",{},"Building a Shopify app is supposed to be straightforward—until you actually start.",[26,30,31],{},"On paper, Shopify provides everything you need: APIs, CLI tooling, and official templates. In practice, however, the experience is fragmented. You often find yourself jumping between documentation, stitching together authentication flows, handling embedded app behavior, and figuring out deployment on your own.",[26,33,34],{},"Even with modern tooling, the process still feels piecemeal.",[26,36,37],{},"And when you try to bring Nuxt into the picture, the gap becomes even more obvious.",[39,40,42],"h3",{"id":41},"the-problem-powerful-tools-fragmented-experience","The Problem: Powerful Tools, Fragmented Experience",[26,44,45,46,54],{},"Shopify’s ecosystem is powerful, but it’s heavily centered around its own stack and conventions. The official approach relies on scaffolding apps via CLI and predefined templates, which work—but are not always flexible or aligned with how modern frontend teams build applications. (",[47,48,53],"a",{"href":49,"rel":50,"title":52},"https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fapps\u002Fgetting-started\u002Fcreate?utm_source=chatgpt.com",[51],"nofollow","Scaffold an app","Shopify",")",[26,56,57,58,54],{},"At the same time, solutions like Nuxt Shopify modules focus on API integration rather than providing a complete application foundation. They help you talk to Shopify—but not necessarily structure a full app. (",[47,59,63],{"href":60,"rel":61,"title":62},"https:\u002F\u002Fshopify.nuxtjs.org\u002Fgetting-started\u002Fintroduction?utm_source=chatgpt.com",[51],"Introduction - Nuxt Shopify","Nuxt Shopify",[26,65,66],{},"This creates a gap:",[68,69,70,78,84],"ul",{},[71,72,73,74],"li",{},"You have tools to ",[75,76,77],"strong",{},"connect to Shopify",[71,79,80,81],{},"But not a clear way to ",[75,82,83],{},"build a full app with good DX",[71,85,86,87],{},"Especially when using ",[75,88,89],{},"Nuxt as the primary framework",[26,91,92],{},"As a result, developers often:",[68,94,95,98,101,104],{},[71,96,97],{},"Rebuild authentication logic repeatedly",[71,99,100],{},"Reconfigure embedded app behavior from scratch",[71,102,103],{},"Recreate API handling patterns across projects",[71,105,106],{},"Spend time solving infrastructure instead of building features",[39,108,110],{"id":109},"why-we-built-this","Why We Built This",[26,112,113],{},"We didn’t set out to create just another boilerplate.",[26,115,116],{},"We built this project because we kept solving the same problems over and over again.",[26,118,119],{},"Every new Shopify app started with the same questions:",[68,121,122,125,128,131],{},[71,123,124],{},"How should authentication be structured?",[71,126,127],{},"Where should Shopify API calls live?",[71,129,130],{},"How do we handle embedded context cleanly?",[71,132,133],{},"How do we deploy this without breaking everything?",[26,135,136,137,140],{},"Instead of answering those questions repeatedly, we decided to create a ",[75,138,139],{},"consistent starting point","—one that reflects how we actually build apps in production.",[26,142,143],{},"This project is our answer to that.",[39,145,147],{"id":146},"building-the-bridge","Building the Bridge",[26,149,150],{},"The Shopify App Nuxt Starter is designed as a bridge between Shopify’s ecosystem and modern Nuxt development.",[26,152,153],{},"It doesn’t try to replace Shopify’s tooling—instead, it builds on top of it, while reshaping the developer experience into something more structured and intuitive.",[26,155,156],{},"The goal is simple:",[158,159,160],"blockquote",{},[26,161,162],{},"Take the complexity of Shopify app setup and turn it into a clean, reusable foundation.",[39,164,166],{"id":165},"what-this-starter-provides","What This Starter Provides",[26,168,169],{},"Rather than being minimal or overly abstract, this starter focuses on the parts that matter most:",[171,172,174],"h4",{"id":173},"_1-a-clear-application-structure","1. A Clear Application Structure",[26,176,177],{},"The project is organized in a way that feels natural for Nuxt developers—so you don’t have to fight the framework or guess where things belong.",[171,179,181],{"id":180},"_2-authentication-flow-already-wired","2. Authentication Flow, Already Wired",[26,183,184],{},"Authentication is one of the trickiest parts of Shopify apps. This starter provides a working foundation that you can understand and extend, instead of rebuilding it from scratch.",[171,186,188],{"id":187},"_3-embedded-app-handling","3. Embedded App Handling",[26,190,191],{},"Running inside Shopify Admin introduces constraints that are easy to get wrong. This project ensures the app behaves correctly within that environment.",[171,193,195],{"id":194},"_4-api-integration-layer","4. API Integration Layer",[26,197,198],{},"Instead of scattering API calls everywhere, the structure encourages a clean separation between UI and Shopify communication.",[171,200,202],{"id":201},"_5-deployment-ready-setup","5. Deployment-Ready Setup",[26,204,205],{},"The project is designed to work seamlessly in modern environments like Vercel, reducing the friction between development and production.",[39,207,209],{"id":208},"developer-experience-first","Developer Experience First",[26,211,212,213,216],{},"The core philosophy behind this project is simple: ",[75,214,215],{},"optimize for developer experience without hiding complexity",".",[26,218,219],{},"We avoid “magic” abstractions that make things harder to debug later. Instead, we aim for:",[68,221,222,225,228],{},[71,223,224],{},"Transparency: You can see how everything works",[71,226,227],{},"Predictability: The structure stays consistent as the app grows",[71,229,230],{},"Flexibility: You can adapt it to your own needs",[26,232,233],{},"This makes the starter useful not just for quick prototypes, but also for real production apps.",[39,235,237],{"id":236},"live-preview-and-repository","Live Preview and Repository",[26,239,240],{},"You can explore the project here:",[68,242,243,250],{},[71,244,245,246],{},"Repository: ",[47,247,248],{"href":248,"rel":249},"https:\u002F\u002Fgithub.com\u002Fkiriminaja\u002Fshopify-app-nuxt",[51],[71,251,252,253],{},"Preview: ",[47,254,255],{"href":255,"rel":256},"https:\u002F\u002Fshopify-app-nuxt.vercel.app",[51],[26,258,259],{},"It’s designed to be easy to clone, run, and adapt—so you can start building immediately.",[39,261,263],{"id":262},"not-just-a-boilerplate","Not Just a Boilerplate",[26,265,266],{},"This project is not meant to be a throwaway starter.",[26,268,269],{},"It’s built from real-world usage, and intended to evolve over time. As Shopify and Nuxt continue to grow, this starter will continue to adapt—serving as a practical foundation for building apps in this ecosystem.",[39,271,273],{"id":272},"rethinking-the-starting-point","Rethinking the Starting Point",[26,275,276],{},"Just like deployment tools need better UX for Product teams, developer tools need better starting points for engineers.",[26,278,279],{},"This project is about redefining that starting point.",[26,281,282],{},"Instead of repeatedly solving the same setup problems, you begin with a foundation that already works—so you can focus on what actually matters: building features, delivering value, and shipping faster.",[26,284,285],{},"That’s the gap we’re trying to bridge.",{"title":287,"searchDepth":288,"depth":288,"links":289},"",2,[290],{"id":23,"depth":288,"text":24,"children":291},[292,294,295,296,297,298,299,300],{"id":41,"depth":293,"text":42},3,{"id":109,"depth":293,"text":110},{"id":146,"depth":293,"text":147},{"id":165,"depth":293,"text":166},{"id":208,"depth":293,"text":209},{"id":236,"depth":293,"text":237},{"id":262,"depth":293,"text":263},{"id":272,"depth":293,"text":273},[302],"yan-ad","rgb(34, 197, 94)",null,"shopify-app-nuxt is a Nuxt 4 module that provides authentication, webhooks, Polaris components, and App Bridge integration for building Shopify apps with Nuxt. Inspired by @shopify\u002Fshopify-app-react-router, it brings the same capabilities to the Nuxt ecosystem.","md","https:\u002F\u002Fgithub.com\u002Fyan-ad\u002Fshopify-app-nuxt","simple-icons:shopify","\u002Fimages\u002Fproject\u002Fshopify.webp",{},"2026-03","\u002Fproject\u002Fshopify-app-nuxt",{"title":15,"description":305},{"loc":312},[316,317,318],"nuxt","shopify","javascript","project\u002F11.shopify-app-nuxt","xwUHzojLtHnM5IK7kEDIm-UqCRUQmtNwfbA55hJJlz4",{"id":322,"title":323,"active":16,"body":324,"collaborators":497,"color":303,"date":304,"description":498,"extension":306,"github_url":400,"icon":308,"image":309,"meta":499,"month":311,"navigation":16,"path":500,"seo":501,"sitemap":502,"stacks":503,"status":304,"stem":506,"url":304,"__hash__":507},"project\u002Fproject\u002F11.shopify-app-tanstack.md","Shopify App TanStack React",{"type":18,"value":325,"toc":488},[326,330,333,337,340,344,388,392,421,424,428,442,446,449,453,485],[21,327,329],{"id":328},"problem-summary","Problem Summary",[26,331,332],{},"Shopify provides APIs, CLI, and templates, but the app development experience is often fragmented. Most official starters are built for Remix or Next.js, and the React ecosystem lacks a truly modern, flexible starter that leverages TanStack's best-in-class libraries. Developers end up re-implementing authentication, embedded context, and API patterns from scratch.",[21,334,336],{"id":335},"solution","Solution",[26,338,339],{},"Shopify App TanStack React offers a ready-to-use foundation for building Shopify Apps with React and the TanStack suite. It's not just a boilerplate, but a real-world, production-tested foundation that is easy to adapt and extend.",[21,341,343],{"id":342},"key-features","Key Features",[68,345,346,352,358,364,370,376,382],{},[71,347,348,351],{},[75,349,350],{},"Modern React + TanStack",": Uses TanStack Router, Query, Table, and more for best-in-class DX and scalability.",[71,353,354,357],{},[75,355,356],{},"Production-ready authentication",": Shopify OAuth flow fully integrated.",[71,359,360,363],{},[75,361,362],{},"Embedded App support",": Works seamlessly inside Shopify Admin with App Bridge.",[71,365,366,369],{},[75,367,368],{},"Polaris UI",": Native Shopify UI components out of the box.",[71,371,372,375],{},[75,373,374],{},"API integration layer",": Clean separation of API logic using TanStack Query.",[71,377,378,381],{},[75,379,380],{},"TypeScript-first",": Fully typed for safety and maintainability.",[71,383,384,387],{},[75,385,386],{},"Deployment-ready",": Works on Vercel, Render, and other modern platforms.",[21,389,391],{"id":390},"quick-start","Quick Start",[393,394,395,403,406,418],"ol",{},[71,396,397,398],{},"Clone the repo: ",[47,399,402],{"href":400,"rel":401},"https:\u002F\u002Fgithub.com\u002Fyan-ad\u002Fshopify-app-tanstack",[51],"github.com\u002Fyan-ad\u002Fshopify-app-tanstack",[71,404,405],{},"Follow the README to set up your Shopify API key & secret.",[71,407,408,409,413,414,417],{},"Run the development server (",[410,411,412],"code",{},"pnpm dev"," or ",[410,415,416],{},"yarn dev",") and start building your app.",[71,419,420],{},"Deploy to Vercel, Render, or your preferred platform.",[26,422,423],{},"Demo: (coming soon)",[21,425,427],{"id":426},"benefits-for-developers","Benefits for Developers",[68,429,430,433,436,439],{},[71,431,432],{},"No need to reinvent authentication, embedded context, or API patterns.",[71,434,435],{},"Modern, scalable codebase with TanStack best practices.",[71,437,438],{},"Focus on business features, not boilerplate.",[71,440,441],{},"Transparent, easy to debug, and production-ready.",[21,443,445],{"id":444},"why-not-just-another-boilerplate","Why Not Just Another Boilerplate?",[26,447,448],{},"This project was born from real-world needs of building Shopify Apps with React and TanStack. Every new project faces the same issues: authentication, API, embedded context, deployment. With this starter, everything is ready—just focus on your main features.",[21,450,452],{"id":451},"useful-links","Useful Links",[68,454,455,461,469,477],{},[71,456,457,458],{},"Repo: ",[47,459,402],{"href":400,"rel":460},[51],[71,462,463,464],{},"Shopify Docs: ",[47,465,468],{"href":466,"rel":467},"https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fapps\u002Fgetting-started\u002Fcreate",[51],"shopify.dev",[71,470,471,472],{},"TanStack: ",[47,473,476],{"href":474,"rel":475},"https:\u002F\u002Ftanstack.com\u002F",[51],"tanstack.com",[71,478,479,480],{},"Polaris: ",[47,481,484],{"href":482,"rel":483},"https:\u002F\u002Fpolaris.shopify.com\u002F",[51],"Shopify Polaris",[26,486,487],{},"Shopify App TanStack React helps developers build modern Shopify Apps with React and TanStack faster, safer, and with a clear structure. No more repeating the same setup—just focus on business value and core features.",{"title":287,"searchDepth":288,"depth":288,"links":489},[490,491,492,493,494,495,496],{"id":328,"depth":288,"text":329},{"id":335,"depth":288,"text":336},{"id":342,"depth":288,"text":343},{"id":390,"depth":288,"text":391},{"id":426,"depth":288,"text":427},{"id":444,"depth":288,"text":445},{"id":451,"depth":288,"text":452},[302],"A modern Shopify App starter built with React and TanStack, featuring authentication, webhooks, Polaris, App Bridge, and a production-ready structure. Inspired by @shopify\u002Fshopify-app-react, but with TanStack best practices and DX.",{},"\u002Fproject\u002Fshopify-app-tanstack",{"title":323,"description":498},{"loc":500},[504,317,505,318],"react","typescript","project\u002F11.shopify-app-tanstack","JetX3d8xA88pet2GXsyg0-SgpdTIsPXyTEiT2evHgDE",{"id":509,"title":510,"active":6,"body":511,"collaborators":662,"color":303,"date":304,"description":665,"extension":306,"github_url":304,"icon":666,"image":667,"meta":668,"month":669,"navigation":16,"path":670,"seo":671,"sitemap":672,"stacks":673,"status":304,"stem":678,"url":304,"__hash__":679},"project\u002Fproject\u002F0.kecamatan-berdaya-jateng.md","Kecamatan Berdaya",{"type":18,"value":512,"toc":651},[513,517,520,524,527,531,534,538,570,574,594,598,601,605,637,641,644,648],[21,514,516],{"id":515},"project-initiation","Project Initiation:",[26,518,519],{},"I started working on the Kecamatan Berdaya Back-Office System with my team as core maintainers for this crucial government initiative in Central Java. Our mission was to develop a robust data management platform that would revolutionize how local administrators handle community data and program implementation.",[21,521,523],{"id":522},"team-collaboration-and-government-partnership","Team Collaboration and Government Partnership:",[26,525,526],{},"Working closely with my development team and government stakeholders, we focused on creating a comprehensive back-office system that would streamline the administrative processes of the Kecamatan Berdaya program, making it easier for local officials to manage community data and track program progress.",[21,528,530],{"id":529},"system-architecture-and-purpose","System Architecture and Purpose:",[26,532,533],{},"We built this system to serve as the central hub for managing all aspects of the Kecamatan Berdaya government program in Central Java. The platform enables local administrators to efficiently handle citizen data, track program implementations, and generate comprehensive reports for better governance.",[21,535,537],{"id":536},"technology-stack","Technology Stack:",[68,539,540,546,552,558,564],{},[71,541,542,545],{},[75,543,544],{},"Nuxt.js:"," Vue-based framework for building the modern, responsive front-end interface",[71,547,548,551],{},[75,549,550],{},"Laravel:"," PHP framework powering the robust and scalable back-office API system",[71,553,554,557],{},[75,555,556],{},"MySQL:"," Database management for storing critical government and citizen data",[71,559,560,563],{},[75,561,562],{},"Vue.js:"," Progressive JavaScript framework for interactive user interfaces",[71,565,566,569],{},[75,567,568],{},"Tailwind CSS:"," Utility-first CSS framework for rapid UI development",[21,571,573],{"id":572},"key-features-implemented","Key Features Implemented:",[68,575,576,579,582,585,588,591],{},[71,577,578],{},"Comprehensive citizen data management and registration system",[71,580,581],{},"Program tracking and implementation monitoring tools",[71,583,584],{},"Administrative dashboard with real-time analytics and reporting",[71,586,587],{},"Multi-level user access control for different government roles",[71,589,590],{},"Document management system for official paperwork and records",[71,592,593],{},"Integration with existing government databases and systems",[21,595,597],{"id":596},"government-impact-and-achievements","Government Impact and Achievements:",[26,599,600],{},"As core maintainers, we successfully deployed a system that now serves multiple districts within Central Java, helping local administrators manage thousands of citizen records and track the progress of various government programs under the Kecamatan Berdaya initiative.",[21,602,604],{"id":603},"technical-highlights","Technical Highlights:",[68,606,607,613,619,625,631],{},[71,608,609,612],{},[75,610,611],{},"Modern Architecture:"," Nuxt.js frontend with Laravel API backend for optimal performance and maintainability",[71,614,615,618],{},[75,616,617],{},"Security Compliance:"," Implemented robust security measures to protect sensitive citizen information",[71,620,621,624],{},[75,622,623],{},"Responsive Design:"," Vue.js components with Tailwind CSS for intuitive admin panels accessible on any device",[71,626,627,630],{},[75,628,629],{},"API-Driven Development:"," RESTful Laravel APIs enabling flexible data management and integration",[71,632,633,636],{},[75,634,635],{},"Real-time Updates:"," Server-side rendering with Nuxt for fast loading and better user experience",[21,638,640],{"id":639},"core-maintenance-responsibilities","Core Maintenance Responsibilities:",[26,642,643],{},"Our team continues to maintain and enhance the system, ensuring optimal performance, security updates, and feature improvements based on feedback from local administrators and changing government requirements.",[21,645,647],{"id":646},"community-impact","Community Impact:",[26,649,650],{},"This back-office system has significantly improved the efficiency of the Kecamatan Berdaya program, enabling better service delivery to communities across Central Java and supporting the government's commitment to digital transformation in public administration.",{"title":287,"searchDepth":288,"depth":288,"links":652},[653,654,655,656,657,658,659,660,661],{"id":515,"depth":288,"text":516},{"id":522,"depth":288,"text":523},{"id":529,"depth":288,"text":530},{"id":536,"depth":288,"text":537},{"id":572,"depth":288,"text":573},{"id":596,"depth":288,"text":597},{"id":603,"depth":288,"text":604},{"id":639,"depth":288,"text":640},{"id":646,"depth":288,"text":647},[663,664],"anggi-susanto","gunamaya","A comprehensive government data management system for Kecamatan Berdaya program in Central Java, built to streamline administrative processes and empower local communities.","simple-icons:internetcomputer","\u002Fimages\u002Fproject\u002Fkberdaya-jateng.webp",{},"2025-04","\u002Fproject\u002Fkecamatan-berdaya-jateng",{"title":510,"description":665},{"loc":670},[316,674,675,676,677],"laravel","mysql","vuejs","tailwindcss","project\u002F0.kecamatan-berdaya-jateng","sKN3gFjO5kgMPCiT_BjMw72eegE1phIOSpLoZTfUNkU",{"id":681,"title":682,"active":16,"body":683,"collaborators":811,"color":816,"date":304,"description":817,"extension":306,"github_url":304,"icon":308,"image":309,"meta":818,"month":819,"navigation":16,"path":820,"seo":821,"sitemap":822,"stacks":823,"status":304,"stem":826,"url":827,"__hash__":828},"project\u002Fproject\u002F0.shopify.md","Shopify App KiriminAja",{"type":18,"value":684,"toc":801},[685,689,692,696,699,703,706,708,740,742,759,763,766,768,794,798],[21,686,688],{"id":687},"project-initiation-sep-2024","Project Initiation (Sep 2024):",[26,690,691],{},"I started the KiriminAja Shopify App project in Sep 2024 with my team. Our goal was to create a seamless logistics integration for Shopify merchants, enabling them to manage shipments directly from their store admin.",[21,693,695],{"id":694},"team-collaboration-and-development","Team Collaboration and Development:",[26,697,698],{},"Working closely with my development team, we focused on building a robust Shopify app that would streamline the shipping process for Indonesian e-commerce merchants using modern web technologies.",[21,700,702],{"id":701},"shopify-app-architecture","Shopify App Architecture:",[26,704,705],{},"We built the application using Remix.js as our full-stack React framework, leveraging its server-side rendering capabilities and nested routing for optimal performance within the Shopify admin environment.",[21,707,537],{"id":536},[68,709,710,716,722,728,734],{},[71,711,712,715],{},[75,713,714],{},"Remix.js:"," Full-stack React framework for building the Shopify app with server-side rendering",[71,717,718,721],{},[75,719,720],{},"Shopify Polaris:"," Design system for consistent UI\u002FUX within Shopify admin",[71,723,724,727],{},[75,725,726],{},"REST APIs:"," Integration with KiriminAja logistics services and Shopify APIs",[71,729,730,733],{},[75,731,732],{},"Google Pub\u002FSub:"," Real-time messaging for shipment status updates and notifications",[71,735,736,739],{},[75,737,738],{},"Node.js:"," Backend runtime for handling webhooks and API integrations",[21,741,573],{"id":572},[68,743,744,747,750,753,756],{},[71,745,746],{},"Seamless integration with Shopify's order management system",[71,748,749],{},"Real-time shipment tracking using Google Pub\u002FSub messaging",[71,751,752],{},"Polaris-based UI components for native Shopify admin experience",[71,754,755],{},"RESTful API communication with multiple logistics partners",[71,757,758],{},"Automated order fulfillment and tracking updates",[21,760,762],{"id":761},"integration-achievements","Integration Achievements:",[26,764,765],{},"We successfully integrated with over 15 logistics partners through REST APIs, while maintaining real-time communication using Google Pub\u002FSub for instant status updates. The Polaris design system ensured our app felt native within the Shopify ecosystem.",[21,767,604],{"id":603},[68,769,770,776,782,788],{},[71,771,772,775],{},[75,773,774],{},"Remix SSR:"," Optimized loading times and SEO for the app pages",[71,777,778,781],{},[75,779,780],{},"Polaris Components:"," Consistent design language matching Shopify's admin interface",[71,783,784,787],{},[75,785,786],{},"Pub\u002FSub Messaging:"," Real-time updates for order status and delivery notifications",[71,789,790,793],{},[75,791,792],{},"REST API Design:"," Clean, scalable endpoints for partner integrations",[21,795,797],{"id":796},"ongoing-development","Ongoing Development:",[26,799,800],{},"Our team continues to enhance the app with new features, improved performance, and expanded logistics partner integrations, always maintaining the high standards of Shopify's app ecosystem.",{"title":287,"searchDepth":288,"depth":288,"links":802},[803,804,805,806,807,808,809,810],{"id":687,"depth":288,"text":688},{"id":694,"depth":288,"text":695},{"id":701,"depth":288,"text":702},{"id":536,"depth":288,"text":537},{"id":572,"depth":288,"text":573},{"id":761,"depth":288,"text":762},{"id":603,"depth":288,"text":604},{"id":796,"depth":288,"text":797},[812,813,814,815],"daewu14","GontangRagilPrakasa","yudayahya","kiriminaja","rgb(125, 62, 185)","A comprehensive Shopify app built with Remix and Polaris, integrating logistics services through REST APIs and real-time updates via Google Pub\u002FSub.",{},"2024-09","\u002Fproject\u002Fshopify",{"title":682,"description":817},{"loc":820},[504,824,677,825,317],"remix-js","nodejs","project\u002F0.shopify","https:\u002F\u002Fapps.shopify.com\u002Fkiriminaja","2VrKM8DGkEGV7fUtmHBIt30yXl2zcloZjMw_pXMaiTY",{"id":830,"title":831,"active":16,"body":832,"collaborators":998,"color":816,"date":304,"description":999,"extension":306,"github_url":1000,"icon":1001,"image":1002,"meta":1003,"month":1004,"navigation":16,"path":1005,"seo":1006,"sitemap":1007,"stacks":1008,"status":304,"stem":1011,"url":304,"__hash__":1012},"project\u002Fproject\u002F0.woocommerce.md","WooCommerce Plugin",{"type":18,"value":833,"toc":986},[834,838,841,845,848,852,855,857,893,897,916,918,921,925,932,935,939,942,945,947,979,983],[21,835,837],{"id":836},"project-initiation-sep-2022","Project Initiation (Sep 2022):",[26,839,840],{},"I joined as one of the maintainers of the WooCommerce plugin in September 2022. Our goal was to enhance and maintain a seamless logistics integration for WooCommerce merchants, enabling them to manage shipments directly from their WordPress admin.",[21,842,844],{"id":843},"maintainer-role-and-responsibilities","Maintainer Role and Responsibilities:",[26,846,847],{},"As a key maintainer, I work closely with the development team to ensure the plugin's stability, performance, and compatibility with the latest WooCommerce and WordPress versions while continuously improving the user experience for Indonesian e-commerce merchants.",[21,849,851],{"id":850},"woocommerce-plugin-architecture","WooCommerce Plugin Architecture:",[26,853,854],{},"We maintain the plugin using modern PHP development practices, following WordPress coding standards and WooCommerce's extension guidelines. The plugin integrates deeply with WooCommerce's order management and shipping systems.",[21,856,537],{"id":536},[68,858,859,865,871,877,883,888],{},[71,860,861,864],{},[75,862,863],{},"PHP:"," Core language for WordPress\u002FWooCommerce plugin development",[71,866,867,870],{},[75,868,869],{},"WordPress:"," Content management system and plugin framework",[71,872,873,876],{},[75,874,875],{},"WooCommerce:"," E-commerce platform and API integration",[71,878,879,882],{},[75,880,881],{},"JavaScript\u002FjQuery:"," Frontend interactions and AJAX functionality",[71,884,885,887],{},[75,886,556],{}," Database management for plugin data and configurations",[71,889,890,892],{},[75,891,726],{}," Integration with KiriminAja logistics services",[21,894,896],{"id":895},"key-features-maintained","Key Features Maintained:",[68,898,899,902,905,908,910,913],{},[71,900,901],{},"Seamless integration with WooCommerce's order management system",[71,903,904],{},"Real-time shipment tracking and status updates",[71,906,907],{},"Native WordPress admin interface following WP design guidelines",[71,909,755],{},[71,911,912],{},"Automated order fulfillment and tracking synchronization",[71,914,915],{},"Multi-currency and multi-language support",[21,917,762],{"id":761},[26,919,920],{},"As maintainers, we've successfully kept integrations with over 15 logistics partners stable and performant, ensuring reliable communication through REST APIs and maintaining compatibility across different WooCommerce versions.",[21,922,924],{"id":923},"wordpressorg-milestone","WordPress.org Milestone:",[26,926,927,928,931],{},"Since April 1, 2026, the plugin has been officially listed on WordPress.org under the ",[410,929,930],{},"kiriminaja-official"," slug. That milestone matters because it pushed the project beyond being just a private integration for merchants and into a public distribution channel with stricter expectations around packaging, reviewability, compatibility, and ongoing maintenance.",[26,933,934],{},"For us as maintainers, this also meant treating the plugin with a higher operational standard: cleaner release flow, better readiness for WordPress ecosystem requirements, and more confidence for merchants installing KiriminAja directly from the official plugin directory.",[21,936,938],{"id":937},"open-source-transition","Open Source Transition:",[26,940,941],{},"Starting on April 4, 2026, the project also became fully open source in its main GitHub repository, not only through the separate WordPress SVN distribution flow. That shift made the development process much more transparent for contributors, users, and the team itself.",[26,943,944],{},"Instead of treating the WordPress.org release as the only public-facing artifact, we now have the main GitHub repository as the real open collaboration space for source code, issue tracking, review flow, and long-term maintenance history. For a plugin like this, that is a meaningful step up in trust and developer friendliness.",[21,946,604],{"id":603},[68,948,949,955,961,967,973],{},[71,950,951,954],{},[75,952,953],{},"WordPress Hooks:"," Proper use of actions and filters for extensibility",[71,956,957,960],{},[75,958,959],{},"WooCommerce APIs:"," Deep integration with shipping and order management",[71,962,963,966],{},[75,964,965],{},"Database Optimization:"," Efficient queries and caching mechanisms",[71,968,969,972],{},[75,970,971],{},"Security Best Practices:"," Sanitization, validation, and nonce verification",[71,974,975,978],{},[75,976,977],{},"Backward Compatibility:"," Support for multiple WooCommerce versions",[21,980,982],{"id":981},"ongoing-maintenance","Ongoing Maintenance:",[26,984,985],{},"Our team continues to maintain and improve the plugin with bug fixes, security updates, performance optimizations, and new logistics partner integrations, ensuring it meets WordPress and WooCommerce marketplace standards.",{"title":287,"searchDepth":288,"depth":288,"links":987},[988,989,990,991,992,993,994,995,996,997],{"id":836,"depth":288,"text":837},{"id":843,"depth":288,"text":844},{"id":850,"depth":288,"text":851},{"id":536,"depth":288,"text":537},{"id":895,"depth":288,"text":896},{"id":761,"depth":288,"text":762},{"id":923,"depth":288,"text":924},{"id":937,"depth":288,"text":938},{"id":603,"depth":288,"text":604},{"id":981,"depth":288,"text":982},[812,813,814,815],"A comprehensive WooCommerce plugin integrating logistics services for Indonesian e-commerce stores, built with PHP and modern WordPress development practices.","https:\u002F\u002Fgithub.com\u002Fkiriminaja\u002Fwordpress","simple-icons:wordpress","\u002Fimages\u002Fproject\u002Fwoo.webp",{},"2022-09","\u002Fproject\u002Fwoocommerce",{"title":831,"description":999},{"loc":1005},[1009,1010,318,675],"php","wordpress","project\u002F0.woocommerce","ySwWTll4W7pxlppWSYbYE3vaPOxX4ghOR3nYhsJQiJg",{"id":1014,"title":1015,"active":16,"body":1016,"collaborators":1355,"color":816,"date":304,"description":1362,"extension":306,"github_url":304,"icon":1363,"image":1364,"meta":1365,"month":1366,"navigation":16,"path":1367,"seo":1368,"sitemap":1369,"stacks":1370,"status":304,"stem":1374,"url":1375,"__hash__":1376},"project\u002Fproject\u002F1.kiriminaja.md","KiriminAja",{"type":18,"value":1017,"toc":1325},[1018,1021,1024,1028,1031,1035,1038,1042,1045,1049,1052,1054,1074,1078,1089,1093,1096,1099,1103,1106,1110,1113,1117,1146,1149,1163,1165,1169,1172,1176,1183,1185,1199,1203,1206,1208,1212,1215,1218,1221,1224,1247,1251,1262,1264,1268,1271,1275,1278,1282,1302,1306,1320,1322],[1019,1020,1015],"h1",{"id":815},[26,1022,1023],{},"A collection of the main projects in the KiriminAja ecosystem, from the Core Engine, Dashboard Member, Rollout Manager, Sandbox App, to the Homepage. Here are the details of each part:",[21,1025,1027],{"id":1026},"_1-kiriminaja-core-engine","1. KiriminAja Core Engine",[26,1029,1030],{},"KiriminAja is a logistics platform that connects shippers with carriers, providing an easy way to manage shipments and deliveries.",[39,1032,1034],{"id":1033},"project-initiation-november-2020","Project Initiation (November 2020):",[26,1036,1037],{},"I started the KiriminAja Core Engine project in November 2020 as the first team member. The goal was to build an efficient logistics platform to connect shippers and carriers in Indonesia.",[39,1039,1041],{"id":1040},"team-formation-and-growth","Team Formation and Growth:",[26,1043,1044],{},"As the project grew, I formed a team focused on building, developing, and maintaining the platform to ensure reliability and scalability.",[39,1046,1048],{"id":1047},"microservices-architecture","Microservices Architecture:",[26,1050,1051],{},"We adopted a microservices architecture, breaking down logistics and payment processes into independent services. Each microservice handles a specific domain such as shipment management, partner integration, payment, or notifications.",[39,1053,537],{"id":536},[68,1055,1056,1062,1068],{},[71,1057,1058,1061],{},[75,1059,1060],{},"Go"," for high-performance backend",[71,1063,1064,1067],{},[75,1065,1066],{},"Laravel"," for rapid API development",[71,1069,1070,1073],{},[75,1071,1072],{},"Google Cloud"," for scalable infrastructure",[39,1075,1077],{"id":1076},"benefits","Benefits:",[68,1079,1080,1083,1086],{},[71,1081,1082],{},"Independent deployment and scaling",[71,1084,1085],{},"Fast integration with logistics and payment partners",[71,1087,1088],{},"High throughput and resilience to failures",[39,1090,1092],{"id":1091},"integrations","Integrations:",[26,1094,1095],{},"More than 15 logistics partners and 5+ payment providers have been integrated.",[1097,1098],"hr",{},[21,1100,1102],{"id":1101},"_2-kiriminaja-dashboard-member","2. KiriminAja Dashboard Member",[26,1104,1105],{},"The main dashboard application for KiriminAja members, providing a comprehensive view of their logistics operations.",[39,1107,1109],{"id":1108},"migration-from-monolith-to-semi-microservices","Migration from Monolith to Semi-Microservices",[26,1111,1112],{},"Initially a monolith, then split into a semi-microservice architecture for better scalability and maintainability. Key services such as authentication, order management, and analytics were separated into independent services.",[39,1114,1116],{"id":1115},"stack","Stack:",[68,1118,1119,1125,1130,1135,1141],{},[71,1120,1121,1124],{},[75,1122,1123],{},"Nuxt.js"," (frontend SSR\u002FSSG)",[71,1126,1127],{},[75,1128,1129],{},"TypeScript",[71,1131,1132],{},[75,1133,1134],{},"Tailwind CSS",[71,1136,1137,1140],{},[75,1138,1139],{},"Pinia"," (state management)",[71,1142,1143,1145],{},[75,1144,1060],{}," (backend)",[39,1147,1077],{"id":1148},"benefits-1",[68,1150,1151,1154,1157,1160],{},[71,1152,1153],{},"Improved scalability",[71,1155,1156],{},"Faster development cycles",[71,1158,1159],{},"Increased reliability",[71,1161,1162],{},"Easier maintenance",[1097,1164],{},[21,1166,1168],{"id":1167},"_3-kiriminaja-rollout-manager","3. KiriminAja Rollout Manager",[26,1170,1171],{},"An internal platform to manage feature and update rollouts for KiriminAja, built on top of Argo Rollouts with OAuth and ACL.",[39,1173,1175],{"id":1174},"problem","Problem",[26,1177,1178,1179,1182],{},"Argo Rollouts does not have user\u002Frole identity. Anyone with ",[410,1180,1181],{},"kubectl"," access can perform critical actions.",[39,1184,336],{"id":335},[68,1186,1187,1190,1193,1196],{},[71,1188,1189],{},"OAuth SSO integration",[71,1191,1192],{},"Role-based ACL (Developer, QA, Product Owner, Platform)",[71,1194,1195],{},"UI with contextual actions & audit log",[71,1197,1198],{},"Slack notifications",[39,1200,1202],{"id":1201},"outcome","Outcome",[26,1204,1205],{},"Reduced deployment incidents caused by unauthorized rollout actions. Product Owners can promote themselves, and the Platform team still has full visibility.",[1097,1207],{},[21,1209,1211],{"id":1210},"_4-kiriminaja-sandbox-app","4. KiriminAja Sandbox App",[26,1213,1214],{},"A unified platform for developer sandboxing and documentation, enabling logistics API testing and documentation access in one place.",[39,1216,1175],{"id":1217},"problem-1",[26,1219,1220],{},"Previously, sandbox and documentation were separate, slowing down onboarding and development.",[39,1222,336],{"id":1223},"solution-1",[68,1225,1226,1231,1242],{},[71,1227,1228,1229],{},"Backend: ",[75,1230,1060],{},[71,1232,1233,1234,1237,1238,1237,1240],{},"Frontend: ",[75,1235,1236],{},"Nuxt"," + ",[75,1239,1129],{},[75,1241,1134],{},[71,1243,1244,1245],{},"State: ",[75,1246,1139],{},[39,1248,1250],{"id":1249},"benefits-2","Benefits",[68,1252,1253,1256,1259],{},[71,1254,1255],{},"Increased developer productivity",[71,1257,1258],{},"Easier onboarding",[71,1260,1261],{},"Faster experimentation and troubleshooting",[1097,1263],{},[21,1265,1267],{"id":1266},"_5-kiriminaja-homepage","5. KiriminAja Homepage",[26,1269,1270],{},"The main homepage for KiriminAja, separated from the Laravel monolith to Nuxt for easier development and maintenance.",[39,1272,1274],{"id":1273},"why-separate-it","Why separate it?",[26,1276,1277],{},"So the landing page can move faster without being tied to other product logic in the monolith.",[39,1279,1281],{"id":1280},"stack-1","Stack",[68,1283,1284,1289,1293,1297],{},[71,1285,1286,1288],{},[75,1287,1236],{}," (frontend)",[71,1290,1291],{},[75,1292,1129],{},[71,1294,1295],{},[75,1296,1134],{},[71,1298,1299,1301],{},[75,1300,1066],{}," (previous home before migration)",[39,1303,1305],{"id":1304},"migration-results","Migration Results",[68,1307,1308,1311,1314,1317],{},[71,1309,1310],{},"SEO improved 3x",[71,1312,1313],{},"PageSpeed from 60 to 80-99",[71,1315,1316],{},"Build size 2x smaller",[71,1318,1319],{},"Much better developer experience",[1097,1321],{},[26,1323,1324],{},"KiriminAja continues to grow with modern architecture and technology to support logistics needs in Indonesia.",{"title":287,"searchDepth":288,"depth":288,"links":1326},[1327,1335,1340,1345,1350],{"id":1026,"depth":288,"text":1027,"children":1328},[1329,1330,1331,1332,1333,1334],{"id":1033,"depth":293,"text":1034},{"id":1040,"depth":293,"text":1041},{"id":1047,"depth":293,"text":1048},{"id":536,"depth":293,"text":537},{"id":1076,"depth":293,"text":1077},{"id":1091,"depth":293,"text":1092},{"id":1101,"depth":288,"text":1102,"children":1336},[1337,1338,1339],{"id":1108,"depth":293,"text":1109},{"id":1115,"depth":293,"text":1116},{"id":1148,"depth":293,"text":1077},{"id":1167,"depth":288,"text":1168,"children":1341},[1342,1343,1344],{"id":1174,"depth":293,"text":1175},{"id":335,"depth":293,"text":336},{"id":1201,"depth":293,"text":1202},{"id":1210,"depth":288,"text":1211,"children":1346},[1347,1348,1349],{"id":1217,"depth":293,"text":1175},{"id":1223,"depth":293,"text":336},{"id":1249,"depth":293,"text":1250},{"id":1266,"depth":288,"text":1267,"children":1351},[1352,1353,1354],{"id":1273,"depth":293,"text":1274},{"id":1280,"depth":293,"text":1281},{"id":1304,"depth":293,"text":1305},[812,1356,814,1357,663,1358,1359,1360,1361],"sofyan48","muhadif","devararishivian","FaizRA","almibiakmal","mrayhan19","A collection of KiriminAja's main projects, from the Core Engine, Dashboard Member, Rollout Manager, Sandbox App, to the Homepage. Showcasing the evolution of technology and architecture in the KiriminAja ecosystem.","simple-icons:polygon","\u002Fimages\u002Fproject\u002Fka-dashboard.webp",{"slug":815},"2020-11","\u002Fproject\u002Fkiriminaja",{"title":1015,"description":1362},{"loc":1367},[1371,316,505,677,674,1372,1373],"go","kubernetes","bootstrap","project\u002F1.kiriminaja","https:\u002F\u002Fkiriminaja.com","LbtcRGVfnbkN5bv44Yo77JBOHnZwv22N0Nu5t0QJW4A",{"id":1378,"title":1379,"active":6,"body":1380,"collaborators":1502,"color":1504,"date":304,"description":1505,"extension":306,"github_url":304,"icon":1506,"image":1507,"meta":1508,"month":1509,"navigation":16,"path":1510,"seo":1511,"sitemap":1512,"stacks":1513,"status":304,"stem":1514,"url":1515,"__hash__":1516},"project\u002Fproject\u002F10.clandys.md","Clandys Grosir",{"type":18,"value":1381,"toc":1495},[1382,1386,1389,1393,1425,1429,1461,1464,1488,1492],[21,1383,1385],{"id":1384},"project-overview","Project Overview",[26,1387,1388],{},"Clandys Back-Office is my first major project, focused on transforming and modernizing an existing business management system. The primary goal was to migrate from the legacy \"Voyager Laravel\" admin panel to a more maintainable and scalable application built on the latest version of Laravel.",[21,1390,1392],{"id":1391},"pain-points-addressed","Pain Points Addressed",[68,1394,1395,1401,1407,1413,1419],{},[71,1396,1397,1400],{},[75,1398,1399],{},"Legacy Codebase:"," The original system was built on outdated Laravel and Voyager versions, making updates and maintenance difficult.",[71,1402,1403,1406],{},[75,1404,1405],{},"Limited Customization:"," Voyager's structure restricted flexibility for custom features and integrations.",[71,1408,1409,1412],{},[75,1410,1411],{},"Security Concerns:"," Older dependencies posed security risks and lacked support for modern authentication and authorization.",[71,1414,1415,1418],{},[75,1416,1417],{},"Performance Issues:"," The legacy stack suffered from slow response times and inefficient database queries.",[71,1420,1421,1424],{},[75,1422,1423],{},"Developer Experience:"," The codebase was hard to understand and extend, slowing down development.",[21,1426,1428],{"id":1427},"solutions-implemented","Solutions Implemented",[68,1430,1431,1437,1443,1449,1455],{},[71,1432,1433,1436],{},[75,1434,1435],{},"Full Migration to Latest Laravel:"," Rebuilt the application using the latest Laravel version, ensuring long-term support and access to new features.",[71,1438,1439,1442],{},[75,1440,1441],{},"Custom Admin Panel:"," Developed a tailored admin interface, removing Voyager's limitations and enabling full control over business logic.",[71,1444,1445,1448],{},[75,1446,1447],{},"Modern Authentication:"," Integrated Laravel's built-in authentication and authorization for improved security.",[71,1450,1451,1454],{},[75,1452,1453],{},"Optimized Database:"," Refactored queries and structures for better performance and scalability.",[71,1456,1457,1460],{},[75,1458,1459],{},"Clean Code Practices:"," Adopted modern coding standards and best practices for easier maintenance and onboarding.",[21,1462,1463],{"id":536},"Technology Stack",[68,1465,1466,1471,1477,1483],{},[71,1467,1468,1470],{},[75,1469,550],{}," The core PHP framework powering the backend, chosen for its robustness, security, and active community.",[71,1472,1473,1476],{},[75,1474,1475],{},"JavaScript:"," Used for dynamic frontend interactions and enhancing user experience.",[71,1478,1479,1482],{},[75,1480,1481],{},"Bootstrap:"," Provides responsive and consistent UI components, speeding up frontend development.",[71,1484,1485,1487],{},[75,1486,556],{}," Reliable and scalable relational database for storing business data.",[21,1489,1491],{"id":1490},"conclusion","Conclusion",[26,1493,1494],{},"Migrating Clandys Back-Office from Voyager Laravel to a modern Laravel stack has resulted in a more maintainable, secure, and efficient system. This project not only improved business operations but also provided valuable experience in handling real-world software migrations and adopting best practices.",{"title":287,"searchDepth":288,"depth":288,"links":1496},[1497,1498,1499,1500,1501],{"id":1384,"depth":288,"text":1385},{"id":1391,"depth":288,"text":1392},{"id":1427,"depth":288,"text":1428},{"id":536,"depth":288,"text":1463},{"id":1490,"depth":288,"text":1491},[812,1503],"ilhamhp-kaj","#ffffff","Clandys is a back-office management system designed to streamline operations and improve efficiency in business processes.","simple-icons:laravel","\u002Fimages\u002Fproject\u002Fclandys.webp",{},"2020-09","\u002Fproject\u002Fclandys",{"title":1379,"description":1505},{"loc":1510},[674,318,1373,675],"project\u002F10.clandys","https:\u002F\u002Fclandystore.com","OPRLAD6P2hAP7VqLzo8ZzwWdL4cxyg7PGxLqQeiFp7E",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1518},"\u003Cpath fill=\"currentColor\" d=\"M18.264 6.24c-2.52 0-5.376 3.024-6.264 3.984c-.72-.792-3.696-3.984-6.264-3.984C2.568 6.24 0 8.832 0 12s2.568 5.76 5.736 5.76c2.52 0 5.376-3.024 6.264-3.984c.72.792 3.696 3.984 6.264 3.984C21.432 17.76 24 15.168 24 12s-2.568-5.76-5.736-5.76M5.736 15.384A3.38 3.38 0 0 1 2.352 12a3.395 3.395 0 0 1 3.384-3.384c1.176 0 3.24 1.8 4.68 3.384c-.408.456-3.144 3.384-4.68 3.384m12.528 0c-1.176 0-3.24-1.8-4.68-3.384c.408-.456 3.168-3.384 4.68-3.384A3.38 3.38 0 0 1 21.648 12c-.024 1.872-1.536 3.384-3.384 3.384\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1520},"\u003Cpath fill=\"currentColor\" d=\"m15.337 23.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136s-1.275-1.274-1.439-1.411a.4.4 0 0 0-.121-.074l-.914 21.104zM11.71 11.305s-.81-.424-1.774-.424c-1.447 0-1.504.906-1.504 1.141c0 1.232 3.24 1.715 3.24 4.629c0 2.295-1.44 3.76-3.406 3.76c-2.354 0-3.54-1.465-3.54-1.465l.646-2.086s1.245 1.066 2.28 1.066a.944.944 0 0 0 .975-.932c0-1.619-2.654-1.694-2.654-4.359c-.034-2.237 1.571-4.416 4.827-4.416c1.257 0 1.875.361 1.875.361l-.945 2.715zM11.17.83c.136 0 .271.038.405.135c-.984.465-2.064 1.639-2.508 3.992a63 63 0 0 1-1.889.578C7.697 3.75 8.951.84 11.17.84zm1.235 2.949v.135c-.754.232-1.583.484-2.394.736c.466-1.777 1.333-2.645 2.085-2.971c.193.501.309 1.176.309 2.1m.539-2.234c.694.074 1.141.867 1.429 1.755c-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871zm2.992 1.289c-.02 0-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209 11.669 0 11.265 0C8.159 0 6.675 3.877 6.21 5.846c-1.194.365-2.063.636-2.16.674c-.675.213-.694.232-.772.87c-.075.462-1.83 14.063-1.83 14.063L15.009 24z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1522},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.5 12.5l2 2l5-5\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1524},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath stroke-linecap=\"round\" d=\"m14.5 9.5l-5 5m0-5l5 5\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1526},"\u003Cpath fill=\"currentColor\" d=\"M21.469 6.825c.84 1.537 1.318 3.3 1.318 5.175c0 3.979-2.156 7.456-5.363 9.325l3.295-9.527c.615-1.54.82-2.771.82-3.864c0-.405-.026-.78-.07-1.11m-7.981.105c.647-.03 1.232-.105 1.232-.105c.582-.075.514-.93-.067-.899c0 0-1.755.135-2.88.135c-1.064 0-2.85-.15-2.85-.15c-.585-.03-.661.855-.075.885c0 0 .54.061 1.125.09l1.68 4.605l-2.37 7.08L5.354 6.9c.649-.03 1.234-.1 1.234-.1c.585-.075.516-.93-.065-.896c0 0-1.746.138-2.874.138c-.2 0-.438-.008-.69-.015C4.911 3.15 8.235 1.215 12 1.215c2.809 0 5.365 1.072 7.286 2.833c-.046-.003-.091-.009-.141-.009c-1.06 0-1.812.923-1.812 1.914c0 .89.513 1.643 1.06 2.531c.411.72.89 1.643.89 2.977c0 .915-.354 1.994-.821 3.479l-1.075 3.585l-3.9-11.61zM12 22.784c-1.059 0-2.081-.153-3.048-.437l3.237-9.406l3.315 9.087q.036.078.078.149c-1.12.393-2.325.609-3.582.609M1.211 12c0-1.564.336-3.05.935-4.39L7.29 21.709A10.79 10.79 0 0 1 1.211 12M12 0C5.385 0 0 5.385 0 12s5.385 12 12 12s12-5.385 12-12S18.615 0 12 0\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1528},"\u003Cpath fill=\"currentColor\" d=\"m17.82 16.342l5.692-3.287A.98.98 0 0 0 24 12.21V5.635a.98.98 0 0 0-.488-.846l-5.693-3.286a.98.98 0 0 0-.977 0L11.15 4.789a.98.98 0 0 0-.489.846v11.747L6.67 19.686l-3.992-2.304v-4.61l3.992-2.304l2.633 1.52V8.896L7.158 7.658a.98.98 0 0 0-.977 0L.488 10.945a.98.98 0 0 0-.488.846v6.573a.98.98 0 0 0 .488.847l5.693 3.286a.98.98 0 0 0 .977 0l5.692-3.286a.98.98 0 0 0 .489-.846V6.618l.072-.041l3.92-2.263l3.99 2.305v4.609l-3.99 2.304l-2.63-1.517v3.092l2.14 1.236a.98.98 0 0 0 .978 0z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1530},"\u003Cpath fill=\"currentColor\" d=\"M23.642 5.43a.4.4 0 0 1 .014.1v5.149c0 .135-.073.26-.189.326l-4.323 2.49v4.934a.38.38 0 0 1-.188.326L9.93 23.949a.3.3 0 0 1-.066.027l-.024.01a.35.35 0 0 1-.192 0q-.016-.005-.03-.012q-.031-.01-.062-.025L.533 18.755a.38.38 0 0 1-.189-.326V2.974q0-.05.014-.098c.003-.012.01-.02.014-.032a.4.4 0 0 1 .023-.058c.004-.013.015-.022.023-.033l.033-.045l.037-.027q.02-.018.041-.034H.53L5.043.05a.38.38 0 0 1 .375 0L9.93 2.647h.002q.021.015.04.033l.038.027c.013.014.02.03.033.045c.008.011.02.021.025.033q.014.029.024.058c.003.011.01.021.013.032q.014.047.014.098v9.652l3.76-2.164V5.527q0-.05.013-.098q.007-.014.013-.032l.024-.059c.007-.012.018-.02.025-.033l.033-.043q.019-.017.037-.028q.02-.017.041-.032h.001l4.513-2.598a.38.38 0 0 1 .375 0l4.513 2.598c.016.01.027.021.042.031l.036.028l.034.044c.008.012.019.021.024.033a.3.3 0 0 1 .024.06q.01.015.015.032m-.74 5.032V6.179l-1.578.908l-2.182 1.256v4.283zm-4.51 7.75v-4.287l-2.147 1.225l-6.126 3.498v4.325zM1.093 3.624v14.588l8.273 4.761v-4.325l-4.322-2.445l-.002-.003H5.04L5 16.169l-.035-.027l-.001-.002q-.018-.018-.031-.04q-.016-.016-.028-.036h-.002l-.02-.047c-.006-.016-.014-.027-.018-.043l-.008-.057q-.005-.02-.006-.041V5.789l-2.18-1.257zM5.23.81L1.47 2.974l3.76 2.164l3.758-2.164zm1.956 13.505l2.182-1.256V3.624l-1.58.91l-2.182 1.255v9.435zm11.581-10.95l-3.76 2.163l3.76 2.163l3.759-2.164zm-.376 4.978L16.21 7.087l-1.58-.907v4.283l2.182 1.256l1.58.908zm-8.65 9.654l5.514-3.148l2.756-1.572l-3.757-2.163l-4.323 2.489l-3.941 2.27z\"\u002F>",1779378197369]