[{"data":1,"prerenderedAt":19700},["ShallowReactive",2],{"navigation":3,"blog-tutorials":172,"tutorial-og-images":19699},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168],{"title":5,"path":6,"stem":7},"Advanced Custom Fields flexible content with WordPress REST API and Nuxt 3","/blog/advanced-custom-fields-flexible-content-with-wordpress-rest-api-and-nuxt-3","3.blog/advanced-custom-fields-flexible-content-with-wordpress-rest-api-and-nuxt-3",{"title":9,"path":10,"stem":11},"Best Skool Communities for Making Money in Australia in 2026","/blog/best-communities-to-make-money-in-australia","3.blog/best-communities-to-make-money-in-australia",{"title":13,"path":14,"stem":15},"daisyUI Accordion Component for Vue.js","/blog/daisyui-accordion-component-for-vue-js","3.blog/daisyui-accordion-component-for-vue-js",{"title":17,"path":18,"stem":19},"daisyUI Alert Component for Vue.js","/blog/daisyui-alert-component-for-vue-js","3.blog/daisyui-alert-component-for-vue-js",{"title":21,"path":22,"stem":23},"daisyUI Artboard Component for Vue.js","/blog/daisyui-artboard-component-for-vue-js","3.blog/daisyui-artboard-component-for-vue-js",{"title":25,"path":26,"stem":27},"daisyUI Avatar Component for Vue.js","/blog/daisyui-avatar-component-for-vue-js","3.blog/daisyui-avatar-component-for-vue-js",{"title":29,"path":30,"stem":31},"daisyUI Badge Component for Vue.js","/blog/daisyui-badge-component-for-vue-js","3.blog/daisyui-badge-component-for-vue-js",{"title":33,"path":34,"stem":35},"daisyUI Button Component for Vue.js","/blog/daisyui-button-component-for-vue-js","3.blog/daisyui-button-component-for-vue-js",{"title":37,"path":38,"stem":39},"daisyUI Checkbox Component for Vue.js","/blog/daisyui-checkbox-component-for-vue-js","3.blog/daisyui-checkbox-component-for-vue-js",{"title":41,"path":42,"stem":43},"daisyUI Countdown Component for Vue.js","/blog/daisyui-countdown-component-for-vue-js","3.blog/daisyui-countdown-component-for-vue-js",{"title":45,"path":46,"stem":47},"daisyUI First Impressions 2023","/blog/daisyui-first-impressions-2023","3.blog/daisyui-first-impressions-2023",{"title":49,"path":50,"stem":51},"Deploy Laravel to Cloudways","/blog/deploy-laravel-to-cloudways","3.blog/deploy-laravel-to-cloudways",{"title":53,"path":54,"stem":55},"Deploy Nuxt 3 on Hostinger","/blog/deploy-nuxt-3-on-hostinger","3.blog/deploy-nuxt-3-on-hostinger",{"title":57,"path":58,"stem":59},"Error: Ziggy error: route is not in the route list","/blog/error-ziggy-error-route-is-not-in-the-route-list","3.blog/error-ziggy-error-route-is-not-in-the-route-list",{"title":61,"path":62,"stem":63},"How to Install Tailwindcss in Nuxt 3","/blog/how-to-install-tailwindcss-in-nuxt-3","3.blog/how-to-install-tailwindcss-in-nuxt-3",{"title":65,"path":66,"stem":67},"How to make money on Skool","/blog/how-to-make-money-on-skool","3.blog/how-to-make-money-on-skool",{"title":69,"path":70,"stem":71},"Install DaisyUI in WordPress","/blog/install-daisyui-in-wordpress","3.blog/install-daisyui-in-wordpress",{"title":73,"path":74,"stem":75},"Install Tailwindcss in WordPress theme","/blog/install-tailwindcss-in-wordpress-theme","3.blog/install-tailwindcss-in-wordpress-theme",{"title":77,"path":78,"stem":79},"Laravel Jetstream with inertiajs on MAMP","/blog/laravel-jetstream-with-inertiajs","3.blog/laravel-jetstream-with-inertiajs",{"title":81,"path":82,"stem":83},"Most Profitable Skool Community Niches in 2026","/blog/most-profitable-skool-community-niches","3.blog/most-profitable-skool-community-niches",{"title":85,"path":86,"stem":87},"Multiple versions of ACF flexible content block","/blog/multiple-versions-of-acf-flexible-content-block","3.blog/multiple-versions-of-acf-flexible-content-block",{"title":89,"path":90,"stem":91},"Nicely designed Loft Conversion websites","/blog/nicely-designed-loft-conversion-websites","3.blog/nicely-designed-loft-conversion-websites",{"title":93,"path":94,"stem":95},"POST Request in Nuxt 3","/blog/post-request-in-nuxt-3","3.blog/post-request-in-nuxt-3",{"title":97,"path":98,"stem":99},"ReplyGuy an idiots first impression","/blog/replyguy-an-idiots-first-impression","3.blog/replyguy-an-idiots-first-impression",{"title":101,"path":102,"stem":103},"Roles and Permissions in Laravel Jetstream (Inertia.js) using Spatie Package","/blog/roles-and-permissions-in-laravel-jetstream-inertiajs-using-spatie-package","3.blog/roles-and-permissions-in-laravel-jetstream-inertiajs-using-spatie-package",{"title":105,"path":106,"stem":107},"Sam Ovens, the brains behind skool.com","/blog/sam-ovens-the-brains-behind-skool","3.blog/sam-ovens-the-brains-behind-skool",{"title":109,"path":110,"stem":111},"Seeding database in Laravel","/blog/seeding-database-in-laravel","3.blog/seeding-database-in-laravel",{"title":113,"path":114,"stem":115},"SEO meta tags with Nuxt 3 and WordPress API","/blog/seo-meta-tags-with-nuxt-3-and-wordpress-api","3.blog/seo-meta-tags-with-nuxt-3-and-wordpress-api",{"title":117,"path":118,"stem":119},"Skool Affiliate Program: How to Earn 40% Recurring Commissions","/blog/skool-affiliate-program","3.blog/skool-affiliate-program",{"title":121,"path":122,"stem":123},"Best Skool Alternatives 2026","/blog/skool-alternatives","3.blog/skool-alternatives",{"title":125,"path":126,"stem":127},"Skool Pricing 2026: Hobby vs Pro Plan Compared","/blog/skool-pricing","3.blog/skool-pricing",{"title":129,"path":130,"stem":131},"Skool Review 2026","/blog/skool-review","3.blog/skool-review",{"title":133,"path":134,"stem":135},"Skool vs Circle: Which Community Platform Is Better?","/blog/skool-vs-circle","3.blog/skool-vs-circle",{"title":137,"path":138,"stem":139},"Stop taking months to build websites","/blog/stop-taking-months-to-build-websites","3.blog/stop-taking-months-to-build-websites",{"title":141,"path":142,"stem":143},"Tailwind UI Review 2023","/blog/tailwind-ui-review-2023","3.blog/tailwind-ui-review-2023",{"title":145,"path":146,"stem":147},"Tailwind UI components in HTML","/blog/tailwindui-components-in-html","3.blog/tailwindui-components-in-html",{"title":149,"path":150,"stem":151},"The significance of Alex Hormozi’s Involvement with Skool","/blog/the-significance-of-alex-hormozis-involvement-with-skool","3.blog/the-significance-of-alex-hormozis-involvement-with-skool",{"title":153,"path":154,"stem":155},"Uploading a YouTube Video Every Day for 90 Days","/blog/uploading-a-youtube-video-every-day-for-90-days","3.blog/uploading-a-youtube-video-every-day-for-90-days",{"title":157,"path":158,"stem":159},"Using WordPress REST API with Nuxt 3 and Tailwind CSS","/blog/using-wordpress-rest-api-with-nuxt-3-and-tailwind-css","3.blog/using-wordpress-rest-api-with-nuxt-3-and-tailwind-css",{"title":161,"path":162,"stem":163},"The Blueprint: How I'm Building a £0 Upfront Agency using Nuxt","/blog/waas-blueprint","3.blog/waas-blueprint",{"title":165,"path":166,"stem":167},"What is Skool?","/blog/what-is-skool","3.blog/what-is-skool",{"title":169,"path":170,"stem":171},"WordPress API Nav Menu","/blog/wordpress-api-nav-menu","3.blog/wordpress-api-nav-menu",[173,578,1529,2012,2463,3212,3722,4390,4859,4963,5132,5623,5909,6306,6898,7084,7771,8081,8367,8749,9385,10016,10207,10794,11000,11203,11868,11988,12147,12388,13092,13952,14854,15950,17011,17042,17239,17286,17403,18439,18849,19137],{"id":174,"title":9,"archived":175,"authors":176,"badge":182,"body":184,"categories":532,"categorySlugs":533,"date":536,"description":537,"extension":538,"image":539,"meta":541,"navigation":542,"path":10,"schemaOrg":543,"seo":572,"stem":11,"__hash__":577},"posts/3.blog/best-communities-to-make-money-in-australia.md",false,[177],{"name":178,"to":179,"avatar":180},"John Simeone","https://www.youtube.com/@codingoblin",{"src":181},"/images/john-simeone.png",{"label":183},"Make Money Online",{"type":185,"value":186,"toc":513},"minimark",[187,192,201,204,208,211,214,254,257,296,300,308,320,328,332,335,346,354,358,361,371,379,383,386,396,404,408,411,421,429,433,436,446,453,457,460,510],[188,189,191],"h2",{"id":190},"where-australians-are-actually-making-money","Where Australians are actually making money",[193,194,195,196,200],"p",{},"I went on ",[197,198,199],"a",{"href":166},"Skool"," and searched for how Australians are making money, and found a community built around each one. FIFO mining. Backpacker jobs. Airbnb. Property. Teaching a skill. Running a trade business. Matched betting.",[193,202,203],{},"Each is free to join at the time of writing. I will start with my own, then run through the rest.",[188,205,207],{"id":206},"_1-matched-betting","1. Matched betting",[193,209,210],{},"If you want to make $50 today, this is the community for you.",[193,212,213],{},"Matched betting is a risk free way of turning bookmaker sign up offers and promotions into real profit. You back an outcome with the bookmaker, then lay the same outcome on a betting exchange, so every result is covered. Because you cannot lose on the event itself, the free bets the bookmakers hand out become pure profit. It is legal in Australia for anyone over 18.",[215,216,218,223,226,230,233,237,240,244,247,251],"steps",{"level":217},"3",[219,220,222],"h3",{"id":221},"complete-any-qualifying-requirements","Complete any qualifying requirements",[193,224,225],{},"Each bookmaker offer has conditions to unlock the bonus, like a minimum deposit or a qualifying bet. Get these out of the way first. If it is a qualifying bet, you use the same steps as below.",[219,227,229],{"id":228},"find-an-event-to-bet-on","Find an event to bet on",[193,231,232],{},"Use the free software to find the best sporting event to bet on.",[219,234,236],{"id":235},"calculate-how-much-to-bet","Calculate how much to bet",[193,238,239],{},"Use the free calculator to figure out exactly how much you need to bet.",[219,241,243],{"id":242},"place-your-bets","Place your bets",[193,245,246],{},"Place your bets to cover every outcome using the amounts calculated previously.",[219,248,250],{"id":249},"withdraw-your-tax-free-profits","Withdraw your tax free profits",[193,252,253],{},"Once you have satisfied the qualification terms and used the free bet, you will be able to withdraw your profits directly into your bank account.",[193,255,256],{},"The reason I like it is that it does not need you to sell anything, find clients, or take any real risk. And the Matched Betting AU community makes the whole thing simple, breaking down the technique step by step and providing all the tools you need.",[258,259,264,272,278,283],"cta",{":reverse":260,"orientation":261,"reverse":262,"variant":263},"true","horizontal","","subtle",[265,266],"img",{"alt":267,"className":268,"src":271},"Matched Betting AU Skool community cover",[269,270],"rounded-lg","w-full","/images/skool/matched-betting-au-cover.webp",[273,274,275],"template",{"v-slot:title":262},[193,276,277],{},"Make your first $50 today",[273,279,280],{"v-slot:description":262},[193,281,282],{},"Matched Betting AU is free to join. Follow the step by step instructions and you can easily make over $50 for free today. It works in Australia.",[273,284,285],{"v-slot:links":262},[286,287,293],"my-button",{"size":288,"target":289,"to":290,"trailing-icon":291,"variant":292},"xl","_blank","/go/matched-betting","i-lucide-arrow-right","solid",[193,294,295],{},"Join the community",[188,297,299],{"id":298},"_2-fifo-mining-jobs","2. FIFO mining jobs",[193,301,302,303,307],{},"If you want serious money and you are willing to work for it, fly in fly out (FIFO) mining is one of the highest paying paths in Australia. Roles commonly pay ",[304,305,306],"strong",{},"$2,800 to $4,200 a week",", and you do not always need prior experience to break in. What you do need is the right resume, the right interview approach, and to know how the recruiters actually hire.",[193,309,310,311,319],{},"That is exactly what the ",[304,312,313],{},[197,314,318],{"href":315,"rel":316},"https://www.skool.com/fifoworker?ref=2609eee27310446faff9ce227a2d443d",[317],"nofollow","FIFO Blueprint"," community is built around. With 2,900+ members, it focuses on getting Australians into these jobs through resume optimisation, interview prep, and recruiter strategy.",[193,321,322,327],{},[304,323,324],{},[197,325,318],{"href":315,"rel":326},[317]," · 2,900+ members · Free to join",[188,329,331],{"id":330},"_3-working-holiday-jobs-the-88-days","3. Working holiday jobs (the 88 days)",[193,333,334],{},"If you are in Australia on a working holiday visa, you already know about the 88 days of regional work you need to extend your stay. The hard part is finding the jobs, and dodgy operators are everywhere. It is one of the most searched money problems for backpackers in the country.",[193,336,337,338,345],{},"The ",[304,339,340],{},[197,341,344],{"href":342,"rel":343},"https://www.skool.com/working-holiday-australia-3350?ref=2609eee27310446faff9ce227a2d443d",[317],"Working Holiday - Australia"," community has 8,200 members. It gives backpackers access to over 1,797 job contacts across farms, hospitality, construction, and mining, so you can knock out your 88 days and keep earning while you travel.",[193,347,348,353],{},[304,349,350],{},[197,351,344],{"href":342,"rel":352},[317]," · 8,200 members · Free to join",[188,355,357],{"id":356},"_4-airbnb-without-owning-property","4. Airbnb without owning property",[193,359,360],{},"You do not need to own a house to make money from Airbnb. Rental arbitrage, where you lease a property and re-let it as a short stay, is a real business model, and it is growing fast in Australia. It takes some upfront hustle to land the deals, but the startup cost is far lower than buying property outright.",[193,362,337,363,370],{},[304,364,365],{},[197,366,369],{"href":367,"rel":368},"https://www.skool.com/bnb-success-au?ref=2609eee27310446faff9ce227a2d443d",[317],"BNB Success Australia"," community teaches exactly this, building an Airbnb business without owning property, with the goal of helping you secure your first two deals in the next 90 days.",[193,372,373,378],{},[304,374,375],{},[197,376,369],{"href":367,"rel":377},[317]," · 1.5k members · Free to join",[188,380,382],{"id":381},"_5-property-investing","5. Property investing",[193,384,385],{},"Property is the classic Australian wealth builder, and it is still going. The barrier to entry is high compared to everything else on this list, but the long term upside is why so many Australians focus on it. The key is knowing how to actually structure and execute a deal rather than just reading about it.",[193,387,337,388,395],{},[304,389,390],{},[197,391,394],{"href":392,"rel":393},"https://www.skool.com/australian-property-investing-7805?ref=2609eee27310446faff9ce227a2d443d",[317],"Australian Property Investing"," community gives you step by step guidance on property strategies across Australia, with courses, tools, templates, and coaching to help you get a deal done.",[193,397,398,403],{},[304,399,400],{},[197,401,394],{"href":392,"rel":402},[317]," · 64 members · Free to join",[188,405,407],{"id":406},"_6-teaching-a-musical-instrument","6. Teaching a musical instrument",[193,409,410],{},"Turning a skill you already have into income is one of the most underrated ways to earn, and it does not have to be guitar. But if you can play, teaching is a genuine business. The trick is getting a steady flow of students without spending your whole life chasing them.",[193,412,337,413,420],{},[304,414,415],{},[197,416,419],{"href":417,"rel":418},"https://www.skool.com/make-money-teaching-guitar?ref=2609eee27310446faff9ce227a2d443d",[317],"Profitable Guitar Teachers"," community teaches solo guitar teachers how to scale toward $10K+ a month using what they call the 10K Trio System, including free and low cost ways to get new students on autopilot. Swap \"guitar\" for whatever you are good at and the model still applies.",[193,422,423,428],{},[304,424,425],{},[197,426,419],{"href":417,"rel":427},[317]," · 32 members · Free to join",[188,430,432],{"id":431},"_7-running-a-painting-business","7. Running a painting business",[193,434,435],{},"A trade business is one of the most reliable ways to make good money in Australia, and painting is a great example. Low startup cost, steady demand, and a clear path to scaling once you have the systems in place. The difference between a painter who scrapes by and one who builds a real business is almost always the business side, not the painting.",[193,437,337,438,445],{},[304,439,440],{},[197,441,444],{"href":442,"rel":443},"https://www.skool.com/the-painters-blueprint-5184?ref=2609eee27310446faff9ce227a2d443d",[317],"Millionaire Painter"," community helps painters learn the business systems and practical techniques to build a profitable painting business rather than just a job.",[193,447,448,428],{},[304,449,450],{},[197,451,444],{"href":442,"rel":452},[317],[188,454,456],{"id":455},"which-one-is-right-for-you","Which one is right for you?",[193,458,459],{},"There is no single best answer, it depends on what you have got and what you want.",[461,462,463,471,477,483,489,496,502],"ul",{},[464,465,466,467,470],"li",{},"Want the highest pay and don't mind the roster? Look at ",[304,468,469],{},"FIFO mining",".",[464,472,473,474,470],{},"On a working holiday visa and need your 88 days? ",[304,475,476],{},"Backpacker jobs",[464,478,479,480,470],{},"Want a business without buying property? ",[304,481,482],{},"Airbnb rental arbitrage",[464,484,485,486,470],{},"Got capital and a long time horizon? ",[304,487,488],{},"Property",[464,490,491,492,495],{},"Already good at something? Turn it into income, like the ",[304,493,494],{},"guitar teachers"," do.",[464,497,498,499,470],{},"Handy and willing to build a business? A trade like ",[304,500,501],{},"painting",[464,503,504,505,470],{},"Want a risk free side income you can start today from home? That is ",[304,506,507],{},[197,508,509],{"href":290},"matched betting",[193,511,512],{},"Each of these is a specific path with a community of people already doing it. Pick one, join, and get started.",{"title":262,"searchDepth":514,"depth":514,"links":515},2,[516,517,525,526,527,528,529,530,531],{"id":190,"depth":514,"text":191},{"id":206,"depth":514,"text":207,"children":518},[519,521,522,523,524],{"id":221,"depth":520,"text":222},3,{"id":228,"depth":520,"text":229},{"id":235,"depth":520,"text":236},{"id":242,"depth":520,"text":243},{"id":249,"depth":520,"text":250},{"id":298,"depth":514,"text":299},{"id":330,"depth":514,"text":331},{"id":356,"depth":514,"text":357},{"id":381,"depth":514,"text":382},{"id":406,"depth":514,"text":407},{"id":431,"depth":514,"text":432},{"id":455,"depth":514,"text":456},[183],[534,535],"make-money-online","skool","2026-08-03T00:00:00.000Z","Skool communities that help you make money in Australia. FIFO mining jobs, working holiday work, Airbnb, property investing, matched betting and more.","md",{"src":540},"/images/skool/best-communities-to-make-money-in-australia.webp",{},true,[544,551],{"headline":9,"description":545,"image":546,"datePublished":547,"dateModified":547,"author":548,"@type":550},"A roundup of real Skool communities that help you make money in Australia, including FIFO mining jobs, property investing, matched betting, teaching guitar and building a painting business.","/images/skool/skool-australia-thumbnail.webp","2026-08-03",{"name":178,"url":179,"@type":549},"Person","Article",{"mainEntity":552,"@type":571},[553,559,563,567],{"name":554,"acceptedAnswer":555,"@type":558},"What is the best way to make money in Australia in 2026?",{"text":556,"@type":557},"It depends on what you are willing to do. If you want a high paying job, FIFO (fly in fly out) mining work pays $2,800 to $4,200 a week. If you want a side income you can run from home, matched betting is a risk free way to profit from bookmaker offers. Property investing, teaching a skill like guitar, and running a trade business such as painting are all proven paths too. Each of these has an active Skool community you can join to learn the ropes.","Answer","Question",{"name":560,"acceptedAnswer":561,"@type":558},"Is matched betting legal in Australia?",{"text":562,"@type":557},"Yes. Matched betting is legal in Australia for anyone over 18. It is not gambling in the traditional sense because you cover every outcome of an event, which removes the risk. You are simply taking advantage of the free bets and bonuses that bookmakers offer to attract new customers.",{"name":564,"acceptedAnswer":565,"@type":558},"How much do FIFO mining jobs pay in Australia?",{"text":566,"@type":557},"FIFO (fly in fly out) mining roles in Australia commonly pay in the range of $2,800 to $4,200 per week, and often more with experience. You do not always need prior mining experience to get started, but you do need to get your resume and interview approach right, which is what communities like FIFO Blueprint focus on.",{"name":568,"acceptedAnswer":569,"@type":558},"What side hustles can you start with no money in Australia?",{"text":570,"@type":557},"Matched betting, teaching a skill you already have, and reselling items you own can all be started with little or no upfront money. Matched betting needs a small bankroll to place the bets, but that money is not spent, it is recycled as you work through the bookmaker offers.","FAQPage",{"title":573,"description":574,"ogTitle":573,"ogDescription":575,"twitterCard":576},"Best Skool Communities for Making Money in Australia 2026","Real Skool communities for making money in Australia. FIFO mining, property investing, matched betting, teaching guitar and painting businesses. Communities you can actually join.","Real Skool communities for making money in Australia. FIFO mining, property investing, matched betting and more. Communities you can actually join.","summary_large_image","A11Gnx7xfHVCizxHB55p7FyhnT2ofizOLEED6KMYngs",{"id":579,"title":81,"archived":175,"authors":580,"badge":583,"body":584,"categories":1493,"categorySlugs":1494,"date":1495,"description":1496,"extension":538,"image":1497,"meta":1499,"navigation":542,"path":82,"schemaOrg":1500,"seo":1524,"stem":83,"__hash__":1528},"posts/3.blog/most-profitable-skool-community-niches.md",[581],{"name":178,"to":179,"avatar":582},{"src":181},{"label":199},{"type":185,"value":585,"toc":1474},[586,590,593,596,604,611,614,618,621,689,696,700,703,765,772,775,778,781,784,788,857,863,866,869,873,876,1030,1033,1039,1044,1050,1054,1057,1134,1137,1141,1144,1237,1240,1243,1249,1253,1256,1334,1337,1341,1348,1351,1363,1366,1369,1373,1376,1396,1399,1403,1410,1414,1417,1421,1424,1428,1431,1435,1438,1442,1448,1451,1454,1461],[188,587,589],{"id":588},"i-analysed-2600-skool-groups-heres-what-i-found","I analysed 2,600+ Skool groups. Here's what I found.",[193,591,592],{},"Everyone tells you to \"pick a profitable niche\" before starting a Skool community. Nobody shows you actual data.",[193,594,595],{},"So I analysed 2,600+ communities from Skool's public discovery page across every category on the platform. Member counts, pricing, free vs paid, the lot. Instead of guessing which niches work, I can just show you.",[193,597,598,599,603],{},"If you're thinking about ",[197,600,602],{"href":601},"/go/skool","starting a community on Skool",", this should save you weeks of research.",[193,605,606,607,470],{},"Use the explorer below to sort and filter all the niches by the metrics that matter to you. Or browse all 2,600+ communities in the ",[197,608,610],{"href":609},"/skool-explorer","Skool Explorer",[612,613],"skool-niche-explorer",{},[188,615,617],{"id":616},"the-big-picture-first","The big picture first",[193,619,620],{},"Before we get into specific niches, here's what the Skool platform looks like overall.",[622,623,624,637],"table",{},[625,626,627],"thead",{},[628,629,630,634],"tr",{},[631,632,633],"th",{},"Stat",[631,635,636],{},"Number",[638,639,640,649,657,665,673,681],"tbody",{},[628,641,642,646],{},[643,644,645],"td",{},"Groups analysed",[643,647,648],{},"2,629",[628,650,651,654],{},[643,652,653],{},"Free groups",[643,655,656],{},"1,845 (70%)",[628,658,659,662],{},[643,660,661],{},"Paid groups",[643,663,664],{},"784 (30%)",[628,666,667,670],{},[643,668,669],{},"Groups with 100+ members",[643,671,672],{},"1,233 (47%)",[628,674,675,678],{},[643,676,677],{},"Groups with 10,000+ members",[643,679,680],{},"76 (3%)",[628,682,683,686],{},[643,684,685],{},"Groups with 50,000+ members",[643,687,688],{},"16 (0.6%)",[193,690,691,692,695],{},"The first thing that jumps out is that ",[304,693,694],{},"70% of Skool communities are free",". Only 30% charge anything at all. That's not necessarily a bad thing. Free groups are often used as funnels into paid products, coaching, or upsells. But if you're planning to charge from day one, you should know that most groups don't.",[188,697,699],{"id":698},"what-paid-skool-groups-actually-charge","What paid Skool groups actually charge",[193,701,702],{},"Of the 784 groups that do charge, here's how pricing breaks down.",[622,704,705,715],{},[625,706,707],{},[628,708,709,712],{},[631,710,711],{},"Price range",[631,713,714],{},"% of paid groups",[638,716,717,725,733,741,749,757],{},[628,718,719,722],{},[643,720,721],{},"$1-9/month",[643,723,724],{},"18%",[628,726,727,730],{},[643,728,729],{},"$10-29/month",[643,731,732],{},"28%",[628,734,735,738],{},[643,736,737],{},"$30-49/month",[643,739,740],{},"20%",[628,742,743,746],{},[643,744,745],{},"$50-99/month",[643,747,748],{},"16%",[628,750,751,754],{},[643,752,753],{},"$100-199/month",[643,755,756],{},"6%",[628,758,759,762],{},[643,760,761],{},"$200+/month",[643,763,764],{},"12%",[766,767],"donut-chart",{":labels":768,":values":769,"centralLabel":770,"centralSubLabel":771},"[\"$1-9\",\"$10-29\",\"$30-49\",\"$50-99\",\"$100-199\",\"$200+\"]","[18,28,20,16,6,12]","784","paid groups",[193,773,774],{},"The sweet spot is $10-49/month. That's where 48% of all paid groups price themselves. Makes sense. It's low enough that people don't think too hard about it, but high enough to be worth running.",[193,776,777],{},"The $200+ category is interesting though. 12% of paid groups charge more than $200. Some charge over $1,000/month. These tend to be small, high-ticket coaching or mastermind groups.",[193,779,780],{},"Want to see what those numbers actually look like after fees? Plug in a member count and price point below.",[782,783],"skool-earnings-calculator",{},[188,785,787],{"id":786},"most-skool-groups-are-small-and-thats-fine","Most Skool groups are small (and that's fine)",[622,789,790,800],{},[625,791,792],{},[628,793,794,797],{},[631,795,796],{},"Group size",[631,798,799],{},"% of all groups",[638,801,802,810,818,826,834,842,849],{},[628,803,804,807],{},[643,805,806],{},"0-100 members",[643,808,809],{},"53%",[628,811,812,815],{},[643,813,814],{},"101-500",[643,816,817],{},"25%",[628,819,820,823],{},[643,821,822],{},"501-1,000",[643,824,825],{},"7%",[628,827,828,831],{},[643,829,830],{},"1,000-5,000",[643,832,833],{},"10%",[628,835,836,839],{},[643,837,838],{},"5,000-10,000",[643,840,841],{},"2%",[628,843,844,847],{},[643,845,846],{},"10,000-50,000",[643,848,841],{},[628,850,851,854],{},[643,852,853],{},"50,000+",[643,855,856],{},"0.6%",[858,859],"bar-chart",{":labels":860,":values":861,"suffix":862},"[\"0-100\",\"101-500\",\"501-1k\",\"1k-5k\",\"5k-10k\",\"10k-50k\",\"50k+\"]","[53,25,7,10,2,2,0.6]","%",[193,864,865],{},"More than half of all Skool groups have fewer than 100 members. Only 16 groups out of 2,629 have broken 50,000 members, and those are almost all free groups.",[193,867,868],{},"This is actually good news if you're starting out. You don't need tens of thousands of members to build something profitable. A group with 200 members paying $29/month is nearly $6,000/month. That's a solid income and it's totally realistic.",[188,870,872],{"id":871},"the-niches-with-the-highest-monetisation-rates","The niches with the highest monetisation rates",[193,874,875],{},"This is where it gets interesting. I looked at what percentage of groups in each niche actually charge money. A high \"paid ratio\" means people in that niche are willing to pay for community access.",[622,877,878,894],{},[625,879,880],{},[628,881,882,885,888,891],{},[631,883,884],{},"Niche",[631,886,887],{},"% of groups that charge",[631,889,890],{},"Avg price",[631,892,893],{},"Median price",[638,895,896,910,924,938,951,963,976,990,1004,1017],{},[628,897,898,901,904,907],{},[643,899,900],{},"Academy/education",[643,902,903],{},"54%",[643,905,906],{},"$79",[643,908,909],{},"$40",[628,911,912,915,918,921],{},[643,913,914],{},"Nutrition",[643,916,917],{},"50%",[643,919,920],{},"$30",[643,922,923],{},"$29",[628,925,926,929,932,935],{},[643,927,928],{},"Trading",[643,930,931],{},"48%",[643,933,934],{},"$131",[643,936,937],{},"$69",[628,939,940,943,945,948],{},[643,941,942],{},"TikTok/content",[643,944,931],{},[643,946,947],{},"$67",[643,949,950],{},"$49",[628,952,953,956,958,961],{},[643,954,955],{},"YouTube",[643,957,931],{},[643,959,960],{},"$1,101*",[643,962,950],{},[628,964,965,968,971,974],{},[643,966,967],{},"Sales",[643,969,970],{},"47%",[643,972,973],{},"$374",[643,975,937],{},[628,977,978,981,984,987],{},[643,979,980],{},"Remote work",[643,982,983],{},"46%",[643,985,986],{},"$75",[643,988,989],{},"$20",[628,991,992,995,998,1001],{},[643,993,994],{},"Dating",[643,996,997],{},"44%",[643,999,1000],{},"$81",[643,1002,1003],{},"$19",[628,1005,1006,1009,1012,1015],{},[643,1007,1008],{},"Newsletter",[643,1010,1011],{},"43%",[643,1013,1014],{},"$45",[643,1016,950],{},[628,1018,1019,1022,1024,1027],{},[643,1020,1021],{},"English learning",[643,1023,1011],{},[643,1025,1026],{},"$66",[643,1028,1029],{},"$37",[193,1031,1032],{},"*YouTube average is skewed by a few groups charging $10,000/month. The median of $49 is more realistic.",[193,1034,1035,1038],{},[304,1036,1037],{},"Trading and sales communities"," stand out. Almost half of all groups in these niches charge money, and the median prices are some of the highest at $69/month. If you know trading or sales, people will pay for access to your knowledge.",[193,1040,1041,1043],{},[304,1042,914],{}," is a sleeper hit. 50% of nutrition groups charge, and the pricing is consistent at around $29-30/month. It's not flashy, but it's steady.",[193,1045,1046,1049],{},[304,1047,1048],{},"Content creator niches"," (TikTok, YouTube, social media) monetise well at around 48%. Makes sense. If you can teach someone to grow their channel, that's directly tied to their income.",[188,1051,1053],{"id":1052},"niches-where-people-wont-pay","Niches where people won't pay",[193,1055,1056],{},"On the other end, some niches have very low monetisation rates.",[622,1058,1059,1070],{},[625,1060,1061],{},[628,1062,1063,1065,1067],{},[631,1064,884],{},[631,1066,887],{},[631,1068,1069],{},"Why",[638,1071,1072,1083,1093,1103,1113,1123],{},[628,1073,1074,1077,1080],{},[643,1075,1076],{},"Mental health",[643,1078,1079],{},"13%",[643,1081,1082],{},"Ethical barrier to charging",[628,1084,1085,1088,1090],{},[643,1086,1087],{},"Crafts",[643,1089,833],{},[643,1091,1092],{},"Hobby audience, price-sensitive",[628,1094,1095,1098,1100],{},[643,1096,1097],{},"Travel",[643,1099,833],{},[643,1101,1102],{},"Free info widely available",[628,1104,1105,1108,1110],{},[643,1106,1107],{},"Entrepreneurship",[643,1109,1079],{},[643,1111,1112],{},"Oversaturated with free content",[628,1114,1115,1118,1120],{},[643,1116,1117],{},"Startups",[643,1119,833],{},[643,1121,1122],{},"Audience expects free resources",[628,1124,1125,1128,1131],{},[643,1126,1127],{},"Fitness (general)",[643,1129,1130],{},"17%",[643,1132,1133],{},"Too broad, tons of free alternatives",[193,1135,1136],{},"This doesn't mean you can't make money in these niches. It means the default is free. You'd need a very specific angle or premium offering to charge. \"General fitness community\" won't work. \"Postpartum fitness for new mums\" might.",[188,1138,1140],{"id":1139},"the-highest-charging-niches","The highest-charging niches",[193,1142,1143],{},"Average price is misleading because a few expensive groups can skew things. So here are the niches where the median price is highest. This tells you what a typical paid group in that niche charges.",[622,1145,1146,1156],{},[625,1147,1148],{},[628,1149,1150,1152,1154],{},[631,1151,884],{},[631,1153,893],{},[631,1155,890],{},[638,1157,1158,1169,1180,1191,1202,1212,1220,1228],{},[628,1159,1160,1163,1166],{},[643,1161,1162],{},"Developer/coding",[643,1164,1165],{},"$147",[643,1167,1168],{},"$282*",[628,1170,1171,1174,1177],{},[643,1172,1173],{},"Affiliate marketing",[643,1175,1176],{},"$150",[643,1178,1179],{},"$261",[628,1181,1182,1185,1188],{},[643,1183,1184],{},"Crypto",[643,1186,1187],{},"$99",[643,1189,1190],{},"$1,318",[628,1192,1193,1196,1199],{},[643,1194,1195],{},"Real estate",[643,1197,1198],{},"$97",[643,1200,1201],{},"$1,062",[628,1203,1204,1207,1209],{},[643,1205,1206],{},"Agency",[643,1208,1198],{},[643,1210,1211],{},"$1,501",[628,1213,1214,1216,1218],{},[643,1215,928],{},[643,1217,937],{},[643,1219,934],{},[628,1221,1222,1224,1226],{},[643,1223,967],{},[643,1225,937],{},[643,1227,973],{},[628,1229,1230,1233,1235],{},[643,1231,1232],{},"Content creation",[643,1234,950],{},[643,1236,947],{},[193,1238,1239],{},"*One coding group had a listing price of $99,999/month (with 9 members, so clearly not serious). I've excluded it from these numbers.",[193,1241,1242],{},"Averages can be misleading because a few expensive groups pull the number up. That's why median price matters more. It tells you what a typical paid group in that niche actually charges.",[193,1244,1245,1248],{},[304,1246,1247],{},"Developer, affiliate, real estate, and crypto communities"," command the highest median prices. These are niches where the knowledge directly translates to making money. People will pay $97-150/month if they believe they'll make that back and more.",[188,1250,1252],{"id":1251},"where-the-biggest-audiences-are","Where the biggest audiences are",[193,1254,1255],{},"Some niches attract massive free audiences that can be monetised through affiliate links, sponsorships, or upsells rather than membership fees.",[622,1257,1258,1270],{},[625,1259,1260],{},[628,1261,1262,1264,1267],{},[631,1263,884],{},[631,1265,1266],{},"Avg group size",[631,1268,1269],{},"Largest group",[638,1271,1272,1283,1293,1303,1313,1323],{},[628,1273,1274,1277,1280],{},[643,1275,1276],{},"Courses/education",[643,1278,1279],{},"8,377",[643,1281,1282],{},"Davie's Free Ecom Course (72,749)",[628,1284,1285,1287,1290],{},[643,1286,1206],{},[643,1288,1289],{},"4,093",[643,1291,1292],{},"AI Automation Agency Ninjas (20,678)",[628,1294,1295,1297,1300],{},[643,1296,1195],{},[643,1298,1299],{},"2,008",[643,1301,1302],{},"Future Proof Real Estate (10,034)",[628,1304,1305,1307,1310],{},[643,1306,1173],{},[643,1308,1309],{},"1,667",[643,1311,1312],{},"Super Affiliate Academy (12,115)",[628,1314,1315,1317,1320],{},[643,1316,1107],{},[643,1318,1319],{},"1,652",[643,1321,1322],{},"Big Business Entrepreneurs (21,082)",[628,1324,1325,1328,1331],{},[643,1326,1327],{},"Developer",[643,1329,1330],{},"1,614",[643,1332,1333],{},"Software Developer Academy (26,487)",[193,1335,1336],{},"Course-focused groups are by far the largest on average. Makes sense. A free course group is a funnel. You get people in with free content, then sell them something else.",[188,1338,1340],{"id":1339},"ai-is-eating-skool","AI is eating Skool",[193,1342,1343,1344,1347],{},"This deserves its own section. Out of 2,629 groups I analysed, ",[304,1345,1346],{},"341 are AI-related",". That's 13% of the entire platform.",[193,1349,1350],{},"Three of the five largest groups on Skool are about AI:",[1352,1353,1354,1357,1360],"ol",{},[464,1355,1356],{},"AI Automation Society (363,541 members, free)",[464,1358,1359],{},"AI Automation Agency Hub (316,520 members, free)",[464,1361,1362],{},"AI Automation (A-Z) (154,162 members, free)",[193,1364,1365],{},"The pattern here is clear. The biggest AI groups are free and use the community as a funnel. AI Automation Society Plus, the paid version, charges $99/month and has 3,666 members. Even if only a fraction of the free group converts, that's serious revenue.",[193,1367,1368],{},"If you're building anything AI-related, Skool is where the audience already is. But the space is also crowded. You'd need a specific angle rather than another generic \"AI automation\" group.",[188,1370,1372],{"id":1371},"the-sweet-spot-where-to-build","The sweet spot: where to build",[193,1374,1375],{},"Based on this data, the best niches for a new Skool community have three things:",[1352,1377,1378,1384,1390],{},[464,1379,1380,1383],{},[304,1381,1382],{},"High paid ratio"," (40%+ of groups charge money)",[464,1385,1386,1389],{},[304,1387,1388],{},"Reasonable median price"," ($29-99/month)",[464,1391,1392,1395],{},[304,1393,1394],{},"Room for differentiation"," (not already dominated by mega-groups)",[193,1397,1398],{},"That points to these niches:",[219,1400,1402],{"id":1401},"trading-and-investing","Trading and investing",[193,1404,1405,1406,1409],{},"48% paid ratio, $69 median price. People will pay for signals, analysis, and education. The audience directly ties knowledge to income. There are lots of groups here but most are small, so there's room. Betting angles sit in this bucket too, and there's a lot less competition. I recently started one myself in August 2026, ",[197,1407,1408],{"href":290},"a matched betting community",", aimed at a risk free way of making money from bookmaker promotions.",[219,1411,1413],{"id":1412},"nutrition-and-specific-health","Nutrition and specific health",[193,1415,1416],{},"50% paid ratio, $29 median price. General fitness won't work (only 17% paid), but specific health niches like nutrition, peptides, or targeted programs do well. The pricing is lower but the audience is consistent.",[219,1418,1420],{"id":1419},"sales-and-business-skills","Sales and business skills",[193,1422,1423],{},"47% paid ratio, $69 median price. Sales training, closing techniques, B2B skills. The people searching for this are professionals willing to invest in themselves.",[219,1425,1427],{"id":1426},"content-creation-youtube-tiktok","Content creation (YouTube, TikTok)",[193,1429,1430],{},"48% paid ratio, $49 median price. Teaching people how to grow channels and monetise content. Your audience's success is measurable, which makes the value obvious.",[219,1432,1434],{"id":1433},"language-learning","Language learning",[193,1436,1437],{},"43% paid ratio, $37 median price. A surprisingly underserved niche on Skool. English learning groups do well, and there's room for other languages too.",[188,1439,1441],{"id":1440},"what-this-means-for-you","What this means for you",[193,1443,598,1444,1447],{},[197,1445,1446],{"href":601},"starting a Skool community",", pick a niche where people already pay. Don't try to be the first person to monetise a niche that's 90% free. You'll spend all your time convincing people to pay instead of actually building.",[193,1449,1450],{},"The data says $10-49/month is the sweet spot for pricing. You don't need thousands of members. A few hundred paying members at $29/month is a real business.",[193,1452,1453],{},"And don't worry about the groups with 300,000 members. Those are outliers. Most successful paid groups on Skool have between 500 and 5,000 members. That's achievable.",[193,1455,1456,1457,1460],{},"The 14-day free trial means you can ",[197,1458,1459],{"href":601},"set up your group"," and test your niche before you've spent anything. That's where I'd start.",[1462,1463,1464],"note",{},[193,1465,1466,1467,1470,1471,470],{},"Data correct as of 11th May 2026. Skool is growing fast, so these numbers will change. I plan to update this analysis regularly. If you want to know more about how Skool works, check out ",[197,1468,1469],{"href":130},"my full review"," or the ",[197,1472,1473],{"href":126},"pricing breakdown",{"title":262,"searchDepth":514,"depth":514,"links":1475},[1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1492],{"id":588,"depth":514,"text":589},{"id":616,"depth":514,"text":617},{"id":698,"depth":514,"text":699},{"id":786,"depth":514,"text":787},{"id":871,"depth":514,"text":872},{"id":1052,"depth":514,"text":1053},{"id":1139,"depth":514,"text":1140},{"id":1251,"depth":514,"text":1252},{"id":1339,"depth":514,"text":1340},{"id":1371,"depth":514,"text":1372,"children":1486},[1487,1488,1489,1490,1491],{"id":1401,"depth":520,"text":1402},{"id":1412,"depth":520,"text":1413},{"id":1419,"depth":520,"text":1420},{"id":1426,"depth":520,"text":1427},{"id":1433,"depth":520,"text":1434},{"id":1440,"depth":514,"text":1441},[199],[535],"2026-05-11T00:00:00.000Z","I analysed 2,600+ Skool communities to find out which niches actually make money. Here's the data on pricing, member counts, and which categories are worth building in.",{"src":1498},"/images/skool/most-profitable-skool-community-niches.webp",{},[1501,1506],{"headline":81,"description":1502,"image":1503,"datePublished":1504,"dateModified":1504,"author":1505,"@type":550},"Analysis of 2,600+ Skool communities revealing which niches are most profitable. Data on pricing, member counts, and monetization rates across categories.","/images/skool/skool-discovery-thumbnail.webp","2026-05-11",{"name":178,"url":179,"@type":549},{"mainEntity":1507,"@type":571},[1508,1512,1516,1520],{"name":1509,"acceptedAnswer":1510,"@type":558},"What is the most profitable niche on Skool?",{"text":1511,"@type":557},"Based on data from 2,600+ Skool communities, trading and sales niches have the highest paid-to-free ratio at around 48%, meaning almost half of all groups in these niches charge money. Academy and nutrition communities also monetise well at 54% and 50% paid respectively.",{"name":1513,"acceptedAnswer":1514,"@type":558},"How much do Skool communities charge?",{"text":1515,"@type":557},"70% of Skool communities are free. Of those that charge, the most common price range is $10-29 per month (28% of paid groups). 18% charge $1-9, 20% charge $30-49, and about 12% charge $200 or more per month.",{"name":1517,"acceptedAnswer":1518,"@type":558},"What percentage of Skool groups actually make money?",{"text":1519,"@type":557},"Only about 30% of Skool communities charge a membership fee. Of those, the majority are small, with 53% of all groups having fewer than 100 members. The groups that do charge typically price between $10-49 per month.",{"name":1521,"acceptedAnswer":1522,"@type":558},"What size are most Skool communities?",{"text":1523,"@type":557},"Most Skool communities are small. 53% have fewer than 100 members, and 78% have fewer than 500. Only 16 out of 2,600+ groups have over 50,000 members. You don't need a massive community to make money on Skool.",{"title":1525,"description":1526,"ogTitle":1525,"ogDescription":1527,"twitterCard":576},"Most Profitable Skool Community Niches 2026 | Data from 2,600+ Groups","Data from 2,600+ Skool communities. Which niches charge the most, which have the biggest audiences, and where the real money is. Backed by numbers, not guesswork.","Data from 2,600+ Skool communities. Which niches charge the most, which have the biggest audiences, and where the real money is.","AlyQlNTn8bSJz5_cBM2jY_kamOSx8LMNJ5M8G8_aPs8",{"id":1530,"title":117,"archived":175,"authors":1531,"badge":1534,"body":1535,"categories":1977,"categorySlugs":1978,"date":1979,"description":1980,"extension":538,"image":1981,"meta":1983,"navigation":542,"path":118,"schemaOrg":1984,"seo":2008,"stem":119,"__hash__":2011},"posts/3.blog/skool-affiliate-program.md",[1532],{"name":178,"to":179,"avatar":1533},{"src":181},{"label":199},{"type":185,"value":1536,"toc":1953},[1537,1541,1544,1547,1551,1554,1592,1595,1598,1602,1605,1608,1611,1614,1618,1621,1624,1627,1630,1634,1637,1659,1662,1665,1669,1672,1676,1679,1683,1686,1689,1692,1696,1699,1703,1706,1744,1748,1765,1768,1772,1775,1785,1791,1797,1803,1807,1810,1891,1894,1897,1901,1905,1908,1912,1915,1919,1922,1926,1929,1933,1940,1947],[188,1538,1540],{"id":1539},"the-skool-affiliate-program-in-2026","The Skool affiliate program in 2026",[193,1542,1543],{},"I'm a Skool affiliate. I'm going to be transparent about that right from the start. But that's exactly why I can write this post. I've been through the signup process, I use the dashboard, and I earn commissions from it. This isn't theory.",[193,1545,1546],{},"If you're thinking about promoting Skool as an affiliate, here's everything you need to know. The commission structure, how to get started, what you can realistically earn, and whether it's worth your time compared to other affiliate programs.",[188,1548,1550],{"id":1549},"how-the-skool-affiliate-program-works","How the Skool affiliate program works",[193,1552,1553],{},"The basics are simple:",[461,1555,1556,1562,1568,1574,1580,1586],{},[464,1557,1558,1561],{},[304,1559,1560],{},"Commission rate:"," 40% recurring, for life",[464,1563,1564,1567],{},[304,1565,1566],{},"Cookie duration:"," 60 days",[464,1569,1570,1573],{},[304,1571,1572],{},"Attribution:"," Last-touch (most recent link clicked gets credit)",[464,1575,1576,1579],{},[304,1577,1578],{},"Tracking:"," FirstPromoter",[464,1581,1582,1585],{},[304,1583,1584],{},"Minimum payout:"," None",[464,1587,1588,1591],{},[304,1589,1590],{},"Cost to join:"," Free",[193,1593,1594],{},"When someone clicks your affiliate link and signs up for Skool within 60 days, you earn 40% of their monthly subscription for as long as they stay on the platform. Not a one-time payment. Recurring. Every month.",[193,1596,1597],{},"On the $99/month Pro plan, that's $39.60 per referral per month. On the $9/month Hobby plan, it's $3.60 per referral per month.",[188,1599,1601],{"id":1600},"why-40-recurring-is-a-big-deal","Why 40% recurring is a big deal",[193,1603,1604],{},"Most affiliate programs pay you once and that's it. You refer someone, you get a one-time commission, done. If you want to earn again, you need to refer someone new.",[193,1606,1607],{},"Recurring commissions work differently. Every referral you make continues to pay you month after month. Ten referrals on the Pro plan means roughly $396/month. And that number only goes up as you add more referrals over time.",[193,1609,1610],{},"The other thing that makes this work is retention. Skool is sticky. Once someone builds a community, gets members, and starts charging, they don't leave. Their community is there, their members are there, their content is there. That means your commissions keep rolling in.",[193,1612,1613],{},"Compare that to something like a web hosting affiliate where you get a big one-time payout but nothing after. Long term, recurring beats one-time almost every time.",[188,1615,1617],{"id":1616},"the-maths-on-earning-potential","The maths on earning potential",[193,1619,1620],{},"Let's be realistic about what you can earn. Not everyone you refer will go Pro at $99/month. Some will start on Hobby at $9/month. Some will upgrade later.",[193,1622,1623],{},"Use the calculator below to see how commissions compound as you build referrals over time:",[1625,1626],"skool-affiliate-calculator",{},[193,1628,1629],{},"Play around with the numbers. Once you hit 20-30 active referrals with some of them on the Pro plan, the monthly income starts to add up fast.",[188,1631,1633],{"id":1632},"how-to-sign-up","How to sign up",[193,1635,1636],{},"Getting started is straightforward:",[1352,1638,1639,1647,1650,1653,1656],{},[464,1640,1641,1642],{},"Go to ",[197,1643,1646],{"href":1644,"rel":1645},"https://www.skool.com/affiliate-program",[317],"skool.com/affiliate-program",[464,1648,1649],{},"Fill out the application form",[464,1651,1652],{},"Wait for approval (usually quick)",[464,1654,1655],{},"Access your dashboard and grab your unique referral link",[464,1657,1658],{},"Start sharing",[193,1660,1661],{},"Once approved, you get access to marketing materials including banners, email templates, and swipe copy. You also get a dashboard where you track clicks, conversions, and earnings.",[193,1663,1664],{},"Your affiliate link looks like a normal Skool URL with your tracking ID attached. When someone clicks it, a cookie is placed in their browser for 60 days.",[188,1666,1668],{"id":1667},"two-types-of-skool-affiliate-earnings","Two types of Skool affiliate earnings",[193,1670,1671],{},"There's an important distinction most people miss. There are actually two ways to earn affiliate commissions with Skool:",[219,1673,1675],{"id":1674},"_1-platform-affiliate-referring-new-users-to-skool","1. Platform affiliate (referring new users to Skool)",[193,1677,1678],{},"This is the main affiliate program. You earn 40% of the platform subscription fee ($9 or $99/month) when someone signs up for Skool through your link. This is what I've been describing above.",[219,1680,1682],{"id":1681},"_2-community-affiliate-referring-members-to-specific-groups","2. Community affiliate (referring members to specific groups)",[193,1684,1685],{},"Individual Skool community owners can also set up their own affiliate programs. If someone runs a paid community at, say, $100/month and offers 30% affiliate commission, you earn $30/month for every member you refer to their group.",[193,1687,1688],{},"Commission rates on community affiliates vary. Owners can set anywhere from 10% to 50%. Some of the bigger communities offer generous rates because they know their retention is good.",[193,1690,1691],{},"You can do both. Refer people to the platform AND refer members to specific paid communities.",[188,1693,1695],{"id":1694},"how-to-actually-promote-skool","How to actually promote Skool",[193,1697,1698],{},"Having an affiliate link is worthless if nobody clicks it. Here's what actually works:",[219,1700,1702],{"id":1701},"content-that-converts","Content that converts",[193,1704,1705],{},"The highest-converting content for Skool affiliates is:",[461,1707,1708,1718,1728,1738],{},[464,1709,1710,1713,1714,1717],{},[304,1711,1712],{},"Reviews and comparisons"," - People searching \"Skool review\" or \"",[197,1715,1716],{"href":134},"Skool vs Circle","\" are already considering the platform. They just need a push.",[464,1719,1720,1723,1724,1727],{},[304,1721,1722],{},"How-to content"," - Posts about ",[197,1725,1726],{"href":66},"making money on Skool"," or building communities attract people who are about to sign up.",[464,1729,1730,1733,1734,1737],{},[304,1731,1732],{},"Pricing breakdowns"," - Anyone searching \"",[197,1735,1736],{"href":126},"Skool pricing","\" is very close to buying. A clear explanation with your affiliate link converts well.",[464,1739,1740,1743],{},[304,1741,1742],{},"Case studies"," - Showing what you've built on Skool or what others have achieved gives people confidence to sign up.",[219,1745,1747],{"id":1746},"where-to-share","Where to share",[461,1749,1750,1753,1756,1759,1762],{},[464,1751,1752],{},"Blog posts (like this one) targeting buyer-intent keywords",[464,1754,1755],{},"YouTube videos reviewing or demonstrating the platform",[464,1757,1758],{},"Social media posts showing your community results",[464,1760,1761],{},"Email list if you have one",[464,1763,1764],{},"Inside other communities (without being spammy)",[193,1766,1767],{},"The key is targeting people who are already looking for a community platform. Cold audiences don't convert well for something like this. You want people who are already in the market.",[188,1769,1771],{"id":1770},"what-makes-skool-easy-to-promote","What makes Skool easy to promote",[193,1773,1774],{},"I'll be honest about why I chose to promote Skool over other platforms:",[193,1776,1777,1780,1781,1784],{},[304,1778,1779],{},"The product is genuinely good."," I use it myself. I'm not promoting something I wouldn't use. That makes writing about it easy because I'm just sharing my actual experience. Check my ",[197,1782,1783],{"href":130},"full Skool review"," if you want to see what I mean.",[193,1786,1787,1790],{},[304,1788,1789],{},"The price is low."," $9/month Hobby plan means there's almost no barrier for someone to try it. Compared to convincing someone to spend $199/month on Circle or $143/month on Kajabi, getting someone to try a $9/month platform is easy. And they get a 14-day free trial on top of that.",[193,1792,1793,1796],{},[304,1794,1795],{},"People stay."," Once someone builds a community on Skool, they stick around. Their members are there, their content is there. This means your referrals keep paying you for months and years, not just one billing cycle.",[193,1798,1799,1802],{},[304,1800,1801],{},"The brand awareness helps."," Skool has been growing fast. Alex Hormozi's involvement has put it on a lot of people's radar. When someone already knows the name, they just need a nudge to sign up. You're not selling something nobody has heard of.",[188,1804,1806],{"id":1805},"is-it-worth-it-compared-to-other-programs","Is it worth it compared to other programs?",[193,1808,1809],{},"Here's how Skool stacks up against other popular affiliate programs in this space:",[622,1811,1812,1828],{},[625,1813,1814],{},[628,1815,1816,1819,1822,1825],{},[631,1817,1818],{},"Program",[631,1820,1821],{},"Commission",[631,1823,1824],{},"Type",[631,1826,1827],{},"Cookie",[638,1829,1830,1843,1856,1868,1879],{},[628,1831,1832,1834,1837,1840],{},[643,1833,199],{},[643,1835,1836],{},"40%",[643,1838,1839],{},"Recurring",[643,1841,1842],{},"60 days",[628,1844,1845,1848,1851,1853],{},[643,1846,1847],{},"Kajabi",[643,1849,1850],{},"30%",[643,1852,1839],{},[643,1854,1855],{},"30 days",[628,1857,1858,1861,1863,1865],{},[643,1859,1860],{},"Teachable",[643,1862,1850],{},[643,1864,1839],{},[643,1866,1867],{},"90 days",[628,1869,1870,1873,1875,1877],{},[643,1871,1872],{},"Circle",[643,1874,1850],{},[643,1876,1839],{},[643,1878,1867],{},[628,1880,1881,1884,1886,1888],{},[643,1882,1883],{},"ClickFunnels",[643,1885,1850],{},[643,1887,1839],{},[643,1889,1890],{},"45 days",[193,1892,1893],{},"Skool has the highest commission rate at 40%. The cookie duration is middle of the pack at 60 days. But the combination of high commission + low price point (easy to convert) + high retention (long lifetime value) makes it one of the best recurring affiliate programs available right now.",[193,1895,1896],{},"The lower price point is actually an advantage. It's easier to get someone to commit to $9/month than $143/month. More conversions at a lower dollar amount often beats fewer conversions at a higher amount, especially when commissions are recurring.",[188,1898,1900],{"id":1899},"common-questions","Common questions",[219,1902,1904],{"id":1903},"do-i-need-to-be-a-skool-user-to-be-an-affiliate","Do I need to be a Skool user to be an affiliate?",[193,1906,1907],{},"No, but it helps massively. If you're writing about Skool from first-hand experience, your content will be more authentic and convert better. Plus you'll have actual screenshots and examples to share.",[219,1909,1911],{"id":1910},"how-long-until-i-see-my-first-commission","How long until I see my first commission?",[193,1913,1914],{},"After someone signs up through your link, they get a 14-day free trial. If they convert to a paid plan on day 15, your commission becomes available shortly after. So realistically, expect 2-3 weeks from click to earnings.",[219,1916,1918],{"id":1917},"can-i-lose-my-affiliate-status","Can I lose my affiliate status?",[193,1920,1921],{},"Skool can revoke affiliate access if you violate their terms. Don't spam, don't make false claims about the platform, don't bid on their brand name in paid ads. Normal content marketing is fine.",[219,1923,1925],{"id":1924},"what-if-my-referral-downgrades-or-upgrades","What if my referral downgrades or upgrades?",[193,1927,1928],{},"Your commission adjusts accordingly. If they move from Pro ($99) to Hobby ($9), your commission drops. If they upgrade from Hobby to Pro, your commission increases. It always reflects 40% of whatever they're currently paying.",[188,1930,1932],{"id":1931},"get-started","Get started",[193,1934,1935,1936,1939],{},"If you want to promote Skool, ",[197,1937,1938],{"href":601},"sign up for the affiliate program here",". It's free and the approval process is quick.",[193,1941,1942,1943,1946],{},"If you're not sure whether Skool is worth promoting, ",[197,1944,1945],{"href":601},"try it yourself first",". Use the 14-day free trial, build something, see if you like it. Then you'll have genuine experience to share when you write about it.",[193,1948,1949,1950,470],{},"For more on how to build income with Skool beyond affiliates, read my guide on ",[197,1951,1952],{"href":66},"how to make money on Skool",{"title":262,"searchDepth":514,"depth":514,"links":1954},[1955,1956,1957,1958,1959,1960,1964,1968,1969,1970,1976],{"id":1539,"depth":514,"text":1540},{"id":1549,"depth":514,"text":1550},{"id":1600,"depth":514,"text":1601},{"id":1616,"depth":514,"text":1617},{"id":1632,"depth":514,"text":1633},{"id":1667,"depth":514,"text":1668,"children":1961},[1962,1963],{"id":1674,"depth":520,"text":1675},{"id":1681,"depth":520,"text":1682},{"id":1694,"depth":514,"text":1695,"children":1965},[1966,1967],{"id":1701,"depth":520,"text":1702},{"id":1746,"depth":520,"text":1747},{"id":1770,"depth":514,"text":1771},{"id":1805,"depth":514,"text":1806},{"id":1899,"depth":514,"text":1900,"children":1971},[1972,1973,1974,1975],{"id":1903,"depth":520,"text":1904},{"id":1910,"depth":520,"text":1911},{"id":1917,"depth":520,"text":1918},{"id":1924,"depth":520,"text":1925},{"id":1931,"depth":514,"text":1932},[199],[535],"2026-05-10T00:00:00.000Z","A full breakdown of the Skool affiliate program in 2026. 40% recurring commissions, how to sign up, how it works, and whether it's actually worth promoting.",{"src":1982},"/images/skool/skool-affiliate-program.webp",{},[1985,1990],{"headline":117,"description":1986,"image":1987,"datePublished":1988,"dateModified":1988,"author":1989,"@type":550},"A complete breakdown of the Skool affiliate program. Commission rates, cookie duration, how to sign up, and realistic earning potential.","/images/skool/skool-affiliate-thumbnail.webp","2026-05-10",{"name":178,"url":179,"@type":549},{"mainEntity":1991,"@type":571},[1992,1996,2000,2004],{"name":1993,"acceptedAnswer":1994,"@type":558},"How much does the Skool affiliate program pay?",{"text":1995,"@type":557},"The Skool affiliate program pays 40% recurring commissions for life. On the $99/month Pro plan, that's $39.60 per referral per month. On the $9/month Hobby plan, that's $3.60 per referral per month. You earn for as long as the person stays subscribed.",{"name":1997,"acceptedAnswer":1998,"@type":558},"How long is the Skool affiliate cookie?",{"text":1999,"@type":557},"Skool uses a 60-day cookie window. If someone clicks your affiliate link and signs up within 60 days, the referral is attributed to you. They use last-touch attribution, so the most recent affiliate link clicked gets the credit.",{"name":2001,"acceptedAnswer":2002,"@type":558},"Is the Skool affiliate program free to join?",{"text":2003,"@type":557},"Yes. The Skool affiliate program is completely free to join. There are no setup fees or hidden costs. You just need to apply through skool.com/affiliate-program and get approved.",{"name":2005,"acceptedAnswer":2006,"@type":558},"How do I get paid from Skool affiliates?",{"text":2007,"@type":557},"Skool pays affiliates through their dashboard powered by FirstPromoter. There is no minimum payout threshold. After a referral's 14-day trial converts to paid, your commission becomes available for withdrawal.",{"title":2009,"description":2010,"ogTitle":2009,"ogDescription":2010,"twitterCard":576},"Skool Affiliate Program 2026 | 40% Recurring Commissions","The Skool affiliate program pays 40% recurring commissions for life. Here's how to sign up, how it works, and what you can realistically earn in 2026.","6iCzqP-c1X-Te1hwQnjddcyzDkzmRDCNTzNdyN6TuBY",{"id":2013,"title":133,"archived":175,"authors":2014,"badge":2017,"body":2018,"categories":2430,"categorySlugs":2431,"date":1979,"description":2432,"extension":538,"image":2433,"meta":2435,"navigation":542,"path":134,"schemaOrg":2436,"seo":2459,"stem":135,"__hash__":2462},"posts/3.blog/skool-vs-circle.md",[2015],{"name":178,"to":179,"avatar":2016},{"src":181},{"label":199},{"type":185,"value":2019,"toc":2412},[2020,2024,2030,2033,2036,2040,2157,2161,2164,2169,2177,2182,2193,2196,2199,2202,2209,2213,2217,2220,2223,2227,2230,2233,2237,2240,2243,2246,2249,2252,2255,2258,2261,2264,2270,2276,2279,2283,2286,2289,2292,2295,2298,2302,2305,2308,2311,2314,2318,2338,2343,2347,2367,2371,2382,2386,2389,2392,2395,2398,2403],[188,2021,2023],{"id":2022},"skool-vs-circle-in-2026","Skool vs Circle in 2026",[193,2025,2026,2029],{},[304,2027,2028],{},"TL;DR:"," Skool wins for most creators. It's cheaper ($9/month vs $89/month), simpler to set up, and has gamification that actually keeps members engaged. Circle is the better choice if you need advanced branding, workflows, and automation, and you're willing to pay 10x more for it.",[193,2031,2032],{},"I've used both platforms. I run my community on Skool and I've spent time inside Circle communities as a member. This isn't a comparison written from marketing pages. I'm going to tell you what actually matters when you're picking between these two.",[193,2034,2035],{},"Quick disclosure: I'm a Skool affiliate. I'll be upfront about that. But I'm also going to be honest about where Circle genuinely does things better. If Circle is right for you, I'll say so.",[188,2037,2039],{"id":2038},"quick-comparison","Quick comparison",[622,2041,2042,2053],{},[625,2043,2044],{},[628,2045,2046,2049,2051],{},[631,2047,2048],{},"Feature",[631,2050,199],{},[631,2052,1872],{},[638,2054,2055,2066,2077,2088,2099,2109,2119,2129,2138,2148],{},[628,2056,2057,2060,2063],{},[643,2058,2059],{},"Starting price",[643,2061,2062],{},"$9/month",[643,2064,2065],{},"$89/month",[628,2067,2068,2071,2074],{},[643,2069,2070],{},"Transaction fee",[643,2072,2073],{},"2.9-10%",[643,2075,2076],{},"2-4.9% (incl. Stripe)",[628,2078,2079,2082,2085],{},[643,2080,2081],{},"Gamification",[643,2083,2084],{},"Yes (points, levels, leaderboards)",[643,2086,2087],{},"No",[628,2089,2090,2093,2096],{},[643,2091,2092],{},"Custom branding",[643,2094,2095],{},"Limited",[643,2097,2098],{},"Extensive",[628,2100,2101,2104,2107],{},[643,2102,2103],{},"Courses",[643,2105,2106],{},"Yes (all plans)",[643,2108,2106],{},[628,2110,2111,2114,2116],{},[643,2112,2113],{},"Workflows/automation",[643,2115,2087],{},[643,2117,2118],{},"Yes (Business plan+)",[628,2120,2121,2124,2127],{},[643,2122,2123],{},"Mobile app",[643,2125,2126],{},"Yes",[643,2128,2126],{},[628,2130,2131,2134,2136],{},[643,2132,2133],{},"Custom domain",[643,2135,2087],{},[643,2137,2126],{},[628,2139,2140,2143,2146],{},[643,2141,2142],{},"Free trial",[643,2144,2145],{},"14 days",[643,2147,2145],{},[628,2149,2150,2153,2155],{},[643,2151,2152],{},"Live events",[643,2154,2126],{},[643,2156,2126],{},[188,2158,2160],{"id":2159},"pricing-breakdown","Pricing breakdown",[193,2162,2163],{},"This is where the conversation usually starts, and it's where Skool has a massive advantage.",[193,2165,2166],{},[304,2167,2168],{},"Skool pricing:",[461,2170,2171,2174],{},[464,2172,2173],{},"Hobby: $9/month (10% transaction fee)",[464,2175,2176],{},"Pro: $99/month (2.9% transaction fee)",[193,2178,2179],{},[304,2180,2181],{},"Circle pricing:",[461,2183,2184,2187,2190],{},[464,2185,2186],{},"Professional: $89/month (2% transaction fee + Stripe's 2.9%)",[464,2188,2189],{},"Business: $199/month (1% + Stripe fees)",[464,2191,2192],{},"Enterprise: $419/month (0.5% + Stripe fees)",[193,2194,2195],{},"So Skool's cheapest plan is $9/month. Circle's cheapest plan is $89/month. That's nearly 10x the price just to get started.",[193,2197,2198],{},"And here's the thing. On the $89/month Circle Professional plan, you don't get workflows, automation, or API access. Those are locked behind the $199/month Business plan. So if you want the features that actually make Circle worth choosing over Skool, you're looking at $199/month minimum.",[193,2200,2201],{},"Meanwhile on Skool, both plans have identical features. The only difference is the transaction fee. If you're just getting started and not making much revenue yet, the $9/month Hobby plan gives you everything.",[193,2203,2204,2205,2208],{},"I've written a ",[197,2206,2207],{"href":126},"full Skool pricing breakdown"," if you want the details on when to upgrade from Hobby to Pro.",[188,2210,2212],{"id":2211},"community-features","Community features",[219,2214,2216],{"id":2215},"skools-approach","Skool's approach",[193,2218,2219],{},"Skool keeps it simple. You get one community feed per group. Members post, comment, and interact in a single stream. There are categories to filter posts, but the structure is intentionally flat.",[193,2221,2222],{},"This sounds limiting, but it works. New members aren't overwhelmed by 30 different channels. They see one feed, they post, they get responses. The friction to participate is almost zero.",[219,2224,2226],{"id":2225},"circles-approach","Circle's approach",[193,2228,2229],{},"Circle uses a Spaces system. You can create separate spaces for different topics, content types, or member segments. Think of it like Slack channels but for a community. You can have a discussion space, a course space, an events space, a chat space, all organized into Space Groups.",[193,2231,2232],{},"This gives you way more flexibility in how you structure things. If you're running a large community with distinct sub-topics, Circle handles that better.",[219,2234,2236],{"id":2235},"which-is-better","Which is better?",[193,2238,2239],{},"For communities under 500 members, Skool's single-feed approach is actually an advantage. It concentrates engagement instead of spreading it thin across empty channels.",[193,2241,2242],{},"For larger communities with diverse topics, Circle's Spaces system makes more sense. But you need enough active members to sustain multiple spaces.",[188,2244,2081],{"id":2245},"gamification",[193,2247,2248],{},"This is Skool's standout feature and Circle doesn't have anything like it.",[193,2250,2251],{},"On Skool, members earn points for posting, commenting, and completing courses. They level up. There's a leaderboard. You can gate content behind levels, so members have to participate to unlock things.",[193,2253,2254],{},"Sounds gimmicky. It isn't. Gamification drives engagement in a way that notifications and emails don't. Members come back because they want to maintain their streak or climb the leaderboard. I've seen communities where the gamification alone keeps people active for months.",[193,2256,2257],{},"Circle has no gamification at all. If you want engaged members on Circle, you need to rely on the quality of your content and manual engagement strategies. That works too, but it requires more effort from you as the creator.",[188,2259,2103],{"id":2260},"courses",[193,2262,2263],{},"Both platforms let you host courses. But they approach it differently.",[193,2265,2266,2269],{},[304,2267,2268],{},"Skool courses"," are simple. You create modules, add lessons (text or video), and that's it. Video hosting is included. You can drip content over time or unlock modules based on member level. No quizzes, no assessments, no certificates. Just content delivery.",[193,2271,2272,2275],{},[304,2273,2274],{},"Circle courses"," have more options. You get three delivery modes: self-paced, structured (drips based on enrollment date), and scheduled (content drops on specific dates for everyone). The course builder is more polished and has more formatting options.",[193,2277,2278],{},"If you're selling a straightforward course alongside a community, Skool handles it fine. If courses are your main product and you need structured learning paths with cohort-based delivery, Circle does it better.",[188,2280,2282],{"id":2281},"branding-and-customisation","Branding and customisation",[193,2284,2285],{},"Circle wins here. No contest.",[193,2287,2288],{},"On Skool, your community lives at skool.com/yourcommunity. You can add a logo and banner, but every Skool group looks more or less the same. There's no custom domain, no custom CSS, no way to make it look like \"your\" platform.",[193,2290,2291],{},"On Circle, you get custom domains, extensive colour and layout customisation, and on higher plans you can even get a branded mobile app. Your community can look like a completely unique product rather than a group on someone else's platform.",[193,2293,2294],{},"If branding matters to your business, if you want your community to feel like an extension of your brand rather than a third-party platform, Circle is clearly better here.",[193,2296,2297],{},"But ask yourself honestly: does your audience care? Most members care about the content and the people inside the community, not whether the platform matches your brand colours. Especially when you're starting out.",[188,2299,2301],{"id":2300},"automation-and-workflows","Automation and workflows",[193,2303,2304],{},"Circle has workflows on the Business plan ($199/month). These are trigger-based automations that fire when something happens. Member joins, course completed, payment received, event RSVP. You get 15+ pre-built templates.",[193,2306,2307],{},"Skool has none of this. No automation, no workflows, no integrations beyond basic stuff. If you want to automate onboarding sequences, trigger emails based on member actions, or build complex member journeys, Skool can't do it natively.",[193,2309,2310],{},"You can bolt on Zapier or Make to Skool, but it's not the same as having it built in.",[193,2312,2313],{},"If automation is a must-have for your business, Circle wins. If you're running a simpler community where you don't need automated workflows, you won't miss it on Skool.",[188,2315,2317],{"id":2316},"when-to-choose-skool","When to choose Skool",[461,2319,2320,2323,2326,2329,2332,2335],{},[464,2321,2322],{},"You're starting a community and want to keep costs low",[464,2324,2325],{},"Gamification and member engagement are priorities",[464,2327,2328],{},"You want to launch quickly without fussing over setup",[464,2330,2331],{},"You're selling access to a community + simple course",[464,2333,2334],{},"You don't need advanced branding or custom domains",[464,2336,2337],{},"You want one price that includes everything",[193,2339,2340],{},[197,2341,2342],{"href":601},"Try Skool free for 14 days",[188,2344,2346],{"id":2345},"when-to-choose-circle","When to choose Circle",[461,2348,2349,2352,2355,2358,2361,2364],{},[464,2350,2351],{},"You need extensive branding and a custom domain",[464,2353,2354],{},"You're running a large community with many sub-topics",[464,2356,2357],{},"Automation and workflows are non-negotiable",[464,2359,2360],{},"You're selling cohort-based courses with structured delivery",[464,2362,2363],{},"You have the budget ($199/month+) to get the features worth paying for",[464,2365,2366],{},"You've outgrown simpler platforms and need more flexibility",[188,2368,2370],{"id":2369},"when-not-to-choose-circle","When NOT to choose Circle",[461,2372,2373,2376,2379],{},[464,2374,2375],{},"You're just getting started and don't have revenue yet. $89/month for Professional (and realistically $199/month for Business) is a lot to spend before you've validated your community idea. Skool at $9/month lets you test the waters without that pressure.",[464,2377,2378],{},"You want gamification. Circle doesn't have it. Full stop. If member engagement through points, levels, and leaderboards matters to you, Circle can't help.",[464,2380,2381],{},"You're comparing on the Professional plan. Half of what makes Circle appealing (workflows, API access, automation) is locked behind Business at $199/month. If you can't afford Business, you're paying $89/month for a platform that's harder to set up than Skool without most of the features that justify the price.",[188,2383,2385],{"id":2384},"my-verdict","My verdict",[193,2387,2388],{},"For most creators, coaches, and community builders reading this, Skool is the better choice.",[193,2390,2391],{},"Not because Circle is bad. Circle is a solid platform with genuinely useful features. But for the majority of people starting or growing a community, Skool's combination of low price, simplicity, and gamification is hard to beat.",[193,2393,2394],{},"The math is simple. Skool Hobby at $9/month gives you community, courses, gamification, and unlimited members. To get a comparable setup on Circle with the features that actually matter (workflows, automation), you're spending $199/month. That's $190/month you could put toward content, ads, or just keeping in your pocket while you grow.",[193,2396,2397],{},"Circle makes sense once you're established, making consistent revenue, and have specific needs around branding or automation that Skool genuinely can't meet. But getting there? Start with Skool.",[193,2399,2400],{},[197,2401,2402],{"href":601},"Start your 14-day free trial on Skool",[193,2404,2405,2406,2408,2409,470],{},"If you want more context, read my ",[197,2407,1783],{"href":130}," or see how Skool compares to ",[197,2410,2411],{"href":122},"other alternatives",{"title":262,"searchDepth":514,"depth":514,"links":2413},[2414,2415,2416,2417,2422,2423,2424,2425,2426,2427,2428,2429],{"id":2022,"depth":514,"text":2023},{"id":2038,"depth":514,"text":2039},{"id":2159,"depth":514,"text":2160},{"id":2211,"depth":514,"text":2212,"children":2418},[2419,2420,2421],{"id":2215,"depth":520,"text":2216},{"id":2225,"depth":520,"text":2226},{"id":2235,"depth":520,"text":2236},{"id":2245,"depth":514,"text":2081},{"id":2260,"depth":514,"text":2103},{"id":2281,"depth":514,"text":2282},{"id":2300,"depth":514,"text":2301},{"id":2316,"depth":514,"text":2317},{"id":2345,"depth":514,"text":2346},{"id":2369,"depth":514,"text":2370},{"id":2384,"depth":514,"text":2385},[199],[535],"An honest comparison of Skool and Circle in 2026. Pricing, features, courses, gamification, and which platform is right for you. I've used both.",{"src":2434},"/images/skool/skool-vs-circle.webp",{},[2437,2441],{"headline":2438,"description":2439,"image":2434,"datePublished":1988,"dateModified":1988,"author":2440,"@type":550},"Skool vs Circle: Which Community Platform Is Better in 2026?","An honest comparison of Skool and Circle community platforms. Pricing, features, courses, and gamification compared after using both.",{"name":178,"url":179,"@type":549},{"mainEntity":2442,"@type":571},[2443,2447,2451,2455],{"name":2444,"acceptedAnswer":2445,"@type":558},"Is Skool or Circle better?",{"text":2446,"@type":557},"For most creators starting out, Skool is better. It costs $9/month vs Circle's $89/month, has built-in gamification, and you can launch a paid community in minutes. Circle is better if you need advanced branding, workflows, and automation, but you'll pay significantly more for those features.",{"name":2448,"acceptedAnswer":2449,"@type":558},"How much does Circle cost compared to Skool?",{"text":2450,"@type":557},"Skool starts at $9/month (Hobby) or $99/month (Pro). Circle starts at $89/month (Professional) and goes up to $199/month (Business) or $419/month (Enterprise). Skool is significantly cheaper, especially for new communities.",{"name":2452,"acceptedAnswer":2453,"@type":558},"Does Circle have gamification like Skool?",{"text":2454,"@type":557},"No. Circle does not have built-in gamification. Skool has points, levels, and leaderboards that drive member engagement. This is one of Skool's biggest advantages over Circle.",{"name":2456,"acceptedAnswer":2457,"@type":558},"Can you customize branding on Skool?",{"text":2458,"@type":557},"Skool has very limited branding options. Your community lives at skool.com/yourcommunity and looks like every other Skool group. Circle gives you much more control over branding, custom domains, and the overall look and feel of your community.",{"title":2460,"description":2461,"ogTitle":2460,"ogDescription":2461,"twitterCard":576},"Skool vs Circle 2026 | Honest Comparison After Using Both","Skool vs Circle compared. Pricing, features, courses, gamification. I've used both platforms and here's which one I recommend in 2026.","qtzNYoLIyTa1G8zZimvZ4yx8X84taXETcA0tkh7dmMo",{"id":2464,"title":121,"archived":175,"authors":2465,"badge":2468,"body":2469,"categories":3176,"categorySlugs":3177,"date":3178,"description":3179,"extension":538,"image":3180,"meta":3182,"navigation":542,"path":122,"schemaOrg":3183,"seo":3208,"stem":123,"__hash__":3211},"posts/3.blog/skool-alternatives.md",[2466],{"name":178,"to":179,"avatar":2467},{"src":181},{"label":199},{"type":185,"value":2470,"toc":3134},[2471,2475,2482,2485,2488,2495,2497,2653,2656,2660,2663,2667,2687,2690,2693,2697,2700,2703,2707,2710,2713,2717,2720,2724,2727,2731,2756,2759,2762,2766,2769,2772,2776,2779,2782,2786,2789,2793,2796,2800,2819,2822,2825,2829,2832,2835,2839,2842,2845,2849,2852,2856,2859,2863,2888,2891,2894,2898,2901,2904,2908,2911,2914,2918,2921,2925,2928,2932,2952,2955,2958,2962,2965,2968,2972,2975,2978,2981,2985,2988,2992,2995,2999,3019,3022,3025,3029,3032,3035,3039,3042,3045,3048,3052,3055,3059,3062,3065,3069,3072,3087,3093,3099,3105,3111,3117,3123],[188,2472,2474],{"id":2473},"best-skool-alternatives-in-2026","Best Skool alternatives in 2026",[193,2476,2477,2478,2481],{},"So you're looking at alternatives to Skool. Maybe you've read ",[197,2479,2480],{"href":130},"my Skool review"," and decided it's not for you. Maybe you want to compare before committing. Or maybe you're already on Skool and wondering if the grass is greener somewhere else.",[193,2483,2484],{},"Whatever the reason, I've done the research so you don't have to. I've looked at the pricing, features, and what each platform is actually good at. Not just copied what's on their marketing pages.",[193,2486,2487],{},"A quick note before we get into it. I use Skool myself and I'm an affiliate for it. So you should know that going in. But I'm not going to pretend Skool is perfect for everyone, because it isn't. Some of these alternatives genuinely do certain things better. I'll be honest about that.",[193,2489,2490,2491,2494],{},"If you want to know what Skool costs, I've written a ",[197,2492,2493],{"href":126},"full pricing breakdown here",". For now let's look at what else is out there.",[188,2496,2039],{"id":2038},[622,2498,2499,2519],{},[625,2500,2501],{},[628,2502,2503,2506,2508,2510,2512,2514,2517],{},[631,2504,2505],{},"Platform",[631,2507,2059],{},[631,2509,2070],{},[631,2511,2123],{},[631,2513,2103],{},[631,2515,2516],{},"Community",[631,2518,2081],{},[638,2520,2521,2540,2558,2578,2596,2615,2633],{},[628,2522,2523,2527,2530,2532,2534,2536,2538],{},[643,2524,2525],{},[197,2526,199],{"href":601},[643,2528,2529],{},"$9/mo",[643,2531,2073],{},[643,2533,2126],{},[643,2535,2126],{},[643,2537,2126],{},[643,2539,2126],{},[628,2541,2542,2544,2547,2550,2552,2554,2556],{},[643,2543,1872],{},[643,2545,2546],{},"$89/mo",[643,2548,2549],{},"0.5-2%",[643,2551,2126],{},[643,2553,2126],{},[643,2555,2126],{},[643,2557,2087],{},[628,2559,2560,2563,2566,2569,2571,2574,2576],{},[643,2561,2562],{},"Mighty Networks",[643,2564,2565],{},"$41/mo",[643,2567,2568],{},"2-3%",[643,2570,2126],{},[643,2572,2573],{},"$99/mo+",[643,2575,2126],{},[643,2577,2095],{},[628,2579,2580,2582,2585,2588,2590,2592,2594],{},[643,2581,1847],{},[643,2583,2584],{},"$143/mo",[643,2586,2587],{},"2.7%+",[643,2589,2126],{},[643,2591,2126],{},[643,2593,2126],{},[643,2595,2087],{},[628,2597,2598,2600,2603,2606,2608,2610,2613],{},[643,2599,1860],{},[643,2601,2602],{},"$29/mo",[643,2604,2605],{},"0-7.5%",[643,2607,2095],{},[643,2609,2126],{},[643,2611,2612],{},"Weak",[643,2614,2087],{},[628,2616,2617,2620,2623,2625,2627,2629,2631],{},[643,2618,2619],{},"Discord",[643,2621,2622],{},"Free",[643,2624,833],{},[643,2626,2126],{},[643,2628,2087],{},[643,2630,2126],{},[643,2632,2087],{},[628,2634,2635,2638,2641,2644,2647,2649,2651],{},[643,2636,2637],{},"Heartbeat",[643,2639,2640],{},"$49/mo",[643,2642,2643],{},"1.25-5%",[643,2645,2646],{},"$849/mo plan only",[643,2648,2126],{},[643,2650,2126],{},[643,2652,2087],{},[193,2654,2655],{},"Now let's go through each one properly.",[188,2657,2659],{"id":2658},"_1-circle-89-419month","1. Circle ($89-$419/month)",[193,2661,2662],{},"Circle is probably the most direct competitor to Skool. It's a community platform with courses, discussions, and events. If you've seen any \"Skool alternatives\" lists, Circle is always on them.",[219,2664,2666],{"id":2665},"circle-pricing","Circle pricing",[461,2668,2669,2675,2681],{},[464,2670,2671,2674],{},[304,2672,2673],{},"Professional:"," $89/month (annual billing), 2% transaction fee, 200GB storage",[464,2676,2677,2680],{},[304,2678,2679],{},"Business:"," $199/month (annual), 1% transaction fee, 500GB storage, automations and workflows",[464,2682,2683,2686],{},[304,2684,2685],{},"Enterprise:"," $419/month (annual), 0.5% transaction fee",[193,2688,2689],{},"They also have Circle Plus for custom branded mobile apps, but that's custom pricing.",[193,2691,2692],{},"Circle offers a 14-day free trial plus a 30-day money-back guarantee. So you have plenty of time to test it.",[219,2694,2696],{"id":2695},"what-circle-does-better-than-skool","What Circle does better than Skool",[193,2698,2699],{},"Circle gives you way more control over branding and customisation. Your community can look like your own thing rather than just another Skool group. On the Business plan you get workflows and automation which Skool doesn't have at all. The course tools are also more feature-rich.",[193,2701,2702],{},"If you want to add email marketing, Circle has an Email Hub add-on for $99/month (10,000 contacts). Skool has nothing like this.",[219,2704,2706],{"id":2705},"what-skool-does-better-than-circle","What Skool does better than Circle",[193,2708,2709],{},"Price. Skool starts at $9/month. Circle starts at $89/month. That's a big gap.",[193,2711,2712],{},"Skool also has gamification built in. Points, levels, leaderboards. This stuff sounds gimmicky but it actually works for keeping members engaged. Circle doesn't have this.",[219,2714,2716],{"id":2715},"who-should-use-circle","Who should use Circle",[193,2718,2719],{},"Circle is for creators who have outgrown simpler platforms and want a polished, branded community experience. If you're making decent revenue and want more control, Circle makes sense. If you're just getting started, the price is hard to justify.",[188,2721,2723],{"id":2722},"_2-mighty-networks-41-360month","2. Mighty Networks ($41-$360/month)",[193,2725,2726],{},"Mighty Networks has been around for a while and they've positioned themselves as the mobile-first community platform. Their big selling point is that you get a real native mobile app on every plan.",[219,2728,2730],{"id":2729},"mighty-networks-pricing","Mighty Networks pricing",[461,2732,2733,2739,2745,2750],{},[464,2734,2735,2738],{},[304,2736,2737],{},"Community:"," $41/month (annual), 3% transaction fee",[464,2740,2741,2744],{},[304,2742,2743],{},"Courses:"," $99/month (annual), 2% transaction fee",[464,2746,2747,2749],{},[304,2748,2679],{}," $179/month (annual), 2% transaction fee",[464,2751,2752,2755],{},[304,2753,2754],{},"Growth:"," $360/month flat rate",[193,2757,2758],{},"There's also Mighty Pro at around $17,000/year if you want a fully custom branded app. That's not a typo.",[193,2760,2761],{},"They offer a 14-day free trial with no credit card required.",[219,2763,2765],{"id":2764},"what-mighty-networks-does-better-than-skool","What Mighty Networks does better than Skool",[193,2767,2768],{},"The mobile app. Mighty Networks has a proper native app on iOS and Android, and they say 60% of member activity happens on mobile. Skool has a mobile app too, but Mighty Networks has been doing this longer and it shows.",[193,2770,2771],{},"They also have drip content and structured learning paths which give you more control over how members work through your courses.",[219,2773,2775],{"id":2774},"what-skool-does-better-than-mighty-networks","What Skool does better than Mighty Networks",[193,2777,2778],{},"To get courses on Mighty Networks you need the $99/month plan. On Skool you get courses on the $9/month Hobby plan. The Community-only plan at $41/month doesn't include course features.",[193,2780,2781],{},"Skool's gamification is also better. Mighty Networks has some engagement features but nothing as built-in as Skool's points and leaderboards.",[219,2783,2785],{"id":2784},"who-should-use-mighty-networks","Who should use Mighty Networks",[193,2787,2788],{},"If mobile experience is your top priority and you can afford the $99/month Courses plan, Mighty Networks is solid. The free trial with no credit card is nice too. But for the price, Skool gives you more out of the box.",[188,2790,2792],{"id":2791},"_3-kajabi-143-399month","3. Kajabi ($143-$399/month)",[193,2794,2795],{},"Kajabi is the big one. It's not really a community platform. It's an all-in-one business platform that happens to include community features. Think courses, email marketing, website builder, funnels, and payments all in one place.",[219,2797,2799],{"id":2798},"kajabi-pricing","Kajabi pricing",[461,2801,2802,2808,2813],{},[464,2803,2804,2807],{},[304,2805,2806],{},"Basic:"," $143/month (annual), 5 products, 2,500 contacts",[464,2809,2810,2812],{},[304,2811,2754],{}," $199/month (annual), 50 products, 25,000 contacts",[464,2814,2815,2818],{},[304,2816,2817],{},"Pro:"," $399/month (annual), unlimited products, 100,000 contacts, branded mobile app",[193,2820,2821],{},"Kajabi increased their prices in January 2026. So if you've seen older articles quoting cheaper numbers, those are outdated.",[193,2823,2824],{},"Transaction fees are 2.7-2.9% plus $0.30 through Kajabi Payments. If you use Stripe or PayPal directly, they add 0.5-5% on top of the processor fees.",[219,2826,2828],{"id":2827},"what-kajabi-does-better-than-skool","What Kajabi does better than Skool",[193,2830,2831],{},"Everything that isn't community. Email marketing, landing pages, sales funnels, checkout pages, website builder. If you want one platform to run your entire online business, Kajabi does that. Skool does community and courses. That's it.",[193,2833,2834],{},"Kajabi also includes unlimited emails on all plans. On Skool, if you want to email your members you need a separate tool.",[219,2836,2838],{"id":2837},"what-skool-does-better-than-kajabi","What Skool does better than Kajabi",[193,2840,2841],{},"Community and price. Skool's community features are better. The gamification, the simplicity, the engagement tools. Kajabi's community feels bolted on because it kind of is.",[193,2843,2844],{},"And then there's the price. Skool starts at $9/month. Kajabi starts at $143/month. If all you need is a community with courses, paying Kajabi prices makes no sense.",[219,2846,2848],{"id":2847},"who-should-use-kajabi","Who should use Kajabi",[193,2850,2851],{},"Established course creators who need an all-in-one platform and are already making money. If you need email marketing, sales funnels, and a website builder alongside your community, Kajabi is the play. If you just want a community, it's massive overkill.",[188,2853,2855],{"id":2854},"_4-teachable-29-309month","4. Teachable ($29-$309/month)",[193,2857,2858],{},"Teachable is a course platform first and foremost. They have some community features but they're not the main event. If you're comparing it to Skool, think of it as the opposite approach. Teachable is courses-first with community added on. Skool is community-first with courses added on.",[219,2860,2862],{"id":2861},"teachable-pricing","Teachable pricing",[461,2864,2865,2871,2877,2882],{},[464,2866,2867,2870],{},[304,2868,2869],{},"Starter:"," $29/month (annual), 7.5% transaction fee",[464,2872,2873,2876],{},[304,2874,2875],{},"Builder:"," $69/month (annual), 0% transaction fee",[464,2878,2879,2881],{},[304,2880,2754],{}," $139/month (annual), 0% transaction fee",[464,2883,2884,2887],{},[304,2885,2886],{},"Advanced:"," $309/month (annual), 0% transaction fee",[193,2889,2890],{},"The 7.5% transaction fee on Starter is rough. If you're making money on your courses, you probably want the Builder plan at $69/month to drop that to 0%.",[193,2892,2893],{},"They offer a 7-day free trial with a 30-day money-back guarantee.",[219,2895,2897],{"id":2896},"what-teachable-does-better-than-skool","What Teachable does better than Skool",[193,2899,2900],{},"Course delivery. Quizzes, certificates, completion tracking, structured modules. If you're selling a proper online course with assessments and progression, Teachable is built for that. Skool's course features are simpler.",[193,2902,2903],{},"The Builder plan at $69/month with 0% transaction fees is also a decent deal if courses are your main thing.",[219,2905,2907],{"id":2906},"what-skool-does-better-than-teachable","What Skool does better than Teachable",[193,2909,2910],{},"Community. It's not even close. Teachable's community features are basic. No gamification, no real engagement tools. If you want people talking to each other and coming back regularly, Skool wins easily.",[193,2912,2913],{},"Skool also has a native mobile app. Teachable is mainly web-based.",[219,2915,2917],{"id":2916},"who-should-use-teachable","Who should use Teachable",[193,2919,2920],{},"Course creators who want structured, assessment-heavy courses and don't care much about community. If you're selling a certification course or a course with quizzes and grading, Teachable does that better than Skool.",[188,2922,2924],{"id":2923},"_5-discord-free","5. Discord (Free)",[193,2926,2927],{},"Discord is the wildcard on this list. It's completely free, has 200 million monthly active users, and can do a lot of what paid platforms do. Just not as neatly.",[219,2929,2931],{"id":2930},"discord-pricing","Discord pricing",[461,2933,2934,2940,2946],{},[464,2935,2936,2939],{},[304,2937,2938],{},"Free:"," Unlimited members, channels, voice and video",[464,2941,2942,2945],{},[304,2943,2944],{},"Nitro Basic:"," $2.99/month",[464,2947,2948,2951],{},[304,2949,2950],{},"Nitro Full:"," $9.99/month",[193,2953,2954],{},"For monetisation, Discord has Server Subscriptions where you set tiers between $2.99-$199.99/month. Discord takes 10% of subscription revenue.",[193,2956,2957],{},"They also have Server Shops for selling digital products.",[219,2959,2961],{"id":2960},"what-discord-does-better-than-skool","What Discord does better than Skool",[193,2963,2964],{},"It's free. That's the big one. You can run a community of thousands of people without paying a penny. The voice and video channels are great for live hangouts. The bot ecosystem means you can automate almost anything.",[193,2966,2967],{},"Real-time chat is also something Discord does well. Skool's community feed is more like a forum. Discord feels more like a group chat.",[219,2969,2971],{"id":2970},"what-skool-does-better-than-discord","What Skool does better than Discord",[193,2973,2974],{},"Organisation and professionalism. Discord servers can get messy fast. Channels everywhere, notifications flying around, new members don't know where to look. Skool is much cleaner.",[193,2976,2977],{},"Skool has built-in courses. Discord has nothing like this. You'd need to use a separate platform for course content.",[193,2979,2980],{},"And the gamification. Skool's points and leaderboards work straight out of the box. On Discord you'd need to set up bots to get anything similar.",[219,2982,2984],{"id":2983},"who-should-use-discord","Who should use Discord",[193,2986,2987],{},"If you have no budget and don't need courses, Discord is a solid free option. It's also good if your audience is already on Discord (gaming, tech, crypto communities). But if you want something that looks professional and has courses built in, Skool is worth the $9/month.",[188,2989,2991],{"id":2990},"_6-heartbeat-49-849month","6. Heartbeat ($49-$849/month)",[193,2993,2994],{},"Heartbeat is a newer platform that's trying to sit between Skool and Circle. Clean interface, community and courses, events, and monetisation tools.",[219,2996,2998],{"id":2997},"heartbeat-pricing","Heartbeat pricing",[461,3000,3001,3007,3013],{},[464,3002,3003,3006],{},[304,3004,3005],{},"Build:"," $49/month, 350 member cap, 5% transaction fee",[464,3008,3009,3012],{},[304,3010,3011],{},"Grow:"," $149/month, 5,000 member cap, 2.5% transaction fee, 50 hours video hosting",[464,3014,3015,3018],{},[304,3016,3017],{},"Scale:"," $849/month, unlimited members, 1.25% transaction fee, 200 hours video hosting",[193,3020,3021],{},"That Build plan cap of 350 members is something to watch out for. And the 5% transaction fee on top of Stripe fees is steep.",[193,3023,3024],{},"They do offer a 14-day free trial with no credit card.",[219,3026,3028],{"id":3027},"what-heartbeat-does-better-than-skool","What Heartbeat does better than Skool",[193,3030,3031],{},"The interface is clean and modern. They have voice channels and co-working rooms which is a nice touch. Cohort-based courses with drip content give you more control than Skool's course setup.",[193,3033,3034],{},"Heartbeat also runs under your own domain which is good for branding.",[219,3036,3038],{"id":3037},"what-skool-does-better-than-heartbeat","What Skool does better than Heartbeat",[193,3040,3041],{},"Here's the big one. Heartbeat's native mobile app is only available on the Scale plan. That's $849/month. On Skool you get a mobile app on the $9/month plan. That's a massive difference.",[193,3043,3044],{},"The member cap on the Build plan (350) is also limiting. Skool gives you unlimited members on every plan.",[193,3046,3047],{},"And gamification. Skool has it. Heartbeat doesn't.",[219,3049,3051],{"id":3050},"who-should-use-heartbeat","Who should use Heartbeat",[193,3053,3054],{},"If you want a modern-looking community platform and you're comfortable spending $149/month or more, Heartbeat is worth a look. But the mobile app situation is a dealbreaker for most people. $849/month just to get a native app is hard to justify when Skool includes one for $9.",[188,3056,3058],{"id":3057},"what-about-geneva","What about Geneva?",[193,3060,3061],{},"You might see Geneva on other \"Skool alternatives\" lists. Don't bother. Geneva was acquired by Bumble in 2024 and rebranded as \"BFF: Make Friends\" in September 2025. It's now a social networking app for making friends, not a community platform for creators. No monetisation, no courses, no community management tools.",[193,3063,3064],{},"A lot of articles out there haven't been updated to reflect this. So if you see Geneva recommended as a Skool alternative, that article is out of date.",[188,3066,3068],{"id":3067},"so-which-one-should-you-pick","So which one should you pick?",[193,3070,3071],{},"Here's how I'd think about it.",[193,3073,3074,3080,3081,3083,3084,3086],{},[304,3075,3076,3077,3079],{},"Pick ",[197,3078,199],{"href":601}," if"," you want the simplest, cheapest way to run a community with courses. The $9/month Hobby plan is hard to beat and the gamification features genuinely help with engagement. Check out my ",[197,3082,1783],{"href":130}," and ",[197,3085,1473],{"href":126}," for more.",[193,3088,3089,3092],{},[304,3090,3091],{},"Pick Circle if"," you need more customisation and branding than Skool offers and you can afford $89/month or more.",[193,3094,3095,3098],{},[304,3096,3097],{},"Pick Mighty Networks if"," mobile experience is your top priority and you need courses (at $99/month+).",[193,3100,3101,3104],{},[304,3102,3103],{},"Pick Kajabi if"," you need an all-in-one platform with email marketing, funnels, and website builder. Only makes sense if you're already making money.",[193,3106,3107,3110],{},[304,3108,3109],{},"Pick Teachable if"," you're selling structured courses with assessments and don't care much about community.",[193,3112,3113,3116],{},[304,3114,3115],{},"Pick Discord if"," you have no budget and your audience is already there.",[193,3118,3119,3122],{},[304,3120,3121],{},"Skip Heartbeat"," unless you're comfortable paying $149/month+ and don't need a mobile app (or can afford $849/month for one).",[193,3124,3125,3126,3129,3130,3133],{},"For most people starting out, I'd say ",[197,3127,3128],{"href":601},"try Skool's 14-day free trial"," first. At $9/month it's the lowest risk option and you can always switch later if you outgrow it. I've been using it for a while and written about ",[197,3131,3132],{"href":66},"how to make money on the platform"," if you want the full picture.",{"title":262,"searchDepth":514,"depth":514,"links":3135},[3136,3137,3138,3144,3150,3156,3162,3168,3174,3175],{"id":2473,"depth":514,"text":2474},{"id":2038,"depth":514,"text":2039},{"id":2658,"depth":514,"text":2659,"children":3139},[3140,3141,3142,3143],{"id":2665,"depth":520,"text":2666},{"id":2695,"depth":520,"text":2696},{"id":2705,"depth":520,"text":2706},{"id":2715,"depth":520,"text":2716},{"id":2722,"depth":514,"text":2723,"children":3145},[3146,3147,3148,3149],{"id":2729,"depth":520,"text":2730},{"id":2764,"depth":520,"text":2765},{"id":2774,"depth":520,"text":2775},{"id":2784,"depth":520,"text":2785},{"id":2791,"depth":514,"text":2792,"children":3151},[3152,3153,3154,3155],{"id":2798,"depth":520,"text":2799},{"id":2827,"depth":520,"text":2828},{"id":2837,"depth":520,"text":2838},{"id":2847,"depth":520,"text":2848},{"id":2854,"depth":514,"text":2855,"children":3157},[3158,3159,3160,3161],{"id":2861,"depth":520,"text":2862},{"id":2896,"depth":520,"text":2897},{"id":2906,"depth":520,"text":2907},{"id":2916,"depth":520,"text":2917},{"id":2923,"depth":514,"text":2924,"children":3163},[3164,3165,3166,3167],{"id":2930,"depth":520,"text":2931},{"id":2960,"depth":520,"text":2961},{"id":2970,"depth":520,"text":2971},{"id":2983,"depth":520,"text":2984},{"id":2990,"depth":514,"text":2991,"children":3169},[3170,3171,3172,3173],{"id":2997,"depth":520,"text":2998},{"id":3027,"depth":520,"text":3028},{"id":3037,"depth":520,"text":3038},{"id":3050,"depth":520,"text":3051},{"id":3057,"depth":514,"text":3058},{"id":3067,"depth":514,"text":3068},[199],[535],"2026-05-08T00:00:00.000Z","The best alternatives to Skool in 2026. I've compared Circle, Mighty Networks, Kajabi, Teachable, Discord and Heartbeat. Pricing, features and who each one is best for.",{"src":3181},"/images/skool/skool-alternatives.webp",{},[3184,3190],{"headline":3185,"description":3186,"image":3187,"datePublished":3188,"dateModified":3188,"author":3189,"@type":550},"Best Skool Alternatives 2026: 6 Platforms Compared","An honest comparison of the best Skool alternatives in 2026. Circle, Mighty Networks, Kajabi, Teachable, Discord and Heartbeat.","/images/skool/skool-alternatives-2.webp","2026-05-08",{"name":178,"url":179,"@type":549},{"mainEntity":3191,"@type":571},[3192,3196,3200,3204],{"name":3193,"acceptedAnswer":3194,"@type":558},"What is the best alternative to Skool?",{"text":3195,"@type":557},"It depends on what you need. Circle is the best alternative if you want more customisation and branding. Mighty Networks is best if you want a mobile-first experience. Discord is the best free alternative. For most people starting a community, Skool's $9/month Hobby plan is hard to beat.",{"name":3197,"acceptedAnswer":3198,"@type":558},"Is there a free alternative to Skool?",{"text":3199,"@type":557},"Discord is the best free alternative to Skool. It offers unlimited members, voice and video channels, and you can monetise through Server Subscriptions. However it doesn't have built-in courses or gamification like Skool does.",{"name":3201,"acceptedAnswer":3202,"@type":558},"Is Skool or Kajabi better?",{"text":3203,"@type":557},"Skool is better for community-first creators. It starts at $9/month and has built-in gamification and community features. Kajabi starts at $143/month but is an all-in-one platform with email marketing, website builder, funnels, and course hosting. If you just need a community with courses, Skool wins on price and simplicity.",{"name":3205,"acceptedAnswer":3206,"@type":558},"Is Circle better than Skool?",{"text":3207,"@type":557},"Circle offers more customisation and branding options than Skool, plus workflows and automation on higher plans. But it starts at $89/month compared to Skool's $9/month Hobby plan. Circle also lacks Skool's gamification features. Circle is better for established creators who need a polished, branded experience.",{"title":3209,"description":3210,"ogTitle":3209,"ogDescription":3210,"twitterCard":576},"Best Skool Alternatives 2026 | 6 Platforms Compared","The best alternatives to Skool in 2026. Circle, Mighty Networks, Kajabi, Teachable, Discord and Heartbeat compared. Honest pricing and feature breakdown.","Q7SvpqdGbUeJvKOlTSJsPXtaCX7YtGlg4x7pNNexbs8",{"id":3213,"title":125,"archived":175,"authors":3214,"badge":3217,"body":3218,"categories":3689,"categorySlugs":3690,"date":3178,"description":3691,"extension":538,"image":3692,"meta":3694,"navigation":542,"path":126,"schemaOrg":3695,"seo":3718,"stem":127,"__hash__":3721},"posts/3.blog/skool-pricing.md",[3215],{"name":178,"to":179,"avatar":3216},{"src":181},{"label":199},{"type":185,"value":3219,"toc":3678},[3220,3224,3227,3238,3242,3245,3364,3367,3374,3378,3381,3384,3391,3394,3397,3401,3404,3410,3413,3416,3420,3423,3426,3549,3556,3563,3566,3568,3576,3580,3583,3591,3594,3598,3600,3605,3619,3624,3638,3641,3645,3652,3658,3662,3669],[188,3221,3223],{"id":3222},"skool-pricing-in-2026","Skool pricing in 2026",[193,3225,3226],{},"So you want to know how much Skool costs. Fair enough. It's one of those things that should be simple but there are a few things you need to know before you pick a plan. Especially around the transaction fees. That's the bit that catches people out.",[193,3228,3229,3230,3233,3234,3237],{},"I've been using Skool for a while now and I've written a ",[197,3231,3232],{"href":130},"full review of the platform"," if you want the bigger picture. If you're not sure ",[197,3235,3236],{"href":166},"what Skool actually is",", start there. But this post is just about the money side of things. What you pay, what they take, and which plan makes sense for you.",[188,3239,3241],{"id":3240},"the-two-plans","The two plans",[193,3243,3244],{},"Skool keeps things pretty straightforward. There are only two plans to choose from.",[622,3246,3247,3259],{},[625,3248,3249],{},[628,3250,3251,3253,3256],{},[631,3252],{},[631,3254,3255],{},"Hobby",[631,3257,3258],{},"Pro",[638,3260,3261,3271,3282,3292,3302,3310,3319,3328,3338,3347,3356],{},[628,3262,3263,3266,3268],{},[643,3264,3265],{},"Monthly price",[643,3267,2062],{},[643,3269,3270],{},"$99/month",[628,3272,3273,3276,3279],{},[643,3274,3275],{},"Annual price",[643,3277,3278],{},"~$7.50/month (2 months free)",[643,3280,3281],{},"~$82.50/month (2 months free)",[628,3283,3284,3286,3289],{},[643,3285,2070],{},[643,3287,3288],{},"10% + $0.30",[643,3290,3291],{},"2.9% + $0.30",[628,3293,3294,3297,3300],{},[643,3295,3296],{},"Members",[643,3298,3299],{},"Unlimited",[643,3301,3299],{},[628,3303,3304,3306,3308],{},[643,3305,2103],{},[643,3307,3299],{},[643,3309,3299],{},[628,3311,3312,3315,3317],{},[643,3313,3314],{},"Videos",[643,3316,3299],{},[643,3318,3299],{},[628,3320,3321,3324,3326],{},[643,3322,3323],{},"Live calls",[643,3325,3299],{},[643,3327,3299],{},[628,3329,3330,3333,3336],{},[643,3331,3332],{},"Admins",[643,3334,3335],{},"1",[643,3337,3299],{},[628,3339,3340,3343,3345],{},[643,3341,3342],{},"Custom URL",[643,3344,2087],{},[643,3346,2126],{},[628,3348,3349,3352,3354],{},[643,3350,3351],{},"Hide suggested communities",[643,3353,2087],{},[643,3355,2126],{},[628,3357,3358,3360,3362],{},[643,3359,2142],{},[643,3361,2145],{},[643,3363,2145],{},[193,3365,3366],{},"Both plans come with a 14-day free trial. You need a credit card to start the trial and it converts to the paid plan on day 15 if you don't cancel. So set a reminder if you're on the fence.",[193,3368,3369,3370,3373],{},"If you want to ",[197,3371,3372],{"href":601},"start your free trial now",", you can always switch plans later.",[188,3375,3377],{"id":3376},"the-hobby-plan-9month","The Hobby plan ($9/month)",[193,3379,3380],{},"The Hobby plan is new. Skool used to be $99/month only, which put a lot of people off. Now there's a way to get started for $9/month, which is a much easier pill to swallow.",[193,3382,3383],{},"You get all the core features. Unlimited members, unlimited courses, unlimited videos, live calls. Basically everything you need to run a community. The catch is the transaction fee.",[193,3385,3386,3387,3390],{},"On Hobby, Skool takes ",[304,3388,3389],{},"10% + $0.30 per transaction",". So if someone pays you $50/month for your community, Skool takes $5.30 of that. If they pay $100/month, Skool takes $10.30.",[193,3392,3393],{},"The other thing is you only get 1 admin. So it's just you. If you're running this solo that's fine. But if you want to bring someone else in to help manage things, you'll need Pro.",[193,3395,3396],{},"You also can't use a custom Skool URL or hide suggested communities on Hobby. The suggested communities thing is worth knowing about. It means your members will see other groups recommended to them in the sidebar. Some people don't care about this. Others hate it because it's basically advertising other communities to your paying members.",[188,3398,3400],{"id":3399},"the-pro-plan-99month","The Pro plan ($99/month)",[193,3402,3403],{},"Pro is the plan Skool has always had. It's $99/month, or about $82.50/month if you pay annually.",[193,3405,3406,3407,3409],{},"The big difference is the transaction fee drops to ",[304,3408,3291],{}," for payments up to $900. For payments over $901 it's 3.9% + $0.30. Most community memberships are well under $900 so the 2.9% rate is what you'll usually pay.",[193,3411,3412],{},"On Pro, that same $50/month member costs you $1.75 in fees instead of $5.30. And the $100/month member costs $3.20 instead of $10.30.",[193,3414,3415],{},"You also get unlimited admins, a custom URL, and the ability to hide suggested communities so your members aren't being shown other groups while they're in yours.",[188,3417,3419],{"id":3418},"the-transaction-fees-are-the-real-decision","The transaction fees are the real decision",[193,3421,3422],{},"The monthly price difference between Hobby and Pro is $90. But the real cost depends on how much revenue your community brings in. Because those transaction fees add up.",[193,3424,3425],{},"Let me give you some real numbers.",[622,3427,3428,3447],{},[625,3429,3430],{},[628,3431,3432,3435,3438,3441,3444],{},[631,3433,3434],{},"Monthly revenue",[631,3436,3437],{},"Hobby fees (10% + $0.30)",[631,3439,3440],{},"Pro fees (2.9% + $0.30)",[631,3442,3443],{},"Hobby total cost",[631,3445,3446],{},"Pro total cost",[638,3448,3449,3464,3481,3498,3515,3532],{},[628,3450,3451,3454,3457,3459,3462],{},[643,3452,3453],{},"$0 (free community)",[643,3455,3456],{},"$0",[643,3458,3456],{},[643,3460,3461],{},"$9",[643,3463,1187],{},[628,3465,3466,3469,3472,3475,3478],{},[643,3467,3468],{},"$500",[643,3470,3471],{},"~$51.50",[643,3473,3474],{},"~$16",[643,3476,3477],{},"~$60.50",[643,3479,3480],{},"~$115",[628,3482,3483,3486,3489,3492,3495],{},[643,3484,3485],{},"$1,000",[643,3487,3488],{},"~$103",[643,3490,3491],{},"~$32",[643,3493,3494],{},"~$112",[643,3496,3497],{},"~$131",[628,3499,3500,3503,3506,3509,3512],{},[643,3501,3502],{},"$1,300",[643,3504,3505],{},"~$133.90",[643,3507,3508],{},"~$41.60",[643,3510,3511],{},"~$142.90",[643,3513,3514],{},"~$140.60",[628,3516,3517,3520,3523,3526,3529],{},[643,3518,3519],{},"$2,000",[643,3521,3522],{},"~$206",[643,3524,3525],{},"~$64",[643,3527,3528],{},"~$215",[643,3530,3531],{},"~$163",[628,3533,3534,3537,3540,3543,3546],{},[643,3535,3536],{},"$5,000",[643,3538,3539],{},"~$515",[643,3541,3542],{},"~$160",[643,3544,3545],{},"~$524",[643,3547,3548],{},"~$259",[193,3550,3551,3552,3555],{},"The break-even point is around ",[304,3553,3554],{},"$1,300/month"," in revenue. Below that, Hobby is cheaper. Above that, Pro starts saving you money. And the more you earn, the bigger the gap gets.",[193,3557,3558,3559,3562],{},"If you're just getting started and your community isn't making money yet, Hobby is the obvious choice. You can always upgrade later. This is the exact call I had to make when I started ",[197,3560,3561],{"href":290},"my own matched betting community"," on Skool in August 2026, so these numbers aren't abstract to me.",[193,3564,3565],{},"Use the calculator below to plug in your own numbers and see exactly what you'd take home on each plan.",[782,3567],{},[3569,3570,3573],"callout",{"color":3571,"icon":3572},"info","i-lucide-info",[193,3574,3575],{},"If you're already pulling in over $1,300/month, you're losing money on Hobby. Yes, I'm a maths genius.",[188,3577,3579],{"id":3578},"what-about-the-annual-plans","What about the annual plans?",[193,3581,3582],{},"Both plans offer annual billing at a discount. Skool calls it \"2 months free\", which works out to about a 16% discount.",[461,3584,3585,3588],{},[464,3586,3587],{},"Hobby annual: $90/year ($7.50/month)",[464,3589,3590],{},"Pro annual: $990/year ($82.50/month)",[193,3592,3593],{},"If you know you're going to stick with Skool for a year, the annual plan saves you a bit. But if you're just testing things out, stick with monthly. There's no point locking yourself in.",[188,3595,3597],{"id":3596},"which-plan-should-you-pick","Which plan should you pick?",[193,3599,3071],{},[193,3601,3602],{},[304,3603,3604],{},"Pick Hobby if:",[461,3606,3607,3610,3613,3616],{},[464,3608,3609],{},"You're just getting started and testing whether a community is right for you",[464,3611,3612],{},"Your community is free or making less than $1,300/month",[464,3614,3615],{},"You're running things solo",[464,3617,3618],{},"You don't care about the suggested communities showing up for your members",[193,3620,3621],{},[304,3622,3623],{},"Pick Pro if:",[461,3625,3626,3629,3632,3635],{},[464,3627,3628],{},"Your community is making over $1,300/month",[464,3630,3631],{},"You want to bring in other admins to help manage",[464,3633,3634],{},"You want a custom URL for your brand",[464,3636,3637],{},"You don't want Skool recommending other groups to your members",[193,3639,3640],{},"If you're somewhere in between, start with Hobby. There's no penalty for upgrading later. And $9/month is a pretty low bar to test whether building a community is something that works for you.",[188,3642,3644],{"id":3643},"dont-forget-the-affiliate-program","Don't forget the affiliate program",[193,3646,3647,3648,3651],{},"One more thing worth mentioning. Skool has an ",[197,3649,3650],{"href":66},"affiliate program"," that pays 40% recurring commission. That's $39.60/month for every person you refer who stays on the Pro plan. It's one of the highest recurring commissions in the SaaS space.",[193,3653,3654,3655,3657],{},"Even if you're on the Hobby plan yourself, you can still earn affiliate commissions. A few referrals and Skool basically pays for itself. I've written more about ",[197,3656,1952],{"href":66}," if you want to dig into that.",[188,3659,3661],{"id":3660},"ready-to-get-started","Ready to get started?",[193,3663,3664,3665,3668],{},"Skool offers a ",[197,3666,3667],{"href":601},"14-day free trial"," on both plans. You get full access during the trial so you can see if it's right for you before paying anything. Just remember to cancel before day 15 if it's not for you.",[193,3670,3671,3672,3675,3676,470],{},"If you want to learn more about the platform before signing up, check out my ",[197,3673,3674],{"href":130},"Skool review"," or my post on ",[197,3677,3236],{"href":166},{"title":262,"searchDepth":514,"depth":514,"links":3679},[3680,3681,3682,3683,3684,3685,3686,3687,3688],{"id":3222,"depth":514,"text":3223},{"id":3240,"depth":514,"text":3241},{"id":3376,"depth":514,"text":3377},{"id":3399,"depth":514,"text":3400},{"id":3418,"depth":514,"text":3419},{"id":3578,"depth":514,"text":3579},{"id":3596,"depth":514,"text":3597},{"id":3643,"depth":514,"text":3644},{"id":3660,"depth":514,"text":3661},[199],[535],"A breakdown of Skool pricing in 2026. The Hobby plan is $9/month, the Pro plan is $99/month. I'll explain the transaction fees, the differences, and which one you should pick.",{"src":3693},"/images/skool/skool-pricing.webp",{},[3696,3700],{"headline":125,"description":3697,"image":3698,"datePublished":3188,"dateModified":3188,"author":3699,"@type":550},"A full breakdown of Skool pricing in 2026. Hobby plan ($9/mo) vs Pro plan ($99/mo), transaction fees, and which plan you should choose.","/images/skool/skool-pricing-thumbnail.webp",{"name":178,"url":179,"@type":549},{"mainEntity":3701,"@type":571},[3702,3706,3710,3714],{"name":3703,"acceptedAnswer":3704,"@type":558},"How much does Skool cost?",{"text":3705,"@type":557},"Skool has two plans. The Hobby plan costs $9 per month and the Pro plan costs $99 per month. Both plans come with a 14-day free trial. You can also save money by paying annually, which gives you 2 months free.",{"name":3707,"acceptedAnswer":3708,"@type":558},"What are Skool's transaction fees?",{"text":3709,"@type":557},"On the Hobby plan, Skool takes 10% + $0.30 per transaction. On the Pro plan, it's 2.9% + $0.30 for payments up to $900, and 3.9% + $0.30 for payments over $901.",{"name":3711,"acceptedAnswer":3712,"@type":558},"Does Skool have a free trial?",{"text":3713,"@type":557},"Yes. Skool offers a 14-day free trial on both the Hobby and Pro plans. You get full access to all features during the trial. A credit card is required at signup and your account converts to the paid plan on day 15 unless you cancel.",{"name":3715,"acceptedAnswer":3716,"@type":558},"When should I upgrade from Skool Hobby to Pro?",{"text":3717,"@type":557},"The break-even point is around $1,300 per month in community revenue. Below that, Hobby is cheaper. Above that, Pro saves you money because the transaction fee drops from 10% to 2.9%.",{"title":3719,"description":3720,"ogTitle":3719,"ogDescription":3720,"twitterCard":576},"Skool Pricing 2026 | Hobby vs Pro Plan Compared","Skool pricing explained. $9 Hobby vs $99 Pro plan. Transaction fees, features, and which plan is right for you. Updated for 2026.","NZyk0TZXaFTRUtyoYTJtsZTKxFfiaw5lWMYrDK_TgvI",{"id":3723,"title":129,"archived":175,"authors":3724,"badge":3727,"body":3729,"categories":4352,"categorySlugs":4354,"date":4356,"description":4357,"extension":538,"image":4358,"meta":4360,"navigation":542,"path":130,"schemaOrg":4361,"seo":4386,"stem":131,"__hash__":4389},"posts/3.blog/skool-review.md",[3725],{"name":178,"to":179,"avatar":3726},{"src":181},{"label":3728},"Reviews, Skool",{"type":185,"value":3730,"toc":4330},[3731,3739,3742,3745,3749,3760,3764,3767,3773,3775,3791,3797,3799,3802,3805,3808,3812,3815,3821,3823,3826,3844,3848,3853,3871,3877,3881,3888,3891,3894,3898,3907,3911,3914,3918,3925,3929,3932,3936,3943,3947,3950,3953,3957,3960,3964,3967,3971,3974,3978,3981,3984,3992,3999,4003,4006,4022,4047,4051,4055,4062,4107,4111,4114,4118,4121,4127,4134,4140,4162,4166,4169,4189,4192,4196,4199,4230,4234,4237,4241,4244,4247,4254,4258,4271,4309,4313,4316,4320,4327],[188,3732,3734,3735],{"id":3733},"skool-review-2026-an-idiots-guide-updated-for-2026","Skool Review 2026, an Idiots Guide ",[3736,3737,3738],"span",{},"Updated for 2026",[193,3740,3741],{},"Here it is guys, my skool review and guide! Well, idiot's guide to skool.com to be accurate. You've probably heard a lot about Skool recently. And there is good reason for this. It is blowing up everywhere, due to a huge investment made by Alex Hormozi. Let's be honest, the reason you are reading this now is because of Alex Hormozi. I hadn't heard of Skool before his investment, and I'm guessing I'm in the same boat as you lot reading this.",[193,3743,3744],{},"In this post we are going to take a look at what the heck Skool is, whether you should sign up to it, and loads of other stuff relating to it. So we can find out if its any good and worth investing our time in!",[219,3746,3748],{"id":3747},"what-on-earth-is-skool","What on earth is Skool?",[193,3750,3751,3752,3755,3756,3759],{},"So the big question, what is Skool? I have ",[197,3753,3754],{"href":166},"answered this here",". But to summarise, it advertises itself as a \"community platform\". This basically means you can create and join different communities. Some of these communities are free to join whilst others you have to pay to join. Basically it is an education platform (that's why its called Skool I'm guessing 🙃) that allows you to learn specific topics. The best way to get a grasp of what it is is to ",[197,3757,3758],{"href":601},"create an account"," and see what it's all about.",[219,3761,3763],{"id":3762},"is-skool-any-good","Is Skool any good?",[193,3765,3766],{},"Now we know what Skool is, lets take a look at whether it's any good! How are we going to determine if it's any good? I hear you ask. Well let's set out to learn something. If we do learn something, then I think it will be fair to say that Skool is good. If we do not learn something, I think it will probably be fair to say that Skool is bad. This is of course the most scientific approach to reaching this determination. As I am typing this, I am browsing through the communities in an attempt to find a subject that would be of interest to learn. I am drawn to a group called \"THP Jump Training - this course will give you all the resources to get your first dunk and beyond!\".",[193,3768,3769],{},[265,3770],{"alt":3771,"src":3772},"THP Jump Training","/images/wp/thp-jump-training.webp",[193,3774,3771],{},[193,3776,3777,3778,3782,3783,3787,3788,470],{},"This sounds great and I would actually love to do that, but I will try to find a group a bit more specific to coding or the internet in general. Okay, so I have found a community called \"",[197,3779,3781],{"href":3780},"/skool-group/amplify-views","Amplify Views","\", this is a private group with the description: \"We're on a mission to take 1,000 YouTube channels to over 100,000 subscribers\". This sounds good to me, as I have a ",[197,3784,3786],{"href":179,"rel":3785},[317],"YouTube channel"," where I once ",[197,3789,3790],{"href":154},"uploaded a video every day for 90 days",[193,3792,3793],{},[265,3794],{"alt":3795,"src":3796},"Skool.com Amplify Views community","/images/wp/amplify-views.webp",[193,3798,3795],{},[193,3800,3801],{},"I have submitted my application and my membership is pending. I will receive a notification once I have been accepted into the group. So far I am finding the website easy to navigate and intuitive to use. Which is obviously good. So far I am of the opinion that Skool is... wait for it... good.",[193,3803,3804],{},"Right, so a few minutes have passed and I have been accepted into the community 🥳. I'm having a look around and there seems to be a lot of useful content here. Remember this is a free community so I have not paid a penny for all of this information that is available.",[193,3806,3807],{},"The first tab is the \"Community\" tab, it seems to mostly be people posting questions and other users responding. This is great as it is a group of likeminded individuals all in the same boat, trying to achieve the same thing. Helping each other to get there. The next tab is \"Classroom\" - this is the one that interests me the most and is the main reason I picked this community to look at. This contains a \"Full YouTube course with over 20 hours of content\". So far I am very impressed. I will have a look over the course and update this review once I have gone through the videos. It is worth mentioning, that it is almost certainly a case of there being great courses available and not so great courses. This will come down to the specific community creator.",[219,3809,3811],{"id":3810},"my-experience-being-a-group-member-on-skool","My experience being a group member on skool",[193,3813,3814],{},"I have now been an active member of the community for a couple of days. In that time I have managed to rise to number 1 on 7 day leaderboard 😃. And number 4 on the 30 day leaderboard. Impressive, I know.",[193,3816,3817],{},[265,3818],{"alt":3819,"src":3820},"Number 1 on the 30 day leaderboard in the Amplify Views skool group","/images/wp/amplify-views-number-one.webp",[193,3822,3819],{},[193,3824,3825],{},"One thing I have noticed, is that the community is very friendly. Everyone is polite to one another. Everyone is grateful for any advice offered to them. This is a pleasant surprise to me. I had imagined that there would be at least a few rude comments. But I am yet to see a single swear word. I imagine this is down to a couple of things.",[1352,3827,3828,3838],{},[464,3829,3830,3837],{},[3831,3832,3834],"h5",{"id":3833},"the-gamification-aspect",[304,3835,3836],{},"The gamification aspect","Which rewards users based off of likes. You won't get very far by being rude or abrupt.",[464,3839,3840,3843],{},[304,3841,3842],{},"A common goal","\nBecause everyone is in the same boat. Working towards the same thing. There is a strong sense of community. you see the same faces each time you login. You get to know people. Skool has got the community aspect down very well.",[219,3845,3847],{"id":3846},"alex-hormozi-and-skool","Alex Hormozi and Skool",[3849,3850,3852],"h4",{"id":3851},"who-is-alex-hormozi","Who is Alex Hormozi",[193,3854,3855,3856,3861,3862,3867,3868,470],{},"If you don't know this already, I will be surprised, but Alex Hormozi is a famous entrepreneur. I first discovered ",[197,3857,3860],{"href":3858,"rel":3859},"https://www.youtube.com/@AlexHormozi",[317],"his content on YouTube"," in January 2023. He provides amazing advice to business owners on this channel and its no surprise to see how quickly it has grown. He owns ",[197,3863,3866],{"href":3864,"rel":3865},"https://www.acquisition.com/",[317],"acquisition.com"," most famously but we are talking about him now because of his recent involvement with ",[197,3869,3870],{"href":601},"Skool.com",[193,3872,3873],{},[265,3874],{"alt":3875,"src":3876},"An actual photograph taken from when Alex Hormozi signed the deal to invest in Skool.com","/images/wp/Theres-no-Skool-like-the-old-Skool3-1024x449.webp",[3849,3878,3880],{"id":3879},"why-is-alex-hormozis-involvement-in-skoolcom-significant","Why is Alex Hormozi's involvement in skool.com significant?",[193,3882,3883,3884,3887],{},"The reason I am personally interested by Alex Hormozi's involvement with skool.com is quite simple. Hormozi is an extremely credible entrepreneur. He is extremely successful. But more importantly, he is extremely influential because of this. I have written a whole post on ",[197,3885,3886],{"href":150},"why Alex Hormozi's involvement with skool is significant",". Check it out.",[193,3889,3890],{},"Now I can't remember the exact quote and I don't know what the video was that I saw this 😅.. BUT I remember him saying that he wouldn't publicly name companies that he has invested in. And the reason that he gave for this, was that they would have so much more to gain than him by doing this. And he (Alex) would have a lot to lose, reputation wise, if something went bad with one of these companies. He said that in order for him to put his face on a company, he would have to REALLY believe in it. Now as I mentioned, I can't remember the exact quote, but that was the gist of it. This is why I am interested in skool.",[193,3892,3893],{},"Alex - If you are reading this, and this was your plan all along. And you planted that seed all that time ago knowing it would make people extra interested in skool. You are even more of a business genius than I ever imagined 👏.",[219,3895,3897],{"id":3896},"what-can-you-learn-on-skoolcom","What can you learn on Skool.com?",[193,3899,3900,3901,3083,3903,470],{},"So what exactly can you learn on Skool.com? The short answer is anything. The slightly longer answer is - anything that has a community. So with that in mind, let's take a look at what sort of communities are available! I've reviewed a few groups myself including ",[197,3902,3781],{"href":3780},[197,3904,3906],{"href":3905},"/skool-group/kourse","Free Skool Course (Kourse)",[219,3908,3910],{"id":3909},"who-is-skool-for","Who is skool for?",[193,3912,3913],{},"Now we know what skool is, let's look at who it is suitable for. The broad answer to this is - skool is suitable for everyone. But there are 2 main types of users. Group creators and group subscribers.",[3849,3915,3917],{"id":3916},"group-creators-on-skoolcom","Group Creators on skool.com",[193,3919,3920,3921,3924],{},"Pretty self explanatory this one. Group creators are users who create groups. Anyone can ",[197,3922,3923],{"href":601},"become a group creator",". And there is no limitation (that I know of) in regards to what your group can be about. The point is that it is to help each other learn. For this reason you see a lot of groups relating to learning very specific skills.",[3849,3926,3928],{"id":3927},"group-subscribers-on-skoolcom","Group Subscribers on skool.com",[193,3930,3931],{},"Also pretty self explanatory. But group subscribers are users who join, or subscribe, to a group or groups.",[219,3933,3935],{"id":3934},"how-can-you-make-money-using-skoolcom","How can you make money using skool.com?",[193,3937,3938,3939,3942],{},"So how exactly are people making money using skool.com? Well this is a very interesting question. And you may or may not be surprised to hear that there are multiple ways to make money using skool. Notice I say \"using skool\", not \"on skool\". Because while there technically are multiple ways to make money on skool, using skool as a tool to help you make money in other ways is also possible. I have written a ",[197,3940,3941],{"href":66},"detailed step by step guide on how to make money on skool",". But lets take a quick look at what I'm waffling on about!",[3849,3944,3946],{"id":3945},"make-money-on-skool-by-charging-for-group-membership","Make money on skool by charging for group membership",[193,3948,3949],{},"The most obvious way to make money on skool.com is by charging your group members a monthly fee for access to your group. This is pretty self explanatory. Skool make this super easy to do. All you have to do, as a group owner, is connect your bank account through Stripe and then set the price you wish to charge your users monthly.",[193,3951,3952],{},"Remember though, you don't have to charge your users. This may seem counter intuitive, but keep reading to see why this may be a good decision.",[3849,3954,3956],{"id":3955},"make-money-on-skool-by-getting-people-to-sign-up-through-your-affiliate-link","Make money on skool by getting people to sign up through your affiliate link",[193,3958,3959],{},"This next option isn't the main point of skool.com. But you can earn a commission by referring people to skool. When someone signs up after clicking your referral link (also known as affiliate link), you earn a commission. I have included my own link on this page!",[3849,3961,3963],{"id":3962},"using-skool-as-a-supplementary-tool-in-your-business-to-nurture-your-community","Using skool as a supplementary tool in your business to nurture your community",[193,3965,3966],{},"Skool is a great place to grow your community and keep in contact with them. By providing value to your community for free, it is possible that they will eventually become paying customers of yours. I have noticed some group owners have both a free group and a paid for one. With the paid for group acting as an \"upsell\" to the free group.",[3849,3968,3970],{"id":3969},"selling-products-and-services-to-your-free-skool-community","Selling products and services to your free skool community",[193,3972,3973],{},"Selling products and services to your skool community is a great way to monetise. By having a loyal following there is already a huge level of trust between yourself and your group. This makes selling to them that much easier. Of course, it is important to only sell or recommend products that you truly believe are suitable for your group. And it would make no sense to break their trust by selling them sub par products.",[3849,3975,3977],{"id":3976},"level-up-your-skills-and-knowledge-using-skool-to-make-money","Level up your skills and knowledge using skool to make money",[193,3979,3980],{},"The main way you can use skool to make money is by joining groups. Now this might seem strange. But let me explain. There is so much knowledge available on skool. Knowledge that can be accessed by looking at courses. And knowledge that can be accessed by engaging with the community.",[193,3982,3983],{},"A large portion of the groups on skool are focussed on making money. By joining groups related to this. We can level up our money making skills and learn from others who have more experience than ourselves. And once our money making skills are levelled up. We will be able to use them to... wait for it... make money!",[193,3985,3986,3987,3991],{},"There is so much information there. Information that is being provided by people who have been there and done it. The best part is you have a direct line of contact to these people! This is what makes certain groups more valuable than others. And why group owners can justify charging for membership. As mentioned previously. The ",[197,3988,3990],{"href":3989},"#good-value","quality of these groups"," will vary depending on the group owner. But it isn't difficult to see the standout groups.",[193,3993,3994,3995,3998],{},"But check out my full ",[197,3996,3997],{"href":66},"guide on how to make money on skool"," for step by step instructions on how to start earning with the platform!",[219,4000,4002],{"id":4001},"how-to-tell-if-a-group-provides-good-value","How to tell if a group provides good value?",[193,4004,4005],{},"There are a lot of groups to choose from on skool. Some of them are worth your time. Some of them are not. Here are some indicators of whether a group is worth joining:",[1352,4007,4008,4015],{},[464,4009,4010,4014],{},[3849,4011,4013],{"id":4012},"number-of-members-in-a-group","Number of members in a group","The number of members in a group is a good measure to tell if a group is worth joining. If there are lots of members - chances are the group is worth being a part of.",[464,4016,4017,4021],{},[3849,4018,4020],{"id":4019},"an-active-community","An active community","How active the community. The more active a community is, with providing good information, the better a group is. However, some groups may be very active but the activity isn't always helpful to us. An example of this are groups where most of the members are trying to sell their services.",[258,4023,4024,4031,4035,4040],{"orientation":261,"variant":263},[193,4025,4026],{},[265,4027],{"alt":4028,"src":4029,"className":4030},"Try skool for free!","/images/wp/cta-skool-cta-image.webp",[269,270],[273,4032,4033],{"v-slot:title":262},[193,4034,4028],{},[273,4036,4037],{"v-slot:description":262},[193,4038,4039],{},"Get a 14-day free trial of skool. Create a community and see what it's all about without spending a penny!",[273,4041,4042],{"v-slot:links":262},[286,4043,4044],{"size":288,"target":289,"to":601,"variant":292},[193,4045,4046],{},"Free Trial",[219,4048,4050],{"id":4049},"getting-started-with-skool","Getting started with skool",[3849,4052,4054],{"id":4053},"how-to-create-your-own-group-on-skoolcom","How to create your own group on skool.com",[193,4056,4057,4058,4061],{},"Creating a group on skool is super easy. I even managed to do it. You do eventually have to pay to be a group owner. And the cost is currently $99/month for the pro plan or $9/month for the hobby plan. You can get a ",[197,4059,4060],{"href":601},"14 day free trial"," however. So it is worth signing up to see if it is a good fit for you. If you don't get on well with it, simply cancel and you don't have to pay.",[215,4063,4065,4069,4075,4081,4085,4088,4094,4098,4101],{"level":4064},"4",[3849,4066,4068],{"id":4067},"create-account","Create account",[193,4070,4071,4072,4074],{},"The first thing you need to do is ",[197,4073,3758],{"href":601},". Simply enter your first name, last name, email address and a password.",[193,4076,4077],{},[265,4078],{"alt":4079,"src":4080},"Create an account on skool.com","/images/wp/skool-create-account.webp",[3849,4082,4084],{"id":4083},"verify-email-address","Verify Email Address",[193,4086,4087],{},"Skool.com will now send you an email with a code. Enter this code on the next view to verify your account.",[193,4089,4090],{},[265,4091],{"alt":4092,"src":4093},"Enter email verification code","/images/wp/skool-verify-email.webp",[3849,4095,4097],{"id":4096},"enter-card-details","Enter card details",[193,4099,4100],{},"Now your account is verified, all you need to do is enter your group name (which can be changed later) and card details. Click \"Start Free Trial\" and you are all set! Congratulations, you are now the owner of your very own skool group!",[193,4102,4103],{},[265,4104],{"alt":4105,"src":4106},"Enter group name and card details to start your free trial","/images/wp/skool-card-details.webp",[3849,4108,4110],{"id":4109},"benefits-of-creating-a-group-on-skool","Benefits of creating a group on skool",[193,4112,4113],{},"The benefits of creating a group on skool.com could be huge. If you are willing to build your community and put in work, its clear to see how you could make some serious money. The platform is designed to have all the tools to help you build a community, in one place! This is great.",[219,4115,4117],{"id":4116},"is-skool-worth-the-money","Is Skool worth the money?",[193,4119,4120],{},"So the big question, is skool worth the money? At the time of writing this, skool is offering a 14-day free trial before charging $99 per month to be a group owner. Now the short answer to whether skool is worth $99/month is yes. Skool is definitely worth the money. It has all the tools you could ask for to build a solid community group. And for the price of just $99 per month you are able to use it to make way more than that. Whether that is through monetising your group by charging for membership or for using your community as a separate part of your business.",[219,4122,4124],{"id":4123},"price-update",[304,4125,4126],{},"PRICE UPDATE",[193,4128,4129,4130,4133],{},"Skool has recently changed their pricing! They now offer two plans. Hobby ($9/month) and Pro ($99/month). I've written a ",[197,4131,4132],{"href":126},"full breakdown of Skool pricing"," that covers the transaction fees, the differences between the two plans, and which one you should pick.",[193,4135,4136],{},[265,4137],{"alt":4138,"src":4139},"skool pricing 2026","/images/wp/skool-pricing-2025.webp",[258,4141,4142,4147,4152,4156],{"orientation":261,"variant":263},[193,4143,4144],{},[265,4145],{"alt":4028,"src":4029,"className":4146},[269,270],[273,4148,4149],{"v-slot:title":262},[193,4150,4151],{},"Create a Skool group for free!",[273,4153,4154],{"v-slot:description":262},[193,4155,4039],{},[273,4157,4158],{"v-slot:links":262},[286,4159,4160],{"size":288,"target":289,"to":601,"variant":292},[193,4161,4046],{},[219,4163,4165],{"id":4164},"pros-of-using-skool","Pros of using Skool?",[193,4167,4168],{},"There are sooo many pros to using skool. Here are a couple:",[1352,4170,4171,4178,4183],{},[464,4172,4173,4177],{},[3849,4174,4176],{"id":4175},"all-tools-in-one-place","All tools in one place","You have all the tools you could possibly need to build a community, all in one place. Obviously this is great, and means you don't have to stretch yourself all over the place using tools from different websites. It keeps things very simple.",[464,4179,4180,4182],{},[3849,4181,2081],{"id":2245},"The gamification aspect of skool.com makes building a community much easier. By having leaderboards, users are incentivised to take action and be an active part of the community.",[464,4184,4185],{},[3849,4186,4188],{"id":4187},"video-hosting-included","Video hosting included",[193,4190,4191],{},"Previously you could not host your videos on Skool. However this is no longer the case! You can now upload your videos directly to your page. Previously you could only use a video that had been uploaded elsewhere, such as YouTube. But it seems that the team at Skool have listened to feedback from group owners and made the improvement.",[219,4193,4195],{"id":4194},"cons-of-using-skool","Cons of using Skool?",[193,4197,4198],{},"Here is a list of the cons of skool:",[1352,4200,4201,4216],{},[464,4202,4203,4207,4208],{},[3849,4204,4206],{"id":4205},"you-have-to-pay-to-run-a-group","You have to pay to run a group","You do have to pay to run a group. At $99 per month this may be expensive for some users who aren't going to dive in fully. However I believe that pricing it at $99 per month is actually a good incentive to make sure you put the effort into your community and make it work.",[1462,4209,4210],{},[193,4211,4212,4215],{},[304,4213,4214],{},"UPDATE"," Skool now offers two price plans for group owners. The cheapest being just $9 per month!",[464,4217,4218,4222,4223],{},[3849,4219,4221],{"id":4220},"mobile-app-not-great-android-update-it-has-improved","Mobile app not great (android) -- UPDATE - it has improved","In my opinion the mobile app on android is not the best. I find it quite slow. The nav menu also seems to have an issue. If you are a member of a lot of groups, you need to scroll down to see them all in the nav menu. However I am unable to scroll down. The web app is absolutely fine however. I have had no problems with the web app at all.",[1462,4224,4225],{},[193,4226,4227,4229],{},[304,4228,4214],{}," I have started using the mobile app again (android) and it has improved dramatically. The scrolling issue with the navigation menu is not an issue anymore. The speed of the app has also improved 👍. I still personally find it a bit clunky but it is perfectly fine to use.",[219,4231,4233],{"id":4232},"why-should-you-use-skool","Why should you use Skool?",[193,4235,4236],{},"Everyone is talking about skool. So you think you should be using it. So you create a group. But you're still unsure why you should be using it. Well let's take a look at how skool can help you.",[3849,4238,4240],{"id":4239},"use-skool-to-grow-your-own-community","Use skool to grow your own community",[193,4242,4243],{},"Growing your own community is what skool is for. So this one is obvious. But the question is, why would you want to grow your own community? For those that already have some sort of audience. Whether that's on YouTube, Instagram or whatever, you will already be aware of this. For those just starting out, imagine this situation. You have a group of people, let's say 1000 people for the sake of an argument. 1000 people who view the information you put out. 1000 people who like you and engage with you. 1000 people who are interested in the same specific thing as you. The same thing that you make content about. These followers like you, trust you and take what you say seriously.",[193,4245,4246],{},"Now imagine if you had a product you were selling. Selling it to strangers is difficult. You would need to seek out potential buyers. Then make contact with them. You would need to nurture the whole sales process. However if you have an audience... You already have trust, you already know they are interested in your product, they like you. And you have direct contact with them through your platform. By now I hope you are starting to see the benefits of using skool to grow a community.",[193,4248,4249,4250,4253],{},"This is exactly why I started ",[197,4251,4252],{"href":290},"my own community"," on Skool in August 2026. It's a brand new matched betting group, aimed at a risk free way to make money from bookmaker promotions.",[219,4255,4257],{"id":4256},"alternatives-to-skool","Alternatives to Skool?",[193,4259,4260,4261,3083,4265,4270],{},"Here is a list of some alternatives to skool. Full disclosure, other than ",[197,4262,2619],{"href":4263,"rel":4264},"https://discord.com",[317],[197,4266,4269],{"href":4267,"rel":4268},"https://www.reddit.com",[317],"Reddit",", I have not used any of these platforms so have no idea how they compare.",[461,4272,4273,4278,4284,4290,4297,4302],{},[464,4274,4275],{},[197,4276,2619],{"href":4263,"rel":4277,"target":289},[317],[464,4279,4280],{},[197,4281,1847],{"href":4282,"rel":4283,"target":289},"https://kajabi.com",[317],[464,4285,4286],{},[197,4287,2562],{"href":4288,"rel":4289,"target":289},"https://www.mightynetworks.com",[317],[464,4291,4292],{},[197,4293,4296],{"href":4294,"rel":4295,"target":289},"https://bettermode.com",[317],"bettermode",[464,4298,4299],{},[197,4300,4269],{"href":4267,"rel":4301,"target":289},[317],[464,4303,4304],{},[197,4305,4308],{"href":4306,"rel":4307,"target":289},"https://www.geneva.com",[317],"Geneva",[219,4310,4312],{"id":4311},"how-long-will-it-take-to-start-making-money-on-skool","How long will it take to start making money on skool?",[193,4314,4315],{},"How long will it take to start making money on skool? Well that really depends on the individual and how you use it to make money. If you are a group owner, you can make money as soon as you have paying members. It would help if you already have a following on a different platform. And it would really help if this following are loyal to you and be willing to pay to join your group!",[219,4317,4319],{"id":4318},"the-skool-games","The Skool Games",[193,4321,4322,4323,4326],{},"The Skool Games is a competition created by ",[197,4324,4325],{"href":150},"Alex Hormozi",". The goal is to make as much money as possible. There is a running leaderboard with the top 10 on the leader board each month winning a day with the main man himself.",[193,4328,4329],{},"This is an amazing incentive. As if making a load of money wasn't enough already. You now have the opportunity to hang out and network with some highly influential entrepreneurs. If you can't tell by now. Hormozi is big on incentivising individuals to take action. He has seen in his own businesses the power of this and knows the phychology behind it.",{"title":262,"searchDepth":514,"depth":514,"links":4331},[4332],{"id":3733,"depth":514,"text":4333,"children":4334},"Skool Review 2026, an Idiots Guide Updated for 2026",[4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351],{"id":3747,"depth":520,"text":3748},{"id":3762,"depth":520,"text":3763},{"id":3810,"depth":520,"text":3811},{"id":3846,"depth":520,"text":3847},{"id":3896,"depth":520,"text":3897},{"id":3909,"depth":520,"text":3910},{"id":3934,"depth":520,"text":3935},{"id":4001,"depth":520,"text":4002},{"id":4049,"depth":520,"text":4050},{"id":4116,"depth":520,"text":4117},{"id":4123,"depth":520,"text":4126},{"id":4164,"depth":520,"text":4165},{"id":4194,"depth":520,"text":4195},{"id":4232,"depth":520,"text":4233},{"id":4256,"depth":520,"text":4257},{"id":4311,"depth":520,"text":4312},{"id":4318,"depth":520,"text":4319},[4353,199],"Reviews",[4355,535],"reviews","2026-01-19T00:00:00.000Z","My 2026 review of Skool. Plus complete idiot’s guide. Everything you need to know about skool.com. My honest first impression and opinion.",{"src":4359},"/images/skool/skool-review.webp",{},[4362,4369],{"headline":4363,"description":4364,"image":4365,"datePublished":4366,"dateModified":4367,"author":4368,"@type":550},"Skool Review 2026: Complete Guide After 2 Years","My honest Skool review after 2 years. Complete guide to skool.com with updated 2026 pricing, pros & cons, and how to make money.","/images/wp/featured-skool-reviewTheres-no-Skool-like-the-old-Skool3.webp","2024-02-02","2026-01-19",{"name":178,"url":179,"@type":549},{"mainEntity":4370,"@type":571},[4371,4375,4378,4382],{"name":4372,"acceptedAnswer":4373,"@type":558},"Is Skool legit?",{"text":4374,"@type":557},"Yes, Skool is a legitimate community platform co-owned by Sam Ovens and Alex Hormozi. It allows creators to build paid or free communities with courses, gamification, and member engagement tools.",{"name":4117,"acceptedAnswer":4376,"@type":558},{"text":4377,"@type":557},"At $99/month for Pro or $9/month for Hobby, Skool is worth it if you're serious about building a community. It provides all the tools needed to grow, engage, and monetize your audience in one platform.",{"name":4379,"acceptedAnswer":4380,"@type":558},"How do you make money on Skool?",{"text":4381,"@type":557},"You can make money on Skool by charging monthly membership fees, earning affiliate commissions for referrals, selling products/services to your community, or using it to nurture leads for your business.",{"name":4383,"acceptedAnswer":4384,"@type":558},"Is Skool free to join?",{"text":4385,"@type":557},"Joining Skool communities is free. However, running your own group costs $9/month (Hobby) or $99/month (Pro). Skool offers a 14-day free trial for group creators.",{"title":4387,"description":4388,"ogTitle":4387,"ogDescription":4388,"twitterCard":576},"Skool Review 2026 | Pricing, Pros & Cons After 2 Years","I've used Skool for 2 years. Here's my honest review covering pricing ($99/mo), features, pros, cons, and whether it's actually worth it in 2026.","sFn2ytclomAjd9BxCByHM7DNI0JcfSCcHSTAd9tlBQk",{"id":4391,"title":161,"archived":175,"authors":4392,"badge":4395,"body":4397,"categories":4843,"categorySlugs":4846,"date":4850,"description":4851,"extension":538,"image":4852,"meta":4853,"navigation":542,"path":162,"schemaOrg":4854,"seo":4855,"stem":163,"__hash__":4858},"posts/3.blog/waas-blueprint.md",[4393],{"name":178,"to":179,"avatar":4394},{"src":181},{"label":4396},"Nuxt, Cloudflare, WaaS",{"type":185,"value":4398,"toc":4825},[4399,4406,4410,4413,4420,4423,4434,4437,4440,4444,4447,4456,4460,4466,4477,4480,4482,4486,4499,4555,4559,4582,4588,4590,4594,4597,4602,4611,4617,4621,4643,4649,4651,4655,4661,4664,4671,4675,4685,4688,4692,4695,4738,4742,4762,4764,4768,4771,4777,4791,4793,4797,4800,4803,4814,4817],[193,4400,4401],{},[265,4402],{"alt":4403,"className":4404,"src":4405},"WaaS Agency Blueprint",[269],"/images/waas/blueprint-featured.png",[4407,4408,161],"h1",{"id":4409},"the-blueprint-how-im-building-a-0-upfront-agency-using-nuxt",[193,4411,4412],{},"I am done with \"side projects.\"",[193,4414,4415,4416,4419],{},"For years, I was stuck in the ",[304,4417,4418],{},"Infinite Loop"," of starting new repos, configuring ESLint, and abandoning the project before I ever made a pound. I was a \"developer,\" but I wasn't a business owner.",[193,4421,4422],{},"This project is different.",[193,4424,4425,4426,4429,4430,4433],{},"I am building a ",[304,4427,4428],{},"WaaS (Website as a Service)"," agency. My goal is to hit ",[304,4431,4432],{},"£1,000 MRR"," (Monthly Recurring Revenue) by selling high-performance websites to local businesses.",[193,4435,4436],{},"Here is the exact blueprint—the stack, the business model, and the sales strategy—that I am using to get there.",[4438,4439],"hr",{},[188,4441,4443],{"id":4442},"the-model-why-waas","The Model: Why WaaS?",[193,4445,4446],{},"Most freelancers trade time for money. You build a WordPress site for £2,000, hand it over, and then you are unemployed again until you find the next client.",[193,4448,4449,4452,4453],{},[304,4450,4451],{},"WaaS changes the calculations.","\nInstead of charging a huge upfront fee, I'll charge ",[304,4454,4455],{},"£0 upfront and £25/month.",[219,4457,4459],{"id":4458},"the-tax-free-target","The \"Tax-Free\" Target",[193,4461,4462,4463,470],{},"My initial target is ",[304,4464,4465],{},"42 Clients",[461,4467,4468,4474],{},[464,4469,4470,4471,470],{},"42 Clients x £300/year = ",[304,4472,4473],{},"£12,600/year",[464,4475,4476],{},"This matches the UK Personal Tax-Free Allowance.",[193,4478,4479],{},"Once I hit this number, I effectively have a tax-free salary that requires almost zero maintenance.",[4438,4481],{},[188,4483,4485],{"id":4484},"the-tech-stack-100-profit-margins","The Tech Stack: 100% Profit Margins",[193,4487,4488,4489,4492,4493,3083,4496,470],{},"I'm done with WordPress. With this in mind I no longer need to pay for generic WordPress hosting. My stack is designed for ",[304,4490,4491],{},"Performance",", ",[304,4494,4495],{},"Zero Overhead",[304,4497,4498],{},"Developer Experience",[461,4500,4501,4512,4527,4538,4544],{},[464,4502,4503,4506,4507,470],{},[304,4504,4505],{},"Framework:"," ",[197,4508,4511],{"href":4509,"rel":4510},"https://nuxt.com",[317],"Nuxt",[464,4513,4514,4506,4517,3083,4522,470],{},[304,4515,4516],{},"Design:",[197,4518,4521],{"href":4519,"rel":4520},"https://ui.nuxt.com/",[317],"Nuxt UI",[197,4523,4526],{"href":4524,"rel":4525},"https://tailwindcss.com/",[317],"Tailwind CSS",[464,4528,4529,4506,4532,4537],{},[304,4530,4531],{},"Hosting:",[197,4533,4536],{"href":4534,"rel":4535},"https://workers.cloudflare.com/",[317],"Cloudflare (workers & pages)"," (Free Tier).",[464,4539,4540,4543],{},[304,4541,4542],{},"Forms & Logic:"," Cloudflare Workers + Postmark API.",[464,4545,4546,4506,4549,4554],{},[304,4547,4548],{},"CMS:",[197,4550,4553],{"href":4551,"rel":4552},"https://content.nuxt.com/",[317],"Nuxt Content"," - I'll handle updates (Client sends updates via email, I push to Git).",[219,4556,4558],{"id":4557},"why-this-stack-wins","Why this stack wins:",[1352,4560,4561,4570,4576],{},[464,4562,4563,4566,4567,470],{},[304,4564,4565],{},"Cost:"," My operating cost per website is effectively ",[304,4568,4569],{},"£0",[464,4571,4572,4575],{},[304,4573,4574],{},"Speed:"," Cloudflare Edge caching makes these sites faster than any WordPress build.",[464,4577,4578,4581],{},[304,4579,4580],{},"Security:"," No databases to hack. No plugins to update.",[193,4583,4584,4585,470],{},"Every £25 subscription is ",[304,4586,4587],{},"~98% profit",[4438,4589],{},[188,4591,4593],{"id":4592},"the-godfather-offer","The \"Godfather\" Offer",[193,4595,4596],{},"The hardest part of selling websites is convincing a plumber or a dog walker to trust you with £1,000. So, I removed the risk entirely.",[193,4598,4599],{},[304,4600,4601],{},"My Pitch:",[4603,4604,4605],"blockquote",{},[193,4606,4607],{},[4608,4609,4610],"em",{},"\"I will design and build your website for free. I build it on my private server first. You view it on your phone. If you don't love it, we walk away and you owe nothing. If you do love it, it's just £25/month to keep it live.\"",[193,4612,4613,4614],{},"This is ",[304,4615,4616],{},"\"Risk-Free Professionalism.\"",[219,4618,4620],{"id":4619},"the-pricing-tiers","The Pricing Tiers",[1352,4622,4623,4629],{},[464,4624,4625,4628],{},[304,4626,4627],{},"The Standard (£25/mo):"," 5-Page Site + Hosting + SSL + Standard Support (48hr turnaround for updates).",[464,4630,4631,4634,4635,4638,4639,4642],{},[304,4632,4633],{},"The Business (£40/mo):"," All of the above + ",[304,4636,4637],{},"Professional Email"," + ",[304,4640,4641],{},"Priority Support"," (Skip the queue, 12hr turnaround for updates).",[193,4644,4645,4648],{},[4608,4646,4647],{},"Note on Email:"," I anchor this against the market. A business owner would pay Google/Microsoft ~£7-£10/mo just for the email address. For a small extra fee, I bundle it in and handle all the technical DNS management for them.",[4438,4650],{},[188,4652,4654],{"id":4653},"the-marketing-0-ad-spend-the-facebook-strategy","The Marketing: £0 Ad Spend (The Facebook Strategy)",[193,4656,4657,4658],{},"I am not burning money on Google Ads or cold calling. My target audience—plumbers, dog walkers, cafe owners—hang out in one place: ",[304,4659,4660],{},"Local Community Facebook Groups.",[193,4662,4663],{},"But I’m not going to spam them with \"Web Design Services.\" That gets you banned.",[193,4665,4666,4667,4670],{},"Instead, I am using the ",[304,4668,4669],{},"\"Portfolio Build\""," strategy.",[219,4672,4674],{"id":4673},"the-logic","The Logic",[193,4676,4677,4678,4681,4682,470],{},"I need 3 solid reference clients to validate the business. To get them, I am trading ",[4608,4679,4680],{},"upfront profit"," for ",[4608,4683,4684],{},"trust",[193,4686,4687],{},"I will post in the local community group with a very specific, humble approach. I am not selling; I am asking for help building my portfolio.",[219,4689,4691],{"id":4690},"the-exact-script","The Exact Script",[193,4693,4694],{},"Here is the post I’m using to get my first 3 clients:",[4603,4696,4697,4703,4709,4712,4718,4732,4735],{},[193,4698,4699,4702],{},[304,4700,4701],{},"Headline:"," \"I want to build a website for your business for free.\"",[193,4704,4705,4708],{},[304,4706,4707],{},"Body:","\nHi people of xyz town 👋",[193,4710,4711],{},"I'm a local web developer building up my portfolio here in town. I’m looking for 3 local businesses that need a new (or better) website.",[193,4713,4714,4717],{},[304,4715,4716],{},"Here is the deal:","\nI will design and build your website completely for free. I'll send you a private link to view it on your phone.",[461,4719,4720,4726],{},[464,4721,4722,4725],{},[304,4723,4724],{},"If you don't like it:"," We shake hands and you owe me nothing.",[464,4727,4728,4731],{},[304,4729,4730],{},"If you love it:"," You pay £25/month to keep it live (includes hosting and SSL).",[193,4733,4734],{},"No upfront cost. No risk. I just want to build some great sites for local people.",[193,4736,4737],{},"Drop a comment below if you're interested, or tag a business owner who needs this.\n— John",[219,4739,4741],{"id":4740},"why-this-works","Why this works:",[1352,4743,4744,4750,4756],{},[464,4745,4746,4749],{},[304,4747,4748],{},"Risk Reversal:"," The client literally cannot lose money.",[464,4751,4752,4755],{},[304,4753,4754],{},"Algorithm Hacking:"," Asking people to \"Comment below\" boosts the post in the Facebook feed, meaning more business owners see it.",[464,4757,4758,4761],{},[304,4759,4760],{},"Local Trust:"," By saying \"I'm a local dev,\" I differentiate myself from the spammy overseas bot accounts.",[4438,4763],{},[188,4765,4767],{"id":4766},"the-live-on-day-one-philosophy","The \"Live on Day One\" Philosophy",[193,4769,4770],{},"I used to suffer from \"Localhost Paralysis.\" I would tweak pixels in private for months.",[193,4772,4773,4774],{},"For this agency, I have one rule: ",[304,4775,4776],{},"Live on Day One.",[1352,4778,4779,4785],{},[464,4780,4781,4784],{},[304,4782,4783],{},"Deploy Immediately:"," The moment I create the repo, it gets connected to Cloudflare.",[464,4786,4787,4790],{},[304,4788,4789],{},"Templates, not Art:"," I am not designing from scratch. I will be using the templates provided by Nuxt UI. When a client says \"Yes,\" I create a new Nuxt site with a Nuxt UI template, change the colors/content, and deploy.",[4438,4792],{},[188,4794,4796],{"id":4795},"follow-the-build","Follow the Build",[193,4798,4799],{},"I am not selling you a course. I am documenting the reality of building this business from scratch.",[193,4801,4802],{},"I will be sharing:",[461,4804,4805,4808,4811],{},[464,4806,4807],{},"The raw Nuxt code and Templates.",[464,4809,4810],{},"The exact Facebook posts I send out to get new business.",[464,4812,4813],{},"The Stripe revenue numbers (even when they are £0).",[193,4815,4816],{},"If you are tired of building side projects that die on your hard drive, join me.",[193,4818,4819],{},[304,4820,4821],{},[197,4822,4824],{"href":179,"rel":4823},[317],"Subscribe to the YouTube Channel →",{"title":262,"searchDepth":514,"depth":514,"links":4826},[4827,4830,4833,4836,4841,4842],{"id":4442,"depth":514,"text":4443,"children":4828},[4829],{"id":4458,"depth":520,"text":4459},{"id":4484,"depth":514,"text":4485,"children":4831},[4832],{"id":4557,"depth":520,"text":4558},{"id":4592,"depth":514,"text":4593,"children":4834},[4835],{"id":4619,"depth":520,"text":4620},{"id":4653,"depth":514,"text":4654,"children":4837},[4838,4839,4840],{"id":4673,"depth":520,"text":4674},{"id":4690,"depth":520,"text":4691},{"id":4740,"depth":520,"text":4741},{"id":4766,"depth":514,"text":4767},{"id":4795,"depth":514,"text":4796},[4511,4844,4845],"Business","WaaS",[4847,4848,4849],"nuxt","business","waas","2025-12-29T00:00:00.000Z","I'm building a location-independent agency to hit £1,000 MRR using Nuxt, Cloudflare, and a £0 upfront model. Here is the exact tech stack and strategy.",{"src":4405},{},null,{"title":4856,"description":4857,"ogTitle":4856,"ogDescription":4857,"twitterCard":576},"WaaS Agency Blueprint: How to Start With £0 Upfront","How I'm building a website-as-a-service agency with zero upfront costs. The exact tech stack, pricing model, and strategy to hit £1,000 MRR.","quDFwhOHqHKnxrUTF1nwoSmNzj5vKPohTzWcFzQUqFA",{"id":4860,"title":153,"archived":542,"authors":4861,"badge":4864,"body":4866,"categories":4951,"categorySlugs":4952,"date":4954,"description":4955,"extension":538,"image":4956,"meta":4958,"navigation":542,"path":154,"schemaOrg":4854,"seo":4959,"stem":155,"__hash__":4962},"posts/3.blog/uploading-a-youtube-video-every-day-for-90-days.md",[4862],{"name":178,"to":179,"avatar":4863},{"src":181},{"label":4865},"Uncategorized",{"type":185,"value":4867,"toc":4943},[4868,4871,4874],[188,4869,153],{"id":4870},"uploading-a-youtube-video-every-day-for-90-days",[193,4872,4873],{},"Over the last 90 days I have posted a video to YouTube every day. I didn't know what the result of this would be when I started. But its safe to say I am pleased I did it! Let's take a look at how I did it, why I did it and the results of doing it.",[4875,4876,4878,4882,4885,4888,4892,4895,4899,4902,4905,4909,4912,4915,4919,4922,4925,4929,4932,4935],"script-you-tube-player",{"video-id":4877},"4lkBktr148U",[219,4879,4881],{"id":4880},"why-did-i-upload-so-regularly","Why did I upload so regularly?",[193,4883,4884],{},"So why did I upload a video every day for 90 days? Well the answer to that question is a simple one. I was motivated to do so. Let me explain... In April 2024 I noticed that my subscriber count on YouTube was approaching the 800 mark. It was at 796 or something like that. This sparked something inside of me. I thought to myself - \"800 isn't far away from 1000.\"",[193,4886,4887],{},"It was the realisation that I was nearly at 1000 subscribers that pushed me to start taking YouTube more seriously. Until this point I had been uploading videos sporadically. Sometimes I would have gaps of longer than a month between uploads. So I wanted to see what would happen if I actually became consistent. I was surprised at how quickly I saw results.",[219,4889,4891],{"id":4890},"how-i-managed-to-upload-daily-videos-for-90-days","How I managed to upload daily videos for 90 days",[193,4893,4894],{},"When I started this challenge, I didn't think about the possible obsticles I would come up against. But its fair to say there were a few. The main challenges I encountered were: the amount of time it was taking, the number of ideas I needed to produce and the amount of energy it was consuming. Here is how I overcame these challenges.",[3849,4896,4898],{"id":4897},"overcoming-challenges","Overcoming challenges",[193,4900,4901],{},"Making videos takes time. And I don't think I appreciated just how much time it takes until I started. Its not the time it takes to film the video, that doesn't take long. Its the time spent creating a thumbnail, thinking of a title, writing a description and then there's the big one... time spent editing the video.",[193,4903,4904],{},"Prior to getting serious I would be creating videos sporadically, at most producing videos twice a week. This meant it didn't matter too much that I was putting in a day's worth of editing into each video. But with daily uploading I simply didn't have this time. With this in mind I knew I had to change something to streamline the whole process. Something that would make it realistic for me to be able to upload every day. So here's what I did. I created a formula. A formula to make videos in the most efficient way possible.",[3849,4906,4908],{"id":4907},"i-created-a-system","I created a system",[193,4910,4911],{},"I decided to make a video series where I could produce videos quickly and easily, in bulk. Get them ready and have them scheduled in advanced. To do this I went down the route of coding tutorial videos. These videos were very specific and didn't require much brain power on my part. They followed an almost identical structure each time, which meant I could create them quickly, and easily without making mistakes.",[193,4913,4914],{},"These videos were guides showing how to convert DaisyUI components into re-useable Vue.js components. I was able to batch create 5 or 6 videos at a time, and very quickly. This was game changing for me. And there was an amazing side effect that I had not even considered would happen. Because I had a weeks worth of videos scheduled in advance. This freed up my mental energy, and I was able to easily come up with ideas for other videos! I would then create other types of videos and schedule them in among the batch created videos.",[219,4916,4918],{"id":4917},"what-happened-when-i-uploaded-a-video-every-day","What happened when I uploaded a video every day?",[193,4920,4921],{},"So here's the interesting bit. What actually happened when I uploaded every day for 90 days. Well, whilst the results aren't mind blowing, they do show significant growth. I created my YouTube channel in August 2022, and it took until April 2024 to reach 796 subscribers. So that's 18 (ish) months to gain just under 800 subscribers.",[193,4923,4924],{},"By uploading consistently for just 3 months (90 days), this number grew to 1290. Thats an increase of 494 subscribers. So I have gone from gaining an average of 44 subscribers per month to an average of 165 subscribers per month. That is over 3 times as many subscribers per month on average.",[219,4926,4928],{"id":4927},"should-you-upload-every-day-too","Should you upload every day too?",[193,4930,4931],{},"So should you do the same as me and upload a video every day? In all honesty, the answer is I don't know. It depends on your situation. If you have the time to do this. If you have enough topics that you can create videos for. And many other factors. For me, the results speak or themselves and show a definite progression in the right direction.",[193,4933,4934],{},"What I will say, is that if you do decide to upload every day, make sure you have a system in place that allows you to do this with minimum effort. This is what has helped me to stay consistent and allowed me to keep posting daily to this day.",[193,4936,4937,4938,4942],{},"Checkout ",[197,4939,4941],{"href":179,"rel":4940},[317],"my YouTube channel"," for yourself. Leave me a comment calling me a pleb or something 🤪",{"title":262,"searchDepth":514,"depth":514,"links":4944},[4945],{"id":4870,"depth":514,"text":153,"children":4946},[4947,4948,4949,4950],{"id":4880,"depth":520,"text":4881},{"id":4890,"depth":520,"text":4891},{"id":4917,"depth":520,"text":4918},{"id":4927,"depth":520,"text":4928},[4865],[4953],"uncategorized","2024-07-21T00:00:00.000Z","What happened when I uploaded a YouTube video every day for 90 days. The results, how I did it, and whether it was worth it.",{"src":4957},"/images/wp/featured-uploading-a-youtube-video-every-day-for-90-dayssub-count-matters-thumbnail-3.webp",{},{"title":4960,"description":4961,"ogTitle":4960,"ogDescription":4961,"twitterCard":576},"Uploading a YouTube Video Every Day for 90 Days - Codingoblin","What happened when I started uploading videos toy YouTube daily. Did my subscriber count go up? How did I manage to maintain it?","a1sJ_d5OEhIG035AQtP8w81eihmVQMCbDaBUUhr1ehQ",{"id":4964,"title":105,"archived":175,"authors":4965,"badge":4968,"body":4969,"categories":5115,"categorySlugs":5116,"date":5117,"description":5118,"extension":538,"image":5119,"meta":5121,"navigation":542,"path":106,"schemaOrg":5122,"seo":5128,"stem":107,"__hash__":5131},"posts/3.blog/sam-ovens-the-brains-behind-skool.md",[4966],{"name":178,"to":179,"avatar":4967},{"src":181},{"label":199},{"type":185,"value":4970,"toc":5106},[4971,4975,4982,4985,4989,4998,5002,5005,5013,5019,5022,5025,5029,5032,5059,5063,5066,5074,5078,5081,5087,5089,5093,5096,5100],[188,4972,4974],{"id":4973},"sam-ovens-the-brains-behind-skoolcom","Sam Ovens - the brains behind skool.com",[193,4976,4977,4978,4981],{},"So you've heard about Skool. You know ",[197,4979,4980],{"href":166},"what it is",". But who is behind it? Who is the genius that created the platform? Well today we are going to find out. It's Sam Ovens. The end. But who is Sam Ovens? I hear you ask. Well let's take a look and find out together.",[193,4983,4984],{},"We are going to have so much fun.",[219,4986,4988],{"id":4987},"who-is-sam-ovens","Who is Sam Ovens?",[193,4990,4991,4992,4997],{},"Sam Ovens is the creator of skool.com. A quick Google search reveals his website, ",[197,4993,4996],{"href":4994,"rel":4995},"https://www.samovens.com/",[317],"samovens.com",". So in preparation for writing this post I paid it a visit.",[3849,4999,5001],{"id":5000},"the-most-detailed-website-ever","The most detailed website ever",[193,5003,5004],{},"Here I found extensive detail about the man. So much detail that I was initially overwhelmed. Thankfully I was able to take a deep breath and compose myself. I came up with a plan as to how I would digest the vast amount of information on the page. And navigate through the hundreds of pages of content. Oh wait. My bad. Nah yeh there's basically no information on there. In fact here are the entire site's contents for you to view:",[1462,5006,5007],{},[193,5008,5009,5012],{},[304,5010,5011],{},"UPDATE:"," I just checked this link back and samovens.com now redirects to his profile on Skool. So here's that instead:",[193,5014,5015],{},[265,5016],{"alt":5017,"src":5018},"Sam Ovens Skool profile page","/images/skool/sam-ovens-skool-page-screenshot.webp",[193,5020,5021],{},"Sam Ovens on Skool",[193,5023,5024],{},"So there's virtually no information about him on his own website. Let's do another Google search and find out some interesting facts about the man.",[219,5026,5028],{"id":5027},"sam-ovens-quick-facts","Sam Ovens Quick Facts",[193,5030,5031],{},"I didn't have much luck with his own website. But thankfully a quick Google search revealed the following facts about the man.",[461,5033,5034,5041,5047],{},[464,5035,5036,5037,5040],{},"Where is he from?",[5038,5039],"br",{},"Sam is from Auckland in New Zealand",[464,5042,5043,5044,5046],{},"How old is he?",[5038,5045],{},"Sam was born in 1989, making him 36 or 37 years old (as of 2026)",[464,5048,5049,5050,5052,5053,5058],{},"What is his net worth?",[5038,5051],{},"$65 million (according to ",[197,5054,5057],{"href":5055,"rel":5056},"https://www.forbes.com/profile/sam-ovens/",[317],"Forbes",")",[219,5060,5062],{"id":5061},"what-else-has-he-been-involved-with","What else has he been involved with?",[193,5064,5065],{},"This guy has a decent track record of building successful companies. Two of these are:",[461,5067,5068,5071],{},[464,5069,5070],{},"Consulting.com",[464,5072,5073],{},"SnapInspect",[219,5075,5077],{"id":5076},"more-vaguely-interesting-facts","More vaguely interesting facts",[193,5079,5080],{},"A vaguely interesting fact about Sam Ovens is that he has had different hair styles. This image illustrates this perfectly. On the left he can be seen with shorter hair. On the right he can be seen with longer hair. The image on the right is more recent. Fascinating. Simply fascinating.",[193,5082,5083],{},[265,5084],{"alt":5085,"src":5086},"Both of these guys are Sam Ovens","/images/wp/sam-ovens-same-guy-1024x576.webp",[193,5088,5085],{},[3849,5090,5092],{"id":5091},"this-is-the-same-guy","This is the same guy",[193,5094,5095],{},"I know what you are thinking. This is not the same guy. I was thinking the exact same thing. Surely this is a different person. But I have been reliable informed by the internet. That this is in fact the same person.",[219,5097,5099],{"id":5098},"to-conclude","To conclude",[193,5101,5102,5103,5105],{},"To sum up, Sam Ovens is a very smart guy who has made a lot of money. He clearly knows what he is doing when it comes to business. This is why I am so excited to see how ",[197,5104,535],{"href":130}," progresses and grows. This website is already doing huge numbers. If it continues to grow it will likely become a household name. If it gets to this point it will be ridiculously successful.",{"title":262,"searchDepth":514,"depth":514,"links":5107},[5108],{"id":4973,"depth":514,"text":4974,"children":5109},[5110,5111,5112,5113,5114],{"id":4987,"depth":520,"text":4988},{"id":5027,"depth":520,"text":5028},{"id":5061,"depth":520,"text":5062},{"id":5076,"depth":520,"text":5077},{"id":5098,"depth":520,"text":5099},[199],[535],"2024-05-01T00:00:00.000Z","Sam Ovens is the man behind skool.com. Let’s take a look at his background and who the guy is. Is he too cool for skool?",{"src":5120},"/images/wp/featured-sam-ovens-the-brains-behind-skoolsam-ovens-same-guy.webp",{},[5123],{"headline":5124,"description":5125,"image":5120,"datePublished":5126,"dateModified":5126,"author":5127,"@type":550},"Sam Ovens: The Brains Behind Skool.com","Who is Sam Ovens? A look at the creator of skool.com, his background, and what he's built.","2024-05-01",{"name":178,"url":179,"@type":549},{"title":5129,"description":5130,"ogTitle":5129,"ogDescription":5130,"twitterCard":576},"Sam Ovens Net Worth, Background & How He Built Skool","Who is Sam Ovens? A look at his net worth, how he went from New Zealand to building skool.com, and what his deal with Alex Hormozi means for the platform.","NOQsjsD6zbSlPLP9_zEKb46kwFbhhux1nyxcPJrcPjc",{"id":5133,"title":25,"archived":175,"authors":5134,"badge":5137,"body":5139,"categories":5608,"categorySlugs":5611,"date":5614,"description":5615,"extension":538,"image":5616,"meta":5618,"navigation":542,"path":26,"schemaOrg":4854,"seo":5619,"stem":27,"__hash__":5622},"posts/3.blog/daisyui-avatar-component-for-vue-js.md",[5135],{"name":178,"to":179,"avatar":5136},{"src":181},{"label":5138},"Tailwindcss, Vue.js",{"type":185,"value":5140,"toc":5597},[5141,5144,5147,5150,5593],[188,5142,25],{"id":5143},"daisyui-avatar-component-for-vuejs",[193,5145,5146],{},"Let's look at how to create a daisyUI Avatar Component in Vue.js. If your website or application has user's then Avatar's will almost certainly make up an important part of the UI. They are very handy for displaying a user's profile picture in various situations.",[193,5148,5149],{},"The daisyUI docs provide a great starting point for an avatar component. However at the moment they don't have an avatar component that we can copy and paste directly into Vue.js. Luckily we can easily do this ourselves. This guide is suitable for any Vue.js project, whether this is Nuxt 2, Nuxt 3, Laravel + Inertia.js + Vue.js or anything else using Vue!",[4875,5151,5153,5157,5171,5174,5178,5189,5389,5393,5402,5405,5409,5417,5421,5424,5547,5550,5554,5560,5586,5590],{"video-id":5152},"c3QaWsfZEyU",[219,5154,5156],{"id":5155},"before-you-create-your-daisyui-avatar-component","Before you create your daisyUI avatar component",[193,5158,5159,5160,5165,5166,470],{},"Before we create our checkbox component we need to make sure our project is set up to use daisyUI. We need to have installed TailwindCSS and daisyUI. Instructions on installing Tailwind can be found on ",[197,5161,5164],{"href":5162,"rel":5163},"https://tailwindcss.com/docs/installation",[317],"the TailwindCSS website",". Instructions on how to install daisyUI can be found in the ",[197,5167,5170],{"href":5168,"rel":5169},"https://daisyui.com/docs/install/",[317],"daisyUI docs",[193,5172,5173],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI avatar component.",[188,5175,5177],{"id":5176},"create-daisyui-avatar-component-in-vuejs","Create daisyUI Avatar component in Vuejs",[193,5179,5180,5181,5185,5186,5188],{},"We can now create our avatar component. In your components folder, create a new file named ",[5182,5183,5184],"code",{},"Avatar.vue",". Paste the code below into your newly created ",[5182,5187,5184],{}," file.",[5190,5191,5195],"pre",{"className":5192,"code":5193,"filename":5184,"language":5194,"meta":262,"style":262},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n\n    \u003Cdiv class=\"avatar\">\n        \u003Cdiv class=\"w-24 rounded\">\n            \u003Cimg :src=\"imgSrc\" />\n        \u003C/div>\n    \u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst props = defineProps({\n    imgSrc: String\n})\n\u003C/script>\n","vue",[5182,5196,5197,5211,5216,5242,5263,5290,5300,5310,5320,5325,5338,5359,5371,5380],{"__ignoreMap":262},[3736,5198,5201,5205,5208],{"class":5199,"line":5200},"line",1,[3736,5202,5204],{"class":5203},"sMK4o","\u003C",[3736,5206,273],{"class":5207},"swJcz",[3736,5209,5210],{"class":5203},">\n",[3736,5212,5213],{"class":5199,"line":514},[3736,5214,5215],{"emptyLinePlaceholder":542},"\n",[3736,5217,5218,5221,5224,5228,5231,5234,5238,5240],{"class":5199,"line":520},[3736,5219,5220],{"class":5203},"    \u003C",[3736,5222,5223],{"class":5207},"div",[3736,5225,5227],{"class":5226},"spNyl"," class",[3736,5229,5230],{"class":5203},"=",[3736,5232,5233],{"class":5203},"\"",[3736,5235,5237],{"class":5236},"sfazB","avatar",[3736,5239,5233],{"class":5203},[3736,5241,5210],{"class":5203},[3736,5243,5245,5248,5250,5252,5254,5256,5259,5261],{"class":5199,"line":5244},4,[3736,5246,5247],{"class":5203},"        \u003C",[3736,5249,5223],{"class":5207},[3736,5251,5227],{"class":5226},[3736,5253,5230],{"class":5203},[3736,5255,5233],{"class":5203},[3736,5257,5258],{"class":5236},"w-24 rounded",[3736,5260,5233],{"class":5203},[3736,5262,5210],{"class":5203},[3736,5264,5266,5269,5271,5274,5277,5279,5281,5285,5287],{"class":5199,"line":5265},5,[3736,5267,5268],{"class":5203},"            \u003C",[3736,5270,265],{"class":5207},[3736,5272,5273],{"class":5203}," :",[3736,5275,5276],{"class":5226},"src",[3736,5278,5230],{"class":5203},[3736,5280,5233],{"class":5203},[3736,5282,5284],{"class":5283},"sTEyZ","imgSrc",[3736,5286,5233],{"class":5203},[3736,5288,5289],{"class":5203}," />\n",[3736,5291,5293,5296,5298],{"class":5199,"line":5292},6,[3736,5294,5295],{"class":5203},"        \u003C/",[3736,5297,5223],{"class":5207},[3736,5299,5210],{"class":5203},[3736,5301,5303,5306,5308],{"class":5199,"line":5302},7,[3736,5304,5305],{"class":5203},"    \u003C/",[3736,5307,5223],{"class":5207},[3736,5309,5210],{"class":5203},[3736,5311,5313,5316,5318],{"class":5199,"line":5312},8,[3736,5314,5315],{"class":5203},"\u003C/",[3736,5317,273],{"class":5207},[3736,5319,5210],{"class":5203},[3736,5321,5323],{"class":5199,"line":5322},9,[3736,5324,5215],{"emptyLinePlaceholder":542},[3736,5326,5328,5330,5333,5336],{"class":5199,"line":5327},10,[3736,5329,5204],{"class":5203},[3736,5331,5332],{"class":5207},"script",[3736,5334,5335],{"class":5226}," setup",[3736,5337,5210],{"class":5203},[3736,5339,5341,5344,5347,5349,5353,5356],{"class":5199,"line":5340},11,[3736,5342,5343],{"class":5226},"const",[3736,5345,5346],{"class":5283}," props ",[3736,5348,5230],{"class":5203},[3736,5350,5352],{"class":5351},"s2Zo4"," defineProps",[3736,5354,5355],{"class":5283},"(",[3736,5357,5358],{"class":5203},"{\n",[3736,5360,5362,5365,5368],{"class":5199,"line":5361},12,[3736,5363,5364],{"class":5207},"    imgSrc",[3736,5366,5367],{"class":5203},":",[3736,5369,5370],{"class":5283}," String\n",[3736,5372,5374,5377],{"class":5199,"line":5373},13,[3736,5375,5376],{"class":5203},"}",[3736,5378,5379],{"class":5283},")\n",[3736,5381,5383,5385,5387],{"class":5199,"line":5382},14,[3736,5384,5315],{"class":5203},[3736,5386,5332],{"class":5207},[3736,5388,5210],{"class":5203},[219,5390,5392],{"id":5391},"different-daisyui-avatar-styles","Different daisyUI avatar styles",[193,5394,5395,5396,5401],{},"There are many ",[197,5397,5400],{"href":5398,"rel":5399},"https://daisyui.com/components/avatar/",[317],"different avatar components to choose from in the daisyUI docs",". Avatar's with different border radius and different shapes. You can have rings, or have groups of them.",[193,5403,5404],{},"It doesn't matter which style you choose, the concept of converting it to a re-useable Vue.js component is exactly the same. The example above is a pretty standard avatar.",[3849,5406,5408],{"id":5407},"avatarvue-code-explained","Avatar.vue code explained",[193,5410,337,5411,5413,5414,5416],{},[5182,5412,5184],{}," component above takes one prop named ",[5182,5415,5284],{},". This prop is the image src that we will pass from the parent component.",[188,5418,5420],{"id":5419},"use-the-daisyui-avatar-component-in-your-parent-component","Use the daisyUI Avatar component in your parent component",[193,5422,5423],{},"Now we have created our avatar component, we can use it in other components. This is simple to do. See the example below:",[5190,5425,5428],{"className":5192,"code":5426,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CAvatar :imgSrc=\"imgSrc\" />\n    \u003C/div>\n\n\u003C/template>\n\n\u003Cscript setup>\n\nimport imgSrc from '../assets/your-image.jpg'\n\n\u003C/script>\n","index.vue",[5182,5429,5430,5435,5443,5447,5455,5476,5484,5488,5496,5500,5510,5514,5535,5539],{"__ignoreMap":262},[3736,5431,5432],{"class":5199,"line":5200},[3736,5433,5434],{"class":5283},"// Parent component\n",[3736,5436,5437,5439,5441],{"class":5199,"line":514},[3736,5438,5204],{"class":5203},[3736,5440,273],{"class":5207},[3736,5442,5210],{"class":5203},[3736,5444,5445],{"class":5199,"line":520},[3736,5446,5215],{"emptyLinePlaceholder":542},[3736,5448,5449,5451,5453],{"class":5199,"line":5244},[3736,5450,5220],{"class":5203},[3736,5452,5223],{"class":5207},[3736,5454,5210],{"class":5203},[3736,5456,5457,5459,5462,5464,5466,5468,5470,5472,5474],{"class":5199,"line":5265},[3736,5458,5247],{"class":5203},[3736,5460,5461],{"class":5207},"Avatar",[3736,5463,5273],{"class":5203},[3736,5465,5284],{"class":5226},[3736,5467,5230],{"class":5203},[3736,5469,5233],{"class":5203},[3736,5471,5284],{"class":5283},[3736,5473,5233],{"class":5203},[3736,5475,5289],{"class":5203},[3736,5477,5478,5480,5482],{"class":5199,"line":5292},[3736,5479,5305],{"class":5203},[3736,5481,5223],{"class":5207},[3736,5483,5210],{"class":5203},[3736,5485,5486],{"class":5199,"line":5302},[3736,5487,5215],{"emptyLinePlaceholder":542},[3736,5489,5490,5492,5494],{"class":5199,"line":5312},[3736,5491,5315],{"class":5203},[3736,5493,273],{"class":5207},[3736,5495,5210],{"class":5203},[3736,5497,5498],{"class":5199,"line":5322},[3736,5499,5215],{"emptyLinePlaceholder":542},[3736,5501,5502,5504,5506,5508],{"class":5199,"line":5327},[3736,5503,5204],{"class":5203},[3736,5505,5332],{"class":5207},[3736,5507,5335],{"class":5226},[3736,5509,5210],{"class":5203},[3736,5511,5512],{"class":5199,"line":5340},[3736,5513,5215],{"emptyLinePlaceholder":542},[3736,5515,5516,5520,5523,5526,5529,5532],{"class":5199,"line":5361},[3736,5517,5519],{"class":5518},"s7zQu","import",[3736,5521,5522],{"class":5283}," imgSrc ",[3736,5524,5525],{"class":5518},"from",[3736,5527,5528],{"class":5203}," '",[3736,5530,5531],{"class":5236},"../assets/your-image.jpg",[3736,5533,5534],{"class":5203},"'\n",[3736,5536,5537],{"class":5199,"line":5373},[3736,5538,5215],{"emptyLinePlaceholder":542},[3736,5540,5541,5543,5545],{"class":5199,"line":5382},[3736,5542,5315],{"class":5203},[3736,5544,5332],{"class":5207},[3736,5546,5210],{"class":5203},[193,5548,5549],{},"I am using Nuxt in this example. I therefore do not need to import the Avatar.vue component. If you are not using Nuxt, you will almost certainly need to import the Avatar.vue component into your parent component.",[3849,5551,5553],{"id":5552},"parent-component-code-explained","Parent component code explained",[193,5555,5556,5557,5559],{},"The above code in the parent component outputs the ",[5182,5558,5184],{}," component. We import our image from the assets folder. This is then passed to the Avatar component, allowing us to access the image src in our parent component.",[258,5561,5562,5569,5573,5578],{"orientation":261,"variant":263},[193,5563,5564],{},[265,5565],{"alt":5566,"className":5567,"src":5568},"daisyUI now has templates!",[269,270],"/images/wp/cta-daisyui-cta-image.webp",[273,5570,5571],{"v-slot:title":262},[193,5572,5566],{},[273,5574,5575],{"v-slot:description":262},[193,5576,5577],{},"Wow, daisyUI has pre-made templates you can buy. This is excellent news.",[273,5579,5580],{"v-slot:links":262},[286,5581,5583],{"size":288,"target":262,"to":5582,"variant":292},"/go/daisyui",[193,5584,5585],{},"View Templates",[219,5587,5589],{"id":5588},"why-should-we-make-our-avatar-component-re-useable-in-vue","Why should we make our Avatar component re-useable in Vue?",[193,5591,5592],{},"By making our Avatar component re-useable we save ourselves time in the future and make our lives easier. Whenever we need an avatar we can simply reuse the one we created. This means we don't need to create a new one each time. And more importantly, if we want to change anything, such as the border radius or ring, we only need to do it in one place.",[5594,5595,5596],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":262,"searchDepth":514,"depth":514,"links":5598},[5599,5602,5605],{"id":5143,"depth":514,"text":25,"children":5600},[5601],{"id":5155,"depth":520,"text":5156},{"id":5176,"depth":514,"text":5177,"children":5603},[5604],{"id":5391,"depth":520,"text":5392},{"id":5419,"depth":514,"text":5420,"children":5606},[5607],{"id":5588,"depth":520,"text":5589},[5609,5610],"Tailwindcss","Vue.js",[5612,5613],"tailwindcss","vuejs","2024-04-26T00:00:00.000Z","How to create a re-useable Avatar component for your Vue.js project using daisyUI.",{"src":5617},"/images/wp/featured-daisyui-avatar-component-for-vue-jsdaisyUI-avatar-vuejs-thumbnail.webp",{},{"title":5620,"description":5621,"ogTitle":5620,"ogDescription":5621,"twitterCard":576},"daisyUI Avatar Component for Vue.js - [2 MINUTE GUIDE]","Create a re-useable Avatar component for Vue.js using daisyUI. Simple example with code. 2 minute easy guide. Copy and paste example.","asqGQTHgi3I-DdAfzuBmgrBFKqcqJbFbJf12vsBS09E",{"id":5624,"title":33,"archived":175,"authors":5625,"badge":5628,"body":5629,"categories":5899,"categorySlugs":5900,"date":5614,"description":5901,"extension":538,"image":5902,"meta":5904,"navigation":542,"path":34,"schemaOrg":4854,"seo":5905,"stem":35,"__hash__":5908},"posts/3.blog/daisyui-button-component-for-vue-js.md",[5626],{"name":178,"to":179,"avatar":5627},{"src":181},{"label":5138},{"type":185,"value":5630,"toc":5888},[5631,5634,5637,5640,5885],[188,5632,33],{"id":5633},"daisyui-button-component-for-vuejs",[193,5635,5636],{},"Let's to create a daisyUI Button Component in Vue.js. Buttons are useful for a number of reasons. They allow us to draw attention to certain links and are an indication to our web users that an action can be taken.",[193,5638,5639],{},"The daisyUI docs provide a great starting point for button components. However at the moment they don't have a button component that we can copy and paste directly into Vue.js. Luckily we can easily do this ourselves. This guide is suitable for any Vue.js project, whether this is Nuxt 2, Nuxt 3, Laravel + Inertia.js + Vue.js or anything else using Vue!",[4875,5641,5643,5647,5656,5659,5663,5671,5734,5738,5746,5749,5753,5763,5767,5770,5840,5843,5845,5852,5855,5878,5882],{"video-id":5642},"ourJa8HSWeo",[219,5644,5646],{"id":5645},"before-you-create-your-daisyui-button-component","Before you create your daisyUI button component",[193,5648,5649,5650,5165,5653,470],{},"Before we create our button component we need to make sure our project is set up to use daisyUI. We need to have installed TailwindCSS and daisyUI. Instructions on installing Tailwind can be found on ",[197,5651,5164],{"href":5162,"rel":5652},[317],[197,5654,5170],{"href":5168,"rel":5655},[317],[193,5657,5658],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI button component.",[188,5660,5662],{"id":5661},"create-daisyui-button-component-in-vuejs","Create daisyUI Button component in Vuejs",[193,5664,5665,5666,5185,5669,5188],{},"We can now create our button component. In your components folder, create a new file named ",[5182,5667,5668],{},"SuccessButton.vue",[5182,5670,5668],{},[5190,5672,5674],{"className":5192,"code":5673,"filename":5668,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cbutton class=\"btn btn-success\">\n        \u003Cslot>\u003C/slot>\n    \u003C/button>\n\u003C/template>\n",[5182,5675,5676,5684,5704,5718,5726],{"__ignoreMap":262},[3736,5677,5678,5680,5682],{"class":5199,"line":5200},[3736,5679,5204],{"class":5203},[3736,5681,273],{"class":5207},[3736,5683,5210],{"class":5203},[3736,5685,5686,5688,5691,5693,5695,5697,5700,5702],{"class":5199,"line":514},[3736,5687,5220],{"class":5203},[3736,5689,5690],{"class":5207},"button",[3736,5692,5227],{"class":5226},[3736,5694,5230],{"class":5203},[3736,5696,5233],{"class":5203},[3736,5698,5699],{"class":5236},"btn btn-success",[3736,5701,5233],{"class":5203},[3736,5703,5210],{"class":5203},[3736,5705,5706,5708,5711,5714,5716],{"class":5199,"line":520},[3736,5707,5247],{"class":5203},[3736,5709,5710],{"class":5207},"slot",[3736,5712,5713],{"class":5203},">\u003C/",[3736,5715,5710],{"class":5207},[3736,5717,5210],{"class":5203},[3736,5719,5720,5722,5724],{"class":5199,"line":5244},[3736,5721,5305],{"class":5203},[3736,5723,5690],{"class":5207},[3736,5725,5210],{"class":5203},[3736,5727,5728,5730,5732],{"class":5199,"line":5265},[3736,5729,5315],{"class":5203},[3736,5731,273],{"class":5207},[3736,5733,5210],{"class":5203},[219,5735,5737],{"id":5736},"different-daisyui-button-styles","Different daisyUI button styles",[193,5739,5395,5740,5745],{},[197,5741,5744],{"href":5742,"rel":5743},"https://daisyui.com/components/button/",[317],"different button components to choose from in the daisyUI docs",". Button's of different sizes, colours and outlines.",[193,5747,5748],{},"In our example we are creating a success button. I suggest you create a separate button component for each button type that you need.",[3849,5750,5752],{"id":5751},"buttonvue-code-explained","Button.vue code explained",[193,5754,337,5755,5758,5759,5762],{},[5182,5756,5757],{},"Button.vue"," component above takes has one slot. This slot will allow us to use the component in a parent component, putting our button text between ",[5182,5760,5761],{},"SuccessButton"," tags.",[188,5764,5766],{"id":5765},"use-the-daisyui-button-component-in-your-parent-component","Use the daisyUI Button component in your parent component",[193,5768,5769],{},"Now we have created our button component, we can use it in other components. This is simple to do. See the example below:",[5190,5771,5773],{"className":5192,"code":5772,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CSuccessButton>\n            Button text\n        \u003C/SuccessButton>\n    \u003C/div>\n\n\u003C/template>\n",[5182,5774,5775,5779,5787,5791,5799,5807,5812,5820,5828,5832],{"__ignoreMap":262},[3736,5776,5777],{"class":5199,"line":5200},[3736,5778,5434],{"class":5283},[3736,5780,5781,5783,5785],{"class":5199,"line":514},[3736,5782,5204],{"class":5203},[3736,5784,273],{"class":5207},[3736,5786,5210],{"class":5203},[3736,5788,5789],{"class":5199,"line":520},[3736,5790,5215],{"emptyLinePlaceholder":542},[3736,5792,5793,5795,5797],{"class":5199,"line":5244},[3736,5794,5220],{"class":5203},[3736,5796,5223],{"class":5207},[3736,5798,5210],{"class":5203},[3736,5800,5801,5803,5805],{"class":5199,"line":5265},[3736,5802,5247],{"class":5203},[3736,5804,5761],{"class":5207},[3736,5806,5210],{"class":5203},[3736,5808,5809],{"class":5199,"line":5292},[3736,5810,5811],{"class":5283},"            Button text\n",[3736,5813,5814,5816,5818],{"class":5199,"line":5302},[3736,5815,5295],{"class":5203},[3736,5817,5761],{"class":5207},[3736,5819,5210],{"class":5203},[3736,5821,5822,5824,5826],{"class":5199,"line":5312},[3736,5823,5305],{"class":5203},[3736,5825,5223],{"class":5207},[3736,5827,5210],{"class":5203},[3736,5829,5830],{"class":5199,"line":5322},[3736,5831,5215],{"emptyLinePlaceholder":542},[3736,5833,5834,5836,5838],{"class":5199,"line":5327},[3736,5835,5315],{"class":5203},[3736,5837,273],{"class":5207},[3736,5839,5210],{"class":5203},[193,5841,5842],{},"I am using Nuxt in this example. I therefore do not need to import the Button.vue component. If you are not using Nuxt, you will almost certainly need to import the Button.vue component into your parent component.",[3849,5844,5553],{"id":5552},[193,5846,5556,5847,5849,5850,5762],{},[5182,5848,5757],{}," component. We put our button text between the ",[5182,5851,5761],{},[193,5853,5854],{},"It is possible to achieve the same result using a prop. I personally think slots make more sense in this situation but it is up to you how you do it.",[258,5856,5857,5863,5867,5872],{"orientation":261,"variant":263},[193,5858,5859],{},[265,5860],{"alt":5861,"className":5862,"src":5568},"templates for daisyUI!",[269,270],[273,5864,5865],{"v-slot:title":262},[193,5866,5861],{},[273,5868,5869],{"v-slot:description":262},[193,5870,5871],{},"Nice, daisyUI has pre-made templates you can buy. This is worth taking a look at.",[273,5873,5874],{"v-slot:links":262},[286,5875,5876],{"size":288,"target":262,"to":5582,"variant":292},[193,5877,5585],{},[219,5879,5881],{"id":5880},"why-should-we-make-our-button-components-re-useable-in-vue","Why should we make our Button components re-useable in Vue?",[193,5883,5884],{},"By making our Button components re-useable we save ourselves time in the future and make our lives easier. Whenever we need a button we can simply reuse one we created. This means we don't need to keep writing more code. And more importantly, if we want to change anything, such as the border colour or size of the button, we only need to do it in the component and not throughout the whole app!",[5594,5886,5887],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":262,"searchDepth":514,"depth":514,"links":5889},[5890,5893,5896],{"id":5633,"depth":514,"text":33,"children":5891},[5892],{"id":5645,"depth":520,"text":5646},{"id":5661,"depth":514,"text":5662,"children":5894},[5895],{"id":5736,"depth":520,"text":5737},{"id":5765,"depth":514,"text":5766,"children":5897},[5898],{"id":5880,"depth":520,"text":5881},[5609,5610],[5612,5613],"How to create a re-useable Button component for your Vue.js project using daisyUI.",{"src":5903},"/images/wp/featured-daisyui-button-component-for-vue-jsdaisyUI-button-vuejs-thumbnail.webp",{},{"title":5906,"description":5907,"ogTitle":5906,"ogDescription":5907,"twitterCard":576},"daisyUI Button Component for Vue.js - [1 MINUTE GUIDE]","Create a re-useable Button component for Vue.js using daisyUI. Simple example with code. 1 minute easy guide. Copy and paste example.","Ln8gL_S5a_UOPKgN6hK6kNMLxZvSYXuZZE3gb_QW7QE",{"id":5910,"title":37,"archived":175,"authors":5911,"badge":5914,"body":5915,"categories":6295,"categorySlugs":6296,"date":6297,"description":6298,"extension":538,"image":6299,"meta":6301,"navigation":542,"path":38,"schemaOrg":4854,"seo":6302,"stem":39,"__hash__":6305},"posts/3.blog/daisyui-checkbox-component-for-vue-js.md",[5912],{"name":178,"to":179,"avatar":5913},{"src":181},{"label":5138},{"type":185,"value":5916,"toc":6284},[5917,5920,5923,5926,6281],[188,5918,37],{"id":5919},"daisyui-checkbox-component-for-vuejs",[193,5921,5922],{},"In this post we will look at how to create a daisyUI Checkbox Component for Vue.js. Checkboxes are an important part of a UI. They can be used for agreeing to website terms. Selecting options and many other things.",[193,5924,5925],{},"The daisyUI docs provide a great starting point for a checkbox component. However at the moment they have a checkbox component that we can copy and paste directly into Vue.js. Luckily we can easily do this ourselves. This guide is suitable for any Vue.js project, whether this is Nuxt 2, Nuxt 3, Laravel + Inertia.js + Vue.js or anything else using Vue!",[4875,5927,5929,5933,5941,5944,5948,5956,6077,6081,6089,6092,6096,6105,6109,6112,6231,6234,6236,6253,6274,6278],{"video-id":5928},"FJumoelbOeo",[219,5930,5932],{"id":5931},"before-you-create-your-daisyui-checkbox-component","Before you create your daisyUI checkbox component",[193,5934,5159,5935,5165,5938,470],{},[197,5936,5164],{"href":5162,"rel":5937},[317],[197,5939,5170],{"href":5168,"rel":5940},[317],[193,5942,5943],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI checkbox component.",[188,5945,5947],{"id":5946},"create-daisyui-checkbox-component-in-vuejs","Create daisyUI Checkbox component in Vuejs",[193,5949,5950,5951,5185,5954,5188],{},"We can now create our checkbox component. In your components folder, create a new file named ",[5182,5952,5953],{},"Checkbox.vue",[5182,5955,5953],{},[5190,5957,5959],{"className":5192,"code":5958,"filename":5953,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n\n    \u003Cinput v-model=\"model\" type=\"checkbox\" checked=\"checked\" class=\"checkbox\" />\n\n\u003C/template>\n\n\u003Cscript setup>\nconst model = defineModel()\n\u003C/script>\n",[5182,5960,5961,5969,5973,6028,6032,6040,6044,6054,6069],{"__ignoreMap":262},[3736,5962,5963,5965,5967],{"class":5199,"line":5200},[3736,5964,5204],{"class":5203},[3736,5966,273],{"class":5207},[3736,5968,5210],{"class":5203},[3736,5970,5971],{"class":5199,"line":514},[3736,5972,5215],{"emptyLinePlaceholder":542},[3736,5974,5975,5977,5980,5983,5985,5987,5990,5992,5995,5997,5999,6002,6004,6007,6009,6011,6014,6016,6018,6020,6022,6024,6026],{"class":5199,"line":520},[3736,5976,5220],{"class":5203},[3736,5978,5979],{"class":5207},"input",[3736,5981,5982],{"class":5226}," v-model",[3736,5984,5230],{"class":5203},[3736,5986,5233],{"class":5203},[3736,5988,5989],{"class":5283},"model",[3736,5991,5233],{"class":5203},[3736,5993,5994],{"class":5226}," type",[3736,5996,5230],{"class":5203},[3736,5998,5233],{"class":5203},[3736,6000,6001],{"class":5236},"checkbox",[3736,6003,5233],{"class":5203},[3736,6005,6006],{"class":5226}," checked",[3736,6008,5230],{"class":5203},[3736,6010,5233],{"class":5203},[3736,6012,6013],{"class":5236},"checked",[3736,6015,5233],{"class":5203},[3736,6017,5227],{"class":5226},[3736,6019,5230],{"class":5203},[3736,6021,5233],{"class":5203},[3736,6023,6001],{"class":5236},[3736,6025,5233],{"class":5203},[3736,6027,5289],{"class":5203},[3736,6029,6030],{"class":5199,"line":5244},[3736,6031,5215],{"emptyLinePlaceholder":542},[3736,6033,6034,6036,6038],{"class":5199,"line":5265},[3736,6035,5315],{"class":5203},[3736,6037,273],{"class":5207},[3736,6039,5210],{"class":5203},[3736,6041,6042],{"class":5199,"line":5292},[3736,6043,5215],{"emptyLinePlaceholder":542},[3736,6045,6046,6048,6050,6052],{"class":5199,"line":5302},[3736,6047,5204],{"class":5203},[3736,6049,5332],{"class":5207},[3736,6051,5335],{"class":5226},[3736,6053,5210],{"class":5203},[3736,6055,6056,6058,6061,6063,6066],{"class":5199,"line":5312},[3736,6057,5343],{"class":5226},[3736,6059,6060],{"class":5283}," model ",[3736,6062,5230],{"class":5203},[3736,6064,6065],{"class":5351}," defineModel",[3736,6067,6068],{"class":5283},"()\n",[3736,6070,6071,6073,6075],{"class":5199,"line":5322},[3736,6072,5315],{"class":5203},[3736,6074,5332],{"class":5207},[3736,6076,5210],{"class":5203},[219,6078,6080],{"id":6079},"different-daisyui-checkbox-styles","Different daisyUI checkbox styles",[193,6082,5395,6083,6088],{},[197,6084,6087],{"href":6085,"rel":6086},"https://daisyui.com/components/checkbox/",[317],"different checkbox components to choose from in the daisyUI docs",". Different shapes and different colours. These can further be customised yourself if you need to. But you probably won't need to.",[193,6090,6091],{},"It doesn't matter which style you choose, the concept of converting it to a re-useable Vue.js component is exactly the same. The example above is a checkbox on its own. You can adapt this example to include a label for the checkbox if needed.",[3849,6093,6095],{"id":6094},"checkboxvue-code-explained","Checkbox.vue code explained",[193,6097,337,6098,6100,6101,6104],{},[5182,6099,5953],{}," component above defines a model. This allows us to use ",[5182,6102,6103],{},"v-model"," on the this component from within the parent component. This will make sense further down when we use this component in a parent.",[188,6106,6108],{"id":6107},"use-the-daisyui-checkbox-component-in-your-parent-component","Use the daisyUI Checkbox component in your parent component",[193,6110,6111],{},"Now we have created our checkbox component, we can use it in other components. This is simple to do. See the example below:",[5190,6113,6115],{"className":5192,"code":6114,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CCheckbox v-model=\"my_checkbox\" />\n    \u003C/div>\n\n\u003C/template>\n\n\u003Cscript setup>\n\nconst my_checkbox = ref(false)\n\n\u003C/script>\n",[5182,6116,6117,6121,6129,6133,6141,6161,6169,6173,6181,6185,6195,6199,6219,6223],{"__ignoreMap":262},[3736,6118,6119],{"class":5199,"line":5200},[3736,6120,5434],{"class":5283},[3736,6122,6123,6125,6127],{"class":5199,"line":514},[3736,6124,5204],{"class":5203},[3736,6126,273],{"class":5207},[3736,6128,5210],{"class":5203},[3736,6130,6131],{"class":5199,"line":520},[3736,6132,5215],{"emptyLinePlaceholder":542},[3736,6134,6135,6137,6139],{"class":5199,"line":5244},[3736,6136,5220],{"class":5203},[3736,6138,5223],{"class":5207},[3736,6140,5210],{"class":5203},[3736,6142,6143,6145,6148,6150,6152,6154,6157,6159],{"class":5199,"line":5265},[3736,6144,5247],{"class":5203},[3736,6146,6147],{"class":5207},"Checkbox",[3736,6149,5982],{"class":5226},[3736,6151,5230],{"class":5203},[3736,6153,5233],{"class":5203},[3736,6155,6156],{"class":5283},"my_checkbox",[3736,6158,5233],{"class":5203},[3736,6160,5289],{"class":5203},[3736,6162,6163,6165,6167],{"class":5199,"line":5292},[3736,6164,5305],{"class":5203},[3736,6166,5223],{"class":5207},[3736,6168,5210],{"class":5203},[3736,6170,6171],{"class":5199,"line":5302},[3736,6172,5215],{"emptyLinePlaceholder":542},[3736,6174,6175,6177,6179],{"class":5199,"line":5312},[3736,6176,5315],{"class":5203},[3736,6178,273],{"class":5207},[3736,6180,5210],{"class":5203},[3736,6182,6183],{"class":5199,"line":5322},[3736,6184,5215],{"emptyLinePlaceholder":542},[3736,6186,6187,6189,6191,6193],{"class":5199,"line":5327},[3736,6188,5204],{"class":5203},[3736,6190,5332],{"class":5207},[3736,6192,5335],{"class":5226},[3736,6194,5210],{"class":5203},[3736,6196,6197],{"class":5199,"line":5340},[3736,6198,5215],{"emptyLinePlaceholder":542},[3736,6200,6201,6203,6206,6208,6211,6213,6217],{"class":5199,"line":5361},[3736,6202,5343],{"class":5226},[3736,6204,6205],{"class":5283}," my_checkbox ",[3736,6207,5230],{"class":5203},[3736,6209,6210],{"class":5351}," ref",[3736,6212,5355],{"class":5283},[3736,6214,6216],{"class":6215},"sfNiH","false",[3736,6218,5379],{"class":5283},[3736,6220,6221],{"class":5199,"line":5373},[3736,6222,5215],{"emptyLinePlaceholder":542},[3736,6224,6225,6227,6229],{"class":5199,"line":5382},[3736,6226,5315],{"class":5203},[3736,6228,5332],{"class":5207},[3736,6230,5210],{"class":5203},[193,6232,6233],{},"I am using Nuxt in this example. I therefore do not need to import the Checkbox.vue component. If you are not using Nuxt, you will almost certainly need to import the Checkbox.vue component into your parent component. You will also need to import ref.",[3849,6235,5553],{"id":5552},[193,6237,5556,6238,6240,6241,6243,6244,6246,6247,6249,6250,6252],{},[5182,6239,5953],{}," component. We define a ",[5182,6242,6156],{}," ref and give it an initial value of false. This ref is then bound to the ",[5182,6245,6147],{}," component using ",[5182,6248,6103],{},". This allows us to access the value of ",[5182,6251,6156],{}," in our parent component.",[258,6254,6255,6260,6264,6268],{"orientation":261,"variant":263},[193,6256,6257],{},[265,6258],{"alt":5566,"className":6259,"src":5568},[269,270],[273,6261,6262],{"v-slot:title":262},[193,6263,5566],{},[273,6265,6266],{"v-slot:description":262},[193,6267,5577],{},[273,6269,6270],{"v-slot:links":262},[286,6271,6272],{"size":288,"target":262,"to":5582,"variant":292},[193,6273,5585],{},[219,6275,6277],{"id":6276},"why-should-we-make-our-checkbox-component-re-useable-in-vue","Why should we make our Checkbox component re-useable in Vue?",[193,6279,6280],{},"By making our Checkbox component re-useable we save ourselves time in the future and make our lives easier. Whenever we need a checkbox we can simply reuse the one we created. This means we don't need to create a new one each time. And more importantly, if we want to change anything, such as the styling, we only need to do it in one place.",[5594,6282,6283],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":262,"searchDepth":514,"depth":514,"links":6285},[6286,6289,6292],{"id":5919,"depth":514,"text":37,"children":6287},[6288],{"id":5931,"depth":520,"text":5932},{"id":5946,"depth":514,"text":5947,"children":6290},[6291],{"id":6079,"depth":520,"text":6080},{"id":6107,"depth":514,"text":6108,"children":6293},[6294],{"id":6276,"depth":520,"text":6277},[5609,5610],[5612,5613],"2024-04-25T00:00:00.000Z","How to create a re-useable Checkbox component for your Vue.js project using daisyUI.",{"src":6300},"/images/wp/featured-daisyui-checkbox-component-for-vue-jsdaisyUI-checkbox-vuejs-thumbnail.webp",{},{"title":6303,"description":6304,"ogTitle":6303,"ogDescription":6304,"twitterCard":576},"daisyUI Checkbox Component for Vue.js - [3 MINUTE SETUP]","Create a re-useable Checkbox component for Vue.js using daisyUI. Simple example with code. 3 minute easy setup. Copy and paste example.","jXvxLYUdqDcDNk1YpH7PpfvLShj2ltZeBszbn7z44wg",{"id":6307,"title":41,"archived":175,"authors":6308,"badge":6311,"body":6312,"categories":6888,"categorySlugs":6889,"date":6297,"description":6890,"extension":538,"image":6891,"meta":6893,"navigation":542,"path":42,"schemaOrg":4854,"seo":6894,"stem":43,"__hash__":6897},"posts/3.blog/daisyui-countdown-component-for-vue-js.md",[6309],{"name":178,"to":179,"avatar":6310},{"src":181},{"label":5138},{"type":185,"value":6313,"toc":6877},[6314,6317,6320,6323,6874],[188,6315,41],{"id":6316},"daisyui-countdown-component-for-vuejs",[193,6318,6319],{},"In this article we will look at how to create a daisyUI Countdown Component for Vue.js. Countdowns are great for displaying limited time offers. Or anything time sensitive on our websites.",[193,6321,6322],{},"The daisyUI docs provide a great starting point for a countdown component. However they don't currently have a countdown component that we can copy and paste directly into Vue.js. We can however, easily do this ourselves. This guide is suitible for any Vue.js project, whether this is Nuxt 3, Laravel + Inertia.js + Vue.js or anything else using Vue!",[4875,6324,6326,6330,6339,6342,6346,6354,6506,6510,6518,6521,6525,6530,6539,6543,6546,6832,6835,6837,6842,6845,6867,6871],{"video-id":6325},"F_yfvpydr1A",[219,6327,6329],{"id":6328},"before-you-create-your-daisyui-countdown-component","Before you create your daisyUI countdown component",[193,6331,6332,6333,5165,6336,470],{},"Before we create our countdown component we need to make sure our project is set up so we can use daisyUI. We need to have installed TailwindCSS and daisyUI. Instructions on installing Tailwind can be found on ",[197,6334,5164],{"href":5162,"rel":6335},[317],[197,6337,5170],{"href":5168,"rel":6338},[317],[193,6340,6341],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI countdown component.",[188,6343,6345],{"id":6344},"create-daisyui-countdown-component-in-vuejs","Create daisyUI Countdown component in Vuejs",[193,6347,6348,6349,5185,6352,5188],{},"We can now create our countdown component. In your components folder, create a new file named ",[5182,6350,6351],{},"Countdown.vue",[5182,6353,6351],{},[5190,6355,6357],{"className":5192,"code":6356,"filename":6351,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n\n    \u003Cspan class=\"countdown font-mono text-6xl\">\n        \u003C\u003Cspan :style=\"'--value:' + counter + ';'\">\u003C/span>\n    \u003C/span>\n\n\u003C/template>\n\n\u003Cscript setup>\nconst props = defineProps({\n    counter: Number\n})\n\u003C/script>\n",[5182,6358,6359,6367,6371,6390,6434,6442,6446,6454,6458,6468,6482,6492,6498],{"__ignoreMap":262},[3736,6360,6361,6363,6365],{"class":5199,"line":5200},[3736,6362,5204],{"class":5203},[3736,6364,273],{"class":5207},[3736,6366,5210],{"class":5203},[3736,6368,6369],{"class":5199,"line":514},[3736,6370,5215],{"emptyLinePlaceholder":542},[3736,6372,6373,6375,6377,6379,6381,6383,6386,6388],{"class":5199,"line":520},[3736,6374,5220],{"class":5203},[3736,6376,3736],{"class":5207},[3736,6378,5227],{"class":5226},[3736,6380,5230],{"class":5203},[3736,6382,5233],{"class":5203},[3736,6384,6385],{"class":5236},"countdown font-mono text-6xl",[3736,6387,5233],{"class":5203},[3736,6389,5210],{"class":5203},[3736,6391,6392,6394,6396,6398,6400,6402,6404,6407,6410,6413,6415,6418,6420,6422,6425,6428,6430,6432],{"class":5199,"line":5244},[3736,6393,5247],{"class":5283},[3736,6395,5204],{"class":5203},[3736,6397,3736],{"class":5207},[3736,6399,5273],{"class":5203},[3736,6401,5594],{"class":5226},[3736,6403,5230],{"class":5203},[3736,6405,6406],{"class":5203},"\"'",[3736,6408,6409],{"class":5236},"--value:",[3736,6411,6412],{"class":5203},"'",[3736,6414,4638],{"class":5203},[3736,6416,6417],{"class":5283},"counter",[3736,6419,4638],{"class":5203},[3736,6421,6412],{"class":5203},[3736,6423,6424],{"class":5236},";",[3736,6426,6427],{"class":5203},"'\"",[3736,6429,5713],{"class":5203},[3736,6431,3736],{"class":5207},[3736,6433,5210],{"class":5203},[3736,6435,6436,6438,6440],{"class":5199,"line":5265},[3736,6437,5305],{"class":5203},[3736,6439,3736],{"class":5207},[3736,6441,5210],{"class":5203},[3736,6443,6444],{"class":5199,"line":5292},[3736,6445,5215],{"emptyLinePlaceholder":542},[3736,6447,6448,6450,6452],{"class":5199,"line":5302},[3736,6449,5315],{"class":5203},[3736,6451,273],{"class":5207},[3736,6453,5210],{"class":5203},[3736,6455,6456],{"class":5199,"line":5312},[3736,6457,5215],{"emptyLinePlaceholder":542},[3736,6459,6460,6462,6464,6466],{"class":5199,"line":5322},[3736,6461,5204],{"class":5203},[3736,6463,5332],{"class":5207},[3736,6465,5335],{"class":5226},[3736,6467,5210],{"class":5203},[3736,6469,6470,6472,6474,6476,6478,6480],{"class":5199,"line":5327},[3736,6471,5343],{"class":5226},[3736,6473,5346],{"class":5283},[3736,6475,5230],{"class":5203},[3736,6477,5352],{"class":5351},[3736,6479,5355],{"class":5283},[3736,6481,5358],{"class":5203},[3736,6483,6484,6487,6489],{"class":5199,"line":5340},[3736,6485,6486],{"class":5207},"    counter",[3736,6488,5367],{"class":5203},[3736,6490,6491],{"class":5283}," Number\n",[3736,6493,6494,6496],{"class":5199,"line":5361},[3736,6495,5376],{"class":5203},[3736,6497,5379],{"class":5283},[3736,6499,6500,6502,6504],{"class":5199,"line":5373},[3736,6501,5315],{"class":5203},[3736,6503,5332],{"class":5207},[3736,6505,5210],{"class":5203},[219,6507,6509],{"id":6508},"different-daisyui-countdown-styles","Different daisyUI countdown styles",[193,6511,5395,6512,6517],{},[197,6513,6516],{"href":6514,"rel":6515},"https://daisyui.com/components/countdown/",[317],"different countdown components to choose from in the daisyUI docs",". Some are more complicated than others. The one in our example is a simple one. However if you need days, hours, minutes and seconds to countdown there are options for this too.",[193,6519,6520],{},"It doesn't matter which style you choose, the concept of converting it to a re-useable Vue.js component is the same. The example above is a countdown of seconds only. The same result can be achieved using any of the countdowns available on the daisyUI website but the logic for the countdown will need to be specific to the one you choose.",[3849,6522,6524],{"id":6523},"countdownvue-code-explained","Countdown.vue code explained",[193,6526,337,6527,6529],{},[5182,6528,6351],{}," component above accepts one prop:",[6531,6532,6533],"field",{"name":6417,"type":636},[193,6534,6535,6536,6538],{},"This allows us to pass a number to the ",[5182,6537,6351],{}," component from a parent component.",[188,6540,6542],{"id":6541},"use-the-daisyui-countdown-component-in-your-parent-component","Use the daisyUI Countdown component in your parent component",[193,6544,6545],{},"Now we have created our countdown component, we can use it in other components. This is simple to do. See the example below:",[5190,6547,6549],{"className":5192,"code":6548,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CCountdown :counter=\"computedCounter\" />\n    \u003C/div>\n\n\u003C/template>\n\n\u003Cscript setup>\n\nconst counter = ref(60)\n\nonMounted(() => {\n\n    setInterval(() => {\n        if(counter.value > 0) {\n            counter.value = counter.value - 1\n        }\n    }, 1000);\n\n})\n\nconst computedCounter = computed(() => {\n    return counter.value\n})\n\u003C/script>\n",[5182,6550,6551,6555,6563,6567,6575,6597,6605,6609,6617,6621,6631,6635,6654,6658,6674,6679,6693,6719,6745,6751,6765,6770,6777,6782,6803,6816,6823],{"__ignoreMap":262},[3736,6552,6553],{"class":5199,"line":5200},[3736,6554,5434],{"class":5283},[3736,6556,6557,6559,6561],{"class":5199,"line":514},[3736,6558,5204],{"class":5203},[3736,6560,273],{"class":5207},[3736,6562,5210],{"class":5203},[3736,6564,6565],{"class":5199,"line":520},[3736,6566,5215],{"emptyLinePlaceholder":542},[3736,6568,6569,6571,6573],{"class":5199,"line":5244},[3736,6570,5220],{"class":5203},[3736,6572,5223],{"class":5207},[3736,6574,5210],{"class":5203},[3736,6576,6577,6579,6582,6584,6586,6588,6590,6593,6595],{"class":5199,"line":5265},[3736,6578,5247],{"class":5203},[3736,6580,6581],{"class":5207},"Countdown",[3736,6583,5273],{"class":5203},[3736,6585,6417],{"class":5226},[3736,6587,5230],{"class":5203},[3736,6589,5233],{"class":5203},[3736,6591,6592],{"class":5283},"computedCounter",[3736,6594,5233],{"class":5203},[3736,6596,5289],{"class":5203},[3736,6598,6599,6601,6603],{"class":5199,"line":5292},[3736,6600,5305],{"class":5203},[3736,6602,5223],{"class":5207},[3736,6604,5210],{"class":5203},[3736,6606,6607],{"class":5199,"line":5302},[3736,6608,5215],{"emptyLinePlaceholder":542},[3736,6610,6611,6613,6615],{"class":5199,"line":5312},[3736,6612,5315],{"class":5203},[3736,6614,273],{"class":5207},[3736,6616,5210],{"class":5203},[3736,6618,6619],{"class":5199,"line":5322},[3736,6620,5215],{"emptyLinePlaceholder":542},[3736,6622,6623,6625,6627,6629],{"class":5199,"line":5327},[3736,6624,5204],{"class":5203},[3736,6626,5332],{"class":5207},[3736,6628,5335],{"class":5226},[3736,6630,5210],{"class":5203},[3736,6632,6633],{"class":5199,"line":5340},[3736,6634,5215],{"emptyLinePlaceholder":542},[3736,6636,6637,6639,6642,6644,6646,6648,6652],{"class":5199,"line":5361},[3736,6638,5343],{"class":5226},[3736,6640,6641],{"class":5283}," counter ",[3736,6643,5230],{"class":5203},[3736,6645,6210],{"class":5351},[3736,6647,5355],{"class":5283},[3736,6649,6651],{"class":6650},"sbssI","60",[3736,6653,5379],{"class":5283},[3736,6655,6656],{"class":5199,"line":5373},[3736,6657,5215],{"emptyLinePlaceholder":542},[3736,6659,6660,6663,6665,6668,6671],{"class":5199,"line":5382},[3736,6661,6662],{"class":5351},"onMounted",[3736,6664,5355],{"class":5283},[3736,6666,6667],{"class":5203},"()",[3736,6669,6670],{"class":5226}," =>",[3736,6672,6673],{"class":5203}," {\n",[3736,6675,6677],{"class":5199,"line":6676},15,[3736,6678,5215],{"emptyLinePlaceholder":542},[3736,6680,6682,6685,6687,6689,6691],{"class":5199,"line":6681},16,[3736,6683,6684],{"class":5351},"    setInterval",[3736,6686,5355],{"class":5207},[3736,6688,6667],{"class":5203},[3736,6690,6670],{"class":5226},[3736,6692,6673],{"class":5203},[3736,6694,6696,6699,6701,6703,6705,6708,6711,6714,6717],{"class":5199,"line":6695},17,[3736,6697,6698],{"class":5518},"        if",[3736,6700,5355],{"class":5207},[3736,6702,6417],{"class":5283},[3736,6704,470],{"class":5203},[3736,6706,6707],{"class":5283},"value",[3736,6709,6710],{"class":5203}," >",[3736,6712,6713],{"class":6650}," 0",[3736,6715,6716],{"class":5207},") ",[3736,6718,5358],{"class":5203},[3736,6720,6722,6725,6727,6729,6732,6735,6737,6739,6742],{"class":5199,"line":6721},18,[3736,6723,6724],{"class":5283},"            counter",[3736,6726,470],{"class":5203},[3736,6728,6707],{"class":5283},[3736,6730,6731],{"class":5203}," =",[3736,6733,6734],{"class":5283}," counter",[3736,6736,470],{"class":5203},[3736,6738,6707],{"class":5283},[3736,6740,6741],{"class":5203}," -",[3736,6743,6744],{"class":6650}," 1\n",[3736,6746,6748],{"class":5199,"line":6747},19,[3736,6749,6750],{"class":5203},"        }\n",[3736,6752,6754,6757,6760,6762],{"class":5199,"line":6753},20,[3736,6755,6756],{"class":5203},"    },",[3736,6758,6759],{"class":6650}," 1000",[3736,6761,5058],{"class":5207},[3736,6763,6764],{"class":5203},";\n",[3736,6766,6768],{"class":5199,"line":6767},21,[3736,6769,5215],{"emptyLinePlaceholder":542},[3736,6771,6773,6775],{"class":5199,"line":6772},22,[3736,6774,5376],{"class":5203},[3736,6776,5379],{"class":5283},[3736,6778,6780],{"class":5199,"line":6779},23,[3736,6781,5215],{"emptyLinePlaceholder":542},[3736,6783,6785,6787,6790,6792,6795,6797,6799,6801],{"class":5199,"line":6784},24,[3736,6786,5343],{"class":5226},[3736,6788,6789],{"class":5283}," computedCounter ",[3736,6791,5230],{"class":5203},[3736,6793,6794],{"class":5351}," computed",[3736,6796,5355],{"class":5283},[3736,6798,6667],{"class":5203},[3736,6800,6670],{"class":5226},[3736,6802,6673],{"class":5203},[3736,6804,6806,6809,6811,6813],{"class":5199,"line":6805},25,[3736,6807,6808],{"class":5518},"    return",[3736,6810,6734],{"class":5283},[3736,6812,470],{"class":5203},[3736,6814,6815],{"class":5283},"value\n",[3736,6817,6819,6821],{"class":5199,"line":6818},26,[3736,6820,5376],{"class":5203},[3736,6822,5379],{"class":5283},[3736,6824,6826,6828,6830],{"class":5199,"line":6825},27,[3736,6827,5315],{"class":5203},[3736,6829,5332],{"class":5207},[3736,6831,5210],{"class":5203},[193,6833,6834],{},"I am using Nuxt in this example. I therefore do not need to import the Countdown.vue component. I also do not need to import ref, onMounted, computed. If you are not using Nuxt, you will almost certainly need to import the Countdown.vue component and ref, onMounted and computed into your parent component.",[3849,6836,5553],{"id":5552},[193,6838,5556,6839,6841],{},[5182,6840,6351],{}," component. There are a couple of important things going on in the setup script. We define a constant named counter. When the component is mounted we run a function that will minus 1 from the value of counter, each second.",[193,6843,6844],{},"It will only do this if the value of counter is greater than 0. This prevents the counter going into minus figures. We then have a computed value that returns the value of counter. This computed value is passed to out countdown component!",[258,6846,6847,6852,6856,6861],{"orientation":261,"variant":263},[193,6848,6849],{},[265,6850],{"alt":5566,"className":6851,"src":5568},[269,270],[273,6853,6854],{"v-slot:title":262},[193,6855,5566],{},[273,6857,6858],{"v-slot:description":262},[193,6859,6860],{},"If you dodn't know, daisyUI has pre-made templates you can buy. Check them out",[273,6862,6863],{"v-slot:links":262},[286,6864,6865],{"size":288,"target":262,"to":5582,"variant":292},[193,6866,5585],{},[219,6868,6870],{"id":6869},"why-should-we-make-our-countdown-component-re-useable-in-vue","Why should we make our Countdown component re-useable in Vue?",[193,6872,6873],{},"By making our Countdown component re-useable we save ourselves time in the future. Whenever we need a countdown we can reuse the one we created. This means we don't have to use a new version every time we want one. And if we want to change the styling at all we only need to do it in the one component!",[5594,6875,6876],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":262,"searchDepth":514,"depth":514,"links":6878},[6879,6882,6885],{"id":6316,"depth":514,"text":41,"children":6880},[6881],{"id":6328,"depth":520,"text":6329},{"id":6344,"depth":514,"text":6345,"children":6883},[6884],{"id":6508,"depth":520,"text":6509},{"id":6541,"depth":514,"text":6542,"children":6886},[6887],{"id":6869,"depth":520,"text":6870},[5609,5610],[5612,5613],"How to create a re-useable Countdown component for your Vue.js project using daisyUI.",{"src":6892},"/images/wp/featured-daisyui-countdown-component-for-vue-jsdaisyUI-countdown-vuejs-thumbnail.webp",{},{"title":6895,"description":6896,"ogTitle":6895,"ogDescription":6896,"twitterCard":576},"daisyUI Countdown Component for Vue.js - [3 MINUTE SETUP]","Create a re-useable Countdown component for Vue.js using daisyUI. Simple example with code. 3 minute easy setup. Copy and paste example.","gZ2q2-yJPJut8aArZJWMlzm6CWXPas1pLxrzmjHtEBs",{"id":6899,"title":165,"archived":175,"authors":6900,"badge":6903,"body":6904,"categories":7053,"categorySlugs":7054,"date":7055,"description":7056,"extension":538,"image":7057,"meta":7059,"navigation":542,"path":166,"schemaOrg":7060,"seo":7080,"stem":167,"__hash__":7083},"posts/3.blog/what-is-skool.md",[6901],{"name":178,"to":179,"avatar":6902},{"src":181},{"label":199},{"type":185,"value":6905,"toc":7043},[6906,6910,6916,6919,6923,6932,6936,6939,6945,6948,6955,6959,6962,6965,6969,6983,7006,7010,7013,7026,7030,7040],[188,6907,6909],{"id":6908},"what-is-skool","What is skool?",[193,6911,6912,6913,6915],{},"So you've been browsing the internet. You've spent a bit of time on YouTube. You're a fan of ",[197,6914,4325],{"href":150},". And you keep hearing about skool. In fact you've heard about it so much that you decided to search for it to find out what it is? And now you a here. Reading this post. Wishing I would just get to the point. Well, no-one is stopping you from scrolling buddy!",[193,6917,6918],{},"But seriously. Let's take a look at what skool is. What the point of it is. And whether you too should get involved. Or, if you should completely ignore it and move on with your life. Spoiler alert, you are probably going to want to get involved.",[188,6920,6922],{"id":6921},"the-community-platform","The community platform",[193,6924,6925,6926,6931],{},"So what's it all about? I hear you ask. Well, according to the ",[197,6927,6930],{"href":6928,"rel":6929},"https://www.skool.com/",[317],"skool website"," - Skool is a community platform where you can discover communities or create your own. Sounds interesting. Let's take a closer look.",[219,6933,6935],{"id":6934},"skool-discovery-page-reveals-all","Skool discovery page reveals all",[193,6937,6938],{},"A trip to the discovery page is the first place you should start. Having a scroll through this page should provide some clarity about what skool is.",[193,6940,6941],{},[265,6942],{"alt":6943,"src":6944},"What is skool? the skool discovery page will answer this question for you","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-11-at-10.12.51-1024x662.webp",[193,6946,6947],{},"By doing this, you will see that you can learn anything on this platform. A quick glance through this page will reveal groups on masculinity, digital growth, music production, sales, software development, jumping high (yes really), being a barber, copy writing and much much more.",[193,6949,6950,6951,6954],{},"Not only can you learn anything, but by this logic you can also ",[197,6952,6953],{"href":601},"teach anything on skool",". If this isn't getting your brain firing yet, I don't know what will. I will explain further.",[188,6956,6958],{"id":6957},"what-is-the-point-of-skool","What is the point of skool?",[193,6960,6961],{},"So as mentioned previously. Skool is a platform where you can discover communities or create your own. But what is the point of these communities? Well in short. They are for educating their members. But it's not the standard education like we had growing up as kids. It's education for things you actually want to learn.",[193,6963,6964],{},"This doesn't have to be academic subjects. But it obviously can be. It's for literally anything. Fitness, making money, art, business. Literally anything. If you want to learn something new. The chances are there is a group for it. And if there isn't a group for it, then there is an opportunity for someone to make one.",[188,6966,6968],{"id":6967},"how-is-skool-different-from-other-education-platforms","How is skool different from other education platforms?",[193,6970,6971,6972,6977,6978,6982],{},"There are of course other online education platforms out there such as ",[197,6973,6976],{"href":6974,"rel":6975},"https://www.udemy.com/",[317],"Udemy",", and ",[197,6979,1860],{"href":6980,"rel":6981},"https://teachable.com/",[317],". These are established and good in their own right. But what makes skool different?",[1352,6984,6985,6997],{},[464,6986,6987,6989,6990,6993,6994,6996],{},[3849,6988,2081],{"id":2245},"I have already mentioned this in other posts such as my ",[197,6991,6992],{"href":130},"skool review",". There is a big focus on gamification.",[5038,6995],{},"This is in the sense that users are incentivised to actively get involved in communities. This is done by having leaderboards that display the most active/helpful community members. This aspect of the platform helps community owners to grow their groups. As it keeps members coming back and attracts new members who want to rise up through the ranks. This brings me on to the next point nicely...",[464,6998,6999,7002,7003,7005],{},[3849,7000,2516],{"id":7001},"community","The next thing that makes skool different from other online course platforms is the focus on community. There is a huge focus on this aspect. Skool encourages students to engage in their communities. This creates a friendly environment where like minded people can help each other and discuss projects. This in turn helps the learning process and makes the whole experience more enjoyable and effective.",[5038,7004],{},"While other platforms do offer community. I have not personally come across one that does it as well as this. If you disagree, please do contact me and let me know so I can check out other alternatives!",[188,7007,7009],{"id":7008},"teaching-on-skool","Teaching on skool",[193,7011,7012],{},"On the flip side of this, skool is also for teachers. Again, not teachers in the traditional sense who teach Maths and English. Although this is of course a possibility. But teachers of how to grow a YouTube channel, or how to trade on the stock market or how to jump higher (yes really). Real practical skills.",[193,7014,7015,7016,7018,7019,7022,7023,470],{},"The great thing is that you can teach anything. If you are an expert in something, the chances are you could make a success of teaching on skool. Don't believe me? Try it for yourself. They offer a ",[197,7017,4060],{"href":601}," so you have nothing to lose. Plans start at just ",[197,7020,7021],{"href":126},"$9/month for the Hobby plan",". I have even created a ",[197,7024,7025],{"href":66},"guide on how to make money using skool",[188,7027,7029],{"id":7028},"to-sum-up","To sum up...",[193,7031,7032,7033,7036,7037,470],{},"So to sum up. Skool is an educational community platform built by ",[197,7034,7035],{"href":106},"Sam Ovens",". Users can learn new skills and interact with other users who are also learning. You can be a member of communities and also ",[197,7038,7039],{"href":601},"run your own",[193,7041,7042],{},"The biggest selling points are it's focus on community and gamification. These features encourage users to take action on the website and harbour a pleasant environment. They also encourage users to keep returning as there is always the opportunity to gain more points and rise up leaderboards.",{"title":262,"searchDepth":514,"depth":514,"links":7044},[7045,7046,7049,7050,7051,7052],{"id":6908,"depth":514,"text":6909},{"id":6921,"depth":514,"text":6922,"children":7047},[7048],{"id":6934,"depth":520,"text":6935},{"id":6957,"depth":514,"text":6958},{"id":6967,"depth":514,"text":6968},{"id":7008,"depth":514,"text":7009},{"id":7028,"depth":514,"text":7029},[199],[535],"2024-04-11T00:00:00.000Z","What is Skool? Let’s take a look at what skool.com is. What it is used for, and who should be using it.",{"src":7058},"/images/skool/what-is-skool.webp",{},[7061,7067],{"headline":7062,"description":7063,"image":7064,"datePublished":7065,"dateModified":7065,"author":7066,"@type":550},"What is Skool? The Community Platform Explained","What is Skool? A look at what skool.com is, what it is used for, and who should be using it.","/images/wp/featured-what-is-skoolwhat-is-skool.webp","2024-04-11",{"name":178,"url":179,"@type":549},{"mainEntity":7068,"@type":571},[7069,7072,7076],{"name":165,"acceptedAnswer":7070,"@type":558},{"text":7071,"@type":557},"Skool is a community platform where you can discover communities or create your own. It combines courses, community discussion, and gamification to help people learn and teach specific topics.",{"name":7073,"acceptedAnswer":7074,"@type":558},"How is Skool different from other education platforms?",{"text":7075,"@type":557},"Skool focuses on gamification and community. Leaderboards incentivise members to get involved, and the community-first approach creates a friendly environment where like-minded people help each other learn.",{"name":7077,"acceptedAnswer":7078,"@type":558},"Who is Skool for?",{"text":7079,"@type":557},"Skool is for both learners and teachers. Anyone can join communities to learn new skills, and anyone with expertise can create a group to teach others. You can make a group about anything from fitness to business to video games.",{"title":7081,"description":7082,"ogTitle":7081,"ogDescription":7082,"twitterCard":576},"What is Skool? How It Works, Pricing & Who It's For [2026]","Skool is a community platform backed by Alex Hormozi. I break down how it works, what it costs ($99/mo), and whether it's worth it for your business.","SZfZ8Hrcfsw5hzfshd6orCBVU4cnR35FFBPHR5YZEPQ",{"id":7085,"title":49,"archived":175,"authors":7086,"badge":7089,"body":7091,"categories":7757,"categorySlugs":7760,"date":7763,"description":7764,"extension":538,"image":7765,"meta":7767,"navigation":542,"path":50,"schemaOrg":4854,"seo":7768,"stem":51,"__hash__":7770},"posts/3.blog/deploy-laravel-to-cloudways.md",[7087],{"name":178,"to":179,"avatar":7088},{"src":181},{"label":7090},"Inertia.js, Laravel, Vue.js",{"type":185,"value":7092,"toc":7744},[7093,7096,7099,7102,7741],[188,7094,49],{"id":7095},"deploy-laravel-to-cloudways",[193,7097,7098],{},"How to deploy your Laravel application to a live server. In this example I will be using Cloudways by Digital Ocean. The Laravel app I will be deploying is built with Jetstream and Inertia.js. This in depth guide will take you through the entire deployment process.",[193,7100,7101],{},"Deploying a Laravel app can be tricky at times. Things seem to be going smoothly and then suddenly everything falls apart. I know the feeling! Luckily, deploying a Laravel web app to Cloudways hosting is really easy. In this guide I will show you the exact steps you need to take to get your Laravel app live on Cloudways.",[4875,7103,7105,7109,7112,7116,7123,7127,7131,7134,7137,7143,7147,7150,7156,7160,7163,7169,7173,7176,7182,7185,7191,7194,7198,7206,7210,7213,7216,7239,7242,7268,7272,7275,7309,7313,7316,7332,7335,7386,7392,7395,7399,7402,7405,7411,7415,7418,7492,7495,7499,7502,7506,7509,7515,7519,7522,7537,7543,7552,7556,7559,7602,7609,7613,7616,7620,7628,7634,7661,7671,7677,7681,7684,7690,7694,7697,7713,7716,7722,7725,7731,7734],{"video-id":7104},"t8XkQYE4ra0",[188,7106,7108],{"id":7107},"deploy-laravel-to-cloudways-step-by-step-guide","Deploy Laravel to Cloudways step-by-step Guide",[193,7110,7111],{},"In this guide I will go through step-by-step exactly what you need to do to deploy Laravel to Cloudways.",[219,7113,7115],{"id":7114},"step-1-sign-up-to-cloudways","Step 1: Sign up to Cloudways",[193,7117,4071,7118,7122],{},[197,7119,7121],{"href":7120},"/go/cloudways","create an account with Cloudways",". This is easy to do and is a case of filling out your details and verifying your email address. Make sure you use code GOBLIN to get 20% off for 2 months if you decide to go onto a paid plan.",[219,7124,7126],{"id":7125},"step-2-create-server-and-application-on-cloudways","Step 2: Create server and application on Cloudways",[3849,7128,7130],{"id":7129},"server-creation","Server creation",[193,7132,7133],{},"Once you have created your account, Cloudways will take you straight to the server creation page. You will be presented with options for your application and server details.",[193,7135,7136],{},"Select \"Laravel\" from the first select menu, then give names to your application, server and project. It doesn't matter what you name these so don't get bogged down trying to think of something clever. I named my server \"Server 1\". Original.",[193,7138,7139],{},[265,7140],{"alt":7141,"src":7142},"Naming your server and application on Cloudways for a Laravel deployment","/images/wp/Screenshot-2024-04-06-at-10.36.04-1024x191.webp",[3849,7144,7146],{"id":7145},"select-a-hosting-provider","Select a hosting provider",[193,7148,7149],{},"You can now select your server. By default it is set to DigitalOcean. I personally have always used DigitalOcean and had good experiences using this option. If you want to use AWS or one of the other options it should work exactly the same - however I have not tested them so cannot confirm this.",[193,7151,7152],{},[265,7153],{"alt":7154,"src":7155},"Select which hosting company to use through Cloudways","/images/wp/Screenshot-2024-04-06-at-10.36.17-1024x204.webp",[3849,7157,7159],{"id":7158},"server-size","Server size",[193,7161,7162],{},"You now need to select the size of your server. For production Laravel apps, Cloudways suggest you use at least a 4GB server. You can get away with lower and scale the size of your server at any time so don't worry if you want to start with a smaller one.",[193,7164,7165],{},[265,7166],{"alt":7167,"src":7168},"Selecting server size in Cloudways","/images/wp/Screenshot-2024-04-06-at-10.36.31-1024x183.webp",[3849,7170,7172],{"id":7171},"server-location","Server location",[193,7174,7175],{},"Select the server location that is nearest to where your users are located. This isn't the most important selection but in theory it should be slightly faster if its near where your app is being accessed from. Don't get bogged down with this.",[193,7177,7178],{},[265,7179],{"alt":7180,"src":7181},"Selecting server location in Cloudways","/images/wp/Screenshot-2024-04-06-at-10.37.07.webp",[193,7183,7184],{},"Once you have set all of these options you can click the \"Launch Now\" button and Cloudways will start setting up your server! This will take a few minutes, so be patient.",[193,7186,7187],{},[265,7188],{"alt":7189,"src":7190},"Cloudways server for Laravel being set up","/images/wp/Screenshot-2024-04-06-at-10.38.09-1024x261.webp",[193,7192,7193],{},"Your Cloudways server will take a few minutes to set up",[219,7195,7197],{"id":7196},"step-3-add-laravel-project-to-github","Step 3: Add Laravel project to Github",[193,7199,7200,7201,470],{},"We will be deploying our Laravel application to Cloudways via Git. So in order to do this we need to add our Laravel app to Github. The exact git commands you need to use vary depending on the version of git you have running on your machine. For full reference you can checkout ",[197,7202,7205],{"href":7203,"rel":7204},"https://docs.github.com/en/migrations/importing-source-code/using-the-command-line-to-import-source-code/adding-locally-hosted-code-to-github",[317],"these github docs",[3849,7207,7209],{"id":7208},"create-local-git-repository","Create local Git repository",[193,7211,7212],{},"We need to create a local git repository. In the terminal, navigate to the root of your Laravel project. Check your Git version so you know which commands to run. Run the relevant command to initialise a new local repository",[193,7214,7215],{},"Git 2.28.0 or later version",[5190,7217,7222],{"className":7218,"code":7219,"filename":7220,"language":7221,"meta":262,"style":262},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git init -b main\n","terminal","bash",[5182,7223,7224],{"__ignoreMap":262},[3736,7225,7226,7230,7233,7236],{"class":5199,"line":5200},[3736,7227,7229],{"class":7228},"sBMFI","git",[3736,7231,7232],{"class":5236}," init",[3736,7234,7235],{"class":5236}," -b",[3736,7237,7238],{"class":5236}," main\n",[193,7240,7241],{},"Git 2.27.1 or earlier version",[5190,7243,7245],{"className":7218,"code":7244,"filename":7220,"language":7221,"meta":262,"style":262},"git init && git symbolic-ref HEAD refs/heads/main\n",[5182,7246,7247],{"__ignoreMap":262},[3736,7248,7249,7251,7253,7256,7259,7262,7265],{"class":5199,"line":5200},[3736,7250,7229],{"class":7228},[3736,7252,7232],{"class":5236},[3736,7254,7255],{"class":5203}," &&",[3736,7257,7258],{"class":7228}," git",[3736,7260,7261],{"class":5236}," symbolic-ref",[3736,7263,7264],{"class":5236}," HEAD",[3736,7266,7267],{"class":5236}," refs/heads/main\n",[3849,7269,7271],{"id":7270},"add-project-files-to-local-repository","Add project files to local repository",[193,7273,7274],{},"We have now initialised an empty git repository. So we need to add the files from our Laravel app. Run the following commands in the route of your Laravel app.",[5190,7276,7278],{"className":7218,"code":7277,"filename":7220,"language":7221,"meta":262,"style":262},"git add .\ngit commit -m \"First commit\"\n",[5182,7279,7280,7290],{"__ignoreMap":262},[3736,7281,7282,7284,7287],{"class":5199,"line":5200},[3736,7283,7229],{"class":7228},[3736,7285,7286],{"class":5236}," add",[3736,7288,7289],{"class":5236}," .\n",[3736,7291,7292,7294,7297,7300,7303,7306],{"class":5199,"line":514},[3736,7293,7229],{"class":7228},[3736,7295,7296],{"class":5236}," commit",[3736,7298,7299],{"class":5236}," -m",[3736,7301,7302],{"class":5203}," \"",[3736,7304,7305],{"class":5236},"First commit",[3736,7307,7308],{"class":5203},"\"\n",[3849,7310,7312],{"id":7311},"create-remote-repository-on-github","Create remote repository on Github",[193,7314,7315],{},"We now need to create a remote repository on Github and push our local repository to it. Run the following command in the root of your Laravel project.",[5190,7317,7319],{"className":7218,"code":7318,"filename":7220,"language":7221,"meta":262,"style":262},"gh repo create\n",[5182,7320,7321],{"__ignoreMap":262},[3736,7322,7323,7326,7329],{"class":5199,"line":5200},[3736,7324,7325],{"class":7228},"gh",[3736,7327,7328],{"class":5236}," repo",[3736,7330,7331],{"class":5236}," create\n",[193,7333,7334],{},"Running this command will present you with a series of options in the terminal. These are the options you want to select:",[461,7336,7337,7343,7348,7354,7360,7366,7370,7375,7381],{},[464,7338,7339,7340],{},"What would you like to do? ",[304,7341,7342],{},"Push an existing local repository to Github",[464,7344,7345,7346],{},"Path to local repository ",[304,7347,470],{},[464,7349,7350,7351],{},"Repository name ",[304,7352,7353],{},"Leave blank to use your existing project name, use different name if you want to",[464,7355,7356,7357],{},"Description ",[304,7358,7359],{},"Optionally add a description or just leave it blank",[464,7361,7362,7363],{},"Visibility ",[304,7364,7365],{},"Up to you but I personally make this Private",[464,7367,7350,7368],{},[304,7369,7353],{},[464,7371,7372,7373],{},"Add a remote? ",[304,7374,2126],{},[464,7376,7377,7378],{},"What should the new remote be called? ",[304,7379,7380],{},"Leave blank to use default (origin)",[464,7382,7383,7384],{},"Would you like to push commits from the current branch to \"origin\"? ",[304,7385,2126],{},[193,7387,7388],{},[265,7389],{"alt":7390,"src":7391},"Creating a new remote repository on Github and pushing local repository to it ","/images/wp/Screenshot-2024-04-06-at-10.39.42-1024x311.webp",[193,7393,7394],{},"Now if you go to your Github account and view the repositories page, you will see this newly created repository. And all the code from your local repo will be in there! Great stuff.",[219,7396,7398],{"id":7397},"step-4-turn-off-caching-in-cloudways","Step 4: Turn off caching in Cloudways",[193,7400,7401],{},"Caching is useful. However when in development it can make you want to pull your hair out. For this reason I recommend you deactivate it whilst deploying your Laravel project on Cloudways.",[193,7403,7404],{},"Navigate to your newly created application. Then go to application settings. In the \"General\" tab, scroll down to the section labelled \"Varnish\". Disable Varnish.",[193,7406,7407],{},[265,7408],{"alt":7409,"src":7410},"Deactivating Varnish caching in Cloudways","/images/wp/Screenshot-2024-04-06-at-10.40.55.webp",[219,7412,7414],{"id":7413},"step-5-deployment-via-git","Step 5: Deployment via Git",[193,7416,7417],{},"We are making good progress. Now head to the \"Deployment via GIT\" tab in the left hand menu of your application settings on Cloudways. Now take the following steps:",[1352,7419,7420,7434,7448,7462,7476],{},[464,7421,7422,7425,7427,7428,7430],{},[304,7423,7424],{},"Generate SSH Keys",[5038,7426],{},"We need to generate SSH keys to allow our Cloudways server to communicate with our Github repository. Click the \"Generate SSH Keys\" button. This will (surprisingly) generate our SSH keys.",[5038,7429],{},[265,7431],{"alt":7432,"src":7433},"Generate SSH keys in Cloudways to deploy via git","/images/wp/Screenshot-2024-04-06-at-10.41.45-1024x271.webp",[464,7435,7436,7439,7441,7442,7444],{},[304,7437,7438],{},"Copy SSH Keys",[5038,7440],{},"Once our SSH keys have been generated. Click the \"View SSH Keys\" button. This will display the key, we need to now COPY this key. Click the copy icon in the top right of the modal to easily do this.",[5038,7443],{},[265,7445],{"alt":7446,"src":7447},"Copy SSH key from Cloudways to paste into Github repository","/images/wp/Screenshot-2024-04-06-at-10.42.22-1024x671.webp",[464,7449,7450,7453,7455,7456,7458],{},[304,7451,7452],{},"Paste SSH keys into Github project",[5038,7454],{},"Now we need to head back to our Github repository. Click \"Settings\". Navigate to the \"Deploy keys\" tab - this can be found in the left hand menu under Security. Now click \"Add deploy key\". Paste your SSH key into the Key field. Give your key a title in the Title field (it doesn't matter what you call this). Leave the \"Allow write access\" box unchecked. Now click the \"Add key\" button.",[5038,7457],{},[265,7459],{"alt":7460,"src":7461},"Paste SSH key from Cloudways into Laravel repository on Github in deploy keys section ","/images/wp/Screenshot-2024-04-06-at-10.43.54-1024x523.webp",[464,7463,7464,7467,7469,7470,7472],{},[304,7465,7466],{},"Copy Github repository SSH address",[5038,7468],{},"In our Github repository, click the green \"\u003C> Code\" dropdown button. Click the \"SSH\" tab and copy the address that appears.",[5038,7471],{},[265,7473],{"alt":7474,"src":7475},"Copy SSH address from Github repository containing Laravel application","/images/wp/Screenshot-2024-04-06-at-10.44.55-1024x456.webp",[464,7477,7478,7481,7483,7484,7486,7490,7488],{},[304,7479,7480],{},"Link Cloudways to Github",[5038,7482],{},"Head back to your Cloudways application and paste the address into the GIT Remote Address field. Click \"Authenticate\". select \"main\" from the Branch dropdown menu. Leave the Deployment Path as it is (public_html/). Click \"Start Deployment\"",[5038,7485],{},[265,7487],{"alt":7488,"src":7489},"Authenticate Github repository and fetch main branch before starting deployment","/images/wp/Screenshot-2024-04-06-at-10.45.44-1024x868.webp",[5038,7491],{},[193,7493,7494],{},"If you have followed these steps correctly your Laravel application will be cloned from your Github repository into your Cloudways server.",[219,7496,7498],{"id":7497},"step-6-set-up-composer-and-npm","Step 6: Set up composer and npm",[193,7500,7501],{},"We need to access our server via the terminal in order to run a couple of commands. Don't worry, this is easy to do and I will give you exact steps so you don't mess this up.",[3849,7503,7505],{"id":7504},"log-in-to-ssh-terminal","Log in to SSH terminal",[193,7507,7508],{},"Head to the server in Cloudways. Once in your server settings, head to the \"Master Credentials\" tab. Now click \"Launch SSH Terminal\", this will open the terminal in a new tab. If you are using Chrome you will probably get a warning saying that \"Your connection is not private\". If you get this message, click \"Advanced\" then click the \"proceed to xxx.xxx.xx.xxx (unsafe)\" link. Now use the username and password from the \"Master Credentials\" page to login to the SSH terminal.",[193,7510,7511],{},[265,7512],{"alt":7513,"src":7514},"Warning about unsecure connection in Google Chrome","/images/wp/Screenshot-2024-04-06-at-10.47.35-1024x851.webp",[3849,7516,7518],{"id":7517},"navigate-to-our-public_html-directory","Navigate to our public_html directory",[193,7520,7521],{},"Now you have logged into your SSH terminal, we want to navigate to to the \"public_html/\" directory as this is where our Laravel project files are. The following commands will help you to do this:",[5190,7523,7525],{"className":7218,"code":7524,"filename":7220,"language":7221,"meta":262,"style":262},"ls\ncd\n",[5182,7526,7527,7532],{"__ignoreMap":262},[3736,7528,7529],{"class":5199,"line":5200},[3736,7530,7531],{"class":7228},"ls\n",[3736,7533,7534],{"class":5199,"line":514},[3736,7535,7536],{"class":5351},"cd\n",[193,7538,7539],{},[265,7540],{"alt":7541,"src":7542},"Navigate to the public_html directory in your application on your Cloudways server","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-06-at-10.48.25-1024x409.webp",[193,7544,7545,7546,7551],{},"If you are struggling with this, watch ",[197,7547,7550],{"href":7548,"rel":7549},"https://youtu.be/t8XkQYE4ra0?si=ucGC_SYmHHsDNs3B&t=517",[317],"this part of my video guide"," as it shows exactly how to use the commands.",[3849,7553,7555],{"id":7554},"commands-to-run","Commands to run",[193,7557,7558],{},"Once you are in the \"public_html/\" directory we need to run the following commands:",[5190,7560,7562],{"className":7218,"code":7561,"filename":7220,"language":7221,"meta":262,"style":262},"composer update\ncomposer install\nnpm update\nnpm install\nnpm run build\n",[5182,7563,7564,7572,7579,7586,7592],{"__ignoreMap":262},[3736,7565,7566,7569],{"class":5199,"line":5200},[3736,7567,7568],{"class":7228},"composer",[3736,7570,7571],{"class":5236}," update\n",[3736,7573,7574,7576],{"class":5199,"line":514},[3736,7575,7568],{"class":7228},[3736,7577,7578],{"class":5236}," install\n",[3736,7580,7581,7584],{"class":5199,"line":520},[3736,7582,7583],{"class":7228},"npm",[3736,7585,7571],{"class":5236},[3736,7587,7588,7590],{"class":5199,"line":5244},[3736,7589,7583],{"class":7228},[3736,7591,7578],{"class":5236},[3736,7593,7594,7596,7599],{"class":5199,"line":5265},[3736,7595,7583],{"class":7228},[3736,7597,7598],{"class":5236}," run",[3736,7600,7601],{"class":5236}," build\n",[193,7603,7604,7605,7608],{},"I'm assuming that you haven't uploaded your build files to your Github repository. If you have done this, you do not need to run ",[5182,7606,7607],{},"npm run build"," in your server's SSH terminal.",[219,7610,7612],{"id":7611},"step-7-update-env-file-on-cloudways","Step 7: Update .env file on Cloudways",[193,7614,7615],{},"We are nearly there. We need to make some changes to the .env file that is in our Laravel application on our Cloudways server. You should never push the .env file from your local repository to your remote Github repository. By default git will exclude this file in the .gitignore file that is created when you initialised the local git repository. There will be a different .env file on your server. We need to access this.",[3849,7617,7619],{"id":7618},"access-env-via-sftp","Access .env via SFTP",[193,7621,7622,7623,470],{},"Head back to our application settings in Cloudways. We need to go to the \"Access Details\" tab in the left hand menu. Scroll down and click \"Add SFTP User\". Create a user with a username and password. Now you will need to SFTP into your server using an FTP client such as ",[197,7624,7627],{"href":7625,"rel":7626},"https://filezilla-project.org/",[317],"FileZilla",[193,7629,7630],{},[265,7631],{"alt":7632,"src":7633},"Create a new SFTP user to allow access to your Cloudways server via SFTP","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-06-at-10.49.29-1024x493.webp",[461,7635,7636,7643,7649,7655],{},[464,7637,7638,7639,7642],{},"Host: ",[304,7640,7641],{},"sftp://"," */",[464,7644,7645,7646],{},"Username: ",[304,7647,7648],{},"Username for SFTP user you just created in Cloudways",[464,7650,7651,7652],{},"Password: ",[304,7653,7654],{},"Password for SFTP user you just created in Cloudways",[464,7656,7657,7658],{},"Port: ",[304,7659,7660],{},"You can leave this blank",[193,7662,7663,7664,7667,7668,7670],{},"Once you have successfully connected to your server via SFTP, navigate to the \"public_html\" directory. In this directory you will find the ",[5182,7665,7666],{},".env"," file. We need to edit this file. In FileZilla right click the ",[5182,7669,7666],{}," file and click \"View/Edit\". This should open the file for us to edit!",[193,7672,7673],{},[265,7674],{"alt":7675,"src":7676},"Once connected to your Cloudways application via SFTP edit the .env file","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-06-at-10.51.09-1024x496.webp",[3849,7678,7680],{"id":7679},"database-connection-settings-in-env","Database connection settings in .env",[193,7682,7683],{},"The environment variables we are interested in are those relating to the database connection. On the \"Access Details\" tab in our Cloudways application we will find the details we need. Copy the DB Name, Username and Password and paste them into the corresponding .env variables: DB_DATABASE, DB_USERNAME and DB_PASSWORD. Save the changes made to the .env file and upload them to the server. Overwriting the previous version of the .env file.",[193,7685,7686],{},[265,7687],{"alt":7688,"src":7689},"Update the database connection environment variables in the .env file on the server","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-06-at-10.51.47.png",[219,7691,7693],{"id":7692},"step-8-run-the-database-migration","Step 8: Run the database migration",[193,7695,7696],{},"We are nearly there. We just need to run our database migrations. Head back to the SSH terminal on our Cloudways server. Once again, make sure you are in the \"public_html/\" directory. Run the following command:",[5190,7698,7700],{"className":7218,"code":7699,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan migrate\n",[5182,7701,7702],{"__ignoreMap":262},[3736,7703,7704,7707,7710],{"class":5199,"line":5200},[3736,7705,7706],{"class":7228},"php",[3736,7708,7709],{"class":5236}," artisan",[3736,7711,7712],{"class":5236}," migrate\n",[193,7714,7715],{},"All of our database tables should now have been migrated.",[193,7717,7718],{},[265,7719],{"alt":7720,"src":7721},"The result of running php artisan migrate in the server SSH terminal","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-06-at-10.52.16-1024x253.webp",[193,7723,7724],{},"We are now at a point where we should be able to see our live application. Go back to the \"Access Details\" tab in cloudways. You will see an \"Application URL\" link, click this link and you will be able to see your live application!",[193,7726,7727],{},[265,7728],{"alt":7729,"src":7730},"Click the Application URL to view your live Laravel application","https://codingoblin.com/wp-content/uploads/2024/04/Screenshot-2024-04-06-at-10.52.32-1024x374.webp",[193,7732,7733],{},"Congratulations! Your Laravel web application is live. What a great feeling. Now any time you want to update your live app - all you need to do is push your changes to your git repo, then pull them into Cloudways. Make sure you clear the cache after doing this to avoid displaying the old version of the app.",[193,7735,7736,7737,7740],{},"Try out ",[197,7738,7739],{"href":7120},"Cloudways for free",". No card required! Use code GOBLIN for 20% off for 2 months.",[5594,7742,7743],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":262,"searchDepth":514,"depth":514,"links":7745},[7746,7747],{"id":7095,"depth":514,"text":49},{"id":7107,"depth":514,"text":7108,"children":7748},[7749,7750,7751,7752,7753,7754,7755,7756],{"id":7114,"depth":520,"text":7115},{"id":7125,"depth":520,"text":7126},{"id":7196,"depth":520,"text":7197},{"id":7397,"depth":520,"text":7398},{"id":7413,"depth":520,"text":7414},{"id":7497,"depth":520,"text":7498},{"id":7611,"depth":520,"text":7612},{"id":7692,"depth":520,"text":7693},[7758,7759,5610],"Inertia.js","Laravel",[7761,7762,5613],"inertia-js","laravel","2024-04-06T00:00:00.000Z","Deploy Laravel to Cloudways. Easy guide. Deploy your Laravel app quickly onto Cloudways hosting. Laravel + Inertia.js + Vue.js guide",{"src":7766},"/images/wp/featured-deploy-laravel-to-cloudwaysdeploy-laravel-to-cloudways-Thumbnail.webp",{},{"title":7769,"description":7764,"ogTitle":7769,"ogDescription":7764,"twitterCard":576},"Deploy Laravel to Cloudways - [2024 GUIDE]","zFg_WQH1gVh1w4UbL_Mgnc19SFxSYZCftRo8_1qSQfM",{"id":7772,"title":21,"archived":175,"authors":7773,"badge":7776,"body":7777,"categories":8070,"categorySlugs":8071,"date":8072,"description":8073,"extension":538,"image":8074,"meta":8076,"navigation":542,"path":22,"schemaOrg":4854,"seo":8077,"stem":23,"__hash__":8080},"posts/3.blog/daisyui-artboard-component-for-vue-js.md",[7774],{"name":178,"to":179,"avatar":7775},{"src":181},{"label":5138},{"type":185,"value":7778,"toc":8059},[7779,7782,7785,7788,8057],[188,7780,21],{"id":7781},"daisyui-artboard-component-for-vuejs",[193,7783,7784],{},"Artboards are useful for when you need a fixed sized container to display something on your website. In this post we will look at how to create a daisyUI Artboard component for Vue.js.",[193,7786,7787],{},"The daisyUI docs are decent, and provide a good starting point for an artboard component. However they don't currently have an artboard component that we can copy and paste directly into a Vue.js. But we can do this ourselves. This guide is suitable for any Vue.js project, whether this is Laravel + Inertia.js + Vue.js, Nuxt or any other form of Vue.",[4875,7789,7791,7795,7804,7807,7811,7819,7888,7892,7900,7907,7910,7914,7919,7922,7926,7929,8017,8020,8022,8027,8050,8054],{"video-id":7790},"ASB5gES2P5M",[219,7792,7794],{"id":7793},"before-you-create-your-daisyui-artboard-component","Before you create your daisyUI artboard component",[193,7796,7797,7798,5165,7801,470],{},"Before we create our artboard component we need to make sure our project is set up to use daisyUI. We need to have TailwindCSS and daisyUI installed. Instructions on installing TailwindCSS can be found on ",[197,7799,5164],{"href":5162,"rel":7800},[317],[197,7802,5170],{"href":5168,"rel":7803},[317],[193,7805,7806],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI artboard component.",[188,7808,7810],{"id":7809},"create-daisyui-artboard-component-in-vue","Create daisyUI Artboard component in Vue",[193,7812,7813,7814,5185,7817,5188],{},"We can now create our artboard component. In your components folder, create a new file named ",[5182,7815,7816],{},"Artboard.vue",[5182,7818,7816],{},[5190,7820,7822],{"className":5192,"code":7821,"filename":7816,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n\n    \u003Cdiv class=\"artboard phone-1 artboard-demo\">\n        \u003Cslot >\u003C/slot>\n    \u003C/div>\n\n\u003C/template>\n",[5182,7823,7824,7832,7836,7855,7868,7876,7880],{"__ignoreMap":262},[3736,7825,7826,7828,7830],{"class":5199,"line":5200},[3736,7827,5204],{"class":5203},[3736,7829,273],{"class":5207},[3736,7831,5210],{"class":5203},[3736,7833,7834],{"class":5199,"line":514},[3736,7835,5215],{"emptyLinePlaceholder":542},[3736,7837,7838,7840,7842,7844,7846,7848,7851,7853],{"class":5199,"line":520},[3736,7839,5220],{"class":5203},[3736,7841,5223],{"class":5207},[3736,7843,5227],{"class":5226},[3736,7845,5230],{"class":5203},[3736,7847,5233],{"class":5203},[3736,7849,7850],{"class":5236},"artboard phone-1 artboard-demo",[3736,7852,5233],{"class":5203},[3736,7854,5210],{"class":5203},[3736,7856,7857,7859,7861,7864,7866],{"class":5199,"line":5244},[3736,7858,5247],{"class":5203},[3736,7860,5710],{"class":5207},[3736,7862,7863],{"class":5203}," >\u003C/",[3736,7865,5710],{"class":5207},[3736,7867,5210],{"class":5203},[3736,7869,7870,7872,7874],{"class":5199,"line":5265},[3736,7871,5305],{"class":5203},[3736,7873,5223],{"class":5207},[3736,7875,5210],{"class":5203},[3736,7877,7878],{"class":5199,"line":5292},[3736,7879,5215],{"emptyLinePlaceholder":542},[3736,7881,7882,7884,7886],{"class":5199,"line":5302},[3736,7883,5315],{"class":5203},[3736,7885,273],{"class":5207},[3736,7887,5210],{"class":5203},[219,7889,7891],{"id":7890},"different-daisyui-artboard-styles","Different daisyUI artboard styles",[193,7893,5395,7894,7899],{},[197,7895,7898],{"href":7896,"rel":7897},"https://daisyui.com/components/artboard/",[317],"different artboard components to choose from in the daisyUI docs",". As they are there to mimic a phone screen, they have different sizes available. Your best bet is to check them out for yourself and experiment with the sizes available.",[193,7901,7902,7903,7906],{},"You can also add a ",[5182,7904,7905],{},"artboard-horizontal"," class to display the artboard horizontally!",[193,7908,7909],{},"It doesn't matter which style you choose, the concept of converting it to a re-useable Vue.js component is the same. The example above is a 320×568 artboard that is vertical and has no background colour. The same result can be achieved using any of the artboards available on the daisyUI website.",[3849,7911,7913],{"id":7912},"artboardvue-code-explained","Artboard.vue code explained",[193,7915,337,7916,7918],{},[5182,7917,7816],{}," component is very simple. It has one slot. This slot allows you to add any content you like. Whether this is simple text or html elements. Pretty good.",[193,7920,7921],{},"The same result can be achieved by passing props. However in this case I think it makes sense to use slots.",[188,7923,7925],{"id":7924},"use-the-daisyui-artboard-component-in-your-parent-component","Use the daisyUI Artboard component in your parent component",[193,7927,7928],{},"Now we have created our artboard component, we can use it in other components. This is easy to do. See the example below:",[5190,7930,7932],{"className":5192,"code":7931,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CArtboard>\n            \u003Cdiv>\n                Some content in a div\n            \u003C/div>\n        \u003C/Artboard>\n    \u003C/div>\n\n\u003C/template>\n",[5182,7933,7934,7938,7946,7950,7958,7967,7975,7980,7989,7997,8005,8009],{"__ignoreMap":262},[3736,7935,7936],{"class":5199,"line":5200},[3736,7937,5434],{"class":5283},[3736,7939,7940,7942,7944],{"class":5199,"line":514},[3736,7941,5204],{"class":5203},[3736,7943,273],{"class":5207},[3736,7945,5210],{"class":5203},[3736,7947,7948],{"class":5199,"line":520},[3736,7949,5215],{"emptyLinePlaceholder":542},[3736,7951,7952,7954,7956],{"class":5199,"line":5244},[3736,7953,5220],{"class":5203},[3736,7955,5223],{"class":5207},[3736,7957,5210],{"class":5203},[3736,7959,7960,7962,7965],{"class":5199,"line":5265},[3736,7961,5247],{"class":5203},[3736,7963,7964],{"class":5207},"Artboard",[3736,7966,5210],{"class":5203},[3736,7968,7969,7971,7973],{"class":5199,"line":5292},[3736,7970,5268],{"class":5203},[3736,7972,5223],{"class":5207},[3736,7974,5210],{"class":5203},[3736,7976,7977],{"class":5199,"line":5302},[3736,7978,7979],{"class":5283},"                Some content in a div\n",[3736,7981,7982,7985,7987],{"class":5199,"line":5312},[3736,7983,7984],{"class":5203},"            \u003C/",[3736,7986,5223],{"class":5207},[3736,7988,5210],{"class":5203},[3736,7990,7991,7993,7995],{"class":5199,"line":5322},[3736,7992,5295],{"class":5203},[3736,7994,7964],{"class":5207},[3736,7996,5210],{"class":5203},[3736,7998,7999,8001,8003],{"class":5199,"line":5327},[3736,8000,5305],{"class":5203},[3736,8002,5223],{"class":5207},[3736,8004,5210],{"class":5203},[3736,8006,8007],{"class":5199,"line":5340},[3736,8008,5215],{"emptyLinePlaceholder":542},[3736,8010,8011,8013,8015],{"class":5199,"line":5361},[3736,8012,5315],{"class":5203},[3736,8014,273],{"class":5207},[3736,8016,5210],{"class":5203},[193,8018,8019],{},"I am using Nuxt in this example. I therefore do not need to import the Artboard.vue component. If you are not using Nuxt, you will almost certainly need to import the Artboard.vue component into your parent component.",[3849,8021,5553],{"id":5552},[193,8023,5556,8024,8026],{},[5182,8025,7816],{}," component. The content between the Artboard tags is outputted in the slot withing the artboard component. As mentioned previously. This content can be plain text or html. And the same result can be achieved using props.",[258,8028,8029,8035,8039,8044],{"orientation":261,"variant":263},[193,8030,8031],{},[265,8032],{"alt":8033,"className":8034,"src":5568},"What? daisyUI has templates!",[269,270],[273,8036,8037],{"v-slot:title":262},[193,8038,8033],{},[273,8040,8041],{"v-slot:description":262},[193,8042,8043],{},"So I was just browsing the daisyUI website and realised they have pre-made templates you can buy. Check them out if you want",[273,8045,8046],{"v-slot:links":262},[286,8047,8048],{"size":288,"target":262,"to":5582,"variant":292},[193,8049,5585],{},[219,8051,8053],{"id":8052},"why-should-we-make-our-artboard-components-re-useable-in-vue","Why should we make our Artboard components re-useable in Vue?",[193,8055,8056],{},"By making our Artboard component re-useable we save a lot of time. This is because we only have one version of the component to maintain. We can reuse the component as many times as we want. And just pass in the data we want to display each time! This means that if we want to change the styling of our Artboard component, we only need to do this once! Rather than changing it in loads of different components.",[5594,8058,5887],{},{"title":262,"searchDepth":514,"depth":514,"links":8060},[8061,8064,8067],{"id":7781,"depth":514,"text":21,"children":8062},[8063],{"id":7793,"depth":520,"text":7794},{"id":7809,"depth":514,"text":7810,"children":8065},[8066],{"id":7890,"depth":520,"text":7891},{"id":7924,"depth":514,"text":7925,"children":8068},[8069],{"id":8052,"depth":520,"text":8053},[5609,5610],[5612,5613],"2024-04-05T00:00:00.000Z","How to create a re-useable Alert component for your Vue.js projects using daisyUI.",{"src":8075},"/images/wp/featured-daisyui-artboard-component-for-vue-jsdaisyUI-artboard-vuejs-thumbnail.webp",{},{"title":8078,"description":8079,"ogTitle":8078,"ogDescription":8079,"twitterCard":576},"daisyUI Artboard Component for Vue.js - [30 SECOND SETUP]","Create a re-useable Artboard component for Vue.js using daisyUI. Simple example with code. 30 second easy setup. Copy and paste example.","SnR57vaacKfbqtkU-EqOXBAZ0JxPTcXDFITowZkJ7bk",{"id":8082,"title":29,"archived":175,"authors":8083,"badge":8086,"body":8087,"categories":8357,"categorySlugs":8358,"date":8072,"description":8359,"extension":538,"image":8360,"meta":8362,"navigation":542,"path":30,"schemaOrg":4854,"seo":8363,"stem":31,"__hash__":8366},"posts/3.blog/daisyui-badge-component-for-vue-js.md",[8084],{"name":178,"to":179,"avatar":8085},{"src":181},{"label":5138},{"type":185,"value":8088,"toc":8346},[8089,8092,8095,8098,8344],[188,8090,29],{"id":8091},"daisyui-badge-component-for-vuejs",[193,8093,8094],{},"Badges are useful for letting your website users know the status of data. For example you might want to let advertisers know if their advert is live, expired, pending approval etc. In this post we will look at how to create a daisyUI Badge component for Vue.js.",[193,8096,8097],{},"The daisyUI docs are very good. They give a solid starting point for a badge component. Unfortunately, at this point in time they don't have a badge component that we can copy and paste straight into a Vue.js project. Luckily we can do this ourselves! This guide is suitable for any Vue.js project, whether this is a standard Vue.js project, Laravel + Inertia.js + Vue.js, Nuxt or any other form of Vue.",[4875,8099,8101,8105,8114,8117,8121,8130,8198,8202,8211,8214,8218,8223,8226,8230,8233,8304,8307,8309,8314,8337,8341],{"video-id":8100},"6hqM-C6osUQ",[219,8102,8104],{"id":8103},"before-you-create-your-daisyui-badge-component","Before you create your daisyUI badge component",[193,8106,8107,8108,5165,8111,470],{},"Before we create our badge component we need to make sure our project is set up to use daisyUI. We must have both TailwindCSS and daisyUI installed. Instructions on installing TailwindCSS can be found on ",[197,8109,5164],{"href":5162,"rel":8110},[317],[197,8112,5170],{"href":5168,"rel":8113},[317],[193,8115,8116],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI badge component.",[188,8118,8120],{"id":8119},"create-daisyui-badge-component-in-vue","Create daisyUI Badge component in Vue",[193,8122,8123,8124,8127,8128,5188],{},"We can now create our badge component. In your components folder, create a new file named ",[5182,8125,8126],{},"BadgePrimary.vue",". I recommend creating a separate component for each button type you wish to use. It is possible to have just one Button component and load classes conditionally but from experience, just trust me. It is not worth doing this. Paste the code below into your newly created ",[5182,8129,8126],{},[5190,8131,8133],{"className":5192,"code":8132,"filename":8126,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n\n    \u003Cdiv class=\"badge badge-primary badge-outline\">\n        \u003Cslot >\u003C/slot>\n    \u003C/div>\n\n\u003C/template>\n",[5182,8134,8135,8143,8147,8166,8178,8186,8190],{"__ignoreMap":262},[3736,8136,8137,8139,8141],{"class":5199,"line":5200},[3736,8138,5204],{"class":5203},[3736,8140,273],{"class":5207},[3736,8142,5210],{"class":5203},[3736,8144,8145],{"class":5199,"line":514},[3736,8146,5215],{"emptyLinePlaceholder":542},[3736,8148,8149,8151,8153,8155,8157,8159,8162,8164],{"class":5199,"line":520},[3736,8150,5220],{"class":5203},[3736,8152,5223],{"class":5207},[3736,8154,5227],{"class":5226},[3736,8156,5230],{"class":5203},[3736,8158,5233],{"class":5203},[3736,8160,8161],{"class":5236},"badge badge-primary badge-outline",[3736,8163,5233],{"class":5203},[3736,8165,5210],{"class":5203},[3736,8167,8168,8170,8172,8174,8176],{"class":5199,"line":5244},[3736,8169,5247],{"class":5203},[3736,8171,5710],{"class":5207},[3736,8173,7863],{"class":5203},[3736,8175,5710],{"class":5207},[3736,8177,5210],{"class":5203},[3736,8179,8180,8182,8184],{"class":5199,"line":5265},[3736,8181,5305],{"class":5203},[3736,8183,5223],{"class":5207},[3736,8185,5210],{"class":5203},[3736,8187,8188],{"class":5199,"line":5292},[3736,8189,5215],{"emptyLinePlaceholder":542},[3736,8191,8192,8194,8196],{"class":5199,"line":5302},[3736,8193,5315],{"class":5203},[3736,8195,273],{"class":5207},[3736,8197,5210],{"class":5203},[219,8199,8201],{"id":8200},"different-daisyui-badge-styles","Different daisyUI badge styles",[193,8203,8204,8205,8210],{},"There are LOTS of ",[197,8206,8209],{"href":8207,"rel":8208},"https://daisyui.com/components/badge/",[317],"different badge components to choose from in the daisyUI docs",". There are badges with brand colours, badges with outlines, badges in buttons the list goes on. Create a component for each of the badge styles you want to have. And name them appropriately so it is obvious what they look like from the name.",[193,8212,8213],{},"The concept of converting any of the badges in the daisyUI docs itto a re-useable Vue.js component is the same. The example above is for a badge with the primary brand colour and an outline.",[3849,8215,8217],{"id":8216},"badgeprimaryvue-code-explained","BadgePrimary.vue code explained",[193,8219,337,8220,8222],{},[5182,8221,8126],{}," component is very simple. It has one slot. This slot allows you to add any text you like to the badge.",[193,8224,8225],{},"The same result can be achieved by passing a prop. However in this case I think it makes sense to use a slot.",[188,8227,8229],{"id":8228},"use-the-daisyui-badge-component-in-your-parent-component","Use the daisyUI Badge component in your parent component",[193,8231,8232],{},"Now we have created our badge component, we can use it in other components. This is easy to do. See the example below:",[5190,8234,8236],{"className":5192,"code":8235,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CBadgePrimary>\n            Some status\n        \u003C/BadgePrimary>\n    \u003C/div>\n\n\u003C/template>\n",[5182,8237,8238,8242,8250,8254,8262,8271,8276,8284,8292,8296],{"__ignoreMap":262},[3736,8239,8240],{"class":5199,"line":5200},[3736,8241,5434],{"class":5283},[3736,8243,8244,8246,8248],{"class":5199,"line":514},[3736,8245,5204],{"class":5203},[3736,8247,273],{"class":5207},[3736,8249,5210],{"class":5203},[3736,8251,8252],{"class":5199,"line":520},[3736,8253,5215],{"emptyLinePlaceholder":542},[3736,8255,8256,8258,8260],{"class":5199,"line":5244},[3736,8257,5220],{"class":5203},[3736,8259,5223],{"class":5207},[3736,8261,5210],{"class":5203},[3736,8263,8264,8266,8269],{"class":5199,"line":5265},[3736,8265,5247],{"class":5203},[3736,8267,8268],{"class":5207},"BadgePrimary",[3736,8270,5210],{"class":5203},[3736,8272,8273],{"class":5199,"line":5292},[3736,8274,8275],{"class":5283},"            Some status\n",[3736,8277,8278,8280,8282],{"class":5199,"line":5302},[3736,8279,5295],{"class":5203},[3736,8281,8268],{"class":5207},[3736,8283,5210],{"class":5203},[3736,8285,8286,8288,8290],{"class":5199,"line":5312},[3736,8287,5305],{"class":5203},[3736,8289,5223],{"class":5207},[3736,8291,5210],{"class":5203},[3736,8293,8294],{"class":5199,"line":5322},[3736,8295,5215],{"emptyLinePlaceholder":542},[3736,8297,8298,8300,8302],{"class":5199,"line":5327},[3736,8299,5315],{"class":5203},[3736,8301,273],{"class":5207},[3736,8303,5210],{"class":5203},[193,8305,8306],{},"I am using Nuxt in this example. I therefore do not need to import the BadgePrimary.vue component. If you are not using Nuxt, you will almost certainly need to import the BadgePrimary.vue component into your parent component.",[3849,8308,5553],{"id":5552},[193,8310,5556,8311,8313],{},[5182,8312,8126],{}," component. The content between the BadgePrimary tags is outputted in the slot in the badge component. As mentioned previously the same result can be achieved using props.",[258,8315,8316,8322,8326,8331],{"orientation":261,"variant":263},[193,8317,8318],{},[265,8319],{"alt":8320,"className":8321,"src":5568},"Premium templates for daisyUI",[269,270],[273,8323,8324],{"v-slot:title":262},[193,8325,8320],{},[273,8327,8328],{"v-slot:description":262},[193,8329,8330],{},"You can now purchase pre-made templates from daisyUI! Feel free to check them out for yourself",[273,8332,8333],{"v-slot:links":262},[286,8334,8335],{"size":288,"target":262,"to":5582,"variant":292},[193,8336,5585],{},[219,8338,8340],{"id":8339},"why-should-we-make-our-badge-components-re-useable-in-vue","Why should we make our Badge components re-useable in Vue?",[193,8342,8343],{},"By making our Badge components re-useable we save a lot of time. This is because we only have one version of the specific component to maintain. We can reuse the component as many times as we want. And just pass in the data we want to display each time! This means that if we want to change the styling of our Badge component, we only need to do this once! This is great, because say we wanted to increase the padding slightly, we only need to do this in one place rather than trawling through hundreds of components!",[5594,8345,5887],{},{"title":262,"searchDepth":514,"depth":514,"links":8347},[8348,8351,8354],{"id":8091,"depth":514,"text":29,"children":8349},[8350],{"id":8103,"depth":520,"text":8104},{"id":8119,"depth":514,"text":8120,"children":8352},[8353],{"id":8200,"depth":520,"text":8201},{"id":8228,"depth":514,"text":8229,"children":8355},[8356],{"id":8339,"depth":520,"text":8340},[5609,5610],[5612,5613],"How to create a re-useable Badge component for your Vue.js projects using daisyUI.",{"src":8361},"/images/wp/featured-daisyui-badge-component-for-vue-jsdaisyUI-badge-vuejs-thumbnail.webp",{},{"title":8364,"description":8365,"ogTitle":8364,"ogDescription":8365,"twitterCard":576},"daisyUI Badge Component for Vue.js - [45 SECOND SETUP]","Create a re-useable Badge component for Vue.js using daisyUI. Easy example with code. 45 second easy setup. Copy and paste example.","1nqlPg7p-fQ8HohYyTqgJ6_65JBUjbEu_sCFLJLOa4I",{"id":8368,"title":97,"archived":542,"authors":8369,"badge":8372,"body":8373,"categories":8738,"categorySlugs":8739,"date":8740,"description":8741,"extension":538,"image":8742,"meta":8744,"navigation":542,"path":98,"schemaOrg":4854,"seo":8745,"stem":99,"__hash__":8748},"posts/3.blog/replyguy-an-idiots-first-impression.md",[8370],{"name":178,"to":179,"avatar":8371},{"src":181},{"label":4353},{"type":185,"value":8374,"toc":8721},[8375,8379,8382,8385],[188,8376,8378],{"id":8377},"replyguy-an-idiots-first-impression","ReplyGuy - an idiots first impression",[193,8380,8381],{},"ReplyGuy is \"The AI That Plugs Your Product on Reddit and Twitter\". Now I know what you're thinking. What on earth is that all about? Well, luckily for you I have given it a go so you can see what it's all about.",[193,8383,8384],{},"In this article we will take a look at what it does. Whether it is any good. If you should try it for yourself. And loads of other stuff. There will probably be some waffling too. So I invite you on an adventure. Where we will take a look at ReplyGuy together. There will be laughter, tears and everything in between. So join me...",[4875,8386,8388,8392,8395,8399,8402,8405,8431,8435,8443,8447,8451,8454,8458,8461,8472,8475,8479,8482,8485,8488,8491,8495,8498,8501,8505,8508,8511,8515,8518,8522,8525,8560,8563,8567,8570,8573,8576,8580,8583,8586,8589,8593,8600,8603,8607,8614,8618,8621,8650,8654,8661,8701,8707,8711,8714],{"video-id":8387},"hlhFO6ybOOQ",[188,8389,8391],{"id":8390},"what-is-replyguy","What is ReplyGuy",[193,8393,8394],{},"In their own words, ReplyGuy is \"The AI That Plugs Your Product on Reddit and Twitter\". Sounds interesting, right? Well it is. Although the description provided by ReplyGuy does a good job of explaining exactly what it is. I will dumb it down for you.",[219,8396,8398],{"id":8397},"explaining-what-replyguy-does-to-a-5-year-old","Explaining what ReplyGuy does to a 5 year old",[193,8400,8401],{},"ReplyGuy will reply to Reddit, Twitter (X) and LinkedIn posts on your behalf. When someone posts something on one of these platforms. Something that is relevant to the problem your product solves. ReplyGuy will reply to the post with some info and will also mention your product. Pretty decent.",[193,8403,8404],{},"The responses are generated using ai. And believe it or not, they actually sound like a human wrote them. I was sceptical before trying this out. As I have used chat GPT and it's not always the best. However ReplyGuy seems to somehow nail this down and make it seem completely legitimate. So well done to them on that.",[258,8406,8407,8414,8418,8423],{"orientation":261,"variant":263},[193,8408,8409],{},[265,8410],{"alt":8411,"className":8412,"src":8413},"Get a free trial",[269,270],"/images/wp/cta-Screenshot-2024-04-04-at-18.34.46.webp",[273,8415,8416],{"v-slot:title":262},[193,8417,8411],{},[273,8419,8420],{"v-slot:description":262},[193,8421,8422],{},"Try ReplyGuy for yourself for FREE! You have nothing to lose",[273,8424,8425],{"v-slot:links":262},[286,8426,8428],{"size":288,"target":262,"to":8427,"variant":292},"/go/replyguy",[193,8429,8430],{},"Try For Free",[188,8432,8434],{"id":8433},"my-experience-with-replyguy","My experience with ReplyGuy",[193,8436,8437,8438,8442],{},"I came across ReplyGuy completely randomly. I was browsing Twitter (give me a follow if you want) and happened to see a post by the creator. The concept peaked my interest so I had to give it a go for myself. If you like new, and innovative technology - you will enjoy using ReplyGuy. I gave it a go to see what all the fuss if about. And it's safe to say I was not disappointed. Feel free to ",[197,8439,8441],{"href":8440},"#video","watch my video above"," if you don't fancy reading.",[219,8444,8446],{"id":8445},"getting-started-with-replyguy","Getting started with ReplyGuy",[3849,8448,8450],{"id":8449},"the-signup-process","The signup process",[193,8452,8453],{},"Getting started with ReplyGuy was ridiculously easy. Even the signup process was easier than most. You don't even need to create a password. Simply enter your email address and they will send you an email to login. Nice.",[3849,8455,8457],{"id":8456},"your-productbrand","Your product/brand",[193,8459,8460],{},"Once you have signed up, you need to tell ReplyGuy about your product/brand. The first thing you do is fill out three simple inputs.",[1352,8462,8463,8466,8469],{},[464,8464,8465],{},"Brand Name\nPretty self explanatory, but the name of your brand which you want ReplyGuy to plug.",[464,8467,8468],{},"URL\nThe URL for your product (you can select in settings if you want ReplyGuy to use just the URL, the URL and brand name, or just the brand name).",[464,8470,8471],{},"Product Description (just a short one)\nReplyGuy uses this product description to generate keyword ideas for you. And I'm guessing it also uses this description to craft replies. Not sure though as I didn't build it!",[193,8473,8474],{},"It's important that you fill out the description accurately so that ReplyGuy knows what it is that your product does. This is kinda obvious but worth mentioning. I know that when I'm feeling lazy I just fill out text inputs with \"qwerty\", so definitely worth mentioning. And obviously don't write \"qwerty\". Unless you sell keyboards...",[3849,8476,8478],{"id":8477},"keywords","Keywords",[193,8480,8481],{},"from my experience, this is the most important part. And this is the key component in getting the most out of ReplyGuy. I suggest you spend time thinking carefully about your keywords. As these are the words that ReplyGuy is going to search for. And it is the posts containing these keywords that ReplyGuy is going to reply to.",[193,8483,8484],{},"So when you get onto the Keywords page, ReplyGuy is going to generate some keywords for you. These keywords are generated by ai and are based on your brand / product description. In my case it produced very broad suggestions. I made the mistake of using these broad, auto generated keywords. And the results were that I was seeing posts that weren't necessarily relevant to my product.",[193,8486,8487],{},"An example of some of these keyword suggestions were; \"API\" and \"radius\". As you can imagine, people mention these 2 words on Reddit A LOT. And guess what, the chances of my product being relevant to any of those mentions is slim to none. I would have been better off using keywords such as \"service area API\" and \"service area radius\". However there is a fine balance between being too unspecific and therefore generating too many irrelevant results. And too specific and generating zero results.",[193,8489,8490],{},"Finding that balance will take some trial and error. But the autogenerated ai keywords should be seen more as a starting point. And used to expand upon rather than be the keywords you should stick with. Of course, much of this will come down to your specific situation!",[3849,8492,8494],{"id":8493},"youre-good-to-go","You're good to go",[193,8496,8497],{},"Once you have entered you product / brand info and keywords, ReplyGuy will start doing its thing. It's actually scary how easy it is to get started. Once you save your keywords you will automatically be taken to the mentions page. You will likely see a banner saying that ReplyGuy is searching for your keywords and that your mentions will be viewable within 2 minutes.",[193,8499,8500],{},"Give it a chance to do this and then refresh the page. You should now see posts where your keywords are mentioned! By this point you should be seeing the amazing potential you have just unlocked for your product. But there are certain things you can do to get the best results possible...",[219,8502,8504],{"id":8503},"getting-the-most-out-of-replyguy-based-on-my-experience","Getting the most out of ReplyGuy based on my experience",[193,8506,8507],{},"From my initial experience with ReplyGuy, I can see that it has huge potential to create amazing growth for my digital products. But after setting it up I realised there were certain things I could do to get the most out of it. I didn't utilise these options when I set up my trial, but had I, the results would have been incredible.",[193,8509,8510],{},"Let's take a look at the settings you need to use in order to get the best results from ReplyGuy.",[3849,8512,8514],{"id":8513},"negative-keywords","Negative keywords",[193,8516,8517],{},"Many of the problems I faced when setting up could have been reduced had I used the negative keywords. Negative keywords allow you to exclude posts containing such keywords. As this is my initial impression of ReplyGuy, I have not had a chance to delve into this in great depth yet. But don't worry, I will do this. And once I have I will update this post with my findings.",[3849,8519,8521],{"id":8520},"settings","Settings",[193,8523,8524],{},"Settings sounds boring. However when I clicked on the settings tab I was excited. The control you have over the responses that ReplyGuy sends is actually really good. But at the same time you are not overwhelmed with 100 different options. You have the option to manage:",[461,8526,8527,8533,8539,8542,8548,8554],{},[464,8528,8529,8530,8532],{},"Auto replies",[5038,8531],{},"\nToggle auto replies on and off. When auto replies are off you can manually select the mentions that you wish to reply to. You can also edit the ai generated responses before sending.",[464,8534,8535,8536,8538],{},"How your product is mentioned",[5038,8537],{},"\nYou can select if you want ReplyGuy to mention your brand name only, the brand name and URL or just the URL only. They recommend you only mention the brand name as this seems for natural. People can then search for your brand and find you that way.",[464,8540,8541],{},"Relevance of mentions\nYou can select if ReplyGuy posts replies on mentions that have a high specificity to your product or medium-high specificity. Selecting high relevance will mean ReplyGuy posts less replies than if medium-high relevance is selected. This makes sense as it is an option for how targeted you want the responses to be.",[464,8543,8544,8545,8547],{},"Daily auto reply limit",[5038,8546],{},"\nSelf explanatory, but if you want to limit the number of auto replies that ReplyGuy sends in a day, this is where you do it.",[464,8549,8550,8551,8553],{},"Optional hints (additional) for auto replies",[5038,8552],{},"\nIt's probably worth filling this out to get the best results.",[464,8555,8556,8557,8559],{},"Report notifications",[5038,8558],{},"\nHere you can select how regularly you receive a report on the replies ReplyGuy has been sending.",[193,8561,8562],{},"The options you select here will be down to your specific requirements. However I would recommend filling out the optional hints text input with relevant information about your product. If you want complete control over the replies that are sent, then its worth trning off auto replies. And instead checking the mentions yourself and editing the responses before sending them. This is obviously bypassing one of the main features of ReplyGuy, but it will help you build trust in the tool before you let it have control.",[219,8564,8566],{"id":8565},"learn-from-my-mistakes","Learn from my mistakes",[193,8568,8569],{},"Now, I will create a full setup guide for ReplyGuy so you can get the most out of it. But until then I will give you some key information that will help you get started. The better the setup of your ReplyGuy account, the better results you will get. What do I mean by this?",[193,8571,8572],{},"Well, when you enter your product details. ReplyGuy will use ai to suggest keywords to use. While this is helpful, I recommend you use them as inspiration rather than blindly plugging them in. This advice is specific to your situation. But make the keywords specific to your product. In my case, the keywords were relevant to my product. However they were too broad. This meant that the Reddit posts being displayed to me were not specific enough to my product.",[193,8574,8575],{},"There is a fine balance between being too broad - and therefore getting irrelevant results. And being too specific - and getting no results. My advice would be to take a bit of time and test out keywords to find this balance.",[188,8577,8579],{"id":8578},"should-i-use-replyguy","Should I use ReplyGuy?",[193,8581,8582],{},"If you are reading this article, the chances are you should be using ReplyGuy. If you have a digital product that you want to be promoted online. Then you could benefit from using ReplyGuy.",[193,8584,8585],{},"Imagine you had a digital product like I do that solves a specific problem. In my case, the problem is a problem faced by service based businesses that operate in a specific area. The problem is wasting time dealing with web enquiries from customers that are out of the business area. The solution is a digital product that filters out these enquiries.",[193,8587,8588],{},"Now manually trawling through Reddit, Twitter (X) and LinkedIn each day to see if anyone has posted about experiencing this problem is time consuming. Not only is the searching part time consuming, but the replying element is also time consuming. You have to find the posts and construct a reply. ReplyGuy does this for you on autopilot, and is working for you 24 hours a day! It's like having another member of staff, that is working on your marketing team 24 hours a day 7 days a week.",[188,8590,8592],{"id":8591},"who-is-replyguy-suitable-for","Who is ReplyGuy suitable for?",[193,8594,8595,8596,8599],{},"ReplyGuy is suitable for anyone with a digital product. If people are posting about the problem that your product solves, then it is 100% for you. The good news is you can ",[197,8597,8598],{"href":8427},"test it out for free",". This will allow you to see for yourself how effective it can be for your use case.",[193,8601,8602],{},"Whilst it is clear that ReplyGuy has been built with digital products in mind. I believe that you could use it to promote other things. For example, if you had an educational YouTube channel. ReplyGuy could be a great choice for promoting it. Similarly if you have a blog or online course it could also be great for promoting those too. And even if you have an e-commerce store, it could be great for promoting this too.",[188,8604,8606],{"id":8605},"who-shouldnt-use-replyguy","Who shouldn't use ReplyGuy",[193,8608,8609,8610,8613],{},"There is a chance that ReplyGuy isn't suitable for your needs. It has been created with digital products in mind. And I can see how using it for such products is probably the most effective use case. The best way to decide if ReplyGuy is right for your use case is to take advantage of their ",[197,8611,8612],{"href":8427},"free trial",". This way you can find out for yourself with zero risk.",[188,8615,8617],{"id":8616},"main-reasons-why-you-should-be-using-replyguy","Main reasons why you should be using ReplyGuy",[193,8619,8620],{},"There are numerous reasons why you should be using ReplyGuy for your business. But there are a few key reasons that make it an absolute no brainer. Let's take a look.",[1352,8622,8623,8633,8643],{},[464,8624,8625,8629,8630,8632],{},[219,8626,8628],{"id":8627},"save-time","Save time","Imagine dedicating a portion of your day. Every day. To logging into Reddit, Twitter (X) and LinkedIn. Now imagine the process of searching on each of these platforms for keywords related to your product. Then imagine sifting through each of the results, reading each one. Analysing if any of them are related to your product. Eventually finding one that is relevant. Then forming a response and sending it.",[5038,8631],{},"I'm tired just writing about that. The point is that this is a time consuming and tiring process. Leaving this to a human is inefficient and a waste of time. ReplyGuy is doing this for you whilst you are asleep. Let that sink in.",[464,8634,8635,8639,8640,8642],{},[219,8636,8638],{"id":8637},"increase-awareness-of-your-product","Increase awareness of your product","By posting about your product on Reddit, Twitter (X) and LinkedIn. ReplyGuy leaves markers for future users to find your product. Even if you used ReplyGuy for a short amount of time. These replies will be around on the internet forever (as long as the original poster doesn't delete their post).",[5038,8641],{},"These serve as lasting signposts for your brand.",[464,8644,8645,8649],{},[219,8646,8648],{"id":8647},"grow-your-business","Grow your business","The result of using ReplyGuy should be a growth in your business. Had you not implemented such a piece of software you would not have anywhere near the same amount of mentions of your product online. Every time someone sees one of these mentions, there is a chance they are going to Google your product, visit your website and convert into a paying customer.",[188,8651,8653],{"id":8652},"how-much-does-replyguy-cost-to-use","How much does ReplyGuy cost to use?",[193,8655,8656,8657,8660],{},"You can check out the ",[197,8658,8659],{"href":8427},"up to date pricing here",". But at the time of writing, the price of ReplyGuy is:",[461,8662,8663,8671,8680,8686,8692],{},[464,8664,2622,8665,8667,8668,8670],{},[5038,8666],{},"\n$0/ month",[5038,8669],{},"\n$0/ year",[464,8672,8673,8674,8676,8677,8679],{},"Small",[5038,8675],{},"\n$10/ month",[5038,8678],{},"\n$79/ year",[464,8681,8682,8683,8685],{},"Pro\n$49/ month",[5038,8684],{},"\n$349/ year",[464,8687,8688,8689,8691],{},"Business\n$99/ month",[5038,8690],{},"\n$699/ year",[464,8693,8694,8695,8697,8698,8700],{},"Enterprise",[5038,8696],{},"\n$199/ month",[5038,8699],{},"\n$1399/ year",[193,8702,8703,8704,470],{},"The difference between the plans is the number of keywords, replies and projects that you can use each month. You can check out how they differ on the ",[197,8705,8706],{"href":8427},"ReplyGuy website",[188,8708,8710],{"id":8709},"is-replyguy-worth-it","Is ReplyGuy worth it?",[193,8712,8713],{},"ReplyGuy is 100% worth the money. Think about it. It's like having a staff member working for you 24/7. That's just ridiculous. Not only that. This staff member is working for a minute fraction of the cost that an actual staff member would. So to say that it's worth the money is an understatement. Even if the price increased 10 fold, it would still be great value for money.",[193,8715,8716,8717,8720],{},"But don't take my word for it ",[197,8718,8719],{"href":8427},"try it out for yourself"," with a free trial. If you find it useful, which I'm sure you will. Then carry on using it. If you don't, which I doubt. Then you have not spent a penny finding this out 🙂.",{"title":262,"searchDepth":514,"depth":514,"links":8722},[8723,8724,8727,8732,8733,8734,8735,8736,8737],{"id":8377,"depth":514,"text":8378},{"id":8390,"depth":514,"text":8391,"children":8725},[8726],{"id":8397,"depth":520,"text":8398},{"id":8433,"depth":514,"text":8434,"children":8728},[8729,8730,8731],{"id":8445,"depth":520,"text":8446},{"id":8503,"depth":520,"text":8504},{"id":8565,"depth":520,"text":8566},{"id":8578,"depth":514,"text":8579},{"id":8591,"depth":514,"text":8592},{"id":8605,"depth":514,"text":8606},{"id":8616,"depth":514,"text":8617},{"id":8652,"depth":514,"text":8653},{"id":8709,"depth":514,"text":8710},[4353],[4355],"2024-04-04T00:00:00.000Z","Are you looking for a way to automate your marketing efforts? Do you like new, and innovative technology? Well, maybe you will enjoy using ReplyGuy. I gave it a go to see what all the fuss if about",{"src":8743},"/images/wp/featured-replyguy-an-idiots-first-impressionReplyGuy-idiots-first-impression-thumbnail.webp",{},{"title":8746,"description":8747,"ogTitle":8746,"ogDescription":8747,"twitterCard":576},"ReplyGuy an idiots first impression - [MORON PROOF]","My first impression of ReplyGuy. Easy 2 minute setup. Get the most out of ReplyGuy. A guide for idiots... by an idiot.","4YkaeSLQmQGrZddl7JE3_EHBHKP1V8FwI0s2DNPZYEk",{"id":8750,"title":13,"archived":175,"authors":8751,"badge":8754,"body":8755,"categories":9374,"categorySlugs":9375,"date":9376,"description":9377,"extension":538,"image":9378,"meta":9380,"navigation":542,"path":14,"schemaOrg":4854,"seo":9381,"stem":15,"__hash__":9384},"posts/3.blog/daisyui-accordion-component-for-vue-js.md",[8752],{"name":178,"to":179,"avatar":8753},{"src":181},{"label":5138},{"type":185,"value":8756,"toc":9363},[8757,8760,8763,9360],[188,8758,13],{"id":8759},"daisyui-accordion-component-for-vuejs",[193,8761,8762],{},"In this post we will look at how to create a daisyUI Accordion Component for Vue.js. The daisyUI docs are great. They provide a great starting point for an accordion component. However they do not currently have an accordion component that we can copy and paste directly into a Vue.js project. Luckily this is easy to do ourself. This guide is suitible for any Vue.js project, whether this is Nuxt, Laravel + Inertia.js + Vue.js or anything else using Vue.",[4875,8764,8766,8770,8779,8782,8786,8794,9069,9073,9081,9085,9097,9101,9104,9331,9334,9336,9350,9354],{"video-id":8765},"pFgJIb6iRMo",[219,8767,8769],{"id":8768},"before-you-create-your-daisyui-accordion-component","Before you create your daisyUI accordion component",[193,8771,8772,8773,5165,8776,470],{},"Before we create our component we need to make sure our project is set up so we can use daisyUI. We need to have installed TailwindCSS and daisyUI. Instructions on installing Tailwind can be found on ",[197,8774,5164],{"href":5162,"rel":8775},[317],[197,8777,5170],{"href":5168,"rel":8778},[317],[193,8780,8781],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI accordion component.",[188,8783,8785],{"id":8784},"create-daisyui-accordion-component-in-vue","Create daisyUI Accordion component in Vue",[193,8787,8788,8789,5185,8792,5188],{},"We can now create our accordion component. In your components folder, create a new file named ",[5182,8790,8791],{},"Accordion.vue",[5182,8793,8791],{},[5190,8795,8797],{"className":5192,"code":8796,"filename":8791,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n\n    \u003Ctemplate v-for=\"data in accordion_data\">\n        \u003Cdiv class=\"collapse collapse-arrow bg-base-200\">\n            \u003Cinput type=\"radio\" name=\"my-accordion-2\" />\n            \u003Cdiv class=\"collapse-title text-xl font-medium\">\n                {{ data.title }}\n            \u003C/div>\n            \u003Cdiv class=\"collapse-content\"> \n                \u003Cp>{{ data.content }}\u003C/p>\n            \u003C/div>\n        \u003C/div>\n    \u003C/template>\n\n\u003C/template>\n\n\u003Cscript setup>\n\nconst props = defineProps({\n    accordion_data: Array\n})\n\u003C/script>\n",[5182,8798,8799,8807,8811,8837,8856,8887,8906,8922,8930,8953,8977,8985,8993,9001,9005,9013,9017,9027,9031,9045,9055,9061],{"__ignoreMap":262},[3736,8800,8801,8803,8805],{"class":5199,"line":5200},[3736,8802,5204],{"class":5203},[3736,8804,273],{"class":5207},[3736,8806,5210],{"class":5203},[3736,8808,8809],{"class":5199,"line":514},[3736,8810,5215],{"emptyLinePlaceholder":542},[3736,8812,8813,8815,8817,8820,8822,8824,8827,8830,8833,8835],{"class":5199,"line":520},[3736,8814,5220],{"class":5203},[3736,8816,273],{"class":5207},[3736,8818,8819],{"class":5518}," v-for",[3736,8821,5230],{"class":5203},[3736,8823,5233],{"class":5203},[3736,8825,8826],{"class":5283},"data ",[3736,8828,8829],{"class":5203},"in",[3736,8831,8832],{"class":5283}," accordion_data",[3736,8834,5233],{"class":5203},[3736,8836,5210],{"class":5203},[3736,8838,8839,8841,8843,8845,8847,8849,8852,8854],{"class":5199,"line":5244},[3736,8840,5247],{"class":5203},[3736,8842,5223],{"class":5207},[3736,8844,5227],{"class":5226},[3736,8846,5230],{"class":5203},[3736,8848,5233],{"class":5203},[3736,8850,8851],{"class":5236},"collapse collapse-arrow bg-base-200",[3736,8853,5233],{"class":5203},[3736,8855,5210],{"class":5203},[3736,8857,8858,8860,8862,8864,8866,8868,8871,8873,8876,8878,8880,8883,8885],{"class":5199,"line":5265},[3736,8859,5268],{"class":5203},[3736,8861,5979],{"class":5207},[3736,8863,5994],{"class":5226},[3736,8865,5230],{"class":5203},[3736,8867,5233],{"class":5203},[3736,8869,8870],{"class":5236},"radio",[3736,8872,5233],{"class":5203},[3736,8874,8875],{"class":5226}," name",[3736,8877,5230],{"class":5203},[3736,8879,5233],{"class":5203},[3736,8881,8882],{"class":5236},"my-accordion-2",[3736,8884,5233],{"class":5203},[3736,8886,5289],{"class":5203},[3736,8888,8889,8891,8893,8895,8897,8899,8902,8904],{"class":5199,"line":5292},[3736,8890,5268],{"class":5203},[3736,8892,5223],{"class":5207},[3736,8894,5227],{"class":5226},[3736,8896,5230],{"class":5203},[3736,8898,5233],{"class":5203},[3736,8900,8901],{"class":5236},"collapse-title text-xl font-medium",[3736,8903,5233],{"class":5203},[3736,8905,5210],{"class":5203},[3736,8907,8908,8911,8914,8916,8919],{"class":5199,"line":5302},[3736,8909,8910],{"class":5203},"                {{",[3736,8912,8913],{"class":5283}," data",[3736,8915,470],{"class":5203},[3736,8917,8918],{"class":5283},"title ",[3736,8920,8921],{"class":5203},"}}\n",[3736,8923,8924,8926,8928],{"class":5199,"line":5312},[3736,8925,7984],{"class":5203},[3736,8927,5223],{"class":5207},[3736,8929,5210],{"class":5203},[3736,8931,8932,8934,8936,8938,8940,8942,8945,8947,8950],{"class":5199,"line":5322},[3736,8933,5268],{"class":5203},[3736,8935,5223],{"class":5207},[3736,8937,5227],{"class":5226},[3736,8939,5230],{"class":5203},[3736,8941,5233],{"class":5203},[3736,8943,8944],{"class":5236},"collapse-content",[3736,8946,5233],{"class":5203},[3736,8948,8949],{"class":5203},">",[3736,8951,8952],{"class":5283}," \n",[3736,8954,8955,8958,8960,8963,8965,8967,8970,8973,8975],{"class":5199,"line":5327},[3736,8956,8957],{"class":5203},"                \u003C",[3736,8959,193],{"class":5207},[3736,8961,8962],{"class":5203},">{{",[3736,8964,8913],{"class":5283},[3736,8966,470],{"class":5203},[3736,8968,8969],{"class":5283},"content ",[3736,8971,8972],{"class":5203},"}}\u003C/",[3736,8974,193],{"class":5207},[3736,8976,5210],{"class":5203},[3736,8978,8979,8981,8983],{"class":5199,"line":5340},[3736,8980,7984],{"class":5203},[3736,8982,5223],{"class":5207},[3736,8984,5210],{"class":5203},[3736,8986,8987,8989,8991],{"class":5199,"line":5361},[3736,8988,5295],{"class":5203},[3736,8990,5223],{"class":5207},[3736,8992,5210],{"class":5203},[3736,8994,8995,8997,8999],{"class":5199,"line":5373},[3736,8996,5305],{"class":5203},[3736,8998,273],{"class":5207},[3736,9000,5210],{"class":5203},[3736,9002,9003],{"class":5199,"line":5382},[3736,9004,5215],{"emptyLinePlaceholder":542},[3736,9006,9007,9009,9011],{"class":5199,"line":6676},[3736,9008,5315],{"class":5203},[3736,9010,273],{"class":5207},[3736,9012,5210],{"class":5203},[3736,9014,9015],{"class":5199,"line":6681},[3736,9016,5215],{"emptyLinePlaceholder":542},[3736,9018,9019,9021,9023,9025],{"class":5199,"line":6695},[3736,9020,5204],{"class":5203},[3736,9022,5332],{"class":5207},[3736,9024,5335],{"class":5226},[3736,9026,5210],{"class":5203},[3736,9028,9029],{"class":5199,"line":6721},[3736,9030,5215],{"emptyLinePlaceholder":542},[3736,9032,9033,9035,9037,9039,9041,9043],{"class":5199,"line":6747},[3736,9034,5343],{"class":5226},[3736,9036,5346],{"class":5283},[3736,9038,5230],{"class":5203},[3736,9040,5352],{"class":5351},[3736,9042,5355],{"class":5283},[3736,9044,5358],{"class":5203},[3736,9046,9047,9050,9052],{"class":5199,"line":6753},[3736,9048,9049],{"class":5207},"    accordion_data",[3736,9051,5367],{"class":5203},[3736,9053,9054],{"class":5283}," Array\n",[3736,9056,9057,9059],{"class":5199,"line":6767},[3736,9058,5376],{"class":5203},[3736,9060,5379],{"class":5283},[3736,9062,9063,9065,9067],{"class":5199,"line":6772},[3736,9064,5315],{"class":5203},[3736,9066,5332],{"class":5207},[3736,9068,5210],{"class":5203},[219,9070,9072],{"id":9071},"different-daisyui-accordion-styles","Different daisyUI accordion styles",[193,9074,5395,9075,9080],{},[197,9076,9079],{"href":9077,"rel":9078},"https://daisyui.com/components/accordion/",[317],"different accordion components to choose from in the daisyUI docs",". It doesn't matter which style you choose, the concept of converting it to a re-useable Vue.js component is the same. The example above is a simple accordion with arrows. If you wish to use a different style, simple take one accordion section and convert it into the format above.",[3849,9082,9084],{"id":9083},"accordionvue-code-explained","Accordion.vue code explained",[193,9086,337,9087,9089,9090,9093,9094,9096],{},[5182,9088,8791],{}," component above accepts an ",[5182,9091,9092],{},"accordion_data"," prop from the parent component (which we will create shortly). This array is then looped over by the ",[5182,9095,8791],{}," component and outputs the data from the array.",[188,9098,9100],{"id":9099},"use-the-daisyui-accordion-component-in-your-parent-component","Use the daisyUI Accordion component in your parent component",[193,9102,9103],{},"Now we have created our accordion component, we can use it in other components. This is easy to do. See the example below:",[5190,9105,9107],{"className":5192,"code":9106,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CAccordion :accordion_data=\"accordion_data\" />\n    \u003C/div>\n\n\u003C/template>\n\n\u003Cscript setup>\n\nconst accordion_data = [\n    {\n        title: 'The title',\n        content: 'The content'\n    },\n    {\n        title: 'The title two',\n        content: 'The content two'\n    },\n    {\n        title: 'The title three',\n        content: 'The content three'\n    }\n]\n\u003C/script>\n",[5182,9108,9109,9113,9121,9125,9133,9154,9162,9166,9174,9178,9188,9192,9204,9209,9226,9240,9245,9249,9264,9277,9281,9285,9300,9313,9318,9323],{"__ignoreMap":262},[3736,9110,9111],{"class":5199,"line":5200},[3736,9112,5434],{"class":5283},[3736,9114,9115,9117,9119],{"class":5199,"line":514},[3736,9116,5204],{"class":5203},[3736,9118,273],{"class":5207},[3736,9120,5210],{"class":5203},[3736,9122,9123],{"class":5199,"line":520},[3736,9124,5215],{"emptyLinePlaceholder":542},[3736,9126,9127,9129,9131],{"class":5199,"line":5244},[3736,9128,5220],{"class":5203},[3736,9130,5223],{"class":5207},[3736,9132,5210],{"class":5203},[3736,9134,9135,9137,9140,9142,9144,9146,9148,9150,9152],{"class":5199,"line":5265},[3736,9136,5247],{"class":5203},[3736,9138,9139],{"class":5207},"Accordion",[3736,9141,5273],{"class":5203},[3736,9143,9092],{"class":5226},[3736,9145,5230],{"class":5203},[3736,9147,5233],{"class":5203},[3736,9149,9092],{"class":5283},[3736,9151,5233],{"class":5203},[3736,9153,5289],{"class":5203},[3736,9155,9156,9158,9160],{"class":5199,"line":5292},[3736,9157,5305],{"class":5203},[3736,9159,5223],{"class":5207},[3736,9161,5210],{"class":5203},[3736,9163,9164],{"class":5199,"line":5302},[3736,9165,5215],{"emptyLinePlaceholder":542},[3736,9167,9168,9170,9172],{"class":5199,"line":5312},[3736,9169,5315],{"class":5203},[3736,9171,273],{"class":5207},[3736,9173,5210],{"class":5203},[3736,9175,9176],{"class":5199,"line":5322},[3736,9177,5215],{"emptyLinePlaceholder":542},[3736,9179,9180,9182,9184,9186],{"class":5199,"line":5327},[3736,9181,5204],{"class":5203},[3736,9183,5332],{"class":5207},[3736,9185,5335],{"class":5226},[3736,9187,5210],{"class":5203},[3736,9189,9190],{"class":5199,"line":5340},[3736,9191,5215],{"emptyLinePlaceholder":542},[3736,9193,9194,9196,9199,9201],{"class":5199,"line":5361},[3736,9195,5343],{"class":5226},[3736,9197,9198],{"class":5283}," accordion_data ",[3736,9200,5230],{"class":5203},[3736,9202,9203],{"class":5283}," [\n",[3736,9205,9206],{"class":5199,"line":5373},[3736,9207,9208],{"class":5203},"    {\n",[3736,9210,9211,9214,9216,9218,9221,9223],{"class":5199,"line":5382},[3736,9212,9213],{"class":5207},"        title",[3736,9215,5367],{"class":5203},[3736,9217,5528],{"class":5203},[3736,9219,9220],{"class":5236},"The title",[3736,9222,6412],{"class":5203},[3736,9224,9225],{"class":5203},",\n",[3736,9227,9228,9231,9233,9235,9238],{"class":5199,"line":6676},[3736,9229,9230],{"class":5207},"        content",[3736,9232,5367],{"class":5203},[3736,9234,5528],{"class":5203},[3736,9236,9237],{"class":5236},"The content",[3736,9239,5534],{"class":5203},[3736,9241,9242],{"class":5199,"line":6681},[3736,9243,9244],{"class":5203},"    },\n",[3736,9246,9247],{"class":5199,"line":6695},[3736,9248,9208],{"class":5203},[3736,9250,9251,9253,9255,9257,9260,9262],{"class":5199,"line":6721},[3736,9252,9213],{"class":5207},[3736,9254,5367],{"class":5203},[3736,9256,5528],{"class":5203},[3736,9258,9259],{"class":5236},"The title two",[3736,9261,6412],{"class":5203},[3736,9263,9225],{"class":5203},[3736,9265,9266,9268,9270,9272,9275],{"class":5199,"line":6747},[3736,9267,9230],{"class":5207},[3736,9269,5367],{"class":5203},[3736,9271,5528],{"class":5203},[3736,9273,9274],{"class":5236},"The content two",[3736,9276,5534],{"class":5203},[3736,9278,9279],{"class":5199,"line":6753},[3736,9280,9244],{"class":5203},[3736,9282,9283],{"class":5199,"line":6767},[3736,9284,9208],{"class":5203},[3736,9286,9287,9289,9291,9293,9296,9298],{"class":5199,"line":6772},[3736,9288,9213],{"class":5207},[3736,9290,5367],{"class":5203},[3736,9292,5528],{"class":5203},[3736,9294,9295],{"class":5236},"The title three",[3736,9297,6412],{"class":5203},[3736,9299,9225],{"class":5203},[3736,9301,9302,9304,9306,9308,9311],{"class":5199,"line":6779},[3736,9303,9230],{"class":5207},[3736,9305,5367],{"class":5203},[3736,9307,5528],{"class":5203},[3736,9309,9310],{"class":5236},"The content three",[3736,9312,5534],{"class":5203},[3736,9314,9315],{"class":5199,"line":6784},[3736,9316,9317],{"class":5203},"    }\n",[3736,9319,9320],{"class":5199,"line":6805},[3736,9321,9322],{"class":5283},"]\n",[3736,9324,9325,9327,9329],{"class":5199,"line":6818},[3736,9326,5315],{"class":5203},[3736,9328,5332],{"class":5207},[3736,9330,5210],{"class":5203},[193,9332,9333],{},"I am using Nuxt in this example. I therefore do not need to import the Accordion.vue component. If you are not using Nuxt, you will almost certainly need to import the Accordion.vue component into your parent component.",[3849,9335,5553],{"id":5552},[193,9337,5556,9338,9340,9341,9343,9344,9346,9347,9349],{},[5182,9339,8791],{}," component. The data for the ",[5182,9342,8791],{}," component is stored in the ",[5182,9345,9092],{}," array in the parent component. This array is then passed to the ",[5182,9348,8791],{}," component.",[219,9351,9353],{"id":9352},"why-should-we-make-our-accordion-component-re-useable-in-vue","Why should we make our Accordion component re-useable in Vue?",[193,9355,9356,9357,9359],{},"Creating our daisyUI components in this way saves us a lot of time in the long run. Think about it. Would you rather have a separate component for every time you wish to use an accordion in your project? Or have one file and pass the appropriate data to it each time you want to use it. By having just one ",[5182,9358,8791],{}," component we keep our project simple. Plus, if we want to change the styling we only have to do it in one place.",[5594,9361,9362],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":262,"searchDepth":514,"depth":514,"links":9364},[9365,9368,9371],{"id":8759,"depth":514,"text":13,"children":9366},[9367],{"id":8768,"depth":520,"text":8769},{"id":8784,"depth":514,"text":8785,"children":9369},[9370],{"id":9071,"depth":520,"text":9072},{"id":9099,"depth":514,"text":9100,"children":9372},[9373],{"id":9352,"depth":520,"text":9353},[5609,5610],[5612,5613],"2024-04-01T00:00:00.000Z","How to create a re-useable Accordion component for your Vue.js projects using daisyUI. Get setup in a matter of minutes.",{"src":9379},"/images/wp/featured-daisyui-accordion-component-for-vue-jsdaisyUI-accordion-vuejs-thumbnail.webp",{},{"title":9382,"description":9383,"ogTitle":9382,"ogDescription":9383,"twitterCard":576},"daisyUI Accordion Component for Vue.js - [2 MINUTE SETUP]","Create a re-useable Accordion component for Vue.js using daisyUI. Simple example with code. 2 mins easy setup. Copy and paste example.","r0y6qvM-3xp8FNKQLFbXNkFD26-4y5s9yKevQJYqIfs",{"id":9386,"title":17,"archived":175,"authors":9387,"badge":9390,"body":9391,"categories":10007,"categorySlugs":10008,"date":9376,"description":8073,"extension":538,"image":10009,"meta":10011,"navigation":542,"path":18,"schemaOrg":4854,"seo":10012,"stem":19,"__hash__":10015},"posts/3.blog/daisyui-alert-component-for-vue-js.md",[9388],{"name":178,"to":179,"avatar":9389},{"src":181},{"label":5138},{"type":185,"value":9392,"toc":9996},[9393,9396,9399,9402,9994],[188,9394,17],{"id":9395},"daisyui-alert-component-for-vuejs",[193,9397,9398],{},"In this post we will look at how to create a daisyUI Alert Component for Vue.js. Alerts can be used to draw attention to important info in our UI. They can be used to warn our users of something, let them know an action was successful, and many other reasons.",[193,9400,9401],{},"The daisyUI docs provide a great starting point for an alert component. However they don't currently have an alert component that we can copy and paste directly into a Vue.js. We can however, do this ourselves. This guide is suitible for any Vue.js project, whether this is Nuxt, Laravel + Inertia.js + Vue.js or anything else using Vue.",[4875,9403,9405,9409,9418,9421,9425,9433,9594,9598,9606,9609,9613,9618,9626,9632,9636,9639,9951,9954,9956,9964,9987,9991],{"video-id":9404},"UlMewQzXol4",[219,9406,9408],{"id":9407},"before-you-create-your-daisyui-alert-component","Before you create your daisyUI alert component",[193,9410,9411,9412,5165,9415,470],{},"Before we create our alert component we need to make sure our project is set up so we can use daisyUI. We need to have installed TailwindCSS and daisyUI. Instructions on installing Tailwind can be found on ",[197,9413,5164],{"href":5162,"rel":9414},[317],[197,9416,5170],{"href":5168,"rel":9417},[317],[193,9419,9420],{},"Once you have installed both TailwindCSS and daisyUI in your Vue.js project you are ready to create your daisyUI alert component.",[188,9422,9424],{"id":9423},"create-daisyui-alert-component-in-vue","Create daisyUI Alert component in Vue",[193,9426,9427,9428,5185,9431,5188],{},"We can now create our alert component. In your components folder, create a new file named ",[5182,9429,9430],{},"Alert.vue",[5182,9432,9430],{},[5190,9434,9436],{"className":5192,"code":9435,"filename":9430,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n\n    \u003Cdiv role=\"alert\" class=\"alert\">\n        \u003Cslot name=\"icon\">\u003C/slot>\n        \u003Cspan>\u003Cslot name=\"content\">\u003C/slot>\u003C/span>\n        \u003Cdiv>\n            \u003Cslot name=\"buttons\">\u003C/slot>\n        \u003C/div>\n    \u003C/div>\n\n\u003C/template>\n",[5182,9437,9438,9446,9450,9480,9503,9535,9543,9566,9574,9582,9586],{"__ignoreMap":262},[3736,9439,9440,9442,9444],{"class":5199,"line":5200},[3736,9441,5204],{"class":5203},[3736,9443,273],{"class":5207},[3736,9445,5210],{"class":5203},[3736,9447,9448],{"class":5199,"line":514},[3736,9449,5215],{"emptyLinePlaceholder":542},[3736,9451,9452,9454,9456,9459,9461,9463,9466,9468,9470,9472,9474,9476,9478],{"class":5199,"line":520},[3736,9453,5220],{"class":5203},[3736,9455,5223],{"class":5207},[3736,9457,9458],{"class":5226}," role",[3736,9460,5230],{"class":5203},[3736,9462,5233],{"class":5203},[3736,9464,9465],{"class":5236},"alert",[3736,9467,5233],{"class":5203},[3736,9469,5227],{"class":5226},[3736,9471,5230],{"class":5203},[3736,9473,5233],{"class":5203},[3736,9475,9465],{"class":5236},[3736,9477,5233],{"class":5203},[3736,9479,5210],{"class":5203},[3736,9481,9482,9484,9486,9488,9490,9492,9495,9497,9499,9501],{"class":5199,"line":5244},[3736,9483,5247],{"class":5203},[3736,9485,5710],{"class":5207},[3736,9487,8875],{"class":5226},[3736,9489,5230],{"class":5203},[3736,9491,5233],{"class":5203},[3736,9493,9494],{"class":5236},"icon",[3736,9496,5233],{"class":5203},[3736,9498,5713],{"class":5203},[3736,9500,5710],{"class":5207},[3736,9502,5210],{"class":5203},[3736,9504,9505,9507,9509,9512,9514,9516,9518,9520,9523,9525,9527,9529,9531,9533],{"class":5199,"line":5265},[3736,9506,5247],{"class":5203},[3736,9508,3736],{"class":5207},[3736,9510,9511],{"class":5203},">\u003C",[3736,9513,5710],{"class":5207},[3736,9515,8875],{"class":5226},[3736,9517,5230],{"class":5203},[3736,9519,5233],{"class":5203},[3736,9521,9522],{"class":5236},"content",[3736,9524,5233],{"class":5203},[3736,9526,5713],{"class":5203},[3736,9528,5710],{"class":5207},[3736,9530,5713],{"class":5203},[3736,9532,3736],{"class":5207},[3736,9534,5210],{"class":5203},[3736,9536,9537,9539,9541],{"class":5199,"line":5292},[3736,9538,5247],{"class":5203},[3736,9540,5223],{"class":5207},[3736,9542,5210],{"class":5203},[3736,9544,9545,9547,9549,9551,9553,9555,9558,9560,9562,9564],{"class":5199,"line":5302},[3736,9546,5268],{"class":5203},[3736,9548,5710],{"class":5207},[3736,9550,8875],{"class":5226},[3736,9552,5230],{"class":5203},[3736,9554,5233],{"class":5203},[3736,9556,9557],{"class":5236},"buttons",[3736,9559,5233],{"class":5203},[3736,9561,5713],{"class":5203},[3736,9563,5710],{"class":5207},[3736,9565,5210],{"class":5203},[3736,9567,9568,9570,9572],{"class":5199,"line":5312},[3736,9569,5295],{"class":5203},[3736,9571,5223],{"class":5207},[3736,9573,5210],{"class":5203},[3736,9575,9576,9578,9580],{"class":5199,"line":5322},[3736,9577,5305],{"class":5203},[3736,9579,5223],{"class":5207},[3736,9581,5210],{"class":5203},[3736,9583,9584],{"class":5199,"line":5327},[3736,9585,5215],{"emptyLinePlaceholder":542},[3736,9587,9588,9590,9592],{"class":5199,"line":5340},[3736,9589,5315],{"class":5203},[3736,9591,273],{"class":5207},[3736,9593,5210],{"class":5203},[219,9595,9597],{"id":9596},"different-daisyui-alert-styles","Different daisyUI alert styles",[193,9599,5395,9600,9605],{},[197,9601,9604],{"href":9602,"rel":9603},"https://daisyui.com/components/alert/",[317],"different alert components to choose from in the daisyUI docs",". Simple alerts that have an icon and some text. And alerts that also have buttons in them to allow your users to take action.",[193,9607,9608],{},"It doesn't matter which style you choose, the concept of converting it to a re-useable Vue.js component is the same. The example above is an alert with an icon, some text and a link. The same result can be achieved using any of the alerts available on the daisyUI website.",[3849,9610,9612],{"id":9611},"alertvue-code-explained","Alert.vue code explained",[193,9614,337,9615,9617],{},[5182,9616,9430],{}," component above has three named slots. These slots are:",[1352,9619,9620,9622,9624],{},[464,9621,9494],{},[464,9623,9522],{},[464,9625,9557],{},[193,9627,9628,9629,9631],{},"This allows us to pass an icon, some text, and any buttons to the ",[5182,9630,9430],{}," component from a parent component. The same result can be achieved by passing props. However in this case I think it makes sense to use slots.",[188,9633,9635],{"id":9634},"use-the-daisyui-alert-component-in-your-parent-component","Use the daisyUI Alert component in your parent component",[193,9637,9638],{},"Now we have created our alert component, we can use it in other components. This is simple to do. See the example below:",[5190,9640,9642],{"className":5192,"code":9641,"filename":5427,"language":5194,"meta":262,"style":262},"// Parent component\n\u003Ctemplate>\n\n    \u003Cdiv>\n        \u003CAlert>\n            \u003Ctemplate #icon>\n                \u003Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" class=\"stroke-info shrink-0 w-6 h-6\">\u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\">\u003C/path>\u003C/svg>\n            \u003C/template>\n\n            \u003Ctemplate #content>\n                Our text content\n            \u003C/template>\n\n            \u003Ctemplate #buttons>\n                \u003Cbutton class=\"btn btn-sm\">Deny\u003C/button>\n                \u003Cbutton class=\"btn btn-sm btn-primary\">Accept\u003C/button>\n            \u003C/template>\n        \u003C/Alert>\n    \u003C/div>\n\n\u003C/template>\n",[5182,9643,9644,9648,9656,9660,9668,9677,9690,9806,9814,9818,9830,9835,9843,9847,9859,9887,9915,9923,9931,9939,9943],{"__ignoreMap":262},[3736,9645,9646],{"class":5199,"line":5200},[3736,9647,5434],{"class":5283},[3736,9649,9650,9652,9654],{"class":5199,"line":514},[3736,9651,5204],{"class":5203},[3736,9653,273],{"class":5207},[3736,9655,5210],{"class":5203},[3736,9657,9658],{"class":5199,"line":520},[3736,9659,5215],{"emptyLinePlaceholder":542},[3736,9661,9662,9664,9666],{"class":5199,"line":5244},[3736,9663,5220],{"class":5203},[3736,9665,5223],{"class":5207},[3736,9667,5210],{"class":5203},[3736,9669,9670,9672,9675],{"class":5199,"line":5265},[3736,9671,5247],{"class":5203},[3736,9673,9674],{"class":5207},"Alert",[3736,9676,5210],{"class":5203},[3736,9678,9679,9681,9683,9686,9688],{"class":5199,"line":5292},[3736,9680,5268],{"class":5203},[3736,9682,273],{"class":5207},[3736,9684,9685],{"class":5203}," #",[3736,9687,9494],{"class":5226},[3736,9689,5210],{"class":5203},[3736,9691,9692,9694,9697,9700,9702,9704,9707,9709,9712,9714,9716,9719,9721,9724,9726,9728,9731,9733,9735,9737,9739,9742,9744,9746,9749,9752,9754,9756,9759,9761,9764,9766,9768,9770,9772,9775,9777,9779,9782,9784,9787,9789,9791,9794,9796,9798,9800,9802,9804],{"class":5199,"line":5302},[3736,9693,8957],{"class":5203},[3736,9695,9696],{"class":5207},"svg",[3736,9698,9699],{"class":5226}," xmlns",[3736,9701,5230],{"class":5203},[3736,9703,5233],{"class":5203},[3736,9705,9706],{"class":5236},"http://www.w3.org/2000/svg",[3736,9708,5233],{"class":5203},[3736,9710,9711],{"class":5226}," fill",[3736,9713,5230],{"class":5203},[3736,9715,5233],{"class":5203},[3736,9717,9718],{"class":5236},"none",[3736,9720,5233],{"class":5203},[3736,9722,9723],{"class":5226}," viewBox",[3736,9725,5230],{"class":5203},[3736,9727,5233],{"class":5203},[3736,9729,9730],{"class":5236},"0 0 24 24",[3736,9732,5233],{"class":5203},[3736,9734,5227],{"class":5226},[3736,9736,5230],{"class":5203},[3736,9738,5233],{"class":5203},[3736,9740,9741],{"class":5236},"stroke-info shrink-0 w-6 h-6",[3736,9743,5233],{"class":5203},[3736,9745,9511],{"class":5203},[3736,9747,9748],{"class":5207},"path",[3736,9750,9751],{"class":5226}," stroke-linecap",[3736,9753,5230],{"class":5203},[3736,9755,5233],{"class":5203},[3736,9757,9758],{"class":5236},"round",[3736,9760,5233],{"class":5203},[3736,9762,9763],{"class":5226}," stroke-linejoin",[3736,9765,5230],{"class":5203},[3736,9767,5233],{"class":5203},[3736,9769,9758],{"class":5236},[3736,9771,5233],{"class":5203},[3736,9773,9774],{"class":5226}," stroke-width",[3736,9776,5230],{"class":5203},[3736,9778,5233],{"class":5203},[3736,9780,9781],{"class":5236},"2",[3736,9783,5233],{"class":5203},[3736,9785,9786],{"class":5226}," d",[3736,9788,5230],{"class":5203},[3736,9790,5233],{"class":5203},[3736,9792,9793],{"class":5236},"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",[3736,9795,5233],{"class":5203},[3736,9797,5713],{"class":5203},[3736,9799,9748],{"class":5207},[3736,9801,5713],{"class":5203},[3736,9803,9696],{"class":5207},[3736,9805,5210],{"class":5203},[3736,9807,9808,9810,9812],{"class":5199,"line":5312},[3736,9809,7984],{"class":5203},[3736,9811,273],{"class":5207},[3736,9813,5210],{"class":5203},[3736,9815,9816],{"class":5199,"line":5322},[3736,9817,5215],{"emptyLinePlaceholder":542},[3736,9819,9820,9822,9824,9826,9828],{"class":5199,"line":5327},[3736,9821,5268],{"class":5203},[3736,9823,273],{"class":5207},[3736,9825,9685],{"class":5203},[3736,9827,9522],{"class":5226},[3736,9829,5210],{"class":5203},[3736,9831,9832],{"class":5199,"line":5340},[3736,9833,9834],{"class":5283},"                Our text content\n",[3736,9836,9837,9839,9841],{"class":5199,"line":5361},[3736,9838,7984],{"class":5203},[3736,9840,273],{"class":5207},[3736,9842,5210],{"class":5203},[3736,9844,9845],{"class":5199,"line":5373},[3736,9846,5215],{"emptyLinePlaceholder":542},[3736,9848,9849,9851,9853,9855,9857],{"class":5199,"line":5382},[3736,9850,5268],{"class":5203},[3736,9852,273],{"class":5207},[3736,9854,9685],{"class":5203},[3736,9856,9557],{"class":5226},[3736,9858,5210],{"class":5203},[3736,9860,9861,9863,9865,9867,9869,9871,9874,9876,9878,9881,9883,9885],{"class":5199,"line":6676},[3736,9862,8957],{"class":5203},[3736,9864,5690],{"class":5207},[3736,9866,5227],{"class":5226},[3736,9868,5230],{"class":5203},[3736,9870,5233],{"class":5203},[3736,9872,9873],{"class":5236},"btn btn-sm",[3736,9875,5233],{"class":5203},[3736,9877,8949],{"class":5203},[3736,9879,9880],{"class":5283},"Deny",[3736,9882,5315],{"class":5203},[3736,9884,5690],{"class":5207},[3736,9886,5210],{"class":5203},[3736,9888,9889,9891,9893,9895,9897,9899,9902,9904,9906,9909,9911,9913],{"class":5199,"line":6681},[3736,9890,8957],{"class":5203},[3736,9892,5690],{"class":5207},[3736,9894,5227],{"class":5226},[3736,9896,5230],{"class":5203},[3736,9898,5233],{"class":5203},[3736,9900,9901],{"class":5236},"btn btn-sm btn-primary",[3736,9903,5233],{"class":5203},[3736,9905,8949],{"class":5203},[3736,9907,9908],{"class":5283},"Accept",[3736,9910,5315],{"class":5203},[3736,9912,5690],{"class":5207},[3736,9914,5210],{"class":5203},[3736,9916,9917,9919,9921],{"class":5199,"line":6695},[3736,9918,7984],{"class":5203},[3736,9920,273],{"class":5207},[3736,9922,5210],{"class":5203},[3736,9924,9925,9927,9929],{"class":5199,"line":6721},[3736,9926,5295],{"class":5203},[3736,9928,9674],{"class":5207},[3736,9930,5210],{"class":5203},[3736,9932,9933,9935,9937],{"class":5199,"line":6747},[3736,9934,5305],{"class":5203},[3736,9936,5223],{"class":5207},[3736,9938,5210],{"class":5203},[3736,9940,9941],{"class":5199,"line":6753},[3736,9942,5215],{"emptyLinePlaceholder":542},[3736,9944,9945,9947,9949],{"class":5199,"line":6767},[3736,9946,5315],{"class":5203},[3736,9948,273],{"class":5207},[3736,9950,5210],{"class":5203},[193,9952,9953],{},"I am using Nuxt in this example. I therefore do not need to import the Alert.vue component. If you are not using Nuxt, you will almost certainly need to import the Alert.vue component into your parent component.",[3849,9955,5553],{"id":5552},[193,9957,5556,9958,9960,9961,9963],{},[5182,9959,9430],{}," component. The named slots pass the data from the parent component to the ",[5182,9962,9430],{}," component. As mentioned previously - the same result can be achieved using props instead of slots.",[258,9965,9966,9972,9976,9981],{"orientation":261,"variant":263},[193,9967,9968],{},[265,9969],{"alt":9970,"className":9971,"src":5568},"daisyUI has templates!",[269,270],[273,9973,9974],{"v-slot:title":262},[193,9975,9970],{},[273,9977,9978],{"v-slot:description":262},[193,9979,9980],{},"Yo, I just realised daisyUI has pre-made templates you can buy. Check them out",[273,9982,9983],{"v-slot:links":262},[286,9984,9985],{"size":288,"target":262,"to":5582,"variant":292},[193,9986,5585],{},[219,9988,9990],{"id":9989},"why-should-we-make-our-alert-component-re-useable-in-vue","Why should we make our Alert component re-useable in Vue?",[193,9992,9993],{},"By making our Alert component re-useable we save a lot of time. This is because we don't have to maintain multiple versions of components. That only differ by the content. This means that if we want to change the styling of our Alert component, we only need to do this once! Rather than changing it for multiple instances.",[5594,9995,5887],{},{"title":262,"searchDepth":514,"depth":514,"links":9997},[9998,10001,10004],{"id":9395,"depth":514,"text":17,"children":9999},[10000],{"id":9407,"depth":520,"text":9408},{"id":9423,"depth":514,"text":9424,"children":10002},[10003],{"id":9596,"depth":520,"text":9597},{"id":9634,"depth":514,"text":9635,"children":10005},[10006],{"id":9989,"depth":520,"text":9990},[5609,5610],[5612,5613],{"src":10010},"/images/wp/featured-daisyui-alert-component-for-vue-jsdaisyUI-alert-vuejs-thumbnail.webp",{},{"title":10013,"description":10014,"ogTitle":10013,"ogDescription":10014,"twitterCard":576},"daisyUI Alert Component for Vue.js - [1 MINUTE SETUP]","Create a re-useable Alert component for Vue.js using daisyUI. Simple example with code. 1 minute easy setup. Copy and paste example.","YrLH0MbPcmjjiIMuWYXLd3WxDpCO6EQIFXUAxMd62sA",{"id":10017,"title":137,"archived":175,"authors":10018,"badge":10021,"body":10023,"categories":10190,"categorySlugs":10194,"date":10198,"description":10199,"extension":538,"image":10200,"meta":10202,"navigation":542,"path":138,"schemaOrg":4854,"seo":10203,"stem":139,"__hash__":10206},"posts/3.blog/stop-taking-months-to-build-websites.md",[10019],{"name":178,"to":179,"avatar":10020},{"src":181},{"label":10022},"News, Website Design, WordPress",{"type":185,"value":10024,"toc":10183},[10025,10029,10032,10035],[188,10026,10028],{"id":10027},"stop-taking-months-to-build-a-simple-website","Stop taking months to build a simple website",[193,10030,10031],{},"Does it take you months to build a simple website? You start off with the best intentions if smashing through the build. But 3 months down the line you are still figuring out your colour scheme. Well you are not alone. I have been there. And I know how frustrating this can feel.",[193,10033,10034],{},"Luckily I have come up with the perfect solution. A solution that will mean your days of time wasting are over. So without any more waffling let's get into it.",[4875,10036,10038,10042,10045,10094,10098,10101,10169,10173,10176],{"video-id":10037},"sDWtprA2AbY",[219,10039,10041],{"id":10040},"why-do-we-do-this","Why do we do this?",[193,10043,10044],{},"So why do we do this? Why do we take so long. Well this can be for a number of reasons. So let's look at each of them individually. Once we identify why we do this. We can figure out how to avoid doing it!",[461,10046,10047,10057,10067,10077,10087],{},[464,10048,10049,10053,10054,10056],{},[3849,10050,10052],{"id":10051},"too-much-early-motivation","Too much early motivation","Yes, you did read that correctly. We can be too motivated in the beginning. But what do I mean by this? Well, when we start a new web project our brains are working at 100 miles an hour. We have lots of ideas. We are constantly thinking about all of these ideas. How we can market the website, different features we want to build, etc.",[5038,10055],{},"Every time we think of a new idea our brains reward us with a little dopamine rush. We then feel like we have achieved something. But the reality is we have achieved nothing. We are tricked into believing that we have been productive. We are then left with a false sense of achievement which slows us down on the actual website build.",[464,10058,10059,10063,10064,10066],{},[3849,10060,10062],{"id":10061},"flit-between-ideas","Flit between ideas","We flit between ideas. So we may start building our website. And we start by building out the navigation bar. But then we have an idea for how we want the contact page to look. So we stop what we are doing with the navigation bar and start on the contact page. And then we have another idea... You get the point.",[5038,10065],{},"We keep on starting new areas of the website but don't prioritise finishing them. So when we eventually do come back to sorting out the navigation bar we have lost motivation. Not only have we lost motivation but we also have to find our bearings again and remember what the plan was. This process is both tiring and time consuming. And a huge reason why it takes you so long to build your websites.",[464,10068,10069,10073,10074,10076],{},[3849,10070,10072],{"id":10071},"looking-for-perfection","Looking for perfection","We are often looking for perfection. When in reality everyone knows that perfection is not possible. Have you ever found yourself randomly adding an animation to your website for no apparent reason? It is this sort of behaviour that is slowing you down.",[5038,10075],{},"The reality is you don't have any website visitors yet. Your website isn't even publicly available. Why are you adding animations? We need to get a basic website up and running before we even thing about adding anything like that. And even then it is unnecessary! (in my opinion).",[464,10078,10079,10083,10084,10086],{},[3849,10080,10082],{"id":10081},"writing-website-copy-as-we-code","Writing website copy as we code","This is a big one. Writing the copy for your website as you code. This is a slow process. It is difficult to switch between writing code and writing copy. Each time you switch you need to find you feet again. This is a really inefficient way of doing things.",[5038,10085],{},"What happens is you end up writing code really slowly. And writing website copy really slowly. You get the worst of both worlds!",[464,10088,10089,10093],{},[3849,10090,10092],{"id":10091},"designing-from-scratch","Designing from scratch","Designing from scratch can be fine for some. But for most it is a very time consuming process.",[219,10095,10097],{"id":10096},"solutions","Solutions",[193,10099,10100],{},"Luckily for you I have the solutions to these problems. And you will be pleased to hear that they are super easy to implement. Let's take a look at them.",[461,10102,10103,10113,10129,10139],{},[464,10104,10105,10109,10110,10112],{},[3849,10106,10108],{"id":10107},"write-down-your-idea","Write down your idea","When we are all motivated and excited in the beginning stages. We need to write down our ideas. anything that pops into our minds. Write it down. It doesn't matter how good or bad an idea might be. Just write it down.",[5038,10111],{},"I like to create a new Google Doc for the project. And in the Google Doc I will write down every idea I have related to the website. The reason I do this is it gets the idea out of my brain. I don't have to keep thinking about it. I know it is stored safely. This allows me to et on with actually building the website. Because I know I can look back at my list of ideas at a later date. And implement any ideas that are actually decent.",[464,10114,10115,10119,10120,10122,10123,10125,10126,10128],{},[3849,10116,10118],{"id":10117},"live-on-day-one","Live on day one","I have a mindset for creating websites. And I like to call this mindset \"live on day one\". As the name suggests, it means I have to get the website live on day one. I need to get a version of it up on a live server for the world to see. On the first day of building the website. Now this might sound reckless to you. But I will explain why this is such an effective technique.",[5038,10121],{},"When you know your website is live. And that real people are able to view it. It helps you to prioritise what is actually important. Instead of focussing on an animation that makes text appear as you scroll. You realise you need to focus on having a presentable home page with clear and concise text. You realise that the design is not as important as you previously did. You realise that the actual website copy is the most important part of your website.",[5038,10124],{},"With this in mind. When I first start building a website. I know I need to get a basic home page sorted. A basic archive page for blog posts. And a basic blog post template. With these 3 pages sorted I can then start smashing out blog posts. Because, as mentioned previously. The website content is the most important part of the site. This is what is going to bring in clicks to your site. And the clicks are what are going to give you the dopamine reward which will keep you improving the site and creating more content.",[5038,10127],{},"For these reasons, I recommend getting your site live on day one.",[464,10130,10131,10135,10136,10138],{},[3849,10132,10134],{"id":10133},"write-content-before-building-website","Write content before building website","This one is self explanatory. But writing your content before coding your website gives you a huge advantage. Doing this means you can focus all of your attention and brain power on one thing at a time. This not only makes you much more efficient. But it also makes the quality of each improve.",[5038,10137],{},"You are no longer switching thought processes and tiring yourself out. This is a far more effective way of doing things when compared to doing both at the same time.",[464,10140,10141,10145,10146,10151,10152,10157,10158,10160,10161,10164,10165,10168],{},[3849,10142,10144],{"id":10143},"use-a-component-library","Use a component library","If you are designing from scratch. The question I would ask you is, why? There is no need to do this. I recommend you use a component library like ",[197,10147,10150],{"href":10148,"rel":10149},"https://tailwindui.com/",[317],"Tailwind UI"," or ",[197,10153,10156],{"href":10154,"rel":10155},"https://daisyui.com/",[317],"daisyUI",". By doing so you no longer need to think about design. Your design will also look amazing. As it has been done by a professional.",[5038,10159],{},"The speed at which you get your design built will sky rocket when using a component library. Check out my ",[197,10162,10163],{"href":142},"Tailwind UI review"," and my ",[197,10166,10167],{"href":46},"DaisyUI first impressions"," for more information on these.",[219,10170,10172],{"id":10171},"no-more-excuses","No more excuses",[193,10174,10175],{},"So there you have it. The reasons why you take so long to build simple websites. And what you can do about it. You have no more excuses!",[193,10177,10178,10179,10182],{},"If you want to see how I'm putting this into practice, check out my ",[197,10180,10181],{"href":162},"WaaS Blueprint"," where I'm building local business websites using this exact approach.",{"title":262,"searchDepth":514,"depth":514,"links":10184},[10185],{"id":10027,"depth":514,"text":10028,"children":10186},[10187,10188,10189],{"id":10040,"depth":520,"text":10041},{"id":10096,"depth":520,"text":10097},{"id":10171,"depth":520,"text":10172},[10191,10192,10193],"News","Website Design","WordPress",[10195,10196,10197],"news","website-design","wordpress","2024-02-28T00:00:00.000Z","Why it takes you months to build websites. Get your websites live on day one. No more excuses. It doesn’t need to take long to get a website live!",{"src":10201},"/images/wp/featured-stop-taking-months-to-build-websitesWhy-does-it-take-months-to-build-a-website-v2.webp",{},{"title":10204,"description":10205,"ogTitle":10204,"ogDescription":10205,"twitterCard":576},"Stop taking months to build websites [SIMPLE SOLUTION]","Why it takes you months to build websites. With solutions! Get your websites live on day one. No more excuses","mkRuh8TBfgZSf6fkvJDXbOuW1etFdTlwYc0b2lgu60k",{"id":10208,"title":65,"archived":175,"authors":10209,"badge":10212,"body":10213,"categories":10763,"categorySlugs":10764,"date":10765,"description":10766,"extension":538,"image":10767,"meta":10769,"navigation":542,"path":66,"schemaOrg":10770,"seo":10790,"stem":67,"__hash__":10793},"posts/3.blog/how-to-make-money-on-skool.md",[10210],{"name":178,"to":179,"avatar":10211},{"src":181},{"label":199},{"type":185,"value":10214,"toc":10743},[10215,10219,10222,10229,10234,10238,10241,10245,10252,10256,10262,10279,10304,10308,10319,10342,10345,10351,10354,10358,10374,10378,10385,10388,10412,10416,10419,10662,10685,10689,10692,10715,10718],[188,10216,10218],{"id":10217},"how-to-make-money-on-skool","How to make money on skool",[193,10220,10221],{},"So you've heard about skool.com. And you've heard how it's a great opportunity to build a monthly income. But how on earth do you actually implement this? How do you make money on skool? Well you're in luck. I'm going to take you step-by-step through the process of how to make money on skool by building your skool community. So you can start earning a regular monthly income. You're going to want to bookmark this page 😜",[193,10223,10224,10225,10228],{},"If you don't know what skool is, you should check out ",[197,10226,10227],{"href":130},"my skool review"," and then come back to this page.",[193,10230,10231],{},[265,10232],{"alt":10218,"src":10233},"/images/wp/featured-how-to-make-money-on-skool.webp",[219,10235,10237],{"id":10236},"how-much-money-can-i-make-on-skool","How much money can I make on skool?",[193,10239,10240],{},"So how much money can you make on skool? Well the short answer is \"it depends\". It depends on how much time and effort you are going to put into it. If you are willing to put in the work, the rewards could be great. If you are not, they won't be. So, there is literally no way to answer this question. The question you should be asking is \"how can I make money on skool\". This is what we are going to look at in this post!",[219,10242,10244],{"id":10243},"why-should-you-take-my-advice","Why should you take my advice?",[193,10246,10247,10248,10251],{},"This is a good question. Why should you listen to me. Well I'll tell you why. Over the last 6 months something has clicked inside my brain. I've been taking action and seeing results. I've been listening to the advice of highly successful, entrepreneurs. Then implementing this advice. This has led to the huge growth of ",[197,10249,4941],{"href":179,"rel":10250},[317]," and website traffic.",[3849,10253,10255],{"id":10254},"im-putting-my-money-where-my-mouth-is","I'm putting my money where my mouth is",[193,10257,10258,10259,10261],{},"Now whether you take my advice and follow my guide or not. That's completely up to you. But I am doing this myself. I started ",[197,10260,3561],{"href":290}," on Skool in August 2026, and I'm following this exact plan to build it. It's brand new, so I'm not going to pretend I've got it all figured out yet. I'm building it in the open, so you can watch how it plays out. Do as you wish with this information.",[3569,10263,10265],{"color":3571,"icon":10264},"i-lucide-map-pin",[193,10266,10267,10270,10271,10278],{},[304,10268,10269],{},"Are you in Australia?"," Want to make some money? You can make $50 today by following the step by step instructions in ",[197,10272,10277],{"href":290,"className":10273,"style":10276},[10274,10275],"text-primary","font-semibold","text-decoration: underline;","my free matched betting community",". It's a risk free way to earn from bookmaker offers, and it works in Australia.",[258,10280,10281,10288,10292,10297],{"orientation":261,"variant":263},[193,10282,10283],{},[265,10284],{"alt":10285,"src":10286,"className":10287},"Start your journey now","/images/wp/cta-How-to-make-money-on-skool-featured-image.webp",[269,270],[273,10289,10290],{"v-slot:title":262},[193,10291,10285],{},[273,10293,10294],{"v-slot:description":262},[193,10295,10296],{},"Creating your Skool group now will mean you are ahead of the game. Get started now before everyone else catches on!",[273,10298,10299],{"v-slot:links":262},[286,10300,10301],{"size":288,"target":262,"to":601,"variant":292},[193,10302,10303],{},"Get started for free",[219,10305,10307],{"id":10306},"considerations-when-trying-to-make-money-on-skool","Considerations when trying to make money on skool",[193,10309,10310,10311,10314,10315,10318],{},"Before you start even thinking about ",[197,10312,10313],{"href":601},"creating a skool group",". It's important to realise a couple of things. And if you're wondering about the cost, check out my ",[197,10316,10317],{"href":126},"Skool pricing breakdown"," for full details on the Hobby and Pro plans.",[1352,10320,10321,10328,10335],{},[464,10322,10323,10327],{},[3849,10324,10326],{"id":10325},"skool-is-not-a-get-rich-quick-scheme","Skool is not a get rich quick scheme","\nLike anything worth having, it takes time to build a solid community. Unless you already have a huge following, you are not going to make vast amounts of money over night. However it is possible to build a small but steady income stream in a relatively short period of time.",[464,10329,10330,10334],{},[3849,10331,10333],{"id":10332},"making-money-on-skool-requires-effort","Making money on skool requires effort","\nYou will have to put effort in to make money. This is the case for any way of making money. However the beauty of skool is you are putting effort into something you enjoy!",[464,10336,10337,10341],{},[3849,10338,10340],{"id":10339},"treat-this-like-a-business","Treat this like a business","\nTo make a success of this. You will need to treat it like a business. Businesses take time and effort. Business is also about capitalising on opportunity. And this is the great thing about skool. It's still early. The opportunity is still huge.",[193,10343,10344],{},"Now ask yourself. Do I have what it takes to make this a success? Am I willing to put the effort in? How badly do I actually want to make a decent recurring monthly income?",[193,10346,10347,10348,10350],{},"If you know you are the kind of person who quits after a week or two. Don't even bother signing up for the ",[197,10349,4060],{"href":601},". There is literally no point. You can also stop reading this page right now, and go back to playing video games.",[193,10352,10353],{},"For those of you who are serious about creating an income stream. Let's get into the details of how to make it happen! Believe it or not. I'm going to give you an actual strategy. This is a strategy that you can implement today. And is the exact strategy I am using myself. And if you follow through with it, could see you making money within the next few months. Now in this step by step guide I am going to make some assumptions about you.",[3849,10355,10357],{"id":10356},"my-assumptions-about-you","My assumptions about you",[1352,10359,10360,10367],{},[464,10361,10362,10366],{},[3849,10363,10365],{"id":10364},"you-are-computer-literate","You are computer literate","\nI am assuming that you know how to use a computer and a phone. And that you are comfortable navigating your way around the internet. This guide is not going to focus on \"how to sign up to skool\". It's going to tell you how to get members to sign up to a skool group. And how to then monetise these members.",[464,10368,10369,10373],{},[3849,10370,10372],{"id":10371},"you-dont-have-a-large-existing-following","You don't have a large existing following","\nI am assuming that you don't have a large following already. If you do have an existing following, this will be helpful. But this guide assumes that you do not.",[219,10375,10377],{"id":10376},"my-promise-to-you","My promise to you",[193,10379,10380,10381,10384],{},"Before we go any further. Here is my promise to you. If you ",[197,10382,10383],{"href":601},"create a group on skool",". I will help you. Once you have created your group. Drop me a message to let me know about your group. I will happily be your first member (if your group is free 😅). I will also get involved with the community by commenting and being part of its activity.",[193,10386,10387],{},"Now we have got that out of the way. Let's get into it.",[258,10389,10390,10396,10400,10405],{"orientation":261,"variant":263},[193,10391,10392],{},[265,10393],{"alt":10394,"src":10286,"className":10395},"Create your free group on skool",[269,270],[273,10397,10398],{"v-slot:title":262},[193,10399,10394],{},[273,10401,10402],{"v-slot:description":262},[193,10403,10404],{},"Creating your Skool group now will mean you are ahead of the game. Plus you get a 14 day free trial!",[273,10406,10407],{"v-slot:links":262},[286,10408,10409],{"size":288,"target":262,"to":601,"variant":292},[193,10410,10411],{},"Start free trial",[188,10413,10415],{"id":10414},"the-step-by-step-guide-on-how-to-make-money-on-skool","The step by step guide on how to make money on skool",[193,10417,10418],{},"So this is the good bit. The step by step guide on how to make money on skool. Read it carefully. And good luck. Here we go...",[215,10420,10421,10425,10428,10462,10465,10469,10476,10480,10483,10487,10490,10494,10497,10501,10504,10508,10511,10515,10519,10522,10525,10529,10532,10575,10579,10582,10586,10589,10592,10596,10599,10602,10606,10609,10640,10642,10646,10649,10652,10656,10659],{"level":217},[219,10422,10424],{"id":10423},"find-your-niche","Find your niche",[193,10426,10427],{},"The first step is finding your niche. A good way of narrowing this down is by asking yourself these questions:",[461,10429,10430,10437,10444],{},[464,10431,10432,10436],{},[3849,10433,10435],{"id":10434},"what-do-i-know-a-lot-about","What do I know a lot about?","If you know a lot about a particular subject. This is a great place to start. Being knowledgeable will allow you to provide real value to your audience. Which is the key for long term success.",[464,10438,10439,10443],{},[3849,10440,10442],{"id":10441},"what-am-i-interested-in","What am I interested in?","If you pick something you are interested in you are more likely to stick with it. It will also be a lot more fun! Maybe there is a sport you are good at and can give tips on.",[464,10445,10446,10450,10451,10459,10461],{},[3849,10447,10449],{"id":10448},"who-is-your-target-audience","Who is your target audience?","Target a specific group of people. By doing this you make it more likely that those people will resonate with your message. And therefore join the group. An example of this could be a group that helps plumbers get more clients. Now there are lots of people out there who want more clients. But by focussing on plumbers you are resonating with a specific group. Imagine you are a plumber for a second. Which group are you more likely to join:",[461,10452,10453,10456],{},[464,10454,10455],{},"Get more clients for your service based business",[464,10457,10458],{},"Get more clients for your plumbing business",[5038,10460],{},"The answer is obvious, isn't it? You would join the second one because it resonates more with you and is more specific to your situation. Think about how you can do the same.",[193,10463,10464],{},"Now remember, you can make a skool group about anything. It doesn't need to be business related. It can be about anything. Maybe you are good at a particular video game and can provide tips on how to become better. Maybe you are good at editing videos and can teach others to do the same.",[219,10466,10468],{"id":10467},"create-your-skool-group","Create your skool group",[193,10470,10471,10472,10475],{},"Now you have decided on the type of group you are going to create. You can ",[197,10473,10474],{"href":601},"sign up to skool",". The great thing is you get a 14 day free trial, so if you decide you don't want to continue it costs you nothing!",[219,10477,10479],{"id":10478},"create-your-first-posts","Create your first posts",[193,10481,10482],{},"Now we want to start adding some substance to our skool group. There is no point growing a community if we have absolutely nothing to offer them.",[3849,10484,10486],{"id":10485},"create-a-welcome-post","Create a welcome post",[193,10488,10489],{},"The first thing you want to do is create a welcome post. This is a post that will go on your skool group, introducing yourself and the purpose of your group. In this post, outline why your group is good and how it will help your members. Encourage members to introduce themselves and say what they are looking to get out of the group.",[3849,10491,10493],{"id":10492},"create-a-what-is-to-come-post","Create a \"what is to come\" post",[193,10495,10496],{},"Create a separate post. In this post you want to outline what you will be creating in your course. This is where we want to reassure members that the course materials will be added in the future. This lets them know they should stick around in the group in order to see this when it is live.",[219,10498,10500],{"id":10499},"create-scarcity","Create scarcity",[193,10502,10503],{},"Now this step is important. We want to create scarcity. We do this by limiting the number of members allowed in the group. Or the number of members who are allowed in the group for free before it becomes a paid for group. This scarcity encourages members to join and creates a level of urgency. It's human instinct to want something that is scarce. This is why diamonds are so expensive, because they aren't easily available and there aren't many of them!",[3849,10505,10507],{"id":10506},"how-to-tell-members-about-the-scarcity","How to tell members about the scarcity",[193,10509,10510],{},"Its important that you let your group members know that opportunity is limited to only a specific number of members. Mention this scarcity in the group description. You can also write a post about this in the community section along with your \"welcome post\" and \"what is to come\" post.",[219,10512,10514],{"id":10513},"invite-your-friends","Invite your friends",[3849,10516,10518],{"id":10517},"get-the-ball-rolling-with-easy-wins","Get the ball rolling with easy wins",[193,10520,10521],{},"In the very beginning it is going to be hard to get users to join your group. This is especially hard when you have 0 users. Or 1 including yourself. This is why we want to reach out to people we already know. Ask me to join your group. I will join and get involved in the community. You just have to ask. Ask friends and family members. And ask them for a favour. Ask them to join your group. Ask them to post a comment or ask a question. Ask them to get the ball rolling. Tell them it would be a huge help.",[193,10523,10524],{},"People like to help people. Post this request on your social media too. The chances are you will get quite a few new members. Whether these members stick around in the long term or not. We don't care too much at this point. The main reason for this is because we don't want our group to be empty. An empty group is a big turn off for potential new members.",[219,10526,10528],{"id":10527},"drive-traffic-to-your-skool-group","Drive traffic to your skool group",[193,10530,10531],{},"This is where the hard graft comes in. And this is where you will either sink or swim. We need to drive traffic to our skool group. But how do we do this? Well there are many ways, but this is what I'm doing:",[1352,10533,10534,10548,10561,10568],{},[464,10535,10536,10540,10541,10543,10544,10547],{},[3849,10537,10539],{"id":10538},"create-a-website","Create a website","We need to create a website. Why? Because with a website we can target people who have a specific problem. And then provide them the answer to this problem. And the answer to their problem is joining our group on skool! The important thing here is not to get bogged down in the process of building the website.",[5038,10542],{},"What we want to do is get a site setup as quickly as possible and then focus on writing blog posts. The blog posts are what is going to bring in traffic, not the design of the website. This is exactly what I'm doing. The site you are reading right now is that website, and it feeds ",[197,10545,10546],{"href":290},"my matched betting community"," on Skool, which I started in August 2026. So you are watching this strategy play out in real time.",[464,10549,10550,10554,10555,10557,10558,10560],{},[3849,10551,10553],{"id":10552},"post-on-social-media","Post on social media","We need to be spreading the word of what we are up to. But we shouldn't be spamming our skool group everywhere. Instead we should focus on creating engaging and useful posts. Posts that talk about the problem we can fix.",[5038,10556],{},"So for example, my skool group is aimed at building websites quickly by prioritising what is important and not getting bogged down in minute details. So I create videos with titles like \"Why does it take you so long to build a website?\" In these videos I talk about the reasons why this happens, and what you can do to avoid this. I will then say, join my skool group for more help in doing xyz.",[5038,10559],{},"The point is, my focus isn't on spamming my skool group. Its about creating valuable content with good info. This makes you look like you actually have something of value that is worthwhile joining!",[464,10562,10563,10567],{},[3849,10564,10566],{"id":10565},"combine-your-website-and-social-media-posts","Combine your website and social media posts","This is what I am going to be doing to streamline the process. I will be creating a video, then writing a blog post. The blog post will be repeating the information for the video. And the video will also be embedded in the blog post! This means that I only need to think of one idea to create 2 pieces of content. Not only that, the video being on my blog post will add more value to the post. Some people prefer to read, others prefer to watch a video!",[464,10569,10570,10574],{},[3849,10571,10573],{"id":10572},"dont-over-do-it","Don't over do it","You want your content to be the main focus of your social media and website posts. You then want to mention your skool group and how it could benefit them by being a member. If your main focus is \"join my skool group\" it will probably come across too salesy - and people get put off by this. Instead, provide a ton of value. Then mention - for exclusive content on how you can do blah blah blah, check out my skool group.",[219,10576,10578],{"id":10577},"build-out-your-course","Build out your course",[193,10580,10581],{},"Once you have the ball rolling with your content creation, you need to focus on your skool course. This is crucial as this is one of the factors that is going to make members stick around.",[3849,10583,10585],{"id":10584},"exclusive-content","Exclusive content",[193,10587,10588],{},"You want the course content to be exclusive to skool. If you are reposting your publicly available YouTube videos to skool, there is not much of an incentive for people to join your group. After all they can just access your content on YouTube.",[193,10590,10591],{},"This exclusivity will be one of the main reasons people come to your group. So this is important.",[219,10593,10595],{"id":10594},"repeat-and-nurture","Repeat and nurture",[193,10597,10598],{},"At this point you have a solid foundation in place. Now you need to keep on creating website and social media posts. And keep on creating course content. It is important that you do both of these things consistently and don't focus all your attention on just one. This is to continually drive traffic to your skool group. And continually retain members.",[193,10600,10601],{},"You also need to nurture your community. This will be more important in the early days. When someone posts a comment, make sure you interact with them. Try and help them and ask questions. Eventually once you have a healthy amount of members - the community will interact with each other. But your involvement here is crucial in the beginning.",[219,10603,10605],{"id":10604},"monetise-how-to-make-money-on-skool","Monetise - how to make money on skool",[193,10607,10608],{},"If you have made it this far. Congratulations 🎉. You have layed the foundations and can now look at how to monetise your group! There are different approaches you can take. Some obvious, some less obvious. You may also have your own ideas of how to do this. The point to remember is that your skool group is a tool that you can use in whatever way that you think is the best.",[461,10610,10611],{},[464,10612,10613,10617,10618,10620,10621,10623,10625,10631,10633,10634,10636,10637,10639],{},[3849,10614,10616],{"id":10615},"charging-a-monthly-membership","Charging a monthly membership","The most obvious way of monetising your skool group is by charging a monthly subscription fee. This can be done simply by going into your group settings and setting the price that you want to charge.",[5038,10619],{},"I have noticed that many skool group owners have a free group and a separate paid for group. This can be good because you can advertise the paid for group to your free group members. The difference between the two groups is that the paid for one will offer more value than the free one. It's down to you how you decide to add more value. This could be in the form of more courses available. Or offering mentoring calls. It's completely up to you what you want to do.\n",[5038,10622],{},[5038,10624],{},[3831,10626,10628],{"id":10627},"pricing-your-monthly-membership-on-skool",[304,10629,10630],{},"Pricing your monthly membership on skool",[5038,10632],{},"Consider how valuable the information is that you are providing when deciding on a price. Do you want to have lots of members and charge a lower fee? Or have few members and charge a high fee?",[5038,10635],{},"This will depend on what it is you are offering. For example if you are offering one on one coaching then you aren't going to want to have thousands of members. You simply won't be able to cope. Instead you might want 20 members each paying $100 a month. On the flip side if you are able to do a live call with hundreds of members watching you could charge less for this.",[5038,10638],{},"Plug in your own numbers below to see what you could earn after Skool's fees.",[782,10641],{},[3849,10643,10645],{"id":10644},"using-affiliate-links","Using affiliate links",[193,10647,10648],{},"The next way you can make money on skool is by using affiliate links. Affiliate links are links that you use to refer someone to a product. If the link is clicked and the \"clicker\" goes on to make a purchase - you will make a commission on that sale.",[193,10650,10651],{},"There are many different affiliate programs out there. The key to success with this method is finding the right product fit for your group. An example of this might be an affiliate link for a hosting company when you have a group talking about how to make websites.",[3849,10653,10655],{"id":10654},"charge-for-services","Charge for services",[193,10657,10658],{},"Charging for services is another way that you can make money on skool.com. Being a group owner of a group with followers is an indicator that you are an expert in your field. This in itself is a credential for you. It is proof that you know what you are talking about. Let's say you have a web development group with a thousand members. An external person looking to hire a web developer will look at that and view you as an authority. This will also enable you to charge more for your services.",[193,10660,10661],{},"The service you offer will, of course, be specific to your niche. Consulting would be the obvious route to go down with this. Where people pay you for one on one calls.",[258,10663,10664,10670,10674,10679],{"orientation":261,"variant":263},[193,10665,10666],{},[265,10667],{"alt":10668,"src":10286,"className":10669},"Heard enough?",[269,270],[273,10671,10672],{"v-slot:title":262},[193,10673,10668],{},[273,10675,10676],{"v-slot:description":262},[193,10677,10678],{},"Create your Skool group for free. You have nothing to lose with a 14 day free trial!",[273,10680,10681],{"v-slot:links":262},[286,10682,10683],{"size":288,"target":262,"to":601,"variant":292},[193,10684,10411],{},[219,10686,10688],{"id":10687},"points-to-remember","Points to remember",[193,10690,10691],{},"It is important to keep these key points in the back of your mind at all times.",[1352,10693,10694,10701,10708],{},[464,10695,10696,10700],{},[3849,10697,10699],{"id":10698},"speed-is-important","Speed is important","Speed is important. What do I mean by this? Well, this one comes from experience. I am someone who has wasted a lot of time building projects that have never gone anywhere or even seen the light of day. Sometimes these projects have taken months to build and then just fizzled out. The quicker you build, the quicker you get results.",[464,10702,10703,10707],{},[3849,10704,10706],{"id":10705},"perfection-is-an-illusion","Perfection is an illusion","Perfection is simply not possible. So don't focus on this. Instead, focus on being decent and efficient. So create lots of good content, create a decent looking brand. But don't try to be perfect, because you will waste too much time in the process.",[464,10709,10710,10714],{},[3849,10711,10713],{"id":10712},"dont-get-bogged-down-in-minute-details","Don't get bogged down in minute details","Don't get bogged down in minute details. You may think the colour of your logo is the most important thing. But trust me, your members do not care that about it. Focus on what is important to your members, not what is important to you.",[193,10716,10717],{},"By following this process you will be on a strong path to making a success of your group on skool. Of course, there are no guarantees. And with most things in life, you get out what you put in. But the most important thing is that you give it a go. Because you miss 100% of the shots you don't take!",[258,10719,10720,10726,10731,10736],{"orientation":261,"variant":263},[193,10721,10722],{},[265,10723],{"alt":10724,"src":10286,"className":10725},"Want to see this strategy in action?",[269,270],[273,10727,10728],{"v-slot:title":262},[193,10729,10730],{},"Want to see this in action?",[273,10732,10733],{"v-slot:description":262},[193,10734,10735],{},"I don't just write about this stuff. I started my own community on Skool in August 2026, doing exactly what this guide describes. It's early days, so come and watch it grow from the start.",[273,10737,10738],{"v-slot:links":262},[286,10739,10740],{"size":288,"target":262,"to":290,"variant":292},[193,10741,10742],{},"See my community",{"title":262,"searchDepth":514,"depth":514,"links":10744},[10745,10751],{"id":10217,"depth":514,"text":10218,"children":10746},[10747,10748,10749,10750],{"id":10236,"depth":520,"text":10237},{"id":10243,"depth":520,"text":10244},{"id":10306,"depth":520,"text":10307},{"id":10376,"depth":520,"text":10377},{"id":10414,"depth":514,"text":10415,"children":10752},[10753,10754,10755,10756,10757,10758,10759,10760,10761,10762],{"id":10423,"depth":520,"text":10424},{"id":10467,"depth":520,"text":10468},{"id":10478,"depth":520,"text":10479},{"id":10499,"depth":520,"text":10500},{"id":10513,"depth":520,"text":10514},{"id":10527,"depth":520,"text":10528},{"id":10577,"depth":520,"text":10578},{"id":10594,"depth":520,"text":10595},{"id":10604,"depth":520,"text":10605},{"id":10687,"depth":520,"text":10688},[199],[535],"2024-02-23T00:00:00.000Z","How to make money on skool. A step by step guide on making a recurring monthly income using skool.com. There are different ways to make money on skool. This guide takes a look at some of the best and easiest methods.",{"src":10768},"/images/skool/how-to-make-money-on-skool.webp",{},[10771,10777],{"headline":10772,"description":10773,"image":10774,"datePublished":10775,"dateModified":10775,"author":10776,"@type":550},"How to Make Money on Skool: Step by Step Guide","A step by step guide on making a recurring monthly income using skool.com. Different ways to make money on Skool explained.","/images/wp/featured-how-to-make-money-on-skoolHow-to-make-money-on-skool-featured-image.webp","2024-02-23",{"name":178,"url":179,"@type":549},{"mainEntity":10778,"@type":571},[10779,10783,10786],{"name":10780,"acceptedAnswer":10781,"@type":558},"How much money can you make on Skool?",{"text":10782,"@type":557},"It depends on how much time and effort you put in. You can make money through monthly membership fees, affiliate commissions (40% recurring), selling products or services to your community, or using Skool to nurture leads for your business.",{"name":4379,"acceptedAnswer":10784,"@type":558},{"text":10785,"@type":557},"The main ways are: charging a monthly membership fee for your group, earning affiliate commissions by referring new users to Skool, selling products and services to your community, and using your group to build authority and attract clients.",{"name":10787,"acceptedAnswer":10788,"@type":558},"How long does it take to make money on Skool?",{"text":10789,"@type":557},"It depends on the individual. If you already have a following on another platform, you can start earning as soon as you have paying members. If you're starting from scratch, expect to spend a few months building your community and content before monetising.",{"title":10791,"description":10792,"ogTitle":10791,"ogDescription":10792,"twitterCard":576},"How to Make Money on Skool - 5 Methods That Actually Work","Step by step guide to making money on skool.com. Covers affiliate commissions, paid communities, course sales, and more. Real methods, not fluff.","3f56y9rou8cKu37l6l2KocL2sEQOPQYg9oqM2GlD13Y",{"id":10795,"title":149,"archived":175,"authors":10796,"badge":10799,"body":10800,"categories":10982,"categorySlugs":10983,"date":10984,"description":10985,"extension":538,"image":10986,"meta":10988,"navigation":542,"path":150,"schemaOrg":10989,"seo":10996,"stem":151,"__hash__":10999},"posts/3.blog/the-significance-of-alex-hormozis-involvement-with-skool.md",[10797],{"name":178,"to":179,"avatar":10798},{"src":181},{"label":199},{"type":185,"value":10801,"toc":10974},[10802,10806,10814,10820,10824,10827,10860,10863,10867,10870,10874,10877,10881,10884,10908,10912,10915,10919,10925,10929,10932,10943,10967],[188,10803,10805],{"id":10804},"the-significance-of-alex-hormozis-involvement-with-skool","The significance of Alex Hormozi's Involvement with Skool",[193,10807,10808,10809,10813],{},"Unless you've been living under a rock. You will be aware of Alex Hormozi's involvement with skool.com. News of his $200million investment swept over the internet like wildfire. With Hormozi himself pushing the community platform hard on ",[197,10810,10812],{"href":3858,"rel":10811},[317],"his YouTube channel",". Since the announcement was made he has been pushing his skool games challenge in particular.",[193,10815,10816,10817,10819],{},"But why should you care about any of this? After all, there are plenty of platforms and websites out there. Platforms that come and go all the time. Why should you care about skool more than any other website? If you're not sure ",[197,10818,3236],{"href":166},", start there. But let me explain why Hormozi's involvement matters.",[219,10821,10823],{"id":10822},"the-hormozi-factor-alex-hormozis-huge-following","The Hormozi factor - Alex Hormozi's huge following",[193,10825,10826],{},"Alex Hormozi has a huge following. At the time of writing this he has over 2 million subscribers on YouTube. And there is good reason for this.",[1352,10828,10829,10836,10843,10853],{},[464,10830,10831,10835],{},[3849,10832,10834],{"id":10833},"alex-hormozis-credentials","Alex Hormozi's Credentials","Alex Hormozi's credentials are undeniable. He has achieved extreme levels of financial success. This means he is worth listening to. He can back up what he is saying as he is the proof. He can literally say \"I did this, and it made me x amount of dollars.\" And you believe him.",[464,10837,10838,10842],{},[3849,10839,10841],{"id":10840},"relatable","Relatable","Alex has openly spoken about some of his life experiences that have moulded him. This has made him highly relatable. As we may have had similar experiences. This makes what he saying resonate with his followers even more.",[464,10844,10845,10849,10850,10852],{},[3849,10846,10848],{"id":10847},"knowledge-and-wisdom-with-sound-advice","Knowledge and wisdom with sound advice","The wisdom coming out of this guy is on another level. He is big on communication. Clear communication. Simple communication. He says that communication is the key to sales success. With the example being that if you run your website copy through a website that simplifies text, you will almost certainly improve sales.",[5038,10851],{},"His communication is crystal clear when he tells stories or proverbs. You come away thinking. Wow. That was incredibly obvious but I'd never though of it before. This is the power of his communication style. The stuff he says seems so obvious. But it is only obvious because he explains it so well. Allowing you to fully understand it.",[464,10854,10855,10859],{},[3849,10856,10858],{"id":10857},"keeps-it-real-doesnt-sugarcoat-anything","Keeps it real, doesn't sugarcoat anything","Alex Hormozi comes across as real and honest. He doesn't sugarcoat things. He doesn't give airy fairy advice. Often, people avoid this. They bury their heads in the sand. They don't want to hear the truth. They want to live in denial with the thought that \"everything will work itself out.\" The fact that Hormozi has such a following while still delivering the harsh truth, shows how targeted his audience is. They are motivated, driven individuals. Individuals that want the cold hard truth.",[193,10861,10862],{},"Now his follower numbers alone makes him a hugely influential figure. But there is more to it than that. Alex Hormozi resonates with his followers on a ridiculous level. His brand of advice is clear, direct and to the point. His audience is also highly specific. Business owners and entrepreneurs. More specifically, business owners and entrepreneurs looking to improve and make more money.",[219,10864,10866],{"id":10865},"is-alex-hormozi-a-business-genius","Is Alex Hormozi a business genius?",[193,10868,10869],{},"The short answer to this question is yes. Alex Hormozi continuously emphasises the importance of education. He is constantly reiterating this point. Saying how we can fast track our success by learning from others. He talks regularly about the importance in investing in our education. Specifically he talks a lot about online courses. And how it is worthwhile paying for knowledge.",[3849,10871,10873],{"id":10872},"the-perfect-fit","The perfect fit",[193,10875,10876],{},"This ties in perfectly with the premise of skool. Skool is literally an online education platform. Now Alex Hormozi has a following on over 2 million subscribers, on YouTube alone. He knows these followers are on the same page as him. So are therefore likely to invest in their education. This is why skool is destined to be huge.",[3849,10878,10880],{"id":10879},"hormozi-the-ultra-influencer","Hormozi the ultra influencer",[193,10882,10883],{},"Hormozi is now an ultra influencer. He has the perfect product and the perfect audience. Pairing this with his unbelievable ability to sell. It's going to be dangerous. Whether we like it or not, this is a huge opportunity. And now is the perfect time make the most of it.",[258,10885,10886,10892,10896,10901],{"orientation":261,"variant":263},[193,10887,10888],{},[265,10889],{"alt":10890,"className":10891,"src":4029},"Be an early adopter!",[269,270],[273,10893,10894],{"v-slot:title":262},[193,10895,10890],{},[273,10897,10898],{"v-slot:description":262},[193,10899,10900],{},"Create your own group on skool while the opportunity is still huge",[273,10902,10903],{"v-slot:links":262},[286,10904,10905],{"size":288,"target":262,"to":601,"variant":292},[193,10906,10907],{},"Create group",[219,10909,10911],{"id":10910},"the-early-bird-catches-the-worm","The Early bird catches the worm",[193,10913,10914],{},"While it is true that skool.com has been around since 2019. Most people have only became aware of it in late 2023. This is for the reasons mentioned above surrounding Alex Hormozi. The platform has exploded in terms of user numbers, with over 170,000 communities now on the platform. But what does this mean? Well it means there is still room to grow. It is the time to be an \"early adopter\" of the platform. By getting in early, you have a real chance of growing something big. And establishing yourself as an authority on the site.",[3849,10916,10918],{"id":10917},"become-an-authority-on-skool","Become an authority on skool",[193,10920,10921,10922,10924],{},"Now is the perfect time to ",[197,10923,10383],{"href":601},". By getting involved now, you have a good chance of growing a group to a high level. This is because of the influx of new users heading to the platform.",[219,10926,10928],{"id":10927},"is-skool-all-hype","Is skool all hype?",[193,10930,10931],{},"So is skool all hype? Or is it something you should be taking notice of> Well, here's my take on this. Alex Hormozi has publicly said that he will not endorse a company unless he fully believes in. This is because he has his reputation on the line. And therefore has a lot to lose if something goes wrong with that company. He is of the opinion that any company he endorses has a lot more to gain than he does. And on the flip side he has a lot more to lose than them, in terms of reputation.",[193,10933,10934,10935,10938,10939,10942],{},"For this reason alone, I feel that getting involved in skool is a good bet. Check out ",[197,10936,10937],{"href":130},"my review of skool"," if you want to see what I really think. Of course there are no guarantees in this world. But if you look at what's going on in front of you, you can make a decision for yourself. I have also created a step by step guide on ",[197,10940,10941],{"href":66},"how to make money on skool",". I personally will be getting involved in skool. It appears to me to be one of those rare opportunities that we should be grabbing with both hands. So as long as Alex Hormozi is wearing a tatty looking hat with the word \"skool\" on it. I'm going to be involved.",[258,10944,10945,10951,10955,10960],{"orientation":261,"variant":263},[193,10946,10947],{},[265,10948],{"alt":10949,"className":10950,"src":4029},"Looking for the opportunity of the decade?",[269,270],[273,10952,10953],{"v-slot:title":262},[193,10954,10949],{},[273,10956,10957],{"v-slot:description":262},[193,10958,10959],{},"Skool is predicted to become the next Facebook. With the Sam Ovens aiming for 1 billion users! Get in now while the opportunity is still huge",[273,10961,10962],{"v-slot:links":262},[286,10963,10964],{"size":288,"target":262,"to":601,"variant":292},[193,10965,10966],{},"Get started free",[193,10968,10969,10970,10973],{},"Check out my ",[197,10971,10972],{"href":66},"step by step guide"," on how to make money with skool.",{"title":262,"searchDepth":514,"depth":514,"links":10975},[10976],{"id":10804,"depth":514,"text":10805,"children":10977},[10978,10979,10980,10981],{"id":10822,"depth":520,"text":10823},{"id":10865,"depth":520,"text":10866},{"id":10910,"depth":520,"text":10911},{"id":10927,"depth":520,"text":10928},[199],[535],"2024-02-21T00:00:00.000Z","Alex Hormozi has invested $200 million in skool. But why is this significant?  And why should you care about skool more than any other website? Let me explain.",{"src":10987},"/images/skool/the-significance-of-alex-hormozis-involvement-with-skool.webp",{},[10990],{"headline":10991,"description":10992,"image":10993,"datePublished":10994,"dateModified":10994,"author":10995,"@type":550},"The Significance of Alex Hormozi's Involvement with Skool","Why Alex Hormozi's investment in skool.com is significant and why you should care about the platform.","/images/wp/featured-the-significance-of-alex-hormozis-involvement-with-skoolskool-cta-image.webp","2024-02-21",{"name":178,"url":179,"@type":549},{"title":10997,"description":10998,"ogTitle":10997,"ogDescription":10998,"twitterCard":576},"The significance of Alex Hormozi's Involvement with Skool - Codingoblin","Why is Alex Hormozi's involvement with skool.com significant? Hormozi has made a bold move with skool. Find out why its so important.","6k-iG6m8xVvRl5jcf-sWLieh-GdfU1lfA0o7j6c3hh0",{"id":11001,"title":57,"archived":175,"authors":11002,"badge":11005,"body":11006,"categories":11192,"categorySlugs":11193,"date":11194,"description":11195,"extension":538,"image":11196,"meta":11198,"navigation":542,"path":58,"schemaOrg":4854,"seo":11199,"stem":59,"__hash__":11202},"posts/3.blog/error-ziggy-error-route-is-not-in-the-route-list.md",[11003],{"name":178,"to":179,"avatar":11004},{"src":181},{"label":7090},{"type":185,"value":11007,"toc":11186},[11008,11012,11015,11183],[188,11009,11011],{"id":11010},"how-to-fix-error-ziggy-error-route-your-route-is-not-in-the-route-list-error","How to fix \"Error: Ziggy error: route 'your-route' is not in the route list\" error",[193,11013,11014],{},"If you are encountering the error \"Error: Ziggy error: route 'your-route' is not in the route list\" the solutions is most likely very simple. This is an error I came across when using Laravel with Inertia.js and Vue.js. There are a couple of things you need to check to get this sorted.",[4875,11016,11018,11022,11025,11041,11045,11048,11082,11085,11128,11131,11134,11176],{"video-id":11017},"nBv-W5mchTk",[219,11019,11021],{"id":11020},"how-to-resolve-error-ziggy-error-route-your-route-is-not-in-the-route-list-error","How to resolve Error: Ziggy error: route 'your-route' is not in the route list error",[193,11023,11024],{},"If you are trying to resolve the Error: Ziggy error: route 'your-route' is not in the route list error, this is what you need to do:",[1352,11026,11027,11034],{},[464,11028,11029,11033],{},[3849,11030,11032],{"id":11031},"check-the-route-name-actually-exists","Check the route name actually exists","I'm sure you have checked this already. But check that the route does actually exist. Make sure the name is EXACTLY the same. Check for a typo. I know it sounds obvious. But often it is something obvious!",[464,11035,11036,11040],{},[3849,11037,11039],{"id":11038},"check-the-route-path","Check the route path","The issue for me was that I had copied a route and pasted it. I had then changed the name of my copied route. However the original route and the newly created route both had the same url and request method. This meant that whilst it looked like the route did exist. It was getting overwritten by my newly created route. Simple solution is to change the url in the new route!",[219,11042,11044],{"id":11043},"example-of-how-this-error-occurs","Example of how this error occurs",[193,11046,11047],{},"So you have a nice working route looking like this:",[5190,11049,11053],{"className":11050,"code":11051,"filename":11052,"language":7706,"meta":262,"style":262},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","...\n\nRoute::middleware(['auth:sanctum', 'verified'])->get('adverts', [AdvertController::class, 'index'])\n    ->name('advert');\n\n...\n","routes.php",[5182,11054,11055,11060,11064,11069,11074,11078],{"__ignoreMap":262},[3736,11056,11057],{"class":5199,"line":5200},[3736,11058,11059],{},"...\n",[3736,11061,11062],{"class":5199,"line":514},[3736,11063,5215],{"emptyLinePlaceholder":542},[3736,11065,11066],{"class":5199,"line":520},[3736,11067,11068],{},"Route::middleware(['auth:sanctum', 'verified'])->get('adverts', [AdvertController::class, 'index'])\n",[3736,11070,11071],{"class":5199,"line":5244},[3736,11072,11073],{},"    ->name('advert');\n",[3736,11075,11076],{"class":5199,"line":5265},[3736,11077,5215],{"emptyLinePlaceholder":542},[3736,11079,11080],{"class":5199,"line":5292},[3736,11081,11059],{},[193,11083,11084],{},"Then you copy the route and paste it to create a new similar route. You rename the route and your routes/web.php file looks like this:",[5190,11086,11088],{"className":11050,"code":11087,"filename":11052,"language":7706,"meta":262,"style":262},"...\n\nRoute::middleware(['auth:sanctum', 'verified'])->get('adverts', [AdvertController::class, 'index'])\n    ->name('adverts');\n\nRoute::middleware(['auth:sanctum', 'verified'])->get('adverts', [AdvertController::class, 'index'])\n    ->name('adverts.my_adverts');\n\n...\n",[5182,11089,11090,11094,11098,11102,11107,11111,11115,11120,11124],{"__ignoreMap":262},[3736,11091,11092],{"class":5199,"line":5200},[3736,11093,11059],{},[3736,11095,11096],{"class":5199,"line":514},[3736,11097,5215],{"emptyLinePlaceholder":542},[3736,11099,11100],{"class":5199,"line":520},[3736,11101,11068],{},[3736,11103,11104],{"class":5199,"line":5244},[3736,11105,11106],{},"    ->name('adverts');\n",[3736,11108,11109],{"class":5199,"line":5265},[3736,11110,5215],{"emptyLinePlaceholder":542},[3736,11112,11113],{"class":5199,"line":5292},[3736,11114,11068],{},[3736,11116,11117],{"class":5199,"line":5302},[3736,11118,11119],{},"    ->name('adverts.my_adverts');\n",[3736,11121,11122],{"class":5199,"line":5312},[3736,11123,5215],{"emptyLinePlaceholder":542},[3736,11125,11126],{"class":5199,"line":5322},[3736,11127,11059],{},[193,11129,11130],{},"Everything seems fine. You have 2 routes with different names. But now you are encountering the Error: Ziggy error: route 'your-route' is not in the route list error.",[193,11132,11133],{},"The reason for this is that both routes are for GET requests, and they both have the same path! Simply changing the path of the second route will sort the problem out:",[5190,11135,11137],{"className":11050,"code":11136,"filename":11052,"language":7706,"meta":262,"style":262},"...\n\nRoute::middleware(['auth:sanctum', 'verified'])->get('adverts', [AdvertController::class, 'index'])\n    ->name('adverts');\n\nRoute::middleware(['auth:sanctum', 'verified'])->get('my-adverts', [AdvertController::class, 'index'])\n    ->name('adverts.my_adverts');\n\n...\n",[5182,11138,11139,11143,11147,11151,11155,11159,11164,11168,11172],{"__ignoreMap":262},[3736,11140,11141],{"class":5199,"line":5200},[3736,11142,11059],{},[3736,11144,11145],{"class":5199,"line":514},[3736,11146,5215],{"emptyLinePlaceholder":542},[3736,11148,11149],{"class":5199,"line":520},[3736,11150,11068],{},[3736,11152,11153],{"class":5199,"line":5244},[3736,11154,11106],{},[3736,11156,11157],{"class":5199,"line":5265},[3736,11158,5215],{"emptyLinePlaceholder":542},[3736,11160,11161],{"class":5199,"line":5292},[3736,11162,11163],{},"Route::middleware(['auth:sanctum', 'verified'])->get('my-adverts', [AdvertController::class, 'index'])\n",[3736,11165,11166],{"class":5199,"line":5302},[3736,11167,11119],{},[3736,11169,11170],{"class":5199,"line":5312},[3736,11171,5215],{"emptyLinePlaceholder":542},[3736,11173,11174],{"class":5199,"line":5322},[3736,11175,11059],{},[193,11177,11178,11179,11182],{},"Hope you're having a good day. Check out ",[197,11180,4941],{"href":179,"rel":11181},[317]," if you have a spare 5 mins 🙂",[5594,11184,11185],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":262,"searchDepth":514,"depth":514,"links":11187},[11188],{"id":11010,"depth":514,"text":11011,"children":11189},[11190,11191],{"id":11020,"depth":520,"text":11021},{"id":11043,"depth":520,"text":11044},[7758,7759,5610],[7761,7762,5613],"2024-02-16T00:00:00.000Z","How to fix “Error: Ziggy error: route is not in the route list” error. Common error in Laravel with Inertia.js and Vue.js. Easy simple fix! You will kick yourself.",{"src":11197},"/images/wp/featured-error-ziggy-error-route-is-not-in-the-route-listError-Ziggy-error-route-is-not-in-the-route-list-thumbnail.webp",{},{"title":11200,"description":11201,"ogTitle":11200,"ogDescription":11201,"twitterCard":576},"Error: Ziggy error: route is not in the route list - Codingoblin","How to fix \"Error: Ziggy error: route is not in the route list\" error. Common error in Laravel with Inertia.js and Vue.js. Easy simple fix!","wgt7IiY_2aFjf6XdCsN6r5vVOXNG1HyujpvcaPN03ss",{"id":11204,"title":145,"archived":175,"authors":11205,"badge":11208,"body":11209,"categories":11857,"categorySlugs":11858,"date":11859,"description":11860,"extension":538,"image":11861,"meta":11863,"navigation":542,"path":146,"schemaOrg":4854,"seo":11864,"stem":147,"__hash__":11867},"posts/3.blog/tailwindui-components-in-html.md",[11206],{"name":178,"to":179,"avatar":11207},{"src":181},{"label":5609},{"type":185,"value":11210,"toc":11849},[11211,11215,11218,11846],[188,11212,11214],{"id":11213},"tailwind-ui-components-with-html","Tailwind UI components with HTML",[193,11216,11217],{},"Let's look at how to use Tailwind UI in HTML. Tailwind UI is an amazing component library that makes the life of a developer a lot easier. When used in a Vue.js or React project, all the javascript you need to make these components work is already built in. However, when we want to use Tailwind UI in a HTML project we have to add our own javascript. This can seem daunting if you don't know what you are doing. Luckily it is really easy to do! So lets take a look at exactly how to do it.",[4875,11219,11221,11225,11233,11236,11240,11243,11247,11250,11254,11265,11269,11278,11281,11347,11353,11356,11360,11378,11381,11385,11389,11392,11395,11404,11407,11428,11431,11481,11484,11492,11495,11519,11533,11826,11835,11838],{"video-id":11220},"fqBaJtyJYcc",[219,11222,11224],{"id":11223},"method-recommended-by-the-tailwind-ui-team","Method recommended by the Tailwind UI team",[193,11226,11227,11228],{},"So you want to use Tailwind UI components in your HTML project. But where do you start? There are a million and one different ways to complete a coding task. We could write our own javascript from scratch. But that is time consuming and for losers. Our best bet is to use the method recommended on ",[197,11229,11232],{"href":11230,"rel":11231},"https://tailwindui.com/documentation#using-html-and-your-own-js",[317],"here on the Tailwind UI website.",[193,11234,11235],{},"It is recommended that you use Alpine.js to add the required javascript to your Tailwind UI components. It is worth noting that not all components will require javascript. Thankfully 😅",[3849,11237,11239],{"id":11238},"what-is-alpinejs","What is Alpine.js?",[193,11241,11242],{},"Alpine.js describes itself as \"a rugged, minimal tool for composing behavior directly in your markup.\" Simply put - it makes it really easy to add javascript functionality to Tailwind UI components. The beauty of Alpine.js is we can write all of the required code directly in our HTML markup! Honestly once you start using it for 5 minutes your mind will be blown.",[219,11244,11246],{"id":11245},"how-to-hook-up-alpinejs-to-your-tailwind-ui-components","How to hook up Alpine.js to your Tailwind UI components",[193,11248,11249],{},"We are going to create a very simple version of a HTML project with just 2 files. An index.php file and a nav.php file. For our example we will create a nav component using Tailwind UI.",[3849,11251,11253],{"id":11252},"make-sure-we-have-installed-tailwindcss","Make sure we have installed TailwindCSS",[193,11255,11256,11257,11261,11262],{},"To get started we need to make sure we have installed TailwindCSS. The easiest way to do this is via the cdn. Installation instructions can be found in the ",[197,11258,11260],{"href":5162,"rel":11259},[317],"Tailwind docs",". For simple HTML projects I recommend using the Play CDN method of installation. Or use this method if you are ",[197,11263,11264],{"href":74},"installing TailwindCSS in WordPress.",[3849,11266,11268],{"id":11267},"install-alpinejs","Install Alpine.js",[193,11270,11271,11272,11277],{},"You also need to have Alpine.js installed. Instructions can be found on ",[197,11273,11276],{"href":11274,"rel":11275},"https://alpinejs.dev/essentials/installation",[317],"the Alpine.js installation page."," But if you are using the cdn its literally a case of pasting the script into your head.",[193,11279,11280],{},"This is what my index.php file looks like:",[5190,11282,11285],{"className":11050,"code":11283,"filename":11284,"language":7706,"meta":262,"style":262},"\u003Chtml>\n    \u003Chead>\n        \u003Cmeta charset=\"UTF-8\">\n        \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        \u003Cscript src=\"https://cdn.tailwindcss.com\">\u003C/script>\n        \u003Cscript src=\"//unpkg.com/alpinejs\" defer>\u003C/script>\n    \u003C/head>\n    \u003Cbody>\n        \u003C?php require_once('./nav.php'); ?>\n        \u003Ch1>Tailwind UI with HTML\u003C/h1>\n    \u003C/body>\n\u003C/html>\n","index.php",[5182,11286,11287,11292,11297,11302,11307,11312,11317,11322,11327,11332,11337,11342],{"__ignoreMap":262},[3736,11288,11289],{"class":5199,"line":5200},[3736,11290,11291],{},"\u003Chtml>\n",[3736,11293,11294],{"class":5199,"line":514},[3736,11295,11296],{},"    \u003Chead>\n",[3736,11298,11299],{"class":5199,"line":520},[3736,11300,11301],{},"        \u003Cmeta charset=\"UTF-8\">\n",[3736,11303,11304],{"class":5199,"line":5244},[3736,11305,11306],{},"        \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[3736,11308,11309],{"class":5199,"line":5265},[3736,11310,11311],{},"        \u003Cscript src=\"https://cdn.tailwindcss.com\">\u003C/script>\n",[3736,11313,11314],{"class":5199,"line":5292},[3736,11315,11316],{},"        \u003Cscript src=\"//unpkg.com/alpinejs\" defer>\u003C/script>\n",[3736,11318,11319],{"class":5199,"line":5302},[3736,11320,11321],{},"    \u003C/head>\n",[3736,11323,11324],{"class":5199,"line":5312},[3736,11325,11326],{},"    \u003Cbody>\n",[3736,11328,11329],{"class":5199,"line":5322},[3736,11330,11331],{},"        \u003C?php require_once('./nav.php'); ?>\n",[3736,11333,11334],{"class":5199,"line":5327},[3736,11335,11336],{},"        \u003Ch1>Tailwind UI with HTML\u003C/h1>\n",[3736,11338,11339],{"class":5199,"line":5340},[3736,11340,11341],{},"    \u003C/body>\n",[3736,11343,11344],{"class":5199,"line":5361},[3736,11345,11346],{},"\u003C/html>\n",[11348,11349,11350],"warning",{},[193,11351,11352],{},"The \"viewport\" meta tag is important. If you don't include this its likely your page is going to look properly messed up",[193,11354,11355],{},"We now have TailwindCSS and Alpine.js installed. This means we are ready to get started!",[219,11357,11359],{"id":11358},"create-the-tailwind-ui-component","Create the Tailwind UI component",[193,11361,11362,11363,11368,11369,11374,11375,11377],{},"Head over to the ",[197,11364,11367],{"href":11365,"rel":11366},"https://tailwindui.com/components",[317],"Tailwind UI components page",". Find a component you want to use. In our example we will use the first Navbar on the ",[197,11370,11373],{"href":11371,"rel":11372},"https://tailwindui.com/components/application-ui/navigation/navbars",[317],"navbars page",". The reason for this is that it is a free to use component. So I am not at risk of giving away information that is meant to be paid for! If you don't have a paid for account, check out my ",[197,11376,10163],{"href":142}," if you are wondering if its worth buying.",[193,11379,11380],{},"Make sure that you are viewing the HTML version of the component (check that the drop down menu says HTML). Now copy the code and paste it into your project. In our case into the nav.php file. We are making good progress. If you save the nav.php file and view your website in the browser you should see the navbar displayed. However, if you shrink the page down, you will notice that the menu is not responsive. This is responsive by default with the Vue.js and React versions. But with HTML we need to add the functionality in ourself. This is where Alpine.js shines...",[219,11382,11384],{"id":11383},"add-some-alpinejs-magic","Add some Alpine.js magic",[3849,11386,11388],{"id":11387},"alpinejs-is-mind-bogglingly-easy-to-use","Alpine.js is mind bogglingly easy to use",[193,11390,11391],{},"How Alpine.js is not more well know and spoken about, I do not know. Simply put, it's amazing. If you have ever created a responsive navbar before using plain javascript. Just try it with Alpine.js. Seriously, it will blow your mind how simple it is.",[3849,11393,11394],{"id":11394},"x-data",[193,11396,11397,11398,11403],{},"The first step we need to take in making our navbar responsive is by adding the x-data directive to it. The x-data directive \"defines a chunk of HTML as an Alpine component and provides the reactive data for that component to reference.\" See the ",[197,11399,11402],{"href":11400,"rel":11401},"https://alpinejs.dev/directives/data",[317],"Alpine.js x-data page for a full explanation."," What you need to know is that if we define an x-data object on an HTML element. Then we can access that data anywhere within that HTML element.",[193,11405,11406],{},"In our case we will define an x-data element with 2 properties. These 2 properties will both have Boolean values. This is because these are going to contain the states of both the mobile nav menu and the other dropdown menu within the navbar:",[11408,11409,11410,11420],"field-group",{},[6531,11411,11414],{"name":11412,"type":11413},"open","boolean",[193,11415,11416,11417,11419],{},"Default to ",[5182,11418,6216],{}," - Enables analytics for your project (coming soon).",[6531,11421,11423],{"name":11422,"type":11413},"dropdown_open",[193,11424,11416,11425,11427],{},[5182,11426,6216],{}," - This will determine if the other dropdown menu is open or closed.",[193,11429,11430],{},"We are also going to make sure we put this x-data directive on the outer element of our navbar. It should look like this:",[5190,11432,11434],{"className":5192,"code":11433,"language":5194,"meta":262,"style":262},"\u003Cnav class=\"bg-gray-800\" x-data=\"{ open: false, dropdown_open: false }\">\n    ...\n\u003C/nav>\n",[5182,11435,11436,11468,11473],{"__ignoreMap":262},[3736,11437,11438,11440,11443,11445,11447,11449,11452,11454,11457,11459,11461,11464,11466],{"class":5199,"line":5200},[3736,11439,5204],{"class":5203},[3736,11441,11442],{"class":5207},"nav",[3736,11444,5227],{"class":5226},[3736,11446,5230],{"class":5203},[3736,11448,5233],{"class":5203},[3736,11450,11451],{"class":5236},"bg-gray-800",[3736,11453,5233],{"class":5203},[3736,11455,11456],{"class":5226}," x-data",[3736,11458,5230],{"class":5203},[3736,11460,5233],{"class":5203},[3736,11462,11463],{"class":5236},"{ open: false, dropdown_open: false }",[3736,11465,5233],{"class":5203},[3736,11467,5210],{"class":5203},[3736,11469,11470],{"class":5199,"line":514},[3736,11471,11472],{"class":5283},"    ...\n",[3736,11474,11475,11477,11479],{"class":5199,"line":520},[3736,11476,5315],{"class":5203},[3736,11478,11442],{"class":5207},[3736,11480,5210],{"class":5203},[3849,11482,11483],{"id":11483},"x-bind",[193,11485,11486,11487,11491],{},"Our navbar contains a button with 2 svg icons. These are the burger icon to open the nave menu, and an x icon to close it. When the nav menu is closed we want to display the burger icon and hide the x icon. When it is open we want to display the x icon and hide the burger icon. To do this we will use ",[197,11488,11483],{"href":11489,"rel":11490},"https://alpinejs.dev/directives/bind",[317]," to bind specific classes to each icon depending on the state of our 'open' x-data property.",[193,11493,11494],{},"Tailwind UI make this very obvious by telling us which classes to display with which state.",[461,11496,11497,11508],{},[464,11498,11499,11500],{},"Burger icon",[461,11501,11502,11505],{},[464,11503,11504],{},"When open == true bind 'hidden' class",[464,11506,11507],{},"When open == false bind 'block' class",[464,11509,11510,11511],{},"x icon",[461,11512,11513,11516],{},[464,11514,11515],{},"When open == true bind 'block' class",[464,11517,11518],{},"When open == false bind 'hidden' class",[193,11520,11521,11522,11525,11526,3083,11529,11532],{},"We can implement this by using the shorthand syntax. This is done by using a colon in front of class like ",[5182,11523,11524],{},":class",". We also want to remove the ",[5182,11527,11528],{},"hidden",[5182,11530,11531],{},"block"," classes that are on our svg icons by default.",[5190,11534,11536],{"className":5192,"code":11535,"language":5194,"meta":262,"style":262},"    ...\n\n        \u003C!--\n            Icon when menu is closed.\n\n            Menu open: \"hidden\", Menu closed: \"block\"\n        -->\n        \u003Csvg class=\"h-6 w-6\" :class=\"open ? 'hidden' : 'block'\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n            \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n        \u003C/svg>\n        \u003C!--\n            Icon when menu is open.\n\n            Menu open: \"block\", Menu closed: \"hidden\"\n        -->\n        \u003Csvg x-cloak class=\"h-6 w-6\" :class=\"open ? 'block' : 'hidden'\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n            \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n        \u003C/svg>\n\n    ...\n",[5182,11537,11538,11542,11546,11552,11557,11561,11566,11571,11673,11678,11686,11690,11695,11699,11704,11708,11805,11810,11818,11822],{"__ignoreMap":262},[3736,11539,11540],{"class":5199,"line":5200},[3736,11541,11472],{"class":5283},[3736,11543,11544],{"class":5199,"line":514},[3736,11545,5215],{"emptyLinePlaceholder":542},[3736,11547,11548],{"class":5199,"line":520},[3736,11549,11551],{"class":11550},"sHwdD","        \u003C!--\n",[3736,11553,11554],{"class":5199,"line":5244},[3736,11555,11556],{"class":11550},"            Icon when menu is closed.\n",[3736,11558,11559],{"class":5199,"line":5265},[3736,11560,5215],{"emptyLinePlaceholder":542},[3736,11562,11563],{"class":5199,"line":5292},[3736,11564,11565],{"class":11550},"            Menu open: \"hidden\", Menu closed: \"block\"\n",[3736,11567,11568],{"class":5199,"line":5302},[3736,11569,11570],{"class":11550},"        -->\n",[3736,11572,11573,11575,11577,11579,11581,11583,11586,11588,11590,11593,11595,11597,11600,11603,11605,11607,11609,11611,11613,11615,11617,11619,11621,11623,11625,11627,11629,11631,11633,11635,11637,11639,11641,11643,11646,11648,11651,11653,11655,11658,11660,11663,11665,11667,11669,11671],{"class":5199,"line":5312},[3736,11574,5247],{"class":5203},[3736,11576,9696],{"class":5207},[3736,11578,5227],{"class":5226},[3736,11580,5230],{"class":5203},[3736,11582,5233],{"class":5203},[3736,11584,11585],{"class":5236},"h-6 w-6",[3736,11587,5233],{"class":5203},[3736,11589,5273],{"class":5203},[3736,11591,11592],{"class":5226},"class",[3736,11594,5230],{"class":5203},[3736,11596,5233],{"class":5203},[3736,11598,11599],{"class":5283},"open ",[3736,11601,11602],{"class":5203},"?",[3736,11604,5528],{"class":5203},[3736,11606,11528],{"class":5236},[3736,11608,6412],{"class":5203},[3736,11610,5273],{"class":5203},[3736,11612,5528],{"class":5203},[3736,11614,11531],{"class":5236},[3736,11616,6427],{"class":5203},[3736,11618,9711],{"class":5226},[3736,11620,5230],{"class":5203},[3736,11622,5233],{"class":5203},[3736,11624,9718],{"class":5236},[3736,11626,5233],{"class":5203},[3736,11628,9723],{"class":5226},[3736,11630,5230],{"class":5203},[3736,11632,5233],{"class":5203},[3736,11634,9730],{"class":5236},[3736,11636,5233],{"class":5203},[3736,11638,9774],{"class":5226},[3736,11640,5230],{"class":5203},[3736,11642,5233],{"class":5203},[3736,11644,11645],{"class":5236},"1.5",[3736,11647,5233],{"class":5203},[3736,11649,11650],{"class":5226}," stroke",[3736,11652,5230],{"class":5203},[3736,11654,5233],{"class":5203},[3736,11656,11657],{"class":5236},"currentColor",[3736,11659,5233],{"class":5203},[3736,11661,11662],{"class":5226}," aria-hidden",[3736,11664,5230],{"class":5203},[3736,11666,5233],{"class":5203},[3736,11668,260],{"class":5236},[3736,11670,5233],{"class":5203},[3736,11672,5210],{"class":5203},[3736,11674,11675],{"class":5199,"line":5322},[3736,11676,11677],{"class":5283},"            \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n",[3736,11679,11680,11682,11684],{"class":5199,"line":5327},[3736,11681,5295],{"class":5203},[3736,11683,9696],{"class":5207},[3736,11685,5210],{"class":5203},[3736,11687,11688],{"class":5199,"line":5340},[3736,11689,11551],{"class":11550},[3736,11691,11692],{"class":5199,"line":5361},[3736,11693,11694],{"class":11550},"            Icon when menu is open.\n",[3736,11696,11697],{"class":5199,"line":5373},[3736,11698,5215],{"emptyLinePlaceholder":542},[3736,11700,11701],{"class":5199,"line":5382},[3736,11702,11703],{"class":11550},"            Menu open: \"block\", Menu closed: \"hidden\"\n",[3736,11705,11706],{"class":5199,"line":6676},[3736,11707,11570],{"class":11550},[3736,11709,11710,11712,11714,11717,11719,11721,11723,11725,11727,11729,11731,11733,11735,11737,11739,11741,11743,11745,11747,11749,11751,11753,11755,11757,11759,11761,11763,11765,11767,11769,11771,11773,11775,11777,11779,11781,11783,11785,11787,11789,11791,11793,11795,11797,11799,11801,11803],{"class":5199,"line":6681},[3736,11711,5247],{"class":5203},[3736,11713,9696],{"class":5207},[3736,11715,11716],{"class":5226}," x-cloak",[3736,11718,5227],{"class":5226},[3736,11720,5230],{"class":5203},[3736,11722,5233],{"class":5203},[3736,11724,11585],{"class":5236},[3736,11726,5233],{"class":5203},[3736,11728,5273],{"class":5203},[3736,11730,11592],{"class":5226},[3736,11732,5230],{"class":5203},[3736,11734,5233],{"class":5203},[3736,11736,11599],{"class":5283},[3736,11738,11602],{"class":5203},[3736,11740,5528],{"class":5203},[3736,11742,11531],{"class":5236},[3736,11744,6412],{"class":5203},[3736,11746,5273],{"class":5203},[3736,11748,5528],{"class":5203},[3736,11750,11528],{"class":5236},[3736,11752,6427],{"class":5203},[3736,11754,9711],{"class":5226},[3736,11756,5230],{"class":5203},[3736,11758,5233],{"class":5203},[3736,11760,9718],{"class":5236},[3736,11762,5233],{"class":5203},[3736,11764,9723],{"class":5226},[3736,11766,5230],{"class":5203},[3736,11768,5233],{"class":5203},[3736,11770,9730],{"class":5236},[3736,11772,5233],{"class":5203},[3736,11774,9774],{"class":5226},[3736,11776,5230],{"class":5203},[3736,11778,5233],{"class":5203},[3736,11780,11645],{"class":5236},[3736,11782,5233],{"class":5203},[3736,11784,11650],{"class":5226},[3736,11786,5230],{"class":5203},[3736,11788,5233],{"class":5203},[3736,11790,11657],{"class":5236},[3736,11792,5233],{"class":5203},[3736,11794,11662],{"class":5226},[3736,11796,5230],{"class":5203},[3736,11798,5233],{"class":5203},[3736,11800,260],{"class":5236},[3736,11802,5233],{"class":5203},[3736,11804,5210],{"class":5203},[3736,11806,11807],{"class":5199,"line":6695},[3736,11808,11809],{"class":5283},"            \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n",[3736,11811,11812,11814,11816],{"class":5199,"line":6721},[3736,11813,5295],{"class":5203},[3736,11815,9696],{"class":5207},[3736,11817,5210],{"class":5203},[3736,11819,11820],{"class":5199,"line":6747},[3736,11821,5215],{"emptyLinePlaceholder":542},[3736,11823,11824],{"class":5199,"line":6753},[3736,11825,11472],{"class":5283},[193,11827,11828,11829,11834],{},"Use ",[197,11830,11833],{"href":11831,"rel":11832},"https://alpinejs.dev/directives/cloak",[317],"x-cloak"," to stop the icons 'blipping' up when the page loads. We can use this on any icons that do this. We just need to remember to include the following in a stylesheet: [x-cloak] { display: none !important; }",[3849,11836,11837],{"id":11837},"x-show",[193,11839,11840,11841,11845],{},"Now we need to add the ",[197,11842,11837],{"href":11843,"rel":11844},"https://alpinejs.dev/directives/show",[317]," directive to some elements in our navbar. The x-show directive will look at the value of the property you pass to it. If the property value is true, it will display the element. If the value if false, it will hide the element.",[5594,11847,11848],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":262,"searchDepth":514,"depth":514,"links":11850},[11851],{"id":11213,"depth":514,"text":11214,"children":11852},[11853,11854,11855,11856],{"id":11223,"depth":520,"text":11224},{"id":11245,"depth":520,"text":11246},{"id":11358,"depth":520,"text":11359},{"id":11383,"depth":520,"text":11384},[5609],[5612],"2024-02-15T00:00:00.000Z","How to use Tailwind UI components in HTML / PHP / WordPress projects. How to add javascript as recommended by the team at Tailwind UI.",{"src":11862},"/images/wp/featured-tailwindui-components-in-htmltailwindui-with-html-thumbnail2.webp",{},{"title":11865,"description":11866,"ogTitle":11865,"ogDescription":11866,"twitterCard":576},"Tailwind UI components with HTML [Add JAVASCRIPT]","Use the HTML components from Tailwind UI. How to add Javascript to your components. Method recommended by Tailwind using Alpine.js","3YIMseJioY7xsYHFQHbeIMhVJ3klIoCXD5XloIwog0s",{"id":11869,"title":89,"archived":542,"authors":11870,"badge":11873,"body":11874,"categories":11977,"categorySlugs":11978,"date":11979,"description":11980,"extension":538,"image":11981,"meta":11983,"navigation":542,"path":90,"schemaOrg":4854,"seo":11984,"stem":91,"__hash__":11987},"posts/3.blog/nicely-designed-loft-conversion-websites.md",[11871],{"name":178,"to":179,"avatar":11872},{"src":181},{"label":10192},{"type":185,"value":11875,"toc":11970},[11876,11880,11883,11887,11890,11894,11904,11907,11911,11920,11926,11929,11938,11944,11953,11957,11964],[188,11877,11879],{"id":11878},"loft-conversion-websites-that-actually-look-nice","Loft Conversion websites that actually look nice",[193,11881,11882],{},"I know what you are thinking, why does this article need to be written? And the answer is simple, I need to churn out some content! But luckily, this is actually quite an interesting topic. So without wasting any more of your precious time, let's take a look at some bloody nice looking websites, in the loft conversion industry.",[219,11884,11886],{"id":11885},"what-makes-a-loft-conversion-website-look-decent","What makes a loft conversion website look decent?",[193,11888,11889],{},"When we talk about 'nice looking' websites, what do we mean? Well basically, there are different characteristics of a website that can determine whether it looks good, or if it looks like a piece of poo. Some of these factors include using high quality images/photographs, good use of white space and a generally well thought out and clean design. High quality photos are particularly important for loft conversion websites, as it important to showcase the work on offer.",[3849,11891,11893],{"id":11892},"nice-website-design-is-easy-though-right","Nice website design is easy though, right?",[193,11895,11896,11897,11900,11901,11903],{},"You might think that designing a good looking website is easy. Well I've got news for you, it's not! Being good at web design is way more difficult than it seems. There are subtle design features that can be the difference between a good and bad looking website. I personally avoid all of these issues by using component libraries such as ",[197,11898,10150],{"href":10148,"rel":11899},[317]," (check out my ",[197,11902,10163],{"href":142},").",[193,11905,11906],{},"Need some inspiration for a loft conversion website you're building? Well let your beady little eyes take a look at these beauties!",[219,11908,11910],{"id":11909},"the-websites","The websites",[3849,11912,11914,11915,5058],{"id":11913},"good-build-superstore-goodbuildscouk","Good Build Superstore (",[197,11916,11919],{"href":11917,"rel":11918},"https://www.goodbuilds.co.uk/",[317],"goodbuilds.co.uk",[193,11921,11922],{},[265,11923],{"alt":11924,"src":11925},"goodbuilds.co.uk loft conversion website screenshot","https://codingoblin.com/wp-content/uploads/2023/12/Screenshot-2023-12-03-at-12.21.48-1024x538.webp",[193,11927,11928],{},"What I like about this website from Good Build Superstore is that it has a clear theme running throughout. When you look at it, it just makes sense. There is nothing jarring about it. Which is a compliment, I promise.",[3849,11930,11932,11933,5058],{"id":11931},"nexus-homes-group-nexushomesgroupcomau","Nexus Homes Group (",[197,11934,11937],{"href":11935,"rel":11936},"https://www.nexushomesgroup.com.au/",[317],"nexushomesgroup.com.au",[193,11939,11940],{},[265,11941],{"alt":11942,"src":11943},"Nexus Homes Group loft conversion website screenshot","https://codingoblin.com/wp-content/uploads/2023/12/Screenshot-2023-12-03-at-12.28.58-1024x613.webp",[193,11945,11946,11947,11952],{},"Another website with a clear theme running throughout. I like the use of photography to showcase their work. Built by the guys at Living Online, a ",[197,11948,11951],{"href":11949,"rel":11950},"https://www.livingonline.com.au/",[317],"digital marketing agency in Perth",". Very well done indeed. I'm not sure if Nexus strictly offer 'loft conversions' but they do do (lol do do) 'second storey additions' which I'm guessing is an Australian equivalent. Those guys do it different down there.",[219,11954,11956],{"id":11955},"do-you-need-a-loft-conversion-website-for-your-business","Do you need a loft conversion website for your business?",[193,11958,11959,11960,470],{},"If you need someone to build a website for your loft conversion company, I'm your guy. You should ",[197,11961,11963],{"href":11962},"/contact","drop me a message",[193,11965,11966,11967,470],{},"Think another website should be listed here? Let me know ",[197,11968,11969],{"href":11962},"here",{"title":262,"searchDepth":514,"depth":514,"links":11971},[11972],{"id":11878,"depth":514,"text":11879,"children":11973},[11974,11975,11976],{"id":11885,"depth":520,"text":11886},{"id":11909,"depth":520,"text":11910},{"id":11955,"depth":520,"text":11956},[10192],[10196],"2023-12-03T00:00:00.000Z","The best looking loft conversion websites I could find on the internet",{"src":11982},"/images/wp/featured-nicely-designed-loft-conversion-websitesAdobeStock583573427-min-scaled.webp",{},{"title":11985,"description":11986,"ogTitle":11985,"ogDescription":11986,"twitterCard":576},"Nicely designed Loft Conversion websites - Codingoblin","A list of nicely designed loft conversion websites. Get inspiration for your next project.","jP8htDRn3xalMxI7EqNMkzPsuY8y1W_tZ_D-OgxNOq0",{"id":11989,"title":69,"archived":175,"authors":11990,"badge":11993,"body":11995,"categories":12136,"categorySlugs":12137,"date":12138,"description":12139,"extension":538,"image":12140,"meta":12142,"navigation":542,"path":70,"schemaOrg":4854,"seo":12143,"stem":71,"__hash__":12146},"posts/3.blog/install-daisyui-in-wordpress.md",[11991],{"name":178,"to":179,"avatar":11992},{"src":181},{"label":11994},"Tailwindcss, WordPress",{"type":185,"value":11996,"toc":12129},[11997,12001,12004,12126],[188,11998,12000],{"id":11999},"how-install-daisyui-in-wordpress","How install DaisyUI in WordPress",[193,12002,12003],{},"Let's look at how to install DaisyUI in your WordPress theme. This is an easy process and we will go through all the steps needed!",[4875,12005,12007,12011,12020,12026,12030,12041,12045,12048,12066,12069,12123],{"video-id":12006},"ovPZ_oWRdVU",[219,12008,12010],{"id":12009},"download-starter-theme-optional","Download starter theme (optional)",[193,12012,12013,12014,12019],{},"The first thing we need to do is get our WordPress theme. I personally like to do this by downloading a ",[197,12015,12018],{"href":12016,"rel":12017},"https://underscores.me/",[317],"starter theme from underscores.me",", but if you want to create your own fresh theme this is fine to do. Once you have your theme ready, open it up in your code editor.",[193,12021,12022],{},[265,12023],{"alt":12024,"src":12025},"install daisyUI in WordPress theme","https://codingoblin.com/wp-content/uploads/2023/10/884um3.jpg",[219,12027,12029],{"id":12028},"install-tailwindcss","Install TailwindCSS",[193,12031,12032,12033,12037,12038,470],{},"We now need to install TailwindCSS in our WordPress theme. This is a case of following ",[197,12034,12036],{"href":5162,"rel":12035},[317],"the instructions"," on the TailwindCSS website. ",[197,12039,12040],{"href":74},"A full guide on how to do this can be found here",[219,12042,12044],{"id":12043},"install-daisyui","Install DaisyUI",[193,12046,12047],{},"Now we are at the point where we can actually install DaisyUI into our WordPress theme! Instructions can be found here, but its very simple. You run the following command in the route of your WordPress theme:",[5190,12049,12051],{"className":7218,"code":12050,"filename":7220,"language":7221,"meta":262,"style":262},"npm i -D daisyui@latest\n",[5182,12052,12053],{"__ignoreMap":262},[3736,12054,12055,12057,12060,12063],{"class":5199,"line":5200},[3736,12056,7583],{"class":7228},[3736,12058,12059],{"class":5236}," i",[3736,12061,12062],{"class":5236}," -D",[3736,12064,12065],{"class":5236}," daisyui@latest\n",[193,12067,12068],{},"Next, you need to add daisyui to your tailwind config file's plugins array, like this:",[5190,12070,12075],{"className":12071,"code":12072,"filename":12073,"language":12074,"meta":262,"style":262},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","module.exports = {\n    //...\n    plugins: [require(\"daisyui\")],\n}\n","tailwind.config.js","js",[5182,12076,12077,12086,12091,12118],{"__ignoreMap":262},[3736,12078,12079,12082,12084],{"class":5199,"line":5200},[3736,12080,12081],{"class":5203},"module.exports",[3736,12083,6731],{"class":5203},[3736,12085,6673],{"class":5203},[3736,12087,12088],{"class":5199,"line":514},[3736,12089,12090],{"class":11550},"    //...\n",[3736,12092,12093,12096,12098,12101,12104,12106,12108,12111,12113,12116],{"class":5199,"line":520},[3736,12094,12095],{"class":5207},"    plugins",[3736,12097,5367],{"class":5203},[3736,12099,12100],{"class":5283}," [",[3736,12102,12103],{"class":5351},"require",[3736,12105,5355],{"class":5283},[3736,12107,5233],{"class":5203},[3736,12109,12110],{"class":5236},"daisyui",[3736,12112,5233],{"class":5203},[3736,12114,12115],{"class":5283},")]",[3736,12117,9225],{"class":5203},[3736,12119,12120],{"class":5199,"line":5244},[3736,12121,12122],{"class":5203},"}\n",[193,12124,12125],{},"And that's it! You are now set up and ready to start using DaisyUI. I told you it was easy!",[5594,12127,12128],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":262,"searchDepth":514,"depth":514,"links":12130},[12131],{"id":11999,"depth":514,"text":12000,"children":12132},[12133,12134,12135],{"id":12009,"depth":520,"text":12010},{"id":12028,"depth":520,"text":12029},{"id":12043,"depth":520,"text":12044},[5609,10193],[5612,10197],"2023-10-17T00:00:00.000Z","Quick guide to get DaisyUI installed in your WordPress theme!",{"src":12141},"/images/wp/featured-install-daisyui-in-wordpressdaisyui-wordpress-install-thumbnail.webp",{},{"title":12144,"description":12145,"ogTitle":12144,"ogDescription":12145,"twitterCard":576},"Install DaisyUI in WordPress - [2023 GUIDE]","Quick guide to installing DaisyUI in WordPress. Get DaisyUI installed in 5 mins!","ffm3bGC0a8Af2UU5_gU1BaeXpDmBM5mfLCRPRYq9Tvk",{"id":12148,"title":53,"archived":175,"authors":12149,"badge":12152,"body":12153,"categories":12378,"categorySlugs":12379,"date":12380,"description":12381,"extension":538,"image":12382,"meta":12384,"navigation":542,"path":54,"schemaOrg":4854,"seo":12385,"stem":55,"__hash__":12387},"posts/3.blog/deploy-nuxt-3-on-hostinger.md",[12150],{"name":178,"to":179,"avatar":12151},{"src":181},{"label":5610},{"type":185,"value":12154,"toc":12371},[12155,12159,12162,12368],[188,12156,12158],{"id":12157},"how-to-deploy-nuxt-3-on-hostinger","How to deploy Nuxt 3 on Hostinger",[193,12160,12161],{},"Let's look at how to deploy Nuxt 3 on Hostinger. Luckily this is a really simple process and takes a matter of minutes. In this example we will use Hostinger, but the same principles apply for any standard hosting.",[4875,12163,12165,12169,12177,12183,12185,12188,12214,12217,12221,12229,12255,12266,12272,12274,12280,12286,12288,12294,12298,12301,12317,12324,12330,12334,12340,12346,12349,12355,12361],{"video-id":12164},"pN5_p2sFiwE",[219,12166,12168],{"id":12167},"create-new-website-in-hostinger","Create new website in Hostinger",[193,12170,12171,12172,12176],{},"If you haven't already, ",[197,12173,12175],{"href":12174},"/go/hostinger","create a Hostinger account."," Now sign in and create a new website on. So login to your Hostinger account, click the 'Websites' link in the top navbar, then click on \"Create or migrate a website.\"",[193,12178,12179],{},[265,12180],{"alt":12181,"src":12182},"Create a new website in Hostinger","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-22-at-11.17.26-1024x336.png",[193,12184,12181],{},[193,12186,12187],{},"You will now be presented with a series of questions/options. Do the following:",[461,12189,12190,12198,12206],{},[464,12191,12192,12195,12197],{},[304,12193,12194],{},"What is your website type?",[5038,12196],{},"Select: Skip, I don’t want personalized experience",[464,12199,12200,12203,12205],{},[304,12201,12202],{},"Create or Migrate a Website",[5038,12204],{},"Select: Skip, create an empty website",[464,12207,12208,12211,12213],{},[304,12209,12210],{},"Name Your Website",[5038,12212],{},"Either choose a domain you have with Hostinger or select Use an Existing Domain to use a domain purchased from another provider. If you use a domain from another provider - go through the steps to connect your domain.",[193,12215,12216],{},"Once your domain is connected go to the Control Panel (Dashboard).",[219,12218,12220],{"id":12219},"connect-to-your-hostinger-website-via-ftp","Connect to your Hostinger website via FTP",[193,12222,12223,12224,12228],{},"Now we need to connect to our empty Hostinger website via FTP. In the sidebar on the left hand side, click the \"Files\" dropdown, then click \"FTP Accounts\". On this page you will see all of the details for you to connect to your website via FTP. The first thing we want to do is change our FTP password. In the FTP Access table, click \"Change FTP password.\" Enter a new password, confirm it, then click \"Change password.\" Now open ",[197,12225,12227],{"href":7625,"rel":12226},[317],"Filezilla"," or a different FTP client. Copy and paste your FTP access details into your FTP client:",[461,12230,12231,12237,12243,12249],{},[464,12232,12233,12236],{},[304,12234,12235],{},"Host"," = FTP hostname (eg. ftp://websitegoblin.com)",[464,12238,12239,12242],{},[304,12240,12241],{},"Username"," = FTP username (eg. u167260493.test.websitegoblin.com)",[464,12244,12245,12248],{},[304,12246,12247],{},"Password"," = Password you just changed in Hostinger",[464,12250,12251,12254],{},[304,12252,12253],{},"Port"," = FTP port (eg. 21)",[193,12256,12257,12258,12261,12262,12265],{},"Click \"Quickconnect\" (in Filezilla) or the equivalent in your FTP client. You may be asked if you trust the certificate, confirm that you do. You should be connected to your website. And you will find yourself in the ",[5182,12259,12260],{},"/public_html"," directory. You will see one file named ",[5182,12263,12264],{},"default.php",". This is the file that is being displayed on your domain currently. If you head to your domain now you will see it displayed like this:",[193,12267,12268],{},[265,12269],{"alt":12270,"src":12271},"Hostinger default new website view. Displaying default.php","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-22-at-12.03.34-300x253.png",[193,12273,12270],{},[193,12275,12276,12277,12279],{},"If you make changes to ",[5182,12278,12264],{}," they will change on your website. Like this:",[193,12281,12282],{},[265,12283],{"alt":12284,"src":12285},"Changes to Hostinger default.php file reflected on website","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-22-at-12.05.47-300x118.png",[193,12287,12284],{},[193,12289,12290,12291,12293],{},"Delete ",[5182,12292,12264],{}," as we don't need it.",[219,12295,12297],{"id":12296},"generate-nuxt-3-for-deployment","Generate Nuxt 3 for deployment",[193,12299,12300],{},"We now need to generate our dist files so we can deploy our Nuxt 3 application to our live server. Head over to your Nuxt 3 project. In the terminal, navigate to the root of your Nuxt 3 project. Execute the following command in the terminal:",[5190,12302,12304],{"className":7218,"code":12303,"filename":7220,"language":7221,"meta":262,"style":262},"npx nuxi generate\n",[5182,12305,12306],{"__ignoreMap":262},[3736,12307,12308,12311,12314],{"class":5199,"line":5200},[3736,12309,12310],{"class":7228},"npx",[3736,12312,12313],{"class":5236}," nuxi",[3736,12315,12316],{"class":5236}," generate\n",[193,12318,12319,12320,12323],{},"Running this command will create a new ",[5182,12321,12322],{},"dist"," directory in your Nuxt 3 project. Within this new folder will be all of the files for your website that we are going to upload to the live server on Hostinger.",[193,12325,12326],{},[265,12327],{"alt":12328,"src":12329},"nuxt 3 deployment meme","https://codingoblin.com/wp-content/uploads/2023/07/884olt.jpg",[3849,12331,12333],{"id":12332},"upload-nuxt-3-dist-files-to-hostinger-server","Upload Nuxt 3 dist files to Hostinger server",[193,12335,12336,12337,12339],{},"Nearly there, we now need to upload our Nuxt 3 dist files to our Hostinger server. Go back to your FTP client. In the panel for your local computer navigate to your Nuxt 3 project. In this same panel open the dist folder. Now drag all of the files from the dist folder over to your ",[5182,12338,12260],{}," directory on your live server.",[193,12341,12342],{},[265,12343],{"alt":12344,"src":12345},"Nuxt 3 deploy to Hostinger via FTP. Drag local files over to live server.","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-22-at-12.32.29-1024x426.png",[193,12347,12348],{},"Now head to your domain and you should see your Nuxt 3 application up and running!",[193,12350,12351],{},[265,12352],{"alt":12353,"src":12354},"Nuxt 3 application up and running on live Hostinger server","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-22-at-12.28.04-1024x964.png",[193,12356,12357,12360],{},[197,12358,12359],{"href":7120},"Cloudways hosting"," is good too.",[193,12362,12363,12364],{},"Get ",[197,12365,12367],{"href":12366},"#","FREE Premium Service Area WIZARD subscription",[5594,12369,12370],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":262,"searchDepth":514,"depth":514,"links":12372},[12373],{"id":12157,"depth":514,"text":12158,"children":12374},[12375,12376,12377],{"id":12167,"depth":520,"text":12168},{"id":12219,"depth":520,"text":12220},{"id":12296,"depth":520,"text":12297},[5610],[5613],"2023-07-22T00:00:00.000Z","Easy guide to get setup with a static Nuxt 3 application on standard web hosting. Get your website live in 5 minutes!",{"src":12383},"/images/wp/featured-deploy-nuxt-3-on-hostingerDeploy-Nuxt-3-on-Hostinger.webp",{},{"title":12386,"description":12381,"ogTitle":12386,"ogDescription":12381,"twitterCard":576},"Deploy Nuxt 3 on Hostinger - [2023 GUIDE]","CXF8TV_3Yp1MfEWglWKOsHVVj3kVkfVBMQOplzNrqrM",{"id":12389,"title":113,"archived":175,"authors":12390,"badge":12393,"body":12395,"categories":13081,"categorySlugs":13082,"date":13083,"description":13084,"extension":538,"image":13085,"meta":13087,"navigation":542,"path":114,"schemaOrg":4854,"seo":13088,"stem":115,"__hash__":13091},"posts/3.blog/seo-meta-tags-with-nuxt-3-and-wordpress-api.md",[12391],{"name":178,"to":179,"avatar":12392},{"src":181},{"label":12394},"Vue.js, WordPress",{"type":185,"value":12396,"toc":13070},[12397,12400,12403,13067],[188,12398,113],{"id":12399},"seo-meta-tags-with-nuxt-3-and-wordpress-api",[193,12401,12402],{},"In this post we will look at how to add seo meta tags to a Nuxt 3 project when used with the WordPress API.",[4875,12404,12406,12410,12413,12419,12423,12426,12432,12436,12446,12452,12458,12462,12471,13016,13020,13025,13031,13035,13042,13046,13049,13055,13059],{"video-id":12405},"-UZXgrk1_uU",[219,12407,12409],{"id":12408},"install-the-yoast-seo-wordpress-plugin","Install the Yoast SEO WordPress plugin",[193,12411,12412],{},"The first thing we need to do to get our seo meta tags setup is to install the Yoast SEO WordPress plugin. So go ahead and install the plugin then activate it.",[193,12414,12415],{},[265,12416],{"alt":12417,"src":12418},"Yoast SEO plugin screenshot","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-07.21.10-1024x742.png",[219,12420,12422],{"id":12421},"create-meta-data","Create meta data",[193,12424,12425],{},"Now that you have installed the Yoast SEO plugin, its time to create the content that will be displayed in our meta tags! Go to your home page in the WordPress editor. You will now see a new section in your WordPress editor - Yoast SEO. Go ahead and fill out the inputs with your SEO meta data. If you are feeling pressured to write something good just write some random test content so we can test it out. Fill in the SEO title and Meta description at the least. Update the page to save your changes.",[193,12427,12428],{},[265,12429],{"alt":12430,"src":12431},"Yoast SEO in the WordPress post editor","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-08.06.39-1024x820.png",[219,12433,12435],{"id":12434},"test-wordpress-api-endpoint","Test WordPress API endpoint",[193,12437,12438,12439,12442,12443,12445],{},"It's now time to make sure our new SEO meta data is being pulled into our WordPress API. To do this, head to \"/wp-json/wp/v2/pages\". You will now see the data for all your pages. Look for an object named ",[5182,12440,12441],{},"yoast_head_json",". Easiest way to find this is by doing a \"find in page\" cmd + f. You will see there is a ",[5182,12444,12441],{}," object for each of your WordPress pages.",[193,12447,12448],{},[265,12449],{"alt":12450,"src":12451},"Yoast head json in WordPress API response","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-09.25.13.png",[193,12453,12454,12455,470],{},"The properties contained within this object contain all of our meta data! You will see title, description etc.. Remember, the endpoint you are currently viewing is for ALL of your pages. If you just wish to view the home page you will need to query the slug by doing something like this ",[5182,12456,12457],{},"/wp-json/wp/v2/pages?slug=home",[219,12459,12461],{"id":12460},"using-useserverseometa-in-nuxt-3","Using useServerSeoMeta in Nuxt 3",[193,12463,12464,12465,12470],{},"Now we have got the WordPress side of things sorted, we need to pull the data in to our Nuxt 3 application! Luckily this is really simple. The ",[197,12466,12469],{"href":12467,"rel":12468},"https://nuxt.com/docs/api/composables/use-seo-meta",[317],"Nuxt docs"," go over how to do this but there are a couple of things to watch out for. Head to the page in your Nuxt 3 application where you want to pull in the meta data. Add the following code:",[5190,12472,12474],{"className":5192,"code":12473,"language":5194,"meta":262,"style":262},"\u003Cscript setup>\n\nconst { data, pending, error, refresh } = await useFetch('\u003Cyour-backend-url>/wp-json/wp/v2/pages', {\n    query: { slug: 'home' }\n})\n\nuseServerSeoMeta({\n    title: () => data.value[0].yoast_head_json.title,\n    description: () => data.value[0].yoast_head_json.description,\n    ogUrl: () => data.value[0].yoast_head_json.og_url,\n    ogTitle: () => data.value[0].yoast_head_json.og_title,\n    ogDescription: () => data.value[0].yoast_head_json.og_description,\n    ogImage: () => data.value[0].yoast_head_json.og_image,\n    ogType: () => data.value[0].yoast_head_json.og_type,\n    ogLocale: () => data.value[0].yoast_head_json.og_locale,\n    twitterCard: () => data.value[0].yoast_head_json.twitter_card,\n    twitterTitle: () => data.value[0].yoast_head_json.twitter_title,\n    twitterDescription: () => data.value[0].yoast_head_json.twitter_description,\n    twitterImage: () => data.value[0].yoast_head_json.twitter_image,\n})\n\u003C/script>\n\n\u003Ctemplate>\n\n    \u003C!-- Your template data -->\n\n\u003C/template>\n",[5182,12475,12476,12486,12490,12538,12562,12568,12572,12581,12617,12649,12681,12713,12745,12777,12809,12841,12873,12905,12937,12969,12975,12983,12987,12995,12999,13004,13008],{"__ignoreMap":262},[3736,12477,12478,12480,12482,12484],{"class":5199,"line":5200},[3736,12479,5204],{"class":5203},[3736,12481,5332],{"class":5207},[3736,12483,5335],{"class":5226},[3736,12485,5210],{"class":5203},[3736,12487,12488],{"class":5199,"line":514},[3736,12489,5215],{"emptyLinePlaceholder":542},[3736,12491,12492,12494,12497,12499,12502,12505,12507,12510,12512,12515,12517,12519,12522,12525,12527,12529,12532,12534,12536],{"class":5199,"line":520},[3736,12493,5343],{"class":5226},[3736,12495,12496],{"class":5203}," {",[3736,12498,8913],{"class":5283},[3736,12500,12501],{"class":5203},",",[3736,12503,12504],{"class":5283}," pending",[3736,12506,12501],{"class":5203},[3736,12508,12509],{"class":5283}," error",[3736,12511,12501],{"class":5203},[3736,12513,12514],{"class":5283}," refresh ",[3736,12516,5376],{"class":5203},[3736,12518,6731],{"class":5203},[3736,12520,12521],{"class":5518}," await",[3736,12523,12524],{"class":5351}," useFetch",[3736,12526,5355],{"class":5283},[3736,12528,6412],{"class":5203},[3736,12530,12531],{"class":5236},"\u003Cyour-backend-url>/wp-json/wp/v2/pages",[3736,12533,6412],{"class":5203},[3736,12535,12501],{"class":5203},[3736,12537,6673],{"class":5203},[3736,12539,12540,12543,12545,12547,12550,12552,12554,12557,12559],{"class":5199,"line":5244},[3736,12541,12542],{"class":5207},"    query",[3736,12544,5367],{"class":5203},[3736,12546,12496],{"class":5203},[3736,12548,12549],{"class":5207}," slug",[3736,12551,5367],{"class":5203},[3736,12553,5528],{"class":5203},[3736,12555,12556],{"class":5236},"home",[3736,12558,6412],{"class":5203},[3736,12560,12561],{"class":5203}," }\n",[3736,12563,12564,12566],{"class":5199,"line":5265},[3736,12565,5376],{"class":5203},[3736,12567,5379],{"class":5283},[3736,12569,12570],{"class":5199,"line":5292},[3736,12571,5215],{"emptyLinePlaceholder":542},[3736,12573,12574,12577,12579],{"class":5199,"line":5302},[3736,12575,12576],{"class":5351},"useServerSeoMeta",[3736,12578,5355],{"class":5283},[3736,12580,5358],{"class":5203},[3736,12582,12583,12586,12588,12591,12593,12595,12597,12600,12603,12606,12608,12610,12612,12615],{"class":5199,"line":5312},[3736,12584,12585],{"class":5351},"    title",[3736,12587,5367],{"class":5203},[3736,12589,12590],{"class":5203}," ()",[3736,12592,6670],{"class":5226},[3736,12594,8913],{"class":5283},[3736,12596,470],{"class":5203},[3736,12598,12599],{"class":5283},"value[",[3736,12601,12602],{"class":6650},"0",[3736,12604,12605],{"class":5283},"]",[3736,12607,470],{"class":5203},[3736,12609,12441],{"class":5283},[3736,12611,470],{"class":5203},[3736,12613,12614],{"class":5283},"title",[3736,12616,9225],{"class":5203},[3736,12618,12619,12622,12624,12626,12628,12630,12632,12634,12636,12638,12640,12642,12644,12647],{"class":5199,"line":5322},[3736,12620,12621],{"class":5351},"    description",[3736,12623,5367],{"class":5203},[3736,12625,12590],{"class":5203},[3736,12627,6670],{"class":5226},[3736,12629,8913],{"class":5283},[3736,12631,470],{"class":5203},[3736,12633,12599],{"class":5283},[3736,12635,12602],{"class":6650},[3736,12637,12605],{"class":5283},[3736,12639,470],{"class":5203},[3736,12641,12441],{"class":5283},[3736,12643,470],{"class":5203},[3736,12645,12646],{"class":5283},"description",[3736,12648,9225],{"class":5203},[3736,12650,12651,12654,12656,12658,12660,12662,12664,12666,12668,12670,12672,12674,12676,12679],{"class":5199,"line":5327},[3736,12652,12653],{"class":5351},"    ogUrl",[3736,12655,5367],{"class":5203},[3736,12657,12590],{"class":5203},[3736,12659,6670],{"class":5226},[3736,12661,8913],{"class":5283},[3736,12663,470],{"class":5203},[3736,12665,12599],{"class":5283},[3736,12667,12602],{"class":6650},[3736,12669,12605],{"class":5283},[3736,12671,470],{"class":5203},[3736,12673,12441],{"class":5283},[3736,12675,470],{"class":5203},[3736,12677,12678],{"class":5283},"og_url",[3736,12680,9225],{"class":5203},[3736,12682,12683,12686,12688,12690,12692,12694,12696,12698,12700,12702,12704,12706,12708,12711],{"class":5199,"line":5340},[3736,12684,12685],{"class":5351},"    ogTitle",[3736,12687,5367],{"class":5203},[3736,12689,12590],{"class":5203},[3736,12691,6670],{"class":5226},[3736,12693,8913],{"class":5283},[3736,12695,470],{"class":5203},[3736,12697,12599],{"class":5283},[3736,12699,12602],{"class":6650},[3736,12701,12605],{"class":5283},[3736,12703,470],{"class":5203},[3736,12705,12441],{"class":5283},[3736,12707,470],{"class":5203},[3736,12709,12710],{"class":5283},"og_title",[3736,12712,9225],{"class":5203},[3736,12714,12715,12718,12720,12722,12724,12726,12728,12730,12732,12734,12736,12738,12740,12743],{"class":5199,"line":5361},[3736,12716,12717],{"class":5351},"    ogDescription",[3736,12719,5367],{"class":5203},[3736,12721,12590],{"class":5203},[3736,12723,6670],{"class":5226},[3736,12725,8913],{"class":5283},[3736,12727,470],{"class":5203},[3736,12729,12599],{"class":5283},[3736,12731,12602],{"class":6650},[3736,12733,12605],{"class":5283},[3736,12735,470],{"class":5203},[3736,12737,12441],{"class":5283},[3736,12739,470],{"class":5203},[3736,12741,12742],{"class":5283},"og_description",[3736,12744,9225],{"class":5203},[3736,12746,12747,12750,12752,12754,12756,12758,12760,12762,12764,12766,12768,12770,12772,12775],{"class":5199,"line":5373},[3736,12748,12749],{"class":5351},"    ogImage",[3736,12751,5367],{"class":5203},[3736,12753,12590],{"class":5203},[3736,12755,6670],{"class":5226},[3736,12757,8913],{"class":5283},[3736,12759,470],{"class":5203},[3736,12761,12599],{"class":5283},[3736,12763,12602],{"class":6650},[3736,12765,12605],{"class":5283},[3736,12767,470],{"class":5203},[3736,12769,12441],{"class":5283},[3736,12771,470],{"class":5203},[3736,12773,12774],{"class":5283},"og_image",[3736,12776,9225],{"class":5203},[3736,12778,12779,12782,12784,12786,12788,12790,12792,12794,12796,12798,12800,12802,12804,12807],{"class":5199,"line":5382},[3736,12780,12781],{"class":5351},"    ogType",[3736,12783,5367],{"class":5203},[3736,12785,12590],{"class":5203},[3736,12787,6670],{"class":5226},[3736,12789,8913],{"class":5283},[3736,12791,470],{"class":5203},[3736,12793,12599],{"class":5283},[3736,12795,12602],{"class":6650},[3736,12797,12605],{"class":5283},[3736,12799,470],{"class":5203},[3736,12801,12441],{"class":5283},[3736,12803,470],{"class":5203},[3736,12805,12806],{"class":5283},"og_type",[3736,12808,9225],{"class":5203},[3736,12810,12811,12814,12816,12818,12820,12822,12824,12826,12828,12830,12832,12834,12836,12839],{"class":5199,"line":6676},[3736,12812,12813],{"class":5351},"    ogLocale",[3736,12815,5367],{"class":5203},[3736,12817,12590],{"class":5203},[3736,12819,6670],{"class":5226},[3736,12821,8913],{"class":5283},[3736,12823,470],{"class":5203},[3736,12825,12599],{"class":5283},[3736,12827,12602],{"class":6650},[3736,12829,12605],{"class":5283},[3736,12831,470],{"class":5203},[3736,12833,12441],{"class":5283},[3736,12835,470],{"class":5203},[3736,12837,12838],{"class":5283},"og_locale",[3736,12840,9225],{"class":5203},[3736,12842,12843,12846,12848,12850,12852,12854,12856,12858,12860,12862,12864,12866,12868,12871],{"class":5199,"line":6681},[3736,12844,12845],{"class":5351},"    twitterCard",[3736,12847,5367],{"class":5203},[3736,12849,12590],{"class":5203},[3736,12851,6670],{"class":5226},[3736,12853,8913],{"class":5283},[3736,12855,470],{"class":5203},[3736,12857,12599],{"class":5283},[3736,12859,12602],{"class":6650},[3736,12861,12605],{"class":5283},[3736,12863,470],{"class":5203},[3736,12865,12441],{"class":5283},[3736,12867,470],{"class":5203},[3736,12869,12870],{"class":5283},"twitter_card",[3736,12872,9225],{"class":5203},[3736,12874,12875,12878,12880,12882,12884,12886,12888,12890,12892,12894,12896,12898,12900,12903],{"class":5199,"line":6695},[3736,12876,12877],{"class":5351},"    twitterTitle",[3736,12879,5367],{"class":5203},[3736,12881,12590],{"class":5203},[3736,12883,6670],{"class":5226},[3736,12885,8913],{"class":5283},[3736,12887,470],{"class":5203},[3736,12889,12599],{"class":5283},[3736,12891,12602],{"class":6650},[3736,12893,12605],{"class":5283},[3736,12895,470],{"class":5203},[3736,12897,12441],{"class":5283},[3736,12899,470],{"class":5203},[3736,12901,12902],{"class":5283},"twitter_title",[3736,12904,9225],{"class":5203},[3736,12906,12907,12910,12912,12914,12916,12918,12920,12922,12924,12926,12928,12930,12932,12935],{"class":5199,"line":6721},[3736,12908,12909],{"class":5351},"    twitterDescription",[3736,12911,5367],{"class":5203},[3736,12913,12590],{"class":5203},[3736,12915,6670],{"class":5226},[3736,12917,8913],{"class":5283},[3736,12919,470],{"class":5203},[3736,12921,12599],{"class":5283},[3736,12923,12602],{"class":6650},[3736,12925,12605],{"class":5283},[3736,12927,470],{"class":5203},[3736,12929,12441],{"class":5283},[3736,12931,470],{"class":5203},[3736,12933,12934],{"class":5283},"twitter_description",[3736,12936,9225],{"class":5203},[3736,12938,12939,12942,12944,12946,12948,12950,12952,12954,12956,12958,12960,12962,12964,12967],{"class":5199,"line":6747},[3736,12940,12941],{"class":5351},"    twitterImage",[3736,12943,5367],{"class":5203},[3736,12945,12590],{"class":5203},[3736,12947,6670],{"class":5226},[3736,12949,8913],{"class":5283},[3736,12951,470],{"class":5203},[3736,12953,12599],{"class":5283},[3736,12955,12602],{"class":6650},[3736,12957,12605],{"class":5283},[3736,12959,470],{"class":5203},[3736,12961,12441],{"class":5283},[3736,12963,470],{"class":5203},[3736,12965,12966],{"class":5283},"twitter_image",[3736,12968,9225],{"class":5203},[3736,12970,12971,12973],{"class":5199,"line":6753},[3736,12972,5376],{"class":5203},[3736,12974,5379],{"class":5283},[3736,12976,12977,12979,12981],{"class":5199,"line":6767},[3736,12978,5315],{"class":5203},[3736,12980,5332],{"class":5207},[3736,12982,5210],{"class":5203},[3736,12984,12985],{"class":5199,"line":6772},[3736,12986,5215],{"emptyLinePlaceholder":542},[3736,12988,12989,12991,12993],{"class":5199,"line":6779},[3736,12990,5204],{"class":5203},[3736,12992,273],{"class":5207},[3736,12994,5210],{"class":5203},[3736,12996,12997],{"class":5199,"line":6784},[3736,12998,5215],{"emptyLinePlaceholder":542},[3736,13000,13001],{"class":5199,"line":6805},[3736,13002,13003],{"class":11550},"    \u003C!-- Your template data -->\n",[3736,13005,13006],{"class":5199,"line":6818},[3736,13007,5215],{"emptyLinePlaceholder":542},[3736,13009,13010,13012,13014],{"class":5199,"line":6825},[3736,13011,5315],{"class":5203},[3736,13013,273],{"class":5207},[3736,13015,5210],{"class":5203},[3849,13017,13019],{"id":13018},"important-note-regarding-ogurl","Important note regarding ogUrl",[193,13021,337,13022,13024],{},[5182,13023,12678],{}," property is pulled in from the 'Site Address (URL)' option in the WordPress general settings. With this in mind it is important that you set this to your frontend url. By default it will be pointing to your backend url.",[193,13026,13027],{},[265,13028],{"alt":13029,"src":13030},"WordPress Site Address (URL) setting. ","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-29-at-08.44.41-1024x559.webp",[219,13032,13034],{"id":13033},"useserverseometa-computed-getter-syntax","useServerSeoMeta computed getter syntax",[193,13036,13037,13038,13041],{},"Because we are using dynamic data from our WordPress API, we need to access it using the computed getter syntax. This is mentioned in the Nuxt docs but can be a bit of a faff to get working. The code I have used above will allow you to access your meta data. Make sure it is structured like this: ",[5182,13039,13040],{},"title: () => data.value[0].yoast_head_json.title",". I know some of you reading this will have been pulling your hair out over this. You're welcome.",[219,13043,13045],{"id":13044},"test-seo-meta-data-in-nuxt-3-application","Test SEO meta data in Nuxt 3 application",[193,13047,13048],{},"Our Nuxt 3 application is now pulling in the seo meta data for our home page. If we head to our home page in our frontend and view page source we will be able to see all of our meta data in the meta tags.",[193,13050,13051],{},[265,13052],{"alt":13053,"src":13054},"Yoast SEO meta tags visible in Nuxt 3 website's page source","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-08.33.14-1024x435.png",[219,13056,13058],{"id":13057},"available-meta-tags","Available meta tags",[193,13060,13061,13062],{},"There are a lot of meta tags available to us through the Yoast SEO plugin. I have included the ones that I would personally use but you may wish to use more! A good list of the meta tags you might want to use can be found ",[197,13063,13066],{"href":13064,"rel":13065},"https://blog.hubspot.com/marketing/meta-tags",[317],"here.",[5594,13068,13069],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":262,"searchDepth":514,"depth":514,"links":13071},[13072],{"id":12399,"depth":514,"text":113,"children":13073},[13074,13075,13076,13077,13078,13079,13080],{"id":12408,"depth":520,"text":12409},{"id":12421,"depth":520,"text":12422},{"id":12434,"depth":520,"text":12435},{"id":12460,"depth":520,"text":12461},{"id":13033,"depth":520,"text":13034},{"id":13044,"depth":520,"text":13045},{"id":13057,"depth":520,"text":13058},[5610,10193],[5613,10197],"2023-07-20T00:00:00.000Z","How to add meta tags to your Nuxt 3 application when used with the WordPress API",{"src":13086},"/images/wp/featured-seo-meta-tags-with-nuxt-3-and-wordpress-apiNuxt-3-WP-API-SEO.webp",{},{"title":13089,"description":13090,"ogTitle":13089,"ogDescription":13090,"twitterCard":576},"SEO meta tags with Nuxt 3 and WordPress API - Codingoblin","Add meta tags to Nuxt 3 with WordPress API. How to use useServerSeoMeta method in Nuxt to boost your SEO - [2023 GUIDE]","fJI4vlSbK0To_M_-XeVYxdg-zw5zkRgkdZEfE-giStk",{"id":13093,"title":169,"archived":175,"authors":13094,"badge":13097,"body":13099,"categories":13942,"categorySlugs":13943,"date":13083,"description":13944,"extension":538,"image":13945,"meta":13947,"navigation":542,"path":170,"schemaOrg":4854,"seo":13948,"stem":171,"__hash__":13951},"posts/3.blog/wordpress-api-nav-menu.md",[13095],{"name":178,"to":179,"avatar":13096},{"src":181},{"label":13098},"Tailwindcss, Vue.js, WordPress",{"type":185,"value":13100,"toc":13931},[13101,13104,13107,13928],[188,13102,169],{"id":13103},"wordpress-api-nav-menu",[193,13105,13106],{},"How to get nav menu items into Nuxt 3 through the WordPress REST API. This can seem difficult at first. But trust me, once you know what you are doing it will all make perfect sense.",[4875,13108,13110,13114,13118,13126,13132,13136,13146,13198,13204,13210,13214,13217,13222,13225,13231,13235,13238,13445,13450,13458,13474,13514,13523,13544,13548,13555,13561,13567,13571,13574,13872,13879,13888,13892,13904,13919,13922,13925],{"video-id":13109},"Tlhk2GrCS0g",[219,13111,13113],{"id":13112},"add-menu-theme-support","Add menu theme support",[3849,13115,13117],{"id":13116},"check-if-we-can-create-menus","Check if we can create menus",[193,13119,13120,13121,13125],{},"The first thing we need to do is make sure that we have the ability to create menus in our WordPress backend. Hover over the \"Appearances\" menu item in the left hand sidebar. A sub menu will appear. If you do not see the \"Menus\" option in the sub menu, you will need to enable theme support for them. If you do see the \"Menus\" option skip to the ",[197,13122,13124],{"href":13123},"#create-menu","Create a menu"," part.",[193,13127,13128],{},[265,13129],{"alt":13130,"src":13131},"No menu item visible in submenu","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-19.40.48-300x116.png",[3849,13133,13135],{"id":13134},"enable-theme-support-for-wp-menu","Enable theme support for WP menu",[193,13137,13138,13139,13142,13143,13145],{},"To enable theme support for menus, we need to edit the ",[5182,13140,13141],{},"functions.php"," file in our theme. Open the ",[5182,13144,13141],{}," file and add the following code:",[5190,13147,13149],{"className":11050,"code":13148,"filename":13141,"language":7706,"meta":262,"style":262},"\u003C?php\n\nif (!defined('ABSPATH')) {\n    exit;\n} // Exit if accessed directly\n\n// other stuff\n\n// add menu support\nadd_theme_support( 'menus' );\n",[5182,13150,13151,13156,13160,13165,13170,13175,13179,13184,13188,13193],{"__ignoreMap":262},[3736,13152,13153],{"class":5199,"line":5200},[3736,13154,13155],{},"\u003C?php\n",[3736,13157,13158],{"class":5199,"line":514},[3736,13159,5215],{"emptyLinePlaceholder":542},[3736,13161,13162],{"class":5199,"line":520},[3736,13163,13164],{},"if (!defined('ABSPATH')) {\n",[3736,13166,13167],{"class":5199,"line":5244},[3736,13168,13169],{},"    exit;\n",[3736,13171,13172],{"class":5199,"line":5265},[3736,13173,13174],{},"} // Exit if accessed directly\n",[3736,13176,13177],{"class":5199,"line":5292},[3736,13178,5215],{"emptyLinePlaceholder":542},[3736,13180,13181],{"class":5199,"line":5302},[3736,13182,13183],{},"// other stuff\n",[3736,13185,13186],{"class":5199,"line":5312},[3736,13187,5215],{"emptyLinePlaceholder":542},[3736,13189,13190],{"class":5199,"line":5322},[3736,13191,13192],{},"// add menu support\n",[3736,13194,13195],{"class":5199,"line":5327},[3736,13196,13197],{},"add_theme_support( 'menus' );\n",[193,13199,13200,13201,13203],{},"Save your ",[5182,13202,13141],{}," file. Now hover over the \"Appearances\" menu item again and you should see the \"Menus\" option in the submenu!",[193,13205,13206],{},[265,13207],{"alt":13208,"src":13209},"Menu item now present in submenu","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-19.49.51-300x134.png",[219,13211,13213],{"id":13212},"create-a-wordpress-menu","Create a WordPress menu",[193,13215,13216],{},"We are now at a point where we can create a menu. So click on the \"Menus\" option. Give your menu a name then click the Create Menu button.",[1462,13218,13219],{},[193,13220,13221],{},"It is important that we remember the name of this menu as we are going to use it to reference the menu later.",[193,13223,13224],{},"Add some items to the menu and save the menu. I am adding the home and about pages to my menu and naming it 'top-nav'.",[193,13226,13227],{},[265,13228],{"alt":13229,"src":13230},"Top nav menu creation in WordPress","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-21.15.22-1024x568.png",[219,13232,13234],{"id":13233},"create-wordpress-api-endpoint-for-nav-menu","Create WordPress API endpoint for nav menu",[193,13236,13237],{},"We now need to create an API endpoint for our WordPress nav menu. This is so we can retrieve the items from the menu via the WordPress API. Head back to your theme's functions.php file. Add the following code:",[5190,13239,13241],{"className":11050,"code":13240,"filename":13141,"language":7706,"meta":262,"style":262},"\u003C?php\n\nif (!defined('ABSPATH')) {\n    exit;\n} // Exit if accessed directly\n\n// other stuff\n\n// add menu support\nadd_theme_support( 'menus' );\n\n// Return formatted top-nav menu\nfunction top_nav_menu() {\n\n    $menu = wp_get_nav_menu_items('top-nav');\n    $result = [];\n\n    foreach($menu as $item) {\n\n        $my_item = [\n            'name' => $item->title,\n            'href' => $item->url\n        ];\n\n        $result[] = $my_item;\n\n    }\n\n    return $result;\n\n}\n\n// add endpoint\nadd_action( 'rest_api_init', function() {\n\n    // top-nav menu\n    register_rest_route( 'wp/v2', 'top-nav', array(\n        'methods' => 'GET',\n        'callback' => 'top_nav_menu',\n    ) );\n\n});\n",[5182,13242,13243,13247,13251,13255,13259,13263,13267,13271,13275,13279,13283,13287,13292,13297,13301,13306,13311,13315,13320,13324,13329,13334,13339,13344,13348,13353,13357,13361,13366,13372,13377,13382,13387,13393,13399,13404,13410,13416,13422,13428,13434,13439],{"__ignoreMap":262},[3736,13244,13245],{"class":5199,"line":5200},[3736,13246,13155],{},[3736,13248,13249],{"class":5199,"line":514},[3736,13250,5215],{"emptyLinePlaceholder":542},[3736,13252,13253],{"class":5199,"line":520},[3736,13254,13164],{},[3736,13256,13257],{"class":5199,"line":5244},[3736,13258,13169],{},[3736,13260,13261],{"class":5199,"line":5265},[3736,13262,13174],{},[3736,13264,13265],{"class":5199,"line":5292},[3736,13266,5215],{"emptyLinePlaceholder":542},[3736,13268,13269],{"class":5199,"line":5302},[3736,13270,13183],{},[3736,13272,13273],{"class":5199,"line":5312},[3736,13274,5215],{"emptyLinePlaceholder":542},[3736,13276,13277],{"class":5199,"line":5322},[3736,13278,13192],{},[3736,13280,13281],{"class":5199,"line":5327},[3736,13282,13197],{},[3736,13284,13285],{"class":5199,"line":5340},[3736,13286,5215],{"emptyLinePlaceholder":542},[3736,13288,13289],{"class":5199,"line":5361},[3736,13290,13291],{},"// Return formatted top-nav menu\n",[3736,13293,13294],{"class":5199,"line":5373},[3736,13295,13296],{},"function top_nav_menu() {\n",[3736,13298,13299],{"class":5199,"line":5382},[3736,13300,5215],{"emptyLinePlaceholder":542},[3736,13302,13303],{"class":5199,"line":6676},[3736,13304,13305],{},"    $menu = wp_get_nav_menu_items('top-nav');\n",[3736,13307,13308],{"class":5199,"line":6681},[3736,13309,13310],{},"    $result = [];\n",[3736,13312,13313],{"class":5199,"line":6695},[3736,13314,5215],{"emptyLinePlaceholder":542},[3736,13316,13317],{"class":5199,"line":6721},[3736,13318,13319],{},"    foreach($menu as $item) {\n",[3736,13321,13322],{"class":5199,"line":6747},[3736,13323,5215],{"emptyLinePlaceholder":542},[3736,13325,13326],{"class":5199,"line":6753},[3736,13327,13328],{},"        $my_item = [\n",[3736,13330,13331],{"class":5199,"line":6767},[3736,13332,13333],{},"            'name' => $item->title,\n",[3736,13335,13336],{"class":5199,"line":6772},[3736,13337,13338],{},"            'href' => $item->url\n",[3736,13340,13341],{"class":5199,"line":6779},[3736,13342,13343],{},"        ];\n",[3736,13345,13346],{"class":5199,"line":6784},[3736,13347,5215],{"emptyLinePlaceholder":542},[3736,13349,13350],{"class":5199,"line":6805},[3736,13351,13352],{},"        $result[] = $my_item;\n",[3736,13354,13355],{"class":5199,"line":6818},[3736,13356,5215],{"emptyLinePlaceholder":542},[3736,13358,13359],{"class":5199,"line":6825},[3736,13360,9317],{},[3736,13362,13364],{"class":5199,"line":13363},28,[3736,13365,5215],{"emptyLinePlaceholder":542},[3736,13367,13369],{"class":5199,"line":13368},29,[3736,13370,13371],{},"    return $result;\n",[3736,13373,13375],{"class":5199,"line":13374},30,[3736,13376,5215],{"emptyLinePlaceholder":542},[3736,13378,13380],{"class":5199,"line":13379},31,[3736,13381,12122],{},[3736,13383,13385],{"class":5199,"line":13384},32,[3736,13386,5215],{"emptyLinePlaceholder":542},[3736,13388,13390],{"class":5199,"line":13389},33,[3736,13391,13392],{},"// add endpoint\n",[3736,13394,13396],{"class":5199,"line":13395},34,[3736,13397,13398],{},"add_action( 'rest_api_init', function() {\n",[3736,13400,13402],{"class":5199,"line":13401},35,[3736,13403,5215],{"emptyLinePlaceholder":542},[3736,13405,13407],{"class":5199,"line":13406},36,[3736,13408,13409],{},"    // top-nav menu\n",[3736,13411,13413],{"class":5199,"line":13412},37,[3736,13414,13415],{},"    register_rest_route( 'wp/v2', 'top-nav', array(\n",[3736,13417,13419],{"class":5199,"line":13418},38,[3736,13420,13421],{},"        'methods' => 'GET',\n",[3736,13423,13425],{"class":5199,"line":13424},39,[3736,13426,13427],{},"        'callback' => 'top_nav_menu',\n",[3736,13429,13431],{"class":5199,"line":13430},40,[3736,13432,13433],{},"    ) );\n",[3736,13435,13437],{"class":5199,"line":13436},41,[3736,13438,5215],{"emptyLinePlaceholder":542},[3736,13440,13442],{"class":5199,"line":13441},42,[3736,13443,13444],{},"});\n",[193,13446,13447,13448,5188],{},"Let's take a look at the code we just added to our ",[5182,13449,13141],{},[3849,13451,13453,13454,13457],{"id":13452},"wp-rest_api_init-action-hook","WP ",[5182,13455,13456],{},"rest_api_init"," action hook",[193,13459,13460,13461,13463,13464,13466,13467,13470,13471,13473],{},"we can see that we hook into the ",[5182,13462,13456],{}," action. When the ",[5182,13465,13456],{}," action runs, it executes the callback function defined within. This callback function then calls the ",[5182,13468,13469],{},"register_rest_route"," function which registers a new endpoint in our WordPress API. You will see we pass 3 parameters to the ",[5182,13472,13469],{}," function:",[11408,13475,13476,13486,13496],{},[6531,13477,13480],{"name":13478,"type":13479},"$route_namespace","string",[193,13481,13482,13483,470],{},"This is the first URL segment after core prefix. In our case it is ",[5182,13484,13485],{},"wp/v2",[6531,13487,13489],{"name":13488,"type":13479},"$route",[193,13490,13491,13492,13495],{},"This is the base URL for route. In our case it is ",[5182,13493,13494],{},"top-nav",". This can be named anything you want. But it makes sense to use something related to the previously created nav menu.",[6531,13497,13500],{"name":13498,"type":13499},"$args","array",[193,13501,13502,13503,13506,13507,13510,13511,470],{},"This is an array of options for our endpoint. In our example we have set the method to ",[5182,13504,13505],{},"GET"," and the callback to ",[5182,13508,13509],{},"top_nav_menu",". This means that when we hit our endpoint we will execute ",[5182,13512,13513],{},"top_nav_menu()",[3849,13515,13517,13518,13520,13521,5058],{"id":13516},"structure-menu-items-with-register_rest_route-callback-function-top_nav_menu","Structure menu items with ",[5182,13519,13469],{}," callback function (",[5182,13522,13513],{},[193,13524,13525,13526,13528,13529,13532,13533,13536,13537,13540,13541,13543],{},"We have also created a ",[5182,13527,13509],{}," function. This function runs when we hit our endpoint! If we take a look at this function we will see that it fetches our nav menu using ",[5182,13530,13531],{},"wp_get_nav_menu_items",". ",[304,13534,13535],{},"This is where we pass the name of our nav menu that we created earlier."," We then loop over each menu item, adding only the properties that we want to return. We are only interested in the title and url of each menu item. I have assigned these to a 'name' and 'href' property in an array on each iteration, which are then pushed to a ",[5182,13538,13539],{},"$results"," array. Finally the ",[5182,13542,13539],{}," array is returned.",[219,13545,13547],{"id":13546},"set-site-address-url-in-wordpress","Set Site Address (URL) in WordPress",[193,13549,13550,13551,13554],{},"We now need to set the site address (url). Go to 'General' settings in WordPress. We need to set 'Site Address (URL)' to the location of our frontend. In this case it will be the location of our Nuxt.js application. This is currently ",[5182,13552,13553],{},"http://localhost:3000"," if you are on localhost. Or if not, it will be whatever the address of your frontend is.",[193,13556,13557],{},[265,13558],{"alt":13559,"src":13560},"Set site address (url) in WordPress","https://codingoblin.com/wp-content/uploads/2023/07/Screenshot-2023-07-20-at-22.09.06-1024x284.png",[193,13562,13563,13564,13566],{},"If we forget to do this our url's from the menu items will point to our WordPress backend, which will break everything! Double check if your frontend is http or https. In my case I am using http for localhost:3000 (",[5182,13565,13553],{},"). Make sure you click Save Changes.",[219,13568,13570],{"id":13569},"create-nav-menu-component-in-nuxt-3","Create nav menu component in Nuxt 3",[193,13572,13573],{},"We are nearly there! Now we need to create our nav menu component in our Nuxt 3 application. You can style this how you like, but make sure you have the following code in your component:",[5190,13575,13577],{"className":5192,"code":13576,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n      \u003Ca v-for=\"item in navigation\" :key=\"item.name\" :href=\"item.href\" :aria-current=\"item.href === current ? 'page' : undefined\">{{ item.name }}\u003C/a>\n    \u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\n\nconst route = useRoute()\n// Replace 'http://localhost:3000' with your frontend location\nconst current = 'http://localhost:3000' + route.fullPath\n\n// IMPORTANT\n// If your frontend is http then use http\n// in your useFetch endpoint\n// If it is https then use https \n// Replace 'http://wp.websitegoblin.com' with your backend location\nconst { data: navigation, pending, error, refresh } = await useFetch('http://wp.websitegoblin.com/wp-json/wp/v2/top-nav');\n\n\u003C/script>\n",[5182,13578,13579,13587,13595,13706,13714,13722,13726,13736,13740,13754,13759,13785,13789,13794,13799,13804,13809,13814,13860,13864],{"__ignoreMap":262},[3736,13580,13581,13583,13585],{"class":5199,"line":5200},[3736,13582,5204],{"class":5203},[3736,13584,273],{"class":5207},[3736,13586,5210],{"class":5203},[3736,13588,13589,13591,13593],{"class":5199,"line":514},[3736,13590,5220],{"class":5203},[3736,13592,5223],{"class":5207},[3736,13594,5210],{"class":5203},[3736,13596,13597,13600,13602,13604,13606,13608,13611,13614,13617,13619,13621,13624,13626,13628,13630,13632,13635,13637,13639,13642,13644,13646,13648,13650,13652,13654,13656,13659,13661,13663,13665,13667,13669,13672,13675,13678,13680,13683,13685,13688,13690,13692,13695,13697,13700,13702,13704],{"class":5199,"line":520},[3736,13598,13599],{"class":5203},"      \u003C",[3736,13601,197],{"class":5207},[3736,13603,8819],{"class":5518},[3736,13605,5230],{"class":5203},[3736,13607,5233],{"class":5203},[3736,13609,13610],{"class":5283},"item",[3736,13612,13613],{"class":5203}," in ",[3736,13615,13616],{"class":5283},"navigation",[3736,13618,5233],{"class":5203},[3736,13620,5273],{"class":5203},[3736,13622,13623],{"class":5226},"key",[3736,13625,5230],{"class":5203},[3736,13627,5233],{"class":5203},[3736,13629,13610],{"class":5283},[3736,13631,470],{"class":5203},[3736,13633,13634],{"class":5283},"name",[3736,13636,5233],{"class":5203},[3736,13638,5273],{"class":5203},[3736,13640,13641],{"class":5226},"href",[3736,13643,5230],{"class":5203},[3736,13645,5233],{"class":5203},[3736,13647,13610],{"class":5283},[3736,13649,470],{"class":5203},[3736,13651,13641],{"class":5283},[3736,13653,5233],{"class":5203},[3736,13655,5273],{"class":5203},[3736,13657,13658],{"class":5226},"aria-current",[3736,13660,5230],{"class":5203},[3736,13662,5233],{"class":5203},[3736,13664,13610],{"class":5283},[3736,13666,470],{"class":5203},[3736,13668,13641],{"class":5283},[3736,13670,13671],{"class":5203}," === ",[3736,13673,13674],{"class":5283},"current",[3736,13676,13677],{"class":5203}," ? ",[3736,13679,6412],{"class":5203},[3736,13681,13682],{"class":5236},"page",[3736,13684,6412],{"class":5203},[3736,13686,13687],{"class":5203}," : undefined",[3736,13689,5233],{"class":5203},[3736,13691,8962],{"class":5203},[3736,13693,13694],{"class":5283}," item",[3736,13696,470],{"class":5203},[3736,13698,13699],{"class":5283},"name ",[3736,13701,8972],{"class":5203},[3736,13703,197],{"class":5207},[3736,13705,5210],{"class":5203},[3736,13707,13708,13710,13712],{"class":5199,"line":5244},[3736,13709,5305],{"class":5203},[3736,13711,5223],{"class":5207},[3736,13713,5210],{"class":5203},[3736,13715,13716,13718,13720],{"class":5199,"line":5265},[3736,13717,5315],{"class":5203},[3736,13719,273],{"class":5207},[3736,13721,5210],{"class":5203},[3736,13723,13724],{"class":5199,"line":5292},[3736,13725,5215],{"emptyLinePlaceholder":542},[3736,13727,13728,13730,13732,13734],{"class":5199,"line":5302},[3736,13729,5204],{"class":5203},[3736,13731,5332],{"class":5207},[3736,13733,5335],{"class":5226},[3736,13735,5210],{"class":5203},[3736,13737,13738],{"class":5199,"line":5312},[3736,13739,5215],{"emptyLinePlaceholder":542},[3736,13741,13742,13744,13747,13749,13752],{"class":5199,"line":5322},[3736,13743,5343],{"class":5226},[3736,13745,13746],{"class":5283}," route ",[3736,13748,5230],{"class":5203},[3736,13750,13751],{"class":5351}," useRoute",[3736,13753,6068],{"class":5283},[3736,13755,13756],{"class":5199,"line":5327},[3736,13757,13758],{"class":11550},"// Replace 'http://localhost:3000' with your frontend location\n",[3736,13760,13761,13763,13766,13768,13770,13772,13774,13777,13780,13782],{"class":5199,"line":5340},[3736,13762,5343],{"class":5226},[3736,13764,13765],{"class":5283}," current ",[3736,13767,5230],{"class":5203},[3736,13769,5528],{"class":5203},[3736,13771,13553],{"class":5236},[3736,13773,6412],{"class":5203},[3736,13775,13776],{"class":5203}," +",[3736,13778,13779],{"class":5283}," route",[3736,13781,470],{"class":5203},[3736,13783,13784],{"class":5283},"fullPath\n",[3736,13786,13787],{"class":5199,"line":5361},[3736,13788,5215],{"emptyLinePlaceholder":542},[3736,13790,13791],{"class":5199,"line":5373},[3736,13792,13793],{"class":11550},"// IMPORTANT\n",[3736,13795,13796],{"class":5199,"line":5382},[3736,13797,13798],{"class":11550},"// If your frontend is http then use http\n",[3736,13800,13801],{"class":5199,"line":6676},[3736,13802,13803],{"class":11550},"// in your useFetch endpoint\n",[3736,13805,13806],{"class":5199,"line":6681},[3736,13807,13808],{"class":11550},"// If it is https then use https \n",[3736,13810,13811],{"class":5199,"line":6695},[3736,13812,13813],{"class":11550},"// Replace 'http://wp.websitegoblin.com' with your backend location\n",[3736,13815,13816,13818,13820,13822,13824,13827,13829,13831,13833,13835,13837,13839,13841,13843,13845,13847,13849,13851,13854,13856,13858],{"class":5199,"line":6721},[3736,13817,5343],{"class":5226},[3736,13819,12496],{"class":5203},[3736,13821,8913],{"class":5207},[3736,13823,5367],{"class":5203},[3736,13825,13826],{"class":5283}," navigation",[3736,13828,12501],{"class":5203},[3736,13830,12504],{"class":5283},[3736,13832,12501],{"class":5203},[3736,13834,12509],{"class":5283},[3736,13836,12501],{"class":5203},[3736,13838,12514],{"class":5283},[3736,13840,5376],{"class":5203},[3736,13842,6731],{"class":5203},[3736,13844,12521],{"class":5518},[3736,13846,12524],{"class":5351},[3736,13848,5355],{"class":5283},[3736,13850,6412],{"class":5203},[3736,13852,13853],{"class":5236},"http://wp.websitegoblin.com/wp-json/wp/v2/top-nav",[3736,13855,6412],{"class":5203},[3736,13857,5058],{"class":5283},[3736,13859,6764],{"class":5203},[3736,13861,13862],{"class":5199,"line":6747},[3736,13863,5215],{"emptyLinePlaceholder":542},[3736,13865,13866,13868,13870],{"class":5199,"line":6753},[3736,13867,5315],{"class":5203},[3736,13869,5332],{"class":5207},[3736,13871,5210],{"class":5203},[219,13873,13875,13876],{"id":13874},"fetch-wordpress-menu-api-data-with-usefetch","Fetch WordPress menu API data with ",[5182,13877,13878],{},"useFetch()",[193,13880,13881,13882,13887],{},"In our nuxt.js nav component we use the ",[197,13883,13886],{"href":13884,"rel":13885},"https://nuxt.com/docs/api/composables/use-fetch",[317],"useFetch() nuxt.js function"," to fetch our WordPress menu items from our custom endpoint. We then loop over the array that is returned and create our nav links using the data from our WordPress menu.",[3849,13889,13891],{"id":13890},"http-https-gotcha","Http / Https gotcha!",[193,13893,13894,13895,13898,13899,13901,13902,13473],{},"If your frontend is using http, you must also fetch data from your endpoint using http. Even if your WordPress Address (URL) is https. For example: I am using ",[5182,13896,13897],{},"https://wp.websitegoblin.com"," for my backend (notice it is https). I am using ",[5182,13900,13553],{}," for my frontend (http). This is how I would have my ",[5182,13903,13878],{},[5190,13905,13907],{"className":5192,"code":13906,"language":5194,"meta":262,"style":262},"// Using http eventhough backend is https\nconst { data: navigation, pending, error, refresh } = await useFetch('http://wp.websitegoblin.com/wp-json/wp/v2/top-nav');\n",[5182,13908,13909,13914],{"__ignoreMap":262},[3736,13910,13911],{"class":5199,"line":5200},[3736,13912,13913],{"class":5283},"// Using http eventhough backend is https\n",[3736,13915,13916],{"class":5199,"line":514},[3736,13917,13918],{"class":5283},"const { data: navigation, pending, error, refresh } = await useFetch('http://wp.websitegoblin.com/wp-json/wp/v2/top-nav');\n",[193,13920,13921],{},"Check you fetch request. If your frontend is HTTP you must make your fetch request to HTTP even if your backend is HTTPS",[193,13923,13924],{},"If you get this wrong your url's will point to the wrong pages. Basically whatever you use in the endpoint fetch request (http or https) is what will be used in the url's that are returned from the WordPress API.",[193,13926,13927],{},"So there you have it. That is how you create a nav menu in WordPress and pull it into Nuxt 3 using the WordPress REST API!",[5594,13929,13930],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":262,"searchDepth":514,"depth":514,"links":13932},[13933],{"id":13103,"depth":514,"text":169,"children":13934},[13935,13936,13937,13938,13939,13940],{"id":13112,"depth":520,"text":13113},{"id":13212,"depth":520,"text":13213},{"id":13233,"depth":520,"text":13234},{"id":13546,"depth":520,"text":13547},{"id":13569,"depth":520,"text":13570},{"id":13874,"depth":520,"text":13941},"Fetch WordPress menu API data with useFetch()",[5609,5610,10193],[5612,5613,10197],"How to get nav menu items into Nuxt 3 through the WordPress REST API",{"src":13946},"/images/wp/featured-wordpress-api-nav-menuWP-API-Nav-menu-thumbnail.webp",{},{"title":13949,"description":13950,"ogTitle":13949,"ogDescription":13950,"twitterCard":576},"WordPress API Nav Menu - [SOLVED 2023]","Fetch your nav menus with the WP REST API. Nuxt 3 example. Same concept for any framework. Simple step-by-step guide!","xTF-NYEn9hodSIYqqaQmK9x3kHCXe9_KtAR6uwOYnZY",{"id":13953,"title":85,"archived":175,"authors":13954,"badge":13957,"body":13958,"categories":14842,"categorySlugs":14843,"date":14844,"description":14845,"extension":538,"image":14846,"meta":14848,"navigation":542,"path":86,"schemaOrg":4854,"seo":14849,"stem":87,"__hash__":14853},"posts/3.blog/multiple-versions-of-acf-flexible-content-block.md",[13955],{"name":178,"to":179,"avatar":13956},{"src":181},{"label":12394},{"type":185,"value":13959,"toc":14835},[13960,13964,13967,14832],[188,13961,13963],{"id":13962},"multiple-versions-of-acf-flexible-content-block-with-nuxt-3","Multiple versions of ACF flexible content block with Nuxt 3",[193,13965,13966],{},"In this post we are going to look at how to make multiple versions of an ACF flexible content block and switch between them easily.",[4875,13968,13970,13973,13979,13983,13986,13989,13997,14003,14007,14010,14017,14282,14545,14548,14552,14567,14829],{"video-id":13969},"iscqvgIMqhA",[193,13971,13972],{},"This technique is going to involve adding an option to our ACF flexible content layout that lets us switch versions. We will then check which version is selected in Nuxt 3, then output the correct component depending on the version selected!",[193,13974,13975],{},[265,13976],{"alt":13977,"src":13978},"Toggle between different versions of the same component using Advanced Custom Fields","https://codingoblin.com/wp-content/uploads/2023/06/ACF-options-v1-v2-1024x576.png",[219,13980,13982],{"id":13981},"add-version-option-to-acf-flexible-content-layout","Add version option to ACF flexible content layout",[193,13984,13985],{},"The first thing we need to do is an an 'option' field to our flexible content layouts in Advanced Custom Fields. So head over to your flexible content field and select the layout you wish to have multiple versions of. In our example we will be using the 'cta' (Call to action) layout.",[193,13987,13988],{},"In our 'cta' layout we are going to add our 'option' field with the field type Radio Button. And we will give it the options:",[461,13990,13991,13994],{},[464,13992,13993],{},"one : Version One",[464,13995,13996],{},"two : Version Two",[193,13998,13999,14002],{},[304,14000,14001],{},"Notice the gaps around the colon (:), these gaps are required for it to work!"," Now click \"Save Changes\". Thats our Advanced Custom Field sorted. Now we need to head over to our page and select one of the versions we just created with our radio button. From our WordPress backend we are all setup and now ready to move on to sorting our Nuxt 3 application!",[219,14004,14006],{"id":14005},"create-different-component-versions-in-nuxt-3","Create different component versions in Nuxt 3",[193,14008,14009],{},"We now need to head back over to our Nuxt 3 application. We currently have 1 Cta.vue component, but we need another one. One for each version we wish to create. To keep things clean, its best to create a folder for each ACF Layout. So in our components folder, create a new folder called 'Cta'. Now move your existing Cta.vue component into the new Cta folder, and rename the Cta.vue component One.vue. Now when we want to output this component, we do so by doing .",[193,14011,14012,14013,14016],{},"In our Cta folder, we need to make another component, called Two.vue. We now need to create add the code for this second call to action component. You can either code this yourself or use a component library. I am using ",[197,14014,10150],{"href":10148,"rel":14015},[317],", so I am going to copy the code for a different Cta component, and paste it into my component. I am then going to make sure I define the layout prop, like in my One.vue call to action component. Your two Cta components should look like this:",[5190,14018,14021],{"className":5192,"code":14019,"filename":14020,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n      \u003Cdiv>\n        \u003Ch2>{{ layout.headline }}\u003C/h2>\n        \u003Cdiv>\n          \u003Ca :href=\"layout.link_1.url\">{{ layout.link_1.title }}\u003C/a>\n          \u003Ca :href=\"layout.link_2.url\">{{ layout.link_2.title }} \u003Cspan aria-hidden=\"true\">→\u003C/span>\u003C/a>\n        \u003C/div>\n      \u003C/div>\n    \u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst props = defineProps({\n    layout: Object\n})\n\u003C/script>\n","One.vue",[5182,14022,14023,14031,14039,14047,14069,14077,14125,14197,14205,14214,14222,14230,14234,14244,14258,14268,14274],{"__ignoreMap":262},[3736,14024,14025,14027,14029],{"class":5199,"line":5200},[3736,14026,5204],{"class":5203},[3736,14028,273],{"class":5207},[3736,14030,5210],{"class":5203},[3736,14032,14033,14035,14037],{"class":5199,"line":514},[3736,14034,5220],{"class":5203},[3736,14036,5223],{"class":5207},[3736,14038,5210],{"class":5203},[3736,14040,14041,14043,14045],{"class":5199,"line":520},[3736,14042,13599],{"class":5203},[3736,14044,5223],{"class":5207},[3736,14046,5210],{"class":5203},[3736,14048,14049,14051,14053,14055,14058,14060,14063,14065,14067],{"class":5199,"line":5244},[3736,14050,5247],{"class":5203},[3736,14052,188],{"class":5207},[3736,14054,8962],{"class":5203},[3736,14056,14057],{"class":5283}," layout",[3736,14059,470],{"class":5203},[3736,14061,14062],{"class":5283},"headline ",[3736,14064,8972],{"class":5203},[3736,14066,188],{"class":5207},[3736,14068,5210],{"class":5203},[3736,14070,14071,14073,14075],{"class":5199,"line":5265},[3736,14072,5247],{"class":5203},[3736,14074,5223],{"class":5207},[3736,14076,5210],{"class":5203},[3736,14078,14079,14082,14084,14086,14088,14090,14092,14095,14097,14100,14102,14105,14107,14109,14111,14113,14115,14117,14119,14121,14123],{"class":5199,"line":5292},[3736,14080,14081],{"class":5203},"          \u003C",[3736,14083,197],{"class":5207},[3736,14085,5273],{"class":5203},[3736,14087,13641],{"class":5226},[3736,14089,5230],{"class":5203},[3736,14091,5233],{"class":5203},[3736,14093,14094],{"class":5283},"layout",[3736,14096,470],{"class":5203},[3736,14098,14099],{"class":5283},"link_1",[3736,14101,470],{"class":5203},[3736,14103,14104],{"class":5283},"url",[3736,14106,5233],{"class":5203},[3736,14108,8962],{"class":5203},[3736,14110,14057],{"class":5283},[3736,14112,470],{"class":5203},[3736,14114,14099],{"class":5283},[3736,14116,470],{"class":5203},[3736,14118,8918],{"class":5283},[3736,14120,8972],{"class":5203},[3736,14122,197],{"class":5207},[3736,14124,5210],{"class":5203},[3736,14126,14127,14129,14131,14133,14135,14137,14139,14141,14143,14146,14148,14150,14152,14154,14156,14158,14160,14162,14164,14167,14170,14172,14174,14176,14178,14180,14182,14184,14187,14189,14191,14193,14195],{"class":5199,"line":5302},[3736,14128,14081],{"class":5203},[3736,14130,197],{"class":5207},[3736,14132,5273],{"class":5203},[3736,14134,13641],{"class":5226},[3736,14136,5230],{"class":5203},[3736,14138,5233],{"class":5203},[3736,14140,14094],{"class":5283},[3736,14142,470],{"class":5203},[3736,14144,14145],{"class":5283},"link_2",[3736,14147,470],{"class":5203},[3736,14149,14104],{"class":5283},[3736,14151,5233],{"class":5203},[3736,14153,8962],{"class":5203},[3736,14155,14057],{"class":5283},[3736,14157,470],{"class":5203},[3736,14159,14145],{"class":5283},[3736,14161,470],{"class":5203},[3736,14163,8918],{"class":5283},[3736,14165,14166],{"class":5203},"}}",[3736,14168,14169],{"class":5203}," \u003C",[3736,14171,3736],{"class":5207},[3736,14173,11662],{"class":5226},[3736,14175,5230],{"class":5203},[3736,14177,5233],{"class":5203},[3736,14179,260],{"class":5236},[3736,14181,5233],{"class":5203},[3736,14183,8949],{"class":5203},[3736,14185,14186],{"class":5283},"→",[3736,14188,5315],{"class":5203},[3736,14190,3736],{"class":5207},[3736,14192,5713],{"class":5203},[3736,14194,197],{"class":5207},[3736,14196,5210],{"class":5203},[3736,14198,14199,14201,14203],{"class":5199,"line":5312},[3736,14200,5295],{"class":5203},[3736,14202,5223],{"class":5207},[3736,14204,5210],{"class":5203},[3736,14206,14207,14210,14212],{"class":5199,"line":5322},[3736,14208,14209],{"class":5203},"      \u003C/",[3736,14211,5223],{"class":5207},[3736,14213,5210],{"class":5203},[3736,14215,14216,14218,14220],{"class":5199,"line":5327},[3736,14217,5305],{"class":5203},[3736,14219,5223],{"class":5207},[3736,14221,5210],{"class":5203},[3736,14223,14224,14226,14228],{"class":5199,"line":5340},[3736,14225,5315],{"class":5203},[3736,14227,273],{"class":5207},[3736,14229,5210],{"class":5203},[3736,14231,14232],{"class":5199,"line":5361},[3736,14233,5215],{"emptyLinePlaceholder":542},[3736,14235,14236,14238,14240,14242],{"class":5199,"line":5373},[3736,14237,5204],{"class":5203},[3736,14239,5332],{"class":5207},[3736,14241,5335],{"class":5226},[3736,14243,5210],{"class":5203},[3736,14245,14246,14248,14250,14252,14254,14256],{"class":5199,"line":5382},[3736,14247,5343],{"class":5226},[3736,14249,5346],{"class":5283},[3736,14251,5230],{"class":5203},[3736,14253,5352],{"class":5351},[3736,14255,5355],{"class":5283},[3736,14257,5358],{"class":5203},[3736,14259,14260,14263,14265],{"class":5199,"line":6676},[3736,14261,14262],{"class":5207},"    layout",[3736,14264,5367],{"class":5203},[3736,14266,14267],{"class":5283}," Object\n",[3736,14269,14270,14272],{"class":5199,"line":6681},[3736,14271,5376],{"class":5203},[3736,14273,5379],{"class":5283},[3736,14275,14276,14278,14280],{"class":5199,"line":6695},[3736,14277,5315],{"class":5203},[3736,14279,5332],{"class":5207},[3736,14281,5210],{"class":5203},[5190,14283,14286],{"className":5192,"code":14284,"filename":14285,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n      \u003Cdiv class=\"lg:flex lg:items-center lg:justify-between\">\n        \u003Ch2>{{ layout.headline }}\u003C/h2>\n        \u003Cdiv>\n          \u003Ca :href=\"layout.link_1.url\">{{ layout.link_1.title }}\u003C/a>\n          \u003Ca :href=\"layout.link_2.url\">{{ layout.link_2.title }} \u003Cspan aria-hidden=\"true\">→\u003C/span>\u003C/a>\n        \u003C/div>\n      \u003C/div>\n    \u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst props = defineProps({\n    layout: Object\n})\n\u003C/script>\n","Two.vue",[5182,14287,14288,14296,14304,14323,14343,14351,14395,14463,14471,14479,14487,14495,14499,14509,14523,14531,14537],{"__ignoreMap":262},[3736,14289,14290,14292,14294],{"class":5199,"line":5200},[3736,14291,5204],{"class":5203},[3736,14293,273],{"class":5207},[3736,14295,5210],{"class":5203},[3736,14297,14298,14300,14302],{"class":5199,"line":514},[3736,14299,5220],{"class":5203},[3736,14301,5223],{"class":5207},[3736,14303,5210],{"class":5203},[3736,14305,14306,14308,14310,14312,14314,14316,14319,14321],{"class":5199,"line":520},[3736,14307,13599],{"class":5203},[3736,14309,5223],{"class":5207},[3736,14311,5227],{"class":5226},[3736,14313,5230],{"class":5203},[3736,14315,5233],{"class":5203},[3736,14317,14318],{"class":5236},"lg:flex lg:items-center lg:justify-between",[3736,14320,5233],{"class":5203},[3736,14322,5210],{"class":5203},[3736,14324,14325,14327,14329,14331,14333,14335,14337,14339,14341],{"class":5199,"line":5244},[3736,14326,5247],{"class":5203},[3736,14328,188],{"class":5207},[3736,14330,8962],{"class":5203},[3736,14332,14057],{"class":5283},[3736,14334,470],{"class":5203},[3736,14336,14062],{"class":5283},[3736,14338,8972],{"class":5203},[3736,14340,188],{"class":5207},[3736,14342,5210],{"class":5203},[3736,14344,14345,14347,14349],{"class":5199,"line":5265},[3736,14346,5247],{"class":5203},[3736,14348,5223],{"class":5207},[3736,14350,5210],{"class":5203},[3736,14352,14353,14355,14357,14359,14361,14363,14365,14367,14369,14371,14373,14375,14377,14379,14381,14383,14385,14387,14389,14391,14393],{"class":5199,"line":5292},[3736,14354,14081],{"class":5203},[3736,14356,197],{"class":5207},[3736,14358,5273],{"class":5203},[3736,14360,13641],{"class":5226},[3736,14362,5230],{"class":5203},[3736,14364,5233],{"class":5203},[3736,14366,14094],{"class":5283},[3736,14368,470],{"class":5203},[3736,14370,14099],{"class":5283},[3736,14372,470],{"class":5203},[3736,14374,14104],{"class":5283},[3736,14376,5233],{"class":5203},[3736,14378,8962],{"class":5203},[3736,14380,14057],{"class":5283},[3736,14382,470],{"class":5203},[3736,14384,14099],{"class":5283},[3736,14386,470],{"class":5203},[3736,14388,8918],{"class":5283},[3736,14390,8972],{"class":5203},[3736,14392,197],{"class":5207},[3736,14394,5210],{"class":5203},[3736,14396,14397,14399,14401,14403,14405,14407,14409,14411,14413,14415,14417,14419,14421,14423,14425,14427,14429,14431,14433,14435,14437,14439,14441,14443,14445,14447,14449,14451,14453,14455,14457,14459,14461],{"class":5199,"line":5302},[3736,14398,14081],{"class":5203},[3736,14400,197],{"class":5207},[3736,14402,5273],{"class":5203},[3736,14404,13641],{"class":5226},[3736,14406,5230],{"class":5203},[3736,14408,5233],{"class":5203},[3736,14410,14094],{"class":5283},[3736,14412,470],{"class":5203},[3736,14414,14145],{"class":5283},[3736,14416,470],{"class":5203},[3736,14418,14104],{"class":5283},[3736,14420,5233],{"class":5203},[3736,14422,8962],{"class":5203},[3736,14424,14057],{"class":5283},[3736,14426,470],{"class":5203},[3736,14428,14145],{"class":5283},[3736,14430,470],{"class":5203},[3736,14432,8918],{"class":5283},[3736,14434,14166],{"class":5203},[3736,14436,14169],{"class":5203},[3736,14438,3736],{"class":5207},[3736,14440,11662],{"class":5226},[3736,14442,5230],{"class":5203},[3736,14444,5233],{"class":5203},[3736,14446,260],{"class":5236},[3736,14448,5233],{"class":5203},[3736,14450,8949],{"class":5203},[3736,14452,14186],{"class":5283},[3736,14454,5315],{"class":5203},[3736,14456,3736],{"class":5207},[3736,14458,5713],{"class":5203},[3736,14460,197],{"class":5207},[3736,14462,5210],{"class":5203},[3736,14464,14465,14467,14469],{"class":5199,"line":5312},[3736,14466,5295],{"class":5203},[3736,14468,5223],{"class":5207},[3736,14470,5210],{"class":5203},[3736,14472,14473,14475,14477],{"class":5199,"line":5322},[3736,14474,14209],{"class":5203},[3736,14476,5223],{"class":5207},[3736,14478,5210],{"class":5203},[3736,14480,14481,14483,14485],{"class":5199,"line":5327},[3736,14482,5305],{"class":5203},[3736,14484,5223],{"class":5207},[3736,14486,5210],{"class":5203},[3736,14488,14489,14491,14493],{"class":5199,"line":5340},[3736,14490,5315],{"class":5203},[3736,14492,273],{"class":5207},[3736,14494,5210],{"class":5203},[3736,14496,14497],{"class":5199,"line":5361},[3736,14498,5215],{"emptyLinePlaceholder":542},[3736,14500,14501,14503,14505,14507],{"class":5199,"line":5373},[3736,14502,5204],{"class":5203},[3736,14504,5332],{"class":5207},[3736,14506,5335],{"class":5226},[3736,14508,5210],{"class":5203},[3736,14510,14511,14513,14515,14517,14519,14521],{"class":5199,"line":5382},[3736,14512,5343],{"class":5226},[3736,14514,5346],{"class":5283},[3736,14516,5230],{"class":5203},[3736,14518,5352],{"class":5351},[3736,14520,5355],{"class":5283},[3736,14522,5358],{"class":5203},[3736,14524,14525,14527,14529],{"class":5199,"line":6676},[3736,14526,14262],{"class":5207},[3736,14528,5367],{"class":5203},[3736,14530,14267],{"class":5283},[3736,14532,14533,14535],{"class":5199,"line":6681},[3736,14534,5376],{"class":5203},[3736,14536,5379],{"class":5283},[3736,14538,14539,14541,14543],{"class":5199,"line":6695},[3736,14540,5315],{"class":5203},[3736,14542,5332],{"class":5207},[3736,14544,5210],{"class":5203},[193,14546,14547],{},"We now have 2 versions of our Cta component. It is worth noting that you can achieve the thing by conditionally outputting classes on just 1 component. However this is a matter of personal preference. And depending on the complexity of your components it is sometimes cleaner to separate them out into different components like we have done above.",[219,14549,14551],{"id":14550},"flexible-component-setup","Flexible component setup",[193,14553,14554,14555,14558,14559,14562,14563,14566],{},"We now need to make a slight adjustment to our main Flexible.vue component. Previously, we were outputting the only ",[5182,14556,14557],{},"Cta.vue"," component, when the ",[5182,14560,14561],{},"layout.acf_fc_layout"," prop was equal to 'cta'. Now we have 2 cta components we need to do another check to see which cta component we need to render. Change your ",[5182,14564,14565],{},"Flexible.vue"," component to look like this:",[5190,14568,14570],{"className":5192,"code":14569,"filename":14565,"language":5194,"meta":262,"style":262},"\u003Cscript setup>\nconst props = defineProps({\n    layout: Object\n})\n\u003C/script>\n\n\u003Ctemplate>\n    \u003Ctemplate v-if=\"layout.acf_fc_layout == 'header'\">\n      \u003CHeader :layout=\"layout\" />\n    \u003C/template>\n\n    \u003Ctemplate v-if=\"layout.acf_fc_layout == 'cta'\">\n      \u003CCtaOne v-if=\"layout.option == 'one'\" :layout=\"layout\" />\n      \u003CCtaTwo v-if=\"layout.option == 'two'\" :layout=\"layout\" />\n    \u003C/template>\n\n\u003C/template>\n",[5182,14571,14572,14582,14596,14604,14610,14618,14622,14630,14662,14683,14691,14695,14723,14767,14809,14817,14821],{"__ignoreMap":262},[3736,14573,14574,14576,14578,14580],{"class":5199,"line":5200},[3736,14575,5204],{"class":5203},[3736,14577,5332],{"class":5207},[3736,14579,5335],{"class":5226},[3736,14581,5210],{"class":5203},[3736,14583,14584,14586,14588,14590,14592,14594],{"class":5199,"line":514},[3736,14585,5343],{"class":5226},[3736,14587,5346],{"class":5283},[3736,14589,5230],{"class":5203},[3736,14591,5352],{"class":5351},[3736,14593,5355],{"class":5283},[3736,14595,5358],{"class":5203},[3736,14597,14598,14600,14602],{"class":5199,"line":520},[3736,14599,14262],{"class":5207},[3736,14601,5367],{"class":5203},[3736,14603,14267],{"class":5283},[3736,14605,14606,14608],{"class":5199,"line":5244},[3736,14607,5376],{"class":5203},[3736,14609,5379],{"class":5283},[3736,14611,14612,14614,14616],{"class":5199,"line":5265},[3736,14613,5315],{"class":5203},[3736,14615,5332],{"class":5207},[3736,14617,5210],{"class":5203},[3736,14619,14620],{"class":5199,"line":5292},[3736,14621,5215],{"emptyLinePlaceholder":542},[3736,14623,14624,14626,14628],{"class":5199,"line":5302},[3736,14625,5204],{"class":5203},[3736,14627,273],{"class":5207},[3736,14629,5210],{"class":5203},[3736,14631,14632,14634,14636,14639,14641,14643,14645,14647,14650,14653,14655,14658,14660],{"class":5199,"line":5312},[3736,14633,5220],{"class":5203},[3736,14635,273],{"class":5207},[3736,14637,14638],{"class":5518}," v-if",[3736,14640,5230],{"class":5203},[3736,14642,5233],{"class":5203},[3736,14644,14094],{"class":5283},[3736,14646,470],{"class":5203},[3736,14648,14649],{"class":5283},"acf_fc_layout ",[3736,14651,14652],{"class":5203},"==",[3736,14654,5528],{"class":5203},[3736,14656,14657],{"class":5236},"header",[3736,14659,6427],{"class":5203},[3736,14661,5210],{"class":5203},[3736,14663,14664,14666,14669,14671,14673,14675,14677,14679,14681],{"class":5199,"line":5322},[3736,14665,13599],{"class":5203},[3736,14667,14668],{"class":5207},"Header",[3736,14670,5273],{"class":5203},[3736,14672,14094],{"class":5226},[3736,14674,5230],{"class":5203},[3736,14676,5233],{"class":5203},[3736,14678,14094],{"class":5283},[3736,14680,5233],{"class":5203},[3736,14682,5289],{"class":5203},[3736,14684,14685,14687,14689],{"class":5199,"line":5327},[3736,14686,5305],{"class":5203},[3736,14688,273],{"class":5207},[3736,14690,5210],{"class":5203},[3736,14692,14693],{"class":5199,"line":5340},[3736,14694,5215],{"emptyLinePlaceholder":542},[3736,14696,14697,14699,14701,14703,14705,14707,14709,14711,14713,14715,14717,14719,14721],{"class":5199,"line":5361},[3736,14698,5220],{"class":5203},[3736,14700,273],{"class":5207},[3736,14702,14638],{"class":5518},[3736,14704,5230],{"class":5203},[3736,14706,5233],{"class":5203},[3736,14708,14094],{"class":5283},[3736,14710,470],{"class":5203},[3736,14712,14649],{"class":5283},[3736,14714,14652],{"class":5203},[3736,14716,5528],{"class":5203},[3736,14718,258],{"class":5236},[3736,14720,6427],{"class":5203},[3736,14722,5210],{"class":5203},[3736,14724,14725,14727,14730,14732,14734,14736,14738,14740,14743,14746,14748,14751,14753,14755,14757,14759,14761,14763,14765],{"class":5199,"line":5373},[3736,14726,13599],{"class":5203},[3736,14728,14729],{"class":5207},"CtaOne",[3736,14731,14638],{"class":5518},[3736,14733,5230],{"class":5203},[3736,14735,5233],{"class":5203},[3736,14737,14094],{"class":5283},[3736,14739,470],{"class":5203},[3736,14741,14742],{"class":5283},"option",[3736,14744,14745],{"class":5203}," == ",[3736,14747,6412],{"class":5203},[3736,14749,14750],{"class":5236},"one",[3736,14752,6427],{"class":5203},[3736,14754,5273],{"class":5203},[3736,14756,14094],{"class":5226},[3736,14758,5230],{"class":5203},[3736,14760,5233],{"class":5203},[3736,14762,14094],{"class":5283},[3736,14764,5233],{"class":5203},[3736,14766,5289],{"class":5203},[3736,14768,14769,14771,14774,14776,14778,14780,14782,14784,14786,14788,14790,14793,14795,14797,14799,14801,14803,14805,14807],{"class":5199,"line":5382},[3736,14770,13599],{"class":5203},[3736,14772,14773],{"class":5207},"CtaTwo",[3736,14775,14638],{"class":5518},[3736,14777,5230],{"class":5203},[3736,14779,5233],{"class":5203},[3736,14781,14094],{"class":5283},[3736,14783,470],{"class":5203},[3736,14785,14742],{"class":5283},[3736,14787,14745],{"class":5203},[3736,14789,6412],{"class":5203},[3736,14791,14792],{"class":5236},"two",[3736,14794,6427],{"class":5203},[3736,14796,5273],{"class":5203},[3736,14798,14094],{"class":5226},[3736,14800,5230],{"class":5203},[3736,14802,5233],{"class":5203},[3736,14804,14094],{"class":5283},[3736,14806,5233],{"class":5203},[3736,14808,5289],{"class":5203},[3736,14810,14811,14813,14815],{"class":5199,"line":6676},[3736,14812,5305],{"class":5203},[3736,14814,273],{"class":5207},[3736,14816,5210],{"class":5203},[3736,14818,14819],{"class":5199,"line":6681},[3736,14820,5215],{"emptyLinePlaceholder":542},[3736,14822,14823,14825,14827],{"class":5199,"line":6695},[3736,14824,5315],{"class":5203},[3736,14826,273],{"class":5207},[3736,14828,5210],{"class":5203},[193,14830,14831],{},"We are now all sorted. So we can now switch between versions of the same Advanced Custom flexible content layout. This means that if we want to test new styles or layouts, we don't need to rewrite our entire field to do so. We can simple click the radio button to select the version we want!",[5594,14833,14834],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":262,"searchDepth":514,"depth":514,"links":14836},[14837],{"id":13962,"depth":514,"text":13963,"children":14838},[14839,14840,14841],{"id":13981,"depth":520,"text":13982},{"id":14005,"depth":520,"text":14006},{"id":14550,"depth":520,"text":14551},[5610,10193],[5613,10197],"2023-06-30T00:00:00.000Z","How to make multiple versions of an ACF flexible content block and switch between them easily",{"src":14847},"/images/wp/featured-multiple-versions-of-acf-flexible-content-blockACF-Options.webp",{},{"title":14850,"description":14851,"ogTitle":14845,"ogDescription":14852,"twitterCard":576},"Multiple versions of ACF flexible content block - Codingoblin","Multiple versions of ACF flexible content blocks. Use in WordPress API with Nuxt 3. Switch between versions easily. Stop re-writing content!","Easily switch between versions of the same Advanced Custom Field. This guide shows how to add an 'option' field to your ACF and render the correct Nuxt 3 component depending on which option is selected!","GgNiFkIWZWaOY-akr2EPX-C5fMxw-3rxCXVefSJ_3o0",{"id":14855,"title":5,"archived":175,"authors":14856,"badge":14859,"body":14860,"categories":15939,"categorySlugs":15940,"date":15941,"description":15942,"extension":538,"image":15943,"meta":15945,"navigation":542,"path":6,"schemaOrg":4854,"seo":15946,"stem":7,"__hash__":15949},"posts/3.blog/advanced-custom-fields-flexible-content-with-wordpress-rest-api-and-nuxt-3.md",[14857],{"name":178,"to":179,"avatar":14858},{"src":181},{"label":13098},{"type":185,"value":14861,"toc":15928},[14862,14865,14868,15925],[188,14863,5],{"id":14864},"advanced-custom-fields-flexible-content-with-wordpress-rest-api-and-nuxt-3",[193,14866,14867],{},"Advanced Custom Fields flexible content allows us to have much more control over the content in our pages and posts. Instead of pulling in just the main bits of page data from our WordPress API such as the title and content, we will now be able to bring in all sorts of custom data. This makes our life much easier. We can now plonk in any components we like within our pages rather than just having long blocks of text. And we don't have to put all of our elements in the wysiwyg editor.",[4875,14869,14871,14875,14878,14882,14885,14889,14893,14902,14905,14909,14912,14916,14922,14925,14931,14937,14940,14946,14950,14953,14959,14963,14966,14972,14975,14981,14985,14988,14991,14995,14998,15133,15137,15140,15681,15685,15688,15916,15919],{"video-id":14870},"5Ijpn68FUyQ",[219,14872,14874],{"id":14873},"what-is-advanced-custom-fields","What is Advanced Custom Fields?",[193,14876,14877],{},"Advanced Custom Fields (ACF) is a WordPress plugin that allows you to create custom fields. Once you have created these fields you can choose where you can use them. Generally they are used in your posts and pages, but they can also be used in custom post types and options pages.",[3849,14879,14881],{"id":14880},"why-use-acf","Why use ACF?",[193,14883,14884],{},"The reason you should use Advanced Custom Fields is that it allows you to create better looking content, and create this content more easily. In general it makes life using WordPress far easier than if you are not using it.",[188,14886,14888],{"id":14887},"acf-flexible-content-with-wordpress-api-nuxt-3-guide","ACF flexible content with WordPress API & Nuxt 3 Guide",[219,14890,14892],{"id":14891},"install-advanced-custom-fields","Install Advanced Custom Fields",[193,14894,14895,14896,14901],{},"The first thing you need to do is install the ",[197,14897,14900],{"href":14898,"rel":14899},"https://www.advancedcustomfields.com/pro/",[317],"Advanced Custom Fields Pro plugin",". This is a paid for plugin but it is well worth the money. And I'm not being paid to promote this.",[193,14903,14904],{},"Once you have installed the plugin, update it so that you are using the most up to date version. Now we can get started!",[219,14906,14908],{"id":14907},"create-a-new-acf-field-group","Create a new ACF field group",[193,14910,14911],{},"Now we can create a field group in Advanced Custom Fields. We can call this anything we like, but as we are going to be using flexible content, I am going to name it \"Flexible\".",[3849,14913,14915],{"id":14914},"acf-field-group-settings","ACF Field Group Settings",[3831,14917,14919],{"id":14918},"location-rules",[304,14920,14921],{},"Location Rules",[193,14923,14924],{},"Scroll down to the settings section, and go to the \"Location Rules\". In these rules, we need to make sure that our field group is shown on all the pages or posts that we want to use our field group with. Unless you have custom post types, set this so that it is shown on our pages and posts. If you do have custom post types then make sure to add these to the rules also.",[193,14926,14927],{},[265,14928],{"alt":14929,"src":14930},"ACF settings location rules","/images/wp/acf-location-rules.webp",[3831,14932,14934],{"id":14933},"group-settings",[304,14935,14936],{},"Group Settings",[193,14938,14939],{},"Go to the \"Group Settings\" section and enable the \"Show in REST API\" option. This is important as if we don't do this then we will not be able to access our ACF fields in the WordPress REST API!",[193,14941,14942],{},[265,14943],{"alt":14944,"src":14945},"ACF group settings","/images/wp/acf-group-settings.webp",[219,14947,14949],{"id":14948},"create-flexible-content-field-in-acf","Create Flexible Content Field in ACF",[193,14951,14952],{},"Now our field group is setup, we can create our first custom field, which is going to be a flexible content field. So go select Flexible Content from the field type select menu. I am going to give my flexible content field the label 'Flexible' and the field name 'flexible'. You can give this field any label and name that you like, but remember whatever field name you give it is what you will use to reference it when you receive your page data from the WP API. The label is what will be shown in your WordPress page editor.",[193,14954,14955],{},[265,14956],{"alt":14957,"src":14958},"Creating a flexible content field in Advance Custom Fields","/images/wp/Screenshot-2023-06-29-at-17.16.18-1024x828.webp",[3849,14960,14962],{"id":14961},"create-a-layout-in-flexible-content-field","Create a Layout in Flexible Content field",[193,14964,14965],{},"We are now ready to create a Layout. So scroll down to the Layout section. In our example we are going to keep it nice and simple to start with. So we are going to create a header layout. We will give this header layout a name of 'header', again, this is what we will use to reference the field in the API.",[3831,14967,14969],{"id":14968},"add-fields-to-acf-layout",[304,14970,14971],{},"Add fields to ACF Layout",[193,14973,14974],{},"We now need to add some fields to our header layout. In our case we are going to add a 'title' field and a 'subtitle' field. These are both going to be text field types. Make sure you click \"Save Changes\".",[193,14976,14977],{},[265,14978],{"alt":14979,"src":14980},"Creating flexible content layout in Advanced Custom Fields","/images/wp/Screenshot-2023-06-29-at-17.16.48-1024x888.webp",[3849,14982,14984],{"id":14983},"add-our-advanced-custom-fields-to-a-page","Add our Advanced Custom Fields to a page",[193,14986,14987],{},"We are now at a point where we can add our flexible content to a page in our WordPress backend. So go to your home page in your WordPress editor. On this page you will now see a block under the standard wysiwyg editor that has the title \"Flexible\". This is our field group. And you will also notice within that block is the subtitle which is also \"Flexible\", this is our field! Click \"Add Row\" and you will see the option to add our Header layout that we just created. Go ahead and do this. You can now add the content for the title and subtitle. Save your changes to the page by clicking update.",[193,14989,14990],{},"Now, when we pull in our page data from the WordPress REST API, we will see an 'acf' property there. This will contain all the data for our Advanced Custom Fields!",[219,14992,14994],{"id":14993},"create-flexible-component-in-nuxt-3","Create Flexible component in Nuxt 3",[193,14996,14997],{},"Now head to your Nuxt 3 application. We need to create a new component. We are going to call this component Flexible. Paste the following code into your newly created Flexible component:",[5190,14999,15001],{"className":5192,"code":15000,"filename":14565,"language":5194,"meta":262,"style":262},"\u003Cscript setup>\nconst props = defineProps({\n    layout: Object\n})\n\u003C/script>\n\n\u003Ctemplate>\n\n    \u003Ctemplate v-if=\"layout.acf_fc_layout == 'header'\">\n        \u003CHeader :layout=\"layout\" />\n    \u003C/template>\n\n\u003C/template>\n",[5182,15002,15003,15013,15027,15035,15041,15049,15053,15061,15065,15093,15113,15121,15125],{"__ignoreMap":262},[3736,15004,15005,15007,15009,15011],{"class":5199,"line":5200},[3736,15006,5204],{"class":5203},[3736,15008,5332],{"class":5207},[3736,15010,5335],{"class":5226},[3736,15012,5210],{"class":5203},[3736,15014,15015,15017,15019,15021,15023,15025],{"class":5199,"line":514},[3736,15016,5343],{"class":5226},[3736,15018,5346],{"class":5283},[3736,15020,5230],{"class":5203},[3736,15022,5352],{"class":5351},[3736,15024,5355],{"class":5283},[3736,15026,5358],{"class":5203},[3736,15028,15029,15031,15033],{"class":5199,"line":520},[3736,15030,14262],{"class":5207},[3736,15032,5367],{"class":5203},[3736,15034,14267],{"class":5283},[3736,15036,15037,15039],{"class":5199,"line":5244},[3736,15038,5376],{"class":5203},[3736,15040,5379],{"class":5283},[3736,15042,15043,15045,15047],{"class":5199,"line":5265},[3736,15044,5315],{"class":5203},[3736,15046,5332],{"class":5207},[3736,15048,5210],{"class":5203},[3736,15050,15051],{"class":5199,"line":5292},[3736,15052,5215],{"emptyLinePlaceholder":542},[3736,15054,15055,15057,15059],{"class":5199,"line":5302},[3736,15056,5204],{"class":5203},[3736,15058,273],{"class":5207},[3736,15060,5210],{"class":5203},[3736,15062,15063],{"class":5199,"line":5312},[3736,15064,5215],{"emptyLinePlaceholder":542},[3736,15066,15067,15069,15071,15073,15075,15077,15079,15081,15083,15085,15087,15089,15091],{"class":5199,"line":5322},[3736,15068,5220],{"class":5203},[3736,15070,273],{"class":5207},[3736,15072,14638],{"class":5518},[3736,15074,5230],{"class":5203},[3736,15076,5233],{"class":5203},[3736,15078,14094],{"class":5283},[3736,15080,470],{"class":5203},[3736,15082,14649],{"class":5283},[3736,15084,14652],{"class":5203},[3736,15086,5528],{"class":5203},[3736,15088,14657],{"class":5236},[3736,15090,6427],{"class":5203},[3736,15092,5210],{"class":5203},[3736,15094,15095,15097,15099,15101,15103,15105,15107,15109,15111],{"class":5199,"line":5327},[3736,15096,5247],{"class":5203},[3736,15098,14668],{"class":5207},[3736,15100,5273],{"class":5203},[3736,15102,14094],{"class":5226},[3736,15104,5230],{"class":5203},[3736,15106,5233],{"class":5203},[3736,15108,14094],{"class":5283},[3736,15110,5233],{"class":5203},[3736,15112,5289],{"class":5203},[3736,15114,15115,15117,15119],{"class":5199,"line":5340},[3736,15116,5305],{"class":5203},[3736,15118,273],{"class":5207},[3736,15120,5210],{"class":5203},[3736,15122,15123],{"class":5199,"line":5361},[3736,15124,5215],{"emptyLinePlaceholder":542},[3736,15126,15127,15129,15131],{"class":5199,"line":5373},[3736,15128,5315],{"class":5203},[3736,15130,273],{"class":5207},[3736,15132,5210],{"class":5203},[3849,15134,15136],{"id":15135},"adjust-slugvue-page","Adjust [...slug].vue page",[193,15138,15139],{},"In our [...slug].vue file we are going to create a for loop. This for loop is going to loop over the layouts that are present in our page. Within this loop we will output our newly created Flexible component. We will pass the layout to the Flexible component on each iteration. Our Flexible component receives the layout on each iteration of the loop and checks the name of the layout. The Flexible component checks the name of the layout that is being passed to it, and outputs the appropriate component! Make the following change to your [...slug].vue file:",[5190,15141,15144],{"className":5192,"code":15142,"filename":15143,"language":5194,"meta":262,"style":262},"\u003Cscript setup>\nimport { ref } from 'vue'\n\nconst route = useRoute()\n\nconst slug = ref('')\n\nif(route.params.slug) {\n    let lastIndex = route.params.slug.length - 1\n\n    if(!route.params.slug[lastIndex]) {\n        slug.value = route.params.slug[lastIndex - 1]\n    } else {\n        slug.value = route.params.slug[lastIndex]\n    }\n} else {\n    slug.value = 'home'\n}\n\nconst { data, pending, error, refresh } = await useFetch('https://\u003Cyour-website>/wp-json/wp/v2/pages', {\n    query: { slug: slug.value }\n})\n\u003C/script>\n\n\u003Ctemplate>\n    \u003Cdiv>\n\n        // Remove this\n-       \u003CHeader :title=\"data[0].title.rendered\" :subtitle=\"data[0].content.rendered\" />\n\n        // Add this\n+       \u003Ctemplate v-for=\"layout in data[0].acf.flexible\">\n+           \u003CFlexible :layout=\"layout\" />\n+       \u003C/template>\n\n    \u003C/div>\n\u003C/template>\n","[...slug].vue",[5182,15145,15146,15156,15176,15180,15192,15196,15214,15218,15238,15268,15272,15304,15336,15346,15372,15376,15384,15401,15405,15409,15450,15471,15477,15485,15489,15497,15505,15509,15514,15577,15581,15586,15627,15651,15661,15665,15673],{"__ignoreMap":262},[3736,15147,15148,15150,15152,15154],{"class":5199,"line":5200},[3736,15149,5204],{"class":5203},[3736,15151,5332],{"class":5207},[3736,15153,5335],{"class":5226},[3736,15155,5210],{"class":5203},[3736,15157,15158,15160,15162,15164,15167,15170,15172,15174],{"class":5199,"line":514},[3736,15159,5519],{"class":5518},[3736,15161,12496],{"class":5203},[3736,15163,6210],{"class":5283},[3736,15165,15166],{"class":5203}," }",[3736,15168,15169],{"class":5518}," from",[3736,15171,5528],{"class":5203},[3736,15173,5194],{"class":5236},[3736,15175,5534],{"class":5203},[3736,15177,15178],{"class":5199,"line":520},[3736,15179,5215],{"emptyLinePlaceholder":542},[3736,15181,15182,15184,15186,15188,15190],{"class":5199,"line":5244},[3736,15183,5343],{"class":5226},[3736,15185,13746],{"class":5283},[3736,15187,5230],{"class":5203},[3736,15189,13751],{"class":5351},[3736,15191,6068],{"class":5283},[3736,15193,15194],{"class":5199,"line":5265},[3736,15195,5215],{"emptyLinePlaceholder":542},[3736,15197,15198,15200,15203,15205,15207,15209,15212],{"class":5199,"line":5292},[3736,15199,5343],{"class":5226},[3736,15201,15202],{"class":5283}," slug ",[3736,15204,5230],{"class":5203},[3736,15206,6210],{"class":5351},[3736,15208,5355],{"class":5283},[3736,15210,15211],{"class":5203},"''",[3736,15213,5379],{"class":5283},[3736,15215,15216],{"class":5199,"line":5302},[3736,15217,5215],{"emptyLinePlaceholder":542},[3736,15219,15220,15223,15226,15228,15231,15233,15236],{"class":5199,"line":5312},[3736,15221,15222],{"class":5518},"if",[3736,15224,15225],{"class":5283},"(route",[3736,15227,470],{"class":5203},[3736,15229,15230],{"class":5283},"params",[3736,15232,470],{"class":5203},[3736,15234,15235],{"class":5283},"slug) ",[3736,15237,5358],{"class":5203},[3736,15239,15240,15243,15246,15248,15250,15252,15254,15256,15259,15261,15264,15266],{"class":5199,"line":5322},[3736,15241,15242],{"class":5226},"    let",[3736,15244,15245],{"class":5283}," lastIndex",[3736,15247,6731],{"class":5203},[3736,15249,13779],{"class":5283},[3736,15251,470],{"class":5203},[3736,15253,15230],{"class":5283},[3736,15255,470],{"class":5203},[3736,15257,15258],{"class":5283},"slug",[3736,15260,470],{"class":5203},[3736,15262,15263],{"class":5283},"length",[3736,15265,6741],{"class":5203},[3736,15267,6744],{"class":6650},[3736,15269,15270],{"class":5199,"line":5327},[3736,15271,5215],{"emptyLinePlaceholder":542},[3736,15273,15274,15277,15279,15282,15285,15287,15289,15291,15293,15296,15299,15302],{"class":5199,"line":5340},[3736,15275,15276],{"class":5518},"    if",[3736,15278,5355],{"class":5207},[3736,15280,15281],{"class":5203},"!",[3736,15283,15284],{"class":5283},"route",[3736,15286,470],{"class":5203},[3736,15288,15230],{"class":5283},[3736,15290,470],{"class":5203},[3736,15292,15258],{"class":5283},[3736,15294,15295],{"class":5207},"[",[3736,15297,15298],{"class":5283},"lastIndex",[3736,15300,15301],{"class":5207},"]) ",[3736,15303,5358],{"class":5203},[3736,15305,15306,15309,15311,15313,15315,15317,15319,15321,15323,15325,15327,15329,15331,15334],{"class":5199,"line":5361},[3736,15307,15308],{"class":5283},"        slug",[3736,15310,470],{"class":5203},[3736,15312,6707],{"class":5283},[3736,15314,6731],{"class":5203},[3736,15316,13779],{"class":5283},[3736,15318,470],{"class":5203},[3736,15320,15230],{"class":5283},[3736,15322,470],{"class":5203},[3736,15324,15258],{"class":5283},[3736,15326,15295],{"class":5207},[3736,15328,15298],{"class":5283},[3736,15330,6741],{"class":5203},[3736,15332,15333],{"class":6650}," 1",[3736,15335,9322],{"class":5207},[3736,15337,15338,15341,15344],{"class":5199,"line":5373},[3736,15339,15340],{"class":5203},"    }",[3736,15342,15343],{"class":5518}," else",[3736,15345,6673],{"class":5203},[3736,15347,15348,15350,15352,15354,15356,15358,15360,15362,15364,15366,15368,15370],{"class":5199,"line":5382},[3736,15349,15308],{"class":5283},[3736,15351,470],{"class":5203},[3736,15353,6707],{"class":5283},[3736,15355,6731],{"class":5203},[3736,15357,13779],{"class":5283},[3736,15359,470],{"class":5203},[3736,15361,15230],{"class":5283},[3736,15363,470],{"class":5203},[3736,15365,15258],{"class":5283},[3736,15367,15295],{"class":5207},[3736,15369,15298],{"class":5283},[3736,15371,9322],{"class":5207},[3736,15373,15374],{"class":5199,"line":6676},[3736,15375,9317],{"class":5203},[3736,15377,15378,15380,15382],{"class":5199,"line":6681},[3736,15379,5376],{"class":5203},[3736,15381,15343],{"class":5518},[3736,15383,6673],{"class":5203},[3736,15385,15386,15389,15391,15393,15395,15397,15399],{"class":5199,"line":6695},[3736,15387,15388],{"class":5283},"    slug",[3736,15390,470],{"class":5203},[3736,15392,6707],{"class":5283},[3736,15394,6731],{"class":5203},[3736,15396,5528],{"class":5203},[3736,15398,12556],{"class":5236},[3736,15400,5534],{"class":5203},[3736,15402,15403],{"class":5199,"line":6721},[3736,15404,12122],{"class":5203},[3736,15406,15407],{"class":5199,"line":6747},[3736,15408,5215],{"emptyLinePlaceholder":542},[3736,15410,15411,15413,15415,15417,15419,15421,15423,15425,15427,15429,15431,15433,15435,15437,15439,15441,15444,15446,15448],{"class":5199,"line":6753},[3736,15412,5343],{"class":5226},[3736,15414,12496],{"class":5203},[3736,15416,8913],{"class":5283},[3736,15418,12501],{"class":5203},[3736,15420,12504],{"class":5283},[3736,15422,12501],{"class":5203},[3736,15424,12509],{"class":5283},[3736,15426,12501],{"class":5203},[3736,15428,12514],{"class":5283},[3736,15430,5376],{"class":5203},[3736,15432,6731],{"class":5203},[3736,15434,12521],{"class":5518},[3736,15436,12524],{"class":5351},[3736,15438,5355],{"class":5283},[3736,15440,6412],{"class":5203},[3736,15442,15443],{"class":5236},"https://\u003Cyour-website>/wp-json/wp/v2/pages",[3736,15445,6412],{"class":5203},[3736,15447,12501],{"class":5203},[3736,15449,6673],{"class":5203},[3736,15451,15452,15454,15456,15458,15460,15462,15464,15466,15469],{"class":5199,"line":6767},[3736,15453,12542],{"class":5207},[3736,15455,5367],{"class":5203},[3736,15457,12496],{"class":5203},[3736,15459,12549],{"class":5207},[3736,15461,5367],{"class":5203},[3736,15463,12549],{"class":5283},[3736,15465,470],{"class":5203},[3736,15467,15468],{"class":5283},"value ",[3736,15470,12122],{"class":5203},[3736,15472,15473,15475],{"class":5199,"line":6772},[3736,15474,5376],{"class":5203},[3736,15476,5379],{"class":5283},[3736,15478,15479,15481,15483],{"class":5199,"line":6779},[3736,15480,5315],{"class":5203},[3736,15482,5332],{"class":5207},[3736,15484,5210],{"class":5203},[3736,15486,15487],{"class":5199,"line":6784},[3736,15488,5215],{"emptyLinePlaceholder":542},[3736,15490,15491,15493,15495],{"class":5199,"line":6805},[3736,15492,5204],{"class":5203},[3736,15494,273],{"class":5207},[3736,15496,5210],{"class":5203},[3736,15498,15499,15501,15503],{"class":5199,"line":6818},[3736,15500,5220],{"class":5203},[3736,15502,5223],{"class":5207},[3736,15504,5210],{"class":5203},[3736,15506,15507],{"class":5199,"line":6825},[3736,15508,5215],{"emptyLinePlaceholder":542},[3736,15510,15511],{"class":5199,"line":13363},[3736,15512,15513],{"class":5283},"        // Remove this\n",[3736,15515,15516,15519,15521,15523,15525,15527,15529,15531,15534,15536,15538,15541,15543,15545,15548,15550,15552,15555,15557,15559,15561,15563,15565,15567,15569,15571,15573,15575],{"class":5199,"line":13368},[3736,15517,15518],{"class":5283},"-       ",[3736,15520,5204],{"class":5203},[3736,15522,14668],{"class":5207},[3736,15524,5273],{"class":5203},[3736,15526,12614],{"class":5226},[3736,15528,5230],{"class":5203},[3736,15530,5233],{"class":5203},[3736,15532,15533],{"class":5283},"data",[3736,15535,15295],{"class":5203},[3736,15537,12602],{"class":6650},[3736,15539,15540],{"class":5203},"].",[3736,15542,12614],{"class":5283},[3736,15544,470],{"class":5203},[3736,15546,15547],{"class":5283},"rendered",[3736,15549,5233],{"class":5203},[3736,15551,5273],{"class":5203},[3736,15553,15554],{"class":5226},"subtitle",[3736,15556,5230],{"class":5203},[3736,15558,5233],{"class":5203},[3736,15560,15533],{"class":5283},[3736,15562,15295],{"class":5203},[3736,15564,12602],{"class":6650},[3736,15566,15540],{"class":5203},[3736,15568,9522],{"class":5283},[3736,15570,470],{"class":5203},[3736,15572,15547],{"class":5283},[3736,15574,5233],{"class":5203},[3736,15576,5289],{"class":5203},[3736,15578,15579],{"class":5199,"line":13374},[3736,15580,5215],{"emptyLinePlaceholder":542},[3736,15582,15583],{"class":5199,"line":13379},[3736,15584,15585],{"class":5283},"        // Add this\n",[3736,15587,15588,15591,15593,15595,15597,15599,15601,15604,15606,15609,15611,15613,15615,15618,15620,15623,15625],{"class":5199,"line":13384},[3736,15589,15590],{"class":5283},"+       ",[3736,15592,5204],{"class":5203},[3736,15594,273],{"class":5207},[3736,15596,8819],{"class":5518},[3736,15598,5230],{"class":5203},[3736,15600,5233],{"class":5203},[3736,15602,15603],{"class":5283},"layout ",[3736,15605,8829],{"class":5203},[3736,15607,15608],{"class":5283}," data[",[3736,15610,12602],{"class":6650},[3736,15612,12605],{"class":5283},[3736,15614,470],{"class":5203},[3736,15616,15617],{"class":5283},"acf",[3736,15619,470],{"class":5203},[3736,15621,15622],{"class":5283},"flexible",[3736,15624,5233],{"class":5203},[3736,15626,5210],{"class":5203},[3736,15628,15629,15632,15634,15637,15639,15641,15643,15645,15647,15649],{"class":5199,"line":13389},[3736,15630,15631],{"class":5283},"+           ",[3736,15633,5204],{"class":5203},[3736,15635,15636],{"class":5207},"Flexible",[3736,15638,5273],{"class":5203},[3736,15640,14094],{"class":5226},[3736,15642,5230],{"class":5203},[3736,15644,5233],{"class":5203},[3736,15646,14094],{"class":5283},[3736,15648,5233],{"class":5203},[3736,15650,5289],{"class":5203},[3736,15652,15653,15655,15657,15659],{"class":5199,"line":13395},[3736,15654,15590],{"class":5283},[3736,15656,5315],{"class":5203},[3736,15658,273],{"class":5207},[3736,15660,5210],{"class":5203},[3736,15662,15663],{"class":5199,"line":13401},[3736,15664,5215],{"emptyLinePlaceholder":542},[3736,15666,15667,15669,15671],{"class":5199,"line":13406},[3736,15668,5305],{"class":5203},[3736,15670,5223],{"class":5207},[3736,15672,5210],{"class":5203},[3736,15674,15675,15677,15679],{"class":5199,"line":13412},[3736,15676,5315],{"class":5203},[3736,15678,273],{"class":5207},[3736,15680,5210],{"class":5203},[3849,15682,15684],{"id":15683},"adjust-header-component","Adjust Header component",[193,15686,15687],{},"We are nearly there! We just need to adjust our Header.vue component so that it can receive the layout prop. Make the following changes to the Header.vue component:",[5190,15689,15692],{"className":5192,"code":15690,"filename":15691,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003Cdiv>\n\n            // Remove this\n            \u003Ch2>{{ title }}\u003C/h2>\n            \u003Cp>{{ subtitle }}\u003C/p>\n\n            // Add this\n            \u003Ch2>{{ layout.title }}\u003C/h2>\n            \u003Cp>{{ layout.subtitle }}\u003C/p>\n\n        \u003C/div>\n    \u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst props = defineProps({\n    title: String, // remove this\n    subtitle: String // remove this\n    layout: Object // add this\n})\n\u003C/script>\n","Header.vue",[5182,15693,15694,15702,15710,15718,15722,15727,15744,15761,15765,15770,15790,15811,15815,15823,15831,15839,15843,15853,15867,15881,15894,15902,15908],{"__ignoreMap":262},[3736,15695,15696,15698,15700],{"class":5199,"line":5200},[3736,15697,5204],{"class":5203},[3736,15699,273],{"class":5207},[3736,15701,5210],{"class":5203},[3736,15703,15704,15706,15708],{"class":5199,"line":514},[3736,15705,5220],{"class":5203},[3736,15707,5223],{"class":5207},[3736,15709,5210],{"class":5203},[3736,15711,15712,15714,15716],{"class":5199,"line":520},[3736,15713,5247],{"class":5203},[3736,15715,5223],{"class":5207},[3736,15717,5210],{"class":5203},[3736,15719,15720],{"class":5199,"line":5244},[3736,15721,5215],{"emptyLinePlaceholder":542},[3736,15723,15724],{"class":5199,"line":5265},[3736,15725,15726],{"class":5283},"            // Remove this\n",[3736,15728,15729,15731,15733,15735,15738,15740,15742],{"class":5199,"line":5292},[3736,15730,5268],{"class":5203},[3736,15732,188],{"class":5207},[3736,15734,8962],{"class":5203},[3736,15736,15737],{"class":5283}," title ",[3736,15739,8972],{"class":5203},[3736,15741,188],{"class":5207},[3736,15743,5210],{"class":5203},[3736,15745,15746,15748,15750,15752,15755,15757,15759],{"class":5199,"line":5302},[3736,15747,5268],{"class":5203},[3736,15749,193],{"class":5207},[3736,15751,8962],{"class":5203},[3736,15753,15754],{"class":5283}," subtitle ",[3736,15756,8972],{"class":5203},[3736,15758,193],{"class":5207},[3736,15760,5210],{"class":5203},[3736,15762,15763],{"class":5199,"line":5312},[3736,15764,5215],{"emptyLinePlaceholder":542},[3736,15766,15767],{"class":5199,"line":5322},[3736,15768,15769],{"class":5283},"            // Add this\n",[3736,15771,15772,15774,15776,15778,15780,15782,15784,15786,15788],{"class":5199,"line":5327},[3736,15773,5268],{"class":5203},[3736,15775,188],{"class":5207},[3736,15777,8962],{"class":5203},[3736,15779,14057],{"class":5283},[3736,15781,470],{"class":5203},[3736,15783,8918],{"class":5283},[3736,15785,8972],{"class":5203},[3736,15787,188],{"class":5207},[3736,15789,5210],{"class":5203},[3736,15791,15792,15794,15796,15798,15800,15802,15805,15807,15809],{"class":5199,"line":5340},[3736,15793,5268],{"class":5203},[3736,15795,193],{"class":5207},[3736,15797,8962],{"class":5203},[3736,15799,14057],{"class":5283},[3736,15801,470],{"class":5203},[3736,15803,15804],{"class":5283},"subtitle ",[3736,15806,8972],{"class":5203},[3736,15808,193],{"class":5207},[3736,15810,5210],{"class":5203},[3736,15812,15813],{"class":5199,"line":5361},[3736,15814,5215],{"emptyLinePlaceholder":542},[3736,15816,15817,15819,15821],{"class":5199,"line":5373},[3736,15818,5295],{"class":5203},[3736,15820,5223],{"class":5207},[3736,15822,5210],{"class":5203},[3736,15824,15825,15827,15829],{"class":5199,"line":5382},[3736,15826,5305],{"class":5203},[3736,15828,5223],{"class":5207},[3736,15830,5210],{"class":5203},[3736,15832,15833,15835,15837],{"class":5199,"line":6676},[3736,15834,5315],{"class":5203},[3736,15836,273],{"class":5207},[3736,15838,5210],{"class":5203},[3736,15840,15841],{"class":5199,"line":6681},[3736,15842,5215],{"emptyLinePlaceholder":542},[3736,15844,15845,15847,15849,15851],{"class":5199,"line":6695},[3736,15846,5204],{"class":5203},[3736,15848,5332],{"class":5207},[3736,15850,5335],{"class":5226},[3736,15852,5210],{"class":5203},[3736,15854,15855,15857,15859,15861,15863,15865],{"class":5199,"line":6721},[3736,15856,5343],{"class":5226},[3736,15858,5346],{"class":5283},[3736,15860,5230],{"class":5203},[3736,15862,5352],{"class":5351},[3736,15864,5355],{"class":5283},[3736,15866,5358],{"class":5203},[3736,15868,15869,15871,15873,15876,15878],{"class":5199,"line":6747},[3736,15870,12585],{"class":5207},[3736,15872,5367],{"class":5203},[3736,15874,15875],{"class":5283}," String",[3736,15877,12501],{"class":5203},[3736,15879,15880],{"class":11550}," // remove this\n",[3736,15882,15883,15886,15888,15891],{"class":5199,"line":6753},[3736,15884,15885],{"class":5207},"    subtitle",[3736,15887,5367],{"class":5203},[3736,15889,15890],{"class":5283}," String ",[3736,15892,15893],{"class":11550},"// remove this\n",[3736,15895,15896,15899],{"class":5199,"line":6767},[3736,15897,15898],{"class":5283},"    layout: Object ",[3736,15900,15901],{"class":11550},"// add this\n",[3736,15903,15904,15906],{"class":5199,"line":6772},[3736,15905,5376],{"class":5203},[3736,15907,5379],{"class":5283},[3736,15909,15910,15912,15914],{"class":5199,"line":6779},[3736,15911,5315],{"class":5203},[3736,15913,5332],{"class":5207},[3736,15915,5210],{"class":5203},[193,15917,15918],{},"Head to your home page and you should now see the header component displaying your Advanced Custom Fields flexible content header layout!",[193,15920,15921,15922],{},"Need super fast hosting? ",[197,15923,15924],{"href":7120},"Host your WP backend and Nuxt 3 frontend on Cloudways.",[5594,15926,15927],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":262,"searchDepth":514,"depth":514,"links":15929},[15930,15933],{"id":14864,"depth":514,"text":5,"children":15931},[15932],{"id":14873,"depth":520,"text":14874},{"id":14887,"depth":514,"text":14888,"children":15934},[15935,15936,15937,15938],{"id":14891,"depth":520,"text":14892},{"id":14907,"depth":520,"text":14908},{"id":14948,"depth":520,"text":14949},{"id":14993,"depth":520,"text":14994},[5609,5610,10193],[5612,5613,10197],"2023-06-29T00:00:00.000Z","How to use Advanced Custom Fields flexible content field with the WordPress REST API and Nuxt 3",{"src":15944},"/images/wp/featured-advanced-custom-fields-flexible-content-with-wordpress-rest-api-and-nuxt-3ACF-setup-with-wp-Nuxt-3-tailwindcss.webp",{},{"title":15947,"description":15948,"ogTitle":15947,"ogDescription":15948,"twitterCard":576},"ACF Flexible Content with WordPress API & Nuxt 3 [GUIDE]","Advanced Custom Fields flexible content field. Pull in ACF fields with the WordPress REST API. Use ACF fields in Nuxt 3. EASY SETUP","yYc5I8RRcqWwpch4fjlh5Ahx8Jp5EmnK6ULX2fz-ONI",{"id":15951,"title":157,"archived":175,"authors":15952,"badge":15955,"body":15956,"categories":17000,"categorySlugs":17001,"date":17002,"description":17003,"extension":538,"image":17004,"meta":17006,"navigation":542,"path":158,"schemaOrg":4854,"seo":17007,"stem":159,"__hash__":17010},"posts/3.blog/using-wordpress-rest-api-with-nuxt-3-and-tailwind-css.md",[15953],{"name":178,"to":179,"avatar":15954},{"src":181},{"label":13098},{"type":185,"value":15957,"toc":16987},[15958,15962,16984],[188,15959,15961],{"id":15960},"how-to-use-the-wordpress-rest-api-with-nuxt-3-and-tailwind-css","How to use the WordPress REST API with Nuxt 3 and Tailwind CSS",[4875,15963,15965,15968,15971,15975,15984,15987,15991,16006,16030,16069,16111,16115,16118,16122,16129,16133,16136,16140,16147,16151,16159,16163,16171,16175,16178,16256,16268,16277,16322,16326,16339,16751,16758,16761,16767,16771,16794,16798,16804,16808,16815,16819,16828,16968,16973,16977],{"video-id":15964},"qRtkrbWL9G0",[193,15966,15967],{},"WordPress is a great for building websites (breaking news). However, in my opinion, it isn't the most enjoyable experience when it comes to theme and plugin development. But now we have the WordPress REST API available to use, that has all changed!",[193,15969,15970],{},"The WordPress REST API allows us to use WordPress as a content management system only, and use our own frontend to display our WordPress content. This makes development much more enjoyable as we can use Javascript frameworks, such as Nuxt.js, to display our content! In this guide we will do just that. Create a WordPress REST API by installing WordPress with a Headless theme. Then create a Nuxt 3 project to pull in our data from the WordPress API. Then style our Nuxt 3 components using Tailwind CSS. It's going to be a lovely experience.",[219,15972,15974],{"id":15973},"create-headless-wordpress-theme","Create Headless WordPress theme",[193,15976,15977,15978,15983],{},"If you haven't already, create a new WordPress installation. I am doing this on a live server using ",[197,15979,15982],{"href":15980,"rel":15981},"https://www.hostg.xyz/SHD4v",[317],"Hostinger"," but you are free to do this on localhost and will get the same result. Once your WordPress installation is ready, we can build our headless theme. I am going to FTP into my website as I am doing it on a live server. If you are on localhost, open your installation in your development environment and go to the themes directory.",[193,15985,15986],{},"We need to create the directory for our new theme. So create a directory called 'headless_theme'.",[3849,15988,15990],{"id":15989},"files-required-for-the-headless-wordpress-theme","Files required for the Headless WordPress theme",[193,15992,15993,15994,15997,15998,4492,16000,3083,16002,16005],{},"In your newly created ",[5182,15995,15996],{},"headless_theme"," directory, create the following files: ",[5182,15999,11284],{},[5182,16001,13141],{},[5182,16003,16004],{},"style.css",". Include the following in each file.",[5190,16007,16009],{"className":11050,"code":16008,"filename":11284,"language":7706,"meta":262,"style":262},"\n\u003Cscript type=\"text/javascript\">\n    window.location = 'https://front.websitegoblin.com';\n\u003C/script>\n",[5182,16010,16011,16015,16020,16025],{"__ignoreMap":262},[3736,16012,16013],{"class":5199,"line":5200},[3736,16014,5215],{"emptyLinePlaceholder":542},[3736,16016,16017],{"class":5199,"line":514},[3736,16018,16019],{},"\u003Cscript type=\"text/javascript\">\n",[3736,16021,16022],{"class":5199,"line":520},[3736,16023,16024],{},"    window.location = 'https://front.websitegoblin.com';\n",[3736,16026,16027],{"class":5199,"line":5244},[3736,16028,16029],{},"\u003C/script>\n",[5190,16031,16033],{"className":11050,"code":16032,"filename":13141,"language":7706,"meta":262,"style":262},"\u003C?php\n\nif (!defined('ABSPATH')) {\n    exit;\n} // Exit if accessed directly\n\n// Remove p tags from content\nremove_filter('the_content', 'wpautop');\n",[5182,16034,16035,16039,16043,16047,16051,16055,16059,16064],{"__ignoreMap":262},[3736,16036,16037],{"class":5199,"line":5200},[3736,16038,13155],{},[3736,16040,16041],{"class":5199,"line":514},[3736,16042,5215],{"emptyLinePlaceholder":542},[3736,16044,16045],{"class":5199,"line":520},[3736,16046,13164],{},[3736,16048,16049],{"class":5199,"line":5244},[3736,16050,13169],{},[3736,16052,16053],{"class":5199,"line":5265},[3736,16054,13174],{},[3736,16056,16057],{"class":5199,"line":5292},[3736,16058,5215],{"emptyLinePlaceholder":542},[3736,16060,16061],{"class":5199,"line":5302},[3736,16062,16063],{},"// Remove p tags from content\n",[3736,16065,16066],{"class":5199,"line":5312},[3736,16067,16068],{},"remove_filter('the_content', 'wpautop');\n",[5190,16070,16074],{"className":16071,"code":16072,"filename":16004,"language":16073,"meta":262,"style":262},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","/*\nTheme Name: Headless\nAuthor: John\nAuthor URI: https://codingoblin.com\nDescription: headless theme for using WP as a REST API only\nVersion: 1.0.0\n*/\n","css",[5182,16075,16076,16081,16086,16091,16096,16101,16106],{"__ignoreMap":262},[3736,16077,16078],{"class":5199,"line":5200},[3736,16079,16080],{"class":11550},"/*\n",[3736,16082,16083],{"class":5199,"line":514},[3736,16084,16085],{"class":11550},"Theme Name: Headless\n",[3736,16087,16088],{"class":5199,"line":520},[3736,16089,16090],{"class":11550},"Author: John\n",[3736,16092,16093],{"class":5199,"line":5244},[3736,16094,16095],{"class":11550},"Author URI: https://codingoblin.com\n",[3736,16097,16098],{"class":5199,"line":5265},[3736,16099,16100],{"class":11550},"Description: headless theme for using WP as a REST API only\n",[3736,16102,16103],{"class":5199,"line":5292},[3736,16104,16105],{"class":11550},"Version: 1.0.0\n",[3736,16107,16108],{"class":5199,"line":5302},[3736,16109,16110],{"class":11550},"*/\n",[219,16112,16114],{"id":16113},"settings-and-plugins","Settings and plugins",[193,16116,16117],{},"To avoid headaches down the line, you need to sort out your permalinks settings. Go to 'permalinks' in the WordPress settings menu and select the 'Post name' option. Remember to save the changes. I would now recommend installing the 'Classic Editor' plugin. This makes life a lot easier.",[219,16119,16121],{"id":16120},"test-the-wordpress-rest-api-endpoint","Test the WordPress REST API endpoint",[193,16123,16124,16125,16128],{},"We are now at a point where we can test our WordPress API by hitting an endpoint. To do this, go to ",[5182,16126,16127],{},"/wp-json/wp/v2/pages",", in your browser. On this page you will see all the data for the pages you created previously.",[219,16130,16132],{"id":16131},"nuxt-3-project-setup","Nuxt 3 project setup",[193,16134,16135],{},"The next thing we need to do is get a new Nuxt 3 project setup.",[3849,16137,16139],{"id":16138},"install-nuxt-3-project","Install Nuxt 3 Project",[193,16141,16142,16143,470],{},"Instructions for this can be seen on the ",[197,16144,12469],{"href":16145,"rel":16146},"https://nuxt.com/docs/getting-started/installation",[317],[3849,16148,16150],{"id":16149},"install-tailwind-css","Install Tailwind CSS",[193,16152,16153,16154,470],{},"We now want to install Tailwind CSS. The guide to do this can be seen at the ",[197,16155,16158],{"href":16156,"rel":16157},"https://tailwindcss.com/docs/guides/nuxtjs#3",[317],"Tailwind CSS docs",[3849,16160,16162],{"id":16161},"install-tailwind-ui-dependencies-optional","Install Tailwind UI dependencies (optional)",[193,16164,16165,16166,470],{},"If you are using Tailwind UI, remember to install the relevant dependencies. These can be seen in the ",[197,16167,16170],{"href":16168,"rel":16169},"https://tailwindui.com/documentation#vue-installing-dependencies",[317],"Tailwind UI docs",[3849,16172,16174],{"id":16173},"sort-out-our-nuxt-3-project","Sort out our Nuxt 3 project",[193,16176,16177],{},"At this point we have everything we need installed. We just need to make a few adjustments to out Nuxt 3 project before we get going. We want to make it so that we can use layouts, pages and components. Start by heading to your app.vue file and make the following changes:",[5190,16179,16182],{"className":5192,"code":16180,"filename":16181,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003CNuxtWelcome />\n    \u003C/div>\n\n    \u003CNuxtLayout>\n        \u003CNuxtPage/>\n    \u003C/NuxtLayout>\n\u003C/template>\n","app.vue",[5182,16183,16184,16192,16200,16209,16217,16221,16230,16240,16248],{"__ignoreMap":262},[3736,16185,16186,16188,16190],{"class":5199,"line":5200},[3736,16187,5204],{"class":5203},[3736,16189,273],{"class":5207},[3736,16191,5210],{"class":5203},[3736,16193,16194,16196,16198],{"class":5199,"line":514},[3736,16195,5220],{"class":5203},[3736,16197,5223],{"class":5207},[3736,16199,5210],{"class":5203},[3736,16201,16202,16204,16207],{"class":5199,"line":520},[3736,16203,5247],{"class":5203},[3736,16205,16206],{"class":5207},"NuxtWelcome",[3736,16208,5289],{"class":5203},[3736,16210,16211,16213,16215],{"class":5199,"line":5244},[3736,16212,5305],{"class":5203},[3736,16214,5223],{"class":5207},[3736,16216,5210],{"class":5203},[3736,16218,16219],{"class":5199,"line":5265},[3736,16220,5215],{"emptyLinePlaceholder":542},[3736,16222,16223,16225,16228],{"class":5199,"line":5292},[3736,16224,5220],{"class":5203},[3736,16226,16227],{"class":5207},"NuxtLayout",[3736,16229,5210],{"class":5203},[3736,16231,16232,16234,16237],{"class":5199,"line":5302},[3736,16233,5247],{"class":5203},[3736,16235,16236],{"class":5207},"NuxtPage",[3736,16238,16239],{"class":5203},"/>\n",[3736,16241,16242,16244,16246],{"class":5199,"line":5312},[3736,16243,5305],{"class":5203},[3736,16245,16227],{"class":5207},[3736,16247,5210],{"class":5203},[3736,16249,16250,16252,16254],{"class":5199,"line":5322},[3736,16251,5315],{"class":5203},[3736,16253,273],{"class":5207},[3736,16255,5210],{"class":5203},[193,16257,16258,16259,4492,16262,3083,16265,470],{},"Now you want to create the following directories in the root of your project: ",[5182,16260,16261],{},"layouts",[5182,16263,16264],{},"pages",[5182,16266,16267],{},"components",[193,16269,15993,16270,16272,16273,16276],{},[5182,16271,16261],{}," directory, create a ",[5182,16274,16275],{},"default.vue"," file, paste in the following:",[5190,16278,16280],{"className":5192,"code":16279,"filename":16275,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003Cslot />\n    \u003C/div>\n\u003C/template>\n",[5182,16281,16282,16290,16298,16306,16314],{"__ignoreMap":262},[3736,16283,16284,16286,16288],{"class":5199,"line":5200},[3736,16285,5204],{"class":5203},[3736,16287,273],{"class":5207},[3736,16289,5210],{"class":5203},[3736,16291,16292,16294,16296],{"class":5199,"line":514},[3736,16293,5220],{"class":5203},[3736,16295,5223],{"class":5207},[3736,16297,5210],{"class":5203},[3736,16299,16300,16302,16304],{"class":5199,"line":520},[3736,16301,5247],{"class":5203},[3736,16303,5710],{"class":5207},[3736,16305,5289],{"class":5203},[3736,16307,16308,16310,16312],{"class":5199,"line":5244},[3736,16309,5305],{"class":5203},[3736,16311,5223],{"class":5207},[3736,16313,5210],{"class":5203},[3736,16315,16316,16318,16320],{"class":5199,"line":5265},[3736,16317,5315],{"class":5203},[3736,16319,273],{"class":5207},[3736,16321,5210],{"class":5203},[219,16323,16325],{"id":16324},"fetch-data-from-wordpress-api-using-nuxt-3","Fetch data from WordPress API using Nuxt 3",[193,16327,16328,16329,16331,16332,16335,16336,16338],{},"Right, we are getting there! We are now ready to fetch some data from our WordPress API from within out Nuxt 3 project. In your newly created ",[5182,16330,16264],{}," directory create a file called ",[5182,16333,16334],{},"[...slug.vue]",". This file name looks a bit weird but it will all make sense. Paste the following code into your ",[5182,16337,16334],{}," file:",[5190,16340,16342],{"className":5192,"code":16341,"filename":16334,"language":5194,"meta":262,"style":262},"\u003Cscript setup>\nimport { ref } from 'vue'\n\nconst route = useRoute()\n\nconst slug = ref('')\n\nif(route.params.slug) {\n    let lastIndex = route.params.slug.length - 1\n\n    if(!route.params.slug[lastIndex]) {\n        slug.value = route.params.slug[lastIndex - 1]\n    } else {\n        slug.value = route.params.slug[lastIndex]\n    }\n} else {\n    slug.value = 'home'\n}\n\nconst { data, pending, error, refresh } = await useFetch('https://\u003Cyout-website>/wp-json/wp/v2/pages', {\n    query: { slug: slug.value }\n})\n\u003C/script>\n\n\u003Ctemplate>\n    \u003Cdiv>\n        \u003CHeader :title=\"data[0].title.rendered\" :subtitle=\"data[0].content.rendered\" />\n    \u003C/div>\n\u003C/template>\n",[5182,16343,16344,16354,16372,16376,16388,16392,16408,16412,16428,16454,16458,16484,16514,16522,16548,16552,16560,16576,16580,16584,16625,16645,16651,16659,16663,16671,16679,16735,16743],{"__ignoreMap":262},[3736,16345,16346,16348,16350,16352],{"class":5199,"line":5200},[3736,16347,5204],{"class":5203},[3736,16349,5332],{"class":5207},[3736,16351,5335],{"class":5226},[3736,16353,5210],{"class":5203},[3736,16355,16356,16358,16360,16362,16364,16366,16368,16370],{"class":5199,"line":514},[3736,16357,5519],{"class":5518},[3736,16359,12496],{"class":5203},[3736,16361,6210],{"class":5283},[3736,16363,15166],{"class":5203},[3736,16365,15169],{"class":5518},[3736,16367,5528],{"class":5203},[3736,16369,5194],{"class":5236},[3736,16371,5534],{"class":5203},[3736,16373,16374],{"class":5199,"line":520},[3736,16375,5215],{"emptyLinePlaceholder":542},[3736,16377,16378,16380,16382,16384,16386],{"class":5199,"line":5244},[3736,16379,5343],{"class":5226},[3736,16381,13746],{"class":5283},[3736,16383,5230],{"class":5203},[3736,16385,13751],{"class":5351},[3736,16387,6068],{"class":5283},[3736,16389,16390],{"class":5199,"line":5265},[3736,16391,5215],{"emptyLinePlaceholder":542},[3736,16393,16394,16396,16398,16400,16402,16404,16406],{"class":5199,"line":5292},[3736,16395,5343],{"class":5226},[3736,16397,15202],{"class":5283},[3736,16399,5230],{"class":5203},[3736,16401,6210],{"class":5351},[3736,16403,5355],{"class":5283},[3736,16405,15211],{"class":5203},[3736,16407,5379],{"class":5283},[3736,16409,16410],{"class":5199,"line":5302},[3736,16411,5215],{"emptyLinePlaceholder":542},[3736,16413,16414,16416,16418,16420,16422,16424,16426],{"class":5199,"line":5312},[3736,16415,15222],{"class":5518},[3736,16417,15225],{"class":5283},[3736,16419,470],{"class":5203},[3736,16421,15230],{"class":5283},[3736,16423,470],{"class":5203},[3736,16425,15235],{"class":5283},[3736,16427,5358],{"class":5203},[3736,16429,16430,16432,16434,16436,16438,16440,16442,16444,16446,16448,16450,16452],{"class":5199,"line":5322},[3736,16431,15242],{"class":5226},[3736,16433,15245],{"class":5283},[3736,16435,6731],{"class":5203},[3736,16437,13779],{"class":5283},[3736,16439,470],{"class":5203},[3736,16441,15230],{"class":5283},[3736,16443,470],{"class":5203},[3736,16445,15258],{"class":5283},[3736,16447,470],{"class":5203},[3736,16449,15263],{"class":5283},[3736,16451,6741],{"class":5203},[3736,16453,6744],{"class":6650},[3736,16455,16456],{"class":5199,"line":5327},[3736,16457,5215],{"emptyLinePlaceholder":542},[3736,16459,16460,16462,16464,16466,16468,16470,16472,16474,16476,16478,16480,16482],{"class":5199,"line":5340},[3736,16461,15276],{"class":5518},[3736,16463,5355],{"class":5207},[3736,16465,15281],{"class":5203},[3736,16467,15284],{"class":5283},[3736,16469,470],{"class":5203},[3736,16471,15230],{"class":5283},[3736,16473,470],{"class":5203},[3736,16475,15258],{"class":5283},[3736,16477,15295],{"class":5207},[3736,16479,15298],{"class":5283},[3736,16481,15301],{"class":5207},[3736,16483,5358],{"class":5203},[3736,16485,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508,16510,16512],{"class":5199,"line":5361},[3736,16487,15308],{"class":5283},[3736,16489,470],{"class":5203},[3736,16491,6707],{"class":5283},[3736,16493,6731],{"class":5203},[3736,16495,13779],{"class":5283},[3736,16497,470],{"class":5203},[3736,16499,15230],{"class":5283},[3736,16501,470],{"class":5203},[3736,16503,15258],{"class":5283},[3736,16505,15295],{"class":5207},[3736,16507,15298],{"class":5283},[3736,16509,6741],{"class":5203},[3736,16511,15333],{"class":6650},[3736,16513,9322],{"class":5207},[3736,16515,16516,16518,16520],{"class":5199,"line":5373},[3736,16517,15340],{"class":5203},[3736,16519,15343],{"class":5518},[3736,16521,6673],{"class":5203},[3736,16523,16524,16526,16528,16530,16532,16534,16536,16538,16540,16542,16544,16546],{"class":5199,"line":5382},[3736,16525,15308],{"class":5283},[3736,16527,470],{"class":5203},[3736,16529,6707],{"class":5283},[3736,16531,6731],{"class":5203},[3736,16533,13779],{"class":5283},[3736,16535,470],{"class":5203},[3736,16537,15230],{"class":5283},[3736,16539,470],{"class":5203},[3736,16541,15258],{"class":5283},[3736,16543,15295],{"class":5207},[3736,16545,15298],{"class":5283},[3736,16547,9322],{"class":5207},[3736,16549,16550],{"class":5199,"line":6676},[3736,16551,9317],{"class":5203},[3736,16553,16554,16556,16558],{"class":5199,"line":6681},[3736,16555,5376],{"class":5203},[3736,16557,15343],{"class":5518},[3736,16559,6673],{"class":5203},[3736,16561,16562,16564,16566,16568,16570,16572,16574],{"class":5199,"line":6695},[3736,16563,15388],{"class":5283},[3736,16565,470],{"class":5203},[3736,16567,6707],{"class":5283},[3736,16569,6731],{"class":5203},[3736,16571,5528],{"class":5203},[3736,16573,12556],{"class":5236},[3736,16575,5534],{"class":5203},[3736,16577,16578],{"class":5199,"line":6721},[3736,16579,12122],{"class":5203},[3736,16581,16582],{"class":5199,"line":6747},[3736,16583,5215],{"emptyLinePlaceholder":542},[3736,16585,16586,16588,16590,16592,16594,16596,16598,16600,16602,16604,16606,16608,16610,16612,16614,16616,16619,16621,16623],{"class":5199,"line":6753},[3736,16587,5343],{"class":5226},[3736,16589,12496],{"class":5203},[3736,16591,8913],{"class":5283},[3736,16593,12501],{"class":5203},[3736,16595,12504],{"class":5283},[3736,16597,12501],{"class":5203},[3736,16599,12509],{"class":5283},[3736,16601,12501],{"class":5203},[3736,16603,12514],{"class":5283},[3736,16605,5376],{"class":5203},[3736,16607,6731],{"class":5203},[3736,16609,12521],{"class":5518},[3736,16611,12524],{"class":5351},[3736,16613,5355],{"class":5283},[3736,16615,6412],{"class":5203},[3736,16617,16618],{"class":5236},"https://\u003Cyout-website>/wp-json/wp/v2/pages",[3736,16620,6412],{"class":5203},[3736,16622,12501],{"class":5203},[3736,16624,6673],{"class":5203},[3736,16626,16627,16629,16631,16633,16635,16637,16639,16641,16643],{"class":5199,"line":6767},[3736,16628,12542],{"class":5207},[3736,16630,5367],{"class":5203},[3736,16632,12496],{"class":5203},[3736,16634,12549],{"class":5207},[3736,16636,5367],{"class":5203},[3736,16638,12549],{"class":5283},[3736,16640,470],{"class":5203},[3736,16642,15468],{"class":5283},[3736,16644,12122],{"class":5203},[3736,16646,16647,16649],{"class":5199,"line":6772},[3736,16648,5376],{"class":5203},[3736,16650,5379],{"class":5283},[3736,16652,16653,16655,16657],{"class":5199,"line":6779},[3736,16654,5315],{"class":5203},[3736,16656,5332],{"class":5207},[3736,16658,5210],{"class":5203},[3736,16660,16661],{"class":5199,"line":6784},[3736,16662,5215],{"emptyLinePlaceholder":542},[3736,16664,16665,16667,16669],{"class":5199,"line":6805},[3736,16666,5204],{"class":5203},[3736,16668,273],{"class":5207},[3736,16670,5210],{"class":5203},[3736,16672,16673,16675,16677],{"class":5199,"line":6818},[3736,16674,5220],{"class":5203},[3736,16676,5223],{"class":5207},[3736,16678,5210],{"class":5203},[3736,16680,16681,16683,16685,16687,16689,16691,16693,16695,16697,16699,16701,16703,16705,16707,16709,16711,16713,16715,16717,16719,16721,16723,16725,16727,16729,16731,16733],{"class":5199,"line":6825},[3736,16682,5247],{"class":5203},[3736,16684,14668],{"class":5207},[3736,16686,5273],{"class":5203},[3736,16688,12614],{"class":5226},[3736,16690,5230],{"class":5203},[3736,16692,5233],{"class":5203},[3736,16694,15533],{"class":5283},[3736,16696,15295],{"class":5203},[3736,16698,12602],{"class":6650},[3736,16700,15540],{"class":5203},[3736,16702,12614],{"class":5283},[3736,16704,470],{"class":5203},[3736,16706,15547],{"class":5283},[3736,16708,5233],{"class":5203},[3736,16710,5273],{"class":5203},[3736,16712,15554],{"class":5226},[3736,16714,5230],{"class":5203},[3736,16716,5233],{"class":5203},[3736,16718,15533],{"class":5283},[3736,16720,15295],{"class":5203},[3736,16722,12602],{"class":6650},[3736,16724,15540],{"class":5203},[3736,16726,9522],{"class":5283},[3736,16728,470],{"class":5203},[3736,16730,15547],{"class":5283},[3736,16732,5233],{"class":5203},[3736,16734,5289],{"class":5203},[3736,16736,16737,16739,16741],{"class":5199,"line":13363},[3736,16738,5305],{"class":5203},[3736,16740,5223],{"class":5207},[3736,16742,5210],{"class":5203},[3736,16744,16745,16747,16749],{"class":5199,"line":13368},[3736,16746,5315],{"class":5203},[3736,16748,273],{"class":5207},[3736,16750,5210],{"class":5203},[219,16752,16754,16755,16757],{"id":16753},"what-is-happening-in-the-slugvue-file","What is happening in the ",[5182,16756,16334],{}," file",[193,16759,16760],{},"There are a couple of bits going on here, so let's take a look in closer detail.",[193,16762,16763],{},[265,16764],{"alt":16765,"src":16766},"wordpress rest api with nuxt 3 - ...slug.vue file meme","https://codingoblin.com/wp-content/uploads/2023/06/884vb9.jpg",[3849,16768,16770],{"id":16769},"unusual-file-name-nuxt-3-catch-all-route","Unusual file name - Nuxt 3 Catch all route",[193,16772,16773,16774,16779,16780,16782,16783,16786,16787,16790,16791,470],{},"The first thing that may look strange to you is the file name itself. This allows us to use a 'catch-all route', which you can read about ",[197,16775,16778],{"href":16776,"rel":16777},"https://nuxt.com/docs/guide/directory-structure/pages/#catch-all-route",[317],"here on the Nuxt website",". You will also see that we have a ",[5182,16781,15284],{}," const that is assigned to ",[5182,16784,16785],{},"useRoute()",". This object contains all the data for the current route. Importantly it contains a params property. This params property will contain an array with all params in the route. For example, the path ",[5182,16788,16789],{},"/abc/def"," will contain a params array containing: ",[5182,16792,16793],{},"['abc', 'def']",[3849,16795,16797],{"id":16796},"assigning-the-params-to-a-const","Assigning the params to a const",[193,16799,16800,16801,16803],{},"You can see that we assign the last param in the params array to our ",[5182,16802,15258],{}," const. This allows us to then use this value as a query param to fetch data from the specific page that we want. If there are no param, we set the slug's value to 'home'. This is so we fetch the home page data from our API like what would happen if we visited the route path for a normal WordPress website.",[3849,16805,16807],{"id":16806},"the-usefetch-function","The useFetch function",[193,16809,16810,16811,16814],{},"The useFetch function is then used to query out WordPress API endpoint. The ",[5182,16812,16813],{},"query"," object allows us to get the data from the specific page that we want by entering using the slug for that page.",[219,16816,16818],{"id":16817},"create-a-component","Create a component",[193,16820,16821,16822,16824,16825,16827],{},"We now want to pass the data object, that we have fetched from our WordPress API, to a component. So we need to create a component. In your components directory (which we created earlier), create a new component called ",[5182,16823,15691],{},". In this new ",[5182,16826,15691],{}," component, paste in the following:",[5190,16829,16831],{"className":5192,"code":16830,"filename":15691,"language":5194,"meta":262,"style":262},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003Cdiv>\n            \u003Ch2>{{ title }}\u003C/h2>\n            \u003Cp>{{ subtitle }}\u003C/p>\n        \u003C/div>\n    \u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst props = defineProps({\n    title: String\n    subtitle: String\n})\n\u003C/script>\n",[5182,16832,16833,16841,16849,16857,16873,16889,16897,16905,16913,16917,16927,16941,16949,16954,16960],{"__ignoreMap":262},[3736,16834,16835,16837,16839],{"class":5199,"line":5200},[3736,16836,5204],{"class":5203},[3736,16838,273],{"class":5207},[3736,16840,5210],{"class":5203},[3736,16842,16843,16845,16847],{"class":5199,"line":514},[3736,16844,5220],{"class":5203},[3736,16846,5223],{"class":5207},[3736,16848,5210],{"class":5203},[3736,16850,16851,16853,16855],{"class":5199,"line":520},[3736,16852,5247],{"class":5203},[3736,16854,5223],{"class":5207},[3736,16856,5210],{"class":5203},[3736,16858,16859,16861,16863,16865,16867,16869,16871],{"class":5199,"line":5244},[3736,16860,5268],{"class":5203},[3736,16862,188],{"class":5207},[3736,16864,8962],{"class":5203},[3736,16866,15737],{"class":5283},[3736,16868,8972],{"class":5203},[3736,16870,188],{"class":5207},[3736,16872,5210],{"class":5203},[3736,16874,16875,16877,16879,16881,16883,16885,16887],{"class":5199,"line":5265},[3736,16876,5268],{"class":5203},[3736,16878,193],{"class":5207},[3736,16880,8962],{"class":5203},[3736,16882,15754],{"class":5283},[3736,16884,8972],{"class":5203},[3736,16886,193],{"class":5207},[3736,16888,5210],{"class":5203},[3736,16890,16891,16893,16895],{"class":5199,"line":5292},[3736,16892,5295],{"class":5203},[3736,16894,5223],{"class":5207},[3736,16896,5210],{"class":5203},[3736,16898,16899,16901,16903],{"class":5199,"line":5302},[3736,16900,5305],{"class":5203},[3736,16902,5223],{"class":5207},[3736,16904,5210],{"class":5203},[3736,16906,16907,16909,16911],{"class":5199,"line":5312},[3736,16908,5315],{"class":5203},[3736,16910,273],{"class":5207},[3736,16912,5210],{"class":5203},[3736,16914,16915],{"class":5199,"line":5322},[3736,16916,5215],{"emptyLinePlaceholder":542},[3736,16918,16919,16921,16923,16925],{"class":5199,"line":5327},[3736,16920,5204],{"class":5203},[3736,16922,5332],{"class":5207},[3736,16924,5335],{"class":5226},[3736,16926,5210],{"class":5203},[3736,16928,16929,16931,16933,16935,16937,16939],{"class":5199,"line":5340},[3736,16930,5343],{"class":5226},[3736,16932,5346],{"class":5283},[3736,16934,5230],{"class":5203},[3736,16936,5352],{"class":5351},[3736,16938,5355],{"class":5283},[3736,16940,5358],{"class":5203},[3736,16942,16943,16945,16947],{"class":5199,"line":5361},[3736,16944,12585],{"class":5207},[3736,16946,5367],{"class":5203},[3736,16948,5370],{"class":5283},[3736,16950,16951],{"class":5199,"line":5373},[3736,16952,16953],{"class":5283},"    subtitle: String\n",[3736,16955,16956,16958],{"class":5199,"line":5382},[3736,16957,5376],{"class":5203},[3736,16959,5379],{"class":5283},[3736,16961,16962,16964,16966],{"class":5199,"line":6676},[3736,16963,5315],{"class":5203},[3736,16965,5332],{"class":5207},[3736,16967,5210],{"class":5203},[1462,16969,16970],{},[193,16971,16972],{},"I am using a pre-built Header component from Tailwind UI so am unable to show the classes as they are paid for. However you are free to use any Tailwind CSS classes that you like to style this component.",[219,16974,16976],{"id":16975},"testing-your-project","Testing your project",[193,16978,16979,16980,16983],{},"Everything should now be working. If you visit ",[5182,16981,16982],{},"/about"," in the browser, you should see the title and content of your about page. If you visit the route or 'home' you will see the data for the home page of your website!",[5594,16985,16986],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":262,"searchDepth":514,"depth":514,"links":16988},[16989],{"id":15960,"depth":514,"text":15961,"children":16990},[16991,16992,16993,16994,16995,16996,16998,16999],{"id":15973,"depth":520,"text":15974},{"id":16113,"depth":520,"text":16114},{"id":16120,"depth":520,"text":16121},{"id":16131,"depth":520,"text":16132},{"id":16324,"depth":520,"text":16325},{"id":16753,"depth":520,"text":16997},"What is happening in the [...slug.vue] file",{"id":16817,"depth":520,"text":16818},{"id":16975,"depth":520,"text":16976},[5609,5610,10193],[5612,5613,10197],"2023-06-21T00:00:00.000Z","How to create a headless WordPress theme. Connect your Nuxt 3 app to the WordPress REST API. Use Tailwind CSS to style your components",{"src":17005},"/images/wp/featured-using-wordpress-rest-api-with-nuxt-3-and-tailwind-cssWP-Nuxt-Tailwind-Setup.webp",{},{"title":17008,"description":17003,"ogTitle":17009,"ogDescription":17003,"twitterCard":576},"WordPress REST API with Nuxt 3 and Tailwind CSS - Codingoblin","WordPress REST API with Nuxt 3 and Tailwind CSS","y1QlgtRnXqZrZh_ImioWdmXrs1sxQI8ddYtU5z_PoDI",{"id":17012,"title":45,"archived":175,"authors":17013,"badge":17016,"body":17017,"categories":17032,"categorySlugs":17033,"date":17034,"description":17035,"extension":538,"image":17036,"meta":17038,"navigation":542,"path":46,"schemaOrg":4854,"seo":17039,"stem":47,"__hash__":17041},"posts/3.blog/daisyui-first-impressions-2023.md",[17014],{"name":178,"to":179,"avatar":17015},{"src":181},{"label":5609},{"type":185,"value":17018,"toc":17029},[17019,17023,17026],[188,17020,17022],{"id":17021},"daisyui-first-impressions-2023","daisyUI - first impressions 2023",[193,17024,17025],{},"My first impressions of daisyUI. Second impressions coming soon!",[4875,17027],{"video-id":17028},"I78f5Atoa-Y",{"title":262,"searchDepth":514,"depth":514,"links":17030},[17031],{"id":17021,"depth":514,"text":17022},[5609],[5612],"2023-06-02T00:00:00.000Z","First impressions using the free component library daisyUI. Built using Tailwind CSS. Is it any good? Is it worth using?",{"src":17037},"/images/wp/featured-daisyui-first-impressions-2023daisyUI-First-Impression-Thumbnail.webp",{},{"title":17040,"description":17035,"ogTitle":17040,"ogDescription":17035,"twitterCard":576},"daisyUi - An IDIOT's first impressions [2023]","QaMBBo_jDgHNbk3czcnxUCoobCmupxerk3To_3Llh2c",{"id":17043,"title":141,"archived":175,"authors":17044,"badge":17047,"body":17048,"categories":17226,"categorySlugs":17227,"date":17228,"description":17229,"extension":538,"image":17230,"meta":17232,"navigation":542,"path":142,"schemaOrg":4854,"seo":17233,"stem":143,"__hash__":17238},"posts/3.blog/tailwind-ui-review-2023.md",[17045],{"name":178,"to":179,"avatar":17046},{"src":181},{"label":5609},{"type":185,"value":17049,"toc":17214},[17050,17053,17056],[188,17051,141],{"id":17052},"tailwind-ui-review-2023",[193,17054,17055],{},"Here it is! My Tailwind UI review originally written in 2023, but updated for 2024!",[4875,17057,17059,17063,17066,17072,17076,17079,17083,17086,17144,17150,17154,17157,17161,17164,17168,17171,17175,17183,17187,17190,17194,17197,17201,17204,17207,17211],{"video-id":17058},"_xRzY416a60",[219,17060,17062],{"id":17061},"what-is-tailwind-ui","What is Tailwind UI",[193,17064,17065],{},"Tailwind UI is a set of components and templates created by the guys that made Tailwind CSS. It speeds up development by allowing you to focus on writing logical code rather than worrying about design. For me this is great as I am not naturally good at design. When I try to design websites by myself they look like they were created in the 1990's. Which is not ideal. So without any more waffling, let's get into the review.",[193,17067,17068],{},[265,17069],{"alt":17070,"src":17071},"Tailwind UI review - screenshot","https://codingoblin.com/wp-content/uploads/2023/05/Screenshot-2023-12-04-at-08.38.10-1024x545.webp",[219,17073,17075],{"id":17074},"review","Review",[193,17077,17078],{},"Here it is, my review of Tailwind UI. I'll cut to the chase. It's good, very good. It's so good that it makes me wonder why I am even bothering to write a review for it. It's so good that I want to cry. It's so good, that when I first bought it, I turned to my friend Geoffrey - who was sitting next to me - and said \"this is pretty good.\" That was a lie. Not the bit about it being good. The bit about Geoffrey. I don't have a friend called Geoffrey. Anyway, let's take a look at the pros and cons of Tailwind UI!",[219,17080,17082],{"id":17081},"pros-of-using-tailwind-ui","Pros of using Tailwind UI",[193,17084,17085],{},"There are many reasons to use Tailwind UI. Let's take a look at some of these reasons.",[461,17087,17088,17095,17102,17123,17130,17137],{},[464,17089,17090,17094],{},[3849,17091,17093],{"id":17092},"lots-of-components","LOTS of components","There are loads of components. This is great because it means that you will almost certainly find a component that fits your need for every situation you find yourself in. If you need a hero section, there (at the time of writing this) are 12 to choose from. Need a call to action? Well there are 11 to choose from. Need a table? There are 20, yes 20 to choose from. The choice is ridiculously good.",[464,17096,17097,17101],{},[3849,17098,17100],{"id":17099},"great-looking-components","Great looking components","The components look beautiful. This is great as it means that your website is going to look good no matter what. It makes it look like you have design skills even if you are like me and have the design skills of a potato.",[464,17103,17104,17108,17109,17114,17115,17119,17120,470],{},[3849,17105,17107],{"id":17106},"easy-to-install","Easy to install","Installation is pretty much a case of installing Tailwind CSS, headlessui and icons. And is made so easy that I actually felt stupid creating a Nuxt 3 installation guide for Tailwind CSS as its so simple to do. ",[197,17110,17113],{"href":17111,"rel":17112},"https://tailwindui.com/documentation",[317],"The documentation"," does such a good job of talking you through setup and there are ",[197,17116,17118],{"href":5162,"rel":17117},[317],"individual guides for installing Tailwind on different frameworks",". Although at the time of writing this, there isn't a guide for WordPress, but don't worry you can check out my ",[197,17121,17122],{"href":74},"WordPress Tailwind installation guide here",[464,17124,17125,17129],{},[3849,17126,17128],{"id":17127},"constant-updates","Constant Updates","The team behind Tailwind UI are constantly adding new components and updating existing ones. This is great as you only have to pay for access once but get all of the updates forever. This means you have constant access to modern looking components, and never have an excuse to have a dated looking website!",[464,17131,17132,17136],{},[3849,17133,17135],{"id":17134},"familiarity-if-you-already-use-tailwind-css","Familiarity (if you already use Tailwind CSS)","This isn't to be overlooked. If you already use Tailwind CSS (which I'm assuming you do if you are reading this), then this will mean that using Tailwind UI is ridiculously simple for you. It's underrated how important this is. If you are constantly using Tailwind CSS then it will just feel natural using Tailwind UI.",[464,17138,17139,17143],{},[3849,17140,17142],{"id":17141},"easy-to-customise","Easy to customise","The nature of Tailwind CSS is that it is easy to customise. As Tailwind UI is created using Tailwind CSS classes, it is ridiculously easy to customise. Simple add or remove and classes or markup as needed.",[193,17145,17146],{},[265,17147],{"alt":17148,"src":17149},"Reasons to use Tailwind UI infographic","https://codingoblin.com/wp-content/uploads/2023/05/TailwindUI-Codingoblin-Infographic-483x1024.webp",[219,17151,17153],{"id":17152},"cons-of-using-tailwind-ui","Cons of using Tailwind UI",[193,17155,17156],{},"I need to be honest here, I am struggling to think of any cons. But for the purpose of writing a balanced review I will think hard and come up with something. So here goes... Erm.. Okay I've got one. The templates are only only available in React and Next.js. It would be great if the templates were available in Vue.js and Nuxt.js. But to be honest, at the time of purchasing Tailwind UI, the templates weren't even available so it seems harsh to be negative about something which I didn't even really pay for.",[219,17158,17160],{"id":17159},"tailwind-ui-vs-daisyui","Tailwind UI vs DaisyUI",[193,17162,17163],{},"I need to have a play around with DaisyUI so I will update this when I have done so. I might even make a video comparing the two.",[219,17165,17167],{"id":17166},"is-tailwind-ui-good-value-for-money","Is Tailwind UI good value for money?",[193,17169,17170],{},"Yes, Tailwind UI is good value for money. If they didn't keep adding to it and updating it, it would be good value for money. But the fact that they are constantly updating and adding components, it is excellent value for money.",[219,17172,17174],{"id":17173},"should-you-buy-tailwind-ui","Should you buy Tailwind UI?",[193,17176,17177,17178,17182],{},"The short answer is yes. Yes you should absolutely buy Tailwind UI. Tailwind UI is the best thing I have ever spent money on. Here is how I can justify saying this. Many of these reasons have been mentioned in the ",[197,17179,17181],{"href":17180},"#pros","pros of using Tailwind UI section"," above, but there are relevant here.",[3849,17184,17186],{"id":17185},"tailwind-ui-is-a-time-saver","Tailwind UI is a time saver",[193,17188,17189],{},"I use it pretty much every single day, and I can safely say that it saves me days worth of time, that's right, days. Not hours, days. Think about it. If you were to design just one of the Tailwind UI components yourself it would take you a long time. And the chances are, unless you are a talented designer, it would not look anywhere near as good as the components on Tailwind UI. Also, you can customise the components to look exactly how you want them. Even if you are going to make lots of changes, you still have a really strong starting point from which to build upon.",[3849,17191,17193],{"id":17192},"never-have-an-outdated-looking-website","Never have an outdated looking website",[193,17195,17196],{},"Because the components on Tailwind UI are constantly being updated, and new components are being added, your websites will always look modern. And you don't need to pay for updates. You pay once and get updates for life. This is another reason why you should buy Tailwind UI.",[3849,17198,17200],{"id":17199},"simple-and-fun-to-use","Simple and Fun to use",[193,17202,17203],{},"Tailwind UI is simple to use and fun to use. This is important as it makes your life easier. If it's intuitive and easy to use, which it is, then you will have more fun using it.",[193,17205,17206],{},"Overall it is a no-brainer from my point of view. Tailwind UI speeds up development, is fun and simple to use and offers a great all round experience. So I 100% recommend using Tailwind UI.",[219,17208,17210],{"id":17209},"my-opinion-of-tailwind-ui-in-2024","My opinion of Tailwind UI in 2024",[193,17212,17213],{},"It is now 2024 and I am still using Tailwind UI pretty much every day. The team have released even more fresh components and templates. This further enforces the point that it is great value for money. Remember, you can pay just once for lifetime access!",{"title":262,"searchDepth":514,"depth":514,"links":17215},[17216],{"id":17052,"depth":514,"text":141,"children":17217},[17218,17219,17220,17221,17222,17223,17224,17225],{"id":17061,"depth":520,"text":17062},{"id":17074,"depth":520,"text":17075},{"id":17081,"depth":520,"text":17082},{"id":17152,"depth":520,"text":17153},{"id":17159,"depth":520,"text":17160},{"id":17166,"depth":520,"text":17167},{"id":17173,"depth":520,"text":17174},{"id":17209,"depth":520,"text":17210},[5609],[5612],"2023-05-27T00:00:00.000Z","Here is my honest Tailwind UI review for 2023, updated for 2024. Is it worth using? Is it worth the money? Should you use an alternative?",{"src":17231},"/images/wp/featured-tailwind-ui-review-2023TailwindUI-Review-Thumbnail2.webp",{},{"title":17234,"description":17235,"ogTitle":17236,"ogDescription":17237,"twitterCard":576},"Tailwind UI Review [updated for 2024] - Codingoblin","Here is my honest Tailwind UI review from 2023, updated for 2024. Is it worth using? Is it worth the money? Should you use an alternative?","Tailwind UI Review 2023 [HONEST REVIEW]","Here is my honest Tailwind UI review for 2023. Is it worth using? Is it worth the money? Should you use an alternative?","FCg3jQhwOb6Ytlx7Niz-WxuT_aqzuMqmtoUdORY8n8w",{"id":17240,"title":61,"archived":175,"authors":17241,"badge":17244,"body":17245,"categories":17276,"categorySlugs":17277,"date":17278,"description":17279,"extension":538,"image":17280,"meta":17282,"navigation":542,"path":62,"schemaOrg":4854,"seo":17283,"stem":63,"__hash__":17285},"posts/3.blog/how-to-install-tailwindcss-in-nuxt-3.md",[17242],{"name":178,"to":179,"avatar":17243},{"src":181},{"label":5138},{"type":185,"value":17246,"toc":17271},[17247,17250,17257],[188,17248,61],{"id":17249},"how-to-install-tailwindcss-in-nuxt-3",[193,17251,17252,17253,470],{},"In this post we are going to look at how to install Tailwindcss in Nuxt 3. This is a really easy thing to do, to the point where you most likely don't need this article to help you. If you are struggling to install you are probably doing something hilariously wrong. But don't worry, just follow this video guide and you will be setup with Tailwindcss in your Nuxt 3 project in less than 10 minutes! Watch the video below, and if you haven't already, check out the ",[197,17254,17256],{"href":16156,"rel":17255},[317],"official installation guide",[4875,17258,17260,17264],{"video-id":17259},"f3Ygez_pHvE",[219,17261,17263],{"id":17262},"follow-the-instructions-provided-by-tailwind-css","Follow The instructions provided by Tailwind CSS",[193,17265,17266,17267,17270],{},"The instruction that tailwindcss provide ",[197,17268,11969],{"href":16156,"rel":17269},[317]," are so clear that you should have no problem getting setup. However if you do run into problems, just watch the video above as I literally walk through the process step by step.",{"title":262,"searchDepth":514,"depth":514,"links":17272},[17273],{"id":17249,"depth":514,"text":61,"children":17274},[17275],{"id":17262,"depth":520,"text":17263},[5609,5610],[5612,5613],"2023-05-26T00:00:00.000Z","Installing Tailwind CSS in Nuxt 3 is a simple process. Checkout the video guide for a step by step walkthrough",{"src":17281},"/images/wp/featured-how-to-install-tailwindcss-in-nuxt-3Tailwind-in-Nuxt-3-thumbnail.webp",{},{"title":17284,"description":17279,"ogTitle":17284,"ogDescription":17279,"twitterCard":576},"How to Install Tailwindcss in Nuxt 3 - Codingoblin","MDRjAcfZDPRqoxc6yt7uvy3ORX6AqWGUS_TIBN2mIKY",{"id":17287,"title":93,"archived":175,"authors":17288,"badge":17291,"body":17292,"categories":17391,"categorySlugs":17392,"date":17393,"description":17394,"extension":538,"image":17395,"meta":17397,"navigation":542,"path":94,"schemaOrg":4854,"seo":17398,"stem":95,"__hash__":17402},"posts/3.blog/post-request-in-nuxt-3.md",[17289],{"name":178,"to":179,"avatar":17290},{"src":181},{"label":5610},{"type":185,"value":17293,"toc":17388},[17294,17298,17301,17385],[188,17295,17297],{"id":17296},"post-requests-in-nuxt-3","POST Requests in Nuxt 3",[193,17299,17300],{},"In this post we are going to look at POST requests in Nuxt 3. This is something that should be really simple to do, and to be honest with you it is. However if you are a moron like me you might find yourself spending two days trying to figure it out. In this post I'll go over everything you need to get POST requests working in Nuxt 3. I'll over go over some of the issues I encountered when trying to figure out how to make it work, and the solutions. I'll even go over fixing CORS issues! You're welcome. Feel free to follow along with the video, or checkout the detailed instructions below.",[4875,17302,17304],{"video-id":17303},"g8Z5YOjsP2Y",[215,17305,17306,17310,17318,17332,17335,17368,17371,17375,17378,17382],{"level":217},[219,17307,17309],{"id":17308},"create-a-new-nuxt-3-project-optional","Create a new Nuxt 3 Project (optional)",[193,17311,17312,17313,17317],{},"If you are already setup with an existing Nuxt 3 project you can skip this step. If you haven't already got a Nuxt 3 project set up, go ahead and do this. Instructions on how to do this can be found in the ",[197,17314,17316],{"href":16145,"rel":17315},[317],"nuxt documentation"," but its just a case of running the following commands:",[5190,17319,17321],{"className":7218,"code":17320,"filename":7220,"language":7221,"meta":262,"style":262},"npx nuxi init \n\n",[5182,17322,17323],{"__ignoreMap":262},[3736,17324,17325,17327,17329],{"class":5199,"line":5200},[3736,17326,12310],{"class":7228},[3736,17328,12313],{"class":5236},[3736,17330,17331],{"class":5236}," init\n",[193,17333,17334],{},"Once you have run this command, navigate into your newly created project, install it, and start the development server. Like this:",[5190,17336,17338],{"className":7218,"code":17337,"filename":7220,"language":7221,"meta":262,"style":262},"cd \nnpm install\nnpm run dev -- -o\n\n",[5182,17339,17340,17347,17353],{"__ignoreMap":262},[3736,17341,17342,17345],{"class":5199,"line":5200},[3736,17343,17344],{"class":5351},"cd",[3736,17346,8952],{"class":5283},[3736,17348,17349,17351],{"class":5199,"line":514},[3736,17350,7583],{"class":7228},[3736,17352,7578],{"class":5236},[3736,17354,17355,17357,17359,17362,17365],{"class":5199,"line":520},[3736,17356,7583],{"class":7228},[3736,17358,7598],{"class":5236},[3736,17360,17361],{"class":5236}," dev",[3736,17363,17364],{"class":5236}," --",[3736,17366,17367],{"class":5236}," -o\n",[193,17369,17370],{},"You now have your Nuxt 3 project setup and ready to go!",[219,17372,17374],{"id":17373},"create-a-form-in-nuxt-3-to-submit-a-post-request-from","Create a form in Nuxt 3 to Submit a POST Request from",[193,17376,17377],{},"In our Nuxt 3 project we are going to create a form. This form is where we are going to submit our POST request from.",[3849,17379,17381],{"id":17380},"our-form","Our Form",[193,17383,17384],{},"Within our template tags, we can create our form. Create your form with whatever inputs you require. For our form we will have the inputs: 'name', 'email' and 'message'. We will bind these to a formData object using v-model. Checkout the code below and make sure you have something similar. Please note, I have removed some of the markup that you see in the video to make it easier to see what's going on, and also because I am using tailwindcss classes in the video which you don't need.",[5594,17386,17387],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":262,"searchDepth":514,"depth":514,"links":17389},[17390],{"id":17296,"depth":514,"text":17297},[5610],[5613],"2023-05-25T00:00:00.000Z","Post requests in Nuxt 3 aren’t as obvious as you might imaging. In this post I’ll show you everything you need to get up and running and avoid common mistakes!",{"src":17396},"/images/wp/featured-post-request-in-nuxt-3POST-Request-thumbnail-2.webp",{},{"title":17399,"description":17400,"ogTitle":17297,"ogDescription":17401,"twitterCard":576},"POST Request in Nuxt 3 - useFetch [2024 GUIDE]","POST requests in Nuxt 3. You must use useFetch instead of axios. Get your POST requests working in Nuxt 3! Common issues solved","How to do POST Requests in Nuxt 3. Should be easy but there are some common issues that you need to look out for!","3m4mb3SqRRiYOshj5nkupRyVfKeW8fbrtwe4SZult1c",{"id":17404,"title":101,"archived":175,"authors":17405,"badge":17408,"body":17410,"categories":18429,"categorySlugs":18430,"date":18431,"description":18432,"extension":538,"image":18433,"meta":18435,"navigation":542,"path":102,"schemaOrg":4854,"seo":18436,"stem":103,"__hash__":18438},"posts/3.blog/roles-and-permissions-in-laravel-jetstream-inertiajs-using-spatie-package.md",[17406],{"name":178,"to":179,"avatar":17407},{"src":181},{"label":17409},"Inertia.js, Laravel",{"type":185,"value":17411,"toc":18417},[17412,17416,17419,18414],[188,17413,17415],{"id":17414},"how-to-use-roles-and-permissions-in-laravel-jetstream-inertiajs-using-the-spatie-package","How to use Roles and Permissions in Laravel Jetstream (Inertiajs) using the Spatie Package",[193,17417,17418],{},"Using roles and permissions in Laravel can seem daunting at first. But when you break it down step by step its actually a very simple process.",[4875,17420,17422,17426,17429,17458,17461,17467,17471,17475,17484,17499,17503,17506,17530,17534,17537,17550,17554,17557,17604,17608,17611,17615,17618,17624,17627,17644,17651,17672,17675,17681,17688,17725,17731,17734,17791,17795,17798,17866,17870,17873,17877,17883,18021,18028,18137,18140,18154,18157,18174,18177,18181,18192,18290,18293,18297,18300,18304,18307,18311,18318,18361,18368,18372,18379,18382,18388,18391,18395,18401,18404,18408],{"video-id":17421},"R4L0xJCqFxY",[219,17423,17425],{"id":17424},"whats-included-in-this-example","Whats included in this example?",[193,17427,17428],{},"In this example we are going to create 2 roles and 4 permissions.",[11408,17430,17432,17439,17445,17449,17452,17455],{":ui":17431},"{fieldGroup: {base: 'bg-red-500'}}",[6531,17433,17436],{"name":17434,"type":17435},"admin","role",[193,17437,17438],{},"This role will be assigned all permissions.",[6531,17440,17442],{"name":17441,"type":17435},"standard",[193,17443,17444],{},"This role will only be able to read articles",[6531,17446],{"name":17447,"type":17448},"write articles","permission",[6531,17450],{"name":17451,"type":17448},"read articles",[6531,17453],{"name":17454,"type":17448},"edit articles",[6531,17456],{"name":17457,"type":17448},"delete articles",[193,17459,17460],{},"We will then assign these permissions to the relevant roles. The 'admin' role will have all 4 permissions, while the 'standard' role will only have the 'read articles' role. We will then assign the roles to users within our application. Finally we will look at how to display content within our application based on the permissions held by the currently authenticated user. It sounds like a lot but it's very simple when you break it down!",[193,17462,17463],{},[265,17464],{"alt":17465,"src":17466},"Roles and permissions in Laravel Jetstream with Inertiajs","https://codingoblin.com/wp-content/uploads/2022/09/884vvg.jpg",[219,17468,17470],{"id":17469},"setup-spatie-permission-package","Setup Spatie Permission Package",[3849,17472,17474],{"id":17473},"install-the-spatie-laravel-permission-package","Install the Spatie Laravel-permission package",[193,17476,17477,17478,17483],{},"The first thing we need to do is install the ",[197,17479,17482],{"href":17480,"rel":17481},"https://spatie.be/docs/laravel-permission/v6/introduction",[317],"Spatie Permission package",". Run the following command in the root of your Laravel project:",[5190,17485,17487],{"className":7218,"code":17486,"filename":7220,"language":7221,"meta":262,"style":262},"composer require spatie/laravel-permission\n\n",[5182,17488,17489],{"__ignoreMap":262},[3736,17490,17491,17493,17496],{"class":5199,"line":5200},[3736,17492,7568],{"class":7228},[3736,17494,17495],{"class":5236}," require",[3736,17497,17498],{"class":5236}," spatie/laravel-permission\n",[3849,17500,17502],{"id":17501},"publish-the-migration-and-config-file","Publish the migration and config file",[193,17504,17505],{},"Now we need to publish the migration and config file. Run the following command:",[5190,17507,17509],{"className":7218,"code":17508,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan vendor:publish --provider=\"Spatie\\Permission\\PermissionServiceProvider\"\n\n",[5182,17510,17511],{"__ignoreMap":262},[3736,17512,17513,17515,17517,17520,17523,17525,17528],{"class":5199,"line":5200},[3736,17514,7706],{"class":7228},[3736,17516,7709],{"class":5236},[3736,17518,17519],{"class":5236}," vendor:publish",[3736,17521,17522],{"class":5236}," --provider=",[3736,17524,5233],{"class":5203},[3736,17526,17527],{"class":5236},"Spatie\\Permission\\PermissionServiceProvider",[3736,17529,7308],{"class":5203},[3849,17531,17533],{"id":17532},"run-the-migration","Run the migration",[193,17535,17536],{},"Now we need to run the migration. Run the following artisan command:",[5190,17538,17540],{"className":7218,"code":17539,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan migrate\n\n",[5182,17541,17542],{"__ignoreMap":262},[3736,17543,17544,17546,17548],{"class":5199,"line":5200},[3736,17545,7706],{"class":7228},[3736,17547,7709],{"class":5236},[3736,17549,7712],{"class":5236},[3849,17551,17553],{"id":17552},"amend-your-user-model","Amend your User Model",[193,17555,17556],{},"We now need to add a the HasRoles trait to our User model. Open your User.php file and make sure it includes the following:",[5190,17558,17561],{"className":11050,"code":17559,"filename":17560,"language":7706,"meta":262,"style":262},"use Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass User extends Authenticatable\n{\n    use HasRoles;\n\n    // ...\n}\n\n","User.php",[5182,17562,17563,17568,17573,17577,17582,17586,17591,17595,17600],{"__ignoreMap":262},[3736,17564,17565],{"class":5199,"line":5200},[3736,17566,17567],{},"use Illuminate\\Foundation\\Auth\\User as Authenticatable;\n",[3736,17569,17570],{"class":5199,"line":514},[3736,17571,17572],{},"use Spatie\\Permission\\Traits\\HasRoles;\n",[3736,17574,17575],{"class":5199,"line":520},[3736,17576,5215],{"emptyLinePlaceholder":542},[3736,17578,17579],{"class":5199,"line":5244},[3736,17580,17581],{},"class User extends Authenticatable\n",[3736,17583,17584],{"class":5199,"line":5265},[3736,17585,5358],{},[3736,17587,17588],{"class":5199,"line":5292},[3736,17589,17590],{},"    use HasRoles;\n",[3736,17592,17593],{"class":5199,"line":5302},[3736,17594,5215],{"emptyLinePlaceholder":542},[3736,17596,17597],{"class":5199,"line":5312},[3736,17598,17599],{},"    // ...\n",[3736,17601,17602],{"class":5199,"line":5322},[3736,17603,12122],{},[219,17605,17607],{"id":17606},"create-your-roles-and-permissions","Create your Roles and Permissions",[193,17609,17610],{},"The Spatie package is now setup and ready to use. Now we need to actually create the roles and permissions that we want to use.",[3849,17612,17614],{"id":17613},"create-roles-and-permissions-in-laravel-using-a-seeder","Create Roles and Permissions in Laravel using a seeder",[193,17616,17617],{},"In this example we are going to use a seeder to create our roles and permissions. This is useful in some cases and not so useful in others. This method will allow us to create the roles and permissions for our application when we run our seeder command, but it won't help us if we need to manage the roles and permissions. If you want to create roles and permissions from an admin page within your application then you can still use the methods that I am going to show you. The difference will be that you will need to use them in a controller. But lets look at how to create them using a seeder.",[3831,17619,17621],{"id":17620},"generate-your-roles-and-permission-seeder",[304,17622,17623],{},"Generate your Roles and Permission Seeder",[193,17625,17626],{},"Run the following command to create your seeder.",[5190,17628,17630],{"className":7218,"code":17629,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan make:seeder --class=RolesSeeder\n\n",[5182,17631,17632],{"__ignoreMap":262},[3736,17633,17634,17636,17638,17641],{"class":5199,"line":5200},[3736,17635,7706],{"class":7228},[3736,17637,7709],{"class":5236},[3736,17639,17640],{"class":5236}," make:seeder",[3736,17642,17643],{"class":5236}," --class=RolesSeeder\n",[193,17645,17646,17647,17650],{},"You should now have the file RolesSeeder.php in your seeders folder (found at ",[5182,17648,17649],{},"project_root/database/seeders/RolesSeeder.php","). Open your newly created RolesSeeder.php file. Add the following to the top of the file:",[5190,17652,17655],{"className":11050,"code":17653,"filename":17654,"language":7706,"meta":262,"style":262},"use Spatie\\Permission\\Models\\Role;\nuse Spatie\\Permission\\Models\\Permission;\n// ...\n\n","RolesSeeder.php",[5182,17656,17657,17662,17667],{"__ignoreMap":262},[3736,17658,17659],{"class":5199,"line":5200},[3736,17660,17661],{},"use Spatie\\Permission\\Models\\Role;\n",[3736,17663,17664],{"class":5199,"line":514},[3736,17665,17666],{},"use Spatie\\Permission\\Models\\Permission;\n",[3736,17668,17669],{"class":5199,"line":520},[3736,17670,17671],{},"// ...\n",[193,17673,17674],{},"We are now able to create our roles and permissions.",[3831,17676,17678],{"id":17677},"create-roles",[304,17679,17680],{},"Create Roles",[193,17682,17683,17684,17687],{},"Look at your RolesSeeder.php file. You will notice there is a function named ",[5182,17685,17686],{},"public function run()",". This is where we are going to include all the logic for creating our roles and permissions, and assigning our permissions to our roles. Now we are going to write the code that will create our 'admin' and 'standard' roles when we run our seeder. Add the following to the 'run' function:",[5190,17689,17691],{"className":11050,"code":17690,"filename":17654,"language":7706,"meta":262,"style":262},"public function run()\n    {\n        $role_admin = Role::create(['name' => 'admin']);\n        $role_standard = Role::create(['name' => 'standard']);\n\n        // we will add more to this in a second\n    }\n\n",[5182,17692,17693,17698,17702,17707,17712,17716,17721],{"__ignoreMap":262},[3736,17694,17695],{"class":5199,"line":5200},[3736,17696,17697],{},"public function run()\n",[3736,17699,17700],{"class":5199,"line":514},[3736,17701,9208],{},[3736,17703,17704],{"class":5199,"line":520},[3736,17705,17706],{},"        $role_admin = Role::create(['name' => 'admin']);\n",[3736,17708,17709],{"class":5199,"line":5244},[3736,17710,17711],{},"        $role_standard = Role::create(['name' => 'standard']);\n",[3736,17713,17714],{"class":5199,"line":5265},[3736,17715,5215],{"emptyLinePlaceholder":542},[3736,17717,17718],{"class":5199,"line":5292},[3736,17719,17720],{},"        // we will add more to this in a second\n",[3736,17722,17723],{"class":5199,"line":5302},[3736,17724,9317],{},[3831,17726,17728],{"id":17727},"create-permissions",[304,17729,17730],{},"Create Permissions",[193,17732,17733],{},"Now we need to write the code that will create our permissions. Again, add to the 'run' function:",[5190,17735,17737],{"className":11050,"code":17736,"filename":17654,"language":7706,"meta":262,"style":262},"public function run()\n    {\n        $role_admin = Role::create(['name' => 'admin']);\n        $role_standard = Role::create(['name' => 'standard']);\n\n        $permission_read = Permission::create(['name' => 'read articles']);\n        $permission_edit = Permission::create(['name' => 'edit articles']);\n        $permission_write = Permission::create(['name' => 'write articles']);\n        $permission_delete = Permission::create(['name' => 'delete articles']);\n\n        // we will add more to this in a second\n    }\n\n",[5182,17738,17739,17743,17747,17751,17755,17759,17764,17769,17774,17779,17783,17787],{"__ignoreMap":262},[3736,17740,17741],{"class":5199,"line":5200},[3736,17742,17697],{},[3736,17744,17745],{"class":5199,"line":514},[3736,17746,9208],{},[3736,17748,17749],{"class":5199,"line":520},[3736,17750,17706],{},[3736,17752,17753],{"class":5199,"line":5244},[3736,17754,17711],{},[3736,17756,17757],{"class":5199,"line":5265},[3736,17758,5215],{"emptyLinePlaceholder":542},[3736,17760,17761],{"class":5199,"line":5292},[3736,17762,17763],{},"        $permission_read = Permission::create(['name' => 'read articles']);\n",[3736,17765,17766],{"class":5199,"line":5302},[3736,17767,17768],{},"        $permission_edit = Permission::create(['name' => 'edit articles']);\n",[3736,17770,17771],{"class":5199,"line":5312},[3736,17772,17773],{},"        $permission_write = Permission::create(['name' => 'write articles']);\n",[3736,17775,17776],{"class":5199,"line":5322},[3736,17777,17778],{},"        $permission_delete = Permission::create(['name' => 'delete articles']);\n",[3736,17780,17781],{"class":5199,"line":5327},[3736,17782,5215],{"emptyLinePlaceholder":542},[3736,17784,17785],{"class":5199,"line":5340},[3736,17786,17720],{},[3736,17788,17789],{"class":5199,"line":5361},[3736,17790,9317],{},[3849,17792,17794],{"id":17793},"assign-permissions-to-roles-in-laravel","Assign permissions to roles in Laravel",[193,17796,17797],{},"Now we need to assign the permissions to the relevant roles. In our example we are going to give the 'admin' role all 4 permissions, and give the 'standard' role the permission to 'read articles' only. Go back to the RolesSeeder.php file and add to the 'run' function:",[5190,17799,17801],{"className":11050,"code":17800,"filename":17654,"language":7706,"meta":262,"style":262},"public function run()\n    {\n        $role_admin = Role::create(['name' => 'admin']);\n        $role_standard = Role::create(['name' => 'standard']);\n\n        $permission_read = Permission::create(['name' => 'read articles']);\n        $permission_edit = Permission::create(['name' => 'edit articles']);\n        $permission_write = Permission::create(['name' => 'write articles']);\n        $permission_delete = Permission::create(['name' => 'delete articles']);\n\n        $permissions_admin = [$permission_read, $permission_edit, $permission_write, $permission_delete];\n\n        $role_admin->syncPermissions($permissions_admin);\n        $role_standard->givePermissionTo($permission_read);\n    }\n\n",[5182,17802,17803,17807,17811,17815,17819,17823,17827,17831,17835,17839,17843,17848,17852,17857,17862],{"__ignoreMap":262},[3736,17804,17805],{"class":5199,"line":5200},[3736,17806,17697],{},[3736,17808,17809],{"class":5199,"line":514},[3736,17810,9208],{},[3736,17812,17813],{"class":5199,"line":520},[3736,17814,17706],{},[3736,17816,17817],{"class":5199,"line":5244},[3736,17818,17711],{},[3736,17820,17821],{"class":5199,"line":5265},[3736,17822,5215],{"emptyLinePlaceholder":542},[3736,17824,17825],{"class":5199,"line":5292},[3736,17826,17763],{},[3736,17828,17829],{"class":5199,"line":5302},[3736,17830,17768],{},[3736,17832,17833],{"class":5199,"line":5312},[3736,17834,17773],{},[3736,17836,17837],{"class":5199,"line":5322},[3736,17838,17778],{},[3736,17840,17841],{"class":5199,"line":5327},[3736,17842,5215],{"emptyLinePlaceholder":542},[3736,17844,17845],{"class":5199,"line":5340},[3736,17846,17847],{},"        $permissions_admin = [$permission_read, $permission_edit, $permission_write, $permission_delete];\n",[3736,17849,17850],{"class":5199,"line":5361},[3736,17851,5215],{"emptyLinePlaceholder":542},[3736,17853,17854],{"class":5199,"line":5373},[3736,17855,17856],{},"        $role_admin->syncPermissions($permissions_admin);\n",[3736,17858,17859],{"class":5199,"line":5382},[3736,17860,17861],{},"        $role_standard->givePermissionTo($permission_read);\n",[3736,17863,17864],{"class":5199,"line":6676},[3736,17865,9317],{},[219,17867,17869],{"id":17868},"assign-role-to-users-in-laravel","Assign Role to users in Laravel",[193,17871,17872],{},"We are not going to run this seeder just yet, but when we do it will create our roles, create our permissions, and assign the permissions to the roles. We now need to look at how to assign the roles to users. There are 2 ways in which we are going to do this. By assigning newly created users that sign up to our website via the registration form a role when they sign up, and by assigning our seeded users a role when they are created. Lets first look at assigning roles to our seeded users.",[3849,17874,17876],{"id":17875},"assign-role-to-user-using-user-seeder","Assign role to user using user seeder",[193,17878,12171,17879,17882],{},[197,17880,17881],{"href":110},"create a user seeder",". We are now going to edit the 'run' function in our UserSeeder.php file. Add the following:",[5190,17884,17887],{"className":11050,"code":17885,"filename":17886,"language":7706,"meta":262,"style":262},"public function run()\n    {\n        //\n        $users = [\n            [\n                'name' => 'Admin',\n                'email' => 'admin@codingoblin.com',\n                'password' => 'password',\n                'role' => 'admin',\n            ],\n            [\n                'name' => 'John',\n                'email' => 'john@codingoblin.com',\n                'password' => 'password2',\n                'role' => 'standard',\n            ]\n        ];\n\n        foreach($users as $user) {\n            $created_user = User::create([\n                'name' => $user['name'],\n                'email' => $user['email'],\n                'password' => Hash::make($user['password']),\n            ]);\n\n            $created_user->assignRole($user['role']);\n        }\n    }\n\n","UserSeeder.php",[5182,17888,17889,17893,17897,17902,17907,17912,17917,17922,17927,17932,17937,17941,17946,17951,17956,17961,17966,17970,17974,17979,17984,17989,17994,17999,18004,18008,18013,18017],{"__ignoreMap":262},[3736,17890,17891],{"class":5199,"line":5200},[3736,17892,17697],{},[3736,17894,17895],{"class":5199,"line":514},[3736,17896,9208],{},[3736,17898,17899],{"class":5199,"line":520},[3736,17900,17901],{},"        //\n",[3736,17903,17904],{"class":5199,"line":5244},[3736,17905,17906],{},"        $users = [\n",[3736,17908,17909],{"class":5199,"line":5265},[3736,17910,17911],{},"            [\n",[3736,17913,17914],{"class":5199,"line":5292},[3736,17915,17916],{},"                'name' => 'Admin',\n",[3736,17918,17919],{"class":5199,"line":5302},[3736,17920,17921],{},"                'email' => 'admin@codingoblin.com',\n",[3736,17923,17924],{"class":5199,"line":5312},[3736,17925,17926],{},"                'password' => 'password',\n",[3736,17928,17929],{"class":5199,"line":5322},[3736,17930,17931],{},"                'role' => 'admin',\n",[3736,17933,17934],{"class":5199,"line":5327},[3736,17935,17936],{},"            ],\n",[3736,17938,17939],{"class":5199,"line":5340},[3736,17940,17911],{},[3736,17942,17943],{"class":5199,"line":5361},[3736,17944,17945],{},"                'name' => 'John',\n",[3736,17947,17948],{"class":5199,"line":5373},[3736,17949,17950],{},"                'email' => 'john@codingoblin.com',\n",[3736,17952,17953],{"class":5199,"line":5382},[3736,17954,17955],{},"                'password' => 'password2',\n",[3736,17957,17958],{"class":5199,"line":6676},[3736,17959,17960],{},"                'role' => 'standard',\n",[3736,17962,17963],{"class":5199,"line":6681},[3736,17964,17965],{},"            ]\n",[3736,17967,17968],{"class":5199,"line":6695},[3736,17969,13343],{},[3736,17971,17972],{"class":5199,"line":6721},[3736,17973,5215],{"emptyLinePlaceholder":542},[3736,17975,17976],{"class":5199,"line":6747},[3736,17977,17978],{},"        foreach($users as $user) {\n",[3736,17980,17981],{"class":5199,"line":6753},[3736,17982,17983],{},"            $created_user = User::create([\n",[3736,17985,17986],{"class":5199,"line":6767},[3736,17987,17988],{},"                'name' => $user['name'],\n",[3736,17990,17991],{"class":5199,"line":6772},[3736,17992,17993],{},"                'email' => $user['email'],\n",[3736,17995,17996],{"class":5199,"line":6779},[3736,17997,17998],{},"                'password' => Hash::make($user['password']),\n",[3736,18000,18001],{"class":5199,"line":6784},[3736,18002,18003],{},"            ]);\n",[3736,18005,18006],{"class":5199,"line":6805},[3736,18007,5215],{"emptyLinePlaceholder":542},[3736,18009,18010],{"class":5199,"line":6818},[3736,18011,18012],{},"            $created_user->assignRole($user['role']);\n",[3736,18014,18015],{"class":5199,"line":6825},[3736,18016,6750],{},[3736,18018,18019],{"class":5199,"line":13363},[3736,18020,9317],{},[193,18022,18023,18024,18027],{},"Now go to your ",[5182,18025,18026],{},"DatabaseSeeder.php"," file and add the following:",[5190,18029,18031],{"className":11050,"code":18030,"filename":18026,"language":7706,"meta":262,"style":262},"namespace Database\\Seeders;\n\n// use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\nuse Database\\Seeders\\UserSeeder;\nuse Database\\Seeders\\RolesSeeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's database.\n     *\n     * @return void\n     */\n    public function run()\n    {\n         $this->call([\n            RolesSeeder::class,\n            UserSeeder::class,\n        ]);\n    }\n}\n\n",[5182,18032,18033,18038,18042,18047,18052,18057,18062,18066,18071,18075,18080,18085,18090,18095,18100,18105,18109,18114,18119,18124,18129,18133],{"__ignoreMap":262},[3736,18034,18035],{"class":5199,"line":5200},[3736,18036,18037],{},"namespace Database\\Seeders;\n",[3736,18039,18040],{"class":5199,"line":514},[3736,18041,5215],{"emptyLinePlaceholder":542},[3736,18043,18044],{"class":5199,"line":520},[3736,18045,18046],{},"// use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\n",[3736,18048,18049],{"class":5199,"line":5244},[3736,18050,18051],{},"use Illuminate\\Database\\Seeder;\n",[3736,18053,18054],{"class":5199,"line":5265},[3736,18055,18056],{},"use Database\\Seeders\\UserSeeder;\n",[3736,18058,18059],{"class":5199,"line":5292},[3736,18060,18061],{},"use Database\\Seeders\\RolesSeeder;\n",[3736,18063,18064],{"class":5199,"line":5302},[3736,18065,5215],{"emptyLinePlaceholder":542},[3736,18067,18068],{"class":5199,"line":5312},[3736,18069,18070],{},"class DatabaseSeeder extends Seeder\n",[3736,18072,18073],{"class":5199,"line":5322},[3736,18074,5358],{},[3736,18076,18077],{"class":5199,"line":5327},[3736,18078,18079],{},"    /**\n",[3736,18081,18082],{"class":5199,"line":5340},[3736,18083,18084],{},"     * Seed the application's database.\n",[3736,18086,18087],{"class":5199,"line":5361},[3736,18088,18089],{},"     *\n",[3736,18091,18092],{"class":5199,"line":5373},[3736,18093,18094],{},"     * @return void\n",[3736,18096,18097],{"class":5199,"line":5382},[3736,18098,18099],{},"     */\n",[3736,18101,18102],{"class":5199,"line":6676},[3736,18103,18104],{},"    public function run()\n",[3736,18106,18107],{"class":5199,"line":6681},[3736,18108,9208],{},[3736,18110,18111],{"class":5199,"line":6695},[3736,18112,18113],{},"         $this->call([\n",[3736,18115,18116],{"class":5199,"line":6721},[3736,18117,18118],{},"            RolesSeeder::class,\n",[3736,18120,18121],{"class":5199,"line":6747},[3736,18122,18123],{},"            UserSeeder::class,\n",[3736,18125,18126],{"class":5199,"line":6753},[3736,18127,18128],{},"        ]);\n",[3736,18130,18131],{"class":5199,"line":6767},[3736,18132,9317],{},[3736,18134,18135],{"class":5199,"line":6772},[3736,18136,12122],{},[193,18138,18139],{},"Now we just need to run our seeders. To just run our seeders run the following command:",[5190,18141,18143],{"className":7218,"code":18142,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan db:seed\n\n",[5182,18144,18145],{"__ignoreMap":262},[3736,18146,18147,18149,18151],{"class":5199,"line":5200},[3736,18148,7706],{"class":7228},[3736,18150,7709],{"class":5236},[3736,18152,18153],{"class":5236}," db:seed\n",[193,18155,18156],{},"This probably won't be much use to us as we have most likely already previously run this command and therefore created our users already. If you wish to drop all tables in your database, start again fresh and run the seeders, run the following command instead:",[5190,18158,18160],{"className":7218,"code":18159,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan migrate:fresh --seed\n\n",[5182,18161,18162],{"__ignoreMap":262},[3736,18163,18164,18166,18168,18171],{"class":5199,"line":5200},[3736,18165,7706],{"class":7228},[3736,18167,7709],{"class":5236},[3736,18169,18170],{"class":5236}," migrate:fresh",[3736,18172,18173],{"class":5236}," --seed\n",[193,18175,18176],{},"You should now have your roles and permissions created, permissions assigned to relevant roles, users created, roles assigned to relevant users.",[3849,18178,18180],{"id":18179},"assign-role-to-user-when-the-user-creates-an-account-signs-up","Assign role to user when the user creates an account / signs up",[193,18182,18183,18184,18187,18188,18191],{},"We have seen how to assign roles to users using seeders, but now we need to look at assigning roles to the users who sign up to our website through our registration form. The good news is this is really quick and easy. In our example, we will assign new users the role 'standard'. Open your ",[5182,18185,18186],{},"CreateNewUser.php"," file found at ",[5182,18189,18190],{},"your_project/app/Actions/Fortify/CreateNewUser.php",". Amend the 'create' function so that it looks like this:",[5190,18193,18195],{"className":11050,"code":18194,"filename":18186,"language":7706,"meta":262,"style":262},"public function create(array $input)\n    {\n        Validator::make($input, [\n            'name' => ['required', 'string', 'max:255'],\n            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],\n            'password' => $this->passwordRules(),\n            'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',\n        ])->validate();\n\n        $created_user = User::create([\n            'name' => $input['name'],\n            'email' => $input['email'],\n            'password' => Hash::make($input['password']),\n        ]);\n\n        $created_user->assignRole('standard');\n\n        return $created_user;\n\n    }\n\n",[5182,18196,18197,18202,18206,18211,18216,18221,18226,18231,18236,18240,18245,18250,18255,18260,18264,18268,18273,18277,18282,18286],{"__ignoreMap":262},[3736,18198,18199],{"class":5199,"line":5200},[3736,18200,18201],{},"public function create(array $input)\n",[3736,18203,18204],{"class":5199,"line":514},[3736,18205,9208],{},[3736,18207,18208],{"class":5199,"line":520},[3736,18209,18210],{},"        Validator::make($input, [\n",[3736,18212,18213],{"class":5199,"line":5244},[3736,18214,18215],{},"            'name' => ['required', 'string', 'max:255'],\n",[3736,18217,18218],{"class":5199,"line":5265},[3736,18219,18220],{},"            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],\n",[3736,18222,18223],{"class":5199,"line":5292},[3736,18224,18225],{},"            'password' => $this->passwordRules(),\n",[3736,18227,18228],{"class":5199,"line":5302},[3736,18229,18230],{},"            'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',\n",[3736,18232,18233],{"class":5199,"line":5312},[3736,18234,18235],{},"        ])->validate();\n",[3736,18237,18238],{"class":5199,"line":5322},[3736,18239,5215],{"emptyLinePlaceholder":542},[3736,18241,18242],{"class":5199,"line":5327},[3736,18243,18244],{},"        $created_user = User::create([\n",[3736,18246,18247],{"class":5199,"line":5340},[3736,18248,18249],{},"            'name' => $input['name'],\n",[3736,18251,18252],{"class":5199,"line":5361},[3736,18253,18254],{},"            'email' => $input['email'],\n",[3736,18256,18257],{"class":5199,"line":5373},[3736,18258,18259],{},"            'password' => Hash::make($input['password']),\n",[3736,18261,18262],{"class":5199,"line":5382},[3736,18263,18128],{},[3736,18265,18266],{"class":5199,"line":6676},[3736,18267,5215],{"emptyLinePlaceholder":542},[3736,18269,18270],{"class":5199,"line":6681},[3736,18271,18272],{},"        $created_user->assignRole('standard');\n",[3736,18274,18275],{"class":5199,"line":6695},[3736,18276,5215],{"emptyLinePlaceholder":542},[3736,18278,18279],{"class":5199,"line":6721},[3736,18280,18281],{},"        return $created_user;\n",[3736,18283,18284],{"class":5199,"line":6747},[3736,18285,5215],{"emptyLinePlaceholder":542},[3736,18287,18288],{"class":5199,"line":6753},[3736,18289,9317],{},[193,18291,18292],{},"And that's it. I told you it was simple. Now when a new user registers they will automatically be assigned the 'standard' role.",[219,18294,18296],{"id":18295},"how-to-display-content-dependant-on-the-role-of-the-user","How to display content dependant on the role of the user",[193,18298,18299],{},"We are now in a position where we are able to make use of our roles and permissions to show and hide content depending on the role of the user. To do this, we are going to make use of props. We will send the roles and permissions that the user possesses along with each request. This means we can check a user has permission to view something before we show it to them.",[219,18301,18303],{"id":18302},"add-roles-and-permissions-to-page-props-using-inertiajs-shared-data","Add roles and permissions to page props using inertiajs shared data",[193,18305,18306],{},"By default, out Laravel Jetstream application sends certain page props with every request. One of these is an object containing lots of information about the currently authenticated user. We are going to append the roles and permissions held by the user to this object, so we can also access this in our page views!",[3849,18308,18310],{"id":18309},"add-to-handleinertiarequestsphp-middleware","Add to HandleInertiaRequests.php Middleware",[193,18312,18313,18314,18317],{},"To add the roles and permissions to the page props, we need to add a couple of lines of code to the HandleInertiaRequests Middleware. You can find this file at ",[5182,18315,18316],{},"your_project/app/Http/Middleware/HandleInertiaRequests.php",". Open this file and add the following to the 'share' function:",[5190,18319,18322],{"className":11050,"code":18320,"filename":18321,"language":7706,"meta":262,"style":262},"public function share(Request $request): array\n    {\n        return array_merge(parent::share($request), [\n            //\n            'user.roles' => $request->user() ? $request->user()->roles->pluck('name') : [],\n            'user.permissions' => $request->user() ? $request->user()->getPermissionsViaRoles()->pluck('name') : [],\n        ]);\n    }\n\n","HandleInertiaRequests.php",[5182,18323,18324,18329,18333,18338,18343,18348,18353,18357],{"__ignoreMap":262},[3736,18325,18326],{"class":5199,"line":5200},[3736,18327,18328],{},"public function share(Request $request): array\n",[3736,18330,18331],{"class":5199,"line":514},[3736,18332,9208],{},[3736,18334,18335],{"class":5199,"line":520},[3736,18336,18337],{},"        return array_merge(parent::share($request), [\n",[3736,18339,18340],{"class":5199,"line":5244},[3736,18341,18342],{},"            //\n",[3736,18344,18345],{"class":5199,"line":5265},[3736,18346,18347],{},"            'user.roles' => $request->user() ? $request->user()->roles->pluck('name') : [],\n",[3736,18349,18350],{"class":5199,"line":5292},[3736,18351,18352],{},"            'user.permissions' => $request->user() ? $request->user()->getPermissionsViaRoles()->pluck('name') : [],\n",[3736,18354,18355],{"class":5199,"line":5302},[3736,18356,18128],{},[3736,18358,18359],{"class":5199,"line":5312},[3736,18360,9317],{},[193,18362,18363,18364,18367],{},"Now, whenever an authenticated (logged in) user accesses a page on our website, we can see what roles and permissions they have by looking in the ",[5182,18365,18366],{},"$page.props",". Lets see that in action!",[3849,18369,18371],{"id":18370},"test-to-see-if-roles-and-permissions-are-attached-to-page-props","Test to see if roles and permissions are attached to page props",[193,18373,18374,18375,18378],{},"We are now in a position where we can access the authenticated user's roles and permissions in our page views (our Vue.js files). To see this in action, go to a page within your application (we will be using the default dashboard page that comes with Laravel Jetstream, and will be editing this file - ",[5182,18376,18377],{},"your_project/resources/js/Components/Welcome.vue",". Add this code to your page template:",[193,18380,18381],{},"Save the file and go to the page in the browser (make sure you are using a logged in user with a role). You should see the following on your page:",[193,18383,18384],{},[265,18385],{"alt":18386,"src":18387},"Page props in Laravel Jetstream (Inertiajs)","https://codingoblin.com/wp-content/uploads/2022/09/Screenshot-2022-09-24-at-11.54.46-300x220.png",[193,18389,18390],{},"Notice that we can see arrays containing the user's roles and permissions.",[219,18392,18394],{"id":18393},"display-content-depending-on-permissions-held-by-user","Display content depending on permissions held by user",[193,18396,18397,18398,18400],{},"We are now in a position to actually use the roles and permissions to hide and show content on the page. To demonstrate this we will create 4 buttons on our page. You can do this on any page you like but if you are following along we will use the same file - ",[5182,18399,18377],{},". Open Welcome.vue, remove everything between the template tags replace it with this:",[193,18402,18403],{},"Above we have 4 buttons. Each button is wrapped in a div that is shown conditionally. Each if statement is saying, if the permission name is found within the permission array that is passed to the page as a prop within the user object prop, then show the button. If you are logged in as the 'admin' role, you will see all 4 buttons. If you are logged in as the 'standard' role you will just see the 'read articles' button. You have now successfully implemented roles and permission in your Laravel Jetstream (Inertiajs) application on the frontend! Congratulations. But what about protecting resources on the backend? Lets look at how to do this!",[219,18405,18407],{"id":18406},"protect-resources-on-the-server-backend-using-roles-and-permissions-in-policies","Protect resources on the server (backend) using Roles and Permissions in Policies",[193,18409,18410,18411,18413],{},"You're going to have to deploy at some point. When you do, I strongly recommend ",[197,18412,12359],{"href":7120},". I have had a great experience with them. Great for Laravel in particular.",[5594,18415,18416],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":262,"searchDepth":514,"depth":514,"links":18418},[18419],{"id":17414,"depth":514,"text":17415,"children":18420},[18421,18422,18423,18424,18425,18426,18427,18428],{"id":17424,"depth":520,"text":17425},{"id":17469,"depth":520,"text":17470},{"id":17606,"depth":520,"text":17607},{"id":17868,"depth":520,"text":17869},{"id":18295,"depth":520,"text":18296},{"id":18302,"depth":520,"text":18303},{"id":18393,"depth":520,"text":18394},{"id":18406,"depth":520,"text":18407},[7758,7759],[7761,7762],"2022-09-23T00:00:00.000Z","How to use roles and permissions in a Laravel Jetstream (Inertiajs) application using the Spatie Permission package.",{"src":18434},"/images/wp/featured-roles-and-permissions-in-laravel-jetstream-inertiajs-using-spatie-packageRoles-and-Permissions-youtube-thumbnail.webp",{},{"title":101,"description":18437,"ogTitle":101,"ogDescription":18437,"twitterCard":576},"Roles and permissions in Laravel Jetstream (Inertiajs). Use Spatie Permission package to display content depending on user role & permission","bvHUEAoW1T044Rwx3o5pORSNg9w69RIPZYH8ZXQNY3I",{"id":18440,"title":109,"archived":175,"authors":18441,"badge":18444,"body":18445,"categories":18837,"categorySlugs":18838,"date":18839,"description":18840,"extension":538,"image":18841,"meta":18843,"navigation":542,"path":110,"schemaOrg":4854,"seo":18844,"stem":111,"__hash__":18848},"posts/3.blog/seeding-database-in-laravel.md",[18442],{"name":178,"to":179,"avatar":18443},{"src":181},{"label":17409},{"type":185,"value":18446,"toc":18825},[18447,18451,18454,18823],[188,18448,18450],{"id":18449},"what-is-database-seeding-in-laravel","What is database seeding in Laravel?",[193,18452,18453],{},"Seeding your database in your Laravel application can be very useful. Database seeding is the process of programatically filling your database with data. It is commonly done during development to give your application dummy data to work with, or to insert data that you will always want in your database such as a specific set of users.",[4875,18455,18457,18461,18464,18470,18474,18477,18493,18500,18504,18507,18680,18684,18691,18695,18698,18702,18705,18722,18725,18729,18733,18744,18796,18800,18808,18820],{"video-id":18456},"JUxARqO3CZw",[188,18458,18460],{"id":18459},"what-we-are-going-to-do","What we are going to do",[193,18462,18463],{},"In this guide we are going to seed our Laravel database with an initial set of users. We are going to create 2 users, one called Admin and one called John. These initial users won't have any specific roles or permissions assigned to them, this will be looked at in the next guide. For now we are just going to show how to create the users using a Laravel seeder.",[193,18465,18466],{},[265,18467],{"alt":18468,"src":18469},"seeding database in Laravel","https://codingoblin.com/wp-content/uploads/2022/09/884y3h.jpg",[188,18471,18473],{"id":18472},"generate-seeder","Generate Seeder",[193,18475,18476],{},"Generating the Laravel seeder is simple. Simply run the following artisan command:",[5190,18478,18480],{"className":7218,"code":18479,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan make:seeder UserSeeder\n\n",[5182,18481,18482],{"__ignoreMap":262},[3736,18483,18484,18486,18488,18490],{"class":5199,"line":5200},[3736,18485,7706],{"class":7228},[3736,18487,7709],{"class":5236},[3736,18489,17640],{"class":5236},[3736,18491,18492],{"class":5236}," UserSeeder\n",[193,18494,18495,18496,18499],{},"Running the above command will create a new file called UserSeeder.php, which can now be seen in ",[5182,18497,18498],{},"/database/seeders/UserSeeder.php",". We will edit this file shortly.",[188,18501,18503],{"id":18502},"create-users-logic","Create Users Logic",[193,18505,18506],{},"Add the following to our newly created UserSeeder.php file:",[5190,18508,18510],{"className":11050,"code":18509,"filename":17886,"language":7706,"meta":262,"style":262},"\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\Hash;\nuse App\\Models\\User;\n\nclass UserSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        //\n        $users = [\n            [\n                'name' => 'Admin',\n                'email' => 'admin@codingoblin.com',\n                'password' => 'password'\n            ],\n            [\n                'name' => 'John',\n                'email' => 'john@codingoblin.com',\n                'password' => 'password2'\n            ]\n        ];\n\n        foreach($users as $user) {\n            User::create([\n                'name' => $user['name'],\n                'email' => $user['email'],\n                'password' => Hash::make($user['password']),\n            ]);\n        }\n    }\n}\n\n",[5182,18511,18512,18516,18520,18524,18529,18533,18538,18543,18547,18552,18556,18560,18565,18569,18573,18577,18581,18585,18589,18593,18597,18601,18605,18610,18614,18618,18622,18626,18631,18635,18639,18643,18647,18652,18656,18660,18664,18668,18672,18676],{"__ignoreMap":262},[3736,18513,18514],{"class":5199,"line":5200},[3736,18515,5215],{"emptyLinePlaceholder":542},[3736,18517,18518],{"class":5199,"line":514},[3736,18519,18037],{},[3736,18521,18522],{"class":5199,"line":520},[3736,18523,5215],{"emptyLinePlaceholder":542},[3736,18525,18526],{"class":5199,"line":5244},[3736,18527,18528],{},"use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\n",[3736,18530,18531],{"class":5199,"line":5265},[3736,18532,18051],{},[3736,18534,18535],{"class":5199,"line":5292},[3736,18536,18537],{},"use Illuminate\\Support\\Facades\\Hash;\n",[3736,18539,18540],{"class":5199,"line":5302},[3736,18541,18542],{},"use App\\Models\\User;\n",[3736,18544,18545],{"class":5199,"line":5312},[3736,18546,5215],{"emptyLinePlaceholder":542},[3736,18548,18549],{"class":5199,"line":5322},[3736,18550,18551],{},"class UserSeeder extends Seeder\n",[3736,18553,18554],{"class":5199,"line":5327},[3736,18555,5358],{},[3736,18557,18558],{"class":5199,"line":5340},[3736,18559,18079],{},[3736,18561,18562],{"class":5199,"line":5361},[3736,18563,18564],{},"     * Run the database seeds.\n",[3736,18566,18567],{"class":5199,"line":5373},[3736,18568,18089],{},[3736,18570,18571],{"class":5199,"line":5382},[3736,18572,18094],{},[3736,18574,18575],{"class":5199,"line":6676},[3736,18576,18099],{},[3736,18578,18579],{"class":5199,"line":6681},[3736,18580,18104],{},[3736,18582,18583],{"class":5199,"line":6695},[3736,18584,9208],{},[3736,18586,18587],{"class":5199,"line":6721},[3736,18588,17901],{},[3736,18590,18591],{"class":5199,"line":6747},[3736,18592,17906],{},[3736,18594,18595],{"class":5199,"line":6753},[3736,18596,17911],{},[3736,18598,18599],{"class":5199,"line":6767},[3736,18600,17916],{},[3736,18602,18603],{"class":5199,"line":6772},[3736,18604,17921],{},[3736,18606,18607],{"class":5199,"line":6779},[3736,18608,18609],{},"                'password' => 'password'\n",[3736,18611,18612],{"class":5199,"line":6784},[3736,18613,17936],{},[3736,18615,18616],{"class":5199,"line":6805},[3736,18617,17911],{},[3736,18619,18620],{"class":5199,"line":6818},[3736,18621,17945],{},[3736,18623,18624],{"class":5199,"line":6825},[3736,18625,17950],{},[3736,18627,18628],{"class":5199,"line":13363},[3736,18629,18630],{},"                'password' => 'password2'\n",[3736,18632,18633],{"class":5199,"line":13368},[3736,18634,17965],{},[3736,18636,18637],{"class":5199,"line":13374},[3736,18638,13343],{},[3736,18640,18641],{"class":5199,"line":13379},[3736,18642,5215],{"emptyLinePlaceholder":542},[3736,18644,18645],{"class":5199,"line":13384},[3736,18646,17978],{},[3736,18648,18649],{"class":5199,"line":13389},[3736,18650,18651],{},"            User::create([\n",[3736,18653,18654],{"class":5199,"line":13395},[3736,18655,17988],{},[3736,18657,18658],{"class":5199,"line":13401},[3736,18659,17993],{},[3736,18661,18662],{"class":5199,"line":13406},[3736,18663,17998],{},[3736,18665,18666],{"class":5199,"line":13412},[3736,18667,18003],{},[3736,18669,18670],{"class":5199,"line":13418},[3736,18671,6750],{},[3736,18673,18674],{"class":5199,"line":13424},[3736,18675,9317],{},[3736,18677,18678],{"class":5199,"line":13430},[3736,18679,12122],{},[219,18681,18683],{"id":18682},"a-closer-look","A closer look",[193,18685,18686,18687,18690],{},"If we look at what we have just put into our new UserSeeder.php file, we can see that we have put the bulk of code into the ",[5182,18688,18689],{},"run()"," function. The code in this function is what gets run when we call this seeder. In our example we have put the logic to create new users. Our code simply loops over an array of users and creates a new user on each loop iteration.",[188,18692,18694],{"id":18693},"running-laravel-seeders","Running Laravel seeders",[193,18696,18697],{},"When it comes to running our Laravel seeders, we have a couple of options. We can either run each individual seeder separately or run them all together at the same time. In our example we only have one seeder, the UserSeeder, but I will demonstrate how to do each method.",[219,18699,18701],{"id":18700},"running-each-laravel-seeder-separately","Running each Laravel seeder separately",[193,18703,18704],{},"To run each seeder separately, simple run the following command in the terminal. Class equals the name of our seeder.",[5190,18706,18708],{"className":7218,"code":18707,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan db:seed --class=UserSeeder\n\n",[5182,18709,18710],{"__ignoreMap":262},[3736,18711,18712,18714,18716,18719],{"class":5199,"line":5200},[3736,18713,7706],{"class":7228},[3736,18715,7709],{"class":5236},[3736,18717,18718],{"class":5236}," db:seed",[3736,18720,18721],{"class":5236}," --class=UserSeeder\n",[193,18723,18724],{},"At this point you have seeded your Laravel database with users! Keep reading to see how to run all your seeders with one command.",[219,18726,18728],{"id":18727},"running-all-laravel-seeders-together-with-one-artisan-command","Running all Laravel seeders together with one artisan command",[3849,18730,18732],{"id":18731},"add-our-seeder-to-databaseseederphp","Add our seeder to DatabaseSeeder.php",[193,18734,18735,18736,18738,18739,18741,18742,13473],{},"If we want to run all the Laravel seeders that we have created with one command, we need to add each seeder to the ",[5182,18737,18026],{}," file. Open your ",[5182,18740,18026],{}," file and add the UserSeeder to the top of the file, also amend the ",[5182,18743,18689],{},[5190,18745,18747],{"className":11050,"code":18746,"filename":18026,"language":7706,"meta":262,"style":262},"\nuse Database\\Seeders\\UserSeeder;\n\n...\n\npublic function run()\n{\n     $this->call([\n        UserSeeder::class,\n    ]);\n}\n\n",[5182,18748,18749,18753,18757,18761,18765,18769,18773,18777,18782,18787,18792],{"__ignoreMap":262},[3736,18750,18751],{"class":5199,"line":5200},[3736,18752,5215],{"emptyLinePlaceholder":542},[3736,18754,18755],{"class":5199,"line":514},[3736,18756,18056],{},[3736,18758,18759],{"class":5199,"line":520},[3736,18760,5215],{"emptyLinePlaceholder":542},[3736,18762,18763],{"class":5199,"line":5244},[3736,18764,11059],{},[3736,18766,18767],{"class":5199,"line":5265},[3736,18768,5215],{"emptyLinePlaceholder":542},[3736,18770,18771],{"class":5199,"line":5292},[3736,18772,17697],{},[3736,18774,18775],{"class":5199,"line":5302},[3736,18776,5358],{},[3736,18778,18779],{"class":5199,"line":5312},[3736,18780,18781],{},"     $this->call([\n",[3736,18783,18784],{"class":5199,"line":5322},[3736,18785,18786],{},"        UserSeeder::class,\n",[3736,18788,18789],{"class":5199,"line":5327},[3736,18790,18791],{},"    ]);\n",[3736,18793,18794],{"class":5199,"line":5340},[3736,18795,12122],{},[3849,18797,18799],{"id":18798},"run-the-artisan-command","Run the artisan command",[193,18801,18802,18803,18805,18806,16338],{},"Once you have amended your ",[5182,18804,18026],{}," file, simply run the following command to run all seeders listed in the ",[5182,18807,18026],{},[5190,18809,18810],{"className":7218,"code":18142,"filename":7220,"language":7221,"meta":262,"style":262},[5182,18811,18812],{"__ignoreMap":262},[3736,18813,18814,18816,18818],{"class":5199,"line":5200},[3736,18815,7706],{"class":7228},[3736,18817,7709],{"class":5236},[3736,18819,18153],{"class":5236},[193,18821,18822],{},"Notice that the command to run all seeders and the command to run individual seeders is the same! The only difference between the two is that the specific class is specified in the command to run individual seeders.",[5594,18824,12370],{},{"title":262,"searchDepth":514,"depth":514,"links":18826},[18827,18828,18829,18830,18833],{"id":18449,"depth":514,"text":18450},{"id":18459,"depth":514,"text":18460},{"id":18472,"depth":514,"text":18473},{"id":18502,"depth":514,"text":18503,"children":18831},[18832],{"id":18682,"depth":520,"text":18683},{"id":18693,"depth":514,"text":18694,"children":18834},[18835,18836],{"id":18700,"depth":520,"text":18701},{"id":18727,"depth":520,"text":18728},[7758,7759],[7761,7762],"2022-09-19T00:00:00.000Z","How to seed your database in Laravel. Using Laravel Jetstream with Inertia.js we will seed our database with users. Guide to Laravel seeding.",{"src":18842},"/images/wp/featured-seeding-database-in-laravelDB-Seed-youtube-thumbnail.webp",{},{"title":18845,"description":18846,"ogTitle":18847,"ogDescription":18840,"twitterCard":576},"Seeding database in Laravel - Codingoblin","How to seed your database in Laravel. Using Laravel Jetstream with Inertia.js we will seed our database with users. Guide to Laravel seeding","Seed database in Laravel","0QTr-XX01ixug2y_wupw4kIbPWwLBdYb7nmKPAQ8yns",{"id":18850,"title":77,"archived":175,"authors":18851,"badge":18854,"body":18855,"categories":19126,"categorySlugs":19127,"date":19128,"description":19129,"extension":538,"image":19130,"meta":19132,"navigation":542,"path":78,"schemaOrg":4854,"seo":19133,"stem":79,"__hash__":19136},"posts/3.blog/laravel-jetstream-with-inertiajs.md",[18852],{"name":178,"to":179,"avatar":18853},{"src":181},{"label":17409},{"type":185,"value":18856,"toc":19123},[18857,18861,18864,19120],[188,18858,18860],{"id":18859},"how-to-setup-laravel-jetstream-with-inertiajs-on-mamp-localhost","How to setup Laravel Jetstream with Inertia.js on MAMP localhost",[193,18862,18863],{},"Getting setup with Laravel Jetstream and Inertiajs is a simple process and can be done in 5 minutes. All code for this tutorial can be found below the video.",[4875,18865,18867,19108,19111,19114],{"video-id":18866},"jJIGNg-1CYs",[215,18868,18869,18873,18876,18894,18897,18901,18904,18915,18918,18932,18935,18939,18942,18959,18962,18973,18976,18989,18992,18996,18999,19005,19008,19014,19018,19021,19048,19052,19055,19067,19070,19074,19077,19091,19094],{"level":217},[219,18870,18872],{"id":18871},"install-laravel","Install Laravel",[193,18874,18875],{},"The first thing you need to do is install Laravel. In the terminal go to the folder where you want to install your Laravel Jetstream project. Run the following command, replacing 'business_tool' with the name you want to give your project:",[5190,18877,18879],{"className":7218,"code":18878,"filename":7220,"language":7221,"meta":262,"style":262},"composer create-project laravel/laravel business_tool\n\n",[5182,18880,18881],{"__ignoreMap":262},[3736,18882,18883,18885,18888,18891],{"class":5199,"line":5200},[3736,18884,7568],{"class":7228},[3736,18886,18887],{"class":5236}," create-project",[3736,18889,18890],{"class":5236}," laravel/laravel",[3736,18892,18893],{"class":5236}," business_tool\n",[193,18895,18896],{},"Let the installation run, it may take a minute or so depending on the speed of your internet.",[219,18898,18900],{"id":18899},"install-jetstream","Install Jetstream",[193,18902,18903],{},"Now we have Laravel installed, we need to install Jetstream. Navigate to the Laravel project you just created in the terminal (replace 'business_tool' with the name of your project):",[5190,18905,18907],{"className":7218,"code":18906,"filename":7220,"language":7221,"meta":262,"style":262},"cd business_tool\n\n",[5182,18908,18909],{"__ignoreMap":262},[3736,18910,18911,18913],{"class":5199,"line":5200},[3736,18912,17344],{"class":5351},[3736,18914,18893],{"class":5236},[193,18916,18917],{},"Then run the following command:",[5190,18919,18921],{"className":7218,"code":18920,"filename":7220,"language":7221,"meta":262,"style":262},"composer require laravel/jetstream\n\n",[5182,18922,18923],{"__ignoreMap":262},[3736,18924,18925,18927,18929],{"class":5199,"line":5200},[3736,18926,7568],{"class":7228},[3736,18928,17495],{"class":5236},[3736,18930,18931],{"class":5236}," laravel/jetstream\n",[193,18933,18934],{},"Again, let the installation happen, it might take a while.",[219,18936,18938],{"id":18937},"install-inertiajs","Install Inertia.js",[193,18940,18941],{},"Run the following command to install Inertia.js:",[5190,18943,18945],{"className":7218,"code":18944,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan jetstream:install inertia\n\n",[5182,18946,18947],{"__ignoreMap":262},[3736,18948,18949,18951,18953,18956],{"class":5199,"line":5200},[3736,18950,7706],{"class":7228},[3736,18952,7709],{"class":5236},[3736,18954,18955],{"class":5236}," jetstream:install",[3736,18957,18958],{"class":5236}," inertia\n",[193,18960,18961],{},"Now run:",[5190,18963,18965],{"className":7218,"code":18964,"filename":7220,"language":7221,"meta":262,"style":262},"npm install\n\n",[5182,18966,18967],{"__ignoreMap":262},[3736,18968,18969,18971],{"class":5199,"line":5200},[3736,18970,7583],{"class":7228},[3736,18972,7578],{"class":5236},[193,18974,18975],{},"Let it install then run:",[5190,18977,18979],{"className":7218,"code":18978,"filename":7220,"language":7221,"meta":262,"style":262},"npm run build\n\n",[5182,18980,18981],{"__ignoreMap":262},[3736,18982,18983,18985,18987],{"class":5199,"line":5200},[3736,18984,7583],{"class":7228},[3736,18986,7598],{"class":5236},[3736,18988,7601],{"class":5236},[193,18990,18991],{},"Let the build happen. We are nearly there!",[219,18993,18995],{"id":18994},"create-a-database-in-mamp","Create a database in MAMP",[193,18997,18998],{},"Now we need to create a database in MAMP so that we can use our new Laravel Jetstream installation on our localhost. Open the MAMP WebStart page and navigate to \"phpMyAdmin\"",[193,19000,19001],{},[265,19002],{"alt":19003,"src":19004},"phpMyAdmin","https://codingoblin.com/wp-content/uploads/2022/09/Screenshot-2022-09-17-at-17.42.31-300x201.png",[193,19006,19007],{},"Now give your database a name and click create:",[193,19009,19010],{},[265,19011],{"alt":19012,"src":19013},"Create database","https://codingoblin.com/wp-content/uploads/2022/09/Screenshot-2022-09-17-at-17.43.10-300x99.png",[219,19015,19017],{"id":19016},"edit-your-env-file","Edit your .env file",[193,19019,19020],{},"We now need to edit the .env file in your project. Go ahead and open up the file. Find where the database configurations are and enter the following (remember to replace \"business_tool\" with the name of the database you just created). Add \"DB_SOCKET\" and make it equal to the the socket displayed on the MAMP WebStart page under MySQL.",[5190,19022,19026],{"className":19023,"code":19024,"filename":7666,"language":19025,"meta":262,"style":262},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","DB_DATABASE=business_tool\nDB_USERNAME=root\nDB_PASSWORD=root\nDB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock\n\n","env",[5182,19027,19028,19033,19038,19043],{"__ignoreMap":262},[3736,19029,19030],{"class":5199,"line":5200},[3736,19031,19032],{},"DB_DATABASE=business_tool\n",[3736,19034,19035],{"class":5199,"line":514},[3736,19036,19037],{},"DB_USERNAME=root\n",[3736,19039,19040],{"class":5199,"line":520},[3736,19041,19042],{},"DB_PASSWORD=root\n",[3736,19044,19045],{"class":5199,"line":5244},[3736,19046,19047],{},"DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock\n",[219,19049,19051],{"id":19050},"run-the-migration-command","Run the migration command",[193,19053,19054],{},"We now need to run the migration artisan command:",[5190,19056,19057],{"className":7218,"code":17539,"filename":7220,"language":7221,"meta":262,"style":262},[5182,19058,19059],{"__ignoreMap":262},[3736,19060,19061,19063,19065],{"class":5199,"line":5200},[3736,19062,7706],{"class":7228},[3736,19064,7709],{"class":5236},[3736,19066,7712],{"class":5236},[193,19068,19069],{},"Your database should now be up and running. We just have a couple more commands to run and we will be setup with Laravel Jetstream and inertiajs!",[219,19071,19073],{"id":19072},"last-commands-to-complete-the-setup-of-laravel-jetstream-with-inertiajs","Last commands to complete the setup of Laravel Jetstream with Inertiajs",[193,19075,19076],{},"We now need to run a couple of commands to get our Jetstream app going:",[5190,19078,19080],{"className":7218,"code":19079,"filename":7220,"language":7221,"meta":262,"style":262},"php artisan serve\n\n",[5182,19081,19082],{"__ignoreMap":262},[3736,19083,19084,19086,19088],{"class":5199,"line":5200},[3736,19085,7706],{"class":7228},[3736,19087,7709],{"class":5236},[3736,19089,19090],{"class":5236}," serve\n",[193,19092,19093],{},"Now open another terminal window. This is important because the previous command and the next command need to be running simultaneously . In the new terminal window run:",[5190,19095,19097],{"className":7218,"code":19096,"filename":7220,"language":7221,"meta":262,"style":262},"npm run dev\n\n",[5182,19098,19099],{"__ignoreMap":262},[3736,19100,19101,19103,19105],{"class":5199,"line":5200},[3736,19102,7583],{"class":7228},[3736,19104,7598],{"class":5236},[3736,19106,19107],{"class":5236}," dev\n",[3849,19109,19110],{"id":8493},"You're good to go!",[193,19112,19113],{},"Now you are all set up! Head over to localhost:8000 and you should see your Laravel Jetstream app with inertiajs all setup!",[193,19115,19116],{},[265,19117],{"alt":19118,"src":19119},"Laravel Jetstream App","https://codingoblin.com/wp-content/uploads/2022/09/Screenshot-2022-09-17-at-18.07.18-300x158.png",[5594,19121,19122],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":262,"searchDepth":514,"depth":514,"links":19124},[19125],{"id":18859,"depth":514,"text":18860},[7758,7759],[7761,7762],"2022-09-17T00:00:00.000Z","How to setup Laravel Jetstream with Inertiajs on localhost (MAMP)",{"src":19131},"/images/wp/featured-laravel-jetstream-with-inertiajsLaravel-Jetstream-Inertiajs-Blog-Post-Thumbnail-1.webp",{},{"title":19134,"description":19135,"ogTitle":19134,"ogDescription":19135,"twitterCard":576},"Laravel Jetstream with inertiajs on MAMP - [2 MINUTE SETUP]","Quickly setup Laravel Jetstream with Inertiajs. Localhost setup guide using MAMP. Use Vue.js for your Laravel views.","FEyuVY45IM_7CaHicnTYyrx7zDW9Qcoc_0J9LRSFTOs",{"id":19138,"title":73,"archived":175,"authors":19139,"badge":19142,"body":19143,"categories":19688,"categorySlugs":19689,"date":19690,"description":19691,"extension":538,"image":19692,"meta":19694,"navigation":542,"path":74,"schemaOrg":4854,"seo":19695,"stem":75,"__hash__":19698},"posts/3.blog/install-tailwindcss-in-wordpress-theme.md",[19140],{"name":178,"to":179,"avatar":19141},{"src":181},{"label":11994},{"type":185,"value":19144,"toc":19683},[19145,19149,19152,19680],[188,19146,19148],{"id":19147},"how-to-install-and-setup-tailwindcss-in-your-wordpress-theme","How to install and setup Tailwindcss in your WordPress theme",[193,19150,19151],{},"In this post we are going to look at how to setup tailwindcss in your WordPress theme. This is an extremely easy process but for some reason there aren't any decent setup guides for WordPress out there. Follow along in the video below, all the code required can be found below the video!",[4875,19153,19155,19654,19656,19667,19673,19677],{"video-id":19154},"_8iy0Gfl_9E",[215,19156,19157,19161,19164,19168,19176,19182,19185,19189,19197,19201,19204,19230,19236,19243,19343,19346,19396,19399,19494,19498,19507,19540,19544,19547,19573,19579,19583,19596,19634],{"level":217},[219,19158,19160],{"id":19159},"create-a-new-theme-optional","Create a new theme (optional)",[193,19162,19163],{},"If you already have a theme setup, move on to step 2. If you don't have your own theme already setup, follow these quick steps.",[3849,19165,19167],{"id":19166},"download-a-starter-theme","Download a starter theme",[193,19169,19170,19171,19175],{},"Head to ",[197,19172,19174],{"href":12016,"rel":19173},[317],"underscores.me"," and download a starter theme. Once this you have downloaded the starter theme, install it on your local WordPress installation. Open the theme in your code editor and you are ready to get started.",[193,19177,19178],{},[265,19179],{"alt":19180,"src":19181},"Install tailwindcss in wordpress - underscores starter theme","https://codingoblin.com/wp-content/uploads/2022/09/Screenshot-2023-10-31-at-10.44.47-1024x422.webp",[193,19183,19184],{},"Underscores starter theme for installing Tailwindcss in WordPress",[219,19186,19188],{"id":19187},"install-tailwindcss-in-our-wordpress-theme","Install tailwindcss in our WordPress theme",[193,19190,19191,19192,19196],{},"Now we are ready to install tailwindcss in our WordPress theme! Head over to the ",[197,19193,19195],{"href":5162,"rel":19194},[317],"tailwindcss installation"," page, we are going to be following the instructions found here.",[3849,19198,19200],{"id":19199},"dont-be-scared-of-the-terminal","Don't be scared of the terminal!",[193,19202,19203],{},"In the terminal, navigate to the root folder of your WordPress theme. Run the following commands:",[5190,19205,19207],{"className":7218,"code":19206,"filename":7220,"language":7221,"meta":262,"style":262},"npm install -D tailwindcss\nnpx tailwindcss init\n\n",[5182,19208,19209,19221],{"__ignoreMap":262},[3736,19210,19211,19213,19216,19218],{"class":5199,"line":5200},[3736,19212,7583],{"class":7228},[3736,19214,19215],{"class":5236}," install",[3736,19217,12062],{"class":5236},[3736,19219,19220],{"class":5236}," tailwindcss\n",[3736,19222,19223,19225,19228],{"class":5199,"line":514},[3736,19224,12310],{"class":7228},[3736,19226,19227],{"class":5236}," tailwindcss",[3736,19229,17331],{"class":5236},[193,19231,19232,19233,19235],{},"You will now see a new file in your theme's directory called ",[5182,19234,12073],{},". We need to edit this file, this bit is important and where most people go wrong. We need to enter the paths to the files that will contain tailwind classes in our theme. This will depend on the structure of our theme, but the I will put 2 examples below to help you understand what you need to put.",[193,19237,19238,19239,19242],{},"If we just want to use tailwind classes in our ",[5182,19240,19241],{},"header.php"," file, and this file is stored in the route of our theme, then we will put the following:",[5190,19244,19246],{"className":12071,"code":19245,"filename":12073,"language":12074,"meta":262,"style":262},"\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"./header.php\"],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n\n",[5182,19247,19248,19252,19275,19283,19303,19312,19322,19327,19339],{"__ignoreMap":262},[3736,19249,19250],{"class":5199,"line":5200},[3736,19251,5215],{"emptyLinePlaceholder":542},[3736,19253,19254,19257,19260,19264,19266,19270,19272],{"class":5199,"line":514},[3736,19255,19256],{"class":11550},"/** ",[3736,19258,19259],{"class":5518},"@",[3736,19261,19263],{"class":19262},"s6hCs","type",[3736,19265,12496],{"class":5518},[3736,19267,19269],{"class":19268},"sFweD","import('tailwindcss').Config",[3736,19271,5376],{"class":5518},[3736,19273,19274],{"class":11550}," */\n",[3736,19276,19277,19279,19281],{"class":5199,"line":520},[3736,19278,12081],{"class":5203},[3736,19280,6731],{"class":5203},[3736,19282,6673],{"class":5203},[3736,19284,19285,19288,19290,19292,19294,19297,19299,19301],{"class":5199,"line":5244},[3736,19286,19287],{"class":5207},"  content",[3736,19289,5367],{"class":5203},[3736,19291,12100],{"class":5283},[3736,19293,5233],{"class":5203},[3736,19295,19296],{"class":5236},"./header.php",[3736,19298,5233],{"class":5203},[3736,19300,12605],{"class":5283},[3736,19302,9225],{"class":5203},[3736,19304,19305,19308,19310],{"class":5199,"line":5265},[3736,19306,19307],{"class":5207},"  theme",[3736,19309,5367],{"class":5203},[3736,19311,6673],{"class":5203},[3736,19313,19314,19317,19319],{"class":5199,"line":5292},[3736,19315,19316],{"class":5207},"    extend",[3736,19318,5367],{"class":5203},[3736,19320,19321],{"class":5203}," {},\n",[3736,19323,19324],{"class":5199,"line":5302},[3736,19325,19326],{"class":5203},"  },\n",[3736,19328,19329,19332,19334,19337],{"class":5199,"line":5312},[3736,19330,19331],{"class":5207},"  plugins",[3736,19333,5367],{"class":5203},[3736,19335,19336],{"class":5283}," []",[3736,19338,9225],{"class":5203},[3736,19340,19341],{"class":5199,"line":5322},[3736,19342,12122],{"class":5203},[193,19344,19345],{},"A more realistic example would involve files that are within folders. Lets say we have a folder structure that looks like this:",[19347,19348,19351,19360,19369,19378,19387],"code-tree",{":ui":19349,"default-value":19350},"{ 'bg-red-500' }","template-parts/",[5190,19352,19354],{"className":11050,"code":262,"filename":19353,"language":7706,"meta":262,"style":262},"404.php",[5182,19355,19356],{"__ignoreMap":262},[3736,19357,19358],{"class":5199,"line":5200},[3736,19359,262],{},[5190,19361,19363],{"className":11050,"code":262,"filename":19362,"language":7706,"meta":262,"style":262},"archive.php",[5182,19364,19365],{"__ignoreMap":262},[3736,19366,19367],{"class":5199,"line":5200},[3736,19368,262],{},[5190,19370,19372],{"className":11050,"code":262,"filename":19371,"language":7706,"meta":262,"style":262},"comments.php",[5182,19373,19374],{"__ignoreMap":262},[3736,19375,19376],{"class":5199,"line":5200},[3736,19377,262],{},[5190,19379,19381],{"className":11050,"code":262,"filename":19380,"language":7706,"meta":262,"style":262},"template-parts/content-none.php",[5182,19382,19383],{"__ignoreMap":262},[3736,19384,19385],{"class":5199,"line":5200},[3736,19386,262],{},[5190,19388,19390],{"className":11050,"code":262,"filename":19389,"language":7706,"meta":262,"style":262},"template-parts/content-page.php",[5182,19391,19392],{"__ignoreMap":262},[3736,19393,19394],{"class":5199,"line":5200},[3736,19395,262],{},[193,19397,19398],{},"In this example we would want to use wildcards to make sure that all the files are covered. This would look like this:",[5190,19400,19402],{"className":12071,"code":19401,"filename":12073,"language":12074,"meta":262,"style":262},"\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"./template-parts/*.{php,html,js}\",\"./*.{php,html,js}\"],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n\n",[5182,19403,19404,19408,19424,19432,19460,19468,19476,19480,19490],{"__ignoreMap":262},[3736,19405,19406],{"class":5199,"line":5200},[3736,19407,5215],{"emptyLinePlaceholder":542},[3736,19409,19410,19412,19414,19416,19418,19420,19422],{"class":5199,"line":514},[3736,19411,19256],{"class":11550},[3736,19413,19259],{"class":5518},[3736,19415,19263],{"class":19262},[3736,19417,12496],{"class":5518},[3736,19419,19269],{"class":19268},[3736,19421,5376],{"class":5518},[3736,19423,19274],{"class":11550},[3736,19425,19426,19428,19430],{"class":5199,"line":520},[3736,19427,12081],{"class":5203},[3736,19429,6731],{"class":5203},[3736,19431,6673],{"class":5203},[3736,19433,19434,19436,19438,19440,19442,19445,19447,19449,19451,19454,19456,19458],{"class":5199,"line":5244},[3736,19435,19287],{"class":5207},[3736,19437,5367],{"class":5203},[3736,19439,12100],{"class":5283},[3736,19441,5233],{"class":5203},[3736,19443,19444],{"class":5236},"./template-parts/*.{php,html,js}",[3736,19446,5233],{"class":5203},[3736,19448,12501],{"class":5203},[3736,19450,5233],{"class":5203},[3736,19452,19453],{"class":5236},"./*.{php,html,js}",[3736,19455,5233],{"class":5203},[3736,19457,12605],{"class":5283},[3736,19459,9225],{"class":5203},[3736,19461,19462,19464,19466],{"class":5199,"line":5265},[3736,19463,19307],{"class":5207},[3736,19465,5367],{"class":5203},[3736,19467,6673],{"class":5203},[3736,19469,19470,19472,19474],{"class":5199,"line":5292},[3736,19471,19316],{"class":5207},[3736,19473,5367],{"class":5203},[3736,19475,19321],{"class":5203},[3736,19477,19478],{"class":5199,"line":5302},[3736,19479,19326],{"class":5203},[3736,19481,19482,19484,19486,19488],{"class":5199,"line":5312},[3736,19483,19331],{"class":5207},[3736,19485,5367],{"class":5203},[3736,19487,19336],{"class":5283},[3736,19489,9225],{"class":5203},[3736,19491,19492],{"class":5199,"line":5322},[3736,19493,12122],{"class":5203},[3849,19495,19497],{"id":19496},"create-the-css-file","Create the CSS file",[193,19499,19500,19501,19503,19504,19506],{},"In the route folder of your theme, create a new folder called ",[5182,19502,5276],{},", in this new folder create a file called ",[5182,19505,16004],{},". In this new file paste the following and save the file:",[5190,19508,19510],{"className":16071,"code":19509,"filename":16004,"language":16073,"meta":262,"style":262},"@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n",[5182,19511,19512,19522,19531],{"__ignoreMap":262},[3736,19513,19514,19517,19520],{"class":5199,"line":5200},[3736,19515,19516],{"class":5518},"@tailwind",[3736,19518,19519],{"class":5283}," base",[3736,19521,6764],{"class":5203},[3736,19523,19524,19526,19529],{"class":5199,"line":514},[3736,19525,19516],{"class":5518},[3736,19527,19528],{"class":5283}," components",[3736,19530,6764],{"class":5203},[3736,19532,19533,19535,19538],{"class":5199,"line":520},[3736,19534,19516],{"class":5518},[3736,19536,19537],{"class":5283}," utilities",[3736,19539,6764],{"class":5203},[3849,19541,19543],{"id":19542},"build-your-css","Build your CSS",[193,19545,19546],{},"Back in the terminal, run the following command:",[5190,19548,19550],{"className":7218,"code":19549,"filename":7220,"language":7221,"meta":262,"style":262},"npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch\n\n",[5182,19551,19552],{"__ignoreMap":262},[3736,19553,19554,19556,19558,19561,19564,19567,19570],{"class":5199,"line":5200},[3736,19555,12310],{"class":7228},[3736,19557,19227],{"class":5236},[3736,19559,19560],{"class":5236}," -i",[3736,19562,19563],{"class":5236}," ./src/input.css",[3736,19565,19566],{"class":5236}," -o",[3736,19568,19569],{"class":5236}," ./dist/output.css",[3736,19571,19572],{"class":5236}," --watch\n",[193,19574,19575,19576,470],{},"This will create a new folder and file ",[5182,19577,19578],{},"dist/output.css",[3849,19580,19582],{"id":19581},"load-the-css-in-our-theme","Load the CSS in our theme",[193,19584,19585,19586,19589,19590,19592,19593,19595],{},"We now need to load ",[5182,19587,19588],{},"output.css"," in our ",[5182,19591,13141],{}," file. Open ",[5182,19594,13141],{}," and enter the following:",[5190,19597,19599],{"className":11050,"code":19598,"filename":13141,"language":7706,"meta":262,"style":262},"/**\n * Enqueue scripts and styles.\n */\nfunction cg_your_theme_scripts() {\n    wp_enqueue_style( 'output', get_template_directory_uri() . '/dist/output.css', array() );\n}\nadd_action( 'wp_enqueue_scripts', 'cg_your_theme_scripts' );\n\n",[5182,19600,19601,19606,19611,19615,19620,19625,19629],{"__ignoreMap":262},[3736,19602,19603],{"class":5199,"line":5200},[3736,19604,19605],{},"/**\n",[3736,19607,19608],{"class":5199,"line":514},[3736,19609,19610],{}," * Enqueue scripts and styles.\n",[3736,19612,19613],{"class":5199,"line":520},[3736,19614,19274],{},[3736,19616,19617],{"class":5199,"line":5244},[3736,19618,19619],{},"function cg_your_theme_scripts() {\n",[3736,19621,19622],{"class":5199,"line":5265},[3736,19623,19624],{},"    wp_enqueue_style( 'output', get_template_directory_uri() . '/dist/output.css', array() );\n",[3736,19626,19627],{"class":5199,"line":5292},[3736,19628,12122],{},[3736,19630,19631],{"class":5199,"line":5302},[3736,19632,19633],{},"add_action( 'wp_enqueue_scripts', 'cg_your_theme_scripts' );\n",[193,19635,19636,19637,19640,19641,19644,19645,19647,19648,19653],{},"Your theme will most likely already be using the ",[5182,19638,19639],{},"'wp_enqueue_scripts'"," hook, if this is the case, just add the line ",[5182,19642,19643],{},"wp_enqueue_style( 'output', get_template_directory_uri() . '/dist/output.css', array() );"," to the function that is executed with the ",[5182,19646,19639],{}," hook. The ",[197,19649,19652],{"href":19650,"rel":19651},"https://developer.wordpress.org/reference/functions/wp_enqueue_style/",[317],"WordPress docs"," also show how to do this if you need more clarity.",[3849,19655,8494],{"id":8493},[193,19657,19658,19659,19662,19663,19666],{},"You are now setup and ready to start using tailwindcss classes. At the moment nothing will have changed as we haven't used any classes in our theme files. Go ahead and give an element a ",[5182,19660,19661],{},"bg-red-500"," class. Make sure ",[5182,19664,19665],{},"npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch"," is still running in the terminal. If everything is set up properly, your element will now have a red background! Pretty nifty. You are now ready to start building some amazing WordPress websites with Tailwind. You might have already guessed it, but this website is built with WordPress and Tailwind.",[193,19668,19669],{},[265,19670],{"alt":19671,"src":19672},"Codingoblin website built with WordPress and Tailwind","https://codingoblin.com/wp-content/uploads/2022/09/Screenshot-2023-12-04-at-08.56.18-1024x629.webp",[219,19674,19676],{"id":19675},"why-use-tailwind-css-with-wordpress","Why use Tailwind CSS with WordPress",[193,19678,19679],{},"You might be wondering why you would want to use Tailwind CSS in WordPress. If this is you, my guess is that you do not have much much experience using Tailwind yet. The reason you would want to use it in your WordPress projects is because it speeds up development massively. I have spoken to developers who are against using Tailwind as they say it makes the markup look cluttered and they don't like the idea of learning something new. But trust me, once you get used to it you will see how easy it can make your life. The class names are intuitive so learning to use it is easy and everything just makes sense. Use it to build just one project and I guarantee you you won't look back. So this is why it is a good idea to use Tailwind in WordPress.",[5594,19681,19682],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}html pre.shiki code .sFweD, html code.shiki .sFweD{--shiki-light:#E2931D;--shiki-light-font-style:italic;--shiki-default:#FFCB6B;--shiki-default-font-style:italic;--shiki-dark:#FFCB6B;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":262,"searchDepth":514,"depth":514,"links":19684},[19685],{"id":19147,"depth":514,"text":19148,"children":19686},[19687],{"id":19675,"depth":520,"text":19676},[5609,10193],[5612,10197],"2022-09-07T00:00:00.000Z","Setting up tailwind in WordPress is easy. But there are a few ‘gotchas’ to look out for! Lets look at how to get up and running.",{"src":19693},"/images/wp/featured-install-tailwindcss-in-wordpress-themetailwind-wordpress-2.webp",{},{"title":19696,"description":19697,"ogTitle":19696,"ogDescription":19697,"twitterCard":576},"How to Install Tailwind CSS in WordPress [2026 Guide]","Step by step guide to setting up Tailwind CSS in your WordPress theme. Covers the common gotchas and has all the code you need.","wHgf0ohDadcx1xMwUD_az-ZKVjh0bRor4F-K1xGzgnc",{},1786160822722]