[{"data":1,"prerenderedAt":1355},["ShallowReactive",2],{"productsSearch":3,"openSourceSearch":132,"postsSearch":270,"guidesSearch":1072,"blog-we-will-launch-your-ai-app":1116,"guides-post-null":7,"guides-posts-null":7,"header-products":1151,"footer-products":1198,"header-open-source":1245,"footer-open-source":1300},[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,808,812,817,821,826,831,836,841,846,851,856,861,866,871,875,880,885,890,895,900,905,910,915,920,925,930,934,939,944,949,954,959,963,967,971,976,980,985,989,993,997,1001,1006,1011,1016,1020,1024,1029,1034,1039,1044,1048,1053,1058,1063,1068],{"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\u002Foauth-and-other-authentication-methods","OAuth and Other Authentication Methods",[413],"2026-04-14",{"path":784,"title":785,"categories":786,"date":787},"\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":789,"title":790,"categories":791,"date":792},"\u002Fblog\u002Fpartial-reloads-with-inertiajs","Partial Reloads with InertiaJS",[604],"2024-01-20",{"path":794,"title":795,"categories":796,"date":797},"\u002Fblog\u002Fpassword-security-validation-with-vuejs-and-zxcvbn","Password Security Validation with VueJS and zxcvbn",[604],"2020-05-06",{"path":799,"title":800,"categories":801,"date":802},"\u002Fblog\u002Fplanning-your-laravel-and-vuejs-spa-application-admin-section","Planning your Laravel and VueJS SPA Application Admin Section",[282],"2018-08-14",{"path":804,"title":805,"categories":806,"date":807},"\u002Fblog\u002Fpost-put-and-patch-requests-with-nuxt-3","POST, PUT, and PATCH Requests with Nuxt 3",[275],"2022-05-03",{"path":809,"title":810,"categories":811,"date":717},"\u002Fblog\u002Fpost-put-patch-requests-with-vuejs-and-axios","POST, PUT & PATCH Requests with VueJS and Axios",[276],{"path":813,"title":814,"categories":815,"date":816},"\u002Fblog\u002Fprevent-website-downtime-cloud-outage-survival-guide","Prevent Website Downtime with this Cloud Outage Survival Guide",[293],"2016-12-05",{"path":818,"title":819,"categories":820,"date":530},"\u002Fblog\u002Fpreview-file-uploads-with-axios-and-vuejs","Preview File Uploads with Axios and VueJS",[276],{"path":822,"title":823,"categories":824,"date":825},"\u002Fblog\u002Fpreview-mp3-with-html5-audio-element-and-vuejs","Preview MP3 with HTML5 Audio Element and VueJS",[276],"2021-10-19",{"path":827,"title":828,"categories":829,"date":830},"\u002Fblog\u002Fpreview-video-before-uploading-with-html5-and-vuejs","Preview Video Before Uploading with HTML5 and VueJS",[276],"2021-10-25",{"path":832,"title":833,"categories":834,"date":835},"\u002Fblog\u002Fpreviewing-a-csv-file-with-vuejs-and-papaparse","Previewing a CSV file with VueJS and Papaparse",[276],"2021-11-01",{"path":837,"title":838,"categories":839,"date":840},"\u002Fblog\u002Fpublic-private-api-laravel","Public and Private API with Laravel",[282],"2017-12-28",{"path":842,"title":843,"categories":844,"date":845},"\u002Fblog\u002Fre-using-vuejs-mixins-filtering-google-map-data","Re-using VueJS Mixins and Filtering Google Map Data",[276],"2017-12-11",{"path":847,"title":848,"categories":849,"date":850},"\u002Fblog\u002Froast-designs-have-been-updated","Roast Designs Have Been Updated",[276,282],"2018-05-16",{"path":852,"title":853,"categories":854,"date":855},"\u002Fblog\u002Froast-is-on-laravel-5-6","Roast is on Laravel 5.6!",[276,282],"2018-06-13",{"path":857,"title":858,"categories":859,"date":860},"\u002Fblog\u002Fsearch-eloquent-relationships-with-laravel-scout-and-meilisearch","Search Eloquent Relationships with Laravel Scout and Meilisearch",[282],"2022-03-28",{"path":862,"title":863,"categories":864,"date":865},"\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":867,"title":868,"categories":869,"date":870},"\u002Fblog\u002Fsending-server-sent-events-with-laravel","Sending Server Sent Events (SSE) with Laravel",[282],"2025-12-09",{"path":872,"title":873,"categories":874,"date":448},"\u002Fblog\u002Fset-song-played-percentage-amplitudejs","Set Song Played Percentage with AmplitudeJS",[321],{"path":876,"title":877,"categories":878,"date":879},"\u002Fblog\u002Fsetting-page-titles-in-nuxt-3","Setting Page Titles in Nuxt 3",[275],"2022-03-22",{"path":881,"title":882,"categories":883,"date":884},"\u002Fblog\u002Fsorting-in-vuejs-components-and-vuex-state","Sorting in VueJS Components and Vuex State",[275],"2018-09-25",{"path":886,"title":887,"categories":888,"date":889},"\u002Fblog\u002Fsorting-meilisearch-results-with-laravel-scout-and-eloquent","Sorting Meilisearch Results with Laravel Scout and Eloquent",[282],"2022-04-04",{"path":891,"title":892,"categories":893,"date":894},"\u002Fblog\u002Fspa-tutorial-update-2","SPA Tutorial Update 2",[282,276],"2017-11-13",{"path":896,"title":897,"categories":898,"date":899},"\u002Fblog\u002Fspa-tutorial-update-3","SPA Tutorial Update 3",[282,276],"2017-12-04",{"path":901,"title":902,"categories":903,"date":904},"\u002Fblog\u002Fspa-tutorial-update-4","SPA Tutorial Update 4",[282,276],"2017-12-21",{"path":906,"title":907,"categories":908,"date":909},"\u002Fblog\u002Fspin-launch-deploy-laravel-like-a-pro","Spin v3: Deploy Laravel Like A Pro",[293,282],"2025-03-19",{"path":911,"title":912,"categories":913,"date":914},"\u002Fblog\u002Fstream-terminal-output-to-browser","Stream Terminal Output To Browser",[282],"2025-12-16",{"path":916,"title":917,"categories":918,"date":919},"\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":921,"title":922,"categories":923,"date":924},"\u002Fblog\u002Fstyle-the-html-5-audio-element","Tutorial: How To Style the HTML 5 Audio Player",[321],"2012-10-21",{"path":926,"title":927,"categories":928,"date":929},"\u002Fblog\u002Ftagging-with-laravel","Tagging With Laravel",[321],"2017-11-27",{"path":931,"title":932,"categories":933,"date":398},"\u002Fblog\u002Ftutorial-progress","SPA Tutorial Progress Update",[282],{"path":935,"title":936,"categories":937,"date":938},"\u002Fblog\u002Funique-elements-in-amplitudejs","Unique Elements in AmplitudeJS",[321],"2018-09-06",{"path":940,"title":941,"categories":942,"date":943},"\u002Fblog\u002Fupgrade-your-ubiquiti-usg-firmware-the-easy-way","Upgrade your Ubiquiti USG firmware the easy way",[299,300],"2017-12-01",{"path":945,"title":946,"categories":947,"date":948},"\u002Fblog\u002Fuploading-files-vuejs-axios","Uploading Files With VueJS and Axios",[276],"2017-12-13",{"path":950,"title":951,"categories":952,"date":953},"\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":955,"title":956,"categories":957,"date":958},"\u002Fblog\u002Fusing-amplitudejs-public-methods","Using AmplitudeJS Public Methods",[276],"2018-09-13",{"path":960,"title":961,"categories":962,"date":277},"\u002Fblog\u002Fusing-async-data-in-nuxt-3","Using asyncData in Nuxt 3",[275],{"path":964,"title":965,"categories":966,"date":443},"\u002Fblog\u002Fusing-axios-to-make-api-requests-with-vuejs","Using Axios to Make API Requests With VueJS",[276],{"path":968,"title":969,"categories":970,"date":879},"\u002Fblog\u002Fusing-environment-variables-in-nuxt-3","Using Environment Variables in Nuxt 3",[275],{"path":972,"title":973,"categories":974,"date":975},"\u002Fblog\u002Fusing-foundation-sites-laravel-5-3-webpack","Using Foundation Sites with Laravel 5.3 and Webpack",[282],"2017-02-24",{"path":977,"title":978,"categories":979,"date":717},"\u002Fblog\u002Fusing-laravel-mix-in-a-wordpress-theme","Using Laravel Mix in a WordPress Theme",[321],{"path":981,"title":982,"categories":983,"date":984},"\u002Fblog\u002Fusing-laravel-sanctum-airlock-with-nuxtjs","Using Laravel Sanctum\u002FAirlock with NuxtJS",[282],"2020-01-17",{"path":986,"title":987,"categories":988,"date":787},"\u002Fblog\u002Fusing-nuxtjs-to-build-an-ios-and-android-app","Using NuxtJS to Build an iOS and Android App",[275],{"path":990,"title":991,"categories":992,"date":398},"\u002Fblog\u002Fusing-sass-vue-components-laravel-mix","Using SASS in Vue Components with Laravel Mix",[276],{"path":994,"title":995,"categories":996,"date":438},"\u002Fblog\u002Fusing-stripe-elements-in-a-vuejs-component","Using Stripe Elements in a VueJS Component",[276],{"path":998,"title":999,"categories":1000,"date":787},"\u002Fblog\u002Fusing-tailwindcss-to-design-your-mobile-app","Using TailwindCSS to Design Your Mobile App",[276],{"path":1002,"title":1003,"categories":1004,"date":1005},"\u002Fblog\u002Fusing-vuex-modules-inside-components","Using Vuex Modules Inside Components",[276],"2017-10-19",{"path":1007,"title":1008,"categories":1009,"date":1010},"\u002Fblog\u002Fusing-vuex-with-inertiajs","Using Vuex with InertiaJS",[604],"2021-09-21",{"path":1012,"title":1013,"categories":1014,"date":1015},"\u002Fblog\u002Fvalidating-api-request-javascript-laravel","Validating an API request with Javascript and Laravel",[282,321],"2017-10-30",{"path":1017,"title":1018,"categories":1019,"date":879},"\u002Fblog\u002Fvue-3-web-notification-component","Vue 3 Web Notification Component",[276],{"path":1021,"title":1022,"categories":1023,"date":504},"\u002Fblog\u002Fvue-js-tag-input","Vue JS Tag input",[276],{"path":1025,"title":1026,"categories":1027,"date":1028},"\u002Fblog\u002Fvue-router-navigation-guards-vuex","Vue Router Navigation Guards with Vuex",[276],"2018-01-08",{"path":1030,"title":1031,"categories":1032,"date":1033},"\u002Fblog\u002Fvue-router-permission-recipes-and-laravel-policies-examples","Vue Router Permission Recipes and Laravel Policies Examples",[276],"2018-09-18",{"path":1035,"title":1036,"categories":1037,"date":1038},"\u002Fblog\u002Fvuejs-app-admin-screens","VueJS App Admin Screens",[276],"2018-09-11",{"path":1040,"title":1041,"categories":1042,"date":1043},"\u002Fblog\u002Fvuejs-route-permissions-security-and-admin-section","VueJS Route Permissions, Security and Admin Section",[276],"2018-09-04",{"path":1045,"title":1046,"categories":1047,"date":393},"\u002Fblog\u002Fvuepress-within-a-laravel-application","Vuepress Within a Laravel Application",[276],{"path":1049,"title":1050,"categories":1051,"date":1052},"\u002Fblog\u002Fwe-will-launch-your-ai-app","We Will Launch Your AI App",[413],"2026-07-17",{"path":1054,"title":1055,"categories":1056,"date":1057},"\u002Fblog\u002Fwhat-is-amplitude-js","What Is AmplitudeJS?",[321],"2018-08-22",{"path":1059,"title":1060,"categories":1061,"date":1062},"\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":1064,"title":1065,"categories":1066,"date":1067},"\u002Fblog\u002Fwhy-make-your-saas-self-hostable","Why Make Your SaaS Self-Hostable?",[413],"2026-01-28",{"path":1069,"title":1070,"categories":1071,"date":1057},"\u002Fblog\u002Fworking-with-amplitudejs-song-object-metadata","Working With AmplitudeJS Song Object Metadata",[321],[1073,1077,1081,1085,1089,1093,1097,1100,1104,1108,1112],{"path":1074,"title":1075,"categories":1076},"\u002Fguides\u002Famplitudejs-from-the-ground-up","AmplitudeJS From the Ground Up",[321],{"path":1078,"title":1079,"categories":1080},"\u002Fguides\u002Fapi-driven-development-laravel-vuejs","API Driven Development With Laravel and VueJS",[282,276],{"path":1082,"title":1083,"categories":1084},"\u002Fguides\u002Fcomplete-ubiquiti-unifi-synology-network-build","Complete Ubiquiti UniFi + Synology Network Build",[299,300,554],{"path":1086,"title":1087,"categories":1088},"\u002Fguides\u002Fdesigning-your-saas-app-to-be-self-hostable","Designing Your SaaS App to be Self-Hostable",[413],{"path":1090,"title":1091,"categories":1092},"\u002Fguides\u002Fgain-flexibility-and-increase-privacy-with-wireguard-vpn","Gain Flexibility and Increase Privacy with WireGuard VPN",[300],{"path":1094,"title":1095,"categories":1096},"\u002Fguides\u002Fguide-uploading-files-vuejs-axios","Guide to Uploading Files with VueJS and Axios",[321,276],{"path":1098,"title":987,"categories":1099},"\u002Fguides\u002Fhow-to-build-an-ios-android-app-with-capacitorjs-nuxtjs-tailwindcss",[321,276,275],{"path":1101,"title":1102,"categories":1103},"\u002Fguides\u002Fupgrading-nuxt-2-to-nuxt-3","Upgrading Nuxt 2 to Nuxt 3",[275,276],{"path":1105,"title":1106,"categories":1107},"\u002Fguides\u002Fusing-fetch-api-with-vuejs","Using Fetch API with Vue.js",[321,276],{"path":1109,"title":1110,"categories":1111},"\u002Fguides\u002Fusing-laravel-cashier-with-vuejs-spa-and-laravel-passport-api","Using Laravel Cashier with VueJS SPA and Laravel Passport API",[321,276],{"path":1113,"title":1114,"categories":1115},"\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":1117,"title":1050,"author":1118,"body":1119,"categories":1145,"date":1052,"description":1146,"extension":16,"guide":7,"header_image":92,"meta":1147,"navigation":17,"path":1049,"seo":1148,"stem":1149,"video_url":7,"__hash__":1150},"blog\u002Fblog\u002Fwe-will-launch-your-ai-app.md","danpastori",{"type":22,"value":1120,"toc":1143},[1121,1125,1128,1131,1134],[1122,1123,1124],"p",{},"AI is incredibly powerful. You can literally build a huge app with a small team to accomplish tasks beyond your wildest dreams. However,it's one step to build an app for yourself. It's an entirely different step to deploy that app to customers. That's where we can help!",[1122,1126,1127],{},"When you build an app with AI, your prompts determine the outcome. So much of the success of the outcome is knowing what to ask in the first place. While the results may feel like what you are looking for, there could be a mess behind the scenes. Not knowing where to look for security, scalability issues, architecture instabilities, etc. will come back to haunt you. Let alone, getting the app off the computer and into an environment that works and scales with your app is a whole different beast.",[1122,1129,1130],{},"With over 15 years of experience in app development and server deployment, we can help launch your AI app to production! Here's what this looks like. The first step will be to jump into your code and do a comprehensive evaluation. We will combine our years of experience to look at what you already have and evaluate it for a production build. Once we have our checklist, we will clean up your app and prepare it for launch. This not only ensures the code is ready for what you have already created, but we also bake into our experience context and guidelines for future features designed with your AI agent. You will ship better, more secure, architecturally stable code!",[1122,1132,1133],{},"When we validate your app is ready, we will work with you to deploy it to the provider of your choice. We will work with you to choose a provider where you won't get a surprise bill, but a stable, monthly cost that works with you and your expectations. This isn't a one time, here you go, your app is deployed. This is a full build pipeline that enables you to ship code as soon as you are ready. Your AI agents will be able to develop features and deploy them in a battle tested CI\u002FCD environment. We will also make sure to provide context and guardrails for your AI agents so they understand that this isn't just an app that lives on your machine. This is an app people use.",[1122,1135,1136,1137,1142],{},"We live in exciting times where you can start creating the apps of your dreams! We want to help make sure your app survives for the long term and you can share it with your customers. Ready to get started? Visit ",[1138,1139,1141],"a",{"href":1140},"\u002Fhire-us","Hire Us",", select your plan and we will get to work.",{"title":25,"searchDepth":26,"depth":26,"links":1144},[],[413],"Create an app using AI but have no idea how to get it from your computer to production? Let us help!",{},{"title":1050,"description":1146},"blog\u002Fwe-will-launch-your-ai-app","jYTrWBIZ-d7n6pXYyCMDKOgrbgCUlnmqKHWBcSCkV88",[1152,1161,1170,1179,1188],{"id":5,"title":6,"badge":7,"badges":1153,"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":1156,"screenshot":28,"short_description":29,"short_title":7,"stem":30,"trial_url":31,"type":32,"url":33,"__hash__":34},[1154,1155],{"label":10,"color":11},{"label":13,"color":14},{"body":1157},{"type":22,"value":1158,"toc":1159},[],{"title":25,"searchDepth":26,"depth":26,"links":1160},[],{"id":36,"title":37,"badge":7,"badges":1162,"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":1165,"screenshot":50,"short_description":51,"short_title":7,"stem":52,"trial_url":53,"type":32,"url":54,"__hash__":55},[1163,1164],{"label":40,"color":11},{"label":13,"color":14},{"body":1166},{"type":22,"value":1167,"toc":1168},[],{"title":25,"searchDepth":26,"depth":26,"links":1169},[],{"id":57,"title":58,"badge":59,"badges":1171,"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":1174,"screenshot":74,"short_description":75,"short_title":7,"stem":76,"trial_url":7,"type":32,"url":77,"__hash__":78},[1172,1173],{"label":40,"color":11},{"label":63,"color":64},{"body":1175},{"type":22,"value":1176,"toc":1177},[],{"title":25,"searchDepth":26,"depth":26,"links":1178},[],{"id":80,"title":81,"badge":7,"badges":1180,"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":1183,"screenshot":100,"short_description":101,"short_title":102,"stem":103,"trial_url":7,"type":104,"url":105,"__hash__":106},[1181,1182],{"label":84,"color":85},{"label":87,"color":88},{"body":1184},{"type":22,"value":1185,"toc":1186},[],{"title":25,"searchDepth":26,"depth":26,"links":1187},[],{"id":108,"title":109,"badge":7,"badges":1189,"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":1193,"screenshot":126,"short_description":127,"short_title":128,"stem":129,"trial_url":7,"type":104,"url":130,"__hash__":131},[1190,1191,1192],{"label":84,"color":85},{"label":87,"color":88},{"label":114,"color":115},{"body":1194},{"type":22,"value":1195,"toc":1196},[],{"title":25,"searchDepth":26,"depth":26,"links":1197},[],[1199,1208,1217,1226,1235],{"id":5,"title":6,"badge":7,"badges":1200,"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":1203,"screenshot":28,"short_description":29,"short_title":7,"stem":30,"trial_url":31,"type":32,"url":33,"__hash__":34},[1201,1202],{"label":10,"color":11},{"label":13,"color":14},{"body":1204},{"type":22,"value":1205,"toc":1206},[],{"title":25,"searchDepth":26,"depth":26,"links":1207},[],{"id":36,"title":37,"badge":7,"badges":1209,"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":1212,"screenshot":50,"short_description":51,"short_title":7,"stem":52,"trial_url":53,"type":32,"url":54,"__hash__":55},[1210,1211],{"label":40,"color":11},{"label":13,"color":14},{"body":1213},{"type":22,"value":1214,"toc":1215},[],{"title":25,"searchDepth":26,"depth":26,"links":1216},[],{"id":57,"title":58,"badge":59,"badges":1218,"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":1221,"screenshot":74,"short_description":75,"short_title":7,"stem":76,"trial_url":7,"type":32,"url":77,"__hash__":78},[1219,1220],{"label":40,"color":11},{"label":63,"color":64},{"body":1222},{"type":22,"value":1223,"toc":1224},[],{"title":25,"searchDepth":26,"depth":26,"links":1225},[],{"id":80,"title":81,"badge":7,"badges":1227,"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":1230,"screenshot":100,"short_description":101,"short_title":102,"stem":103,"trial_url":7,"type":104,"url":105,"__hash__":106},[1228,1229],{"label":84,"color":85},{"label":87,"color":88},{"body":1231},{"type":22,"value":1232,"toc":1233},[],{"title":25,"searchDepth":26,"depth":26,"links":1234},[],{"id":108,"title":109,"badge":7,"badges":1236,"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":1240,"screenshot":126,"short_description":127,"short_title":128,"stem":129,"trial_url":7,"type":104,"url":130,"__hash__":131},[1237,1238,1239],{"label":84,"color":85},{"label":87,"color":88},{"label":114,"color":115},{"body":1241},{"type":22,"value":1242,"toc":1243},[],{"title":25,"searchDepth":26,"depth":26,"links":1244},[],[1246,1255,1264,1273,1282,1291],{"id":134,"title":135,"badge":7,"badges":1247,"description":143,"extension":16,"external":92,"github_slug":144,"logo_square":145,"logo_wide":146,"meta":1250,"repo_url":152,"screenshot":153,"short_description":154,"short_title":155,"stem":156,"type":157,"url":158,"__hash__":159},[1248,1249],{"label":138,"color":139},{"label":141,"color":142},{"body":1251},{"type":22,"value":1252,"toc":1253},[],{"title":25,"searchDepth":26,"depth":26,"links":1254},[],{"id":161,"title":162,"badge":7,"badges":1256,"description":167,"extension":16,"external":92,"github_slug":168,"logo_square":67,"logo_wide":169,"meta":1259,"repo_url":175,"screenshot":176,"short_description":177,"short_title":7,"stem":178,"type":179,"url":180,"__hash__":181},[1257,1258],{"label":138,"color":139},{"label":166,"color":14},{"body":1260},{"type":22,"value":1261,"toc":1262},[],{"title":25,"searchDepth":26,"depth":26,"links":1263},[],{"id":183,"title":184,"badge":7,"badges":1265,"description":189,"extension":16,"external":92,"github_slug":190,"logo_square":191,"logo_wide":192,"meta":1268,"repo_url":198,"screenshot":199,"short_description":200,"short_title":7,"stem":201,"type":202,"url":203,"__hash__":204},[1266,1267],{"label":138,"color":139},{"label":188,"color":85},{"body":1269},{"type":22,"value":1270,"toc":1271},[],{"title":25,"searchDepth":26,"depth":26,"links":1272},[],{"id":206,"title":207,"badge":7,"badges":1274,"description":213,"extension":16,"external":92,"github_slug":214,"logo_square":215,"logo_wide":216,"meta":1277,"repo_url":222,"screenshot":223,"short_description":224,"short_title":7,"stem":225,"type":226,"url":227,"__hash__":228},[1275,1276],{"label":138,"color":139},{"label":211,"color":212},{"body":1278},{"type":22,"value":1279,"toc":1280},[],{"title":25,"searchDepth":26,"depth":26,"links":1281},[],{"id":230,"title":231,"badge":7,"badges":1283,"description":236,"extension":16,"external":92,"github_slug":237,"logo_square":238,"logo_wide":239,"meta":1286,"repo_url":245,"screenshot":246,"short_description":247,"short_title":7,"stem":248,"type":226,"url":249,"__hash__":250},[1284,1285],{"label":138,"color":139},{"label":235,"color":14},{"body":1287},{"type":22,"value":1288,"toc":1289},[],{"title":25,"searchDepth":26,"depth":26,"links":1290},[],{"id":252,"title":253,"badge":7,"badges":1292,"description":257,"extension":16,"external":17,"github_slug":258,"logo_square":259,"logo_wide":7,"meta":1295,"repo_url":265,"screenshot":7,"short_description":266,"short_title":267,"stem":268,"type":157,"url":265,"__hash__":269},[1293,1294],{"label":138,"color":139},{"label":141,"color":142},{"body":1296},{"type":22,"value":1297,"toc":1298},[],{"title":25,"searchDepth":26,"depth":26,"links":1299},[],[1301,1310,1319,1328,1337,1346],{"id":134,"title":135,"badge":7,"badges":1302,"description":143,"extension":16,"external":92,"github_slug":144,"logo_square":145,"logo_wide":146,"meta":1305,"repo_url":152,"screenshot":153,"short_description":154,"short_title":155,"stem":156,"type":157,"url":158,"__hash__":159},[1303,1304],{"label":138,"color":139},{"label":141,"color":142},{"body":1306},{"type":22,"value":1307,"toc":1308},[],{"title":25,"searchDepth":26,"depth":26,"links":1309},[],{"id":161,"title":162,"badge":7,"badges":1311,"description":167,"extension":16,"external":92,"github_slug":168,"logo_square":67,"logo_wide":169,"meta":1314,"repo_url":175,"screenshot":176,"short_description":177,"short_title":7,"stem":178,"type":179,"url":180,"__hash__":181},[1312,1313],{"label":138,"color":139},{"label":166,"color":14},{"body":1315},{"type":22,"value":1316,"toc":1317},[],{"title":25,"searchDepth":26,"depth":26,"links":1318},[],{"id":183,"title":184,"badge":7,"badges":1320,"description":189,"extension":16,"external":92,"github_slug":190,"logo_square":191,"logo_wide":192,"meta":1323,"repo_url":198,"screenshot":199,"short_description":200,"short_title":7,"stem":201,"type":202,"url":203,"__hash__":204},[1321,1322],{"label":138,"color":139},{"label":188,"color":85},{"body":1324},{"type":22,"value":1325,"toc":1326},[],{"title":25,"searchDepth":26,"depth":26,"links":1327},[],{"id":206,"title":207,"badge":7,"badges":1329,"description":213,"extension":16,"external":92,"github_slug":214,"logo_square":215,"logo_wide":216,"meta":1332,"repo_url":222,"screenshot":223,"short_description":224,"short_title":7,"stem":225,"type":226,"url":227,"__hash__":228},[1330,1331],{"label":138,"color":139},{"label":211,"color":212},{"body":1333},{"type":22,"value":1334,"toc":1335},[],{"title":25,"searchDepth":26,"depth":26,"links":1336},[],{"id":230,"title":231,"badge":7,"badges":1338,"description":236,"extension":16,"external":92,"github_slug":237,"logo_square":238,"logo_wide":239,"meta":1341,"repo_url":245,"screenshot":246,"short_description":247,"short_title":7,"stem":248,"type":226,"url":249,"__hash__":250},[1339,1340],{"label":138,"color":139},{"label":235,"color":14},{"body":1342},{"type":22,"value":1343,"toc":1344},[],{"title":25,"searchDepth":26,"depth":26,"links":1345},[],{"id":252,"title":253,"badge":7,"badges":1347,"description":257,"extension":16,"external":17,"github_slug":258,"logo_square":259,"logo_wide":7,"meta":1350,"repo_url":265,"screenshot":7,"short_description":266,"short_title":267,"stem":268,"type":157,"url":265,"__hash__":269},[1348,1349],{"label":138,"color":139},{"label":141,"color":142},{"body":1351},{"type":22,"value":1352,"toc":1353},[],{"title":25,"searchDepth":26,"depth":26,"links":1354},[],1784307669131]