[{"data":1,"prerenderedAt":1399},["ShallowReactive",2],{"home-projects":3,"home-posts":821,"i-simple-icons:internetcomputer":1361,"i-simple-icons:shopify":1365,"i-lineicons:vuejs":1367,"i-lineicons:react":1369,"i-lineicons:nuxt":1371,"i-lineicons:nextjs":1373,"i-lineicons:tailwindcss":1375,"i-lineicons:laravel":1377,"i-lineicons:go":1379,"i-lineicons:docker":1381,"i-solar:close-circle-linear":1383,"i-solar:check-circle-linear":1385,"i-solar:arrow-right-linear":1387,"i-solar:calendar-linear":1389,"i-solar:round-arrow-right-linear":1391,"i-mdi:github":1393,"i-mdi:linkedin":1395,"i-mdi:instagram":1397},[4,312,499,672],{"id":5,"title":6,"active":7,"body":8,"collaborators":292,"color":294,"date":295,"description":296,"extension":297,"github_url":298,"icon":299,"image":300,"meta":301,"month":302,"navigation":7,"path":303,"seo":304,"sitemap":305,"stacks":306,"status":295,"stem":310,"url":295,"__hash__":311},"project\u002Fproject\u002F11.shopify-app-nuxt.md","Shopify App Nuxt",true,{"type":9,"value":10,"toc":277},"minimark",[11,16,20,23,26,29,34,46,55,58,81,84,98,102,105,108,111,125,132,135,139,142,145,148,154,158,161,166,169,173,176,180,183,187,190,194,197,201,208,211,222,225,229,232,248,251,255,258,261,265,268,271,274],[12,13,15],"h2",{"id":14},"bridging-the-gap-in-shopify-app-development","Bridging the Gap in Shopify App Development",[17,18,19],"p",{},"Building a Shopify app is supposed to be straightforward—until you actually start.",[17,21,22],{},"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.",[17,24,25],{},"Even with modern tooling, the process still feels piecemeal.",[17,27,28],{},"And when you try to bring Nuxt into the picture, the gap becomes even more obvious.",[30,31,33],"h3",{"id":32},"the-problem-powerful-tools-fragmented-experience","The Problem: Powerful Tools, Fragmented Experience",[17,35,36,37,45],{},"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. (",[38,39,44],"a",{"href":40,"rel":41,"title":43},"https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fapps\u002Fgetting-started\u002Fcreate?utm_source=chatgpt.com",[42],"nofollow","Scaffold an app","Shopify",")",[17,47,48,49,45],{},"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. (",[38,50,54],{"href":51,"rel":52,"title":53},"https:\u002F\u002Fshopify.nuxtjs.org\u002Fgetting-started\u002Fintroduction?utm_source=chatgpt.com",[42],"Introduction - Nuxt Shopify","Nuxt Shopify",[17,56,57],{},"This creates a gap:",[59,60,61,69,75],"ul",{},[62,63,64,65],"li",{},"You have tools to ",[66,67,68],"strong",{},"connect to Shopify",[62,70,71,72],{},"But not a clear way to ",[66,73,74],{},"build a full app with good DX",[62,76,77,78],{},"Especially when using ",[66,79,80],{},"Nuxt as the primary framework",[17,82,83],{},"As a result, developers often:",[59,85,86,89,92,95],{},[62,87,88],{},"Rebuild authentication logic repeatedly",[62,90,91],{},"Reconfigure embedded app behavior from scratch",[62,93,94],{},"Recreate API handling patterns across projects",[62,96,97],{},"Spend time solving infrastructure instead of building features",[30,99,101],{"id":100},"why-we-built-this","Why We Built This",[17,103,104],{},"We didn’t set out to create just another boilerplate.",[17,106,107],{},"We built this project because we kept solving the same problems over and over again.",[17,109,110],{},"Every new Shopify app started with the same questions:",[59,112,113,116,119,122],{},[62,114,115],{},"How should authentication be structured?",[62,117,118],{},"Where should Shopify API calls live?",[62,120,121],{},"How do we handle embedded context cleanly?",[62,123,124],{},"How do we deploy this without breaking everything?",[17,126,127,128,131],{},"Instead of answering those questions repeatedly, we decided to create a ",[66,129,130],{},"consistent starting point","—one that reflects how we actually build apps in production.",[17,133,134],{},"This project is our answer to that.",[30,136,138],{"id":137},"building-the-bridge","Building the Bridge",[17,140,141],{},"The Shopify App Nuxt Starter is designed as a bridge between Shopify’s ecosystem and modern Nuxt development.",[17,143,144],{},"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.",[17,146,147],{},"The goal is simple:",[149,150,151],"blockquote",{},[17,152,153],{},"Take the complexity of Shopify app setup and turn it into a clean, reusable foundation.",[30,155,157],{"id":156},"what-this-starter-provides","What This Starter Provides",[17,159,160],{},"Rather than being minimal or overly abstract, this starter focuses on the parts that matter most:",[162,163,165],"h4",{"id":164},"_1-a-clear-application-structure","1. A Clear Application Structure",[17,167,168],{},"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.",[162,170,172],{"id":171},"_2-authentication-flow-already-wired","2. Authentication Flow, Already Wired",[17,174,175],{},"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.",[162,177,179],{"id":178},"_3-embedded-app-handling","3. Embedded App Handling",[17,181,182],{},"Running inside Shopify Admin introduces constraints that are easy to get wrong. This project ensures the app behaves correctly within that environment.",[162,184,186],{"id":185},"_4-api-integration-layer","4. API Integration Layer",[17,188,189],{},"Instead of scattering API calls everywhere, the structure encourages a clean separation between UI and Shopify communication.",[162,191,193],{"id":192},"_5-deployment-ready-setup","5. Deployment-Ready Setup",[17,195,196],{},"The project is designed to work seamlessly in modern environments like Vercel, reducing the friction between development and production.",[30,198,200],{"id":199},"developer-experience-first","Developer Experience First",[17,202,203,204,207],{},"The core philosophy behind this project is simple: ",[66,205,206],{},"optimize for developer experience without hiding complexity",".",[17,209,210],{},"We avoid “magic” abstractions that make things harder to debug later. Instead, we aim for:",[59,212,213,216,219],{},[62,214,215],{},"Transparency: You can see how everything works",[62,217,218],{},"Predictability: The structure stays consistent as the app grows",[62,220,221],{},"Flexibility: You can adapt it to your own needs",[17,223,224],{},"This makes the starter useful not just for quick prototypes, but also for real production apps.",[30,226,228],{"id":227},"live-preview-and-repository","Live Preview and Repository",[17,230,231],{},"You can explore the project here:",[59,233,234,241],{},[62,235,236,237],{},"Repository: ",[38,238,239],{"href":239,"rel":240},"https:\u002F\u002Fgithub.com\u002Fkiriminaja\u002Fshopify-app-nuxt",[42],[62,242,243,244],{},"Preview: ",[38,245,246],{"href":246,"rel":247},"https:\u002F\u002Fshopify-app-nuxt.vercel.app",[42],[17,249,250],{},"It’s designed to be easy to clone, run, and adapt—so you can start building immediately.",[30,252,254],{"id":253},"not-just-a-boilerplate","Not Just a Boilerplate",[17,256,257],{},"This project is not meant to be a throwaway starter.",[17,259,260],{},"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.",[30,262,264],{"id":263},"rethinking-the-starting-point","Rethinking the Starting Point",[17,266,267],{},"Just like deployment tools need better UX for Product teams, developer tools need better starting points for engineers.",[17,269,270],{},"This project is about redefining that starting point.",[17,272,273],{},"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.",[17,275,276],{},"That’s the gap we’re trying to bridge.",{"title":278,"searchDepth":279,"depth":279,"links":280},"",2,[281],{"id":14,"depth":279,"text":15,"children":282},[283,285,286,287,288,289,290,291],{"id":32,"depth":284,"text":33},3,{"id":100,"depth":284,"text":101},{"id":137,"depth":284,"text":138},{"id":156,"depth":284,"text":157},{"id":199,"depth":284,"text":200},{"id":227,"depth":284,"text":228},{"id":253,"depth":284,"text":254},{"id":263,"depth":284,"text":264},[293],"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":6,"description":296},{"loc":303},[307,308,309],"nuxt","shopify","javascript","project\u002F11.shopify-app-nuxt","xwUHzojLtHnM5IK7kEDIm-UqCRUQmtNwfbA55hJJlz4",{"id":313,"title":314,"active":7,"body":315,"collaborators":488,"color":294,"date":295,"description":489,"extension":297,"github_url":391,"icon":299,"image":300,"meta":490,"month":302,"navigation":7,"path":491,"seo":492,"sitemap":493,"stacks":494,"status":295,"stem":497,"url":295,"__hash__":498},"project\u002Fproject\u002F11.shopify-app-tanstack.md","Shopify App TanStack React",{"type":9,"value":316,"toc":479},[317,321,324,328,331,335,379,383,412,415,419,433,437,440,444,476],[12,318,320],{"id":319},"problem-summary","Problem Summary",[17,322,323],{},"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.",[12,325,327],{"id":326},"solution","Solution",[17,329,330],{},"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.",[12,332,334],{"id":333},"key-features","Key Features",[59,336,337,343,349,355,361,367,373],{},[62,338,339,342],{},[66,340,341],{},"Modern React + TanStack",": Uses TanStack Router, Query, Table, and more for best-in-class DX and scalability.",[62,344,345,348],{},[66,346,347],{},"Production-ready authentication",": Shopify OAuth flow fully integrated.",[62,350,351,354],{},[66,352,353],{},"Embedded App support",": Works seamlessly inside Shopify Admin with App Bridge.",[62,356,357,360],{},[66,358,359],{},"Polaris UI",": Native Shopify UI components out of the box.",[62,362,363,366],{},[66,364,365],{},"API integration layer",": Clean separation of API logic using TanStack Query.",[62,368,369,372],{},[66,370,371],{},"TypeScript-first",": Fully typed for safety and maintainability.",[62,374,375,378],{},[66,376,377],{},"Deployment-ready",": Works on Vercel, Render, and other modern platforms.",[12,380,382],{"id":381},"quick-start","Quick Start",[384,385,386,394,397,409],"ol",{},[62,387,388,389],{},"Clone the repo: ",[38,390,393],{"href":391,"rel":392},"https:\u002F\u002Fgithub.com\u002Fyan-ad\u002Fshopify-app-tanstack",[42],"github.com\u002Fyan-ad\u002Fshopify-app-tanstack",[62,395,396],{},"Follow the README to set up your Shopify API key & secret.",[62,398,399,400,404,405,408],{},"Run the development server (",[401,402,403],"code",{},"pnpm dev"," or ",[401,406,407],{},"yarn dev",") and start building your app.",[62,410,411],{},"Deploy to Vercel, Render, or your preferred platform.",[17,413,414],{},"Demo: (coming soon)",[12,416,418],{"id":417},"benefits-for-developers","Benefits for Developers",[59,420,421,424,427,430],{},[62,422,423],{},"No need to reinvent authentication, embedded context, or API patterns.",[62,425,426],{},"Modern, scalable codebase with TanStack best practices.",[62,428,429],{},"Focus on business features, not boilerplate.",[62,431,432],{},"Transparent, easy to debug, and production-ready.",[12,434,436],{"id":435},"why-not-just-another-boilerplate","Why Not Just Another Boilerplate?",[17,438,439],{},"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.",[12,441,443],{"id":442},"useful-links","Useful Links",[59,445,446,452,460,468],{},[62,447,448,449],{},"Repo: ",[38,450,393],{"href":391,"rel":451},[42],[62,453,454,455],{},"Shopify Docs: ",[38,456,459],{"href":457,"rel":458},"https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fapps\u002Fgetting-started\u002Fcreate",[42],"shopify.dev",[62,461,462,463],{},"TanStack: ",[38,464,467],{"href":465,"rel":466},"https:\u002F\u002Ftanstack.com\u002F",[42],"tanstack.com",[62,469,470,471],{},"Polaris: ",[38,472,475],{"href":473,"rel":474},"https:\u002F\u002Fpolaris.shopify.com\u002F",[42],"Shopify Polaris",[17,477,478],{},"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":278,"searchDepth":279,"depth":279,"links":480},[481,482,483,484,485,486,487],{"id":319,"depth":279,"text":320},{"id":326,"depth":279,"text":327},{"id":333,"depth":279,"text":334},{"id":381,"depth":279,"text":382},{"id":417,"depth":279,"text":418},{"id":435,"depth":279,"text":436},{"id":442,"depth":279,"text":443},[293],"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":314,"description":489},{"loc":491},[495,308,496,309],"react","typescript","project\u002F11.shopify-app-tanstack","JetX3d8xA88pet2GXsyg0-SgpdTIsPXyTEiT2evHgDE",{"id":500,"title":501,"active":502,"body":503,"collaborators":654,"color":294,"date":295,"description":657,"extension":297,"github_url":295,"icon":658,"image":659,"meta":660,"month":661,"navigation":7,"path":662,"seo":663,"sitemap":664,"stacks":665,"status":295,"stem":670,"url":295,"__hash__":671},"project\u002Fproject\u002F0.kecamatan-berdaya-jateng.md","Kecamatan Berdaya",false,{"type":9,"value":504,"toc":643},[505,509,512,516,519,523,526,530,562,566,586,590,593,597,629,633,636,640],[12,506,508],{"id":507},"project-initiation","Project Initiation:",[17,510,511],{},"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.",[12,513,515],{"id":514},"team-collaboration-and-government-partnership","Team Collaboration and Government Partnership:",[17,517,518],{},"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.",[12,520,522],{"id":521},"system-architecture-and-purpose","System Architecture and Purpose:",[17,524,525],{},"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.",[12,527,529],{"id":528},"technology-stack","Technology Stack:",[59,531,532,538,544,550,556],{},[62,533,534,537],{},[66,535,536],{},"Nuxt.js:"," Vue-based framework for building the modern, responsive front-end interface",[62,539,540,543],{},[66,541,542],{},"Laravel:"," PHP framework powering the robust and scalable back-office API system",[62,545,546,549],{},[66,547,548],{},"MySQL:"," Database management for storing critical government and citizen data",[62,551,552,555],{},[66,553,554],{},"Vue.js:"," Progressive JavaScript framework for interactive user interfaces",[62,557,558,561],{},[66,559,560],{},"Tailwind CSS:"," Utility-first CSS framework for rapid UI development",[12,563,565],{"id":564},"key-features-implemented","Key Features Implemented:",[59,567,568,571,574,577,580,583],{},[62,569,570],{},"Comprehensive citizen data management and registration system",[62,572,573],{},"Program tracking and implementation monitoring tools",[62,575,576],{},"Administrative dashboard with real-time analytics and reporting",[62,578,579],{},"Multi-level user access control for different government roles",[62,581,582],{},"Document management system for official paperwork and records",[62,584,585],{},"Integration with existing government databases and systems",[12,587,589],{"id":588},"government-impact-and-achievements","Government Impact and Achievements:",[17,591,592],{},"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.",[12,594,596],{"id":595},"technical-highlights","Technical Highlights:",[59,598,599,605,611,617,623],{},[62,600,601,604],{},[66,602,603],{},"Modern Architecture:"," Nuxt.js frontend with Laravel API backend for optimal performance and maintainability",[62,606,607,610],{},[66,608,609],{},"Security Compliance:"," Implemented robust security measures to protect sensitive citizen information",[62,612,613,616],{},[66,614,615],{},"Responsive Design:"," Vue.js components with Tailwind CSS for intuitive admin panels accessible on any device",[62,618,619,622],{},[66,620,621],{},"API-Driven Development:"," RESTful Laravel APIs enabling flexible data management and integration",[62,624,625,628],{},[66,626,627],{},"Real-time Updates:"," Server-side rendering with Nuxt for fast loading and better user experience",[12,630,632],{"id":631},"core-maintenance-responsibilities","Core Maintenance Responsibilities:",[17,634,635],{},"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.",[12,637,639],{"id":638},"community-impact","Community Impact:",[17,641,642],{},"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":278,"searchDepth":279,"depth":279,"links":644},[645,646,647,648,649,650,651,652,653],{"id":507,"depth":279,"text":508},{"id":514,"depth":279,"text":515},{"id":521,"depth":279,"text":522},{"id":528,"depth":279,"text":529},{"id":564,"depth":279,"text":565},{"id":588,"depth":279,"text":589},{"id":595,"depth":279,"text":596},{"id":631,"depth":279,"text":632},{"id":638,"depth":279,"text":639},[655,656],"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":501,"description":657},{"loc":662},[307,666,667,668,669],"laravel","mysql","vuejs","tailwindcss","project\u002F0.kecamatan-berdaya-jateng","sKN3gFjO5kgMPCiT_BjMw72eegE1phIOSpLoZTfUNkU",{"id":673,"title":674,"active":7,"body":675,"collaborators":803,"color":808,"date":295,"description":809,"extension":297,"github_url":295,"icon":299,"image":300,"meta":810,"month":811,"navigation":7,"path":812,"seo":813,"sitemap":814,"stacks":815,"status":295,"stem":818,"url":819,"__hash__":820},"project\u002Fproject\u002F0.shopify.md","Shopify App KiriminAja",{"type":9,"value":676,"toc":793},[677,681,684,688,691,695,698,700,732,734,751,755,758,760,786,790],[12,678,680],{"id":679},"project-initiation-sep-2024","Project Initiation (Sep 2024):",[17,682,683],{},"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.",[12,685,687],{"id":686},"team-collaboration-and-development","Team Collaboration and Development:",[17,689,690],{},"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.",[12,692,694],{"id":693},"shopify-app-architecture","Shopify App Architecture:",[17,696,697],{},"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.",[12,699,529],{"id":528},[59,701,702,708,714,720,726],{},[62,703,704,707],{},[66,705,706],{},"Remix.js:"," Full-stack React framework for building the Shopify app with server-side rendering",[62,709,710,713],{},[66,711,712],{},"Shopify Polaris:"," Design system for consistent UI\u002FUX within Shopify admin",[62,715,716,719],{},[66,717,718],{},"REST APIs:"," Integration with KiriminAja logistics services and Shopify APIs",[62,721,722,725],{},[66,723,724],{},"Google Pub\u002FSub:"," Real-time messaging for shipment status updates and notifications",[62,727,728,731],{},[66,729,730],{},"Node.js:"," Backend runtime for handling webhooks and API integrations",[12,733,565],{"id":564},[59,735,736,739,742,745,748],{},[62,737,738],{},"Seamless integration with Shopify's order management system",[62,740,741],{},"Real-time shipment tracking using Google Pub\u002FSub messaging",[62,743,744],{},"Polaris-based UI components for native Shopify admin experience",[62,746,747],{},"RESTful API communication with multiple logistics partners",[62,749,750],{},"Automated order fulfillment and tracking updates",[12,752,754],{"id":753},"integration-achievements","Integration Achievements:",[17,756,757],{},"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.",[12,759,596],{"id":595},[59,761,762,768,774,780],{},[62,763,764,767],{},[66,765,766],{},"Remix SSR:"," Optimized loading times and SEO for the app pages",[62,769,770,773],{},[66,771,772],{},"Polaris Components:"," Consistent design language matching Shopify's admin interface",[62,775,776,779],{},[66,777,778],{},"Pub\u002FSub Messaging:"," Real-time updates for order status and delivery notifications",[62,781,782,785],{},[66,783,784],{},"REST API Design:"," Clean, scalable endpoints for partner integrations",[12,787,789],{"id":788},"ongoing-development","Ongoing Development:",[17,791,792],{},"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":278,"searchDepth":279,"depth":279,"links":794},[795,796,797,798,799,800,801,802],{"id":679,"depth":279,"text":680},{"id":686,"depth":279,"text":687},{"id":693,"depth":279,"text":694},{"id":528,"depth":279,"text":529},{"id":564,"depth":279,"text":565},{"id":753,"depth":279,"text":754},{"id":595,"depth":279,"text":596},{"id":788,"depth":279,"text":789},[804,805,806,807],"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":674,"description":809},{"loc":812},[495,816,669,817,308],"remix-js","nodejs","project\u002F0.shopify","https:\u002F\u002Fapps.shopify.com\u002Fkiriminaja","2VrKM8DGkEGV7fUtmHBIt30yXl2zcloZjMw_pXMaiTY",[822,1080,1211],{"id":823,"title":824,"body":825,"date":1071,"description":1072,"extension":297,"image":1073,"meta":1074,"navigation":7,"path":1075,"seo":1076,"sitemap":1077,"stem":1078,"__hash__":1079},"blog\u002Fblog\u002Fwhy-nuxt.md","Why using Nuxt.js?",{"type":9,"value":826,"toc":1043},[827,831,839,842,845,849,852,855,858,861,865,868,871,874,877,885,889,892,899,906,913,916,923,926,933,936,943,946,953,956,963,966,973,976,980,983,986,990,993,996,999,1002,1006,1009,1012,1015,1018,1022,1025,1029,1032,1035,1038],[12,828,830],{"id":829},"the-moment-we-realized-our-was-growing-up","The Moment We Realized Our 👶 Was Growing Up",[17,832,833,834,838],{},"Picture this: It's another late evening in our office, and I'm staring at a codebase that once felt like home. Our dashboard—",[835,836,837],"em",{},"our baby","—the one we've nurtured since the very first day this company came to life, was starting to show its age.",[17,840,841],{},"You know that feeling when you realize your childhood home feels smaller than you remember? That's exactly how we felt about our jQuery and vanilla JavaScript foundation. What once felt magical and limitless now felt... constrained.",[17,843,844],{},"Our team was growing faster than we ever imagined. New features were rolling out almost monthly, and with each release, I could see the strain in my teammates' eyes. The late-night debugging sessions were getting longer, the \"quick fixes\" were taking hours, and worst of all—that spark of joy we once had while coding was slowly dimming.",[12,846,848],{"id":847},"the-weight-of-legacy","The Weight of Legacy",[17,850,851],{},"I'll be honest with you—admitting that our legacy dashboard was holding us back was one of the hardest professional moments I've faced. This wasn't just code; it was our identity, our foundation, our proof that we could build something meaningful from scratch.",[17,853,854],{},"But love sometimes means letting go, right?",[17,856,857],{},"The jQuery and vanilla JavaScript that had served us so well were now becoming roadblocks. Every new team member needed weeks just to understand our custom patterns. Every modern library integration felt like forcing a square peg into a round hole. We were spending more time fighting our tools than creating value for our users.",[17,859,860],{},"And our users... they deserved better. They deserved the fast, smooth, delightful experience that modern web technologies could provide.",[12,862,864],{"id":863},"the-search-for-our-new-foundation","The Search for Our New Foundation",[17,866,867],{},"What followed was probably the most intense research phase of our careers. This wasn't just about picking a framework—this was about choosing the future of our company, our team's happiness, and our users' experience.",[17,869,870],{},"We dove deep into the trenches of React, Angular, and Vue.js. I remember the countless nights scrolling through documentation, watching tutorials, and having heated (but loving) debates with my team about the pros and cons of each approach.",[17,872,873],{},"The meta-frameworks were our next challenge: Next.js, Nuxt.js, Angular Universal, and even SvelteKit. Each had its own personality, its own promises, its own learning curve.",[17,875,876],{},"This was before the ChatGPT era, so every piece of knowledge was hard-earned through blog posts, Stack Overflow deep-dives, and GitHub issue discussions. We were digital archaeologists, uncovering the truth about each technology through real-world experiences shared by developers around the globe.",[17,878,879,880,884],{},"After weeks of research that felt like months, something clicked when we experimented with Nuxt.js for our help page at ",[38,881,882],{"href":882,"rel":883},"https:\u002F\u002Fhelp.kiriminaja.com",[42],". The developer experience felt... right. It felt like coming home to a house that was both familiar and excitingly new.",[12,886,888],{"id":887},"why-nuxtjs-stole-our-hearts","Why Nuxt.js Stole Our Hearts",[17,890,891],{},"Here's why Nuxt.js didn't just win our minds—it won our hearts:",[30,893,895,896],{"id":894},"_1-vuejs-ecosystem-the-gentle-giant","1. ",[66,897,898],{},"Vue.js Ecosystem - The Gentle Giant",[17,900,901,902,905],{},"Vue felt like a breath of fresh air after years of complex abstractions. Its gentle learning curve meant our team could actually ",[835,903,904],{},"enjoy"," learning something new instead of drowning in documentation. The progressive nature of Vue allowed us to migrate piece by piece without throwing away everything we'd built.",[30,907,909,910],{"id":908},"_2-server-side-rendering-ssr-and-static-site-generation-ssg-performance-that-actually-matters","2. ",[66,911,912],{},"Server-Side Rendering (SSR) and Static Site Generation (SSG) - Performance That Actually Matters",[17,914,915],{},"Remember the satisfaction of seeing your users' faces light up when pages load instantly? That's what SSR gave us back. No more apologizing for slow load times or watching users abandon our app because of poor performance.",[30,917,919,920],{"id":918},"_3-modular-architecture-building-blocks-that-actually-work","3. ",[66,921,922],{},"Modular Architecture - Building Blocks That Actually Work",[17,924,925],{},"The module system felt like having a Swiss Army knife for web development. Need authentication? There's a module. Want to add PWA features? Another module. It was like having superpowers without the complexity.",[30,927,929,930],{"id":928},"_4-developer-experience-joy-in-coding-again","4. ",[66,931,932],{},"Developer Experience - Joy in Coding Again",[17,934,935],{},"Hot module replacement, intuitive file-based routing, auto-imports—these weren't just features; they were daily gifts that made coding fun again. I started looking forward to Monday mornings because working with Nuxt felt effortless.",[30,937,939,940],{"id":938},"_5-performance-optimization-speed-without-the-headache","5. ",[66,941,942],{},"Performance Optimization - Speed Without the Headache",[17,944,945],{},"Code splitting, lazy loading, and bundle optimization happened automatically. We went from performance optimization being a dreaded task to something that just... worked.",[30,947,949,950],{"id":948},"_6-strong-community-and-ecosystem-never-coding-alone","6. ",[66,951,952],{},"Strong Community and Ecosystem - Never Coding Alone",[17,954,955],{},"The Vue and Nuxt community felt like a warm hug compared to other ecosystems. When we had questions, we got helpful answers, not condescending lectures.",[30,957,959,960],{"id":958},"_7-typescript-support-safety-net-for-growing-teams","7. ",[66,961,962],{},"TypeScript Support - Safety Net for Growing Teams",[17,964,965],{},"As our team grew, TypeScript became our safety net. Nuxt's excellent TypeScript integration meant fewer late-night bug hunts and more confidence in our code.",[30,967,969,970],{"id":968},"_8-flexibility-and-versatility-one-tool-many-dreams","8. ",[66,971,972],{},"Flexibility and Versatility - One Tool, Many Dreams",[17,974,975],{},"Whether we needed a SPA, SSR, or static site, Nuxt adapted to our needs instead of forcing us to adapt to its constraints.",[12,977,979],{"id":978},"the-hardest-decision-letting-go","The Hardest Decision: Letting Go",[17,981,982],{},"After 2-3 months of falling in love with Nuxt.js, reality hit us like a truck. Our main dashboard—our monolithic masterpiece—was taking forever to build and deploy. Every small change felt like moving a mountain.",[17,984,985],{},"The decision to migrate our entire dashboard to Nuxt.js was probably the scariest professional choice we've ever made. This wasn't just changing a tool; this was acknowledging that our baby needed to grow up, and we needed to help it.",[12,987,989],{"id":988},"two-years-of-living-in-two-worlds","Two Years of Living in Two Worlds",[17,991,992],{},"What followed was the most challenging period of our careers. For almost two years, we lived in parallel universes—maintaining our legacy dashboard while building its future replacement.",[17,994,995],{},"Some nights, I questioned everything. Was this the right choice? Were we over-engineering? Were we solving the right problems?",[17,997,998],{},"But then I'd see a team member's face light up when they successfully implemented a complex feature in half the time it would have taken in the old system. Or when a user complimented our app's speed and responsiveness. Those moments reminded me why we started this journey.",[17,1000,1001],{},"The testing cycles felt endless. Develop, port, test, discover edge cases, fix, test again. Repeat. Each iteration brought us closer to something beautiful, but the path felt longer than we'd ever imagined.",[12,1003,1005],{"id":1004},"september-2025-the-day-we-finally-let-go","September 2025: The Day We Finally Let Go",[17,1007,1008],{},"After what felt like a lifetime of preparation, September 2025 arrived—the day we officially launched our new Nuxt.js dashboard to all our users.",[17,1010,1011],{},"I still remember refreshing our monitoring dashboard, watching user sessions flow seamlessly through the new interface. No critical bugs, no performance issues, just happy users experiencing the modern, fast, delightful application we'd dreamed of building.",[17,1013,1014],{},"The first beta had launched way back in 2023, and seeing how far we'd come felt surreal. We didn't just migrate a codebase—we transformed our entire approach to building web applications.",[17,1016,1017],{},"Today, I'm proud to say that 80% of our new web frontend applications are built with Nuxt.js. It has become our go-to choice for almost every frontend project, proving that our initial leap of faith was absolutely worth it.",[12,1019,1021],{"id":1020},"is-nuxtjs-perfect","Is Nuxt.js Perfect?",[17,1023,1024],{},"No it isn't. Every technology has its trade-offs, and Nuxt.js is no exception. There were moments of frustration, unexpected bugs, and learning curves that tested our patience. We also use some other frontend frameworks for specific projects where they make more sense like React Router for our Shopify app, but overall, the benefits far outweighed the challenges.",[12,1026,1028],{"id":1027},"looking-back-with-gratitude","Looking Back With Gratitude",[17,1030,1031],{},"Today, when I see new developers joining our team and getting productive in days instead of weeks, I'm reminded that sometimes the hardest decisions lead to the most beautiful outcomes.",[17,1033,1034],{},"Our jQuery and vanilla JavaScript foundation wasn't a mistake—it was our beginning. Nuxt.js isn't just our present—it's the foundation for everything we'll build tomorrow.",[17,1036,1037],{},"If you're reading this and facing a similar decision, know that it's okay to feel scared. It's okay to question whether you're making the right choice. But also know that sometimes, the best way to honor what you've built is to help it become something even better.",[17,1039,1040],{},[835,1041,1042],{},"What's your migration story? I'd love to hear about your journey!",{"title":278,"searchDepth":279,"depth":279,"links":1044},[1045,1046,1047,1048,1066,1067,1068,1069,1070],{"id":829,"depth":279,"text":830},{"id":847,"depth":279,"text":848},{"id":863,"depth":279,"text":864},{"id":887,"depth":279,"text":888,"children":1049},[1050,1052,1054,1056,1058,1060,1062,1064],{"id":894,"depth":284,"text":1051},"1. Vue.js Ecosystem - The Gentle Giant",{"id":908,"depth":284,"text":1053},"2. Server-Side Rendering (SSR) and Static Site Generation (SSG) - Performance That Actually Matters",{"id":918,"depth":284,"text":1055},"3. Modular Architecture - Building Blocks That Actually Work",{"id":928,"depth":284,"text":1057},"4. Developer Experience - Joy in Coding Again",{"id":938,"depth":284,"text":1059},"5. Performance Optimization - Speed Without the Headache",{"id":948,"depth":284,"text":1061},"6. Strong Community and Ecosystem - Never Coding Alone",{"id":958,"depth":284,"text":1063},"7. TypeScript Support - Safety Net for Growing Teams",{"id":968,"depth":284,"text":1065},"8. Flexibility and Versatility - One Tool, Many Dreams",{"id":978,"depth":279,"text":979},{"id":988,"depth":279,"text":989},{"id":1004,"depth":279,"text":1005},{"id":1020,"depth":279,"text":1021},{"id":1027,"depth":279,"text":1028},"2025-12-09","A heartfelt journey of how our team transformed from jQuery warriors to Nuxt.js advocates. This is the story of letting go of our legacy baby and embracing a future that scared and excited us at the same time.","\u002Fimages\u002Fblog\u002Fwhy-nuxt.webp",{},"\u002Fblog\u002Fwhy-nuxt",{"title":824,"description":1072},{"loc":1075},"blog\u002Fwhy-nuxt","NhbtZe_fGN_8v4fhAAXcxsamTH1WRMGtdD3TFgLW2EU",{"id":1081,"title":1082,"body":1083,"date":1202,"description":1203,"extension":297,"image":1204,"meta":1205,"navigation":7,"path":1206,"seo":1207,"sitemap":1208,"stem":1209,"__hash__":1210},"blog\u002Fblog\u002Fmy-new-domain.md","New Domain, New Chapter",{"type":9,"value":1084,"toc":1194},[1085,1089,1104,1108,1114,1118,1134,1138,1141,1161,1165,1183,1186],[12,1086,1088],{"id":1087},"a-fresh-start-with-yanad","A Fresh Start with yan.ad",[17,1090,1091,1092,1095,1096,1099,1100,1103],{},"If you’ve followed my journey, you might know I have a bit of a habit: changing my domain name! From ",[66,1093,1094],{},"yanuar.co"," to ",[66,1097,1098],{},"yanuar.dev"," and a few others in between, my online presence has always been evolving. But today, I’m excited to announce that ",[66,1101,1102],{},"yan.ad"," is here to stay as my professional portfolio page.",[30,1105,1107],{"id":1106},"why-yanad","Why yan.ad?",[17,1109,1110,1111,1113],{},"I wanted a domain that’s short, memorable, and truly represents my personal brand. After experimenting with several options, ",[66,1112,1102],{}," felt like the perfect fit for my portfolio and future projects.",[30,1115,1117],{"id":1116},"a-sad-news-why-not-yanuar-or-yanuarid","A Sad News: Why Not yanu.ar or yanuar.id?",[17,1119,1120,1121,404,1124,1127,1128,1130,1131,1133],{},"Some of you might wonder why I didn’t go with ",[66,1122,1123],{},"yanu.ar",[66,1125,1126],{},"yanuar.id",". Unfortunately, ",[66,1129,1123],{}," is not only more expensive, but it’s also a bit harder to pronounce for Indonesian speakers. As for ",[66,1132,1126],{},", it’s sadly already taken by someone else out of nowhere. So, I decided to go with something that’s both practical and easy to remember.",[30,1135,1137],{"id":1136},"built-with-modern-tools","Built with Modern Tools",[17,1139,1140],{},"This new site is crafted using the latest technologies:",[59,1142,1143,1149,1155],{},[62,1144,1145,1148],{},[66,1146,1147],{},"Nuxt.js 3"," for a fast, modern web experience",[62,1150,1151,1154],{},[66,1152,1153],{},"Tailwind CSS"," for utility-first, responsive styling",[62,1156,1157,1160],{},[66,1158,1159],{},"Material 3 Expressive Design"," for a clean, accessible, and visually appealing interface",[30,1162,1164],{"id":1163},"professional-email-hosting","Professional Email & Hosting",[17,1166,1167,1168,1171,1172,1178,1179,1182],{},"To keep things professional, I’ve set up my email using ",[66,1169,1170],{},"Zoho Mail","—so you can always reach me at ",[66,1173,1174],{},[38,1175,1177],{"href":1176},"mailto:me@yan.ad","me@yan.ad",". The site itself is hosted on ",[66,1180,1181],{},"Vercel",", ensuring fast load times and reliable uptime.",[17,1184,1185],{},"Thanks for joining me on this new chapter. Feel free to explore my portfolio, check out my projects, and get in touch!",[17,1187,1188,1191,1192],{},[66,1189,1190],{},"Contact:"," ",[38,1193,1177],{"href":1176},{"title":278,"searchDepth":279,"depth":279,"links":1195},[1196],{"id":1087,"depth":279,"text":1088,"children":1197},[1198,1199,1200,1201],{"id":1106,"depth":284,"text":1107},{"id":1116,"depth":284,"text":1117},{"id":1136,"depth":284,"text":1137},{"id":1163,"depth":284,"text":1164},"2025-06-01","A new domain, a new beginning. This blog post marks the start of my journey with a fresh domain and a renewed focus on sharing knowledge and experiences.","\u002Fimages\u002Fblog\u002Fnew-domain.png",{},"\u002Fblog\u002Fmy-new-domain",{"title":1082,"description":1203},{"loc":1206},"blog\u002Fmy-new-domain","tIgGsTMnFgrWb6c98scElAq7oIPHXgqyq86Vc4jyWyo",{"id":1212,"title":1213,"body":1214,"date":1352,"description":1353,"extension":297,"image":1354,"meta":1355,"navigation":7,"path":1356,"seo":1357,"sitemap":1358,"stem":1359,"__hash__":1360},"blog\u002Fblog\u002Ftauri-app-si-calon-pesaing-electron-js-yang-ditulis-menggunakan-rust.md","Tauri: The Upcoming Electron Competitor Written in Rust",{"type":9,"value":1215,"toc":1347},[1216,1219,1227,1231,1239,1267,1271,1274,1285,1289],[17,1217,1218],{},"When talking about cross-platform desktop apps, we can't ignore popular names like electron.js and meteor.js. Electron is currently the most popular framework, with over 100k stars on GitHub, and we all know that electron.js is managed and developed by GitHub as the main contributor. However, before Tauri arrived, Electron was often criticized for using Chromium as its application renderer, which, as we know, is quite memory-hungry. So, how do we solve this? Well, you could use native code—just kidding. Is there another solution?",[17,1220,1221,1222,1226],{},"Yes, there is! It's called Tauri, a newcomer built using Rust as its compiler. Unlike Electron, which uses the V8 engine and Chromium as its renderer, Tauri uses Rust at its core and introduces TAO and WRY as tools for communication. So, compared to JavaScript, Rust is much closer to the machine, right? According to several sources, Tauri excels in memory management and bundle size compared to Electron. For example, see this source: ",[38,1223,1224],{"href":1224,"rel":1225},"https:\u002F\u002Fwww.levminer.com\u002Fblog\u002Ftauri-vs-electron",[42],". Of course, Tauri also has a faster startup time than Electron. Okay, that's enough intermezzo—let's move on to installation.",[12,1228,1230],{"id":1229},"development-experience","Development Experience",[17,1232,1233,1234,1238],{},"For a more complete installation guide, visit ",[38,1235,1236],{"href":1236,"rel":1237},"https:\u002F\u002Ftauri.app",[42],". But for starters, they already support popular frameworks like:",[59,1240,1241,1248,1255,1262],{},[62,1242,1243],{},[38,1244,1247],{"href":1245,"rel":1246},"https:\u002F\u002Fnextjs.org\u002F",[42],"NextJS",[62,1249,1250],{},[38,1251,1254],{"href":1252,"rel":1253},"https:\u002F\u002Fkit.svelte.dev\u002F",[42],"SvelteKit",[62,1256,1257],{},[38,1258,1261],{"href":1259,"rel":1260},"https:\u002F\u002Fvitejs.dev\u002F",[42],"Vite",[62,1263,1264],{},[835,1265,1266],{},"other frameworks",[12,1268,1270],{"id":1269},"should-you-migrate","Should You Migrate?",[17,1272,1273],{},"For those who have tried or produced products using electron.js, should you migrate to Tauri? My answer is yes, but with some notes:",[59,1275,1276,1279,1282],{},[62,1277,1278],{},"Tauri uses Rust in some cases. It's basic, but Rust is a high-level language that not everyone is familiar with.",[62,1280,1281],{},"Tauri's sponsorship is still limited compared to Electron, which has been around longer, so it will take time to develop features that match Electron.",[62,1283,1284],{},"There are not yet any showcase companies using Tauri as one of their technologies.",[12,1286,1288],{"id":1287},"references","References",[59,1290,1291,1298,1305,1312,1319,1326,1331,1336,1341],{},[62,1292,1293],{},[38,1294,1297],{"href":1295,"rel":1296},"https:\u002F\u002Ftauri.app\u002F",[42],"Tauri",[62,1299,1300],{},[38,1301,1304],{"href":1302,"rel":1303},"https:\u002F\u002Fwww.electronjs.org\u002F",[42],"Electron.js",[62,1306,1307],{},[38,1308,1311],{"href":1309,"rel":1310},"https:\u002F\u002Fwww.rust-lang.org\u002F",[42],"Rust",[62,1313,1314],{},[38,1315,1318],{"href":1316,"rel":1317},"https:\u002F\u002Fgithub.com\u002Ftauri-apps\u002Ftao",[42],"TAO",[62,1320,1321],{},[38,1322,1325],{"href":1323,"rel":1324},"https:\u002F\u002Fgithub.com\u002Ftauri-apps\u002Fwry",[42],"WRY",[62,1327,1328],{},[38,1329,1247],{"href":1245,"rel":1330},[42],[62,1332,1333],{},[38,1334,1254],{"href":1252,"rel":1335},[42],[62,1337,1338],{},[38,1339,1261],{"href":1259,"rel":1340},[42],[62,1342,1343],{},[38,1344,1346],{"href":1224,"rel":1345},[42],"Tauri vs Electron Comparison",{"title":278,"searchDepth":279,"depth":279,"links":1348},[1349,1350,1351],{"id":1229,"depth":279,"text":1230},{"id":1269,"depth":279,"text":1270},{"id":1287,"depth":279,"text":1288},"2022-12-06","Who hasn't heard of electron.js? The go-to multi-platform desktop development framework for Linux, Mac, and Windows. Now, there's a new competitor: Tauri JS.","\u002Fimages\u002Fblog\u002Ftauri.png",{},"\u002Fblog\u002Ftauri-app-si-calon-pesaing-electron-js-yang-ditulis-menggunakan-rust",{"title":1213,"description":1353},{"loc":1356},"blog\u002Ftauri-app-si-calon-pesaing-electron-js-yang-ditulis-menggunakan-rust","6hScf7RNBobCmptTM3Ez1mB6cTJ205J08I_L_xvZ_B0",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1364},0,24,"\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":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1366},"\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":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1368},"\u003Cpath fill=\"currentColor\" d=\"M17.4 3.442h-3.262l-2.126 3.543l-2.135-3.542l-2.369-.001H2l10.026 17.116L22 3.442zm-5.378 13.566L5.125 5.232h2.528l4.375 7.528l4.34-7.528h2.516z\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1370},"\u003Cpath fill=\"currentColor\" d=\"M18.323 9.007c-.226-.033-.42-.13-.646-.194c.033-.129.033-.258.097-.452c.452-2.322.13-4.16-.903-4.806c-1.032-.58-2.71.032-4.387 1.484c-.13.129-.355.258-.484.451c-.097-.096-.226-.193-.323-.322c-1.774-1.58-3.516-2.226-4.612-1.613c-1.033.58-1.355 2.355-.904 4.516c.033.226.097.452.13.645c-.226.033-.485.13-.71.226C3.484 9.684 2 10.878 2 12.007c0 1.225 1.58 2.451 3.742 3.16c.193.033.355.13.548.13c-.032.226-.129.451-.129.71c-.42 2.129-.096 3.838.936 4.419c1.032.645 2.838 0 4.516-1.548c.129-.13.258-.226.42-.355a4 4 0 0 0 .548.451c1.613 1.452 3.29 2.033 4.355 1.452c1.032-.645 1.387-2.452.935-4.71c-.032-.129-.032-.354-.13-.548c.13-.032.227-.032.356-.13C20.355 14.362 22 13.137 22 11.91c-.032-1-1.58-2.161-3.677-2.903m-5.29-3.29c1.45-1.259 2.806-1.71 3.45-1.388c.646.355.904 1.903.485 3.936c-.032.129-.032.225-.097.419c-.871-.194-1.71-.355-2.613-.42c-.484-.709-1.032-1.45-1.613-2.032a1.8 1.8 0 0 1 .387-.516M8.547 14.07c.194.355.42.678.646 1a10.6 10.6 0 0 1-1.807-.258a8 8 0 0 1 .645-1.71c.13.29.355.678.516.968m-1.16-4.645a22 22 0 0 1 1.773-.323c-.226.323-.42.646-.58 1c-.162.355-.355.646-.549 1.033c-.29-.613-.451-1.162-.645-1.71m1.031 2.677c.226-.548.549-1.032.871-1.58c.323-.549.645-1.033.936-1.549c.58-.032 1.161-.032 1.774-.032c.58 0 1.226.032 1.774.032c.355.484.645 1 .936 1.484c.322.484.58 1.033.87 1.58c-.225.55-.548 1.033-.87 1.582c-.323.548-.646 1.032-.936 1.548c-.58.032-1.161.032-1.806.032s-1.226-.032-1.774-.032c-.355-.484-.646-1-.936-1.548c-.29-.549-.548-.968-.839-1.517m7.033 1.968c.193-.355.354-.677.548-1.032c.226.548.452 1.129.645 1.71c-.58.129-1.226.225-1.87.322c.257-.322.483-.677.677-1m.58-2.968c-.193-.354-.355-.677-.548-1.032s-.42-.645-.58-.935a22 22 0 0 1 1.773.322c-.193.549-.419 1.097-.645 1.645M12 6.75c.42.451.774.903 1.129 1.387a28 28 0 0 0-2.322 0c.419-.516.838-.968 1.193-1.387M7.484 4.36c.645-.354 2.129.13 3.613 1.549c.097.097.193.193.322.258c-.58.645-1.129 1.355-1.677 2.032a23 23 0 0 0-2.613.42c-.032-.194-.097-.42-.129-.581c-.355-1.903-.129-3.323.484-3.678M6.58 14.62c-.13-.033-.323-.097-.484-.13a7.2 7.2 0 0 1-2.484-1.225c-.452-.323-.678-.71-.774-1.162c0-.71 1.258-1.612 3.032-2.258c.226-.096.452-.129.677-.225c.258.87.581 1.677.936 2.483c-.323.807-.678 1.613-.903 2.517m4.484 3.774a7.1 7.1 0 0 1-2.226 1.355a1.54 1.54 0 0 1-1.355.032c-.645-.355-.871-1.71-.549-3.58c.033-.227.097-.452.13-.646c.87.194 1.774.323 2.612.355c.484.71 1.097 1.451 1.678 2.097c-.032.193-.162.29-.29.387m.967-.903c-.42-.452-.774-.904-1.161-1.388c.355 0 .71.033 1.129.033s.806 0 1.161-.033c-.354.42-.71.871-1.129 1.387m5.097 1.128c-.032.452-.258.936-.645 1.226c-.645.355-1.936-.096-3.355-1.354c-.129-.13-.322-.259-.484-.452a17 17 0 0 0 1.613-2.097c.903-.032 1.774-.226 2.613-.42c.032.13.032.323.097.452c.226.904.226 1.807.161 2.645m.71-4.16c-.097.032-.226.032-.355.096c-.258-.871-.645-1.677-1-2.484c.355-.774.677-1.613.935-2.451c.226.032.42.129.581.193c1.806.645 3.064 1.548 3.064 2.258c.033.742-1.29 1.742-3.225 2.387M12 13.844c1 0 1.774-.806 1.774-1.774A1.79 1.79 0 0 0 12 10.297c-.935 0-1.774.806-1.774 1.774S11 13.845 12 13.845\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1372},"\u003Cpath fill=\"currentColor\" d=\"M13.2 18.666h7.4c.236 0 .462-.083.667-.2c.204-.117.415-.264.533-.466c.118-.203.2-.433.2-.667s-.082-.464-.2-.667l-5-8.6a1.2 1.2 0 0 0-.467-.466a1.6 1.6 0 0 0-.733-.2c-.236 0-.462.083-.667.2a1.2 1.2 0 0 0-.466.466l-1.267 2.2L10.667 6c-.118-.203-.262-.417-.467-.534s-.43-.133-.667-.133c-.236 0-.462.016-.666.133s-.416.33-.534.534l-6.2 10.666c-.118.203-.133.433-.133.667s.015.464.133.667c.118.202.33.35.534.466s.43.2.666.2H8c1.85 0 3.195-.83 4.133-2.4l2.267-3.933l1.2-2.067l3.667 6.267H14.4zm-5.267-2.133H4.667l4.866-8.4l2.467 4.2l-1.634 2.848c-.623 1.02-1.333 1.352-2.433 1.352\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1374},"\u003Cpath fill=\"currentColor\" d=\"m11.345 2.405l-.303.027c-2.84.256-5.501 1.789-7.187 4.144a9.9 9.9 0 0 0-1.765 4.37c-.08.548-.09.71-.09 1.455s.01.907.09 1.457c.543 3.755 3.216 6.91 6.84 8.079c.65.209 1.334.351 2.112.438c.303.033 1.613.033 1.916 0c1.343-.15 2.48-.481 3.603-1.054c.172-.088.205-.112.182-.131c-.016-.012-.749-.995-1.629-2.184l-1.599-2.16l-2.004-2.965a287 287 0 0 0-2.017-2.963c-.008-.002-.016 1.315-.02 2.924c-.006 2.817-.008 2.93-.043 2.997a.36.36 0 0 1-.172.178c-.063.03-.117.037-.412.037h-.339l-.09-.057a.4.4 0 0 1-.13-.143l-.042-.088l.004-3.919l.006-3.921l.06-.076a.5.5 0 0 1 .145-.12c.08-.039.112-.043.45-.043c.399 0 .465.016.569.13c.03.03 1.114 1.665 2.412 3.633l3.946 5.976l1.583 2.398l.08-.052c.71-.462 1.46-1.118 2.055-1.803a9.95 9.95 0 0 0 2.354-5.111c.08-.55.09-.712.09-1.457c0-.744-.01-.907-.09-1.456c-.543-3.755-3.216-6.91-6.84-8.079a10.5 10.5 0 0 0-2.083-.436c-.187-.02-1.48-.04-1.642-.025m4.094 6.048c.094.047.17.137.197.23c.016.051.02 1.138.016 3.587l-.006 3.515l-.62-.95l-.621-.95V11.33c0-1.652.008-2.58.02-2.625a.4.4 0 0 1 .193-.246c.08-.041.11-.045.416-.045c.29 0 .34.004.405.039\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1376},"\u003Cpath fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M7 9.969q1-4.063 5-4.063c4 0 4.5 3.047 6.5 3.555q2 .508 3.5-1.524Q21 12 17 12c-4 0-4.5-3.047-6.5-3.555Q8.5 7.938 7 9.97m-5 6.094Q3 12 7 12c4 0 4.5 3.047 6.5 3.555q2 .507 3.5-1.524q-1 4.063-5 4.063c-4 0-4.5-3.047-6.5-3.555q-2-.508-3.5 1.524\" clip-rule=\"evenodd\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1378},"\u003Cpath fill=\"currentColor\" d=\"m21.705 6.556l-.02-.044l-.02-.052c-.012-.02-.024-.032-.04-.052q-.012-.022-.036-.044c-.008-.008-.02-.016-.044-.036a.2.2 0 0 0-.044-.032l-3.715-2.14a.45.45 0 0 0-.428 0L13.64 6.3s-.024.016-.048.036l-.036.028l-.044.056l-.024.036s-.02.036-.032.068l-.012.032q-.014.059-.016.112v3.995l-2.855 1.643V4.564c0-.036 0-.076-.012-.108a.3.3 0 0 0-.02-.048a.3.3 0 0 0-.024-.052c-.008-.02-.02-.032-.036-.052a.3.3 0 0 0-.036-.044c-.008-.008-.02-.016-.044-.036c-.012-.008-.024-.02-.04-.028l-3.72-2.139a.43.43 0 0 0-.428 0L2.498 4.192s-.032.024-.052.044l-.04.028s-.02.028-.04.052l-.024.036s-.02.044-.028.068l-.016.036c-.008.036-.016.072-.016.112v12.725c0 .072.02.148.06.212c.036.068.092.12.156.16l7.434 4.279l.064.028l.036.012q.053.014.112.016q.054-.002.108-.016l.036-.012q.037-.01.068-.032l7.434-4.275a.44.44 0 0 0 .212-.372v-3.995l3.5-2.015a.43.43 0 0 0 .16-.156a.46.46 0 0 0 .055-.216V6.668c0-.036 0-.072-.012-.112m-4.13 1.755l-2.856-1.643l2.855-1.64l2.856 1.64zM6.428 2.925L9.28 4.568L6.43 6.212L3.573 4.568zm3.283 2.383v7.494l-1.735 1l-1.12.644v-7.49zm0 15.516l-6.57-3.783V5.308l2.855 1.648v8.234l.008.056q.001.025.008.056c.004.016.012.028.02.052q.012.03.024.048a.4.4 0 0 0 .036.056l.032.036s.02.02.048.04l3.54 2.007zm.432-4.027l-2.851-1.611l6.566-3.78l2.852 1.644zm6.998.244l-6.57 3.787v-3.287l6.57-3.75zm0-4.735l-2.855-1.643V7.412l2.855 1.643zm3.716-1.643l-2.856 1.643v-3.25l2.856-1.644z\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1380},"\u003Cpath fill=\"currentColor\" d=\"M3.51 10.503c-.04 0-.05-.02-.03-.05l.205-.266c.02-.03.068-.05.107-.05h3.476c.04 0 .049.03.03.06l-.166.257c-.02.03-.068.059-.097.059zm-1.471.91c-.039 0-.049-.02-.03-.05l.205-.267c.02-.03.068-.05.107-.05h4.44c.04 0 .06.03.05.06l-.078.237c-.01.04-.049.06-.088.06zm2.357.91c-.04 0-.049-.03-.03-.06l.137-.247c.02-.03.058-.06.097-.06h1.948c.039 0 .058.03.058.07l-.02.237c0 .04-.038.07-.067.07zm10.108-1.998c-.614.158-1.032.277-1.636.435c-.146.04-.156.05-.283-.099c-.146-.168-.253-.277-.457-.376c-.614-.306-1.208-.217-1.763.149c-.662.435-1.003 1.078-.993 1.879c.01.791.545 1.444 1.315 1.553c.662.089 1.217-.149 1.655-.653c.088-.109.165-.228.263-.366h-1.88c-.204 0-.253-.129-.184-.297c.126-.306.36-.82.496-1.078a.26.26 0 0 1 .243-.158h3.545c-.02.267-.02.534-.058.801a4.25 4.25 0 0 1-.799 1.939c-.7.94-1.616 1.523-2.775 1.68c-.954.13-1.84-.059-2.62-.652q-1.078-.831-1.236-2.196c-.127-1.077.185-2.047.827-2.897c.692-.92 1.607-1.504 2.727-1.711c.915-.168 1.792-.06 2.58.484c.517.346.887.821 1.13 1.395c.059.089.02.138-.097.168\"\u002F>\u003Cpath fill=\"currentColor\" d=\"M17.726 15.794c-.886-.02-1.694-.277-2.376-.87a3.12 3.12 0 0 1-1.052-1.91c-.175-1.117.127-2.106.79-2.986c.71-.95 1.567-1.444 2.726-1.652c.993-.178 1.928-.079 2.775.505c.77.534 1.247 1.256 1.373 2.205c.166 1.335-.214 2.423-1.12 3.353a4.44 4.44 0 0 1-2.337 1.266c-.263.05-.526.06-.779.09m2.318-3.996c-.01-.128-.01-.227-.03-.326c-.175-.98-1.06-1.533-1.986-1.315c-.905.207-1.49.79-1.704 1.72c-.175.772.195 1.553.896 1.87c.535.237 1.071.207 1.587-.06c.77-.405 1.188-1.038 1.237-1.889\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1382},"\u003Cpath fill=\"currentColor\" d=\"M12.988 11.321h-2.035V9.448h2.035zm0-6.363h-2.035v1.906h2.035zm2.455 4.554h-2.035v1.842h2.035zM10.566 7.22H8.53v1.873h2.034zm2.422 0h-2.035v1.873h2.035zm8.689 3.133c-.452-.323-1.486-.42-2.261-.258c-.097-.775-.55-1.421-1.26-2.003l-.452-.258l-.258.452c-.55.872-.743 2.326-.13 3.262a3.4 3.4 0 0 1-1.485.356H2.07c-.259 1.582.193 3.682 1.356 5.103c1.13 1.357 2.907 2.035 5.168 2.035c4.91 0 8.592-2.26 10.272-6.395c.646 0 2.132 0 2.875-1.422c.032-.032.226-.42.258-.549zm-15.989-.84H3.621v1.842h2.035V9.512zm2.423 0H6.076v1.842H8.11zm2.454 0H8.532v1.842h2.034zM8.111 7.22H6.076v1.873H8.11z\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1384},"\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":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1386},"\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":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1388},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M4 12h16m0 0l-6-6m6 6l-6 6\"\u002F>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1390},"\u003Cg fill=\"none\">\u003Cpath stroke=\"currentColor\" stroke-width=\"1.5\" d=\"M2 12c0-3.771 0-5.657 1.172-6.828S6.229 4 10 4h4c3.771 0 5.657 0 6.828 1.172S22 8.229 22 12v2c0 3.771 0 5.657-1.172 6.828S17.771 22 14 22h-4c-3.771 0-5.657 0-6.828-1.172S2 17.771 2 14z\"\u002F>\u003Cpath stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\" d=\"M7 4V2.5M17 4V2.5M2.5 9h19\"\u002F>\u003Cpath fill=\"currentColor\" d=\"M18 17a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-5 4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-5 4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0\"\u002F>\u003C\u002Fg>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1392},"\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 12h8m0 0l-3-3m3 3l-3 3\"\u002F>\u003C\u002Fg>",{"left":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1394},"\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":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1396},"\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":1362,"top":1362,"width":1363,"height":1363,"rotate":1362,"vFlip":502,"hFlip":502,"body":1398},"\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>",1779378195682]