[{"data":1,"prerenderedAt":1498},["ShallowReactive",2],{"productsSearch":3,"openSourceSearch":132,"postsSearch":270,"guidesSearch":1062,"\u002Fcommunity-guidelines\u002F":1106,"header-products":1294,"footer-products":1341,"header-open-source":1388,"footer-open-source":1443},[4,35,56,79,107],{"id":5,"title":6,"badge":7,"badges":8,"buy_url":7,"complete_package_url":7,"description":15,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":18,"logo_wide":19,"meta":20,"screenshot":28,"short_description":29,"short_title":7,"stem":30,"trial_url":31,"type":32,"url":33,"__hash__":34},"products\u002Fproducts\u002F1.selfhost-pro.md","Self-Host Pro",null,[9,12],{"label":10,"color":11},"Docker","#2970FF",{"label":13,"color":14},"Product Feedback","#EF6820","Sell self-hosted software in minutes. Push your Docker image, connect Stripe, and let your customers install with a single command.","md",true,"\u002Flogos\u002Fselfhostpro-white-icon.svg","\u002Flogos\u002Fselfhostpro.svg",{"body":21},{"type":22,"value":23,"toc":24},"minimark",[],{"title":25,"searchDepth":26,"depth":26,"links":27},"",2,[],"\u002Fscreenshots\u002Fselfhostpro.png","Sell self-hosted software in minutes.","products\u002F1.selfhost-pro","https:\u002F\u002Fapp.selfhostpro.com\u002Fregister","saas","https:\u002F\u002Fselfhostpro.com","gypXiPoYhs1B7AY78sbauHLg211rppYZ09jAPGvFsUc",{"id":36,"title":37,"badge":7,"badges":38,"buy_url":7,"complete_package_url":7,"description":42,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":43,"logo_wide":44,"meta":45,"screenshot":50,"short_description":51,"short_title":7,"stem":52,"trial_url":53,"type":32,"url":54,"__hash__":55},"products\u002Fproducts\u002F2.bugflow.md","Bugflow",[39,41],{"label":40,"color":11},"Self-hosted",{"label":13,"color":14},"Improve your product through visual product feedback. Bugflow captures feedback from customers and internal testers and puts them into your existing project management flow.","\u002Flogos\u002Fbugflow-icon.svg","\u002Flogos\u002Fbugflow.svg",{"body":46},{"type":22,"value":47,"toc":48},[],{"title":25,"searchDepth":26,"depth":26,"links":49},[],"\u002Fscreenshots\u002Fbugflow.png","Get product feedback directly in GitHub, GitLab, and more.","products\u002F2.bugflow","https:\u002F\u002Fapp.bugflow.io\u002Fregister","https:\u002F\u002Fbugflow.io","Y_xd9HKE2TRfS8ESktytwfmJpXu0e059YwSKRkwv2CY",{"id":57,"title":58,"badge":59,"badges":60,"buy_url":65,"complete_package_url":7,"description":66,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":67,"logo_wide":68,"meta":69,"screenshot":74,"short_description":75,"short_title":7,"stem":76,"trial_url":7,"type":32,"url":77,"__hash__":78},"products\u002Fproducts\u002F3.spin-pro.md","Spin Pro","New",[61,62],{"label":40,"color":11},{"label":63,"color":64},"Starter Kit","#EE46BC","https:\u002F\u002Fstore.serversideup.net\u002Fbuy\u002F9cf51bbc-2a86-4ea1-958b-c4d69e05cde6?checkout%5Bdiscount_code%5D=FIRST50","Based on a collection of our open source projects, Spin Pro enables Laravel Pros to ship software with the power of a PaaS to any VPS host of their choice. Available as PAY ONCE infrastructure.","\u002Flogos\u002Fspin-icon.svg","\u002Flogos\u002Fspin-pro.svg",{"body":70},{"type":22,"value":71,"toc":72},[],{"title":25,"searchDepth":26,"depth":26,"links":73},[],"\u002Fscreenshots\u002Fspin-pro.png","Production-ready Docker templates for shipping quickly.","products\u002F3.spin-pro","https:\u002F\u002Fgetspin.pro","QXhl5EbmucVt6wLNUnGN9Hr5kCb-qrrTq3TnfnCa6Ik",{"id":80,"title":81,"badge":7,"badges":82,"buy_url":89,"complete_package_url":89,"description":90,"essentials_url":91,"extension":16,"external":92,"logo_component":93,"logo_square":94,"logo_wide":7,"meta":95,"screenshot":100,"short_description":101,"short_title":102,"stem":103,"trial_url":7,"type":104,"url":105,"__hash__":106},"products\u002Fproducts\u002F4.browser-extensions-book.md","Building Browser Extensions",[83,86],{"label":84,"color":85},"Book","#17B26A",{"label":87,"color":88},"Source Code","#0BA5EC","https:\u002F\u002Fstore.serversideup.net\u002Fcheckout\u002Fbuy\u002F5ec75643-2fc5-4366-ae67-213a217c4e54?checkout","Learn how to efficiently build browser extensions for every major browser from the same codebase. Source code examples for every major JavaScript framework is included.","https:\u002F\u002Fstore.serversideup.net\u002Fcheckout\u002Fbuy\u002F96e2d787-e797-4e13-9c8d-0aeb7b687844",false,"LogosChrome","\u002Flogos\u002Fchrome.svg",{"body":96},{"type":22,"value":97,"toc":98},[],{"title":25,"searchDepth":26,"depth":26,"links":99},[],"\u002Fscreenshots\u002Fbrowser-extensions-book.png","Build browser extensions for Firefox, Chrome, and more.","Building Browser Ext.","products\u002F4.browser-extensions-book","book","\u002Fproducts\u002Fbuilding-multi-platform-browser-extensions\u002F","s5qFx4_mAvZQ1oY9mxqJtMDG-IUpZ4viKXGB2cpCqUE",{"id":108,"title":109,"badge":7,"badges":110,"buy_url":116,"complete_package_url":116,"description":117,"essentials_url":118,"extension":16,"external":92,"logo_component":119,"logo_square":120,"logo_wide":7,"meta":121,"screenshot":126,"short_description":127,"short_title":128,"stem":129,"trial_url":7,"type":104,"url":130,"__hash__":131},"products\u002Fproducts\u002F5.api-spa-book.md","Ultimate Guide To Building APIs & SPAs",[111,112,113],{"label":84,"color":85},{"label":87,"color":88},{"label":114,"color":115},"Videos","#7A5AF8","https:\u002F\u002Fserversideup.lemonsqueezy.com\u002Fcheckout\u002Fbuy\u002F10d32965-4348-4502-a8cc-cf4895c4a841?checkout%5Bdiscount_code%5D=LAUNCHCOMPLETE","Learn how you can use a Laravel API with a Nuxt frontend. You'll then learn how you can take that same Nuxt code and compile it into iOS and Android apps using the same codebase with Capacitor. Includes source code, Figma templates, videos, and more.","https:\u002F\u002Fserversideup.lemonsqueezy.com\u002Fcheckout\u002Fbuy\u002F69a4e541-e74b-4c40-9cde-15fd9a13c6da?checkout%5Bdiscount_code%5D=LAUNCHESSENTIALS","LogosAppStore","\u002Flogos\u002Fapp-store-icon.svg",{"body":122},{"type":22,"value":123,"toc":124},[],{"title":25,"searchDepth":26,"depth":26,"links":125},[],"\u002Fscreenshots\u002Fapi-book.png","Build web and mobile apps from the same codebase.","Guide to APIs & SPAs","products\u002F5.api-spa-book","\u002Fproducts\u002Fultimate-guide-to-building-apis-and-spas-with-laravel-and-nuxt3\u002F","D4l8dwFfsCcIeSTW_mGwnj9ntvx-ndSDzDga4syx2R8",[133,160,182,205,229,251],{"id":134,"title":135,"badge":7,"badges":136,"description":143,"extension":16,"external":92,"github_slug":144,"logo_square":145,"logo_wide":146,"meta":147,"repo_url":152,"screenshot":153,"short_description":154,"short_title":155,"stem":156,"type":157,"url":158,"__hash__":159},"openSource\u002Fopen-source\u002F1.docker-php.md","Docker PHP",[137,140],{"label":138,"color":139},"Open Source","#85888E",{"label":141,"color":142},"Docker Image","#2E90FA","Our open source PHP Docker images are production-ready and optimized for Laravel and WordPress. Configuration is a breeze with environment variables. Choose between FPM+NGINX, NGINX Unit, and more.","serversideup\u002Fdocker-php","\u002Flogos\u002Fdocker-php-icon.svg","\u002Flogos\u002Fdocker-php.svg",{"body":148},{"type":22,"value":149,"toc":150},[],{"title":25,"searchDepth":26,"depth":26,"links":151},[],"https:\u002F\u002Fgithub.com\u002Fserversideup\u002Fdocker-php","\u002Fscreenshots\u002Fdocker-php.png","Supercharged PHP Docker images, based off the official PHP images.","serversideup\u002Fphp","open-source\u002F1.docker-php","docker-image","https:\u002F\u002Fserversideup.net\u002Fopen-source\u002Fdocker-php\u002F","n3MDRhVVgGQLn9OfH6Hh1RXTN2LO0npzihr14Ju_Q8Y",{"id":161,"title":162,"badge":7,"badges":163,"description":167,"extension":16,"external":92,"github_slug":168,"logo_square":67,"logo_wide":169,"meta":170,"repo_url":175,"screenshot":176,"short_description":177,"short_title":7,"stem":178,"type":179,"url":180,"__hash__":181},"openSource\u002Fopen-source\u002F2.spin.md","Spin",[164,165],{"label":138,"color":139},{"label":166,"color":14},"Deployment Tool","Get the power of running a PaaS on any VPS host of your choice. Run your application in a 100% replicated workflow on macOS, Windows, and Linux all using Docker.","serversideup\u002Fspin","\u002Flogos\u002Fspin.svg",{"body":171},{"type":22,"value":172,"toc":173},[],{"title":25,"searchDepth":26,"depth":26,"links":174},[],"https:\u002F\u002Fgithub.com\u002Fserversideup\u002Fspin","\u002Fscreenshots\u002Fspin.png","Docker Simplified. Deploy Anywhere. Zero Downtime. Any OS.","open-source\u002F2.spin","tool","https:\u002F\u002Fserversideup.net\u002Fopen-source\u002Fspin\u002F","3wkEWcMFZ07pUCDQR2PS0I3BE0GhqZWUUWEl9Ne2hks",{"id":183,"title":184,"badge":7,"badges":185,"description":189,"extension":16,"external":92,"github_slug":190,"logo_square":191,"logo_wide":192,"meta":193,"repo_url":198,"screenshot":199,"short_description":200,"short_title":7,"stem":201,"type":202,"url":203,"__hash__":204},"openSource\u002Fopen-source\u002F3.financial-freedom.md","Financial Freedom",[186,187],{"label":138,"color":139},{"label":188,"color":85},"Budgeting Tool","An open source alternative to Mint and YNAB. Track your expenses and never worry about your financial data being used by investors again.","serversideup\u002Ffinancial-freedom","\u002Flogos\u002Ffinancial-freedom-white-icon.svg","\u002Flogos\u002Ffinancial-freedom.svg",{"body":194},{"type":22,"value":195,"toc":196},[],{"title":25,"searchDepth":26,"depth":26,"links":197},[],"https:\u002F\u002Fgithub.com\u002Fserversideup\u002Ffinancial-freedom","\u002Fscreenshots\u002Ffinancial-freedom.png","Open source alternative to Mint, YNAB, and more.","open-source\u002F3.financial-freedom","app","https:\u002F\u002Fserversideup.net\u002Fopen-source\u002Ffinancial-freedom\u002F","Jg0Q8582POghRvbb20PbbEAhD1TE9wqX0eaazoaNmXI",{"id":206,"title":207,"badge":7,"badges":208,"description":213,"extension":16,"external":92,"github_slug":214,"logo_square":215,"logo_wide":216,"meta":217,"repo_url":222,"screenshot":223,"short_description":224,"short_title":7,"stem":225,"type":226,"url":227,"__hash__":228},"openSource\u002Fopen-source\u002F4.amplitudejs.md","AmplitudeJS",[209,210],{"label":138,"color":139},{"label":211,"color":212},"HTML5 Audio Library","#6172F3","Gain full control of the web audio element in HTML5. Design your audio player to exactly match your vision. Use visualizers to take your audio to the next level.","521dimensions\u002Famplitudejs","\u002Flogos\u002Famplitude-white-icon.svg","\u002Flogos\u002Famplitudejs.svg",{"body":218},{"type":22,"value":219,"toc":220},[],{"title":25,"searchDepth":26,"depth":26,"links":221},[],"https:\u002F\u002Fgithub.com\u002Fserversideup\u002Famplitudejs","\u002Fscreenshots\u002Famplitude.png","Customize the design of any element of the HTML5 Audio Player.","open-source\u002F4.amplitudejs","library","https:\u002F\u002Fserversideup.net\u002Fopen-source\u002Famplitudejs\u002F","R3gWpQhxl9MpRlgAmUDocJIiXI4GkM2rlVh4zNa4vC8",{"id":230,"title":231,"badge":7,"badges":232,"description":236,"extension":16,"external":92,"github_slug":237,"logo_square":238,"logo_wide":239,"meta":240,"repo_url":245,"screenshot":246,"short_description":247,"short_title":7,"stem":248,"type":226,"url":249,"__hash__":250},"openSource\u002Fopen-source\u002F5.webext-bridge.md","webext-bridge",[233,234],{"label":138,"color":139},{"label":235,"color":14},"Browser Extensions","Simplify the communication between your browser extension's components with a type-safe messaging library for Chrome, Firefox, and Edge.","serversideup\u002Fwebext-bridge","\u002Flogos\u002Fweb-ext-bridge-icon.svg","\u002Flogos\u002Fwebext-bridge.svg",{"body":241},{"type":22,"value":242,"toc":243},[],{"title":25,"searchDepth":26,"depth":26,"links":244},[],"https:\u002F\u002Fgithub.com\u002Fserversideup\u002Fwebext-bridge","\u002Fscreenshots\u002Fwebext-bridge.png","Messaging in Web Extensions made easy. Batteries included.","open-source\u002F5.webext-bridge","https:\u002F\u002Fserversideup.net\u002Fopen-source\u002Fwebext-bridge\u002F","vo7OidHO3fjG5C819Z2hkTIj_IG0QiB_Ubqsi7bWLM8",{"id":252,"title":253,"badge":7,"badges":254,"description":257,"extension":16,"external":17,"github_slug":258,"logo_square":259,"logo_wide":7,"meta":260,"repo_url":265,"screenshot":7,"short_description":266,"short_title":267,"stem":268,"type":157,"url":265,"__hash__":269},"openSource\u002Fopen-source\u002F6.docker-ansible.md","Docker Ansible",[255,256],{"label":138,"color":139},{"label":141,"color":142},"Run Ansible anywhere with a lightweight and powerful Docker image for automation and configuration management.","serversideup\u002Fdocker-ansible","\u002Flogos\u002Fansible-icon.svg",{"body":261},{"type":22,"value":262,"toc":263},[],{"title":25,"searchDepth":26,"depth":26,"links":264},[],"https:\u002F\u002Fgithub.com\u002Fserversideup\u002Fdocker-ansible","Run Ansible anywhere with a lightweight and powerful Docker image.","serversideup\u002Fansible","open-source\u002F6.docker-ansible","77f1RaRu4xdWkmjM6pVXwQqXxN0nlTEu6zFcMthppzQ",[271,278,284,289,295,302,307,312,317,323,328,333,338,343,348,353,358,363,369,374,379,384,389,394,399,404,409,415,420,425,430,434,439,444,449,454,459,463,467,471,476,481,485,490,495,500,505,510,515,520,526,531,535,541,546,550,556,561,566,571,576,580,585,590,595,600,606,611,616,621,626,631,636,641,646,651,656,661,666,671,675,680,685,690,695,700,705,709,713,718,723,728,732,737,742,747,752,756,760,764,769,773,778,783,788,793,798,803,807,812,816,821,826,831,836,841,846,851,856,861,866,870,875,880,885,890,895,900,905,910,915,920,925,929,934,939,944,949,954,958,962,966,971,975,980,984,988,992,996,1001,1006,1011,1015,1019,1024,1029,1034,1039,1043,1048,1053,1058],{"path":272,"title":273,"categories":274,"date":277},"\u002Fblog\u002Faccessing-route-parameters-in-nuxt-3","Accessing Route Parameters in Nuxt 3",[275,276],"nuxt","vue","2022-03-30",{"path":279,"title":280,"categories":281,"date":283},"\u002Fblog\u002Fadd-api-end-points-laravel","Add Laravel API Endpoints",[282],"laravel","2017-10-09",{"path":285,"title":286,"categories":287,"date":288},"\u002Fblog\u002Fadding-laravel-user-profiles","Adding Laravel User Profiles",[282],"2018-01-11",{"path":290,"title":291,"categories":292,"date":294},"\u002Fblog\u002Fadding-server-configurations-within-your-laravel-app","Adding server configurations within your Laravel App",[282,293],"devops","2023-05-24",{"path":296,"title":297,"categories":298,"date":301},"\u002Fblog\u002Fadopt-a-ubiquiti-usg-to-a-unifi-cloud-controller-automate-device-deployments","Adopt a Ubiquiti USG to a UniFi Cloud Controller & automate device deployments",[299,300],"unifi","networking","2018-06-20",{"path":303,"title":304,"categories":305,"date":306},"\u002Fblog\u002Fadvanced-data-fetching-with-nuxt-3","Advanced Data Fetching with Nuxt 3",[275],"2023-01-26",{"path":308,"title":309,"categories":310,"date":311},"\u002Fblog\u002Fadvanced-meilisearch-queries-with-laravel-scout","Advanced Meilisearch Queries with Laravel Scout",[282],"2022-04-18",{"path":313,"title":314,"categories":315,"date":316},"\u002Fblog\u002Fadvanced-vuex-4-tips","Advanced Vuex 4 Tips",[276],"2021-09-28",{"path":318,"title":319,"categories":320,"date":322},"\u002Fblog\u002Famplitudejs-configuration-options","AmplitudeJS Configuration Options",[321],"javascript","2018-09-20",{"path":324,"title":325,"categories":326,"date":327},"\u002Fblog\u002Famplitudejs-live-stream-html5-audio","AmplitudeJS for Live Stream HTML5 Audio",[321],"2014-04-05",{"path":329,"title":330,"categories":331,"date":332},"\u002Fblog\u002Fanimista-css-with-vuejs-transitions","Animista CSS Animations with VueJS Transitions",[276],"2018-05-17",{"path":334,"title":335,"categories":336,"date":337},"\u002Fblog\u002Fapi-form-submissions-javascript-vuex-laravel","API Driven Form Submissions with Javascript, Vuex and Laravel",[282,276],"2017-10-26",{"path":339,"title":340,"categories":341,"date":342},"\u002Fblog\u002Fappend-gravatar-attribute-to-the-laravel-eloquent-user-model","Append Gravatar Attribute to the Laravel Eloquent User Model",[282],"2021-12-07",{"path":344,"title":345,"categories":346,"date":347},"\u002Fblog\u002Fautomatic-controller-assignment-unifi-dhcp-option-43-mikrotik-routers","Automatic Controller Assignment for UniFi DHCP Option 43 on Mikrotik Routers",[299,300],"2017-09-13",{"path":349,"title":350,"categories":351,"date":352},"\u002Fblog\u002Fbasic-get-requests-with-fetch-api-and-vuejs","Basic GET Requests with Fetch API and VueJS",[276],"2020-11-18",{"path":354,"title":355,"categories":356,"date":357},"\u002Fblog\u002Fbeginning-vuex-4-with-vue-3","Beginning Vuex 4 with Vue 3",[276],"2021-09-07",{"path":359,"title":360,"categories":361,"date":362},"\u002Fblog\u002Fbest-practices-for-planning-for-unifi-video","Best practices for planning for UniFi Video",[299,300],"2018-06-22",{"path":364,"title":365,"categories":366,"date":368},"\u002Fblog\u002Fbrowser-extension-messaging","Browser Extension Messaging",[367],"browserextensions","2023-12-12",{"path":370,"title":371,"categories":372,"date":373},"\u002Fblog\u002Fbuild-an-api-wrapper-with-vuejs-axios","Build an API Wrapper with VueJS & Axios",[276],"2020-11-16",{"path":375,"title":376,"categories":377,"date":378},"\u002Fblog\u002Fbuild-api-requests-javascript","Build Out API Requests in Javascript",[321],"2017-10-12",{"path":380,"title":381,"categories":382,"date":383},"\u002Fblog\u002Fbuild-vuex-module","Build a Vuex Module",[276],"2017-10-16",{"path":385,"title":386,"categories":387,"date":388},"\u002Fblog\u002Fbuilding-a-queue-with-vue-3-and-vuex-4","Building a Queue with Vue 3 and Vuex 4",[276],"2022-03-17",{"path":390,"title":391,"categories":392,"date":393},"\u002Fblog\u002Fbuilding-a-single-song-player","Building a Single Song Player",[321],"2018-08-30",{"path":395,"title":396,"categories":397,"date":398},"\u002Fblog\u002Fbuilding-page-layout-vue-router","Building a Page Layout for Vue Router",[282,276],"2017-10-23",{"path":400,"title":401,"categories":402,"date":403},"\u002Fblog\u002Fcaching-api-endpoints-with-laravel","Caching API Endpoints with Laravel",[282],"2022-09-27",{"path":405,"title":406,"categories":407,"date":408},"\u002Fblog\u002Fcapturing-an-image-from-an-html5-canvas-or-video-element","Capturing an image from an HTML5 Canvas or Video Element",[321],"2021-10-05",{"path":410,"title":411,"categories":412,"date":414},"\u002Fblog\u002Fchoosing-your-services-and-database","Choosing Your Services and Database",[413],"programming","2026-03-26",{"path":416,"title":417,"categories":418,"date":419},"\u002Fblog\u002Fcisco-ios-command-cheat-sheet-for-routers-and-switches","Cisco IOS Command Cheat Sheet for Routers and Switches",[293],"2011-11-22",{"path":421,"title":422,"categories":423,"date":424},"\u002Fblog\u002Fclean-vuejs-public-private-routes","VueJS Route Security and Authentication",[276],"2018-01-04",{"path":426,"title":427,"categories":428,"date":429},"\u002Fblog\u002Fcollections-blueprints-and-entries-with-statamic-3","Collections, Blueprints, and Entries with Statamic 3",[282],"2022-03-12",{"path":431,"title":432,"categories":433,"date":362},"\u002Fblog\u002Fconfigure-a-secure-guest-wireless-network-using-vlans-firewalls-and-throttling","Configure a secure guest wireless network using VLANs, firewalls, and throttling",[299,300],{"path":435,"title":436,"categories":437,"date":438},"\u002Fblog\u002Fconfigure-stripe-to-work-with-laravel-cashier-in-laravel-6","Configure Stripe to Work with Laravel Cashier in Laravel 6",[282],"2019-12-17",{"path":440,"title":441,"categories":442,"date":443},"\u002Fblog\u002Fconfiguring-axios-globally-with-vuejs","Configuring Axios Globally with VueJS",[276],"2020-08-03",{"path":445,"title":446,"categories":447,"date":448},"\u002Fblog\u002Fconfiguring-js-sass-single-page-app","Configuring JS and SASS for a Single Page App",[276,282],"2017-09-28",{"path":450,"title":451,"categories":452,"date":453},"\u002Fblog\u002Fconfiguring-vue-router-single-page-app","Configuring Vue Router for a Single Page App",[276],"2019-08-10",{"path":455,"title":456,"categories":457,"date":458},"\u002Fblog\u002Fcordova-app-icon-sizes","Creating Cordova App Icon Sizes the Fast Way",[321],"2017-08-31",{"path":460,"title":461,"categories":462,"date":438},"\u002Fblog\u002Fcreating-a-stripe-subscription-with-laravel-cashier-laravel-passport","Creating a Stripe Subscription with Laravel Cashier + Laravel Passport",[282,276],{"path":464,"title":465,"categories":466,"date":438},"\u002Fblog\u002Fcreating-saas-products-in-stripe-to-sell-with-laravel-cashier","Creating SAAS Products in Stripe to Sell with Laravel Cashier",[282],{"path":468,"title":469,"categories":470,"date":438},"\u002Fblog\u002Fcreating-stripe-setup-intents-with-laravel-api-and-vuejs-spa","Creating Stripe Setup Intents With Laravel API and VueJS SPA",[276],{"path":472,"title":473,"categories":474,"date":475},"\u002Fblog\u002Fcustom-component-v-model-attribute-with-vue-3","Custom Component v-model attribute with Vue 3",[276],"2022-01-27",{"path":477,"title":478,"categories":479,"date":480},"\u002Fblog\u002Fcustom-google-maps-info-windows","Custom Google Maps Info Windows",[276],"2017-11-09",{"path":482,"title":483,"categories":484,"date":480},"\u002Fblog\u002Fcustom-markers-google-map","Custom Markers on Google Map",[276],{"path":486,"title":487,"categories":488,"date":489},"\u002Fblog\u002Fcustomize-google-map-info-windows","Customize Google Map Info Windows",[276],"2017-12-14",{"path":491,"title":492,"categories":493,"date":494},"\u002Fblog\u002Fcustomize-html-audio-css-amplitudejs","Customize HTML Audio via CSS -- Introducing AmplitudeJS",[321],"2014-04-04",{"path":496,"title":497,"categories":498,"date":499},"\u002Fblog\u002Fcustomizing-and-displaying-tags-in-statamic-3","Customizing and Displaying Tags in Statamic 3",[282],"2022-03-15",{"path":501,"title":502,"categories":503,"date":504},"\u002Fblog\u002Fdeploy-unifi-cloud-controller-5-10-minutes","Deploy a UniFi Cloud Controller for $5 and under 10 minutes",[299,300],"2017-11-30",{"path":506,"title":507,"categories":508,"date":509},"\u002Fblog\u002Fdesigning-an-installation-script","Designing an Installation Script",[413],"2026-04-08",{"path":511,"title":512,"categories":513,"date":514},"\u002Fblog\u002Fdetect-if-click-is-inside-an-element-with-javascript","Detect if Click is Inside an Element with JavaScript",[321],"2022-10-11",{"path":516,"title":517,"categories":518,"date":519},"\u002Fblog\u002Fdisplaying-resources-google-map-vue-js","Displaying Resources on a Google Map With Vue JS",[276],"2017-11-06",{"path":521,"title":522,"categories":523,"date":525},"\u002Fblog\u002Fdocker-compose-bind-mounts-vs-named-volumes","Docker Compose Bind Mounts vs Named Volumes: When to Use Each",[524,293],"docker","2026-04-02",{"path":527,"title":528,"categories":529,"date":530},"\u002Fblog\u002Fdrag-and-drop-file-uploads-with-vuejs-and-axios","Drag and Drop File Uploads with VueJS and Axios",[276],"2018-01-09",{"path":532,"title":533,"categories":534,"date":311},"\u002Fblog\u002Fdynamic-api-requests-with-nuxt-3","Dynamic API Requests with Nuxt 3",[275],{"path":536,"title":537,"categories":538,"date":540},"\u002Fblog\u002Fdynamic-autocomplete-options-with-ajax-javascript-jquery-and-php","Dynamic Autocomplete Options with AJAX, Javascript, JQuery and PHP",[321,539],"php","2012-10-08",{"path":542,"title":543,"categories":544,"date":545},"\u002Fblog\u002Fdynamic-forms-vuejs","Dynamic Forms with VueJS",[276],"2017-11-16",{"path":547,"title":548,"categories":549,"date":545},"\u002Fblog\u002Feloquent-parent-child-relationship-laravel","Eloquent Parent Child Relationship in Laravel",[282],{"path":551,"title":552,"categories":553,"date":555},"\u002Fblog\u002Fenable-key-based-ssh-authentication-on-synology-servers","Enable key-based SSH authentication on Synology servers",[554],"synology","2018-08-28",{"path":557,"title":558,"categories":559,"date":560},"\u002Fblog\u002Fevent-handler-tips-for-javascript-and-vuejs","Event Handler Tips for JavaScript and VueJS",[276],"2022-09-13",{"path":562,"title":563,"categories":564,"date":565},"\u002Fblog\u002Ffavoriting-liking-laravel-vuejs","Favoriting or Liking With Laravel and VueJS",[276,282],"2017-11-20",{"path":567,"title":568,"categories":569,"date":570},"\u002Fblog\u002Ffetch-api-components-with-vue-3-composition-api","Fetch API Components with Vue 3 Composition API",[276],"2021-11-30",{"path":572,"title":573,"categories":574,"date":575},"\u002Fblog\u002Ffile-management-with-vuejs-and-laravel","File Management with VueJS and Laravel",[276,282],"2018-01-15",{"path":577,"title":578,"categories":579,"date":530},"\u002Fblog\u002Ffile-upload-progress-indicator-with-axios-and-vuejs","File Upload Progress Indicator with Axios and VueJS",[276],{"path":581,"title":582,"categories":583,"date":584},"\u002Fblog\u002Ffile-uploads-using-fetch-api-and-vuejs","File Uploads using Fetch API and VueJS",[276],"2021-11-23",{"path":586,"title":587,"categories":588,"date":589},"\u002Fblog\u002Ffilter-sort-and-search-arrays-with-javascript","Filter, Sort, and Search Arrays with JavaScript",[321],"2022-10-04",{"path":591,"title":592,"categories":593,"date":594},"\u002Fblog\u002Ffiltering-meilisearch-search-results-with-laravel-scout","Filtering Meilisearch Search Results with Laravel Scout",[282],"2022-04-11",{"path":596,"title":597,"categories":598,"date":599},"\u002Fblog\u002Ffiltering-vuejs-mixins","Filtering with VueJS Mixins",[282],"2017-12-07",{"path":601,"title":602,"categories":603,"date":605},"\u002Fblog\u002Fflash-data-with-inertiajs","Flash Data with InertiaJS",[604],"inertiajs","2025-07-31",{"path":607,"title":608,"categories":609,"date":610},"\u002Fblog\u002Fgenerating-wireguard-qr-codes-for-fast-mobile-deployments","Generating WireGuard QR codes for fast mobile deployments",[300],"2020-05-25",{"path":612,"title":613,"categories":614,"date":615},"\u002Fblog\u002Fgeocode-address-google-maps","Geocode An Address With Google Maps",[282],"2017-11-02",{"path":617,"title":618,"categories":619,"date":620},"\u002Fblog\u002Fget-active-element-with-javascript","Get Active Element with JavaScript",[321],"2022-10-18",{"path":622,"title":623,"categories":624,"date":625},"\u002Fblog\u002Fgetting-started-with-wireguard-vpn-important-concepts","Getting started with WireGuard VPN: Important Concepts",[300],"2020-05-21",{"path":627,"title":628,"categories":629,"date":630},"\u002Fblog\u002Fgoodbye-wordpress-hello-new-cms","Goodbye WordPress, Hello New CMS",[275,321],"2025-06-10",{"path":632,"title":633,"categories":634,"date":635},"\u002Fblog\u002Fgoogle-analytics-vue-router-single-page-application","Google Analytics with Vue Router in an SPA",[276],"2017-12-18",{"path":637,"title":638,"categories":639,"date":640},"\u002Fblog\u002Fhow-to-configure-a-wireguard-android-vpn-client","How to configure a WireGuard Android VPN Client",[300],"2020-05-27",{"path":642,"title":643,"categories":644,"date":645},"\u002Fblog\u002Fhow-to-configure-a-wireguard-ios-client","How to configure a WireGuard iOS client",[300],"2020-05-26",{"path":647,"title":648,"categories":649,"date":650},"\u002Fblog\u002Fhow-to-configure-a-wireguard-macos-client","How to configure a WireGuard macOS client",[300],"2020-05-24",{"path":652,"title":653,"categories":654,"date":655},"\u002Fblog\u002Fhow-to-configure-a-wireguard-windows-10-vpn-client","How to configure a WireGuard Windows 10 VPN client",[300],"2020-05-23",{"path":657,"title":658,"categories":659,"date":660},"\u002Fblog\u002Fhow-to-get-ssh-to-work-with-1password-docker-desktop-macos-within-a-container","How to Get SSH to Work with 1Password, Docker Desktop, and macOS Within a Container",[293],"2024-10-11",{"path":662,"title":663,"categories":664,"date":665},"\u002Fblog\u002Fhow-to-preload-css-background-images","How to Preload CSS Background Images",[321],"2018-09-27",{"path":667,"title":668,"categories":669,"date":670},"\u002Fblog\u002Fhow-to-set-up-wireguard-vpn-server-on-ubuntu-20-04","How to set up WireGuard VPN server on Ubuntu 20.04",[293,300],"2020-05-22",{"path":672,"title":673,"categories":674,"date":504},"\u002Fblog\u002Fimplementing-tagging-component","Implementing the Vue JS Tag Component",[276],{"path":676,"title":677,"categories":678,"date":679},"\u002Fblog\u002Fimportance-of-repeatable-environments","Importance of Repeatable Environments",[413],"2026-03-20",{"path":681,"title":682,"categories":683,"date":684},"\u002Fblog\u002Fimporting-and-using-components-in-nuxt-3","Importing and Using Components in Nuxt 3",[275],"2022-04-19",{"path":686,"title":687,"categories":688,"date":689},"\u002Fblog\u002Finstall-unifi-video-controller-on-synology-nas-using-docker","Install UniFi Video Controller on Synology NAS using Docker",[299,554],"2018-08-29",{"path":691,"title":692,"categories":693,"date":694},"\u002Fblog\u002Finstalling-and-preparing-your-synology-server","Installing and preparing your Synology Server",[554,300],"2018-06-23",{"path":696,"title":697,"categories":698,"date":699},"\u002Fblog\u002Finstalling-configuring-laravel-passport","Installing and Configuring Laravel Passport",[282],"2017-09-25",{"path":701,"title":702,"categories":703,"date":704},"\u002Fblog\u002Finstalling-configuring-laravel-socialite","Installing And Configuring Laravel Socialite",[282],"2017-09-05",{"path":706,"title":707,"categories":708,"date":458},"\u002Fblog\u002Finstalling-configuring-laravel-spa","Installing and Configuring Laravel For a Single Page Application",[282],{"path":710,"title":711,"categories":712,"date":438},"\u002Fblog\u002Finstalling-laravel-cashier-on-laravel-6-x","Installing Laravel Cashier on Laravel 6.x",[282],{"path":714,"title":715,"categories":716,"date":717},"\u002Fblog\u002Finstalling-tailwindcss-in-a-wordpress-theme","Installing TailwindCSS in a WordPress Theme",[321],"2020-08-06",{"path":719,"title":720,"categories":721,"date":722},"\u002Fblog\u002Fintroducing-benchkit-laravel-performance-testing-tool","Introducing BenchKit: The Laravel Performance Testing Tool We've All Been Waiting For",[293,282],"2025-09-25",{"path":724,"title":725,"categories":726,"date":727},"\u002Fblog\u002Fintroduction-to-classes-and-oop-with-javascript","Introduction to Classes and OOP with JavaScript",[321],"2022-09-20",{"path":729,"title":730,"categories":731,"date":555},"\u002Fblog\u002Flaravel-admin-routes-and-security-in-a-spa","Laravel Admin Routes and Security in a SPA",[282],{"path":733,"title":734,"categories":735,"date":736},"\u002Fblog\u002Flaravel-gates-and-policies-in-an-api-driven-spa","Laravel Gates and Policies in an API Driven SPA",[282],"2018-08-21",{"path":738,"title":739,"categories":740,"date":741},"\u002Fblog\u002Flaravel-hcaptcha-custom-validation-rule","Laravel hCaptcha Custom Validation Rule",[282],"2020-07-06",{"path":743,"title":744,"categories":745,"date":746},"\u002Fblog\u002Flaravel-one-to-many-deployments-with-docker-ansible","Laravel: One-to-many Deployments with Docker + Ansible",[293,282],"2023-04-26",{"path":748,"title":749,"categories":750,"date":751},"\u002Fblog\u002Fmanaging-pivot-data-with-laravel-eloquent","Managing Pivot Data with Laravel Eloquent",[282],"2022-10-25",{"path":753,"title":754,"categories":755,"date":438},"\u002Fblog\u002Fmanaging-stripe-payment-methods-in-vuejs-spa-and-laravel-api","Managing Stripe Payment Methods in VueJS SPA and Laravel API",[282,276],{"path":757,"title":758,"categories":759,"date":545},"\u002Fblog\u002Fmany-many-relationships-laravel","Many To Many Relationships With Laravel",[282],{"path":761,"title":762,"categories":763,"date":327},"\u002Fblog\u002Fmedia-temple-amazon-s3-backup-and-other-linux-servers","Media Temple Amazon S3 Backup for DV (this works on other Linux servers too)",[293],{"path":765,"title":766,"categories":767,"date":768},"\u002Fblog\u002Fmigrating-from-wordpress-to-nuxt-content","Migrating from WordPress to Nuxt Content",[275],"2025-09-04",{"path":770,"title":771,"categories":772,"date":388},"\u002Fblog\u002Fmigrating-layouts-from-nuxt-2-to-nuxt-3","Migrating Layouts from Nuxt 2 to Nuxt 3",[275],{"path":774,"title":775,"categories":776,"date":777},"\u002Fblog\u002Fnginx-unit-fixing-value-doesnt-exist","NGINX Unit: Fixing \"Value doesn't exist.\"",[293,524],"2023-10-24",{"path":779,"title":780,"categories":781,"date":782},"\u002Fblog\u002Fpackaging-a-nuxtjs-app-for-ios-and-android-with-capacitorjs","Packaging a NuxtJS app for iOS and Android with CapacitorJS",[275],"2020-08-16",{"path":784,"title":785,"categories":786,"date":787},"\u002Fblog\u002Fpartial-reloads-with-inertiajs","Partial Reloads with InertiaJS",[604],"2024-01-20",{"path":789,"title":790,"categories":791,"date":792},"\u002Fblog\u002Fpassword-security-validation-with-vuejs-and-zxcvbn","Password Security Validation with VueJS and zxcvbn",[604],"2020-05-06",{"path":794,"title":795,"categories":796,"date":797},"\u002Fblog\u002Fplanning-your-laravel-and-vuejs-spa-application-admin-section","Planning your Laravel and VueJS SPA Application Admin Section",[282],"2018-08-14",{"path":799,"title":800,"categories":801,"date":802},"\u002Fblog\u002Fpost-put-and-patch-requests-with-nuxt-3","POST, PUT, and PATCH Requests with Nuxt 3",[275],"2022-05-03",{"path":804,"title":805,"categories":806,"date":717},"\u002Fblog\u002Fpost-put-patch-requests-with-vuejs-and-axios","POST, PUT & PATCH Requests with VueJS and Axios",[276],{"path":808,"title":809,"categories":810,"date":811},"\u002Fblog\u002Fprevent-website-downtime-cloud-outage-survival-guide","Prevent Website Downtime with this Cloud Outage Survival Guide",[293],"2016-12-05",{"path":813,"title":814,"categories":815,"date":530},"\u002Fblog\u002Fpreview-file-uploads-with-axios-and-vuejs","Preview File Uploads with Axios and VueJS",[276],{"path":817,"title":818,"categories":819,"date":820},"\u002Fblog\u002Fpreview-mp3-with-html5-audio-element-and-vuejs","Preview MP3 with HTML5 Audio Element and VueJS",[276],"2021-10-19",{"path":822,"title":823,"categories":824,"date":825},"\u002Fblog\u002Fpreview-video-before-uploading-with-html5-and-vuejs","Preview Video Before Uploading with HTML5 and VueJS",[276],"2021-10-25",{"path":827,"title":828,"categories":829,"date":830},"\u002Fblog\u002Fpreviewing-a-csv-file-with-vuejs-and-papaparse","Previewing a CSV file with VueJS and Papaparse",[276],"2021-11-01",{"path":832,"title":833,"categories":834,"date":835},"\u002Fblog\u002Fpublic-private-api-laravel","Public and Private API with Laravel",[282],"2017-12-28",{"path":837,"title":838,"categories":839,"date":840},"\u002Fblog\u002Fre-using-vuejs-mixins-filtering-google-map-data","Re-using VueJS Mixins and Filtering Google Map Data",[276],"2017-12-11",{"path":842,"title":843,"categories":844,"date":845},"\u002Fblog\u002Froast-designs-have-been-updated","Roast Designs Have Been Updated",[276,282],"2018-05-16",{"path":847,"title":848,"categories":849,"date":850},"\u002Fblog\u002Froast-is-on-laravel-5-6","Roast is on Laravel 5.6!",[276,282],"2018-06-13",{"path":852,"title":853,"categories":854,"date":855},"\u002Fblog\u002Fsearch-eloquent-relationships-with-laravel-scout-and-meilisearch","Search Eloquent Relationships with Laravel Scout and Meilisearch",[282],"2022-03-28",{"path":857,"title":858,"categories":859,"date":860},"\u002Fblog\u002Fsending-post-put-and-patch-requests-with-fetch-api-and-vuejs","Sending POST, PUT, and PATCH Requests with Fetch API and VueJS",[276],"2021-11-15",{"path":862,"title":863,"categories":864,"date":865},"\u002Fblog\u002Fsending-server-sent-events-with-laravel","Sending Server Sent Events (SSE) with Laravel",[282],"2025-12-09",{"path":867,"title":868,"categories":869,"date":448},"\u002Fblog\u002Fset-song-played-percentage-amplitudejs","Set Song Played Percentage with AmplitudeJS",[321],{"path":871,"title":872,"categories":873,"date":874},"\u002Fblog\u002Fsetting-page-titles-in-nuxt-3","Setting Page Titles in Nuxt 3",[275],"2022-03-22",{"path":876,"title":877,"categories":878,"date":879},"\u002Fblog\u002Fsorting-in-vuejs-components-and-vuex-state","Sorting in VueJS Components and Vuex State",[275],"2018-09-25",{"path":881,"title":882,"categories":883,"date":884},"\u002Fblog\u002Fsorting-meilisearch-results-with-laravel-scout-and-eloquent","Sorting Meilisearch Results with Laravel Scout and Eloquent",[282],"2022-04-04",{"path":886,"title":887,"categories":888,"date":889},"\u002Fblog\u002Fspa-tutorial-update-2","SPA Tutorial Update 2",[282,276],"2017-11-13",{"path":891,"title":892,"categories":893,"date":894},"\u002Fblog\u002Fspa-tutorial-update-3","SPA Tutorial Update 3",[282,276],"2017-12-04",{"path":896,"title":897,"categories":898,"date":899},"\u002Fblog\u002Fspa-tutorial-update-4","SPA Tutorial Update 4",[282,276],"2017-12-21",{"path":901,"title":902,"categories":903,"date":904},"\u002Fblog\u002Fspin-launch-deploy-laravel-like-a-pro","Spin v3: Deploy Laravel Like A Pro",[293,282],"2025-03-19",{"path":906,"title":907,"categories":908,"date":909},"\u002Fblog\u002Fstream-terminal-output-to-browser","Stream Terminal Output To Browser",[282],"2025-12-16",{"path":911,"title":912,"categories":913,"date":914},"\u002Fblog\u002Fstructuring-vue-2-vue-router-vuex-single-page-application","Structuring Vue 2, Vue Router, Vuex for a Single Page Application",[276],"2017-10-02",{"path":916,"title":917,"categories":918,"date":919},"\u002Fblog\u002Fstyle-the-html-5-audio-element","Tutorial: How To Style the HTML 5 Audio Player",[321],"2012-10-21",{"path":921,"title":922,"categories":923,"date":924},"\u002Fblog\u002Ftagging-with-laravel","Tagging With Laravel",[321],"2017-11-27",{"path":926,"title":927,"categories":928,"date":398},"\u002Fblog\u002Ftutorial-progress","SPA Tutorial Progress Update",[282],{"path":930,"title":931,"categories":932,"date":933},"\u002Fblog\u002Funique-elements-in-amplitudejs","Unique Elements in AmplitudeJS",[321],"2018-09-06",{"path":935,"title":936,"categories":937,"date":938},"\u002Fblog\u002Fupgrade-your-ubiquiti-usg-firmware-the-easy-way","Upgrade your Ubiquiti USG firmware the easy way",[299,300],"2017-12-01",{"path":940,"title":941,"categories":942,"date":943},"\u002Fblog\u002Fuploading-files-vuejs-axios","Uploading Files With VueJS and Axios",[276],"2017-12-13",{"path":945,"title":946,"categories":947,"date":948},"\u002Fblog\u002Furl-query-parameters-with-javascript-vue-2-and-vue-3","URL Query Parameters with JavaScript, Vue 2 and Vue 3",[276],"2022-09-06",{"path":950,"title":951,"categories":952,"date":953},"\u002Fblog\u002Fusing-amplitudejs-public-methods","Using AmplitudeJS Public Methods",[276],"2018-09-13",{"path":955,"title":956,"categories":957,"date":277},"\u002Fblog\u002Fusing-async-data-in-nuxt-3","Using asyncData in Nuxt 3",[275],{"path":959,"title":960,"categories":961,"date":443},"\u002Fblog\u002Fusing-axios-to-make-api-requests-with-vuejs","Using Axios to Make API Requests With VueJS",[276],{"path":963,"title":964,"categories":965,"date":874},"\u002Fblog\u002Fusing-environment-variables-in-nuxt-3","Using Environment Variables in Nuxt 3",[275],{"path":967,"title":968,"categories":969,"date":970},"\u002Fblog\u002Fusing-foundation-sites-laravel-5-3-webpack","Using Foundation Sites with Laravel 5.3 and Webpack",[282],"2017-02-24",{"path":972,"title":973,"categories":974,"date":717},"\u002Fblog\u002Fusing-laravel-mix-in-a-wordpress-theme","Using Laravel Mix in a WordPress Theme",[321],{"path":976,"title":977,"categories":978,"date":979},"\u002Fblog\u002Fusing-laravel-sanctum-airlock-with-nuxtjs","Using Laravel Sanctum\u002FAirlock with NuxtJS",[282],"2020-01-17",{"path":981,"title":982,"categories":983,"date":782},"\u002Fblog\u002Fusing-nuxtjs-to-build-an-ios-and-android-app","Using NuxtJS to Build an iOS and Android App",[275],{"path":985,"title":986,"categories":987,"date":398},"\u002Fblog\u002Fusing-sass-vue-components-laravel-mix","Using SASS in Vue Components with Laravel Mix",[276],{"path":989,"title":990,"categories":991,"date":438},"\u002Fblog\u002Fusing-stripe-elements-in-a-vuejs-component","Using Stripe Elements in a VueJS Component",[276],{"path":993,"title":994,"categories":995,"date":782},"\u002Fblog\u002Fusing-tailwindcss-to-design-your-mobile-app","Using TailwindCSS to Design Your Mobile App",[276],{"path":997,"title":998,"categories":999,"date":1000},"\u002Fblog\u002Fusing-vuex-modules-inside-components","Using Vuex Modules Inside Components",[276],"2017-10-19",{"path":1002,"title":1003,"categories":1004,"date":1005},"\u002Fblog\u002Fusing-vuex-with-inertiajs","Using Vuex with InertiaJS",[604],"2021-09-21",{"path":1007,"title":1008,"categories":1009,"date":1010},"\u002Fblog\u002Fvalidating-api-request-javascript-laravel","Validating an API request with Javascript and Laravel",[282,321],"2017-10-30",{"path":1012,"title":1013,"categories":1014,"date":874},"\u002Fblog\u002Fvue-3-web-notification-component","Vue 3 Web Notification Component",[276],{"path":1016,"title":1017,"categories":1018,"date":504},"\u002Fblog\u002Fvue-js-tag-input","Vue JS Tag input",[276],{"path":1020,"title":1021,"categories":1022,"date":1023},"\u002Fblog\u002Fvue-router-navigation-guards-vuex","Vue Router Navigation Guards with Vuex",[276],"2018-01-08",{"path":1025,"title":1026,"categories":1027,"date":1028},"\u002Fblog\u002Fvue-router-permission-recipes-and-laravel-policies-examples","Vue Router Permission Recipes and Laravel Policies Examples",[276],"2018-09-18",{"path":1030,"title":1031,"categories":1032,"date":1033},"\u002Fblog\u002Fvuejs-app-admin-screens","VueJS App Admin Screens",[276],"2018-09-11",{"path":1035,"title":1036,"categories":1037,"date":1038},"\u002Fblog\u002Fvuejs-route-permissions-security-and-admin-section","VueJS Route Permissions, Security and Admin Section",[276],"2018-09-04",{"path":1040,"title":1041,"categories":1042,"date":393},"\u002Fblog\u002Fvuepress-within-a-laravel-application","Vuepress Within a Laravel Application",[276],{"path":1044,"title":1045,"categories":1046,"date":1047},"\u002Fblog\u002Fwhat-is-amplitude-js","What Is AmplitudeJS?",[321],"2018-08-22",{"path":1049,"title":1050,"categories":1051,"date":1052},"\u002Fblog\u002Fwhen-api-driven-development-works-and-when-it-doesnt","When API Driven Development Works... And When It Doesn't",[282],"2020-01-10",{"path":1054,"title":1055,"categories":1056,"date":1057},"\u002Fblog\u002Fwhy-make-your-saas-self-hostable","Why Make Your SaaS Self-Hostable?",[413],"2026-01-28",{"path":1059,"title":1060,"categories":1061,"date":1047},"\u002Fblog\u002Fworking-with-amplitudejs-song-object-metadata","Working With AmplitudeJS Song Object Metadata",[321],[1063,1067,1071,1075,1079,1083,1087,1090,1094,1098,1102],{"path":1064,"title":1065,"categories":1066},"\u002Fguides\u002Famplitudejs-from-the-ground-up","AmplitudeJS From the Ground Up",[321],{"path":1068,"title":1069,"categories":1070},"\u002Fguides\u002Fapi-driven-development-laravel-vuejs","API Driven Development With Laravel and VueJS",[282,276],{"path":1072,"title":1073,"categories":1074},"\u002Fguides\u002Fcomplete-ubiquiti-unifi-synology-network-build","Complete Ubiquiti UniFi + Synology Network Build",[299,300,554],{"path":1076,"title":1077,"categories":1078},"\u002Fguides\u002Fdesigning-your-saas-app-to-be-self-hostable","Designing Your SaaS App to be Self-Hostable",[413],{"path":1080,"title":1081,"categories":1082},"\u002Fguides\u002Fgain-flexibility-and-increase-privacy-with-wireguard-vpn","Gain Flexibility and Increase Privacy with WireGuard VPN",[300],{"path":1084,"title":1085,"categories":1086},"\u002Fguides\u002Fguide-uploading-files-vuejs-axios","Guide to Uploading Files with VueJS and Axios",[321,276],{"path":1088,"title":982,"categories":1089},"\u002Fguides\u002Fhow-to-build-an-ios-android-app-with-capacitorjs-nuxtjs-tailwindcss",[321,276,275],{"path":1091,"title":1092,"categories":1093},"\u002Fguides\u002Fupgrading-nuxt-2-to-nuxt-3","Upgrading Nuxt 2 to Nuxt 3",[275,276],{"path":1095,"title":1096,"categories":1097},"\u002Fguides\u002Fusing-fetch-api-with-vuejs","Using Fetch API with Vue.js",[321,276],{"path":1099,"title":1100,"categories":1101},"\u002Fguides\u002Fusing-laravel-cashier-with-vuejs-spa-and-laravel-passport-api","Using Laravel Cashier with VueJS SPA and Laravel Passport API",[321,276],{"path":1103,"title":1104,"categories":1105},"\u002Fguides\u002Fyour-guide-to-using-an-api-with-vuejs-nuxtjs-and-axios","Your Guide to Using an API with VueJS\u002FNuxtJS and Axios",[321,276],{"id":1107,"title":1108,"body":1109,"date":1286,"description":1287,"extension":16,"head":7,"meta":1288,"navigation":17,"ogImage":7,"path":1289,"robots":7,"schemaOrg":7,"seo":1290,"sitemap":1291,"stem":1292,"__hash__":1293},"content\u002Fcommunity-guidelines.md","Community Guidelines",{"type":22,"value":1110,"toc":1275},[1111,1116,1120,1123,1127,1130,1133,1136,1140,1148,1164,1167,1171,1174,1177,1180,1184,1187,1194,1197,1201,1204,1218,1225,1228,1232,1235,1252,1255,1259,1262,1266],[1112,1113,1115],"h2",{"id":1114},"this-is-a-civilized-place-for-public-discussion","This is a Civilized Place for Public Discussion",[1117,1118,1119],"p",{},"Please treat our community with the same respect you would a public park. We are a shared community resource — a place to share skills, knowledge and interests through ongoing interaction and collaboration.",[1117,1121,1122],{},"These are not hard and fast rules, merely guidelines to aid the human judgment of our community and keep this a clean and well-lighted place for civilized public discourse.",[1112,1124,1126],{"id":1125},"improve-the-discussion","Improve the Discussion",[1117,1128,1129],{},"Help us make this a great place for discussion by always working to improve the discussion in some way, however small. If you are not sure your post adds to the conversation, think over what you want to say and try again later.",[1117,1131,1132],{},"The topics discussed here matter to us, and we want you to act as if they matter to you, too. Be respectful of the topics and the people discussing them, even if you disagree with some of what is being said.",[1117,1134,1135],{},"One way to improve the discussion is by discovering ones that are already happening. Spend time browsing the topics here before replying or starting your own, and you'll have a better chance of meeting others who share your interests.",[1112,1137,1139],{"id":1138},"be-agreeable-even-when-you-disagree","Be Agreeable, Even When You Disagree",[1117,1141,1142,1143,1147],{},"You may wish to respond to something by disagreeing with it. That's fine. But remember to ",[1144,1145,1146],"em",{},"criticize ideas, not people",". Please avoid:",[1149,1150,1151,1155,1158,1161],"ul",{},[1152,1153,1154],"li",{},"Name-calling",[1152,1156,1157],{},"Ad hominem attacks",[1152,1159,1160],{},"Responding to a post's tone instead of its actual content",[1152,1162,1163],{},"Knee-jerk contradiction",[1117,1165,1166],{},"Instead, provide reasoned counter-arguments that improve the conversation.",[1112,1168,1170],{"id":1169},"your-participation-counts","Your Participation Counts",[1117,1172,1173],{},"The conversations we have here set the tone for every new arrival. Help us influence the future of this community by choosing to engage in discussions that make this forum an interesting place to be — and avoiding those that do not.",[1117,1175,1176],{},"Discourse provides tools that enable the community to collectively identify the best (and worst) contributions: bookmarks, likes, flags, replies, edits, and so forth. Use these tools to improve your own experience, and everyone else's, too.",[1117,1178,1179],{},"Let's leave our community better than we found it.",[1112,1181,1183],{"id":1182},"if-you-see-a-problem-flag-it","If You See a Problem, Flag It",[1117,1185,1186],{},"Moderators have special authority; they are responsible for this forum. But so are you. With your help, moderators can be community facilitators, not just janitors or police.",[1117,1188,1189,1190,1193],{},"When you see bad behavior, don't reply. It encourages the bad behavior by acknowledging it, consumes your energy, and wastes everyone's time. ",[1144,1191,1192],{},"Just flag it",". If enough flags accrue, action will be taken, either automatically or by moderator intervention.",[1117,1195,1196],{},"In order to maintain our community, moderators reserve the right to remove any content and any user account for any reason at any time. Moderators do not preview new posts; the moderators and site operators take no responsibility for any content posted by the community.",[1112,1198,1200],{"id":1199},"always-be-civil","Always Be Civil",[1117,1202,1203],{},"Nothing sabotages a healthy conversation like rudeness:",[1149,1205,1206,1209,1212,1215],{},[1152,1207,1208],{},"Be civil. Don't post anything that a reasonable person would consider offensive, abusive, or hate speech.",[1152,1210,1211],{},"Keep it clean. Don't post anything obscene or sexually explicit.",[1152,1213,1214],{},"Respect each other. Don't harass or grief anyone, impersonate people, or expose their private information.",[1152,1216,1217],{},"Respect our forum. Don't post spam or otherwise vandalize the forum.",[1117,1219,1220,1221,1224],{},"These are not concrete terms with precise definitions — avoid even the ",[1144,1222,1223],{},"appearance"," of any of these things. If you're unsure, ask yourself how you would feel if your post was featured on the front page of the New York Times.",[1117,1226,1227],{},"This is a public forum, and search engines index these discussions. Keep the language, links, and images safe for family and friends.",[1112,1229,1231],{"id":1230},"keep-it-tidy","Keep It Tidy",[1117,1233,1234],{},"Make the effort to put things in the right place, so that we can spend more time discussing and less cleaning up. So:",[1149,1236,1237,1240,1243,1246,1249],{},[1152,1238,1239],{},"Don't start a topic in the wrong category.",[1152,1241,1242],{},"Don't cross-post the same thing in multiple topics.",[1152,1244,1245],{},"Don't post no-content replies.",[1152,1247,1248],{},"Don't divert a topic by changing it midstream.",[1152,1250,1251],{},"Don't sign your posts — every post has your profile information attached to it.",[1117,1253,1254],{},"Rather than posting \"+1\" or \"Agreed\", use the Like button. Rather than taking an existing topic in a radically different direction, use Reply as a Linked Topic.",[1112,1256,1258],{"id":1257},"post-only-your-own-stuff","Post Only Your Own Stuff",[1117,1260,1261],{},"You may not post anything digital that belongs to someone else without permission. You may not post descriptions of, links to, or methods for stealing someone's intellectual property (software, video, audio, images), or for breaking any other law.",[1112,1263,1265],{"id":1264},"terms-of-service-and-community-guidelines","Terms of Service and Community Guidelines",[1117,1267,1268,1269,1274],{},"Yes, legalese is boring, but we must protect ourselves – and by extension, you and your data – against unfriendly folks. We have a ",[1270,1271,1273],"a",{"href":1272},"\u002Fterms\u002F","Terms of Service"," describing your (and our) behavior and rights related to content, privacy, and laws. To use this service, you must agree to abide by our TOS.",{"title":25,"searchDepth":26,"depth":26,"links":1276},[1277,1278,1279,1280,1281,1282,1283,1284,1285],{"id":1114,"depth":26,"text":1115},{"id":1125,"depth":26,"text":1126},{"id":1138,"depth":26,"text":1139},{"id":1169,"depth":26,"text":1170},{"id":1182,"depth":26,"text":1183},{"id":1199,"depth":26,"text":1200},{"id":1230,"depth":26,"text":1231},{"id":1257,"depth":26,"text":1258},{"id":1264,"depth":26,"text":1265},"2025-05-30","Guidelines for maintaining a respectful and productive community environment",{},"\u002Fcommunity-guidelines",{"title":1108,"description":1287},{"loc":1289},"community-guidelines","TFT2kyPl9MPwzyJrbOA3T9YXhTLupn1pbunGqJdGHxs",[1295,1304,1313,1322,1331],{"id":5,"title":6,"badge":7,"badges":1296,"buy_url":7,"complete_package_url":7,"description":15,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":18,"logo_wide":19,"meta":1299,"screenshot":28,"short_description":29,"short_title":7,"stem":30,"trial_url":31,"type":32,"url":33,"__hash__":34},[1297,1298],{"label":10,"color":11},{"label":13,"color":14},{"body":1300},{"type":22,"value":1301,"toc":1302},[],{"title":25,"searchDepth":26,"depth":26,"links":1303},[],{"id":36,"title":37,"badge":7,"badges":1305,"buy_url":7,"complete_package_url":7,"description":42,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":43,"logo_wide":44,"meta":1308,"screenshot":50,"short_description":51,"short_title":7,"stem":52,"trial_url":53,"type":32,"url":54,"__hash__":55},[1306,1307],{"label":40,"color":11},{"label":13,"color":14},{"body":1309},{"type":22,"value":1310,"toc":1311},[],{"title":25,"searchDepth":26,"depth":26,"links":1312},[],{"id":57,"title":58,"badge":59,"badges":1314,"buy_url":65,"complete_package_url":7,"description":66,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":67,"logo_wide":68,"meta":1317,"screenshot":74,"short_description":75,"short_title":7,"stem":76,"trial_url":7,"type":32,"url":77,"__hash__":78},[1315,1316],{"label":40,"color":11},{"label":63,"color":64},{"body":1318},{"type":22,"value":1319,"toc":1320},[],{"title":25,"searchDepth":26,"depth":26,"links":1321},[],{"id":80,"title":81,"badge":7,"badges":1323,"buy_url":89,"complete_package_url":89,"description":90,"essentials_url":91,"extension":16,"external":92,"logo_component":93,"logo_square":94,"logo_wide":7,"meta":1326,"screenshot":100,"short_description":101,"short_title":102,"stem":103,"trial_url":7,"type":104,"url":105,"__hash__":106},[1324,1325],{"label":84,"color":85},{"label":87,"color":88},{"body":1327},{"type":22,"value":1328,"toc":1329},[],{"title":25,"searchDepth":26,"depth":26,"links":1330},[],{"id":108,"title":109,"badge":7,"badges":1332,"buy_url":116,"complete_package_url":116,"description":117,"essentials_url":118,"extension":16,"external":92,"logo_component":119,"logo_square":120,"logo_wide":7,"meta":1336,"screenshot":126,"short_description":127,"short_title":128,"stem":129,"trial_url":7,"type":104,"url":130,"__hash__":131},[1333,1334,1335],{"label":84,"color":85},{"label":87,"color":88},{"label":114,"color":115},{"body":1337},{"type":22,"value":1338,"toc":1339},[],{"title":25,"searchDepth":26,"depth":26,"links":1340},[],[1342,1351,1360,1369,1378],{"id":5,"title":6,"badge":7,"badges":1343,"buy_url":7,"complete_package_url":7,"description":15,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":18,"logo_wide":19,"meta":1346,"screenshot":28,"short_description":29,"short_title":7,"stem":30,"trial_url":31,"type":32,"url":33,"__hash__":34},[1344,1345],{"label":10,"color":11},{"label":13,"color":14},{"body":1347},{"type":22,"value":1348,"toc":1349},[],{"title":25,"searchDepth":26,"depth":26,"links":1350},[],{"id":36,"title":37,"badge":7,"badges":1352,"buy_url":7,"complete_package_url":7,"description":42,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":43,"logo_wide":44,"meta":1355,"screenshot":50,"short_description":51,"short_title":7,"stem":52,"trial_url":53,"type":32,"url":54,"__hash__":55},[1353,1354],{"label":40,"color":11},{"label":13,"color":14},{"body":1356},{"type":22,"value":1357,"toc":1358},[],{"title":25,"searchDepth":26,"depth":26,"links":1359},[],{"id":57,"title":58,"badge":59,"badges":1361,"buy_url":65,"complete_package_url":7,"description":66,"essentials_url":7,"extension":16,"external":17,"logo_component":7,"logo_square":67,"logo_wide":68,"meta":1364,"screenshot":74,"short_description":75,"short_title":7,"stem":76,"trial_url":7,"type":32,"url":77,"__hash__":78},[1362,1363],{"label":40,"color":11},{"label":63,"color":64},{"body":1365},{"type":22,"value":1366,"toc":1367},[],{"title":25,"searchDepth":26,"depth":26,"links":1368},[],{"id":80,"title":81,"badge":7,"badges":1370,"buy_url":89,"complete_package_url":89,"description":90,"essentials_url":91,"extension":16,"external":92,"logo_component":93,"logo_square":94,"logo_wide":7,"meta":1373,"screenshot":100,"short_description":101,"short_title":102,"stem":103,"trial_url":7,"type":104,"url":105,"__hash__":106},[1371,1372],{"label":84,"color":85},{"label":87,"color":88},{"body":1374},{"type":22,"value":1375,"toc":1376},[],{"title":25,"searchDepth":26,"depth":26,"links":1377},[],{"id":108,"title":109,"badge":7,"badges":1379,"buy_url":116,"complete_package_url":116,"description":117,"essentials_url":118,"extension":16,"external":92,"logo_component":119,"logo_square":120,"logo_wide":7,"meta":1383,"screenshot":126,"short_description":127,"short_title":128,"stem":129,"trial_url":7,"type":104,"url":130,"__hash__":131},[1380,1381,1382],{"label":84,"color":85},{"label":87,"color":88},{"label":114,"color":115},{"body":1384},{"type":22,"value":1385,"toc":1386},[],{"title":25,"searchDepth":26,"depth":26,"links":1387},[],[1389,1398,1407,1416,1425,1434],{"id":134,"title":135,"badge":7,"badges":1390,"description":143,"extension":16,"external":92,"github_slug":144,"logo_square":145,"logo_wide":146,"meta":1393,"repo_url":152,"screenshot":153,"short_description":154,"short_title":155,"stem":156,"type":157,"url":158,"__hash__":159},[1391,1392],{"label":138,"color":139},{"label":141,"color":142},{"body":1394},{"type":22,"value":1395,"toc":1396},[],{"title":25,"searchDepth":26,"depth":26,"links":1397},[],{"id":161,"title":162,"badge":7,"badges":1399,"description":167,"extension":16,"external":92,"github_slug":168,"logo_square":67,"logo_wide":169,"meta":1402,"repo_url":175,"screenshot":176,"short_description":177,"short_title":7,"stem":178,"type":179,"url":180,"__hash__":181},[1400,1401],{"label":138,"color":139},{"label":166,"color":14},{"body":1403},{"type":22,"value":1404,"toc":1405},[],{"title":25,"searchDepth":26,"depth":26,"links":1406},[],{"id":183,"title":184,"badge":7,"badges":1408,"description":189,"extension":16,"external":92,"github_slug":190,"logo_square":191,"logo_wide":192,"meta":1411,"repo_url":198,"screenshot":199,"short_description":200,"short_title":7,"stem":201,"type":202,"url":203,"__hash__":204},[1409,1410],{"label":138,"color":139},{"label":188,"color":85},{"body":1412},{"type":22,"value":1413,"toc":1414},[],{"title":25,"searchDepth":26,"depth":26,"links":1415},[],{"id":206,"title":207,"badge":7,"badges":1417,"description":213,"extension":16,"external":92,"github_slug":214,"logo_square":215,"logo_wide":216,"meta":1420,"repo_url":222,"screenshot":223,"short_description":224,"short_title":7,"stem":225,"type":226,"url":227,"__hash__":228},[1418,1419],{"label":138,"color":139},{"label":211,"color":212},{"body":1421},{"type":22,"value":1422,"toc":1423},[],{"title":25,"searchDepth":26,"depth":26,"links":1424},[],{"id":230,"title":231,"badge":7,"badges":1426,"description":236,"extension":16,"external":92,"github_slug":237,"logo_square":238,"logo_wide":239,"meta":1429,"repo_url":245,"screenshot":246,"short_description":247,"short_title":7,"stem":248,"type":226,"url":249,"__hash__":250},[1427,1428],{"label":138,"color":139},{"label":235,"color":14},{"body":1430},{"type":22,"value":1431,"toc":1432},[],{"title":25,"searchDepth":26,"depth":26,"links":1433},[],{"id":252,"title":253,"badge":7,"badges":1435,"description":257,"extension":16,"external":17,"github_slug":258,"logo_square":259,"logo_wide":7,"meta":1438,"repo_url":265,"screenshot":7,"short_description":266,"short_title":267,"stem":268,"type":157,"url":265,"__hash__":269},[1436,1437],{"label":138,"color":139},{"label":141,"color":142},{"body":1439},{"type":22,"value":1440,"toc":1441},[],{"title":25,"searchDepth":26,"depth":26,"links":1442},[],[1444,1453,1462,1471,1480,1489],{"id":134,"title":135,"badge":7,"badges":1445,"description":143,"extension":16,"external":92,"github_slug":144,"logo_square":145,"logo_wide":146,"meta":1448,"repo_url":152,"screenshot":153,"short_description":154,"short_title":155,"stem":156,"type":157,"url":158,"__hash__":159},[1446,1447],{"label":138,"color":139},{"label":141,"color":142},{"body":1449},{"type":22,"value":1450,"toc":1451},[],{"title":25,"searchDepth":26,"depth":26,"links":1452},[],{"id":161,"title":162,"badge":7,"badges":1454,"description":167,"extension":16,"external":92,"github_slug":168,"logo_square":67,"logo_wide":169,"meta":1457,"repo_url":175,"screenshot":176,"short_description":177,"short_title":7,"stem":178,"type":179,"url":180,"__hash__":181},[1455,1456],{"label":138,"color":139},{"label":166,"color":14},{"body":1458},{"type":22,"value":1459,"toc":1460},[],{"title":25,"searchDepth":26,"depth":26,"links":1461},[],{"id":183,"title":184,"badge":7,"badges":1463,"description":189,"extension":16,"external":92,"github_slug":190,"logo_square":191,"logo_wide":192,"meta":1466,"repo_url":198,"screenshot":199,"short_description":200,"short_title":7,"stem":201,"type":202,"url":203,"__hash__":204},[1464,1465],{"label":138,"color":139},{"label":188,"color":85},{"body":1467},{"type":22,"value":1468,"toc":1469},[],{"title":25,"searchDepth":26,"depth":26,"links":1470},[],{"id":206,"title":207,"badge":7,"badges":1472,"description":213,"extension":16,"external":92,"github_slug":214,"logo_square":215,"logo_wide":216,"meta":1475,"repo_url":222,"screenshot":223,"short_description":224,"short_title":7,"stem":225,"type":226,"url":227,"__hash__":228},[1473,1474],{"label":138,"color":139},{"label":211,"color":212},{"body":1476},{"type":22,"value":1477,"toc":1478},[],{"title":25,"searchDepth":26,"depth":26,"links":1479},[],{"id":230,"title":231,"badge":7,"badges":1481,"description":236,"extension":16,"external":92,"github_slug":237,"logo_square":238,"logo_wide":239,"meta":1484,"repo_url":245,"screenshot":246,"short_description":247,"short_title":7,"stem":248,"type":226,"url":249,"__hash__":250},[1482,1483],{"label":138,"color":139},{"label":235,"color":14},{"body":1485},{"type":22,"value":1486,"toc":1487},[],{"title":25,"searchDepth":26,"depth":26,"links":1488},[],{"id":252,"title":253,"badge":7,"badges":1490,"description":257,"extension":16,"external":17,"github_slug":258,"logo_square":259,"logo_wide":7,"meta":1493,"repo_url":265,"screenshot":7,"short_description":266,"short_title":267,"stem":268,"type":157,"url":265,"__hash__":269},[1491,1492],{"label":138,"color":139},{"label":141,"color":142},{"body":1494},{"type":22,"value":1495,"toc":1496},[],{"title":25,"searchDepth":26,"depth":26,"links":1497},[],1776180309731]